<?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>182227</bug_id>
          
          <creation_ts>2018-01-28 18:37:48 -0800</creation_ts>
          <short_desc>Global objects should be able to use TLCs to allocate from different blocks from each other</short_desc>
          <delta_ts>2018-03-25 10:42:37 -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>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=183995</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>181636</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>aestes</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jfbastien</cc>
    
    <cc>jonlee</cc>
    
    <cc>kangil.han</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rniwa</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1393953</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-28 18:37:48 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393954</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-01-28 18:38:04 -0800</bug_when>
    <thetext>&lt;rdar://problem/36970526&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393955</commentid>
    <comment_count>2</comment_count>
      <attachid>332502</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-28 18:40:11 -0800</bug_when>
    <thetext>Created attachment 332502
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393957</commentid>
    <comment_count>3</comment_count>
      <attachid>332503</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-28 19:39:55 -0800</bug_when>
    <thetext>Created attachment 332503
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393974</commentid>
    <comment_count>4</comment_count>
      <attachid>332508</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-28 22:06:46 -0800</bug_when>
    <thetext>Created attachment 332508
passing some tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1394290</commentid>
    <comment_count>5</comment_count>
      <attachid>332588</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-29 15:22:19 -0800</bug_when>
    <thetext>Created attachment 332588
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1394297</commentid>
    <comment_count>6</comment_count>
      <attachid>332588</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2018-01-29 15:34:48 -0800</bug_when>
    <thetext>Comment on attachment 332588
the patch

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

r=me

&gt; Source/JavaScriptCore/heap/BlockDirectory.cpp:97
&gt; +    }

I don&apos;t understand this loop. What changes on each iteration?

&gt; Source/JavaScriptCore/heap/MarkedBlock.h:237
&gt; +        SecurityOriginToken m_securityOriginToken { 0 };

Is 0 ever a valid token?

&gt; Source/JavaScriptCore/heap/SecurityOriginToken.cpp:36
&gt; +    return WTF::atomicExchangeAdd(&amp;counter, 1) + 1;

Looks like 0 is never valid from this? :-)

&gt; Source/JavaScriptCore/heap/ThreadLocalCache.cpp:35
&gt; +RefPtr&lt;ThreadLocalCache&gt; ThreadLocalCache::create(Heap&amp; heap, SecurityOriginToken securityOriginToken)

It&apos;s weird to pass securityOriginToken in here, since it&apos;s a default param in the header, and IIUC it&apos;s never anything else. Could you just not pass it here, and give it to the ctor call below instead?

&gt; Source/JavaScriptCore/runtime/JSGlobalObject.h:494
&gt; +    JS_EXPORT_PRIVATE explicit JSGlobalObject(VM&amp;, Structure*, const GlobalObjectMethodTable* = 0);

I love how this used both 0 and nullptr.

&gt; Source/JavaScriptCore/runtime/JSGlobalObject.h:900
&gt; +            createThreadLocalCache();

This check-and-create isn&apos;t racy is it? Seems like it can&apos;t if it&apos;s a per-thread thing!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1394409</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-29 19:57:20 -0800</bug_when>
    <thetext>(In reply to JF Bastien from comment #6)
&gt; Comment on attachment 332588 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=332588&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/BlockDirectory.cpp:97
&gt; &gt; +    }
&gt; 
&gt; I don&apos;t understand this loop. What changes on each iteration?

This part:

        size_t blockIndex = allocator.m_allocationCursor++;

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/MarkedBlock.h:237
&gt; &gt; +        SecurityOriginToken m_securityOriginToken { 0 };
&gt; 
&gt; Is 0 ever a valid token?

Yes.  From the GC&apos;s standpoint, the tokens are just for diversity.  0 could mean you don&apos;t care, so you end up in the same pool as everyone else who doesn&apos;t care.  Though right now, all ThreadLocalCaches use a unique token.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/SecurityOriginToken.cpp:36
&gt; &gt; +    return WTF::atomicExchangeAdd(&amp;counter, 1) + 1;
&gt; 
&gt; Looks like 0 is never valid from this? :-)

No, it means that 0 is not equal to any &quot;unique&quot; token.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/ThreadLocalCache.cpp:35
&gt; &gt; +RefPtr&lt;ThreadLocalCache&gt; ThreadLocalCache::create(Heap&amp; heap, SecurityOriginToken securityOriginToken)
&gt; 
&gt; It&apos;s weird to pass securityOriginToken in here, since it&apos;s a default param
&gt; in the header, and IIUC it&apos;s never anything else. Could you just not pass it
&gt; here, and give it to the ctor call below instead?

I could.  This signals the intent that you could select whatever token you like.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSGlobalObject.h:494
&gt; &gt; +    JS_EXPORT_PRIVATE explicit JSGlobalObject(VM&amp;, Structure*, const GlobalObjectMethodTable* = 0);
&gt; 
&gt; I love how this used both 0 and nullptr.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSGlobalObject.h:900
&gt; &gt; +            createThreadLocalCache();
&gt; 
&gt; This check-and-create isn&apos;t racy is it? Seems like it can&apos;t if it&apos;s a
&gt; per-thread thing!

It&apos;s not racy because JSGlobalObject methods can only be called on the main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1394609</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-30 10:22:57 -0800</bug_when>
    <thetext>I ended up changing the ThreadLocalCache creation logic so that WebCore::SecurityOrigin creates it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1394610</commentid>
    <comment_count>9</comment_count>
      <attachid>332666</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-30 10:25:55 -0800</bug_when>
    <thetext>Created attachment 332666
new patch

The JSC part was already reviewed by JF, but I introduced some WebCore changes since then.  Can a WebCore reviewer take a look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1394612</commentid>
    <comment_count>10</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-30 10:27:37 -0800</bug_when>
    <thetext>Attachment 332666 did not pass style-queue:


ERROR: Source/WebCore/ForwardingHeaders/heap/ThreadLocalCache.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
Total errors found: 1 in 26 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>1394725</commentid>
    <comment_count>11</comment_count>
      <attachid>332666</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2018-01-30 13:53:43 -0800</bug_when>
    <thetext>Comment on attachment 332666
new patch

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

r=me on the WebCore part.

&gt; Source/WebCore/bindings/js/JSDOMGlobalObject.cpp:60
&gt; +    : JSGlobalObject(vm, structure, globalObjectMethodTable, threadLocalCache)

I&apos;d WTFMove(threadLocalCache) here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1394726</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-30 13:54:17 -0800</bug_when>
    <thetext>(In reply to Andy Estes from comment #11)
&gt; Comment on attachment 332666 [details]
&gt; new patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=332666&amp;action=review
&gt; 
&gt; r=me on the WebCore part.
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSDOMGlobalObject.cpp:60
&gt; &gt; +    : JSGlobalObject(vm, structure, globalObjectMethodTable, threadLocalCache)
&gt; 
&gt; I&apos;d WTFMove(threadLocalCache) here.

Oh right!  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1394727</commentid>
    <comment_count>13</comment_count>
      <attachid>332666</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-30 13:54:42 -0800</bug_when>
    <thetext>Comment on attachment 332666
new patch

WebCore r=estes, JSC r=jfb.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1394731</commentid>
    <comment_count>14</comment_count>
      <attachid>332666</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-01-30 13:55:30 -0800</bug_when>
    <thetext>Comment on attachment 332666
new patch

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

&gt; Source/WebCore/page/SecurityOrigin.h:208
&gt; +    RefPtr&lt;JSC::ThreadLocalCache&gt; threadLocalCache();

Seems odd to have a ThreadLocalCache per SecurityOrigin object. Those objects are frequently created and we may have a lot of instances actually referring to the same origin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1394737</commentid>
    <comment_count>15</comment_count>
      <attachid>332666</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-01-30 13:58:50 -0800</bug_when>
    <thetext>Comment on attachment 332666
new patch

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

&gt; Source/WebCore/page/SecurityOrigin.cpp:605
&gt; +RefPtr&lt;JSC::ThreadLocalCache&gt; SecurityOrigin::threadLocalCache()
&gt; +{
&gt; +    if (!m_threadLocalCache)
&gt; +        m_threadLocalCache = JSC::ThreadLocalCache::create(commonVM().heap);
&gt; +    return m_threadLocalCache;
&gt; +}

How did you come to the decision to place this logic in SecurityOrigin? I&apos;m unclear how this relates to the concept of a web origin, the tuple (scheme, host, port), and the same-origin policy that embody the purpose of the class SecurityOrigin. This cache seems more relevant to a script execution context as opposed to arbitrary code that instantiates a SecurityOrigin for the purpose of performing same-origin checks. I know that Web Workers do not have access to a DOM window. It seems strange that they would have their own thread local cache with respect to the VM of the document (that created them) as opposed to their own VM (WorkerGlobalScope::vm()). There is a similar weirdness for Service Workers (ServiceWorkerGlobalScope extends WorkerGlobalScope). ScriptExecutionContext/SecurityContext seems like a more appropriate place for this logic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1394741</commentid>
    <comment_count>16</comment_count>
      <attachid>332666</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-01-30 14:05:26 -0800</bug_when>
    <thetext>Comment on attachment 332666
new patch

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

&gt;&gt; Source/WebCore/page/SecurityOrigin.h:208
&gt;&gt; +    RefPtr&lt;JSC::ThreadLocalCache&gt; threadLocalCache();
&gt; 
&gt; Seems odd to have a ThreadLocalCache per SecurityOrigin object. Those objects are frequently created and we may have a lot of instances actually referring to the same origin.

Phil mentioned offline that SecurityOrigin objects are cached per-thread (see getCachedOrigin). Given this, I think this is fine after all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1394744</commentid>
    <comment_count>17</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-30 14:09:26 -0800</bug_when>
    <thetext>(In reply to Daniel Bates from comment #15)
&gt; Comment on attachment 332666 [details]
&gt; new patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=332666&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/SecurityOrigin.cpp:605
&gt; &gt; +RefPtr&lt;JSC::ThreadLocalCache&gt; SecurityOrigin::threadLocalCache()
&gt; &gt; +{
&gt; &gt; +    if (!m_threadLocalCache)
&gt; &gt; +        m_threadLocalCache = JSC::ThreadLocalCache::create(commonVM().heap);
&gt; &gt; +    return m_threadLocalCache;
&gt; &gt; +}
&gt; 
&gt; How did you come to the decision to place this logic in SecurityOrigin? I&apos;m
&gt; unclear how this relates to the concept of a web origin, the tuple (scheme,
&gt; host, port), and the same-origin policy that embody the purpose of the class
&gt; SecurityOrigin. This cache seems more relevant to a script execution context
&gt; as opposed to arbitrary code that instantiates a SecurityOrigin for the
&gt; purpose of performing same-origin checks. 

Doesn&apos;t the fact that SecurityOrigin is used for same-origin checks make it exactly the right object for this purpose?

Do we create a different ScriptExecutionContext for every origin?

&gt; I know that Web Workers do not
&gt; have access to a DOM window. It seems strange that they would have their own
&gt; thread local cache 

They don&apos;t.

&gt; with respect to the VM of the document (that created
&gt; them) as opposed to their own VM (WorkerGlobalScope::vm()). There is a
&gt; similar weirdness for Service Workers (ServiceWorkerGlobalScope extends
&gt; WorkerGlobalScope). ScriptExecutionContext/SecurityContext seems like a more
&gt; appropriate place for this logic.

If service workers don&apos;t extend JSDOMWindowBase, then they will not partake in the TLC shenanigans.

(In reply to Chris Dumez from comment #14)
&gt; Comment on attachment 332666 [details]
&gt; new patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=332666&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/SecurityOrigin.h:208
&gt; &gt; +    RefPtr&lt;JSC::ThreadLocalCache&gt; threadLocalCache();
&gt; 
&gt; Seems odd to have a ThreadLocalCache per SecurityOrigin object. Those
&gt; objects are frequently created and we may have a lot of instances actually
&gt; referring to the same origin.

Not every SecurityOrigin will have a TLC.  Only if a SecurityOrigin is the securtyOrigin of the document that globalObject&apos;s create() sees will that SecurityOrigin be asked to create a TLC.  We will have at most one TLC per global object.

A previous version of this patch created a separate TLC per global object. That was sound, but slower than this. This improved patch creates at most a separate TLC per global object.  Empirically this makes the perf cost go away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1394765</commentid>
    <comment_count>18</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-30 14:25:56 -0800</bug_when>
    <thetext>More offline discussion revealed that SecurityOrigin is not hash consed.

I&apos;m going to keep working on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1395191</commentid>
    <comment_count>19</comment_count>
      <attachid>332810</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-31 15:32:01 -0800</bug_when>
    <thetext>Created attachment 332810
the patch

Updated the WebCore par based on Dan&apos;s and Chris&apos;s feedback.

I&apos;m now creating TLCs by hash-consing the relevant data from SecurityOrigin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1395192</commentid>
    <comment_count>20</comment_count>
      <attachid>332810</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-31 15:33:25 -0800</bug_when>
    <thetext>Comment on attachment 332810
the patch

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

&gt; Source/WebCore/page/OriginThreadLocalCache.cpp:52
&gt; +    dataLog(RawPointer(this), &quot;: destroying origin TLC.\n&quot;);

I will remove.

&gt; Source/WebCore/page/OriginThreadLocalCache.cpp:63
&gt; +    dataLog(RawPointer(this), &quot;: creating origin TLC.\n&quot;);

I will remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1395194</commentid>
    <comment_count>21</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-31 15:34:45 -0800</bug_when>
    <thetext>Attachment 332810 did not pass style-queue:


ERROR: Source/WebCore/ForwardingHeaders/heap/ThreadLocalCache.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
Total errors found: 1 in 31 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>1395195</commentid>
    <comment_count>22</comment_count>
      <attachid>332811</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-31 15:35:49 -0800</bug_when>
    <thetext>Created attachment 332811
the patch

Fixed build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1395196</commentid>
    <comment_count>23</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-31 15:37:46 -0800</bug_when>
    <thetext>Attachment 332811 did not pass style-queue:


ERROR: Source/WebCore/ForwardingHeaders/heap/ThreadLocalCache.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
Total errors found: 1 in 31 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>1395207</commentid>
    <comment_count>24</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-31 15:52:53 -0800</bug_when>
    <thetext>*** Bug 81578 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1395214</commentid>
    <comment_count>25</comment_count>
      <attachid>332810</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-01-31 15:58:16 -0800</bug_when>
    <thetext>Comment on attachment 332810
the patch

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

I only looked at the WebCore bits and it look good overall (a few comments though).

&gt; Source/WebCore/ChangeLog:1
&gt; +2018-01-30  Filip Pizlo  &lt;fpizlo@apple.com&gt;

Double change log.

&gt; Source/WebCore/bindings/js/JSDOMGlobalObject.cpp:59
&gt; +JSDOMGlobalObject::JSDOMGlobalObject(VM&amp; vm, Structure* structure, Ref&lt;DOMWrapperWorld&gt;&amp;&amp; world, const GlobalObjectMethodTable* globalObjectMethodTable, RefPtr&lt;JSC::ThreadLocalCache&gt; threadLocalCache)

We usually use &amp;&amp; for parameters like these.

&gt; Source/WebCore/bindings/js/JSDOMWindowBase.cpp:82
&gt; +    : JSDOMGlobalObject(vm, structure, proxy-&gt;world(), &amp;s_globalObjectMethodTable, window-&gt;document()-&gt;securityOrigin().threadLocalCache())

The next line makes me worry about window potentially being null?

&gt; Source/WebCore/page/OriginThreadLocalCache.cpp:33
&gt; +typedef HashMap&lt;ThreadLocalCacheOriginKey, OriginThreadLocalCache*&gt; ThreadLocalCacheMap;

I believe we started transitioning to &quot;using&quot; statements in WebCore:
using ThreadLocalCacheMap = HashMap&lt;ThreadLocalCacheOriginKey, OriginThreadLocalCache*&gt;;

&gt; Source/WebCore/page/OriginThreadLocalCache.cpp:41
&gt; +RefPtr&lt;OriginThreadLocalCache&gt; OriginThreadLocalCache::create(const ThreadLocalCacheOriginKey&amp; key)

Ref&lt;OriginThreadLocalCache&gt;

&gt; Source/WebCore/page/OriginThreadLocalCache.cpp:45
&gt; +        return iter-&gt;value;

return *iter-&gt;value;

&gt; Source/WebCore/page/OriginThreadLocalCache.cpp:47
&gt; +    return adoptRef(new OriginThreadLocalCache(key));

return adoptRef(*new OriginThreadLocalCache(key));

&gt; Source/WebCore/page/OriginThreadLocalCache.cpp:52
&gt; +    dataLog(RawPointer(this), &quot;: destroying origin TLC.\n&quot;);

should probably be removed.

&gt; Source/WebCore/page/OriginThreadLocalCache.cpp:62
&gt; +    RELEASE_ASSERT(result);

result is a AddResult. Did you mean RELEASE_ASSERT(result.isNewEntry) ?

&gt; Source/WebCore/page/OriginThreadLocalCache.cpp:63
&gt; +    dataLog(RawPointer(this), &quot;: creating origin TLC.\n&quot;);

should probably be removed.

&gt; Source/WebCore/page/OriginThreadLocalCache.h:30
&gt; +#include &lt;wtf/HashMap.h&gt;

Move to cpp?

&gt; Source/WebCore/page/OriginThreadLocalCache.h:31
&gt; +#include &lt;wtf/NeverDestroyed.h&gt;

Move to cpp?

&gt; Source/WebCore/page/OriginThreadLocalCache.h:35
&gt; +class OriginThreadLocalCache : public JSC::ThreadLocalCache {

Should this be marked as final?

&gt; Source/WebCore/page/OriginThreadLocalCache.h:37
&gt; +    static RefPtr&lt;OriginThreadLocalCache&gt; create(const ThreadLocalCacheOriginKey&amp;);

This can never return nullptr, right? If so, it should return a Ref&lt;&gt;, not a RefPtr&lt;&gt;.

&gt; Source/WebCore/page/OriginThreadLocalCache.h:42
&gt; +    OriginThreadLocalCache(const ThreadLocalCacheOriginKey&amp;);

explicit?

&gt; Source/WebCore/page/SecurityOrigin.cpp:602
&gt; +RefPtr&lt;JSC::ThreadLocalCache&gt; SecurityOrigin::threadLocalCache()

We&apos;re not transferring ownership to the caller, I believe we would usually return a JSC::ThreadLocalCache&amp; in such cases.

&gt; Source/WebCore/page/ThreadLocalCacheOriginKey.h:41
&gt; +    ThreadLocalCacheOriginKey(String host, String protocol, std::optional&lt;uint16_t&gt; port)

we usually pass strings as &quot;const String&amp;&quot;.

&gt; Source/WebCore/page/ThreadLocalCacheOriginKey.h:74
&gt; +        return m_host.hash() + m_protocol.hash() + (m_port ? *m_port : 0);

I guess this is fine but I think we have a nice Hasher class for this:
return Hasher().computeHash(m_host, m_protocol, m_port);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396415</commentid>
    <comment_count>26</comment_count>
      <attachid>333100</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-02-05 11:19:22 -0800</bug_when>
    <thetext>Created attachment 333100
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396417</commentid>
    <comment_count>27</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-02-05 11:21:53 -0800</bug_when>
    <thetext>Attachment 333100 did not pass style-queue:


ERROR: Source/WebCore/dom/Document.cpp:198:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/ForwardingHeaders/heap/ThreadLocalCache.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
Total errors found: 2 in 33 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>1396429</commentid>
    <comment_count>28</comment_count>
      <attachid>333104</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-02-05 11:35:24 -0800</bug_when>
    <thetext>Created attachment 333104
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396435</commentid>
    <comment_count>29</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-02-05 11:42:47 -0800</bug_when>
    <thetext>Attachment 333104 did not pass style-queue:


ERROR: Source/WebCore/dom/Document.cpp:198:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/ForwardingHeaders/heap/ThreadLocalCache.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
Total errors found: 2 in 34 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>1396512</commentid>
    <comment_count>30</comment_count>
      <attachid>333104</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-02-05 13:42:03 -0800</bug_when>
    <thetext>Comment on attachment 333104
the patch

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

&gt; Source/WebCore/ChangeLog:5
&gt; +2018-02-05  Filip Pizlo  &lt;fpizlo@apple.com&gt;
&gt; +
&gt; +        Global objects should be able to use TLCs to allocate from different blocks from each other
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=182227
&gt; +

Please fix up this ChangeLog file as it contains three added entries.

&gt; Source/WebCore/dom/Document.cpp:5553
&gt; -            securityOrigin().enforceFilePathSeparation();
&gt; +            securityOrigin().setEnforcesFilePathSeparation(true);

I know that you changed this to be a setter so as to expose a getter with a similar name to query whether file path separation is enabled in Document::threadLocalCache(). I prefer that we keep the old style one-way only setter because we do not want to advertise to WebKit developers the ability to change the enforcement of file path separation after it is set as this is error prone. One way to allow Document::threadLocalCache() to make the correct policy decision is to add a member function to SecurityOrigin, maybe canAccessSharedThreadLocalCache or needsIsolatedThreadLocalCache, that returns true for a unique origin or a local origin with file path separation and false otherwise (it would be good to explicitly break out the m_universalAccess - no same-origin restrictions - case to return false as a means to document that this was intentional). Then Document::threadLocalCache() can query canAccessSharedThreadLocalCache().

Additional remarks:

The general philosophy around SecurityOrigin, the file path separation enforcement, and other security policies in the engine is that we do not want restrictions to be removed once added.

&gt; Source/WebCore/dom/Document.cpp:7749
&gt; +        if (origin.isUnique() || (origin.isLocal() &amp;&amp; origin.enforcesFilePathSeparation()))

See my remark above about adding a new member function to SecurityOrigin to query for this policy.

&gt; Source/WebCore/page/SecurityOrigin.h:169
&gt; +    void setEnforcesFilePathSeparation(bool);
&gt; +    bool enforcesFilePathSeparation() const { return m_enforcesFilePathSeparation; }

I would prefer that we do not make this change. See my remarks in Document.cpp for more details.

&gt; Source/WebCore/page/ThreadLocalCacheOriginKey.h:96
&gt; +class ThreadLocalCacheOriginKey {
&gt; +public:
&gt; +    ThreadLocalCacheOriginKey()
&gt; +    {
&gt; +    }
&gt; +    
&gt; +    ThreadLocalCacheOriginKey(String host, String protocol, std::optional&lt;uint16_t&gt; port)
&gt; +        : m_host(host)
&gt; +        , m_protocol(protocol)
&gt; +        , m_port(port)
&gt; +    {
&gt; +    }
&gt; +    
&gt; +    ThreadLocalCacheOriginKey(WTF::HashTableDeletedValueType)
&gt; +        : m_host(WTF::HashTableDeletedValue)
&gt; +    {
&gt; +    }
&gt; +    
&gt; +    bool operator==(const ThreadLocalCacheOriginKey&amp; other) const
&gt; +    {
&gt; +        return m_host == other.m_host
&gt; +            &amp;&amp; m_protocol == other.m_protocol
&gt; +            &amp;&amp; m_port == other.m_port;
&gt; +    }
&gt; +    
&gt; +    bool operator!=(const ThreadLocalCacheOriginKey&amp; other) const
&gt; +    {
&gt; +        return !(*this == other);
&gt; +    }
&gt; +    
&gt; +    explicit operator bool() const
&gt; +    {
&gt; +        return *this != ThreadLocalCacheOriginKey();
&gt; +    }
&gt; +    
&gt; +    bool isHashTableDeletedValue() const { return m_host.isHashTableDeletedValue(); }
&gt; +    
&gt; +    unsigned hash() const
&gt; +    {
&gt; +        return m_host.hash() + m_protocol.hash() + (m_port ? *m_port : 0);
&gt; +    }
&gt; +    
&gt; +private:
&gt; +    String m_host;
&gt; +    String m_protocol;
&gt; +    std::optional&lt;uint16_t&gt; m_port;
&gt; +};
&gt; +
&gt; +struct ThreadLocalCacheOriginKeyHash {
&gt; +    static unsigned hash(const ThreadLocalCacheOriginKey&amp; key)
&gt; +    {
&gt; +        return key.hash();
&gt; +    }
&gt; +    
&gt; +    static bool equal(const ThreadLocalCacheOriginKey&amp; a, const ThreadLocalCacheOriginKey&amp; b)
&gt; +    {
&gt; +        return a == b;
&gt; +    }
&gt; +    
&gt; +    static const bool safeToCompareToEmptyOrDeleted = false; // This is a safe choice, possibly more conservative than necessary.
&gt; +};
&gt; +

These classes duplicate the functionality of SecurityOriginHash. We should use SecurityOriginHash: &lt;https://trac.webkit.org/browser/trunk/Source/WebCore/page/SecurityOriginHash.h&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396520</commentid>
    <comment_count>31</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-02-05 13:56:46 -0800</bug_when>
    <thetext>(In reply to Daniel Bates from comment #30)
&gt; Comment on attachment 333104 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=333104&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:5
&gt; &gt; +2018-02-05  Filip Pizlo  &lt;fpizlo@apple.com&gt;
&gt; &gt; +
&gt; &gt; +        Global objects should be able to use TLCs to allocate from different blocks from each other
&gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=182227
&gt; &gt; +
&gt; 
&gt; Please fix up this ChangeLog file as it contains three added entries.

Will do.

&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:5553
&gt; &gt; -            securityOrigin().enforceFilePathSeparation();
&gt; &gt; +            securityOrigin().setEnforcesFilePathSeparation(true);
&gt; 
&gt; I know that you changed this to be a setter so as to expose a getter with a
&gt; similar name to query whether file path separation is enabled in
&gt; Document::threadLocalCache(). I prefer that we keep the old style one-way
&gt; only setter because we do not want to advertise to WebKit developers the
&gt; ability to change the enforcement of file path separation after it is set as
&gt; this is error prone. 

In its current form, the patch requires that the argument to setEnforcesBlah to be true due to an assertion.  Sounds like you&apos;re saying it would be better if it did not take a bool at all.  I think that removing the bool arg to setEnforcesFilePathSeparation() addresses this specific concern.

&gt; One way to allow Document::threadLocalCache() to make
&gt; the correct policy decision is to add a member function to SecurityOrigin,
&gt; maybe canAccessSharedThreadLocalCache or needsIsolatedThreadLocalCache, that
&gt; returns true for a unique origin or a local origin with file path separation
&gt; and false otherwise (it would be good to explicitly break out the
&gt; m_universalAccess - no same-origin restrictions - case to return false as a
&gt; means to document that this was intentional). Then
&gt; Document::threadLocalCache() can query canAccessSharedThreadLocalCache().

I&apos;ll leave this refinement for another patch.  I don&apos;t see the harm in having a getter for this property.

&gt; 
&gt; Additional remarks:
&gt; 
&gt; The general philosophy around SecurityOrigin, the file path separation
&gt; enforcement, and other security policies in the engine is that we do not
&gt; want restrictions to be removed once added.

This patch doesn&apos;t change that philosophy in any way.  The fact that the set method takes a bool is symbolic since you&apos;re not allowed to pass anything but true.

&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:7749
&gt; &gt; +        if (origin.isUnique() || (origin.isLocal() &amp;&amp; origin.enforcesFilePathSeparation()))
&gt; 
&gt; See my remark above about adding a new member function to SecurityOrigin to
&gt; query for this policy.
&gt; 
&gt; &gt; Source/WebCore/page/SecurityOrigin.h:169
&gt; &gt; +    void setEnforcesFilePathSeparation(bool);
&gt; &gt; +    bool enforcesFilePathSeparation() const { return m_enforcesFilePathSeparation; }
&gt; 
&gt; I would prefer that we do not make this change. See my remarks in
&gt; Document.cpp for more details.
&gt; 
&gt; &gt; Source/WebCore/page/ThreadLocalCacheOriginKey.h:96
&gt; &gt; +class ThreadLocalCacheOriginKey {
&gt; &gt; +public:
&gt; &gt; +    ThreadLocalCacheOriginKey()
&gt; &gt; +    {
&gt; &gt; +    }
&gt; &gt; +    
&gt; &gt; +    ThreadLocalCacheOriginKey(String host, String protocol, std::optional&lt;uint16_t&gt; port)
&gt; &gt; +        : m_host(host)
&gt; &gt; +        , m_protocol(protocol)
&gt; &gt; +        , m_port(port)
&gt; &gt; +    {
&gt; &gt; +    }
&gt; &gt; +    
&gt; &gt; +    ThreadLocalCacheOriginKey(WTF::HashTableDeletedValueType)
&gt; &gt; +        : m_host(WTF::HashTableDeletedValue)
&gt; &gt; +    {
&gt; &gt; +    }
&gt; &gt; +    
&gt; &gt; +    bool operator==(const ThreadLocalCacheOriginKey&amp; other) const
&gt; &gt; +    {
&gt; &gt; +        return m_host == other.m_host
&gt; &gt; +            &amp;&amp; m_protocol == other.m_protocol
&gt; &gt; +            &amp;&amp; m_port == other.m_port;
&gt; &gt; +    }
&gt; &gt; +    
&gt; &gt; +    bool operator!=(const ThreadLocalCacheOriginKey&amp; other) const
&gt; &gt; +    {
&gt; &gt; +        return !(*this == other);
&gt; &gt; +    }
&gt; &gt; +    
&gt; &gt; +    explicit operator bool() const
&gt; &gt; +    {
&gt; &gt; +        return *this != ThreadLocalCacheOriginKey();
&gt; &gt; +    }
&gt; &gt; +    
&gt; &gt; +    bool isHashTableDeletedValue() const { return m_host.isHashTableDeletedValue(); }
&gt; &gt; +    
&gt; &gt; +    unsigned hash() const
&gt; &gt; +    {
&gt; &gt; +        return m_host.hash() + m_protocol.hash() + (m_port ? *m_port : 0);
&gt; &gt; +    }
&gt; &gt; +    
&gt; &gt; +private:
&gt; &gt; +    String m_host;
&gt; &gt; +    String m_protocol;
&gt; &gt; +    std::optional&lt;uint16_t&gt; m_port;
&gt; &gt; +};
&gt; &gt; +
&gt; &gt; +struct ThreadLocalCacheOriginKeyHash {
&gt; &gt; +    static unsigned hash(const ThreadLocalCacheOriginKey&amp; key)
&gt; &gt; +    {
&gt; &gt; +        return key.hash();
&gt; &gt; +    }
&gt; &gt; +    
&gt; &gt; +    static bool equal(const ThreadLocalCacheOriginKey&amp; a, const ThreadLocalCacheOriginKey&amp; b)
&gt; &gt; +    {
&gt; &gt; +        return a == b;
&gt; &gt; +    }
&gt; &gt; +    
&gt; &gt; +    static const bool safeToCompareToEmptyOrDeleted = false; // This is a safe choice, possibly more conservative than necessary.
&gt; &gt; +};
&gt; &gt; +
&gt; 
&gt; These classes duplicate the functionality of SecurityOriginHash. We should
&gt; use SecurityOriginHash:
&gt; &lt;https://trac.webkit.org/browser/trunk/Source/WebCore/page/
&gt; SecurityOriginHash.h&gt;.

That&apos;s only true if you believe that keeping a RefPtr to a SecurityOrigin is only safe - that is, that the SecurityOrigin won&apos;t keep a lot of other stuff alive.

Is that true?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396543</commentid>
    <comment_count>32</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-02-05 14:23:06 -0800</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #31)
&gt; (In reply to Daniel Bates from comment #30)
&gt; &gt; Comment on attachment 333104 [details]
&gt; &gt; the patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=333104&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/ChangeLog:5
&gt; &gt; &gt; +2018-02-05  Filip Pizlo  &lt;fpizlo@apple.com&gt;
&gt; &gt; &gt; +
&gt; &gt; &gt; +        Global objects should be able to use TLCs to allocate from different blocks from each other
&gt; &gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=182227
&gt; &gt; &gt; +
&gt; &gt; 
&gt; &gt; Please fix up this ChangeLog file as it contains three added entries.
&gt; 
&gt; Will do.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/dom/Document.cpp:5553
&gt; &gt; &gt; -            securityOrigin().enforceFilePathSeparation();
&gt; &gt; &gt; +            securityOrigin().setEnforcesFilePathSeparation(true);
&gt; &gt; 
&gt; &gt; I know that you changed this to be a setter so as to expose a getter with a
&gt; &gt; similar name to query whether file path separation is enabled in
&gt; &gt; Document::threadLocalCache(). I prefer that we keep the old style one-way
&gt; &gt; only setter because we do not want to advertise to WebKit developers the
&gt; &gt; ability to change the enforcement of file path separation after it is set as
&gt; &gt; this is error prone. 
&gt; 
&gt; In its current form, the patch requires that the argument to setEnforcesBlah
&gt; to be true due to an assertion.  Sounds like you&apos;re saying it would be
&gt; better if it did not take a bool at all.  I think that removing the bool arg
&gt; to setEnforcesFilePathSeparation() addresses this specific concern.
&gt; 
&gt;

OK.

&gt; &gt; One way to allow Document::threadLocalCache() to make
&gt; &gt; the correct policy decision is to add a member function to SecurityOrigin,
&gt; &gt; maybe canAccessSharedThreadLocalCache or needsIsolatedThreadLocalCache, that
&gt; &gt; returns true for a unique origin or a local origin with file path separation
&gt; &gt; and false otherwise (it would be good to explicitly break out the
&gt; &gt; m_universalAccess - no same-origin restrictions - case to return false as a
&gt; &gt; means to document that this was intentional). Then
&gt; &gt; Document::threadLocalCache() can query canAccessSharedThreadLocalCache().
&gt; 
&gt; I&apos;ll leave this refinement for another patch.  I don&apos;t see the harm in
&gt; having a getter for this property.
&gt; 

OK.

&gt; &gt; 
&gt; &gt; Additional remarks:
&gt; &gt; 
&gt; &gt; The general philosophy around SecurityOrigin, the file path separation
&gt; &gt; enforcement, and other security policies in the engine is that we do not
&gt; &gt; want restrictions to be removed once added.
&gt; 
&gt; This patch doesn&apos;t change that philosophy in any way.  The fact that the set
&gt; method takes a bool is symbolic since you&apos;re not allowed to pass anything
&gt; but true.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/dom/Document.cpp:7749
&gt; &gt; &gt; +        if (origin.isUnique() || (origin.isLocal() &amp;&amp; origin.enforcesFilePathSeparation()))
&gt; &gt; 
&gt; &gt; See my remark above about adding a new member function to SecurityOrigin to
&gt; &gt; query for this policy.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/page/SecurityOrigin.h:169
&gt; &gt; &gt; +    void setEnforcesFilePathSeparation(bool);
&gt; &gt; &gt; +    bool enforcesFilePathSeparation() const { return m_enforcesFilePathSeparation; }
&gt; &gt; 
&gt; &gt; I would prefer that we do not make this change. See my remarks in
&gt; &gt; Document.cpp for more details.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/page/ThreadLocalCacheOriginKey.h:96
&gt; &gt; &gt; +class ThreadLocalCacheOriginKey {
&gt; &gt; &gt; +public:
&gt; &gt; &gt; +    ThreadLocalCacheOriginKey()
&gt; &gt; &gt; +    {
&gt; &gt; &gt; +    }
&gt; &gt; &gt; +    
&gt; &gt; &gt; +    ThreadLocalCacheOriginKey(String host, String protocol, std::optional&lt;uint16_t&gt; port)
&gt; &gt; &gt; +        : m_host(host)
&gt; &gt; &gt; +        , m_protocol(protocol)
&gt; &gt; &gt; +        , m_port(port)
&gt; &gt; &gt; +    {
&gt; &gt; &gt; +    }
&gt; &gt; &gt; +    
&gt; &gt; &gt; +    ThreadLocalCacheOriginKey(WTF::HashTableDeletedValueType)
&gt; &gt; &gt; +        : m_host(WTF::HashTableDeletedValue)
&gt; &gt; &gt; +    {
&gt; &gt; &gt; +    }
&gt; &gt; &gt; +    
&gt; &gt; &gt; +    bool operator==(const ThreadLocalCacheOriginKey&amp; other) const
&gt; &gt; &gt; +    {
&gt; &gt; &gt; +        return m_host == other.m_host
&gt; &gt; &gt; +            &amp;&amp; m_protocol == other.m_protocol
&gt; &gt; &gt; +            &amp;&amp; m_port == other.m_port;
&gt; &gt; &gt; +    }
&gt; &gt; &gt; +    
&gt; &gt; &gt; +    bool operator!=(const ThreadLocalCacheOriginKey&amp; other) const
&gt; &gt; &gt; +    {
&gt; &gt; &gt; +        return !(*this == other);
&gt; &gt; &gt; +    }
&gt; &gt; &gt; +    
&gt; &gt; &gt; +    explicit operator bool() const
&gt; &gt; &gt; +    {
&gt; &gt; &gt; +        return *this != ThreadLocalCacheOriginKey();
&gt; &gt; &gt; +    }
&gt; &gt; &gt; +    
&gt; &gt; &gt; +    bool isHashTableDeletedValue() const { return m_host.isHashTableDeletedValue(); }
&gt; &gt; &gt; +    
&gt; &gt; &gt; +    unsigned hash() const
&gt; &gt; &gt; +    {
&gt; &gt; &gt; +        return m_host.hash() + m_protocol.hash() + (m_port ? *m_port : 0);
&gt; &gt; &gt; +    }
&gt; &gt; &gt; +    
&gt; &gt; &gt; +private:
&gt; &gt; &gt; +    String m_host;
&gt; &gt; &gt; +    String m_protocol;
&gt; &gt; &gt; +    std::optional&lt;uint16_t&gt; m_port;
&gt; &gt; &gt; +};
&gt; &gt; &gt; +
&gt; &gt; &gt; +struct ThreadLocalCacheOriginKeyHash {
&gt; &gt; &gt; +    static unsigned hash(const ThreadLocalCacheOriginKey&amp; key)
&gt; &gt; &gt; +    {
&gt; &gt; &gt; +        return key.hash();
&gt; &gt; &gt; +    }
&gt; &gt; &gt; +    
&gt; &gt; &gt; +    static bool equal(const ThreadLocalCacheOriginKey&amp; a, const ThreadLocalCacheOriginKey&amp; b)
&gt; &gt; &gt; +    {
&gt; &gt; &gt; +        return a == b;
&gt; &gt; &gt; +    }
&gt; &gt; &gt; +    
&gt; &gt; &gt; +    static const bool safeToCompareToEmptyOrDeleted = false; // This is a safe choice, possibly more conservative than necessary.
&gt; &gt; &gt; +};
&gt; &gt; &gt; +
&gt; &gt; 
&gt; &gt; These classes duplicate the functionality of SecurityOriginHash. We should
&gt; &gt; use SecurityOriginHash:
&gt; &gt; &lt;https://trac.webkit.org/browser/trunk/Source/WebCore/page/
&gt; &gt; SecurityOriginHash.h&gt;.
&gt; 
&gt; That&apos;s only true if you believe that keeping a RefPtr to a SecurityOrigin is
&gt; only safe - that is, that the SecurityOrigin won&apos;t keep a lot of other stuff
&gt; alive.
&gt; 
&gt; Is that true?

Holding a SecurityOrigin should not keep other things alive. I do not want to hold up this patch. If there is a way to share more code with SecurityOriginHash that would be great. At the very least, can we please standardize on protocol, host, port as the ordering for creating the keys.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396547</commentid>
    <comment_count>33</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-02-05 14:31:27 -0800</bug_when>
    <thetext>(In reply to Daniel Bates from comment #32)
&gt; (In reply to Filip Pizlo from comment #31)
&gt; &gt; (In reply to Daniel Bates from comment #30)
&gt; &gt; &gt; Comment on attachment 333104 [details]
&gt; &gt; &gt; the patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=333104&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/ChangeLog:5
&gt; &gt; &gt; &gt; +2018-02-05  Filip Pizlo  &lt;fpizlo@apple.com&gt;
&gt; &gt; &gt; &gt; +
&gt; &gt; &gt; &gt; +        Global objects should be able to use TLCs to allocate from different blocks from each other
&gt; &gt; &gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=182227
&gt; &gt; &gt; &gt; +
&gt; &gt; &gt; 
&gt; &gt; &gt; Please fix up this ChangeLog file as it contains three added entries.
&gt; &gt; 
&gt; &gt; Will do.
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/dom/Document.cpp:5553
&gt; &gt; &gt; &gt; -            securityOrigin().enforceFilePathSeparation();
&gt; &gt; &gt; &gt; +            securityOrigin().setEnforcesFilePathSeparation(true);
&gt; &gt; &gt; 
&gt; &gt; &gt; I know that you changed this to be a setter so as to expose a getter with a
&gt; &gt; &gt; similar name to query whether file path separation is enabled in
&gt; &gt; &gt; Document::threadLocalCache(). I prefer that we keep the old style one-way
&gt; &gt; &gt; only setter because we do not want to advertise to WebKit developers the
&gt; &gt; &gt; ability to change the enforcement of file path separation after it is set as
&gt; &gt; &gt; this is error prone. 
&gt; &gt; 
&gt; &gt; In its current form, the patch requires that the argument to setEnforcesBlah
&gt; &gt; to be true due to an assertion.  Sounds like you&apos;re saying it would be
&gt; &gt; better if it did not take a bool at all.  I think that removing the bool arg
&gt; &gt; to setEnforcesFilePathSeparation() addresses this specific concern.
&gt; &gt; 
&gt; &gt;
&gt; 
&gt; OK.
&gt; 
&gt; &gt; &gt; One way to allow Document::threadLocalCache() to make
&gt; &gt; &gt; the correct policy decision is to add a member function to SecurityOrigin,
&gt; &gt; &gt; maybe canAccessSharedThreadLocalCache or needsIsolatedThreadLocalCache, that
&gt; &gt; &gt; returns true for a unique origin or a local origin with file path separation
&gt; &gt; &gt; and false otherwise (it would be good to explicitly break out the
&gt; &gt; &gt; m_universalAccess - no same-origin restrictions - case to return false as a
&gt; &gt; &gt; means to document that this was intentional). Then
&gt; &gt; &gt; Document::threadLocalCache() can query canAccessSharedThreadLocalCache().
&gt; &gt; 
&gt; &gt; I&apos;ll leave this refinement for another patch.  I don&apos;t see the harm in
&gt; &gt; having a getter for this property.
&gt; &gt; 
&gt; 
&gt; OK.
&gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; Additional remarks:
&gt; &gt; &gt; 
&gt; &gt; &gt; The general philosophy around SecurityOrigin, the file path separation
&gt; &gt; &gt; enforcement, and other security policies in the engine is that we do not
&gt; &gt; &gt; want restrictions to be removed once added.
&gt; &gt; 
&gt; &gt; This patch doesn&apos;t change that philosophy in any way.  The fact that the set
&gt; &gt; method takes a bool is symbolic since you&apos;re not allowed to pass anything
&gt; &gt; but true.
&gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/dom/Document.cpp:7749
&gt; &gt; &gt; &gt; +        if (origin.isUnique() || (origin.isLocal() &amp;&amp; origin.enforcesFilePathSeparation()))
&gt; &gt; &gt; 
&gt; &gt; &gt; See my remark above about adding a new member function to SecurityOrigin to
&gt; &gt; &gt; query for this policy.
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/page/SecurityOrigin.h:169
&gt; &gt; &gt; &gt; +    void setEnforcesFilePathSeparation(bool);
&gt; &gt; &gt; &gt; +    bool enforcesFilePathSeparation() const { return m_enforcesFilePathSeparation; }
&gt; &gt; &gt; 
&gt; &gt; &gt; I would prefer that we do not make this change. See my remarks in
&gt; &gt; &gt; Document.cpp for more details.
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/page/ThreadLocalCacheOriginKey.h:96
&gt; &gt; &gt; &gt; +class ThreadLocalCacheOriginKey {
&gt; &gt; &gt; &gt; +public:
&gt; &gt; &gt; &gt; +    ThreadLocalCacheOriginKey()
&gt; &gt; &gt; &gt; +    {
&gt; &gt; &gt; &gt; +    }
&gt; &gt; &gt; &gt; +    
&gt; &gt; &gt; &gt; +    ThreadLocalCacheOriginKey(String host, String protocol, std::optional&lt;uint16_t&gt; port)
&gt; &gt; &gt; &gt; +        : m_host(host)
&gt; &gt; &gt; &gt; +        , m_protocol(protocol)
&gt; &gt; &gt; &gt; +        , m_port(port)
&gt; &gt; &gt; &gt; +    {
&gt; &gt; &gt; &gt; +    }
&gt; &gt; &gt; &gt; +    
&gt; &gt; &gt; &gt; +    ThreadLocalCacheOriginKey(WTF::HashTableDeletedValueType)
&gt; &gt; &gt; &gt; +        : m_host(WTF::HashTableDeletedValue)
&gt; &gt; &gt; &gt; +    {
&gt; &gt; &gt; &gt; +    }
&gt; &gt; &gt; &gt; +    
&gt; &gt; &gt; &gt; +    bool operator==(const ThreadLocalCacheOriginKey&amp; other) const
&gt; &gt; &gt; &gt; +    {
&gt; &gt; &gt; &gt; +        return m_host == other.m_host
&gt; &gt; &gt; &gt; +            &amp;&amp; m_protocol == other.m_protocol
&gt; &gt; &gt; &gt; +            &amp;&amp; m_port == other.m_port;
&gt; &gt; &gt; &gt; +    }
&gt; &gt; &gt; &gt; +    
&gt; &gt; &gt; &gt; +    bool operator!=(const ThreadLocalCacheOriginKey&amp; other) const
&gt; &gt; &gt; &gt; +    {
&gt; &gt; &gt; &gt; +        return !(*this == other);
&gt; &gt; &gt; &gt; +    }
&gt; &gt; &gt; &gt; +    
&gt; &gt; &gt; &gt; +    explicit operator bool() const
&gt; &gt; &gt; &gt; +    {
&gt; &gt; &gt; &gt; +        return *this != ThreadLocalCacheOriginKey();
&gt; &gt; &gt; &gt; +    }
&gt; &gt; &gt; &gt; +    
&gt; &gt; &gt; &gt; +    bool isHashTableDeletedValue() const { return m_host.isHashTableDeletedValue(); }
&gt; &gt; &gt; &gt; +    
&gt; &gt; &gt; &gt; +    unsigned hash() const
&gt; &gt; &gt; &gt; +    {
&gt; &gt; &gt; &gt; +        return m_host.hash() + m_protocol.hash() + (m_port ? *m_port : 0);
&gt; &gt; &gt; &gt; +    }
&gt; &gt; &gt; &gt; +    
&gt; &gt; &gt; &gt; +private:
&gt; &gt; &gt; &gt; +    String m_host;
&gt; &gt; &gt; &gt; +    String m_protocol;
&gt; &gt; &gt; &gt; +    std::optional&lt;uint16_t&gt; m_port;
&gt; &gt; &gt; &gt; +};
&gt; &gt; &gt; &gt; +
&gt; &gt; &gt; &gt; +struct ThreadLocalCacheOriginKeyHash {
&gt; &gt; &gt; &gt; +    static unsigned hash(const ThreadLocalCacheOriginKey&amp; key)
&gt; &gt; &gt; &gt; +    {
&gt; &gt; &gt; &gt; +        return key.hash();
&gt; &gt; &gt; &gt; +    }
&gt; &gt; &gt; &gt; +    
&gt; &gt; &gt; &gt; +    static bool equal(const ThreadLocalCacheOriginKey&amp; a, const ThreadLocalCacheOriginKey&amp; b)
&gt; &gt; &gt; &gt; +    {
&gt; &gt; &gt; &gt; +        return a == b;
&gt; &gt; &gt; &gt; +    }
&gt; &gt; &gt; &gt; +    
&gt; &gt; &gt; &gt; +    static const bool safeToCompareToEmptyOrDeleted = false; // This is a safe choice, possibly more conservative than necessary.
&gt; &gt; &gt; &gt; +};
&gt; &gt; &gt; &gt; +
&gt; &gt; &gt; 
&gt; &gt; &gt; These classes duplicate the functionality of SecurityOriginHash. We should
&gt; &gt; &gt; use SecurityOriginHash:
&gt; &gt; &gt; &lt;https://trac.webkit.org/browser/trunk/Source/WebCore/page/
&gt; &gt; &gt; SecurityOriginHash.h&gt;.
&gt; &gt; 
&gt; &gt; That&apos;s only true if you believe that keeping a RefPtr to a SecurityOrigin is
&gt; &gt; only safe - that is, that the SecurityOrigin won&apos;t keep a lot of other stuff
&gt; &gt; alive.
&gt; &gt; 
&gt; &gt; Is that true?
&gt; 
&gt; Holding a SecurityOrigin should not keep other things alive. I do not want
&gt; to hold up this patch. If there is a way to share more code with
&gt; SecurityOriginHash that would be great. At the very least, can we please
&gt; standardize on protocol, host, port as the ordering for creating the keys.

OK!  I&apos;m going to make this change, since it makes the patch smaller.  I&apos;m making a patch that makes the setter not take a bool, and switch to RefPtr&lt;SecurityOrigin&gt;.  Will have it up shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396552</commentid>
    <comment_count>34</comment_count>
      <attachid>333104</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-02-05 14:36:18 -0800</bug_when>
    <thetext>Comment on attachment 333104
the patch

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

Thank you Filip for iterating on this patch! I am optimistic that we can further refine this code. I do not feel it is necessary to hold up this patch for such refinements. We can do them in subsequent bugs/patches.

This patch does not seem to incorporate some or all of the feedback from Chris Dumez in comment 25 and I did not see a reply from you against such feedback. Please address these remarks or explain why you disagree with them.

r=me

&gt;&gt;&gt; Source/WebCore/dom/Document.cpp:5553
&gt;&gt;&gt; +            securityOrigin().setEnforcesFilePathSeparation(true);
&gt;&gt; 
&gt;&gt; I know that you changed this to be a setter so as to expose a getter with a similar name to query whether file path separation is enabled in Document::threadLocalCache(). I prefer that we keep the old style one-way only setter because we do not want to advertise to WebKit developers the ability to change the enforcement of file path separation after it is set as this is error prone. One way to allow Document::threadLocalCache() to make the correct policy decision is to add a member function to SecurityOrigin, maybe canAccessSharedThreadLocalCache or needsIsolatedThreadLocalCache, that returns true for a unique origin or a local origin with file path separation and false otherwise (it would be good to explicitly break out the m_universalAccess - no same-origin restrictions - case to return false as a means to document that this was intentional). Then Document::threadLocalCache() can query canAccessSharedThreadLocalCache().
&gt;&gt; 
&gt;&gt; Additional remarks:
&gt;&gt; 
&gt;&gt; The general philosophy around SecurityOrigin, the file path separation enforcement, and other security policies in the engine is that we do not want restrictions to be removed once added.
&gt; 
&gt; In its current form, the patch requires that the argument to setEnforcesBlah to be true due to an assertion.  Sounds like you&apos;re saying it would be better if it did not take a bool at all.  I think that removing the bool arg to setEnforcesFilePathSeparation() addresses this specific concern.

That works for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396628</commentid>
    <comment_count>35</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-02-05 17:20:56 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #25)
&gt; Comment on attachment 332810 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=332810&amp;action=review
&gt; 
&gt; I only looked at the WebCore bits and it look good overall (a few comments
&gt; though).
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:1
&gt; &gt; +2018-01-30  Filip Pizlo  &lt;fpizlo@apple.com&gt;
&gt; 
&gt; Double change log.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSDOMGlobalObject.cpp:59
&gt; &gt; +JSDOMGlobalObject::JSDOMGlobalObject(VM&amp; vm, Structure* structure, Ref&lt;DOMWrapperWorld&gt;&amp;&amp; world, const GlobalObjectMethodTable* globalObjectMethodTable, RefPtr&lt;JSC::ThreadLocalCache&gt; threadLocalCache)
&gt; 
&gt; We usually use &amp;&amp; for parameters like these.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSDOMWindowBase.cpp:82
&gt; &gt; +    : JSDOMGlobalObject(vm, structure, proxy-&gt;world(), &amp;s_globalObjectMethodTable, window-&gt;document()-&gt;securityOrigin().threadLocalCache())
&gt; 
&gt; The next line makes me worry about window potentially being null?

I&apos;m worried that the next line is being too paranoid.  But I&apos;ll play along.  The obvious thing to do is &quot;window ? window-&gt;blah.threadLocalCache() : nullptr&quot;, so I&apos;ll do that.

&gt; 
&gt; &gt; Source/WebCore/page/OriginThreadLocalCache.cpp:33
&gt; &gt; +typedef HashMap&lt;ThreadLocalCacheOriginKey, OriginThreadLocalCache*&gt; ThreadLocalCacheMap;
&gt; 
&gt; I believe we started transitioning to &quot;using&quot; statements in WebCore:
&gt; using ThreadLocalCacheMap = HashMap&lt;ThreadLocalCacheOriginKey,
&gt; OriginThreadLocalCache*&gt;;

Fixed.

&gt; 
&gt; &gt; Source/WebCore/page/OriginThreadLocalCache.cpp:41
&gt; &gt; +RefPtr&lt;OriginThreadLocalCache&gt; OriginThreadLocalCache::create(const ThreadLocalCacheOriginKey&amp; key)
&gt; 
&gt; Ref&lt;OriginThreadLocalCache&gt;

Fixed.

&gt; 
&gt; &gt; Source/WebCore/page/OriginThreadLocalCache.cpp:45
&gt; &gt; +        return iter-&gt;value;
&gt; 
&gt; return *iter-&gt;value;

Fixed.

&gt; 
&gt; &gt; Source/WebCore/page/OriginThreadLocalCache.cpp:47
&gt; &gt; +    return adoptRef(new OriginThreadLocalCache(key));
&gt; 
&gt; return adoptRef(*new OriginThreadLocalCache(key));

Fixed.

&gt; 
&gt; &gt; Source/WebCore/page/OriginThreadLocalCache.cpp:52
&gt; &gt; +    dataLog(RawPointer(this), &quot;: destroying origin TLC.\n&quot;);
&gt; 
&gt; should probably be removed.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/page/OriginThreadLocalCache.cpp:62
&gt; &gt; +    RELEASE_ASSERT(result);
&gt; 
&gt; result is a AddResult. Did you mean RELEASE_ASSERT(result.isNewEntry) ?

You don&apos;t need to say .isNewEntry if you&apos;re using AddResult in a boolean context:

    template&lt;typename IteratorType&gt; struct HashTableAddResult {
        ...
        explicit operator bool() const { return isNewEntry; }

&gt; 
&gt; &gt; Source/WebCore/page/OriginThreadLocalCache.cpp:63
&gt; &gt; +    dataLog(RawPointer(this), &quot;: creating origin TLC.\n&quot;);
&gt; 
&gt; should probably be removed.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/page/OriginThreadLocalCache.h:30
&gt; &gt; +#include &lt;wtf/HashMap.h&gt;
&gt; 
&gt; Move to cpp?

Fixed.

&gt; 
&gt; &gt; Source/WebCore/page/OriginThreadLocalCache.h:31
&gt; &gt; +#include &lt;wtf/NeverDestroyed.h&gt;
&gt; 
&gt; Move to cpp?

Fixed.

&gt; 
&gt; &gt; Source/WebCore/page/OriginThreadLocalCache.h:35
&gt; &gt; +class OriginThreadLocalCache : public JSC::ThreadLocalCache {
&gt; 
&gt; Should this be marked as final?

Good idea.  Fixed.

&gt; 
&gt; &gt; Source/WebCore/page/OriginThreadLocalCache.h:37
&gt; &gt; +    static RefPtr&lt;OriginThreadLocalCache&gt; create(const ThreadLocalCacheOriginKey&amp;);
&gt; 
&gt; This can never return nullptr, right? If so, it should return a Ref&lt;&gt;, not a
&gt; RefPtr&lt;&gt;.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/page/OriginThreadLocalCache.h:42
&gt; &gt; +    OriginThreadLocalCache(const ThreadLocalCacheOriginKey&amp;);
&gt; 
&gt; explicit?

Fixed.

&gt; 
&gt; &gt; Source/WebCore/page/SecurityOrigin.cpp:602
&gt; &gt; +RefPtr&lt;JSC::ThreadLocalCache&gt; SecurityOrigin::threadLocalCache()
&gt; 
&gt; We&apos;re not transferring ownership to the caller, I believe we would usually
&gt; return a JSC::ThreadLocalCache&amp; in such cases.

I see.  Fixed.

&gt; 
&gt; &gt; Source/WebCore/page/ThreadLocalCacheOriginKey.h:41
&gt; &gt; +    ThreadLocalCacheOriginKey(String host, String protocol, std::optional&lt;uint16_t&gt; port)
&gt; 
&gt; we usually pass strings as &quot;const String&amp;&quot;.

Fixed by virtue of removing ThreadLocalCacheOriginKey.h per Dan&apos;s comment - this was just duplicating SecurityOriginHash.

&gt; 
&gt; &gt; Source/WebCore/page/ThreadLocalCacheOriginKey.h:74
&gt; &gt; +        return m_host.hash() + m_protocol.hash() + (m_port ? *m_port : 0);
&gt; 
&gt; I guess this is fine but I think we have a nice Hasher class for this:
&gt; return Hasher().computeHash(m_host, m_protocol, m_port);

Fixed by removal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396630</commentid>
    <comment_count>36</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-02-05 17:21:24 -0800</bug_when>
    <thetext>(In reply to Daniel Bates from comment #34)
&gt; Comment on attachment 333104 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=333104&amp;action=review
&gt; 
&gt; Thank you Filip for iterating on this patch! I am optimistic that we can
&gt; further refine this code. I do not feel it is necessary to hold up this
&gt; patch for such refinements. We can do them in subsequent bugs/patches.
&gt; 
&gt; This patch does not seem to incorporate some or all of the feedback from
&gt; Chris Dumez in comment 25 and I did not see a reply from you against such
&gt; feedback. Please address these remarks or explain why you disagree with them.

Thanks for reminding me about Chris&apos;s comment.  I had missed it.  I addressed his feedback.

&gt; 
&gt; r=me
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/dom/Document.cpp:5553
&gt; &gt;&gt;&gt; +            securityOrigin().setEnforcesFilePathSeparation(true);
&gt; &gt;&gt; 
&gt; &gt;&gt; I know that you changed this to be a setter so as to expose a getter with a similar name to query whether file path separation is enabled in Document::threadLocalCache(). I prefer that we keep the old style one-way only setter because we do not want to advertise to WebKit developers the ability to change the enforcement of file path separation after it is set as this is error prone. One way to allow Document::threadLocalCache() to make the correct policy decision is to add a member function to SecurityOrigin, maybe canAccessSharedThreadLocalCache or needsIsolatedThreadLocalCache, that returns true for a unique origin or a local origin with file path separation and false otherwise (it would be good to explicitly break out the m_universalAccess - no same-origin restrictions - case to return false as a means to document that this was intentional). Then Document::threadLocalCache() can query canAccessSharedThreadLocalCache().
&gt; &gt;&gt; 
&gt; &gt;&gt; Additional remarks:
&gt; &gt;&gt; 
&gt; &gt;&gt; The general philosophy around SecurityOrigin, the file path separation enforcement, and other security policies in the engine is that we do not want restrictions to be removed once added.
&gt; &gt; 
&gt; &gt; In its current form, the patch requires that the argument to setEnforcesBlah to be true due to an assertion.  Sounds like you&apos;re saying it would be better if it did not take a bool at all.  I think that removing the bool arg to setEnforcesFilePathSeparation() addresses this specific concern.
&gt; 
&gt; That works for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396647</commentid>
    <comment_count>37</comment_count>
      <attachid>333138</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-02-05 17:59:18 -0800</bug_when>
    <thetext>Created attachment 333138
patch for landing

Addressed all the feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396649</commentid>
    <comment_count>38</comment_count>
      <attachid>333139</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-02-05 18:00:40 -0800</bug_when>
    <thetext>Created attachment 333139
patch for landing

Improved changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396651</commentid>
    <comment_count>39</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-02-05 18:03:07 -0800</bug_when>
    <thetext>Attachment 333139 did not pass style-queue:


ERROR: Source/WebCore/ForwardingHeaders/heap/ThreadLocalCache.h:0:  No copyright message found.  You should have a line: &quot;Copyright [year] &lt;Copyright Owner&gt;&quot;  [legal/copyright] [5]
Total errors found: 1 in 33 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>1396681</commentid>
    <comment_count>40</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-02-05 19:51:26 -0800</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/228149/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397725</commentid>
    <comment_count>41</comment_count>
      <attachid>333139</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-02-08 14:34:52 -0800</bug_when>
    <thetext>Comment on attachment 333139
patch for landing

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

&gt; Source/WebCore/page/OriginThreadLocalCache.cpp:36
&gt; +typedef HashMap&lt;RefPtr&lt;SecurityOrigin&gt;, OriginThreadLocalCache*&gt; ThreadLocalCacheMap;

So the key is a pointer and I see to remember that we can construct different SecurityOrigin objects for the same underlying origin, so how does this work? The previous iteration of the patch that I reviewed was actually dealing with this and using something else as key.

Doesn&apos;t this create a new TLC for every new document, even if in the same origin?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397727</commentid>
    <comment_count>42</comment_count>
      <attachid>333139</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-02-08 14:37:35 -0800</bug_when>
    <thetext>Comment on attachment 333139
patch for landing

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

&gt;&gt; Source/WebCore/page/OriginThreadLocalCache.cpp:36
&gt;&gt; +typedef HashMap&lt;RefPtr&lt;SecurityOrigin&gt;, OriginThreadLocalCache*&gt; ThreadLocalCacheMap;
&gt; 
&gt; So the key is a pointer and I see to remember that we can construct different SecurityOrigin objects for the same underlying origin, so how does this work? The previous iteration of the patch that I reviewed was actually dealing with this and using something else as key.
&gt; 
&gt; Doesn&apos;t this create a new TLC for every new document, even if in the same origin?

Oh, I see now Daniel&apos;s comment about SecurityOriginHash. I did not know we hashed RefPtr&lt;SecurityOrigin&gt; differently than regular pointers.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>332502</attachid>
            <date>2018-01-28 18:40:11 -0800</date>
            <delta_ts>2018-01-28 19:39:55 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>26696</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyNzcyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTAyLDYg
KzUwMiw3IEBAIGhlYXAvSXNvU3Vic3BhY2UuY3BwCiBoZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNw
cAogaGVhcC9MYXJnZUFsbG9jYXRpb24uY3BwCiBoZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAoraGVh
cC9Mb2NhbFNpZGVBbGxvY2F0b3IuY3BwCiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKIGhl
YXAvTWFya1N0YWNrLmNwcAogaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjc3MjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMjk0LDYgKzI5NCw3IEBACiAJCTBGNDI2QTQ4MTQ2MENCQjMw
MDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVy
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
NDI2QTQ5MTQ2MENCQjcwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ2MTQ2MENCQUIwMDEzMUY4
RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0QjE0NjBDRDZFMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNEEx
NDYwQ0Q2QjAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjQyQjNDMTIwMUVCNTBGMDAzNTcwMzEgLyogTG9j
YWxTaWRlQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjQyQjNCQzIwMUVCNEM4MDAzNTcwMzEgLyogTG9jYWxTaWRlQWxsb2NhdG9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MzE3
MzgxNDZCQUM2OTAwN0UzODkwIC8qIExpc3RhYmxlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MzE3MzYxNDZCQUM2NTAwN0UzODkwIC8q
IExpc3RhYmxlSGFuZGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNDU3MDM5MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFk
Q29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0
NTcwMzcxQkU0NEM5MTAwNjJBNjI5IC8qIEFpckVsaW1pbmF0ZURlYWRDb2RlLmggKi87IH07CiAJ
CTBGNDU3MDNEMUJFNDVGMEEwMDYyQTYyOSAvKiBBaXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ1NzAzQjFCRTQ1
RjBBMDA2MkE2MjkgLyogQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5oICovOyB9OwpAQCAtMjI2Miw2
ICsyMjYzLDkgQEAKIAkJMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3Zlcnku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmly
dHVhbFJlZ2lzdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpcnR1YWxS
ZWdpc3Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0QTE0NjBDRDZC
MDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEYXRhRm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDJCM0JDMjAx
RUI0QzgwMDM1NzAzMSAvKiBMb2NhbFNpZGVBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTG9jYWxTaWRlQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNDJCM0JGMjAxRUI0QzkwMDM1NzAzMSAvKiBMb2NhbFNpZGVBbGxvY2F0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTG9jYWxTaWRlQWxsb2Nh
dG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0MkIzQzAyMDFFQjUwOTAw
MzU3MDMxIC8qIEFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQzMTcz
NjE0NkJBQzY1MDA3RTM4OTAgLyogTGlzdGFibGVIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExpc3RhYmxlSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjQ1NzAzNjFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENvZGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyRWxpbWluYXRlRGVh
ZENvZGUuY3BwOyBwYXRoID0gYjMvYWlyL0FpckVsaW1pbmF0ZURlYWRDb2RlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0NTcwMzcxQkU0NEM5MTAwNjJBNjI5IC8qIEFpckVs
aW1pbmF0ZURlYWRDb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckVs
aW1pbmF0ZURlYWRDb2RlLmg7IHBhdGggPSBiMy9haXIvQWlyRWxpbWluYXRlRGVhZENvZGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1NTksMjEgKzU1NjMsMTQgQEAKIAkJMTQy
RTMxMkExMzRGRjBBNjAwQUZBREI1IC8qIGhlYXAgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAotCQkJCTBGNzVBMDU0MjAwRDI1RUYwMDM4RTJDRiAvKiBBbGxvY2F0
b3IuaCAqLywKLQkJCQkwRjc1QTA1RDIwMEQyNUYxMDAzOEUyQ0YgLyogQWxsb2NhdG9ySW5saW5l
cy5oICovLAotCQkJCTBGNzVBMDU5MjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5j
cHAgKi8sCi0JCQkJMEY3NUEwNTcyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9yLmgg
Ki8sCi0JCQkJMEY3NUEwNUEyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9ySW5saW5l
cy5oICovLAotCQkJCTBGNzVBMDU4MjAwRDI1RjAwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hl
LmNwcCAqLywKLQkJCQkwRjc1QTA1NTIwMEQyNUVGMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNo
ZS5oICovLAotCQkJCTBGNzVBMDU2MjAwRDI1RUYwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hl
SW5saW5lcy5oICovLAotCQkJCTBGNzVBMDVCMjAwRDI1RjEwMDM4RTJDRiAvKiBUaHJlYWRMb2Nh
bENhY2hlTGF5b3V0LmNwcCAqLywKLQkJCQkwRjc1QTA1QzIwMEQyNUYxMDAzOEUyQ0YgLyogVGhy
ZWFkTG9jYWxDYWNoZUxheW91dC5oICovLAogCQkJCTBGRUMzQzUwMUYzM0E0MTYwMEY1OUI2QyAv
KiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAqLywKIAkJCQkwRkVDM0M1MTFGMzNBNDE2MDBG
NTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovLAogCQkJCTBGQTc2MjBBMURCOTU5
RjYwMEI3QTJGRCAvKiBBbGxvY2F0aW5nU2NvcGUuaCAqLywKIAkJCQkwRkRDRTExQjFGQUU2MUY0
MDA2RjM5MDEgLyogQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmggKi8sCisJCQkJMEY0MkIzQzAyMDFF
QjUwOTAwMzU3MDMxIC8qIEFsbG9jYXRvci5jcHAgKi8sCisJCQkJMEY3NUEwNTQyMDBEMjVFRjAw
MzhFMkNGIC8qIEFsbG9jYXRvci5oICovLAogCQkJCTBGMzBDQjVEMUZDRTQ2QjQwMDRCNTMyMyAv
KiBBbGxvY2F0b3JGb3JNb2RlLmggKi8sCisJCQkJMEY3NUEwNUQyMDBEMjVGMTAwMzhFMkNGIC8q
IEFsbG9jYXRvcklubGluZXMuaCAqLywKIAkJCQkwRkI0Njc3RTFGRERBNkU1MDAzRkNCMDkgLyog
QXRvbUluZGljZXMuaCAqLywKIAkJCQlDMkI5MTZDNDE0REEwNDBDMDBDQkFDODYgLyogQmxvY2tE
aXJlY3RvcnkuY3BwICovLAogCQkJCUMyQjkxNkMxMTREQTAxNEUwMENCQUM4NiAvKiBCbG9ja0Rp
cmVjdG9yeS5oICovLApAQCAtNTY3NCw2ICs1NjcxLDExIEBACiAJCQkJMEYwNzBBNDUxRDU0M0E4
OTAwNkU3MjMyIC8qIExhcmdlQWxsb2NhdGlvbi5jcHAgKi8sCiAJCQkJMEYwNzBBNDYxRDU0M0E4
OTAwNkU3MjMyIC8qIExhcmdlQWxsb2NhdGlvbi5oICovLAogCQkJCTBGNDMxNzM2MTQ2QkFDNjUw
MDdFMzg5MCAvKiBMaXN0YWJsZUhhbmRsZXIuaCAqLywKKwkJCQkwRjc1QTA1OTIwMEQyNUYwMDAz
OEUyQ0YgLyogTG9jYWxBbGxvY2F0b3IuY3BwICovLAorCQkJCTBGNzVBMDU3MjAwRDI1RjAwMDM4
RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5oICovLAorCQkJCTBGNzVBMDVBMjAwRDI1RjAwMDM4RTJD
RiAvKiBMb2NhbEFsbG9jYXRvcklubGluZXMuaCAqLywKKwkJCQkwRjQyQjNCRjIwMUVCNEM5MDAz
NTcwMzEgLyogTG9jYWxTaWRlQWxsb2NhdG9yLmNwcCAqLywKKwkJCQkwRjQyQjNCQzIwMUVCNEM4
MDAzNTcwMzEgLyogTG9jYWxTaWRlQWxsb2NhdG9yLmggKi8sCiAJCQkJMEYyMDhBRDYxREYwOTI1
QTAwN0QzMjY5IC8qIExvY2tEdXJpbmdNYXJraW5nLmggKi8sCiAJCQkJMTRCNzIzM0YxMkQ3RDBE
QTAwM0JENUVEIC8qIE1hY2hpbmVTdGFja01hcmtlci5jcHAgKi8sCiAJCQkJMTRCNzIzNDAxMkQ3
RDBEQTAwM0JENUVEIC8qIE1hY2hpbmVTdGFja01hcmtlci5oICovLApAQCAtNTcyNCw2ICs1NzI2
LDExIEBACiAJCQkJMEZENzlBMkMxRUJCQkRCMjAwREE4OEQzIC8qIFN5bmNocm9ub3VzbmVzcy5o
ICovLAogCQkJCTBGMUZCMzhBMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVX
b3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwICovLAogCQkJCTBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1
MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLywKKwkJCQkw
Rjc1QTA1ODIwMEQyNUYwMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZS5jcHAgKi8sCisJCQkJ
MEY3NUEwNTUyMDBEMjVFRjAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGUuaCAqLywKKwkJCQkw
Rjc1QTA1NjIwMEQyNUVGMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaCAqLywK
KwkJCQkwRjc1QTA1QjIwMEQyNUYxMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUxheW91dC5j
cHAgKi8sCisJCQkJMEY3NUEwNUMyMDBEMjVGMTAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGVM
YXlvdXQuaCAqLywKIAkJCQkxNDE0NDhDQzEzQTE3ODM3MDBGNUJBMUEgLyogVGlueUJsb29tRmls
dGVyLmggKi8sCiAJCQkJMEY1RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5IC8qIFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXIuaCAqLywKIAkJCQkwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRDb3Vu
dGVyLmggKi8sCkBAIC05MDY5LDYgKzkwNzYsNyBAQAogCQkJCUJDMThDNDMxMEUxNkY1Q0QwMEIz
NDQ2MCAvKiBMZXhlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM1MkUwRTE2RkNFMTAwQjM0
NDYwIC8qIExleGVyLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZEM0IzQzMxMDE1OUQ3RjAw
Mjg2NUU3IC8qIExpbmtCdWZmZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNDJCM0MxMjAxRUI1
MEYwMDM1NzAzMSAvKiBMb2NhbFNpZGVBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NDMxNzM4MTQ2QkFDNjkwMDdFMzg5MCAvKiBMaXN0YWJsZUhhbmRsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3RTJFQTZCMEZCNDYwQ0YwMDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3MERFOUEwOTFCRTdENjlFMDA1RDg5RDkgLyogTExJbnRBc3NlbWJseS5o
IGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0Rp
cmVjdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxv
Y2tEaXJlY3RvcnkuY3BwCShyZXZpc2lvbiAyMjc3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcg
QEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNo
ZUlubGluZXMuaCIKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5o
PgogCkBAIC03MiwyMiArNzMsMjMgQEAgYm9vbCBCbG9ja0RpcmVjdG9yeTo6aXNQYWdlZE91dChk
b3VibGUgZAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTWFya2VkQmxvY2s6OkhhbmRsZSogQmxv
Y2tEaXJlY3Rvcnk6OmZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpCitNYXJrZWRCbG9jazo6SGFuZGxl
KiBCbG9ja0RpcmVjdG9yeTo6ZmluZEVtcHR5QmxvY2tUb1N0ZWFsKFRocmVhZExvY2FsQ2FjaGUm
IHRsYykKIHsKLSAgICBtX2VtcHR5Q3Vyc29yID0gbV9lbXB0eS5maW5kQml0KG1fZW1wdHlDdXJz
b3IsIHRydWUpOwotICAgIGlmIChtX2VtcHR5Q3Vyc29yID49IG1fYmxvY2tzLnNpemUoKSkKKyAg
ICBMb2NhbFNpZGVBbGxvY2F0b3ImIGFsbG9jYXRvciA9IHRsYy5zaWRlQWxsb2NhdG9yKG1fdGxj
T2Zmc2V0KTsKKyAgICBhbGxvY2F0b3IubV9lbXB0eUN1cnNvciA9IG1fZW1wdHkuZmluZEJpdChh
bGxvY2F0b3IubV9lbXB0eUN1cnNvciwgdHJ1ZSk7CisgICAgaWYgKGFsbG9jYXRvci5tX2VtcHR5
Q3Vyc29yID49IG1fYmxvY2tzLnNpemUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
cmV0dXJuIG1fYmxvY2tzW21fZW1wdHlDdXJzb3JdOworICAgIHJldHVybiBtX2Jsb2Nrc1thbGxv
Y2F0b3IubV9lbXB0eUN1cnNvcl07CiB9CiAKLU1hcmtlZEJsb2NrOjpIYW5kbGUqIEJsb2NrRGly
ZWN0b3J5OjpmaW5kQmxvY2tGb3JBbGxvY2F0aW9uKCkKK01hcmtlZEJsb2NrOjpIYW5kbGUqIEJs
b2NrRGlyZWN0b3J5OjpmaW5kQmxvY2tGb3JBbGxvY2F0aW9uKExvY2FsQWxsb2NhdG9yJiBhbGxv
Y2F0b3IpCiB7Ci0gICAgbV9hbGxvY2F0aW9uQ3Vyc29yID0gKG1fY2FuQWxsb2NhdGVCdXROb3RF
bXB0eSB8IG1fZW1wdHkpLmZpbmRCaXQobV9hbGxvY2F0aW9uQ3Vyc29yLCB0cnVlKTsKLSAgICBp
ZiAobV9hbGxvY2F0aW9uQ3Vyc29yID49IG1fYmxvY2tzLnNpemUoKSkKKyAgICBhbGxvY2F0b3Iu
bV9hbGxvY2F0aW9uQ3Vyc29yID0gKG1fY2FuQWxsb2NhdGVCdXROb3RFbXB0eSB8IG1fZW1wdHkp
LmZpbmRCaXQoYWxsb2NhdG9yLm1fYWxsb2NhdGlvbkN1cnNvciwgdHJ1ZSk7CisgICAgaWYgKGFs
bG9jYXRvci5tX2FsbG9jYXRpb25DdXJzb3IgPj0gbV9ibG9ja3Muc2l6ZSgpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICBzZXRJc0NhbkFsbG9jYXRlQnV0Tm90RW1wdHkoTm9M
b2NraW5nTmVjZXNzYXJ5LCBtX2FsbG9jYXRpb25DdXJzb3IsIGZhbHNlKTsKLSAgICByZXR1cm4g
bV9ibG9ja3NbbV9hbGxvY2F0aW9uQ3Vyc29yXTsKKyAgICBzZXRJc0NhbkFsbG9jYXRlQnV0Tm90
RW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBhbGxvY2F0b3IubV9hbGxvY2F0aW9uQ3Vyc29yLCBm
YWxzZSk7CisgICAgcmV0dXJuIG1fYmxvY2tzW2FsbG9jYXRvci5tX2FsbG9jYXRpb25DdXJzb3Jd
OwogfQogCiBNYXJrZWRCbG9jazo6SGFuZGxlKiBCbG9ja0RpcmVjdG9yeTo6dHJ5QWxsb2NhdGVC
bG9jaygpCkBAIC0xODIsOSArMTg0LDExIEBAIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OnByZXBhcmVG
b3JBbGxvY2F0aW8KICAgICAgICAgWyZdIChMb2NhbEFsbG9jYXRvciogYWxsb2NhdG9yKSB7CiAg
ICAgICAgICAgICBhbGxvY2F0b3ItPnByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CiAgICAgICAgIH0p
OworICAgIG1fbG9jYWxTaWRlQWxsb2NhdG9ycy5mb3JFYWNoKAorICAgICAgICBbJl0gKExvY2Fs
U2lkZUFsbG9jYXRvciogc2lkZUFsbG9jYXRvcikgeworICAgICAgICAgICAgc2lkZUFsbG9jYXRv
ci0+cHJlcGFyZUZvckFsbG9jYXRpb24oKTsKKyAgICAgICAgfSk7CiAgICAgCi0gICAgbV9hbGxv
Y2F0aW9uQ3Vyc29yID0gMDsKLSAgICBtX2VtcHR5Q3Vyc29yID0gMDsKICAgICBtX3Vuc3dlcHRD
dXJzb3IgPSAwOwogICAgIAogICAgIG1fZWRlbi5jbGVhckFsbCgpOwpAQCAtMjA5LDYgKzIxMyw4
IEBAIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OnN0b3BBbGxvY2F0aW5nRm9yR28KICAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fbG9jYWxBbGxvY2F0b3JzTG9jayk7CiAgICAgd2hpbGUgKCFtX2xv
Y2FsQWxsb2NhdG9ycy5pc0VtcHR5KCkpCiAgICAgICAgIG1fbG9jYWxBbGxvY2F0b3JzLmJlZ2lu
KCktPnJlbW92ZSgpOworICAgIHdoaWxlICghbV9sb2NhbFNpZGVBbGxvY2F0b3JzLmlzRW1wdHko
KSkKKyAgICAgICAgbV9sb2NhbFNpZGVBbGxvY2F0b3JzLmJlZ2luKCktPnJlbW92ZSgpOwogfQog
CiB2b2lkIEJsb2NrRGlyZWN0b3J5OjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmgJKHJldmlzaW9uIDIyNzcy
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJDZWxsQXR0cmlidXRlcy5oIgog
I2luY2x1ZGUgIkZyZWVMaXN0LmgiCiAjaW5jbHVkZSAiTG9jYWxBbGxvY2F0b3IuaCIKKyNpbmNs
dWRlICJMb2NhbFNpZGVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2lu
Y2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KQEAg
LTQzLDYgKzQ0LDcgQEAgY2xhc3MgSGVhcDsKIGNsYXNzIElzb0NlbGxTZXQ7CiBjbGFzcyBNYXJr
ZWRTcGFjZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKK2NsYXNzIFRocmVhZExvY2Fs
Q2FjaGU7CiBjbGFzcyBUaHJlYWRMb2NhbENhY2hlTGF5b3V0OwogCiAjZGVmaW5lIEZPUl9FQUNI
X0JMT0NLX0RJUkVDVE9SWV9CSVQobWFjcm8pIFwKQEAgLTE0OSw3ICsxNTEsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXROZXh0RGlyZWN0b3J5SW5TdWJzcGFjZShCbG9ja0RpcmVjdG9yeSogZGly
ZWN0b3J5KSB7IG1fbmV4dERpcmVjdG9yeUluU3Vic3BhY2UgPSBkaXJlY3Rvcnk7IH0KICAgICB2
b2lkIHNldE5leHREaXJlY3RvcnlJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoQmxvY2tEaXJlY3Rv
cnkqIGRpcmVjdG9yeSkgeyBtX25leHREaXJlY3RvcnlJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3Ig
PSBkaXJlY3Rvcnk7IH0KICAgICAKLSAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBmaW5kRW1wdHlC
bG9ja1RvU3RlYWwoKTsKKyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBmaW5kRW1wdHlCbG9ja1Rv
U3RlYWwoVGhyZWFkTG9jYWxDYWNoZSYpOwogICAgIAogICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUq
IGZpbmRCbG9ja1RvU3dlZXAoKTsKICAgICAKQEAgLTE2MiwxMiArMTY0LDEzIEBAIHB1YmxpYzoK
ICAgICB2b2lkIGR1bXBCaXRzKFByaW50U3RyZWFtJiA9IFdURjo6ZGF0YUZpbGUoKSk7CiAgICAg
CiBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBMb2NhbEFsbG9jYXRvcjsKICAgICBmcmllbmQg
Y2xhc3MgSXNvQ2VsbFNldDsKKyAgICBmcmllbmQgY2xhc3MgTG9jYWxBbGxvY2F0b3I7CisgICAg
ZnJpZW5kIGNsYXNzIExvY2FsU2lkZUFsbG9jYXRvcjsKICAgICBmcmllbmQgY2xhc3MgTWFya2Vk
QmxvY2s7CiAgICAgZnJpZW5kIGNsYXNzIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ7CiAgICAgCi0g
ICAgTWFya2VkQmxvY2s6OkhhbmRsZSogZmluZEJsb2NrRm9yQWxsb2NhdGlvbigpOworICAgIE1h
cmtlZEJsb2NrOjpIYW5kbGUqIGZpbmRCbG9ja0ZvckFsbG9jYXRpb24oTG9jYWxBbGxvY2F0b3Im
KTsKICAgICAKICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiB0cnlBbGxvY2F0ZUJsb2NrKCk7CiAg
ICAgCkBAIC0xODQsOCArMTg3LDYgQEAgcHJpdmF0ZToKICAgICAKICAgICAvLyBBZnRlciB5b3Ug
ZG8gc29tZXRoaW5nIHRvIGEgYmxvY2sgYmFzZWQgb24gb25lIG9mIHRoZXNlIGN1cnNvcnMsIHlv
dSBjbGVhciB0aGUgYml0IGluIHRoZQogICAgIC8vIGNvcnJlc3BvbmRpbmcgYml0dmVjdG9yIGFu
ZCBsZWF2ZSB0aGUgY3Vyc29yIHdoZXJlIGl0IHdhcy4KLSAgICBzaXplX3QgbV9hbGxvY2F0aW9u
Q3Vyc29yIHsgMCB9OyAvLyBQb2ludHMgdG8gdGhlIG5leHQgYmxvY2sgdGhhdCBpcyBhIGNhbmRp
ZGF0ZSBmb3IgYWxsb2NhdGlvbi4KLSAgICBzaXplX3QgbV9lbXB0eUN1cnNvciB7IDAgfTsgLy8g
UG9pbnRzIHRvIHRoZSBuZXh0IGJsb2NrIHRoYXQgaXMgYSBjYW5kaWRhdGUgZm9yIGVtcHR5IGFs
bG9jYXRpb24gKGFsbG9jYXRpbmcgaW4gZW1wdHkgYmxvY2tzKS4KICAgICBzaXplX3QgbV91bnN3
ZXB0Q3Vyc29yIHsgMCB9OyAvLyBQb2ludHMgdG8gdGhlIG5leHQgYmxvY2sgdGhhdCBpcyBhIGNh
bmRpZGF0ZSBmb3IgaW5jcmVtZW50YWwgc3dlZXBpbmcuCiAgICAgCiAgICAgdW5zaWduZWQgbV9j
ZWxsU2l6ZTsKQEAgLTIwMSw2ICsyMDIsNyBAQCBwcml2YXRlOgogICAgIExvY2sgbV9sb2NhbEFs
bG9jYXRvcnNMb2NrOwogICAgIHNpemVfdCBtX3RsY09mZnNldDsKICAgICBTZW50aW5lbExpbmtl
ZExpc3Q8TG9jYWxBbGxvY2F0b3IsIEJhc2ljUmF3U2VudGluZWxOb2RlPExvY2FsQWxsb2NhdG9y
Pj4gbV9sb2NhbEFsbG9jYXRvcnM7CisgICAgU2VudGluZWxMaW5rZWRMaXN0PExvY2FsU2lkZUFs
bG9jYXRvciwgQmFzaWNSYXdTZW50aW5lbE5vZGU8TG9jYWxTaWRlQWxsb2NhdG9yPj4gbV9sb2Nh
bFNpZGVBbGxvY2F0b3JzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMjc3
MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUxvY2Fs
QWxsb2NhdG9yOjpMb2NhbEFsbG9jYXRvcihCbG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5KQotICAg
IDogbV9kaXJlY3RvcnkoZGlyZWN0b3J5KQorTG9jYWxBbGxvY2F0b3I6OkxvY2FsQWxsb2NhdG9y
KFRocmVhZExvY2FsQ2FjaGUqIHRsYywgQmxvY2tEaXJlY3RvcnkqIGRpcmVjdG9yeSkKKyAgICA6
IG1fdGxjKHRsYykKKyAgICAsIG1fZGlyZWN0b3J5KGRpcmVjdG9yeSkKICAgICAsIG1fY2VsbFNp
emUoZGlyZWN0b3J5LT5tX2NlbGxTaXplKQogICAgICwgbV9mcmVlTGlzdChtX2NlbGxTaXplKQog
ewpAQCAtNDIsMTEgKzQzLDEzIEBAIExvY2FsQWxsb2NhdG9yOjpMb2NhbEFsbG9jYXRvcihCbG9j
a0RpcmUKIH0KIAogTG9jYWxBbGxvY2F0b3I6OkxvY2FsQWxsb2NhdG9yKExvY2FsQWxsb2NhdG9y
JiYgb3RoZXIpCi0gICAgOiBtX2RpcmVjdG9yeShvdGhlci5tX2RpcmVjdG9yeSkKKyAgICA6IG1f
dGxjKG90aGVyLm1fdGxjKQorICAgICwgbV9kaXJlY3Rvcnkob3RoZXIubV9kaXJlY3RvcnkpCiAg
ICAgLCBtX2NlbGxTaXplKG90aGVyLm1fY2VsbFNpemUpCiAgICAgLCBtX2ZyZWVMaXN0KFdURk1v
dmUob3RoZXIubV9mcmVlTGlzdCkpCiAgICAgLCBtX2N1cnJlbnRCbG9jayhvdGhlci5tX2N1cnJl
bnRCbG9jaykKICAgICAsIG1fbGFzdEFjdGl2ZUJsb2NrKG90aGVyLm1fbGFzdEFjdGl2ZUJsb2Nr
KQorICAgICwgbV9hbGxvY2F0aW9uQ3Vyc29yKG90aGVyLm1fYWxsb2NhdGlvbkN1cnNvcikKIHsK
ICAgICBvdGhlci5yZXNldCgpOwogICAgIGlmIChvdGhlci5pc09uTGlzdCgpKSB7CkBAIC02MSw2
ICs2NCw3IEBAIHZvaWQgTG9jYWxBbGxvY2F0b3I6OnJlc2V0KCkKICAgICBtX2ZyZWVMaXN0LmNs
ZWFyKCk7CiAgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOwogICAgIG1fbGFzdEFjdGl2ZUJs
b2NrID0gbnVsbHB0cjsKKyAgICBtX2FsbG9jYXRpb25DdXJzb3IgPSAwOwogfQogCiBMb2NhbEFs
bG9jYXRvcjo6fkxvY2FsQWxsb2NhdG9yKCkKQEAgLTIwMSw3ICsyMDUsNyBAQCB2b2lkKiBMb2Nh
bEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVXaXRob3V0CiAgICAgQVNTRVJUKG1fZnJlZUxpc3QuYWxs
b2NhdGlvbldpbGxGYWlsKCkpOwogICAgIAogICAgIGZvciAoOzspIHsKLSAgICAgICAgTWFya2Vk
QmxvY2s6OkhhbmRsZSogYmxvY2sgPSBtX2RpcmVjdG9yeS0+ZmluZEJsb2NrRm9yQWxsb2NhdGlv
bigpOworICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IG1fZGlyZWN0b3J5LT5m
aW5kQmxvY2tGb3JBbGxvY2F0aW9uKCp0aGlzKTsKICAgICAgICAgaWYgKCFibG9jaykKICAgICAg
ICAgICAgIGJyZWFrOwogCkBAIC0yMTEsNyArMjE1LDcgQEAgdm9pZCogTG9jYWxBbGxvY2F0b3I6
OnRyeUFsbG9jYXRlV2l0aG91dAogICAgIAogICAgIGlmIChPcHRpb25zOjpzdGVhbEVtcHR5Qmxv
Y2tzRnJvbU90aGVyQWxsb2NhdG9ycygpCiAgICAgICAgICYmIChPcHRpb25zOjp0cmFkZURlc3Ry
dWN0b3JCbG9ja3MoKSB8fCAhbV9kaXJlY3RvcnktPm5lZWRzRGVzdHJ1Y3Rpb24oKSkpIHsKLSAg
ICAgICAgaWYgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9kaXJlY3RvcnktPm1fc3Vi
c3BhY2UtPmZpbmRFbXB0eUJsb2NrVG9TdGVhbCgpKSB7CisgICAgICAgIGlmIChNYXJrZWRCbG9j
azo6SGFuZGxlKiBibG9jayA9IG1fZGlyZWN0b3J5LT5tX3N1YnNwYWNlLT5maW5kRW1wdHlCbG9j
a1RvU3RlYWwoKm1fdGxjKSkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmxvY2stPmFs
aWduZWRNZW1vcnlBbGxvY2F0b3IoKSA9PSBtX2RpcmVjdG9yeS0+bV9zdWJzcGFjZS0+YWxpZ25l
ZE1lbW9yeUFsbG9jYXRvcigpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgYmxvY2stPnN3
ZWVwKG51bGxwdHIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxv
Y2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFs
bG9jYXRvci5oCShyZXZpc2lvbiAyMjc3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Mb2NhbEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMiArMzMsMTMgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEJsb2NrRGlyZWN0b3J5OwogY2xhc3MgR0NEZWZlcnJhbENv
bnRleHQ7CitjbGFzcyBUaHJlYWRMb2NhbENhY2hlOwogCiBjbGFzcyBMb2NhbEFsbG9jYXRvciA6
IHB1YmxpYyBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxMb2NhbEFsbG9jYXRvcj4gewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKExvY2FsQWxsb2NhdG9yKTsKICAgICAKIHB1YmxpYzoKLSAgICBMb2Nh
bEFsbG9jYXRvcihCbG9ja0RpcmVjdG9yeSopOworICAgIExvY2FsQWxsb2NhdG9yKFRocmVhZExv
Y2FsQ2FjaGUqLCBCbG9ja0RpcmVjdG9yeSopOwogICAgIExvY2FsQWxsb2NhdG9yKExvY2FsQWxs
b2NhdG9yJiYpOwogICAgIH5Mb2NhbEFsbG9jYXRvcigpOwogICAgIApAQCAtNTUsNiArNTYsOCBA
QCBwdWJsaWM6CiAgICAgYm9vbCBpc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqKSBjb25zdDsK
IAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQmxvY2tEaXJlY3Rvcnk7CisgICAgCiAgICAg
dm9pZCByZXNldCgpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlU2xvd0Nh
c2UoR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUp
OwogICAgIHZvaWQgZGlkQ29uc3VtZUZyZWVMaXN0KCk7CkBAIC02MywxMSArNjYsMTYgQEAgcHJp
dmF0ZToKICAgICB2b2lkKiBhbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKICAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZChHQ0RlZmVycmFsQ29u
dGV4dCopOwogCisgICAgVGhyZWFkTG9jYWxDYWNoZSogbV90bGM7CiAgICAgQmxvY2tEaXJlY3Rv
cnkqIG1fZGlyZWN0b3J5OwogICAgIHVuc2lnbmVkIG1fY2VsbFNpemU7CiAgICAgRnJlZUxpc3Qg
bV9mcmVlTGlzdDsKICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBtX2N1cnJlbnRCbG9jayB7IG51
bGxwdHIgfTsKICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBtX2xhc3RBY3RpdmVCbG9jayB7IG51
bGxwdHIgfTsKKyAgICAKKyAgICAvLyBBZnRlciB5b3UgZG8gc29tZXRoaW5nIHRvIGEgYmxvY2sg
YmFzZWQgb24gb25lIG9mIHRoZXNlIGN1cnNvcnMsIHlvdSBjbGVhciB0aGUgYml0IGluIHRoZQor
ICAgIC8vIGNvcnJlc3BvbmRpbmcgYml0dmVjdG9yIGFuZCBsZWF2ZSB0aGUgY3Vyc29yIHdoZXJl
IGl0IHdhcy4KKyAgICBzaXplX3QgbV9hbGxvY2F0aW9uQ3Vyc29yIHsgMCB9OyAvLyBQb2ludHMg
dG8gdGhlIG5leHQgYmxvY2sgdGhhdCBpcyBhIGNhbmRpZGF0ZSBmb3IgYWxsb2NhdGlvbi4KIH07
CiAKIGlubGluZSBwdHJkaWZmX3QgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxTaWRlQWxsb2NhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbFNpZGVBbGxvY2F0
b3IuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2Fs
U2lkZUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiTG9jYWxTaWRlQWxsb2NhdG9yLmgiCisKKyNpbmNsdWRlICJCbG9ja0Rp
cmVjdG9yeS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworTG9jYWxTaWRlQWxsb2NhdG9yOjpMb2Nh
bFNpZGVBbGxvY2F0b3IoQmxvY2tEaXJlY3RvcnkqIGRpcmVjdG9yeSkKKyAgICA6IG1fZGlyZWN0
b3J5KGRpcmVjdG9yeSkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGRpcmVjdG9yeS0+
bV9sb2NhbEFsbG9jYXRvcnNMb2NrKTsKKyAgICBkaXJlY3RvcnktPm1fbG9jYWxTaWRlQWxsb2Nh
dG9ycy5hcHBlbmQodGhpcyk7Cit9CisKK0xvY2FsU2lkZUFsbG9jYXRvcjo6fkxvY2FsU2lkZUFs
bG9jYXRvcigpCit7CisgICAgaWYgKGlzT25MaXN0KCkpIHsKKyAgICAgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhtX2RpcmVjdG9yeS0+bV9sb2NhbEFsbG9jYXRvcnNMb2NrKTsKKyAgICAgICAg
cmVtb3ZlKCk7CisgICAgfQorfQorCit2b2lkIExvY2FsU2lkZUFsbG9jYXRvcjo6cHJlcGFyZUZv
ckFsbG9jYXRpb24oKQoreworICAgIG1fZW1wdHlDdXJzb3IgPSAwOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxTaWRlQWxs
b2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxT
aWRlQWxsb2NhdG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTG9jYWxTaWRlQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBCbG9ja0RpcmVjdG9yeTsKKworY2xh
c3MgTG9jYWxTaWRlQWxsb2NhdG9yIDogcHVibGljIEJhc2ljUmF3U2VudGluZWxOb2RlPExvY2Fs
U2lkZUFsbG9jYXRvcj4geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExvY2FsU2lkZUFsbG9j
YXRvcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBMb2Nh
bFNpZGVBbGxvY2F0b3IoQmxvY2tEaXJlY3RvcnkqKTsKKyAgICB+TG9jYWxTaWRlQWxsb2NhdG9y
KCk7CisgICAgCisgICAgdm9pZCBwcmVwYXJlRm9yQWxsb2NhdGlvbigpOworICAgIAorcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgQmxvY2tEaXJlY3Rvcnk7CisgICAgCisgICAgQmxvY2tEaXJl
Y3RvcnkqIG1fZGlyZWN0b3J5OworICAgIAorICAgIC8vIEFmdGVyIHlvdSBkbyBzb21ldGhpbmcg
dG8gYSBibG9jayBiYXNlZCBvbiBvbmUgb2YgdGhlc2UgY3Vyc29ycywgeW91IGNsZWFyIHRoZSBi
aXQgaW4gdGhlCisgICAgLy8gY29ycmVzcG9uZGluZyBiaXR2ZWN0b3IgYW5kIGxlYXZlIHRoZSBj
dXJzb3Igd2hlcmUgaXQgd2FzLgorICAgIHNpemVfdCBtX2VtcHR5Q3Vyc29yIHsgMCB9OworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAJKHJldmlzaW9u
IDIyNzcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdD
b25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOSBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmgiCiAKKyNp
bmNsdWRlICJHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50OjpNYXJr
U3RhY2tNZXJnaW5nQ29uc3RyYWludChIZWFwJiBoZWFwKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCShy
ZXZpc2lvbiAyMjc3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tN
ZXJnaW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw5IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCitjbGFzcyBIZWFwOworY2xhc3MgU2xvdFZpc2l0b3I7CisKIGNsYXNz
IE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50IDogcHVibGljIE1hcmtpbmdDb25zdHJhaW50IHsK
IHB1YmxpYzoKICAgICBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludChIZWFwJik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuY3BwCShyZXZpc2lvbiAyMjc3MjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgwLDEwICs4MCwxMCBAQCB2b2lkIFN1YnNwYWNlOjpwcmVwYXJlRm9yQWxsb2NhdGlvbigp
CiAgICAgbV9kaXJlY3RvcnlGb3JFbXB0eUFsbG9jYXRpb24gPSBtX2FsaWduZWRNZW1vcnlBbGxv
Y2F0b3ItPmZpcnN0RGlyZWN0b3J5KCk7CiB9CiAKLU1hcmtlZEJsb2NrOjpIYW5kbGUqIFN1YnNw
YWNlOjpmaW5kRW1wdHlCbG9ja1RvU3RlYWwoKQorTWFya2VkQmxvY2s6OkhhbmRsZSogU3Vic3Bh
Y2U6OmZpbmRFbXB0eUJsb2NrVG9TdGVhbChUaHJlYWRMb2NhbENhY2hlJiB0bGMpCiB7CiAgICAg
Zm9yICg7IG1fZGlyZWN0b3J5Rm9yRW1wdHlBbGxvY2F0aW9uOyBtX2RpcmVjdG9yeUZvckVtcHR5
QWxsb2NhdGlvbiA9IG1fZGlyZWN0b3J5Rm9yRW1wdHlBbGxvY2F0aW9uLT5uZXh0RGlyZWN0b3J5
SW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkpIHsKLSAgICAgICAgaWYgKE1hcmtlZEJsb2NrOjpI
YW5kbGUqIGJsb2NrID0gbV9kaXJlY3RvcnlGb3JFbXB0eUFsbG9jYXRpb24tPmZpbmRFbXB0eUJs
b2NrVG9TdGVhbCgpKQorICAgICAgICBpZiAoTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSBt
X2RpcmVjdG9yeUZvckVtcHR5QWxsb2NhdGlvbi0+ZmluZEVtcHR5QmxvY2tUb1N0ZWFsKHRsYykp
CiAgICAgICAgICAgICByZXR1cm4gYmxvY2s7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCShyZXZpc2lvbiAyMjc3MjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw2ICszNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBBbGlnbmVkTWVtb3J5
QWxsb2NhdG9yOwogY2xhc3MgSGVhcENlbGxUeXBlOworY2xhc3MgVGhyZWFkTG9jYWxDYWNoZTsK
IAogLy8gVGhlIGlkZWEgb2Ygc3Vic3BhY2VzIGlzIHRoYXQgeW91IGNhbiBwcm92aWRlIHNvbWUg
Y3VzdG9tIGJlaGF2aW9yIGZvciB5b3VyIG9iamVjdHMgaWYgeW91CiAvLyBhbGxvY2F0ZSB0aGVt
IGZyb20gYSBjdXN0b20gU3Vic3BhY2UgaW4gd2hpY2ggeW91IG92ZXJyaWRlIHNvbWUgb2YgdGhl
IHZpcnR1YWwgbWV0aG9kcy4gVGhpcwpAQCAtNjUsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBkaWRDcmVhdGVGaXJzdERpcmVjdG9yeShCbG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5KSB7IG1f
ZGlyZWN0b3J5Rm9yRW1wdHlBbGxvY2F0aW9uID0gZGlyZWN0b3J5OyB9CiAgICAgCiAgICAgLy8g
RmluZHMgYW4gZW1wdHkgYmxvY2sgZnJvbSBhbnkgU3Vic3BhY2UgdGhhdCBhZ3JlZXMgdG8gdHJh
ZGUgYmxvY2tzIHdpdGggdXMuCi0gICAgTWFya2VkQmxvY2s6OkhhbmRsZSogZmluZEVtcHR5Qmxv
Y2tUb1N0ZWFsKCk7CisgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogZmluZEVtcHR5QmxvY2tUb1N0
ZWFsKFRocmVhZExvY2FsQ2FjaGUmKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgogICAgIHZvaWQgZm9yRWFjaERpcmVjdG9yeShjb25zdCBGdW5jJik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmNwcAkocmV2aXNpb24g
MjI3NzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDIwIEBAIFRocmVhZExvY2FsQ2FjaGU6On5U
aHJlYWRMb2NhbENhY2hlKCkKICAgICBkZXN0cm95RGF0YShtX2RhdGEpOwogfQogCitMb2NhbFNp
ZGVBbGxvY2F0b3ImIFRocmVhZExvY2FsQ2FjaGU6OnNpZGVBbGxvY2F0b3Ioc2l6ZV90IG9mZnNl
dCkKK3sKKyAgICBzaXplX3QgaW5kZXggPSBvZmZzZXQgLyBzaXplb2YoTG9jYWxBbGxvY2F0b3Ip
OworICAgIGlmIChpbmRleCA8IG1fc2lkZUFsbG9jYXRvcnMuc2l6ZSgpKQorICAgICAgICByZXR1
cm4gKm1fc2lkZUFsbG9jYXRvcnNbaW5kZXhdOworICAgIAorICAgIFRocmVhZExvY2FsQ2FjaGVM
YXlvdXQ6OlNuYXBzaG90IGxheW91dCA9IG1faGVhcC50aHJlYWRMb2NhbENhY2hlTGF5b3V0KCku
c25hcHNob3QoKTsKKyAgICB3aGlsZSAobV9zaWRlQWxsb2NhdG9ycy5zaXplKCkgPCBsYXlvdXQu
ZGlyZWN0b3JpZXMuc2l6ZSgpKQorICAgICAgICBtX3NpZGVBbGxvY2F0b3JzLmFwcGVuZChzdGQ6
Om1ha2VfdW5pcXVlPExvY2FsU2lkZUFsbG9jYXRvcj4obGF5b3V0LmRpcmVjdG9yaWVzW21fc2lk
ZUFsbG9jYXRvcnMuc2l6ZSgpXSkpOworICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwg
bV9zaWRlQWxsb2NhdG9ycy5zaXplKCkpOworICAgIHJldHVybiAqbV9zaWRlQWxsb2NhdG9yc1tp
bmRleF07Cit9CisKIFRocmVhZExvY2FsQ2FjaGU6OkRhdGEqIFRocmVhZExvY2FsQ2FjaGU6OmFs
bG9jYXRlRGF0YSgpCiB7CiAgICAgc2l6ZV90IG9sZFNpemUgPSBtX2RhdGEgPyBtX2RhdGEtPnNp
emUgOiAwOwpAQCAtNTksNyArNzMsNyBAQCBUaHJlYWRMb2NhbENhY2hlOjpEYXRhKiBUaHJlYWRM
b2NhbENhY2hlCiAgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgb2xkU2l6ZTsg
b2Zmc2V0ICs9IHNpemVvZihMb2NhbEFsbG9jYXRvcikpCiAgICAgICAgIG5ldyAoJmFsbG9jYXRv
cigqcmVzdWx0LCBvZmZzZXQpKSBMb2NhbEFsbG9jYXRvcihXVEZNb3ZlKGFsbG9jYXRvcigqbV9k
YXRhLCBvZmZzZXQpKSk7CiAgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gb2xkU2l6ZTsgb2Zmc2V0
IDwgbGF5b3V0LnNpemU7IG9mZnNldCArPSBzaXplb2YoTG9jYWxBbGxvY2F0b3IpKQotICAgICAg
ICBuZXcgKCZhbGxvY2F0b3IoKnJlc3VsdCwgb2Zmc2V0KSkgTG9jYWxBbGxvY2F0b3IobGF5b3V0
LmRpcmVjdG9yaWVzW29mZnNldCAvIHNpemVvZihMb2NhbEFsbG9jYXRvcildKTsKKyAgICAgICAg
bmV3ICgmYWxsb2NhdG9yKCpyZXN1bHQsIG9mZnNldCkpIExvY2FsQWxsb2NhdG9yKHRoaXMsIGxh
eW91dC5kaXJlY3Rvcmllc1tvZmZzZXQgLyBzaXplb2YoTG9jYWxBbGxvY2F0b3IpXSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhy
ZWFkTG9jYWxDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1RocmVhZExvY2FsQ2FjaGUuaAkocmV2aXNpb24gMjI3NzIwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMyAr
MjUsMTcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBbGxvY2F0aW9uRmFpbHVyZU1v
ZGUuaCIKKyNpbmNsdWRlICJMb2NhbEFsbG9jYXRvci5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFs
bG9jLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RUTFMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBIZWFwOworY2xhc3MgTG9jYWxTaWRlQWxsb2NhdG9yOwogY2xhc3MgVk07CiAK
IGNsYXNzIFRocmVhZExvY2FsQ2FjaGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhy
ZWFkTG9jYWxDYWNoZT4gewpAQCAtNTMsNiArNTcsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3Rh
dGljIExvY2FsQWxsb2NhdG9yJiBhbGxvY2F0b3IoVk0mLCBzaXplX3Qgb2Zmc2V0KTsKICAgICAK
KyAgICBMb2NhbFNpZGVBbGxvY2F0b3ImIHNpZGVBbGxvY2F0b3Ioc2l6ZV90IG9mZnNldCk7Cisg
ICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3VjY2Vzc0Z1bmMsIHR5cGVuYW1lIEZhaWx1cmVG
dW5jPgogICAgIHN0YXRpYyB2b2lkIHRyeUdldEFsbG9jYXRvcihWTSYsIHNpemVfdCBvZmZzZXQs
IGNvbnN0IFN1Y2Nlc3NGdW5jJiwgY29uc3QgRmFpbHVyZUZ1bmMmKTsKICAgICAKQEAgLTkxLDYg
Kzk3LDggQEAgcHJpdmF0ZToKICAgICAvLyBpdCdzIGNvcnJlY3QgZm9yIGltbW9ydGFsIGNhY2hl
cy4KICAgICBIZWFwJiBtX2hlYXA7CiAgICAgRGF0YSogbV9kYXRhIHsgbnVsbHB0ciB9OworICAg
IAorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TG9jYWxTaWRlQWxsb2NhdG9yPj4gbV9zaWRl
QWxsb2NhdG9yczsKIAogI2lmIFVTRShGQVNUX1RMU19GT1JfVExDKQogICAgIHN0YXRpYyBjb25z
dCBwdGhyZWFkX2tleV90IHRsc0tleSA9IFdURl9HQ19UTENfS0VZOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oCShy
ZXZpc2lvbiAyMjc3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2Nh
bENhY2hlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGUuaCIKKyNpbmNsdWRlICJWTS5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>332503</attachid>
            <date>2018-01-28 19:39:55 -0800</date>
            <delta_ts>2018-01-28 22:06:46 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>36080</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyNzcyMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTAyLDYg
KzUwMiw3IEBAIGhlYXAvSXNvU3Vic3BhY2UuY3BwCiBoZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNw
cAogaGVhcC9MYXJnZUFsbG9jYXRpb24uY3BwCiBoZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAoraGVh
cC9Mb2NhbFNpZGVBbGxvY2F0b3IuY3BwCiBoZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKIGhl
YXAvTWFya1N0YWNrLmNwcAogaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAKQEAg
LTUxMiw2ICs1MTMsNyBAQCBoZWFwL01hcmtpbmdDb25zdHJhaW50U2V0LmNwcAogaGVhcC9NYXJr
aW5nQ29uc3RyYWludFNvbHZlci5jcHAKIGhlYXAvTXV0YXRvclNjaGVkdWxlci5jcHAKIGhlYXAv
TXV0YXRvclN0YXRlLmNwcAoraGVhcC9TZWN1cml0eU9yaWdpblRva2VuLmNwcAogaGVhcC9TaW1w
bGVNYXJraW5nQ29uc3RyYWludC5jcHAKIGhlYXAvU2xvdFZpc2l0b3IuY3BwCiBoZWFwL1NwYWNl
VGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjI3NzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI5NCw2ICsy
OTQsOCBAQAogCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNDUxNDYw
Q0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0OTE0NjBDQkI3MDAxMzFGOEYgLyogVmly
dHVhbFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNEIxNDYw
Q0Q2RTAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAvKiBEYXRhRm9ybWF0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY0
MkIzQzEyMDFFQjUwRjAwMzU3MDMxIC8qIExvY2FsU2lkZUFsbG9jYXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MkIzQkMyMDFFQjRDODAwMzU3
MDMxIC8qIExvY2FsU2lkZUFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGNDJCM0MzMjAxRUM5RkYwMDM1NzAzMSAvKiBTZWN1cml0
eU9yaWdpblRva2VuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjQyQjNDMjIwMUVDOUZEMDAzNTcwMzEgLyogU2VjdXJpdHlPcmlnaW5Ub2tlbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDMxNzM4
MTQ2QkFDNjkwMDdFMzg5MCAvKiBMaXN0YWJsZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDMxNzM2MTQ2QkFDNjUwMDdFMzg5MCAvKiBM
aXN0YWJsZUhhbmRsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjQ1NzAzOTFCRTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENv
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDU3
MDM3MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5oICovOyB9OwogCQkw
RjQ1NzAzRDFCRTQ1RjBBMDA2MkE2MjkgLyogQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NTcwM0IxQkU0NUYw
QTAwNjJBNjI5IC8qIEFpclJlcG9ydFVzZWRSZWdpc3RlcnMuaCAqLzsgfTsKQEAgLTIyNjIsNiAr
MjI2NCwxMCBAQAogCQkwRjQyNkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVJlY292ZXJ5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0
dWFsUmVnaXN0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlydHVhbFJl
Z2lzdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTRBMTQ2MENENkIw
MDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERhdGFGb3JtYXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0MkIzQkMyMDFF
QjRDODAwMzU3MDMxIC8qIExvY2FsU2lkZUFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBMb2NhbFNpZGVBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY0MkIzQkYyMDFFQjRDOTAwMzU3MDMxIC8qIExvY2FsU2lkZUFsbG9jYXRvci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2NhbFNpZGVBbGxvY2F0
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjQyQjNDMDIwMUVCNTA5MDAz
NTcwMzEgLyogQWxsb2NhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEFsbG9jYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDJCM0My
MjAxRUM5RkQwMDM1NzAzMSAvKiBTZWN1cml0eU9yaWdpblRva2VuLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNlY3VyaXR5T3JpZ2luVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY0MzE3MzYxNDZCQUM2NTAwN0UzODkwIC8qIExpc3RhYmxlSGFuZGxl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaXN0YWJsZUhhbmRsZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0NTcwMzYxQkU0NEM5MTAwNjJBNjI5IC8q
IEFpckVsaW1pbmF0ZURlYWRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEFpckVsaW1pbmF0ZURlYWRDb2RlLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJFbGltaW5h
dGVEZWFkQ29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDU3MDM3MUJF
NDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBBaXJFbGltaW5hdGVEZWFkQ29kZS5oOyBwYXRoID0gYjMvYWlyL0Fp
ckVsaW1pbmF0ZURlYWRDb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NTU5
LDIxICs1NTY1LDE0IEBACiAJCTE0MkUzMTJBMTM0RkYwQTYwMEFGQURCNSAvKiBoZWFwICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkwRjc1QTA1NDIwMEQy
NUVGMDAzOEUyQ0YgLyogQWxsb2NhdG9yLmggKi8sCi0JCQkJMEY3NUEwNUQyMDBEMjVGMTAwMzhF
MkNGIC8qIEFsbG9jYXRvcklubGluZXMuaCAqLywKLQkJCQkwRjc1QTA1OTIwMEQyNUYwMDAzOEUy
Q0YgLyogTG9jYWxBbGxvY2F0b3IuY3BwICovLAotCQkJCTBGNzVBMDU3MjAwRDI1RjAwMDM4RTJD
RiAvKiBMb2NhbEFsbG9jYXRvci5oICovLAotCQkJCTBGNzVBMDVBMjAwRDI1RjAwMDM4RTJDRiAv
KiBMb2NhbEFsbG9jYXRvcklubGluZXMuaCAqLywKLQkJCQkwRjc1QTA1ODIwMEQyNUYwMDAzOEUy
Q0YgLyogVGhyZWFkTG9jYWxDYWNoZS5jcHAgKi8sCi0JCQkJMEY3NUEwNTUyMDBEMjVFRjAwMzhF
MkNGIC8qIFRocmVhZExvY2FsQ2FjaGUuaCAqLywKLQkJCQkwRjc1QTA1NjIwMEQyNUVGMDAzOEUy
Q0YgLyogVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaCAqLywKLQkJCQkwRjc1QTA1QjIwMEQyNUYx
MDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUxheW91dC5jcHAgKi8sCi0JCQkJMEY3NUEwNUMy
MDBEMjVGMTAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQuaCAqLywKIAkJCQkwRkVD
M0M1MDFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAgKi8sCiAJ
CQkJMEZFQzNDNTExRjMzQTQxNjAwRjU5QjZDIC8qIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCAq
LywKIAkJCQkwRkE3NjIwQTFEQjk1OUY2MDBCN0EyRkQgLyogQWxsb2NhdGluZ1Njb3BlLmggKi8s
CiAJCQkJMEZEQ0UxMUIxRkFFNjFGNDAwNkYzOTAxIC8qIEFsbG9jYXRpb25GYWlsdXJlTW9kZS5o
ICovLAorCQkJCTBGNDJCM0MwMjAxRUI1MDkwMDM1NzAzMSAvKiBBbGxvY2F0b3IuY3BwICovLAor
CQkJCTBGNzVBMDU0MjAwRDI1RUYwMDM4RTJDRiAvKiBBbGxvY2F0b3IuaCAqLywKIAkJCQkwRjMw
Q0I1RDFGQ0U0NkI0MDA0QjUzMjMgLyogQWxsb2NhdG9yRm9yTW9kZS5oICovLAorCQkJCTBGNzVB
MDVEMjAwRDI1RjEwMDM4RTJDRiAvKiBBbGxvY2F0b3JJbmxpbmVzLmggKi8sCiAJCQkJMEZCNDY3
N0UxRkREQTZFNTAwM0ZDQjA5IC8qIEF0b21JbmRpY2VzLmggKi8sCiAJCQkJQzJCOTE2QzQxNERB
MDQwQzAwQ0JBQzg2IC8qIEJsb2NrRGlyZWN0b3J5LmNwcCAqLywKIAkJCQlDMkI5MTZDMTE0REEw
MTRFMDBDQkFDODYgLyogQmxvY2tEaXJlY3RvcnkuaCAqLywKQEAgLTU2NzQsNiArNTY3MywxMSBA
QAogCQkJCTBGMDcwQTQ1MUQ1NDNBODkwMDZFNzIzMiAvKiBMYXJnZUFsbG9jYXRpb24uY3BwICov
LAogCQkJCTBGMDcwQTQ2MUQ1NDNBODkwMDZFNzIzMiAvKiBMYXJnZUFsbG9jYXRpb24uaCAqLywK
IAkJCQkwRjQzMTczNjE0NkJBQzY1MDA3RTM4OTAgLyogTGlzdGFibGVIYW5kbGVyLmggKi8sCisJ
CQkJMEY3NUEwNTkyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9yLmNwcCAqLywKKwkJ
CQkwRjc1QTA1NzIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3IuaCAqLywKKwkJCQkw
Rjc1QTA1QTIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3JJbmxpbmVzLmggKi8sCisJ
CQkJMEY0MkIzQkYyMDFFQjRDOTAwMzU3MDMxIC8qIExvY2FsU2lkZUFsbG9jYXRvci5jcHAgKi8s
CisJCQkJMEY0MkIzQkMyMDFFQjRDODAwMzU3MDMxIC8qIExvY2FsU2lkZUFsbG9jYXRvci5oICov
LAogCQkJCTBGMjA4QUQ2MURGMDkyNUEwMDdEMzI2OSAvKiBMb2NrRHVyaW5nTWFya2luZy5oICov
LAogCQkJCTE0QjcyMzNGMTJEN0QwREEwMDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJrZXIuY3Bw
ICovLAogCQkJCTE0QjcyMzQwMTJEN0QwREEwMDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJrZXIu
aCAqLywKQEAgLTU3MDMsNiArNTcwNyw3IEBACiAJCQkJMEZEMEU1RUYxRTQ2QkYyMzAwMDZBQjA4
IC8qIFJlZ2lzdGVyU3RhdGUuaCAqLywKIAkJCQkwRjdDRjk0RTFEQkVFRTg2MDA5OENDMTIgLyog
UmVsZWFzZUhlYXBBY2Nlc3NTY29wZS5oICovLAogCQkJCTBGMkM2M0E5MUU0RkE0MkMwMEMxMzgz
OSAvKiBSdW5uaW5nU2NvcGUuaCAqLywKKwkJCQkwRjQyQjNDMjIwMUVDOUZEMDAzNTcwMzEgLyog
U2VjdXJpdHlPcmlnaW5Ub2tlbi5oICovLAogCQkJCTBGNEQ4Qzc2MUZDQTNDRjIwMDFEMzJBQyAv
KiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAgKi8sCiAJCQkJMEY0RDhDNzcxRkNBM0NGMzAw
MUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggKi8sCiAJCQkJQzIyNTQ5NDIxNUY3
REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKQEAgLTU3MjQsNiArNTcyOSwxMSBA
QAogCQkJCTBGRDc5QTJDMUVCQkJEQjIwMERBODhEMyAvKiBTeW5jaHJvbm91c25lc3MuaCAqLywK
IAkJCQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRN
dXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKIAkJCQkwRjFGQjM4QjFFMTczQTYyMDBBOUJFNTAgLyog
U3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggKi8sCisJCQkJMEY3NUEw
NTgyMDBEMjVGMDAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGUuY3BwICovLAorCQkJCTBGNzVB
MDU1MjAwRDI1RUYwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlLmggKi8sCisJCQkJMEY3NUEw
NTYyMDBEMjVFRjAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmggKi8sCisJCQkJ
MEY3NUEwNUIyMDBEMjVGMTAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQuY3BwICov
LAorCQkJCTBGNzVBMDVDMjAwRDI1RjEwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlTGF5b3V0
LmggKi8sCiAJCQkJMTQxNDQ4Q0MxM0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5o
ICovLAogCQkJCTBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmluYWxp
emVyLmggKi8sCiAJCQkJMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0Q291bnRlci5o
ICovLApAQCAtODUyMiw2ICs4NTMyLDcgQEAKIAkJCQkwRjdDMzlGRjFDOTBDNTVCMDA0ODAxNTEg
LyogREZHT3BJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGRTE3QTBCOENDMDA3NzNB
RDggLyogREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZEODJFNTcxNDFEQUYxMDAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjQyQjNDMzIwMUVDOUZGMDAzNTcwMzEgLyogU2VjdXJpdHlPcmlnaW5Ub2tlbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMjYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVu
dHJ5cG9pbnRDcmVhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMwOTc2QTE0NjhB
NkY3MDBDRjI0NDIgLyogREZHT1NSRXhpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUMx
NzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTkw
NjksNiArOTA4MCw3IEBACiAJCQkJQkMxOEM0MzEwRTE2RjVDRDAwQjM0NDYwIC8qIExleGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzUyRTBFMTZGQ0UxMDBCMzQ0NjAgLyogTGV4ZXIubHV0
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkQzQjNDMzEwMTU5RDdGMDAyODY1RTcgLyogTGlua0J1
ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0MkIzQzEyMDFFQjUwRjAwMzU3MDMxIC8qIExv
Y2FsU2lkZUFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MzE3MzgxNDZCQUM2OTAw
N0UzODkwIC8qIExpc3RhYmxlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFMkVBNkIw
RkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTcw
REU5QTA5MUJFN0Q2OUUwMDVEODlEOSAvKiBMTEludEFzc2VtYmx5LmggaW4gSGVhZGVycyAqLywK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5jcHAJ
KHJldmlzaW9uIDIyNzcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGly
ZWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJT
dXBlclNhbXBsZXIuaCIKKyNpbmNsdWRlICJUaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKQEAgLTcyLDIyICs3
MywyOSBAQCBib29sIEJsb2NrRGlyZWN0b3J5Ojppc1BhZ2VkT3V0KGRvdWJsZSBkCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1NYXJrZWRCbG9jazo6SGFuZGxlKiBCbG9ja0RpcmVjdG9yeTo6Zmlu
ZEVtcHR5QmxvY2tUb1N0ZWFsKCkKK01hcmtlZEJsb2NrOjpIYW5kbGUqIEJsb2NrRGlyZWN0b3J5
OjpmaW5kRW1wdHlCbG9ja1RvU3RlYWwoVGhyZWFkTG9jYWxDYWNoZSYgdGxjKQogewotICAgIG1f
ZW1wdHlDdXJzb3IgPSBtX2VtcHR5LmZpbmRCaXQobV9lbXB0eUN1cnNvciwgdHJ1ZSk7Ci0gICAg
aWYgKG1fZW1wdHlDdXJzb3IgPj0gbV9ibG9ja3Muc2l6ZSgpKQorICAgIExvY2FsU2lkZUFsbG9j
YXRvciYgYWxsb2NhdG9yID0gdGxjLnNpZGVBbGxvY2F0b3IobV90bGNPZmZzZXQpOworICAgIGFs
bG9jYXRvci5tX2VtcHR5Q3Vyc29yID0gbV9lbXB0eS5maW5kQml0KGFsbG9jYXRvci5tX2VtcHR5
Q3Vyc29yLCB0cnVlKTsKKyAgICBpZiAoYWxsb2NhdG9yLm1fZW1wdHlDdXJzb3IgPj0gbV9ibG9j
a3Muc2l6ZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gbV9ibG9ja3Nb
bV9lbXB0eUN1cnNvcl07CisgICAgcmV0dXJuIG1fYmxvY2tzW2FsbG9jYXRvci5tX2VtcHR5Q3Vy
c29yXTsKIH0KIAotTWFya2VkQmxvY2s6OkhhbmRsZSogQmxvY2tEaXJlY3Rvcnk6OmZpbmRCbG9j
a0ZvckFsbG9jYXRpb24oKQorTWFya2VkQmxvY2s6OkhhbmRsZSogQmxvY2tEaXJlY3Rvcnk6OmZp
bmRCbG9ja0ZvckFsbG9jYXRpb24oTG9jYWxBbGxvY2F0b3ImIGFsbG9jYXRvcikKIHsKLSAgICBt
X2FsbG9jYXRpb25DdXJzb3IgPSAobV9jYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IHwgbV9lbXB0eSku
ZmluZEJpdChtX2FsbG9jYXRpb25DdXJzb3IsIHRydWUpOwotICAgIGlmIChtX2FsbG9jYXRpb25D
dXJzb3IgPj0gbV9ibG9ja3Muc2l6ZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAK
LSAgICBzZXRJc0NhbkFsbG9jYXRlQnV0Tm90RW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBtX2Fs
bG9jYXRpb25DdXJzb3IsIGZhbHNlKTsKLSAgICByZXR1cm4gbV9ibG9ja3NbbV9hbGxvY2F0aW9u
Q3Vyc29yXTsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGFsbG9jYXRvci5tX2FsbG9jYXRpb25D
dXJzb3IgPSAobV9jYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IHwgbV9lbXB0eSkuZmluZEJpdChhbGxv
Y2F0b3IubV9hbGxvY2F0aW9uQ3Vyc29yLCB0cnVlKTsKKyAgICAgICAgaWYgKGFsbG9jYXRvci5t
X2FsbG9jYXRpb25DdXJzb3IgPj0gbV9ibG9ja3Muc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIAorICAgICAgICBzaXplX3QgYmxvY2tJbmRleCA9IGFsbG9jYXRv
ci5tX2FsbG9jYXRpb25DdXJzb3IrKzsKKyAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogcmVz
dWx0ID0gbV9ibG9ja3NbYmxvY2tJbmRleF07CisgICAgICAgIGlmIChyZXN1bHQtPnNlY3VyaXR5
T3JpZ2luVG9rZW4oKSA9PSBhbGxvY2F0b3IudGxjKCktPnNlY3VyaXR5T3JpZ2luVG9rZW4oKSkg
eworICAgICAgICAgICAgc2V0SXNDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KE5vTG9ja2luZ05lY2Vz
c2FyeSwgYmxvY2tJbmRleCwgZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgfQorICAgIH0KIH0KIAogTWFya2VkQmxvY2s6OkhhbmRsZSogQmxvY2tEaXJlY3Rvcnk6
OnRyeUFsbG9jYXRlQmxvY2soKQpAQCAtMTgyLDkgKzE5MCwxMSBAQCB2b2lkIEJsb2NrRGlyZWN0
b3J5OjpwcmVwYXJlRm9yQWxsb2NhdGlvCiAgICAgICAgIFsmXSAoTG9jYWxBbGxvY2F0b3IqIGFs
bG9jYXRvcikgewogICAgICAgICAgICAgYWxsb2NhdG9yLT5wcmVwYXJlRm9yQWxsb2NhdGlvbigp
OwogICAgICAgICB9KTsKKyAgICBtX2xvY2FsU2lkZUFsbG9jYXRvcnMuZm9yRWFjaCgKKyAgICAg
ICAgWyZdIChMb2NhbFNpZGVBbGxvY2F0b3IqIHNpZGVBbGxvY2F0b3IpIHsKKyAgICAgICAgICAg
IHNpZGVBbGxvY2F0b3ItPnByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CisgICAgICAgIH0pOwogICAg
IAotICAgIG1fYWxsb2NhdGlvbkN1cnNvciA9IDA7Ci0gICAgbV9lbXB0eUN1cnNvciA9IDA7CiAg
ICAgbV91bnN3ZXB0Q3Vyc29yID0gMDsKICAgICAKICAgICBtX2VkZW4uY2xlYXJBbGwoKTsKQEAg
LTIwOSw2ICsyMTksOCBAQCB2b2lkIEJsb2NrRGlyZWN0b3J5OjpzdG9wQWxsb2NhdGluZ0Zvckdv
CiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2FsQWxsb2NhdG9yc0xvY2spOwogICAg
IHdoaWxlICghbV9sb2NhbEFsbG9jYXRvcnMuaXNFbXB0eSgpKQogICAgICAgICBtX2xvY2FsQWxs
b2NhdG9ycy5iZWdpbigpLT5yZW1vdmUoKTsKKyAgICB3aGlsZSAoIW1fbG9jYWxTaWRlQWxsb2Nh
dG9ycy5pc0VtcHR5KCkpCisgICAgICAgIG1fbG9jYWxTaWRlQWxsb2NhdG9ycy5iZWdpbigpLT5y
ZW1vdmUoKTsKIH0KIAogdm9pZCBCbG9ja0RpcmVjdG9yeTo6bGFzdENoYW5jZVRvRmluYWxpemUo
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCShy
ZXZpc2lvbiAyMjc3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVj
dG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQ2VsbEF0
dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJGcmVlTGlzdC5oIgogI2luY2x1ZGUgIkxvY2FsQWxsb2Nh
dG9yLmgiCisjaW5jbHVkZSAiTG9jYWxTaWRlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiTWFya2Vk
QmxvY2suaCIKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0Qml0
VmVjdG9yLmg+CkBAIC00Myw2ICs0NCw3IEBAIGNsYXNzIEhlYXA7CiBjbGFzcyBJc29DZWxsU2V0
OwogY2xhc3MgTWFya2VkU3BhY2U7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CitjbGFz
cyBUaHJlYWRMb2NhbENhY2hlOwogY2xhc3MgVGhyZWFkTG9jYWxDYWNoZUxheW91dDsKIAogI2Rl
ZmluZSBGT1JfRUFDSF9CTE9DS19ESVJFQ1RPUllfQklUKG1hY3JvKSBcCkBAIC0xNDksNyArMTUx
LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TmV4dERpcmVjdG9yeUluU3Vic3BhY2UoQmxvY2tE
aXJlY3RvcnkqIGRpcmVjdG9yeSkgeyBtX25leHREaXJlY3RvcnlJblN1YnNwYWNlID0gZGlyZWN0
b3J5OyB9CiAgICAgdm9pZCBzZXROZXh0RGlyZWN0b3J5SW5BbGlnbmVkTWVtb3J5QWxsb2NhdG9y
KEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkpIHsgbV9uZXh0RGlyZWN0b3J5SW5BbGlnbmVkTWVt
b3J5QWxsb2NhdG9yID0gZGlyZWN0b3J5OyB9CiAgICAgCi0gICAgTWFya2VkQmxvY2s6OkhhbmRs
ZSogZmluZEVtcHR5QmxvY2tUb1N0ZWFsKCk7CisgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogZmlu
ZEVtcHR5QmxvY2tUb1N0ZWFsKFRocmVhZExvY2FsQ2FjaGUmKTsKICAgICAKICAgICBNYXJrZWRC
bG9jazo6SGFuZGxlKiBmaW5kQmxvY2tUb1N3ZWVwKCk7CiAgICAgCkBAIC0xNjIsMTIgKzE2NCwx
MyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wQml0cyhQcmludFN0cmVhbSYgPSBXVEY6OmRhdGFG
aWxlKCkpOwogICAgIAogcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgTG9jYWxBbGxvY2F0b3I7
CiAgICAgZnJpZW5kIGNsYXNzIElzb0NlbGxTZXQ7CisgICAgZnJpZW5kIGNsYXNzIExvY2FsQWxs
b2NhdG9yOworICAgIGZyaWVuZCBjbGFzcyBMb2NhbFNpZGVBbGxvY2F0b3I7CiAgICAgZnJpZW5k
IGNsYXNzIE1hcmtlZEJsb2NrOwogICAgIGZyaWVuZCBjbGFzcyBUaHJlYWRMb2NhbENhY2hlTGF5
b3V0OwogICAgIAotICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGZpbmRCbG9ja0ZvckFsbG9jYXRp
b24oKTsKKyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBmaW5kQmxvY2tGb3JBbGxvY2F0aW9uKExv
Y2FsQWxsb2NhdG9yJik7CiAgICAgCiAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogdHJ5QWxsb2Nh
dGVCbG9jaygpOwogICAgIApAQCAtMTg0LDggKzE4Nyw2IEBAIHByaXZhdGU6CiAgICAgCiAgICAg
Ly8gQWZ0ZXIgeW91IGRvIHNvbWV0aGluZyB0byBhIGJsb2NrIGJhc2VkIG9uIG9uZSBvZiB0aGVz
ZSBjdXJzb3JzLCB5b3UgY2xlYXIgdGhlIGJpdCBpbiB0aGUKICAgICAvLyBjb3JyZXNwb25kaW5n
IGJpdHZlY3RvciBhbmQgbGVhdmUgdGhlIGN1cnNvciB3aGVyZSBpdCB3YXMuCi0gICAgc2l6ZV90
IG1fYWxsb2NhdGlvbkN1cnNvciB7IDAgfTsgLy8gUG9pbnRzIHRvIHRoZSBuZXh0IGJsb2NrIHRo
YXQgaXMgYSBjYW5kaWRhdGUgZm9yIGFsbG9jYXRpb24uCi0gICAgc2l6ZV90IG1fZW1wdHlDdXJz
b3IgeyAwIH07IC8vIFBvaW50cyB0byB0aGUgbmV4dCBibG9jayB0aGF0IGlzIGEgY2FuZGlkYXRl
IGZvciBlbXB0eSBhbGxvY2F0aW9uIChhbGxvY2F0aW5nIGluIGVtcHR5IGJsb2NrcykuCiAgICAg
c2l6ZV90IG1fdW5zd2VwdEN1cnNvciB7IDAgfTsgLy8gUG9pbnRzIHRvIHRoZSBuZXh0IGJsb2Nr
IHRoYXQgaXMgYSBjYW5kaWRhdGUgZm9yIGluY3JlbWVudGFsIHN3ZWVwaW5nLgogICAgIAogICAg
IHVuc2lnbmVkIG1fY2VsbFNpemU7CkBAIC0yMDEsNiArMjAyLDcgQEAgcHJpdmF0ZToKICAgICBM
b2NrIG1fbG9jYWxBbGxvY2F0b3JzTG9jazsKICAgICBzaXplX3QgbV90bGNPZmZzZXQ7CiAgICAg
U2VudGluZWxMaW5rZWRMaXN0PExvY2FsQWxsb2NhdG9yLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxM
b2NhbEFsbG9jYXRvcj4+IG1fbG9jYWxBbGxvY2F0b3JzOworICAgIFNlbnRpbmVsTGlua2VkTGlz
dDxMb2NhbFNpZGVBbGxvY2F0b3IsIEJhc2ljUmF3U2VudGluZWxOb2RlPExvY2FsU2lkZUFsbG9j
YXRvcj4+IG1fbG9jYWxTaWRlQWxsb2NhdG9yczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAko
cmV2aXNpb24gMjI3NzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxv
Y2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiw5IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCi1Mb2NhbEFsbG9jYXRvcjo6TG9jYWxBbGxvY2F0b3IoQmxvY2tEaXJlY3RvcnkqIGRp
cmVjdG9yeSkKLSAgICA6IG1fZGlyZWN0b3J5KGRpcmVjdG9yeSkKK0xvY2FsQWxsb2NhdG9yOjpM
b2NhbEFsbG9jYXRvcihUaHJlYWRMb2NhbENhY2hlKiB0bGMsIEJsb2NrRGlyZWN0b3J5KiBkaXJl
Y3RvcnkpCisgICAgOiBtX3RsYyh0bGMpCisgICAgLCBtX2RpcmVjdG9yeShkaXJlY3RvcnkpCiAg
ICAgLCBtX2NlbGxTaXplKGRpcmVjdG9yeS0+bV9jZWxsU2l6ZSkKICAgICAsIG1fZnJlZUxpc3Qo
bV9jZWxsU2l6ZSkKIHsKQEAgLTQyLDExICs0MywxMyBAQCBMb2NhbEFsbG9jYXRvcjo6TG9jYWxB
bGxvY2F0b3IoQmxvY2tEaXJlCiB9CiAKIExvY2FsQWxsb2NhdG9yOjpMb2NhbEFsbG9jYXRvcihM
b2NhbEFsbG9jYXRvciYmIG90aGVyKQotICAgIDogbV9kaXJlY3Rvcnkob3RoZXIubV9kaXJlY3Rv
cnkpCisgICAgOiBtX3RsYyhvdGhlci5tX3RsYykKKyAgICAsIG1fZGlyZWN0b3J5KG90aGVyLm1f
ZGlyZWN0b3J5KQogICAgICwgbV9jZWxsU2l6ZShvdGhlci5tX2NlbGxTaXplKQogICAgICwgbV9m
cmVlTGlzdChXVEZNb3ZlKG90aGVyLm1fZnJlZUxpc3QpKQogICAgICwgbV9jdXJyZW50QmxvY2so
b3RoZXIubV9jdXJyZW50QmxvY2spCiAgICAgLCBtX2xhc3RBY3RpdmVCbG9jayhvdGhlci5tX2xh
c3RBY3RpdmVCbG9jaykKKyAgICAsIG1fYWxsb2NhdGlvbkN1cnNvcihvdGhlci5tX2FsbG9jYXRp
b25DdXJzb3IpCiB7CiAgICAgb3RoZXIucmVzZXQoKTsKICAgICBpZiAob3RoZXIuaXNPbkxpc3Qo
KSkgewpAQCAtNjEsNiArNjQsNyBAQCB2b2lkIExvY2FsQWxsb2NhdG9yOjpyZXNldCgpCiAgICAg
bV9mcmVlTGlzdC5jbGVhcigpOwogICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKICAgICBt
X2xhc3RBY3RpdmVCbG9jayA9IG51bGxwdHI7CisgICAgbV9hbGxvY2F0aW9uQ3Vyc29yID0gMDsK
IH0KIAogTG9jYWxBbGxvY2F0b3I6On5Mb2NhbEFsbG9jYXRvcigpCkBAIC0xNjQsNiArMTY4LDcg
QEAgdm9pZCogTG9jYWxBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoRwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CisgICAgYmxvY2stPmFzc29jaWF0
ZVdpdGhPcmlnaW4obV90bGMtPnNlY3VyaXR5T3JpZ2luVG9rZW4oKSk7CiAgICAgbV9kaXJlY3Rv
cnktPmFkZEJsb2NrKGJsb2NrKTsKICAgICByZXN1bHQgPSBhbGxvY2F0ZUluKGJsb2NrKTsKICAg
ICBBU1NFUlQocmVzdWx0KTsKQEAgLTIwMSw3ICsyMDYsNyBAQCB2b2lkKiBMb2NhbEFsbG9jYXRv
cjo6dHJ5QWxsb2NhdGVXaXRob3V0CiAgICAgQVNTRVJUKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldp
bGxGYWlsKCkpOwogICAgIAogICAgIGZvciAoOzspIHsKLSAgICAgICAgTWFya2VkQmxvY2s6Okhh
bmRsZSogYmxvY2sgPSBtX2RpcmVjdG9yeS0+ZmluZEJsb2NrRm9yQWxsb2NhdGlvbigpOworICAg
ICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IG1fZGlyZWN0b3J5LT5maW5kQmxvY2tG
b3JBbGxvY2F0aW9uKCp0aGlzKTsKICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgIGJy
ZWFrOwogCkBAIC0yMTEsNyArMjE2LDcgQEAgdm9pZCogTG9jYWxBbGxvY2F0b3I6OnRyeUFsbG9j
YXRlV2l0aG91dAogICAgIAogICAgIGlmIChPcHRpb25zOjpzdGVhbEVtcHR5QmxvY2tzRnJvbU90
aGVyQWxsb2NhdG9ycygpCiAgICAgICAgICYmIChPcHRpb25zOjp0cmFkZURlc3RydWN0b3JCbG9j
a3MoKSB8fCAhbV9kaXJlY3RvcnktPm5lZWRzRGVzdHJ1Y3Rpb24oKSkpIHsKLSAgICAgICAgaWYg
KE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9kaXJlY3RvcnktPm1fc3Vic3BhY2UtPmZp
bmRFbXB0eUJsb2NrVG9TdGVhbCgpKSB7CisgICAgICAgIGlmIChNYXJrZWRCbG9jazo6SGFuZGxl
KiBibG9jayA9IG1fZGlyZWN0b3J5LT5tX3N1YnNwYWNlLT5maW5kRW1wdHlCbG9ja1RvU3RlYWwo
Km1fdGxjKSkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmxvY2stPmFsaWduZWRNZW1v
cnlBbGxvY2F0b3IoKSA9PSBtX2RpcmVjdG9yeS0+bV9zdWJzcGFjZS0+YWxpZ25lZE1lbW9yeUFs
bG9jYXRvcigpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgYmxvY2stPnN3ZWVwKG51bGxw
dHIpOwpAQCAtMjIwLDYgKzIyNSw3IEBAIHZvaWQqIExvY2FsQWxsb2NhdG9yOjp0cnlBbGxvY2F0
ZVdpdGhvdXQKICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgYSByZW1vdGUgY2hhbmNl
IHRoYXQgYSBibG9jayBtYXkgaGF2ZSBib3RoIGNhbkFsbG9jYXRlQnV0Tm90RW1wdHkKICAgICAg
ICAgICAgIC8vIGFuZCBlbXB0eSBzZXQgYXQgdGhlIHNhbWUgdGltZS4KICAgICAgICAgICAgIGJs
b2NrLT5yZW1vdmVGcm9tRGlyZWN0b3J5KCk7CisgICAgICAgICAgICBibG9jay0+YXNzb2NpYXRl
V2l0aE9yaWdpbihtX3RsYy0+c2VjdXJpdHlPcmlnaW5Ub2tlbigpKTsKICAgICAgICAgICAgIG1f
ZGlyZWN0b3J5LT5hZGRCbG9jayhibG9jayk7CiAgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVJ
bihibG9jayk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xv
Y2FsQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TG9jYWxBbGxvY2F0b3IuaAkocmV2aXNpb24gMjI3NzIwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTIgKzMzLDEz
IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBCbG9ja0RpcmVjdG9yeTsKIGNsYXNzIEdDRGVm
ZXJyYWxDb250ZXh0OworY2xhc3MgVGhyZWFkTG9jYWxDYWNoZTsKIAogY2xhc3MgTG9jYWxBbGxv
Y2F0b3IgOiBwdWJsaWMgQmFzaWNSYXdTZW50aW5lbE5vZGU8TG9jYWxBbGxvY2F0b3I+IHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShMb2NhbEFsbG9jYXRvcik7CiAgICAgCiBwdWJsaWM6Ci0g
ICAgTG9jYWxBbGxvY2F0b3IoQmxvY2tEaXJlY3RvcnkqKTsKKyAgICBMb2NhbEFsbG9jYXRvcihU
aHJlYWRMb2NhbENhY2hlKiwgQmxvY2tEaXJlY3RvcnkqKTsKICAgICBMb2NhbEFsbG9jYXRvcihM
b2NhbEFsbG9jYXRvciYmKTsKICAgICB+TG9jYWxBbGxvY2F0b3IoKTsKICAgICAKQEAgLTUzLDgg
KzU0LDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2VsbFNpemUo
KTsKICAgICAKICAgICBib29sIGlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCopIGNvbnN0Owor
ICAgIAorICAgIFRocmVhZExvY2FsQ2FjaGUqIHRsYygpIGNvbnN0IHsgcmV0dXJuIG1fdGxjOyB9
CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEJsb2NrRGlyZWN0b3J5OworICAgIAogICAg
IHZvaWQgcmVzZXQoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dD
YXNlKEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2Rl
KTsKICAgICB2b2lkIGRpZENvbnN1bWVGcmVlTGlzdCgpOwpAQCAtNjMsMTEgKzY4LDE2IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCogYWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7CiAgICAg
QUxXQVlTX0lOTElORSB2b2lkIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENv
bnRleHQqKTsKIAorICAgIFRocmVhZExvY2FsQ2FjaGUqIG1fdGxjOwogICAgIEJsb2NrRGlyZWN0
b3J5KiBtX2RpcmVjdG9yeTsKICAgICB1bnNpZ25lZCBtX2NlbGxTaXplOwogICAgIEZyZWVMaXN0
IG1fZnJlZUxpc3Q7CiAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogbV9jdXJyZW50QmxvY2sgeyBu
dWxscHRyIH07CiAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogbV9sYXN0QWN0aXZlQmxvY2sgeyBu
dWxscHRyIH07CisgICAgCisgICAgLy8gQWZ0ZXIgeW91IGRvIHNvbWV0aGluZyB0byBhIGJsb2Nr
IGJhc2VkIG9uIG9uZSBvZiB0aGVzZSBjdXJzb3JzLCB5b3UgY2xlYXIgdGhlIGJpdCBpbiB0aGUK
KyAgICAvLyBjb3JyZXNwb25kaW5nIGJpdHZlY3RvciBhbmQgbGVhdmUgdGhlIGN1cnNvciB3aGVy
ZSBpdCB3YXMuCisgICAgc2l6ZV90IG1fYWxsb2NhdGlvbkN1cnNvciB7IDAgfTsgLy8gUG9pbnRz
IHRvIHRoZSBuZXh0IGJsb2NrIHRoYXQgaXMgYSBjYW5kaWRhdGUgZm9yIGFsbG9jYXRpb24uCiB9
OwogCiBpbmxpbmUgcHRyZGlmZl90IExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsU2lkZUFsbG9jYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxTaWRlQWxsb2Nh
dG9yLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2Nh
bFNpZGVBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkxvY2FsU2lkZUFsbG9jYXRvci5oIgorCisjaW5jbHVkZSAiQmxvY2tE
aXJlY3RvcnkuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0xvY2FsU2lkZUFsbG9jYXRvcjo6TG9j
YWxTaWRlQWxsb2NhdG9yKEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkpCisgICAgOiBtX2RpcmVj
dG9yeShkaXJlY3RvcnkpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhkaXJlY3Rvcnkt
Pm1fbG9jYWxBbGxvY2F0b3JzTG9jayk7CisgICAgZGlyZWN0b3J5LT5tX2xvY2FsU2lkZUFsbG9j
YXRvcnMuYXBwZW5kKHRoaXMpOworfQorCitMb2NhbFNpZGVBbGxvY2F0b3I6On5Mb2NhbFNpZGVB
bGxvY2F0b3IoKQoreworICAgIGlmIChpc09uTGlzdCgpKSB7CisgICAgICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9kaXJlY3RvcnktPm1fbG9jYWxBbGxvY2F0b3JzTG9jayk7CisgICAgICAg
IHJlbW92ZSgpOworICAgIH0KK30KKwordm9pZCBMb2NhbFNpZGVBbGxvY2F0b3I6OnByZXBhcmVG
b3JBbGxvY2F0aW9uKCkKK3sKKyAgICBtX2VtcHR5Q3Vyc29yID0gMDsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsU2lkZUFs
bG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2Fs
U2lkZUFsbG9jYXRvci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0xvY2FsU2lkZUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQmxvY2tEaXJlY3Rvcnk7CisKK2Ns
YXNzIExvY2FsU2lkZUFsbG9jYXRvciA6IHB1YmxpYyBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxMb2Nh
bFNpZGVBbGxvY2F0b3I+IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShMb2NhbFNpZGVBbGxv
Y2F0b3IpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgTG9j
YWxTaWRlQWxsb2NhdG9yKEJsb2NrRGlyZWN0b3J5Kik7CisgICAgfkxvY2FsU2lkZUFsbG9jYXRv
cigpOworICAgIAorICAgIHZvaWQgcHJlcGFyZUZvckFsbG9jYXRpb24oKTsKKyAgICAKK3ByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIEJsb2NrRGlyZWN0b3J5OworICAgIAorICAgIEJsb2NrRGly
ZWN0b3J5KiBtX2RpcmVjdG9yeTsKKyAgICAKKyAgICAvLyBBZnRlciB5b3UgZG8gc29tZXRoaW5n
IHRvIGEgYmxvY2sgYmFzZWQgb24gb25lIG9mIHRoZXNlIGN1cnNvcnMsIHlvdSBjbGVhciB0aGUg
Yml0IGluIHRoZQorICAgIC8vIGNvcnJlc3BvbmRpbmcgYml0dmVjdG9yIGFuZCBsZWF2ZSB0aGUg
Y3Vyc29yIHdoZXJlIGl0IHdhcy4KKyAgICBzaXplX3QgbV9lbXB0eUN1cnNvciB7IDAgfTsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwCShyZXZpc2lv
biAyMjc3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5n
Q29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDkgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oIgogCisj
aW5jbHVkZSAiR0NTZWdtZW50ZWRBcnJheUlubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludDo6TWFy
a1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQoSGVhcCYgaGVhcCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAko
cmV2aXNpb24gMjI3NzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNr
TWVyZ2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOSBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgSGVhcDsKK2NsYXNzIFNsb3RWaXNpdG9yOworCiBjbGFz
cyBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludCA6IHB1YmxpYyBNYXJraW5nQ29uc3RyYWludCB7
CiBwdWJsaWM6CiAgICAgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQoSGVhcCYpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2aXNpb24gMjI3
NzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00ODgsNiArNDg4LDE1IEBAIGJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6
aXNGcmVlTGlzdGVkQ2UKICAgICByZXR1cm4gbV9kaXJlY3RvcnktPmlzRnJlZUxpc3RlZENlbGwo
dGFyZ2V0KTsKIH0KIAordm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjphc3NvY2lhdGVkV2l0aE9y
aWdpbihTZWN1cml0eU9yaWdpblRva2VuIHNlY3VyaXR5T3JpZ2luVG9rZW4pCit7CisgICAgaWYg
KG1fc2VjdXJpdHlPcmlnaW5Ub2tlbiA9PSBzZWN1cml0eU9yaWdpblRva2VuKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgbWVtc2V0KCZibG9jaygpLCBwYXlsb2FkU2l6ZSk7CisgICAgbV9z
ZWN1cml0eU9yaWdpblRva2VuID0gc2VjdXJpdHlPcmlnaW5Ub2tlbjsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMjc3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBA
CiAjaW5jbHVkZSAiRGVzdHJ1Y3Rpb25Nb2RlLmgiCiAjaW5jbHVkZSAiSGVhcENlbGwuaCIKICNp
bmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpblRva2Vu
LmgiCiAjaW5jbHVkZSAiV2Vha1NldC5oIgogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5j
bHVkZSA8d3RmL0JpdG1hcC5oPgpAQCAtMTk0LDYgKzE5NSw5IEBAIHB1YmxpYzoKICAgICAgICAg
CiAgICAgICAgIHZvaWQgZHVtcFN0YXRlKFByaW50U3RyZWFtJik7CiAgICAgICAgIAorICAgICAg
ICB2b2lkIGFzc29jaWF0ZVdpdGhPcmlnaW4oU2VjdXJpdHlPcmlnaW5Ub2tlbik7CisgICAgICAg
IFNlY3VyaXR5T3JpZ2luVG9rZW4gc2VjdXJpdHlPcmlnaW5Ub2tlbigpIGNvbnN0IHsgcmV0dXJu
IG1fc2VjdXJpdHlPcmlnaW5Ub2tlbjsgfQorICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAg
ICBIYW5kbGUoSGVhcCYsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqLCB2b2lkKik7CiAgICAgICAg
IApAQCAtMjI5LDYgKzIzMyw4IEBAIHB1YmxpYzoKICAgICAgICAgV2Vha1NldCBtX3dlYWtTZXQ7
CiAgICAgICAgIAogICAgICAgICBNYXJrZWRCbG9jayogbV9ibG9jayB7IG51bGxwdHIgfTsKKyAg
ICAgICAgCisgICAgICAgIFNlY3VyaXR5T3JpZ2luVG9rZW4gbV9zZWN1cml0eU9yaWdpblRva2Vu
IHsgMCB9OwogICAgIH07CiAKIHByaXZhdGU6ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2VjdXJpdHlPcmlnaW5Ub2tlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2VjdXJpdHlPcmlnaW5Ub2tlbi5jcHAJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2VjdXJpdHlPcmlnaW5Ub2tlbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2VjdXJp
dHlPcmlnaW5Ub2tlbi5oIgorCisjaW5jbHVkZSA8d3RmL0F0b21pYy5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworU2VjdXJpdHlPcmlnaW5Ub2tlbiB1bmlxdWVTZWN1cml0eU9yaWdpblRva2VuKCkK
K3sKKyAgICBzdGF0aWMgU2VjdXJpdHlPcmlnaW5Ub2tlbiBjb3VudGVyOworICAgIHJldHVybiBh
dG9taWNFeGNoYW5nZUFkZCgmY291bnRlciwgMSkgKyAxOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TZWN1cml0eU9yaWdpblRv
a2VuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2VjdXJpdHlP
cmlnaW5Ub2tlbi5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1NlY3VyaXR5T3JpZ2luVG9rZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25j
ZQorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiB1aW50NjRfdCBTZWN1cml0eU9yaWdpblRv
a2VuOworCitTZWN1cml0eU9yaWdpblRva2VuIHVuaXF1ZVNlY3VyaXR5T3JpZ2luVG9rZW4oKTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1N1YnNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
dWJzcGFjZS5jcHAJKHJldmlzaW9uIDIyNzcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1N1YnNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsMTAgKzgwLDEwIEBAIHZvaWQg
U3Vic3BhY2U6OnByZXBhcmVGb3JBbGxvY2F0aW9uKCkKICAgICBtX2RpcmVjdG9yeUZvckVtcHR5
QWxsb2NhdGlvbiA9IG1fYWxpZ25lZE1lbW9yeUFsbG9jYXRvci0+Zmlyc3REaXJlY3RvcnkoKTsK
IH0KIAotTWFya2VkQmxvY2s6OkhhbmRsZSogU3Vic3BhY2U6OmZpbmRFbXB0eUJsb2NrVG9TdGVh
bCgpCitNYXJrZWRCbG9jazo6SGFuZGxlKiBTdWJzcGFjZTo6ZmluZEVtcHR5QmxvY2tUb1N0ZWFs
KFRocmVhZExvY2FsQ2FjaGUmIHRsYykKIHsKICAgICBmb3IgKDsgbV9kaXJlY3RvcnlGb3JFbXB0
eUFsbG9jYXRpb247IG1fZGlyZWN0b3J5Rm9yRW1wdHlBbGxvY2F0aW9uID0gbV9kaXJlY3RvcnlG
b3JFbXB0eUFsbG9jYXRpb24tPm5leHREaXJlY3RvcnlJbkFsaWduZWRNZW1vcnlBbGxvY2F0b3Io
KSkgewotICAgICAgICBpZiAoTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSBtX2RpcmVjdG9y
eUZvckVtcHR5QWxsb2NhdGlvbi0+ZmluZEVtcHR5QmxvY2tUb1N0ZWFsKCkpCisgICAgICAgIGlm
IChNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IG1fZGlyZWN0b3J5Rm9yRW1wdHlBbGxvY2F0
aW9uLT5maW5kRW1wdHlCbG9ja1RvU3RlYWwodGxjKSkKICAgICAgICAgICAgIHJldHVybiBibG9j
azsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TdWJzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1N1YnNwYWNlLmgJKHJldmlzaW9uIDIyNzcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1N1YnNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIGNsYXNzIEFsaWduZWRNZW1vcnlBbGxvY2F0b3I7CiBjbGFzcyBIZWFwQ2Vs
bFR5cGU7CitjbGFzcyBUaHJlYWRMb2NhbENhY2hlOwogCiAvLyBUaGUgaWRlYSBvZiBzdWJzcGFj
ZXMgaXMgdGhhdCB5b3UgY2FuIHByb3ZpZGUgc29tZSBjdXN0b20gYmVoYXZpb3IgZm9yIHlvdXIg
b2JqZWN0cyBpZiB5b3UKIC8vIGFsbG9jYXRlIHRoZW0gZnJvbSBhIGN1c3RvbSBTdWJzcGFjZSBp
biB3aGljaCB5b3Ugb3ZlcnJpZGUgc29tZSBvZiB0aGUgdmlydHVhbCBtZXRob2RzLiBUaGlzCkBA
IC02NSw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZENyZWF0ZUZpcnN0RGlyZWN0b3J5
KEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkpIHsgbV9kaXJlY3RvcnlGb3JFbXB0eUFsbG9jYXRp
b24gPSBkaXJlY3Rvcnk7IH0KICAgICAKICAgICAvLyBGaW5kcyBhbiBlbXB0eSBibG9jayBmcm9t
IGFueSBTdWJzcGFjZSB0aGF0IGFncmVlcyB0byB0cmFkZSBibG9ja3Mgd2l0aCB1cy4KLSAgICBN
YXJrZWRCbG9jazo6SGFuZGxlKiBmaW5kRW1wdHlCbG9ja1RvU3RlYWwoKTsKKyAgICBNYXJrZWRC
bG9jazo6SGFuZGxlKiBmaW5kRW1wdHlCbG9ja1RvU3RlYWwoVGhyZWFkTG9jYWxDYWNoZSYpOwog
ICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JFYWNoRGlyZWN0
b3J5KGNvbnN0IEZ1bmMmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVh
ZExvY2FsQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1RocmVhZExvY2FsQ2FjaGUuY3BwCShyZXZpc2lvbiAyMjc3MjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIs
MTMgKzMyLDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1SZWZQdHI8VGhyZWFkTG9jYWxDYWNo
ZT4gVGhyZWFkTG9jYWxDYWNoZTo6Y3JlYXRlKEhlYXAmIGhlYXApCitSZWZQdHI8VGhyZWFkTG9j
YWxDYWNoZT4gVGhyZWFkTG9jYWxDYWNoZTo6Y3JlYXRlKEhlYXAmIGhlYXAsIFNlY3VyaXR5T3Jp
Z2luVG9rZW4gc2VjdXJpdHlPcmlnaW5Ub2tlbikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFRocmVhZExvY2FsQ2FjaGUoaGVhcCkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGhyZWFk
TG9jYWxDYWNoZShoZWFwLCBzZWN1cml0eU9yaWdpblRva2VuKSk7CiB9CiAKLVRocmVhZExvY2Fs
Q2FjaGU6OlRocmVhZExvY2FsQ2FjaGUoSGVhcCYgaGVhcCkKK1RocmVhZExvY2FsQ2FjaGU6OlRo
cmVhZExvY2FsQ2FjaGUoSGVhcCYgaGVhcCwgU2VjdXJpdHlPcmlnaW5Ub2tlbiBzZWN1cml0eU9y
aWdpblRva2VuKQogICAgIDogbV9oZWFwKGhlYXApCisgICAgLCBtX3NlY3VyaXR5T3JpZ2luVG9r
ZW4oc2VjdXJpdHlPcmlnaW5Ub2tlbikKIHsKICAgICBtX2RhdGEgPSBhbGxvY2F0ZURhdGEoKTsK
IH0KQEAgLTQ4LDYgKzQ5LDIwIEBAIFRocmVhZExvY2FsQ2FjaGU6On5UaHJlYWRMb2NhbENhY2hl
KCkKICAgICBkZXN0cm95RGF0YShtX2RhdGEpOwogfQogCitMb2NhbFNpZGVBbGxvY2F0b3ImIFRo
cmVhZExvY2FsQ2FjaGU6OnNpZGVBbGxvY2F0b3Ioc2l6ZV90IG9mZnNldCkKK3sKKyAgICBzaXpl
X3QgaW5kZXggPSBvZmZzZXQgLyBzaXplb2YoTG9jYWxBbGxvY2F0b3IpOworICAgIGlmIChpbmRl
eCA8IG1fc2lkZUFsbG9jYXRvcnMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gKm1fc2lkZUFsbG9j
YXRvcnNbaW5kZXhdOworICAgIAorICAgIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ6OlNuYXBzaG90
IGxheW91dCA9IG1faGVhcC50aHJlYWRMb2NhbENhY2hlTGF5b3V0KCkuc25hcHNob3QoKTsKKyAg
ICB3aGlsZSAobV9zaWRlQWxsb2NhdG9ycy5zaXplKCkgPCBsYXlvdXQuZGlyZWN0b3JpZXMuc2l6
ZSgpKQorICAgICAgICBtX3NpZGVBbGxvY2F0b3JzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPExv
Y2FsU2lkZUFsbG9jYXRvcj4obGF5b3V0LmRpcmVjdG9yaWVzW21fc2lkZUFsbG9jYXRvcnMuc2l6
ZSgpXSkpOworICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgbV9zaWRlQWxsb2NhdG9y
cy5zaXplKCkpOworICAgIHJldHVybiAqbV9zaWRlQWxsb2NhdG9yc1tpbmRleF07Cit9CisKIFRo
cmVhZExvY2FsQ2FjaGU6OkRhdGEqIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRlRGF0YSgpCiB7
CiAgICAgc2l6ZV90IG9sZFNpemUgPSBtX2RhdGEgPyBtX2RhdGEtPnNpemUgOiAwOwpAQCAtNTks
NyArNzQsNyBAQCBUaHJlYWRMb2NhbENhY2hlOjpEYXRhKiBUaHJlYWRMb2NhbENhY2hlCiAgICAg
Zm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgb2xkU2l6ZTsgb2Zmc2V0ICs9IHNpemVv
ZihMb2NhbEFsbG9jYXRvcikpCiAgICAgICAgIG5ldyAoJmFsbG9jYXRvcigqcmVzdWx0LCBvZmZz
ZXQpKSBMb2NhbEFsbG9jYXRvcihXVEZNb3ZlKGFsbG9jYXRvcigqbV9kYXRhLCBvZmZzZXQpKSk7
CiAgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gb2xkU2l6ZTsgb2Zmc2V0IDwgbGF5b3V0LnNpemU7
IG9mZnNldCArPSBzaXplb2YoTG9jYWxBbGxvY2F0b3IpKQotICAgICAgICBuZXcgKCZhbGxvY2F0
b3IoKnJlc3VsdCwgb2Zmc2V0KSkgTG9jYWxBbGxvY2F0b3IobGF5b3V0LmRpcmVjdG9yaWVzW29m
ZnNldCAvIHNpemVvZihMb2NhbEFsbG9jYXRvcildKTsKKyAgICAgICAgbmV3ICgmYWxsb2NhdG9y
KCpyZXN1bHQsIG9mZnNldCkpIExvY2FsQWxsb2NhdG9yKHRoaXMsIGxheW91dC5kaXJlY3Rvcmll
c1tvZmZzZXQgLyBzaXplb2YoTG9jYWxBbGxvY2F0b3IpXSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2Fj
aGUuaAkocmV2aXNpb24gMjI3NzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhy
ZWFkTG9jYWxDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMyArMjUsMTggQEAKIAogI3By
YWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCIKKyNpbmNsdWRl
ICJMb2NhbEFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luVG9rZW4uaCIKICNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0VExTLmg+CiAjaW5j
bHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSGVhcDsKK2NsYXNzIExvY2FsU2lkZUFsbG9j
YXRvcjsKIGNsYXNzIFZNOwogCiBjbGFzcyBUaHJlYWRMb2NhbENhY2hlIDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPFRocmVhZExvY2FsQ2FjaGU+IHsKQEAgLTM5LDcgKzQ0LDcgQEAgY2xh
c3MgVGhyZWFkTG9jYWxDYWNoZSA6IHB1YmxpYyBUaHJlYWRTYQogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogICAgIAogcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8VGhyZWFkTG9jYWxD
YWNoZT4gY3JlYXRlKEhlYXAmKTsKKyAgICBzdGF0aWMgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+
IGNyZWF0ZShIZWFwJiwgU2VjdXJpdHlPcmlnaW5Ub2tlbiA9IHVuaXF1ZVNlY3VyaXR5T3JpZ2lu
VG9rZW4oKSk7CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgflRocmVhZExvY2FsQ2FjaGUo
KTsKIApAQCAtNTMsMTYgKzU4LDIwIEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgTG9jYWxB
bGxvY2F0b3ImIGFsbG9jYXRvcihWTSYsIHNpemVfdCBvZmZzZXQpOwogICAgIAorICAgIExvY2Fs
U2lkZUFsbG9jYXRvciYgc2lkZUFsbG9jYXRvcihzaXplX3Qgb2Zmc2V0KTsKKyAgICAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBTdWNjZXNzRnVuYywgdHlwZW5hbWUgRmFpbHVyZUZ1bmM+CiAgICAg
c3RhdGljIHZvaWQgdHJ5R2V0QWxsb2NhdG9yKFZNJiwgc2l6ZV90IG9mZnNldCwgY29uc3QgU3Vj
Y2Vzc0Z1bmMmLCBjb25zdCBGYWlsdXJlRnVuYyYpOwogICAgIAogICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZTaXplSW5EYXRhKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKERhdGEsIHNp
emUpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZpcnN0QWxsb2NhdG9ySW5EYXRh
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKERhdGEsIGFsbG9jYXRvcik7IH0KICAgICAKKyAg
ICBTZWN1cml0eU9yaWdpblRva2VuIHNlY3VyaXR5T3JpZ2luVG9rZW4oKSBjb25zdCB7IHJldHVy
biBtX3NlY3VyaXR5T3JpZ2luVG9rZW47IH0KKyAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIFZNOwogICAgIAotICAgIFRocmVhZExvY2FsQ2FjaGUoSGVhcCYpOworICAgIFRocmVhZExv
Y2FsQ2FjaGUoSGVhcCYsIFNlY3VyaXR5T3JpZ2luVG9rZW4pOwogICAgIAogICAgIHN0cnVjdCBE
YXRhIHsKICAgICAgICAgc2l6ZV90IHNpemU7CkBAIC05MSw2ICsxMDAsMTAgQEAgcHJpdmF0ZToK
ICAgICAvLyBpdCdzIGNvcnJlY3QgZm9yIGltbW9ydGFsIGNhY2hlcy4KICAgICBIZWFwJiBtX2hl
YXA7CiAgICAgRGF0YSogbV9kYXRhIHsgbnVsbHB0ciB9OworICAgIAorICAgIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8TG9jYWxTaWRlQWxsb2NhdG9yPj4gbV9zaWRlQWxsb2NhdG9yczsKKyAgICAK
KyAgICBTZWN1cml0eU9yaWdpblRva2VuIG1fc2VjdXJpdHlPcmlnaW5Ub2tlbjsKIAogI2lmIFVT
RShGQVNUX1RMU19GT1JfVExDKQogICAgIHN0YXRpYyBjb25zdCBwdGhyZWFkX2tleV90IHRsc0tl
eSA9IFdURl9HQ19UTENfS0VZOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhy
ZWFkTG9jYWxDYWNoZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oCShyZXZpc2lvbiAyMjc3MjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIlRo
cmVhZExvY2FsQ2FjaGUuaCIKKyNpbmNsdWRlICJWTS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>332508</attachid>
            <date>2018-01-28 22:06:46 -0800</date>
            <delta_ts>2018-01-29 15:22:19 -0800</delta_ts>
            <desc>passing some tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>34424</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI3NzIxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBA
CisyMDE4LTAxLTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R2xvYmFsIG9iamVjdHMgc2hvdWxkIGJlIGFibGUgdG8gdXNlIFRMQ3MgdG8gYWxsb2NhdGUgZnJv
bSBkaWZmZXJlbnQgYmxvY2tzIGZyb20gZWFjaCBvdGhlcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgyMjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBoZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcDoKKyAg
ICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OmZpbmRCbG9ja0ZvckFsbG9jYXRpb24pOgorICAg
ICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6cHJlcGFyZUZvckFsbG9jYXRpb24pOgorICAgICAg
ICAqIGhlYXAvQmxvY2tEaXJlY3RvcnkuaDoKKyAgICAgICAgKiBoZWFwL0xvY2FsQWxsb2NhdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6OkxvY2FsQWxsb2NhdG9yKToKKyAg
ICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6TG9jYWxB
bGxvY2F0b3I6On5Mb2NhbEFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkxvY2FsQWxsb2NhdG9y
OjphbGxvY2F0ZVNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6OnRyeUFs
bG9jYXRlV2l0aG91dENvbGxlY3RpbmcpOgorICAgICAgICAqIGhlYXAvTG9jYWxBbGxvY2F0b3Iu
aDoKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6OnRsYyBjb25zdCk6CisgICAgICAgICog
aGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHA6CisgICAgICAgICogaGVhcC9NYXJr
U3RhY2tNZXJnaW5nQ29uc3RyYWludC5oOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suY3Bw
OgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjphc3NvY2lhdGVXaXRoT3JpZ2lu
KToKKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEJs
b2NrOjpIYW5kbGU6OnNlY3VyaXR5T3JpZ2luVG9rZW4gY29uc3QpOgorICAgICAgICAqIGhlYXAv
U2VjdXJpdHlPcmlnaW5Ub2tlbi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjp1bmlxdWVTZWN1
cml0eU9yaWdpblRva2VuKToKKyAgICAgICAgKiBoZWFwL1NlY3VyaXR5T3JpZ2luVG9rZW4uaDog
QWRkZWQuCisgICAgICAgICogaGVhcC9UaHJlYWRMb2NhbENhY2hlLmNwcDoKKyAgICAgICAgKEpT
Qzo6VGhyZWFkTG9jYWxDYWNoZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6VGhyZWFkTG9jYWxD
YWNoZTo6VGhyZWFkTG9jYWxDYWNoZSk6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGU6
OmFsbG9jYXRlRGF0YSk6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGU6Omluc3RhbGxT
bG93KToKKyAgICAgICAgKiBoZWFwL1RocmVhZExvY2FsQ2FjaGUuaDoKKyAgICAgICAgKEpTQzo6
VGhyZWFkTG9jYWxDYWNoZTo6c2VjdXJpdHlPcmlnaW5Ub2tlbiBjb25zdCk6CisgICAgICAgICog
aGVhcC9UaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpUaHJlYWRMb2Nh
bENhY2hlOjppbnN0YWxsKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoK
KyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KToKKyAgICAgICAg
KEpTQzo6SlNHbG9iYWxPYmplY3Q6OmNyZWF0ZVRocmVhZExvY2FsQ2FjaGUpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6
OnRocmVhZExvY2FsQ2FjaGUpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6dGhyZWFk
TG9jYWxDYWNoZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9WTUVudHJ5U2Nv
cGUuY3BwOgorICAgICAgICAoSlNDOjpWTUVudHJ5U2NvcGU6OlZNRW50cnlTY29wZSk6CisgICAg
ICAgIChKU0M6OlZNRW50cnlTY29wZTo6flZNRW50cnlTY29wZSk6CisgICAgICAgICogcnVudGlt
ZS9WTUVudHJ5U2NvcGUuaDoKKwogMjAxOC0wMS0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBw
bGUuY29tPgogCiAgICAgICAgIExhcmdlQWxsb2NhdGlvbiBzaG91bGQgZG8gdGhlIHNhbWUgZGlz
dGFuY2luZyBhcyBNYXJrZWRCbG9jawpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJj
ZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAko
cmV2aXNpb24gMjI3NzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vCiAvLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIC8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNTEyLDYgKzUxMiw3IEBAIGhlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3BwCiBo
ZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNwcAogaGVhcC9NdXRhdG9yU2NoZWR1bGVyLmNw
cAogaGVhcC9NdXRhdG9yU3RhdGUuY3BwCitoZWFwL1NlY3VyaXR5T3JpZ2luVG9rZW4uY3BwCiBo
ZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAogaGVhcC9TbG90VmlzaXRvci5jcHAKIGhl
YXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAyMjc3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
Mjk0LDYgKzI5NCw3IEBACiAJCTBGNDI2QTQ4MTQ2MENCQjMwMDEzMUY4RiAvKiBWYWx1ZVJlY292
ZXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQy
NkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTQ5MTQ2MENCQjcwMDEzMUY4
RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNDI2QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQy
NkE0QjE0NjBDRDZFMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERh
dGFGb3JtYXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRjQyQjNDMzIwMUVDOUZGMDAzNTcwMzEgLyogU2VjdXJpdHlPcmlnaW5Ub2tlbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MkIzQzIyMDFF
QzlGRDAwMzU3MDMxIC8qIFNlY3VyaXR5T3JpZ2luVG9rZW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQzMTczODE0NkJBQzY5MDA3RTM4OTAg
LyogTGlzdGFibGVIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjQzMTczNjE0NkJBQzY1MDA3RTM4OTAgLyogTGlzdGFibGVIYW5kbGVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0NTcw
MzkxQkU0NEM5MTAwNjJBNjI5IC8qIEFpckVsaW1pbmF0ZURlYWRDb2RlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ1NzAzNzFCRTQ0QzkxMDA2MkE2
MjkgLyogQWlyRWxpbWluYXRlRGVhZENvZGUuaCAqLzsgfTsKIAkJMEY0NTcwM0QxQkU0NUYwQTAw
NjJBNjI5IC8qIEFpclJlcG9ydFVzZWRSZWdpc3RlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDU3MDNCMUJFNDVGMEEwMDYyQTYyOSAvKiBBaXJS
ZXBvcnRVc2VkUmVnaXN0ZXJzLmggKi87IH07CkBAIC0yMjYyLDYgKzIyNjMsOCBAQAogCQkwRjQy
NkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBWYWx1ZVJlY292ZXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNDI2QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlydHVhbFJlZ2lzdGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAvKiBEYXRhRm9y
bWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFGb3JtYXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0MkIzQzAyMDFFQjUwOTAwMzU3MDMxIC8qIEFs
bG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBbGxvY2F0
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjQyQjNDMjIwMUVDOUZEMDAz
NTcwMzEgLyogU2VjdXJpdHlPcmlnaW5Ub2tlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTZWN1cml0eU9yaWdpblRva2VuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNDMxNzM2MTQ2QkFDNjUwMDdFMzg5MCAvKiBMaXN0YWJsZUhhbmRsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGlzdGFibGVIYW5kbGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNDU3MDM2MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5h
dGVEZWFkQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJF
bGltaW5hdGVEZWFkQ29kZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyRWxpbWluYXRlRGVhZENvZGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ1NzAzNzFCRTQ0QzkxMDA2MkE2
MjkgLyogQWlyRWxpbWluYXRlRGVhZENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQWlyRWxpbWluYXRlRGVhZENvZGUuaDsgcGF0aCA9IGIzL2Fpci9BaXJFbGltaW5hdGVE
ZWFkQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTU1OSwyMSArNTU2Miwx
NCBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyogaGVhcCAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMEY3NUEwNTQyMDBEMjVFRjAwMzhFMkNG
IC8qIEFsbG9jYXRvci5oICovLAotCQkJCTBGNzVBMDVEMjAwRDI1RjEwMDM4RTJDRiAvKiBBbGxv
Y2F0b3JJbmxpbmVzLmggKi8sCi0JCQkJMEY3NUEwNTkyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2Fs
QWxsb2NhdG9yLmNwcCAqLywKLQkJCQkwRjc1QTA1NzIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxB
bGxvY2F0b3IuaCAqLywKLQkJCQkwRjc1QTA1QTIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxv
Y2F0b3JJbmxpbmVzLmggKi8sCi0JCQkJMEY3NUEwNTgyMDBEMjVGMDAwMzhFMkNGIC8qIFRocmVh
ZExvY2FsQ2FjaGUuY3BwICovLAotCQkJCTBGNzVBMDU1MjAwRDI1RUYwMDM4RTJDRiAvKiBUaHJl
YWRMb2NhbENhY2hlLmggKi8sCi0JCQkJMEY3NUEwNTYyMDBEMjVFRjAwMzhFMkNGIC8qIFRocmVh
ZExvY2FsQ2FjaGVJbmxpbmVzLmggKi8sCi0JCQkJMEY3NUEwNUIyMDBEMjVGMTAwMzhFMkNGIC8q
IFRocmVhZExvY2FsQ2FjaGVMYXlvdXQuY3BwICovLAotCQkJCTBGNzVBMDVDMjAwRDI1RjEwMDM4
RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlTGF5b3V0LmggKi8sCiAJCQkJMEZFQzNDNTAxRjMzQTQx
NjAwRjU5QjZDIC8qIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICovLAogCQkJCTBGRUMzQzUx
MUYzM0E0MTYwMEY1OUI2QyAvKiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggKi8sCiAJCQkJMEZB
NzYyMEExREI5NTlGNjAwQjdBMkZEIC8qIEFsbG9jYXRpbmdTY29wZS5oICovLAogCQkJCTBGRENF
MTFCMUZBRTYxRjQwMDZGMzkwMSAvKiBBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCAqLywKKwkJCQkw
RjQyQjNDMDIwMUVCNTA5MDAzNTcwMzEgLyogQWxsb2NhdG9yLmNwcCAqLywKKwkJCQkwRjc1QTA1
NDIwMEQyNUVGMDAzOEUyQ0YgLyogQWxsb2NhdG9yLmggKi8sCiAJCQkJMEYzMENCNUQxRkNFNDZC
NDAwNEI1MzIzIC8qIEFsbG9jYXRvckZvck1vZGUuaCAqLywKKwkJCQkwRjc1QTA1RDIwMEQyNUYx
MDAzOEUyQ0YgLyogQWxsb2NhdG9ySW5saW5lcy5oICovLAogCQkJCTBGQjQ2NzdFMUZEREE2RTUw
MDNGQ0IwOSAvKiBBdG9tSW5kaWNlcy5oICovLAogCQkJCUMyQjkxNkM0MTREQTA0MEMwMENCQUM4
NiAvKiBCbG9ja0RpcmVjdG9yeS5jcHAgKi8sCiAJCQkJQzJCOTE2QzExNERBMDE0RTAwQ0JBQzg2
IC8qIEJsb2NrRGlyZWN0b3J5LmggKi8sCkBAIC01Njc0LDYgKzU2NzAsOSBAQAogCQkJCTBGMDcw
QTQ1MUQ1NDNBODkwMDZFNzIzMiAvKiBMYXJnZUFsbG9jYXRpb24uY3BwICovLAogCQkJCTBGMDcw
QTQ2MUQ1NDNBODkwMDZFNzIzMiAvKiBMYXJnZUFsbG9jYXRpb24uaCAqLywKIAkJCQkwRjQzMTcz
NjE0NkJBQzY1MDA3RTM4OTAgLyogTGlzdGFibGVIYW5kbGVyLmggKi8sCisJCQkJMEY3NUEwNTky
MDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9yLmNwcCAqLywKKwkJCQkwRjc1QTA1NzIw
MEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3IuaCAqLywKKwkJCQkwRjc1QTA1QTIwMEQy
NUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3JJbmxpbmVzLmggKi8sCiAJCQkJMEYyMDhBRDYx
REYwOTI1QTAwN0QzMjY5IC8qIExvY2tEdXJpbmdNYXJraW5nLmggKi8sCiAJCQkJMTRCNzIzM0Yx
MkQ3RDBEQTAwM0JENUVEIC8qIE1hY2hpbmVTdGFja01hcmtlci5jcHAgKi8sCiAJCQkJMTRCNzIz
NDAxMkQ3RDBEQTAwM0JENUVEIC8qIE1hY2hpbmVTdGFja01hcmtlci5oICovLApAQCAtNTcwMyw2
ICs1NzAyLDcgQEAKIAkJCQkwRkQwRTVFRjFFNDZCRjIzMDAwNkFCMDggLyogUmVnaXN0ZXJTdGF0
ZS5oICovLAogCQkJCTBGN0NGOTRFMURCRUVFODYwMDk4Q0MxMiAvKiBSZWxlYXNlSGVhcEFjY2Vz
c1Njb3BlLmggKi8sCiAJCQkJMEYyQzYzQTkxRTRGQTQyQzAwQzEzODM5IC8qIFJ1bm5pbmdTY29w
ZS5oICovLAorCQkJCTBGNDJCM0MyMjAxRUM5RkQwMDM1NzAzMSAvKiBTZWN1cml0eU9yaWdpblRv
a2VuLmggKi8sCiAJCQkJMEY0RDhDNzYxRkNBM0NGMjAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdD
b25zdHJhaW50LmNwcCAqLywKIAkJCQkwRjREOEM3NzFGQ0EzQ0YzMDAxRDMyQUMgLyogU2ltcGxl
TWFya2luZ0NvbnN0cmFpbnQuaCAqLywKIAkJCQlDMjI1NDk0MjE1RjdEQkFBMDA2NUU4OTggLyog
U2xvdFZpc2l0b3IuY3BwICovLApAQCAtNTcyNCw2ICs1NzI0LDExIEBACiAJCQkJMEZENzlBMkMx
RUJCQkRCMjAwREE4OEQzIC8qIFN5bmNocm9ub3VzbmVzcy5oICovLAogCQkJCTBGMUZCMzhBMUUx
NzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIu
Y3BwICovLAogCQkJCTBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BU
aGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLywKKwkJCQkwRjc1QTA1ODIwMEQyNUYwMDAzOEUy
Q0YgLyogVGhyZWFkTG9jYWxDYWNoZS5jcHAgKi8sCisJCQkJMEY3NUEwNTUyMDBEMjVFRjAwMzhF
MkNGIC8qIFRocmVhZExvY2FsQ2FjaGUuaCAqLywKKwkJCQkwRjc1QTA1NjIwMEQyNUVGMDAzOEUy
Q0YgLyogVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaCAqLywKKwkJCQkwRjc1QTA1QjIwMEQyNUYx
MDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUxheW91dC5jcHAgKi8sCisJCQkJMEY3NUEwNUMy
MDBEMjVGMTAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQuaCAqLywKIAkJCQkxNDE0
NDhDQzEzQTE3ODM3MDBGNUJBMUEgLyogVGlueUJsb29tRmlsdGVyLmggKi8sCiAJCQkJMEY1RjA4
Q0UxNDZDNzYyRjAwMDQ3MkE5IC8qIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCAqLywKIAkJCQkw
RjREOEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi8sCkBAIC04NTIyLDYg
Kzg1MjcsNyBAQAogCQkJCTBGN0MzOUZGMUM5MEM1NUIwMDQ4MDE1MSAvKiBERkdPcEluZm8uaCBp
biBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0ZFMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdPU1JBdmFp
bGFiaWxpdHlBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkU1NzE0MURB
RjEwMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNDJCM0Mz
MjAxRUM5RkYwMDM1NzAzMSAvKiBTZWN1cml0eU9yaWdpblRva2VuLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkQ4QTMyNjE3RDUxRjU3MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0aW9u
UGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAvKiBE
RkdPU1JFeGl0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFQzE3MTc4RTczMDA2OTBDN0Yg
LyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcAkocmV2aXNpb24gMjI3NzIwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUg
Ik1hcmtlZEJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5oIgorI2luY2x1
ZGUgIlRocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRl
IDx3dGYvQ3VycmVudFRpbWUuaD4KIApAQCAtODAsMTQgKzgxLDIwIEBAIE1hcmtlZEJsb2NrOjpI
YW5kbGUqIEJsb2NrRGlyZWN0b3J5OjpmaW4KICAgICByZXR1cm4gbV9ibG9ja3NbbV9lbXB0eUN1
cnNvcl07CiB9CiAKLU1hcmtlZEJsb2NrOjpIYW5kbGUqIEJsb2NrRGlyZWN0b3J5OjpmaW5kQmxv
Y2tGb3JBbGxvY2F0aW9uKCkKK01hcmtlZEJsb2NrOjpIYW5kbGUqIEJsb2NrRGlyZWN0b3J5Ojpm
aW5kQmxvY2tGb3JBbGxvY2F0aW9uKExvY2FsQWxsb2NhdG9yJiBhbGxvY2F0b3IpCiB7Ci0gICAg
bV9hbGxvY2F0aW9uQ3Vyc29yID0gKG1fY2FuQWxsb2NhdGVCdXROb3RFbXB0eSB8IG1fZW1wdHkp
LmZpbmRCaXQobV9hbGxvY2F0aW9uQ3Vyc29yLCB0cnVlKTsKLSAgICBpZiAobV9hbGxvY2F0aW9u
Q3Vyc29yID49IG1fYmxvY2tzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
Ci0gICAgc2V0SXNDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgbV9h
bGxvY2F0aW9uQ3Vyc29yLCBmYWxzZSk7Ci0gICAgcmV0dXJuIG1fYmxvY2tzW21fYWxsb2NhdGlv
bkN1cnNvcl07CisgICAgZm9yICg7OykgeworICAgICAgICBhbGxvY2F0b3IubV9hbGxvY2F0aW9u
Q3Vyc29yID0gKG1fY2FuQWxsb2NhdGVCdXROb3RFbXB0eSB8IG1fZW1wdHkpLmZpbmRCaXQoYWxs
b2NhdG9yLm1fYWxsb2NhdGlvbkN1cnNvciwgdHJ1ZSk7CisgICAgICAgIGlmIChhbGxvY2F0b3Iu
bV9hbGxvY2F0aW9uQ3Vyc29yID49IG1fYmxvY2tzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IGJsb2NrSW5kZXggPSBhbGxvY2F0
b3IubV9hbGxvY2F0aW9uQ3Vyc29yKys7CisgICAgICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIHJl
c3VsdCA9IG1fYmxvY2tzW2Jsb2NrSW5kZXhdOworICAgICAgICBpZiAocmVzdWx0LT5zZWN1cml0
eU9yaWdpblRva2VuKCkgPT0gYWxsb2NhdG9yLnRsYygpLT5zZWN1cml0eU9yaWdpblRva2VuKCkp
IHsKKyAgICAgICAgICAgIHNldElzQ2FuQWxsb2NhdGVCdXROb3RFbXB0eShOb0xvY2tpbmdOZWNl
c3NhcnksIGJsb2NrSW5kZXgsIGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIH0KKyAgICB9CiB9CiAKIE1hcmtlZEJsb2NrOjpIYW5kbGUqIEJsb2NrRGlyZWN0b3J5
Ojp0cnlBbGxvY2F0ZUJsb2NrKCkKQEAgLTE4Myw4ICsxOTAsNiBAQCB2b2lkIEJsb2NrRGlyZWN0
b3J5OjpwcmVwYXJlRm9yQWxsb2NhdGlvCiAgICAgICAgICAgICBhbGxvY2F0b3ItPnByZXBhcmVG
b3JBbGxvY2F0aW9uKCk7CiAgICAgICAgIH0pOwogICAgIAotICAgIG1fYWxsb2NhdGlvbkN1cnNv
ciA9IDA7Ci0gICAgbV9lbXB0eUN1cnNvciA9IDA7CiAgICAgbV91bnN3ZXB0Q3Vyc29yID0gMDsK
ICAgICAKICAgICBtX2VkZW4uY2xlYXJBbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuaAkocmV2aXNpb24gMjI3NzIwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNDMs
NiArNDMsNyBAQCBjbGFzcyBIZWFwOwogY2xhc3MgSXNvQ2VsbFNldDsKIGNsYXNzIE1hcmtlZFNw
YWNlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworY2xhc3MgVGhyZWFkTG9jYWxDYWNo
ZTsKIGNsYXNzIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ7CiAKICNkZWZpbmUgRk9SX0VBQ0hfQkxP
Q0tfRElSRUNUT1JZX0JJVChtYWNybykgXApAQCAtMTYyLDEyICsxNjMsMTMgQEAgcHVibGljOgog
ICAgIHZvaWQgZHVtcEJpdHMoUHJpbnRTdHJlYW0mID0gV1RGOjpkYXRhRmlsZSgpKTsKICAgICAK
IHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIExvY2FsQWxsb2NhdG9yOwogICAgIGZyaWVuZCBj
bGFzcyBJc29DZWxsU2V0OworICAgIGZyaWVuZCBjbGFzcyBMb2NhbEFsbG9jYXRvcjsKKyAgICBm
cmllbmQgY2xhc3MgTG9jYWxTaWRlQWxsb2NhdG9yOwogICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRC
bG9jazsKICAgICBmcmllbmQgY2xhc3MgVGhyZWFkTG9jYWxDYWNoZUxheW91dDsKICAgICAKLSAg
ICBNYXJrZWRCbG9jazo6SGFuZGxlKiBmaW5kQmxvY2tGb3JBbGxvY2F0aW9uKCk7CisgICAgTWFy
a2VkQmxvY2s6OkhhbmRsZSogZmluZEJsb2NrRm9yQWxsb2NhdGlvbihMb2NhbEFsbG9jYXRvciYp
OwogICAgIAogICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIHRyeUFsbG9jYXRlQmxvY2soKTsKICAg
ICAKQEAgLTE4NCw4ICsxODYsNyBAQCBwcml2YXRlOgogICAgIAogICAgIC8vIEFmdGVyIHlvdSBk
byBzb21ldGhpbmcgdG8gYSBibG9jayBiYXNlZCBvbiBvbmUgb2YgdGhlc2UgY3Vyc29ycywgeW91
IGNsZWFyIHRoZSBiaXQgaW4gdGhlCiAgICAgLy8gY29ycmVzcG9uZGluZyBiaXR2ZWN0b3IgYW5k
IGxlYXZlIHRoZSBjdXJzb3Igd2hlcmUgaXQgd2FzLgotICAgIHNpemVfdCBtX2FsbG9jYXRpb25D
dXJzb3IgeyAwIH07IC8vIFBvaW50cyB0byB0aGUgbmV4dCBibG9jayB0aGF0IGlzIGEgY2FuZGlk
YXRlIGZvciBhbGxvY2F0aW9uLgotICAgIHNpemVfdCBtX2VtcHR5Q3Vyc29yIHsgMCB9OyAvLyBQ
b2ludHMgdG8gdGhlIG5leHQgYmxvY2sgdGhhdCBpcyBhIGNhbmRpZGF0ZSBmb3IgZW1wdHkgYWxs
b2NhdGlvbiAoYWxsb2NhdGluZyBpbiBlbXB0eSBibG9ja3MpLgorICAgIHNpemVfdCBtX2VtcHR5
Q3Vyc29yIHsgMCB9OwogICAgIHNpemVfdCBtX3Vuc3dlcHRDdXJzb3IgeyAwIH07IC8vIFBvaW50
cyB0byB0aGUgbmV4dCBibG9jayB0aGF0IGlzIGEgY2FuZGlkYXRlIGZvciBpbmNyZW1lbnRhbCBz
d2VlcGluZy4KICAgICAKICAgICB1bnNpZ25lZCBtX2NlbGxTaXplOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjI3NzIw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw4ICszMiw5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1Mb2NhbEFs
bG9jYXRvcjo6TG9jYWxBbGxvY2F0b3IoQmxvY2tEaXJlY3RvcnkqIGRpcmVjdG9yeSkKLSAgICA6
IG1fZGlyZWN0b3J5KGRpcmVjdG9yeSkKK0xvY2FsQWxsb2NhdG9yOjpMb2NhbEFsbG9jYXRvcihU
aHJlYWRMb2NhbENhY2hlKiB0bGMsIEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkpCisgICAgOiBt
X3RsYyh0bGMpCisgICAgLCBtX2RpcmVjdG9yeShkaXJlY3RvcnkpCiAgICAgLCBtX2NlbGxTaXpl
KGRpcmVjdG9yeS0+bV9jZWxsU2l6ZSkKICAgICAsIG1fZnJlZUxpc3QobV9jZWxsU2l6ZSkKIHsK
QEAgLTQyLDExICs0MywxMyBAQCBMb2NhbEFsbG9jYXRvcjo6TG9jYWxBbGxvY2F0b3IoQmxvY2tE
aXJlCiB9CiAKIExvY2FsQWxsb2NhdG9yOjpMb2NhbEFsbG9jYXRvcihMb2NhbEFsbG9jYXRvciYm
IG90aGVyKQotICAgIDogbV9kaXJlY3Rvcnkob3RoZXIubV9kaXJlY3RvcnkpCisgICAgOiBtX3Rs
YyhvdGhlci5tX3RsYykKKyAgICAsIG1fZGlyZWN0b3J5KG90aGVyLm1fZGlyZWN0b3J5KQogICAg
ICwgbV9jZWxsU2l6ZShvdGhlci5tX2NlbGxTaXplKQogICAgICwgbV9mcmVlTGlzdChXVEZNb3Zl
KG90aGVyLm1fZnJlZUxpc3QpKQogICAgICwgbV9jdXJyZW50QmxvY2sob3RoZXIubV9jdXJyZW50
QmxvY2spCiAgICAgLCBtX2xhc3RBY3RpdmVCbG9jayhvdGhlci5tX2xhc3RBY3RpdmVCbG9jaykK
KyAgICAsIG1fYWxsb2NhdGlvbkN1cnNvcihvdGhlci5tX2FsbG9jYXRpb25DdXJzb3IpCiB7CiAg
ICAgb3RoZXIucmVzZXQoKTsKICAgICBpZiAob3RoZXIuaXNPbkxpc3QoKSkgewpAQCAtNjEsNiAr
NjQsNyBAQCB2b2lkIExvY2FsQWxsb2NhdG9yOjpyZXNldCgpCiAgICAgbV9mcmVlTGlzdC5jbGVh
cigpOwogICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKICAgICBtX2xhc3RBY3RpdmVCbG9j
ayA9IG51bGxwdHI7CisgICAgbV9hbGxvY2F0aW9uQ3Vyc29yID0gMDsKIH0KIAogTG9jYWxBbGxv
Y2F0b3I6On5Mb2NhbEFsbG9jYXRvcigpCkBAIC04MCw2ICs4NCwxNSBAQCBMb2NhbEFsbG9jYXRv
cjo6fkxvY2FsQWxsb2NhdG9yKCkKICAgICAvLyAgIHRoYXQgaXQgaXMgbm90IHJlYWNoYWJsZS4g
VGhlcmVmb3JlLCB0aGUgVExDIHNob3VsZCBzdGlsbCBiZSBpbiBhIGZ1bGx5IHJlc2V0IHN0YXRl
IGF0IHRoZQogICAgIC8vICAgdGltZSBvZiBkZXN0cnVjdGlvbiBiZWNhdXNlIGZvciBpdCB0byBn
ZXQgaW50byBhbnkgb3RoZXIgc3RhdGUsIHNvbWVvbmUgbXVzdCBoYXZlIGFsbG9jYXRlZAogICAg
IC8vICAgaW4gaXQgKHdoaWNoIGlzIGltcG9zc2libGUgYmVjYXVzZSBpdCdzIHN1cHBvc2VkbHkg
dW5yZWFjaGFibGUpLgorICAgIC8vCisgICAgLy8gTXkgYmlnZ2VzdCB3b3JyeSB3aXRoIHRoZXNl
IGFzc2VydGlvbnMgaXMgdGhhdCB0aGVyZSB3aWxsIGJlIHNvbWUgVExDIHRoYXQgZ2V0cyBzZXQg
YXMgdGhlCisgICAgLy8gY3VycmVudCBvbmUgYnV0IHRoZW4gbmV2ZXIgcmVzZXQsIGFuZCBpbiB0
aGUgbWVhbnRpbWUgdGhlIGdsb2JhbCBvYmplY3QgdGhhdCBvd25zIGl0IGdldHMKKyAgICAvLyBk
ZXN0cm95ZWQuCisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgaWYgd2UgZGlkIGhvbGQgb250byBz
b21lIG1lbW9yeSBhbmQgd2Ugd2FudGVkIHRvIHJldHVybiBpdCB0aGVuIHRoaXMgY291bGQgYmUg
d2VpcmQuCisgICAgLy8gV2Ugd291bGQgcG90ZW50aWFsbHkgaGF2ZSB0byBzdG9wQWxsb2NhdGlu
ZygpLiBUaGF0IHdvdWxkIG1lYW4gaGF2aW5nIHRvIHJldHVybiBhIGJsb2NrIHRvIHRoZQorICAg
IC8vIEJsb2NrRGlyZWN0b3J5LiBJdCdzIG5vdCBjbGVhciB0aGF0IHRoZSBCbG9ja0RpcmVjdG9y
eSBpcyBwcmVwYXJlZCB0byBoYW5kbGUgdGhhdCBkdXJpbmcKKyAgICAvLyBzd2VlcGluZyBhbm90
aGVyIGJsb2NrLCBmb3IgZXhhbXBsZS4KICAgICBib29sIG9rID0gdHJ1ZTsKICAgICBpZiAoIW1f
ZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpIHsKICAgICAgICAgZGF0YUxvZygiRkFUQUw6
ICIsIFJhd1BvaW50ZXIodGhpcyksICItPn5Mb2NhbEFsbG9jYXRvciBoYXMgbm9uLWVtcHR5IGZy
ZWUtbGlzdC5cbiIpOwpAQCAtMTY0LDYgKzE3Nyw3IEBAIHZvaWQqIExvY2FsQWxsb2NhdG9yOjph
bGxvY2F0ZVNsb3dDYXNlKEcKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQorICAgIGJsb2NrLT5hc3NvY2lhdGVXaXRoT3JpZ2luKG1fdGxjLT5zZWN1cml0
eU9yaWdpblRva2VuKCkpOwogICAgIG1fZGlyZWN0b3J5LT5hZGRCbG9jayhibG9jayk7CiAgICAg
cmVzdWx0ID0gYWxsb2NhdGVJbihibG9jayk7CiAgICAgQVNTRVJUKHJlc3VsdCk7CkBAIC0yMDEs
NyArMjE1LDcgQEAgdm9pZCogTG9jYWxBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dAogICAg
IEFTU0VSVChtX2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKICAgICAKICAgICBmb3Ig
KDs7KSB7Ci0gICAgICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9kaXJlY3Rvcnkt
PmZpbmRCbG9ja0ZvckFsbG9jYXRpb24oKTsKKyAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSog
YmxvY2sgPSBtX2RpcmVjdG9yeS0+ZmluZEJsb2NrRm9yQWxsb2NhdGlvbigqdGhpcyk7CiAgICAg
ICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICBicmVhazsKIApAQCAtMjIwLDYgKzIzNCw3IEBA
IHZvaWQqIExvY2FsQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXQKICAgICAgICAgICAgIC8v
IGJlY2F1c2UgdGhlcmUgaXMgYSByZW1vdGUgY2hhbmNlIHRoYXQgYSBibG9jayBtYXkgaGF2ZSBi
b3RoIGNhbkFsbG9jYXRlQnV0Tm90RW1wdHkKICAgICAgICAgICAgIC8vIGFuZCBlbXB0eSBzZXQg
YXQgdGhlIHNhbWUgdGltZS4KICAgICAgICAgICAgIGJsb2NrLT5yZW1vdmVGcm9tRGlyZWN0b3J5
KCk7CisgICAgICAgICAgICBibG9jay0+YXNzb2NpYXRlV2l0aE9yaWdpbihtX3RsYy0+c2VjdXJp
dHlPcmlnaW5Ub2tlbigpKTsKICAgICAgICAgICAgIG1fZGlyZWN0b3J5LT5hZGRCbG9jayhibG9j
ayk7CiAgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVJbihibG9jayk7CiAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuaAkocmV2aXNp
b24gMjI3NzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTIgKzMzLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBj
bGFzcyBCbG9ja0RpcmVjdG9yeTsKIGNsYXNzIEdDRGVmZXJyYWxDb250ZXh0OworY2xhc3MgVGhy
ZWFkTG9jYWxDYWNoZTsKIAogY2xhc3MgTG9jYWxBbGxvY2F0b3IgOiBwdWJsaWMgQmFzaWNSYXdT
ZW50aW5lbE5vZGU8TG9jYWxBbGxvY2F0b3I+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShM
b2NhbEFsbG9jYXRvcik7CiAgICAgCiBwdWJsaWM6Ci0gICAgTG9jYWxBbGxvY2F0b3IoQmxvY2tE
aXJlY3RvcnkqKTsKKyAgICBMb2NhbEFsbG9jYXRvcihUaHJlYWRMb2NhbENhY2hlKiwgQmxvY2tE
aXJlY3RvcnkqKTsKICAgICBMb2NhbEFsbG9jYXRvcihMb2NhbEFsbG9jYXRvciYmKTsKICAgICB+
TG9jYWxBbGxvY2F0b3IoKTsKICAgICAKQEAgLTUzLDggKzU0LDEyIEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2VsbFNpemUoKTsKICAgICAKICAgICBib29sIGlzRnJl
ZUxpc3RlZENlbGwoY29uc3Qgdm9pZCopIGNvbnN0OworICAgIAorICAgIFRocmVhZExvY2FsQ2Fj
aGUqIHRsYygpIGNvbnN0IHsgcmV0dXJuIG1fdGxjOyB9CiAKIHByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIEJsb2NrRGlyZWN0b3J5OworICAgIAogICAgIHZvaWQgcmVzZXQoKTsKICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0Kiwg
QWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKTsKICAgICB2b2lkIGRpZENvbnN1bWVG
cmVlTGlzdCgpOwpAQCAtNjMsMTEgKzY4LDE2IEBAIHByaXZhdGU6CiAgICAgdm9pZCogYWxsb2Nh
dGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGRvVGVz
dENvbGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqKTsKIAorICAgIFRocmVhZExv
Y2FsQ2FjaGUqIG1fdGxjOwogICAgIEJsb2NrRGlyZWN0b3J5KiBtX2RpcmVjdG9yeTsKICAgICB1
bnNpZ25lZCBtX2NlbGxTaXplOwogICAgIEZyZWVMaXN0IG1fZnJlZUxpc3Q7CiAgICAgTWFya2Vk
QmxvY2s6OkhhbmRsZSogbV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CiAgICAgTWFya2VkQmxv
Y2s6OkhhbmRsZSogbV9sYXN0QWN0aXZlQmxvY2sgeyBudWxscHRyIH07CisgICAgCisgICAgLy8g
QWZ0ZXIgeW91IGRvIHNvbWV0aGluZyB0byBhIGJsb2NrIGJhc2VkIG9uIG9uZSBvZiB0aGVzZSBj
dXJzb3JzLCB5b3UgY2xlYXIgdGhlIGJpdCBpbiB0aGUKKyAgICAvLyBjb3JyZXNwb25kaW5nIGJp
dHZlY3RvciBhbmQgbGVhdmUgdGhlIGN1cnNvciB3aGVyZSBpdCB3YXMuCisgICAgc2l6ZV90IG1f
YWxsb2NhdGlvbkN1cnNvciB7IDAgfTsgLy8gUG9pbnRzIHRvIHRoZSBuZXh0IGJsb2NrIHRoYXQg
aXMgYSBjYW5kaWRhdGUgZm9yIGFsbG9jYXRpb24uCiB9OwogCiBpbmxpbmUgcHRyZGlmZl90IExv
Y2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAJ
KHJldmlzaW9uIDIyNzcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFj
a01lcmdpbmdDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOSBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50
LmgiCiAKKyNpbmNsdWRlICJHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oIgorI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIE1hcmtTdGFja01lcmdpbmdDb25zdHJh
aW50OjpNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludChIZWFwJiBoZWFwKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3Ry
YWludC5oCShyZXZpc2lvbiAyMjc3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw5
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBIZWFwOworY2xhc3MgU2xvdFZpc2l0b3I7
CisKIGNsYXNzIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50IDogcHVibGljIE1hcmtpbmdDb25z
dHJhaW50IHsKIHB1YmxpYzoKICAgICBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludChIZWFwJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZp
c2lvbiAyMjc3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4OCw2ICs0ODgsMTUgQEAgYm9vbCBNYXJrZWRCbG9jazo6
SGFuZGxlOjppc0ZyZWVMaXN0ZWRDZQogICAgIHJldHVybiBtX2RpcmVjdG9yeS0+aXNGcmVlTGlz
dGVkQ2VsbCh0YXJnZXQpOwogfQogCit2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmFzc29jaWF0
ZVdpdGhPcmlnaW4oU2VjdXJpdHlPcmlnaW5Ub2tlbiBzZWN1cml0eU9yaWdpblRva2VuKQorewor
ICAgIGlmIChtX3NlY3VyaXR5T3JpZ2luVG9rZW4gPT0gc2VjdXJpdHlPcmlnaW5Ub2tlbikKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIG1lbXNldCgmYmxvY2soKSwgMCwgZW5kQXRvbSAqIGF0
b21TaXplKTsKKyAgICBtX3NlY3VyaXR5T3JpZ2luVG9rZW4gPSBzZWN1cml0eU9yaWdpblRva2Vu
OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDIyNzcyMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJEZXN0cnVjdGlvbk1vZGUuaCIKICNpbmNsdWRl
ICJIZWFwQ2VsbC5oIgogI2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgorI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luVG9rZW4uaCIKICNpbmNsdWRlICJXZWFrU2V0LmgiCiAjaW5jbHVkZSA8d3Rm
L0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvQml0bWFwLmg+CkBAIC0xOTQsNiArMTk1LDkgQEAg
cHVibGljOgogICAgICAgICAKICAgICAgICAgdm9pZCBkdW1wU3RhdGUoUHJpbnRTdHJlYW0mKTsK
ICAgICAgICAgCisgICAgICAgIHZvaWQgYXNzb2NpYXRlV2l0aE9yaWdpbihTZWN1cml0eU9yaWdp
blRva2VuKTsKKyAgICAgICAgU2VjdXJpdHlPcmlnaW5Ub2tlbiBzZWN1cml0eU9yaWdpblRva2Vu
KCkgY29uc3QgeyByZXR1cm4gbV9zZWN1cml0eU9yaWdpblRva2VuOyB9CisgICAgICAgIAogICAg
IHByaXZhdGU6CiAgICAgICAgIEhhbmRsZShIZWFwJiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcios
IHZvaWQqKTsKICAgICAgICAgCkBAIC0yMjksNiArMjMzLDggQEAgcHVibGljOgogICAgICAgICBX
ZWFrU2V0IG1fd2Vha1NldDsKICAgICAgICAgCiAgICAgICAgIE1hcmtlZEJsb2NrKiBtX2Jsb2Nr
IHsgbnVsbHB0ciB9OworICAgICAgICAKKyAgICAgICAgU2VjdXJpdHlPcmlnaW5Ub2tlbiBtX3Nl
Y3VyaXR5T3JpZ2luVG9rZW4geyAwIH07CiAgICAgfTsKIAogcHJpdmF0ZTogICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TZWN1cml0eU9yaWdpblRva2VuLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TZWN1cml0eU9yaWdpblRva2VuLmNw
cAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TZWN1cml0eU9y
aWdpblRva2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTZWN1cml0eU9yaWdpblRva2VuLmgiCisKKyNpbmNsdWRlIDx3dGYvQXRvbWlj
cy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworU2VjdXJpdHlPcmlnaW5Ub2tlbiB1bmlxdWVTZWN1
cml0eU9yaWdpblRva2VuKCkKK3sKKyAgICBzdGF0aWMgU2VjdXJpdHlPcmlnaW5Ub2tlbiBjb3Vu
dGVyOworICAgIHJldHVybiBXVEY6OmF0b21pY0V4Y2hhbmdlQWRkKCZjb3VudGVyLCAxKSArIDE7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TZWN1cml0eU9yaWdpblRva2VuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2VjdXJpdHlPcmlnaW5Ub2tlbi5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NlY3VyaXR5T3JpZ2luVG9rZW4uaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiB1aW50
NjRfdCBTZWN1cml0eU9yaWdpblRva2VuOworCitTZWN1cml0eU9yaWdpblRva2VuIHVuaXF1ZVNl
Y3VyaXR5T3JpZ2luVG9rZW4oKTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuY3BwCShyZXZpc2lv
biAyMjc3MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTMgKzMyLDE0IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCi1SZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gVGhyZWFkTG9jYWxDYWNoZTo6Y3JlYXRlKEhl
YXAmIGhlYXApCitSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gVGhyZWFkTG9jYWxDYWNoZTo6Y3Jl
YXRlKEhlYXAmIGhlYXAsIFNlY3VyaXR5T3JpZ2luVG9rZW4gc2VjdXJpdHlPcmlnaW5Ub2tlbikK
IHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRocmVhZExvY2FsQ2FjaGUoaGVhcCkpOworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgVGhyZWFkTG9jYWxDYWNoZShoZWFwLCBzZWN1cml0eU9yaWdp
blRva2VuKSk7CiB9CiAKLVRocmVhZExvY2FsQ2FjaGU6OlRocmVhZExvY2FsQ2FjaGUoSGVhcCYg
aGVhcCkKK1RocmVhZExvY2FsQ2FjaGU6OlRocmVhZExvY2FsQ2FjaGUoSGVhcCYgaGVhcCwgU2Vj
dXJpdHlPcmlnaW5Ub2tlbiBzZWN1cml0eU9yaWdpblRva2VuKQogICAgIDogbV9oZWFwKGhlYXAp
CisgICAgLCBtX3NlY3VyaXR5T3JpZ2luVG9rZW4oc2VjdXJpdHlPcmlnaW5Ub2tlbikKIHsKICAg
ICBtX2RhdGEgPSBhbGxvY2F0ZURhdGEoKTsKIH0KQEAgLTU5LDcgKzYwLDcgQEAgVGhyZWFkTG9j
YWxDYWNoZTo6RGF0YSogVGhyZWFkTG9jYWxDYWNoZQogICAgIGZvciAoc2l6ZV90IG9mZnNldCA9
IDA7IG9mZnNldCA8IG9sZFNpemU7IG9mZnNldCArPSBzaXplb2YoTG9jYWxBbGxvY2F0b3IpKQog
ICAgICAgICBuZXcgKCZhbGxvY2F0b3IoKnJlc3VsdCwgb2Zmc2V0KSkgTG9jYWxBbGxvY2F0b3Io
V1RGTW92ZShhbGxvY2F0b3IoKm1fZGF0YSwgb2Zmc2V0KSkpOwogICAgIGZvciAoc2l6ZV90IG9m
ZnNldCA9IG9sZFNpemU7IG9mZnNldCA8IGxheW91dC5zaXplOyBvZmZzZXQgKz0gc2l6ZW9mKExv
Y2FsQWxsb2NhdG9yKSkKLSAgICAgICAgbmV3ICgmYWxsb2NhdG9yKCpyZXN1bHQsIG9mZnNldCkp
IExvY2FsQWxsb2NhdG9yKGxheW91dC5kaXJlY3Rvcmllc1tvZmZzZXQgLyBzaXplb2YoTG9jYWxB
bGxvY2F0b3IpXSk7CisgICAgICAgIG5ldyAoJmFsbG9jYXRvcigqcmVzdWx0LCBvZmZzZXQpKSBM
b2NhbEFsbG9jYXRvcih0aGlzLCBsYXlvdXQuZGlyZWN0b3JpZXNbb2Zmc2V0IC8gc2l6ZW9mKExv
Y2FsQWxsb2NhdG9yKV0pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTcwLDcgKzcxLDcg
QEAgdm9pZCBUaHJlYWRMb2NhbENhY2hlOjpkZXN0cm95RGF0YShEYXRhKgogICAgIGZhc3RGcmVl
KGRhdGEpOwogfQogCi12b2lkIFRocmVhZExvY2FsQ2FjaGU6Omluc3RhbGxTbG93KFZNJiB2bSkK
K3ZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFsbFNsb3coVk0mIHZtLCBSZWZQdHI8VGhyZWFk
TG9jYWxDYWNoZT4qIHByZXZpb3VzKQogewogI2lmIFVTRShGQVNUX1RMU19GT1JfVExDKQogICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKQEAgLTgzLDggKzg0LDEzIEBAIHZvaWQg
VGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFsbFNsb3coVk0mIHYKICAgICAKICAgICByZWYoKTsKICAg
ICAKLSAgICBpZiAoUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IG9sZENhY2hlID0gZ2V0KHZtKSkK
LSAgICAgICAgb2xkQ2FjaGUtPmRlcmVmKCk7CisgICAgaWYgKFRocmVhZExvY2FsQ2FjaGU6OkRh
dGEqIG9sZENhY2hlRGF0YSA9IGdldEltcGwodm0pKSB7CisgICAgICAgIFRocmVhZExvY2FsQ2Fj
aGUqIG9sZENhY2hlID0gb2xkQ2FjaGVEYXRhLT5jYWNoZTsKKyAgICAgICAgaWYgKHByZXZpb3Vz
KQorICAgICAgICAgICAgKnByZXZpb3VzID0gYWRvcHRSZWYob2xkQ2FjaGUpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBvbGRDYWNoZS0+ZGVyZWYoKTsKKyAgICB9CiAgICAgCiAgICAgaW5z
dGFsbERhdGEodm0sIG1fZGF0YSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9UaHJlYWRMb2NhbENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5oCShyZXZpc2lvbiAyMjc3MjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDkgKzI1LDEzIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQWxsb2NhdGlvbkZhaWx1
cmVNb2RlLmgiCisjaW5jbHVkZSAiTG9jYWxBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJTZWN1cml0
eU9yaWdpblRva2VuLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3
dGYvRmFzdFRMUy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM5LDcgKzQzLDcg
QEAgY2xhc3MgVGhyZWFkTG9jYWxDYWNoZSA6IHB1YmxpYyBUaHJlYWRTYQogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogICAgIAogcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8VGhyZWFk
TG9jYWxDYWNoZT4gY3JlYXRlKEhlYXAmKTsKKyAgICBzdGF0aWMgUmVmUHRyPFRocmVhZExvY2Fs
Q2FjaGU+IGNyZWF0ZShIZWFwJiwgU2VjdXJpdHlPcmlnaW5Ub2tlbiA9IHVuaXF1ZVNlY3VyaXR5
T3JpZ2luVG9rZW4oKSk7CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgflRocmVhZExvY2Fs
Q2FjaGUoKTsKIApAQCAtNDksNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgLy8gb3B0aW1pemluZyBm
b3IgdGhlIGNhc2UgdGhhdCB5b3UncmUganVzdCBpbnN0YWxsaW5nIHRoZSBjYWNoZSB0aGF0IGlz
IGFscmVhZHkgaW5zdGFsbGVkLiBUaGlzCiAgICAgLy8gYXNzdW1lcyBhIHJlbGF0aXZlbHkgc21h
bGwgbnVtYmVyIG9mIGNhY2hlcyBvciBsb3cgY2hhbmNlIG9mIGFjdHVhbCBjb250ZXh0IHN3aXRj
aCBjb21iaW5lZAogICAgIC8vIHdpdGggcG9zc2libHkgaGlnaCByYXRlIG9mICJJIG1heSBoYXZl
IGNvbnRleHQgc3dpdGNoZWQiIHNpdGVzIHRoYXQgY2FsbCB0aGlzIG91dCBvZiBwYXJhbm9pYS4K
LSAgICB2b2lkIGluc3RhbGwoVk0mKTsKKyAgICB2b2lkIGluc3RhbGwoVk0mLCBSZWZQdHI8VGhy
ZWFkTG9jYWxDYWNoZT4qID0gbnVsbHB0cik7CiAgICAgCiAgICAgc3RhdGljIExvY2FsQWxsb2Nh
dG9yJiBhbGxvY2F0b3IoVk0mLCBzaXplX3Qgb2Zmc2V0KTsKICAgICAKQEAgLTU5LDEwICs2Mywx
MiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNpemVJbkRhdGEoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRGF0YSwgc2l6ZSk7IH0KICAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mRmlyc3RBbGxvY2F0b3JJbkRhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoRGF0YSwgYWxsb2NhdG9yKTsgfQogICAgIAorICAgIFNlY3VyaXR5T3JpZ2luVG9rZW4gc2Vj
dXJpdHlPcmlnaW5Ub2tlbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VjdXJpdHlPcmlnaW5Ub2tlbjsg
fQorICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgVk07CiAgICAgCi0gICAgVGhyZWFk
TG9jYWxDYWNoZShIZWFwJik7CisgICAgVGhyZWFkTG9jYWxDYWNoZShIZWFwJiwgU2VjdXJpdHlP
cmlnaW5Ub2tlbik7CiAgICAgCiAgICAgc3RydWN0IERhdGEgewogICAgICAgICBzaXplX3Qgc2l6
ZTsKQEAgLTc2LDcgKzgyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRlc3Ryb3lEYXRhKERhdGEq
KTsKICAgICBzdGF0aWMgTG9jYWxBbGxvY2F0b3ImIGFsbG9jYXRvcihEYXRhJiBkYXRhLCBzaXpl
X3Qgb2Zmc2V0KTsKIAotICAgIHZvaWQgaW5zdGFsbFNsb3coVk0mKTsKKyAgICB2b2lkIGluc3Rh
bGxTbG93KFZNJiwgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+Kik7CiAgICAgc3RhdGljIHZvaWQg
aW5zdGFsbERhdGEoVk0mLCBEYXRhKik7CiAgICAgCiAgICAgTG9jYWxBbGxvY2F0b3ImIGFsbG9j
YXRvclNsb3coVk0mLCBzaXplX3Qgb2Zmc2V0KTsKQEAgLTkxLDYgKzk3LDggQEAgcHJpdmF0ZToK
ICAgICAvLyBpdCdzIGNvcnJlY3QgZm9yIGltbW9ydGFsIGNhY2hlcy4KICAgICBIZWFwJiBtX2hl
YXA7CiAgICAgRGF0YSogbV9kYXRhIHsgbnVsbHB0ciB9OworICAgIAorICAgIFNlY3VyaXR5T3Jp
Z2luVG9rZW4gbV9zZWN1cml0eU9yaWdpblRva2VuOwogCiAjaWYgVVNFKEZBU1RfVExTX0ZPUl9U
TEMpCiAgICAgc3RhdGljIGNvbnN0IHB0aHJlYWRfa2V5X3QgdGxzS2V5ID0gV1RGX0dDX1RMQ19L
RVk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExv
Y2FsQ2FjaGVJbmxpbmVzLmgJKHJldmlzaW9uIDIyNzcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZS5o
IgorI2luY2x1ZGUgIlZNLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00NywxMSArNDgsMTQg
QEAgaW5saW5lIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBUaHJlYWRMbwogICAgIHJldHVybiBu
dWxscHRyOwogfQogCi1pbmxpbmUgdm9pZCBUaHJlYWRMb2NhbENhY2hlOjppbnN0YWxsKFZNJiB2
bSkKK2lubGluZSB2b2lkIFRocmVhZExvY2FsQ2FjaGU6Omluc3RhbGwoVk0mIHZtLCBSZWZQdHI8
VGhyZWFkTG9jYWxDYWNoZT4qIHByZXZpb3VzKQogewotICAgIGlmIChnZXRJbXBsKHZtKSA9PSBt
X2RhdGEpCisgICAgaWYgKGdldEltcGwodm0pID09IG1fZGF0YSkgeworICAgICAgICBpZiAocHJl
dmlvdXMpCisgICAgICAgICAgICAqcHJldmlvdXMgPSBudWxscHRyOwogICAgICAgICByZXR1cm47
Ci0gICAgaW5zdGFsbFNsb3codm0pOworICAgIH0KKyAgICBpbnN0YWxsU2xvdyh2bSwgcHJldmlv
dXMpOwogfQogCiBpbmxpbmUgTG9jYWxBbGxvY2F0b3ImIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9j
YXRvcihWTSYgdm0sIHNpemVfdCBvZmZzZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyMjc3MjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzNSw3ICszMzUsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBlbnF1CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
IAotSlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiBnbG9iYWxPYmplY3RNZXRob2RU
YWJsZSwgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IHRocmVhZExvY2FsQ2FjaGUpCitKU0dsb2Jh
bE9iamVjdDo6SlNHbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29u
c3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqIGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQogICAg
IDogQmFzZSh2bSwgc3RydWN0dXJlLCAwKQogICAgICwgbV92bSh2bSkKICAgICAsIG1fbWFzcXVl
cmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQoYWRvcHRSZWYobmV3IFdhdGNocG9pbnRTZXQoSXNX
YXRjaGVkKSkpCkBAIC0zNTMsNyArMzUzLDYgQEAgSlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2Jq
ZWN0KFZNJiB2bSwgUwogICAgICwgbV90ZW1wbGF0ZVJlZ2lzdHJ5KHZtKQogICAgICwgbV9ydW50
aW1lRmxhZ3MoKQogICAgICwgbV9nbG9iYWxPYmplY3RNZXRob2RUYWJsZShnbG9iYWxPYmplY3RN
ZXRob2RUYWJsZSA/IGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIDogJnNfZ2xvYmFsT2JqZWN0TWV0
aG9kVGFibGUpCi0gICAgLCBtX3RocmVhZExvY2FsQ2FjaGUodGhyZWFkTG9jYWxDYWNoZSA/IFdU
Rk1vdmUodGhyZWFkTG9jYWxDYWNoZSkgOiB2bS5kZWZhdWx0VGhyZWFkTG9jYWxDYWNoZSkKIHsK
IH0KIApAQCAtMTU4OSw0ICsxNTg4LDkgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6ZmluaXNoQ3Jl
YXRpb24oVk0mIAogICAgIHNldEdsb2JhbFRoaXModm0sIHRoaXNWYWx1ZSk7CiB9CiAKK3ZvaWQg
SlNHbG9iYWxPYmplY3Q6OmNyZWF0ZVRocmVhZExvY2FsQ2FjaGUoKQoreworICAgIG1fdGhyZWFk
TG9jYWxDYWNoZSA9IFRocmVhZExvY2FsQ2FjaGU6OmNyZWF0ZSh2bSgpLmhlYXApOworfQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjI3NzIwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDkxLDcg
KzQ5MSw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBSdW50aW1lRmxhZ3MmIHJ1bnRpbWVGbGFncygp
IGNvbnN0IHsgcmV0dXJuIG1fcnVudGltZUZsYWdzOyB9CiAKIHByb3RlY3RlZDoKLSAgICBKU19F
WFBPUlRfUFJJVkFURSBleHBsaWNpdCBKU0dsb2JhbE9iamVjdChWTSYsIFN0cnVjdHVyZSosIGNv
bnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiA9IDAsIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hl
PiA9IG51bGxwdHIpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIGV4cGxpY2l0IEpTR2xvYmFsT2Jq
ZWN0KFZNJiwgU3RydWN0dXJlKiwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqID0gMCk7
CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAKQEAg
LTg5NCw3ICs4OTQsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0V3JhcHBlck1hcChKU1dyYXBw
ZXJNYXAqIG1hcCkgeyBtX3dyYXBwZXJNYXAgPSBtYXA7IH0KICNlbmRpZgogICAgIAotICAgIFRo
cmVhZExvY2FsQ2FjaGUmIHRocmVhZExvY2FsQ2FjaGUoKSBjb25zdCB7IHJldHVybiAqbV90aHJl
YWRMb2NhbENhY2hlLmdldCgpOyB9CisgICAgVGhyZWFkTG9jYWxDYWNoZSYgdGhyZWFkTG9jYWxD
YWNoZSgpCisgICAgeworICAgICAgICBpZiAoIW1fdGhyZWFkTG9jYWxDYWNoZSkKKyAgICAgICAg
ICAgIGNyZWF0ZVRocmVhZExvY2FsQ2FjaGUoKTsKKyAgICAgICAgcmV0dXJuICptX3RocmVhZExv
Y2FsQ2FjaGUuZ2V0KCk7CisgICAgfQogCiBwcm90ZWN0ZWQ6CiAgICAgc3RydWN0IEdsb2JhbFBy
b3BlcnR5SW5mbyB7CkBAIC05MTcsNiArOTIyLDggQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgdm9pZCBzZXRHbG9iYWxUaGlzKFZNJiwg
SlNPYmplY3QqIGdsb2JhbFRoaXMpOworICAgIAorICAgIHZvaWQgY3JlYXRlVGhyZWFkTG9jYWxD
YWNoZSgpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0KFZNJik7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcAkocmV2
aXNpb24gMjI3NzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNj
b3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBWTUVudHJ5U2NvcGU6OlZN
RW50cnlTY29wZShWTSYgdm0sIEpTR2xvCiAgICAgOiBtX3ZtKHZtKQogICAgICwgbV9nbG9iYWxP
YmplY3QoZ2xvYmFsT2JqZWN0KQogewotICAgIGdsb2JhbE9iamVjdC0+dGhyZWFkTG9jYWxDYWNo
ZSgpLmluc3RhbGwodm0pOworICAgIGdsb2JhbE9iamVjdC0+dGhyZWFkTG9jYWxDYWNoZSgpLmlu
c3RhbGwodm0sICZtX3ByZXZpb3VzVExDKTsKICAgICBBU1NFUlQoIURpc2FsbG93Vk1SZWVudHJ5
Ojppc0luRWZmZWN0T25DdXJyZW50VGhyZWFkKCkpOwogICAgIEFTU0VSVChUaHJlYWQ6OmN1cnJl
bnQoKS5zdGFjaygpLmlzR3Jvd2luZ0Rvd253YXJkKCkpOwogICAgIGlmICghdm0uZW50cnlTY29w
ZSkgewpAQCAtNzEsMTEgKzcxLDE0IEBAIHZvaWQgVk1FbnRyeVNjb3BlOjphZGREaWRQb3BMaXN0
ZW5lcihzdGQKIAogVk1FbnRyeVNjb3BlOjp+Vk1FbnRyeVNjb3BlKCkKIHsKKyAgICBpZiAobV9w
cmV2aW91c1RMQykKKyAgICAgICAgbV9wcmV2aW91c1RMQy0+aW5zdGFsbChtX3ZtKTsKKyAgICAK
ICAgICBpZiAobV92bS5lbnRyeVNjb3BlICE9IHRoaXMpCiAgICAgICAgIHJldHVybjsKIAogICAg
IFRyYWNlUG9pbnQoVk1FbnRyeVNjb3BlRW5kKTsKLQorICAgIAogICAgIGlmIChtX3ZtLndhdGNo
ZG9nKCkpCiAgICAgICAgIG1fdm0ud2F0Y2hkb2coKS0+ZXhpdGVkVk0oKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNjb3BlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNjb3BlLmgJKHJldmlzaW9uIDIy
NzcyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
SlNHbG9iYWxPYmplY3Q7CitjbGFzcyBUaHJlYWRMb2NhbENhY2hlOwogY2xhc3MgVk07CiAKIGNs
YXNzIFZNRW50cnlTY29wZSB7CkBAIC00Nyw2ICs0OCw3IEBAIHByaXZhdGU6CiAgICAgVk0mIG1f
dm07CiAgICAgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0OwogICAgIFZlY3RvcjxzdGQ6
OmZ1bmN0aW9uPHZvaWQgKCk+PiBtX2RpZFBvcExpc3RlbmVyczsKKyAgICBSZWZQdHI8VGhyZWFk
TG9jYWxDYWNoZT4gbV9wcmV2aW91c1RMQzsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>332588</attachid>
            <date>2018-01-29 15:22:19 -0800</date>
            <delta_ts>2018-01-30 10:25:55 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>35343</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI3NzM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBA
CisyMDE4LTAxLTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R2xvYmFsIG9iamVjdHMgc2hvdWxkIGJlIGFibGUgdG8gdXNlIFRMQ3MgdG8gYWxsb2NhdGUgZnJv
bSBkaWZmZXJlbnQgYmxvY2tzIGZyb20gZWFjaCBvdGhlcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgyMjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIHVzZXMgVExDcyB0byBjcmVh
dGUgYXQgbGVhc3QgYG1pbmltdW1EaXN0YW5jZUJldHdlZW5DZWxsc0Zyb21EaWZmZXJlbk9yaWdp
bnNgIGJ5dGVzIG9mCisgICAgICAgIGRpc3RhbmNlIGJldHdlZW4gb2JqZWN0cyBmcm9tIGRpZmZl
cmVudCBvcmlnaW5zLCB1c2luZyB0aGUgZm9sbG93aW5nIGNvbWJpbmF0aW9uIG9mIHRoaW5ncy4g
Rm9yCisgICAgICAgIHNob3J0IGxldHMgcmVmZXIgdG8gdGhhdCBjb25zdGFudCBhcyBLLgorICAg
ICAgICAKKyAgICAgICAgLSBTaW5jZSByMjI3NzIxLCBMYXJnZUFsbG9jYXRpb24gcHV0cyBLIGJ5
dGVzIHBhZGRpbmcgYXQgdGhlIGVuZCBvZiBlYWNoIGFsbG9jYXRpb24uCisgICAgICAgIAorICAg
ICAgICAtIFNpbmNlIHIyMjc3MTgsIE1hcmtlZEJsb2NrIHB1dHMgYXQgbGVhc3QgSyBieXRlcyBp
biBpdHMgZm9vdGVyLgorICAgICAgICAKKyAgICAgICAgLSBTaW5jZSByMjI3NjE3LCBnbG9iYWwg
b2JqZWN0cyBjYW4gaGF2ZSB0aGVpciBvd24gVExDcywgd2hpY2ggbWFrZSB0aGVtIGFsbG9jYXRl
IGZyb20gYQorICAgICAgICAgIGRpZmZlcmVudCBzZXQgb2YgYmxvY2tzIHRoYW4gb3RoZXIgZ2xv
YmFsIG9iamVjdHMuIFRoZSBUTEMgb2YgYSBnbG9iYWwgb2JqZWN0IGNvbWVzIGludG8KKyAgICAg
ICAgICBlZmZlY3Qgd2hlbiB5b3UgZW50ZXIgdGhlIFZNIHZpYSB0aGF0IGdsb2JhbCBvYmplY3Qu
CisgICAgICAgIAorICAgICAgICAtIFdpdGggdGhpcyBjaGFuZ2UsIFRMQ3MgYW5kIGJsb2NrcyBi
b3RoIGhhdmUgc2VjdXJpdHkgb3JpZ2lucy4gQSBUTEMgd2lsbCBvbmx5IHVzZSBibG9ja3MgdGhh
dAorICAgICAgICAgIHNoYXJlIHRoZSBzYW1lIHNlY3VyaXR5IG9yaWdpbiBvciBlbXB0eSBibG9j
a3MgKGluIHdoaWNoIGNhc2Ugd2UgemVybyB0aGUgYmxvY2sgYW5kIGNoYW5nZQorICAgICAgICAg
IGl0cyBzZWN1cml0eSBvcmlnaW4pLgorICAgICAgICAKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAg
ICAgICAqIGhlYXAvQmxvY2tEaXJlY3RvcnkuY3BwOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVj
dG9yeTo6ZmluZEJsb2NrRm9yQWxsb2NhdGlvbik6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0
b3J5OjpwcmVwYXJlRm9yQWxsb2NhdGlvbik6CisgICAgICAgICogaGVhcC9CbG9ja0RpcmVjdG9y
eS5oOgorICAgICAgICAqIGhlYXAvTG9jYWxBbGxvY2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpM
b2NhbEFsbG9jYXRvcjo6TG9jYWxBbGxvY2F0b3IpOgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9j
YXRvcjo6cmVzZXQpOgorICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6fkxvY2FsQWxsb2Nh
dG9yKToKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UpOgor
ICAgICAgICAoSlNDOjpMb2NhbEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGlu
Zyk6CisgICAgICAgICogaGVhcC9Mb2NhbEFsbG9jYXRvci5oOgorICAgICAgICAoSlNDOjpMb2Nh
bEFsbG9jYXRvcjo6dGxjIGNvbnN0KToKKyAgICAgICAgKiBoZWFwL01hcmtTdGFja01lcmdpbmdD
b25zdHJhaW50LmNwcDoKKyAgICAgICAgKiBoZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50
Lmg6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtl
ZEJsb2NrOjpIYW5kbGU6OmFzc29jaWF0ZVdpdGhPcmlnaW4pOgorICAgICAgICAqIGhlYXAvTWFy
a2VkQmxvY2suaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6c2VjdXJpdHlP
cmlnaW5Ub2tlbiBjb25zdCk6CisgICAgICAgICogaGVhcC9TZWN1cml0eU9yaWdpblRva2VuLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OnVuaXF1ZVNlY3VyaXR5T3JpZ2luVG9rZW4pOgorICAg
ICAgICAqIGhlYXAvU2VjdXJpdHlPcmlnaW5Ub2tlbi5oOiBBZGRlZC4KKyAgICAgICAgKiBoZWFw
L1RocmVhZExvY2FsQ2FjaGUuY3BwOgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlOjpj
cmVhdGUpOgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlOjpUaHJlYWRMb2NhbENhY2hl
KToKKyAgICAgICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6YWxsb2NhdGVEYXRhKToKKyAgICAg
ICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFsbFNsb3cpOgorICAgICAgICAqIGhlYXAv
VGhyZWFkTG9jYWxDYWNoZS5oOgorICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlOjpzZWN1
cml0eU9yaWdpblRva2VuIGNvbnN0KToKKyAgICAgICAgKiBoZWFwL1RocmVhZExvY2FsQ2FjaGVJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGU6Omluc3RhbGwpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6SlNHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6
Y3JlYXRlVGhyZWFkTG9jYWxDYWNoZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6dGhyZWFkTG9jYWxDYWNoZSk6Cisg
ICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp0aHJlYWRMb2NhbENhY2hlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1ZNRW50cnlTY29wZS5jcHA6CisgICAgICAgIChKU0M6
OlZNRW50cnlTY29wZTo6Vk1FbnRyeVNjb3BlKToKKyAgICAgICAgKEpTQzo6Vk1FbnRyeVNjb3Bl
Ojp+Vk1FbnRyeVNjb3BlKToKKyAgICAgICAgKiBydW50aW1lL1ZNRW50cnlTY29wZS5oOgorCiAy
MDE4LTAxLTI5ICBNYXR0IExld2lzICA8amxld2lzM0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIyNzcyNS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQJKHJldmlzaW9uIDIyNzczOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLS8vIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTct
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLwogLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAv
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTUxMiw2ICs1MTIsNyBAQCBoZWFwL01hcmtpbmdDb25zdHJhaW50U2V0
LmNwcAogaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHAKIGhlYXAvTXV0YXRvclNjaGVk
dWxlci5jcHAKIGhlYXAvTXV0YXRvclN0YXRlLmNwcAoraGVhcC9TZWN1cml0eU9yaWdpblRva2Vu
LmNwcAogaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKIGhlYXAvU2xvdFZpc2l0b3Iu
Y3BwCiBoZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjI3NzM4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTI5NCw2ICsyOTQsNyBAQAogCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFs
dWVSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0OTE0NjBDQkI3
MDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJl
Z2lzdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY0MjZBNEIxNDYwQ0Q2RTAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTRBMTQ2MENENkIwMDEzMUY4
RiAvKiBEYXRhRm9ybWF0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEY0MkIzQzMyMDFFQzlGRjAwMzU3MDMxIC8qIFNlY3VyaXR5T3JpZ2luVG9r
ZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDJC
M0MyMjAxRUM5RkQwMDM1NzAzMSAvKiBTZWN1cml0eU9yaWdpblRva2VuLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MzE3MzgxNDZCQUM2OTAw
N0UzODkwIC8qIExpc3RhYmxlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0MzE3MzYxNDZCQUM2NTAwN0UzODkwIC8qIExpc3RhYmxlSGFu
ZGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNDU3MDM5MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NTcwMzcxQkU0NEM5
MTAwNjJBNjI5IC8qIEFpckVsaW1pbmF0ZURlYWRDb2RlLmggKi87IH07CiAJCTBGNDU3MDNEMUJF
NDVGMEEwMDYyQTYyOSAvKiBBaXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ1NzAzQjFCRTQ1RjBBMDA2MkE2Mjkg
LyogQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5oICovOyB9OwpAQCAtMjI2Miw2ICsyMjYzLDggQEAK
IAkJMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpcnR1YWxSZWdpc3Rlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyog
RGF0YUZvcm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhRm9ybWF0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDJCM0MwMjAxRUI1MDkwMDM1NzAz
MSAvKiBBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
QWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0MkIzQzIyMDFF
QzlGRDAwMzU3MDMxIC8qIFNlY3VyaXR5T3JpZ2luVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2VjdXJpdHlPcmlnaW5Ub2tlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjQzMTczNjE0NkJBQzY1MDA3RTM4OTAgLyogTGlzdGFibGVIYW5kbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpc3RhYmxlSGFuZGxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ1NzAzNjFCRTQ0QzkxMDA2MkE2MjkgLyogQWly
RWxpbWluYXRlRGVhZENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQWlyRWxpbWluYXRlRGVhZENvZGUuY3BwOyBwYXRoID0gYjMvYWlyL0FpckVsaW1pbmF0ZURl
YWRDb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0NTcwMzcxQkU0NEM5
MTAwNjJBNjI5IC8qIEFpckVsaW1pbmF0ZURlYWRDb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEFpckVsaW1pbmF0ZURlYWRDb2RlLmg7IHBhdGggPSBiMy9haXIvQWlyRWxp
bWluYXRlRGVhZENvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1NTksMjEg
KzU1NjIsMTQgQEAKIAkJMTQyRTMxMkExMzRGRjBBNjAwQUZBREI1IC8qIGhlYXAgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTBGNzVBMDU0MjAwRDI1RUYw
MDM4RTJDRiAvKiBBbGxvY2F0b3IuaCAqLywKLQkJCQkwRjc1QTA1RDIwMEQyNUYxMDAzOEUyQ0Yg
LyogQWxsb2NhdG9ySW5saW5lcy5oICovLAotCQkJCTBGNzVBMDU5MjAwRDI1RjAwMDM4RTJDRiAv
KiBMb2NhbEFsbG9jYXRvci5jcHAgKi8sCi0JCQkJMEY3NUEwNTcyMDBEMjVGMDAwMzhFMkNGIC8q
IExvY2FsQWxsb2NhdG9yLmggKi8sCi0JCQkJMEY3NUEwNUEyMDBEMjVGMDAwMzhFMkNGIC8qIExv
Y2FsQWxsb2NhdG9ySW5saW5lcy5oICovLAotCQkJCTBGNzVBMDU4MjAwRDI1RjAwMDM4RTJDRiAv
KiBUaHJlYWRMb2NhbENhY2hlLmNwcCAqLywKLQkJCQkwRjc1QTA1NTIwMEQyNUVGMDAzOEUyQ0Yg
LyogVGhyZWFkTG9jYWxDYWNoZS5oICovLAotCQkJCTBGNzVBMDU2MjAwRDI1RUYwMDM4RTJDRiAv
KiBUaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oICovLAotCQkJCTBGNzVBMDVCMjAwRDI1RjEwMDM4
RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlTGF5b3V0LmNwcCAqLywKLQkJCQkwRjc1QTA1QzIwMEQy
NUYxMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oICovLAogCQkJCTBGRUMzQzUw
MUYzM0E0MTYwMEY1OUI2QyAvKiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNwcCAqLywKIAkJCQkw
RkVDM0M1MTFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovLAog
CQkJCTBGQTc2MjBBMURCOTU5RjYwMEI3QTJGRCAvKiBBbGxvY2F0aW5nU2NvcGUuaCAqLywKIAkJ
CQkwRkRDRTExQjFGQUU2MUY0MDA2RjM5MDEgLyogQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmggKi8s
CisJCQkJMEY0MkIzQzAyMDFFQjUwOTAwMzU3MDMxIC8qIEFsbG9jYXRvci5jcHAgKi8sCisJCQkJ
MEY3NUEwNTQyMDBEMjVFRjAwMzhFMkNGIC8qIEFsbG9jYXRvci5oICovLAogCQkJCTBGMzBDQjVE
MUZDRTQ2QjQwMDRCNTMyMyAvKiBBbGxvY2F0b3JGb3JNb2RlLmggKi8sCisJCQkJMEY3NUEwNUQy
MDBEMjVGMTAwMzhFMkNGIC8qIEFsbG9jYXRvcklubGluZXMuaCAqLywKIAkJCQkwRkI0Njc3RTFG
RERBNkU1MDAzRkNCMDkgLyogQXRvbUluZGljZXMuaCAqLywKIAkJCQlDMkI5MTZDNDE0REEwNDBD
MDBDQkFDODYgLyogQmxvY2tEaXJlY3RvcnkuY3BwICovLAogCQkJCUMyQjkxNkMxMTREQTAxNEUw
MENCQUM4NiAvKiBCbG9ja0RpcmVjdG9yeS5oICovLApAQCAtNTY3NCw2ICs1NjcwLDkgQEAKIAkJ
CQkwRjA3MEE0NTFENTQzQTg5MDA2RTcyMzIgLyogTGFyZ2VBbGxvY2F0aW9uLmNwcCAqLywKIAkJ
CQkwRjA3MEE0NjFENTQzQTg5MDA2RTcyMzIgLyogTGFyZ2VBbGxvY2F0aW9uLmggKi8sCiAJCQkJ
MEY0MzE3MzYxNDZCQUM2NTAwN0UzODkwIC8qIExpc3RhYmxlSGFuZGxlci5oICovLAorCQkJCTBG
NzVBMDU5MjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5jcHAgKi8sCisJCQkJMEY3
NUEwNTcyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9yLmggKi8sCisJCQkJMEY3NUEw
NUEyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9ySW5saW5lcy5oICovLAogCQkJCTBG
MjA4QUQ2MURGMDkyNUEwMDdEMzI2OSAvKiBMb2NrRHVyaW5nTWFya2luZy5oICovLAogCQkJCTE0
QjcyMzNGMTJEN0QwREEwMDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJrZXIuY3BwICovLAogCQkJ
CTE0QjcyMzQwMTJEN0QwREEwMDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJrZXIuaCAqLywKQEAg
LTU3MDMsNiArNTcwMiw3IEBACiAJCQkJMEZEMEU1RUYxRTQ2QkYyMzAwMDZBQjA4IC8qIFJlZ2lz
dGVyU3RhdGUuaCAqLywKIAkJCQkwRjdDRjk0RTFEQkVFRTg2MDA5OENDMTIgLyogUmVsZWFzZUhl
YXBBY2Nlc3NTY29wZS5oICovLAogCQkJCTBGMkM2M0E5MUU0RkE0MkMwMEMxMzgzOSAvKiBSdW5u
aW5nU2NvcGUuaCAqLywKKwkJCQkwRjQyQjNDMjIwMUVDOUZEMDAzNTcwMzEgLyogU2VjdXJpdHlP
cmlnaW5Ub2tlbi5oICovLAogCQkJCTBGNEQ4Qzc2MUZDQTNDRjIwMDFEMzJBQyAvKiBTaW1wbGVN
YXJraW5nQ29uc3RyYWludC5jcHAgKi8sCiAJCQkJMEY0RDhDNzcxRkNBM0NGMzAwMUQzMkFDIC8q
IFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggKi8sCiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAwNjVF
ODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKQEAgLTU3MjQsNiArNTcyNCwxMSBAQAogCQkJCTBG
RDc5QTJDMUVCQkJEQjIwMERBODhEMyAvKiBTeW5jaHJvbm91c25lc3MuaCAqLywKIAkJCQkwRjFG
QjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2No
ZWR1bGVyLmNwcCAqLywKIAkJCQkwRjFGQjM4QjFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25v
dXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggKi8sCisJCQkJMEY3NUEwNTgyMDBEMjVG
MDAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGUuY3BwICovLAorCQkJCTBGNzVBMDU1MjAwRDI1
RUYwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlLmggKi8sCisJCQkJMEY3NUEwNTYyMDBEMjVF
RjAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmggKi8sCisJCQkJMEY3NUEwNUIy
MDBEMjVGMTAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQuY3BwICovLAorCQkJCTBG
NzVBMDVDMjAwRDI1RjEwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlTGF5b3V0LmggKi8sCiAJ
CQkJMTQxNDQ4Q0MxM0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5oICovLAogCQkJ
CTBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmluYWxpemVyLmggKi8s
CiAJCQkJMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0Q291bnRlci5oICovLApAQCAt
ODUyMiw2ICs4NTI3LDcgQEAKIAkJCQkwRjdDMzlGRjFDOTBDNTVCMDA0ODAxNTEgLyogREZHT3BJ
bmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGRTE3QTBCOENDMDA3NzNBRDggLyogREZH
T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODJF
NTcxNDFEQUYxMDAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjQyQjNDMzIwMUVDOUZGMDAzNTcwMzEgLyogU2VjdXJpdHlPcmlnaW5Ub2tlbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZEOEEzMjYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRD
cmVhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMwOTc2QTE0NjhBNkY3MDBDRjI0
NDIgLyogREZHT1NSRXhpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAw
NjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5jcHAJKHJldmlzaW9uIDIyNzcz
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNp
bmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIK
KyNpbmNsdWRlICJUaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oIgogI2luY2x1ZGUgIlZNLmgiCiAj
aW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKQEAgLTgwLDE0ICs4MSwyMCBAQCBNYXJrZWRC
bG9jazo6SGFuZGxlKiBCbG9ja0RpcmVjdG9yeTo6ZmluCiAgICAgcmV0dXJuIG1fYmxvY2tzW21f
ZW1wdHlDdXJzb3JdOwogfQogCi1NYXJrZWRCbG9jazo6SGFuZGxlKiBCbG9ja0RpcmVjdG9yeTo6
ZmluZEJsb2NrRm9yQWxsb2NhdGlvbigpCitNYXJrZWRCbG9jazo6SGFuZGxlKiBCbG9ja0RpcmVj
dG9yeTo6ZmluZEJsb2NrRm9yQWxsb2NhdGlvbihMb2NhbEFsbG9jYXRvciYgYWxsb2NhdG9yKQog
ewotICAgIG1fYWxsb2NhdGlvbkN1cnNvciA9IChtX2NhbkFsbG9jYXRlQnV0Tm90RW1wdHkgfCBt
X2VtcHR5KS5maW5kQml0KG1fYWxsb2NhdGlvbkN1cnNvciwgdHJ1ZSk7Ci0gICAgaWYgKG1fYWxs
b2NhdGlvbkN1cnNvciA+PSBtX2Jsb2Nrcy5zaXplKCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIAotICAgIHNldElzQ2FuQWxsb2NhdGVCdXROb3RFbXB0eShOb0xvY2tpbmdOZWNlc3Nh
cnksIG1fYWxsb2NhdGlvbkN1cnNvciwgZmFsc2UpOwotICAgIHJldHVybiBtX2Jsb2Nrc1ttX2Fs
bG9jYXRpb25DdXJzb3JdOworICAgIGZvciAoOzspIHsKKyAgICAgICAgYWxsb2NhdG9yLm1fYWxs
b2NhdGlvbkN1cnNvciA9IChtX2NhbkFsbG9jYXRlQnV0Tm90RW1wdHkgfCBtX2VtcHR5KS5maW5k
Qml0KGFsbG9jYXRvci5tX2FsbG9jYXRpb25DdXJzb3IsIHRydWUpOworICAgICAgICBpZiAoYWxs
b2NhdG9yLm1fYWxsb2NhdGlvbkN1cnNvciA+PSBtX2Jsb2Nrcy5zaXplKCkpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBibG9ja0luZGV4ID0g
YWxsb2NhdG9yLm1fYWxsb2NhdGlvbkN1cnNvcisrOworICAgICAgICBNYXJrZWRCbG9jazo6SGFu
ZGxlKiByZXN1bHQgPSBtX2Jsb2Nrc1tibG9ja0luZGV4XTsKKyAgICAgICAgaWYgKHJlc3VsdC0+
c2VjdXJpdHlPcmlnaW5Ub2tlbigpID09IGFsbG9jYXRvci50bGMoKS0+c2VjdXJpdHlPcmlnaW5U
b2tlbigpKSB7CisgICAgICAgICAgICBzZXRJc0NhbkFsbG9jYXRlQnV0Tm90RW1wdHkoTm9Mb2Nr
aW5nTmVjZXNzYXJ5LCBibG9ja0luZGV4LCBmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICB9CisgICAgfQogfQogCiBNYXJrZWRCbG9jazo6SGFuZGxlKiBCbG9ja0Rp
cmVjdG9yeTo6dHJ5QWxsb2NhdGVCbG9jaygpCkBAIC0xODMsOCArMTkwLDYgQEAgdm9pZCBCbG9j
a0RpcmVjdG9yeTo6cHJlcGFyZUZvckFsbG9jYXRpbwogICAgICAgICAgICAgYWxsb2NhdG9yLT5w
cmVwYXJlRm9yQWxsb2NhdGlvbigpOwogICAgICAgICB9KTsKICAgICAKLSAgICBtX2FsbG9jYXRp
b25DdXJzb3IgPSAwOwotICAgIG1fZW1wdHlDdXJzb3IgPSAwOwogICAgIG1fdW5zd2VwdEN1cnNv
ciA9IDA7CiAgICAgCiAgICAgbV9lZGVuLmNsZWFyQWxsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmgJKHJldmlzaW9uIDIyNzczOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDYgKzQzLDcgQEAgY2xhc3MgSGVhcDsKIGNsYXNzIElzb0NlbGxTZXQ7CiBjbGFzcyBN
YXJrZWRTcGFjZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKK2NsYXNzIFRocmVhZExv
Y2FsQ2FjaGU7CiBjbGFzcyBUaHJlYWRMb2NhbENhY2hlTGF5b3V0OwogCiAjZGVmaW5lIEZPUl9F
QUNIX0JMT0NLX0RJUkVDVE9SWV9CSVQobWFjcm8pIFwKQEAgLTE2MiwxMiArMTYzLDEzIEBAIHB1
YmxpYzoKICAgICB2b2lkIGR1bXBCaXRzKFByaW50U3RyZWFtJiA9IFdURjo6ZGF0YUZpbGUoKSk7
CiAgICAgCiBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBMb2NhbEFsbG9jYXRvcjsKICAgICBm
cmllbmQgY2xhc3MgSXNvQ2VsbFNldDsKKyAgICBmcmllbmQgY2xhc3MgTG9jYWxBbGxvY2F0b3I7
CisgICAgZnJpZW5kIGNsYXNzIExvY2FsU2lkZUFsbG9jYXRvcjsKICAgICBmcmllbmQgY2xhc3Mg
TWFya2VkQmxvY2s7CiAgICAgZnJpZW5kIGNsYXNzIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ7CiAg
ICAgCi0gICAgTWFya2VkQmxvY2s6OkhhbmRsZSogZmluZEJsb2NrRm9yQWxsb2NhdGlvbigpOwor
ICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGZpbmRCbG9ja0ZvckFsbG9jYXRpb24oTG9jYWxBbGxv
Y2F0b3ImKTsKICAgICAKICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiB0cnlBbGxvY2F0ZUJsb2Nr
KCk7CiAgICAgCkBAIC0xODQsOCArMTg2LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICAvLyBBZnRl
ciB5b3UgZG8gc29tZXRoaW5nIHRvIGEgYmxvY2sgYmFzZWQgb24gb25lIG9mIHRoZXNlIGN1cnNv
cnMsIHlvdSBjbGVhciB0aGUgYml0IGluIHRoZQogICAgIC8vIGNvcnJlc3BvbmRpbmcgYml0dmVj
dG9yIGFuZCBsZWF2ZSB0aGUgY3Vyc29yIHdoZXJlIGl0IHdhcy4KLSAgICBzaXplX3QgbV9hbGxv
Y2F0aW9uQ3Vyc29yIHsgMCB9OyAvLyBQb2ludHMgdG8gdGhlIG5leHQgYmxvY2sgdGhhdCBpcyBh
IGNhbmRpZGF0ZSBmb3IgYWxsb2NhdGlvbi4KLSAgICBzaXplX3QgbV9lbXB0eUN1cnNvciB7IDAg
fTsgLy8gUG9pbnRzIHRvIHRoZSBuZXh0IGJsb2NrIHRoYXQgaXMgYSBjYW5kaWRhdGUgZm9yIGVt
cHR5IGFsbG9jYXRpb24gKGFsbG9jYXRpbmcgaW4gZW1wdHkgYmxvY2tzKS4KKyAgICBzaXplX3Qg
bV9lbXB0eUN1cnNvciB7IDAgfTsKICAgICBzaXplX3QgbV91bnN3ZXB0Q3Vyc29yIHsgMCB9OyAv
LyBQb2ludHMgdG8gdGhlIG5leHQgYmxvY2sgdGhhdCBpcyBhIGNhbmRpZGF0ZSBmb3IgaW5jcmVt
ZW50YWwgc3dlZXBpbmcuCiAgICAgCiAgICAgdW5zaWduZWQgbV9jZWxsU2l6ZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAJKHJldmlzaW9u
IDIyNzczOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
TG9jYWxBbGxvY2F0b3I6OkxvY2FsQWxsb2NhdG9yKEJsb2NrRGlyZWN0b3J5KiBkaXJlY3Rvcnkp
Ci0gICAgOiBtX2RpcmVjdG9yeShkaXJlY3RvcnkpCitMb2NhbEFsbG9jYXRvcjo6TG9jYWxBbGxv
Y2F0b3IoVGhyZWFkTG9jYWxDYWNoZSogdGxjLCBCbG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5KQor
ICAgIDogbV90bGModGxjKQorICAgICwgbV9kaXJlY3RvcnkoZGlyZWN0b3J5KQogICAgICwgbV9j
ZWxsU2l6ZShkaXJlY3RvcnktPm1fY2VsbFNpemUpCiAgICAgLCBtX2ZyZWVMaXN0KG1fY2VsbFNp
emUpCiB7CkBAIC00MiwxMSArNDMsMTMgQEAgTG9jYWxBbGxvY2F0b3I6OkxvY2FsQWxsb2NhdG9y
KEJsb2NrRGlyZQogfQogCiBMb2NhbEFsbG9jYXRvcjo6TG9jYWxBbGxvY2F0b3IoTG9jYWxBbGxv
Y2F0b3ImJiBvdGhlcikKLSAgICA6IG1fZGlyZWN0b3J5KG90aGVyLm1fZGlyZWN0b3J5KQorICAg
IDogbV90bGMob3RoZXIubV90bGMpCisgICAgLCBtX2RpcmVjdG9yeShvdGhlci5tX2RpcmVjdG9y
eSkKICAgICAsIG1fY2VsbFNpemUob3RoZXIubV9jZWxsU2l6ZSkKICAgICAsIG1fZnJlZUxpc3Qo
V1RGTW92ZShvdGhlci5tX2ZyZWVMaXN0KSkKICAgICAsIG1fY3VycmVudEJsb2NrKG90aGVyLm1f
Y3VycmVudEJsb2NrKQogICAgICwgbV9sYXN0QWN0aXZlQmxvY2sob3RoZXIubV9sYXN0QWN0aXZl
QmxvY2spCisgICAgLCBtX2FsbG9jYXRpb25DdXJzb3Iob3RoZXIubV9hbGxvY2F0aW9uQ3Vyc29y
KQogewogICAgIG90aGVyLnJlc2V0KCk7CiAgICAgaWYgKG90aGVyLmlzT25MaXN0KCkpIHsKQEAg
LTYxLDYgKzY0LDcgQEAgdm9pZCBMb2NhbEFsbG9jYXRvcjo6cmVzZXQoKQogICAgIG1fZnJlZUxp
c3QuY2xlYXIoKTsKICAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7CiAgICAgbV9sYXN0QWN0
aXZlQmxvY2sgPSBudWxscHRyOworICAgIG1fYWxsb2NhdGlvbkN1cnNvciA9IDA7CiB9CiAKIExv
Y2FsQWxsb2NhdG9yOjp+TG9jYWxBbGxvY2F0b3IoKQpAQCAtODAsNiArODQsMTUgQEAgTG9jYWxB
bGxvY2F0b3I6On5Mb2NhbEFsbG9jYXRvcigpCiAgICAgLy8gICB0aGF0IGl0IGlzIG5vdCByZWFj
aGFibGUuIFRoZXJlZm9yZSwgdGhlIFRMQyBzaG91bGQgc3RpbGwgYmUgaW4gYSBmdWxseSByZXNl
dCBzdGF0ZSBhdCB0aGUKICAgICAvLyAgIHRpbWUgb2YgZGVzdHJ1Y3Rpb24gYmVjYXVzZSBmb3Ig
aXQgdG8gZ2V0IGludG8gYW55IG90aGVyIHN0YXRlLCBzb21lb25lIG11c3QgaGF2ZSBhbGxvY2F0
ZWQKICAgICAvLyAgIGluIGl0ICh3aGljaCBpcyBpbXBvc3NpYmxlIGJlY2F1c2UgaXQncyBzdXBw
b3NlZGx5IHVucmVhY2hhYmxlKS4KKyAgICAvLworICAgIC8vIE15IGJpZ2dlc3Qgd29ycnkgd2l0
aCB0aGVzZSBhc3NlcnRpb25zIGlzIHRoYXQgdGhlcmUgd2lsbCBiZSBzb21lIFRMQyB0aGF0IGdl
dHMgc2V0IGFzIHRoZQorICAgIC8vIGN1cnJlbnQgb25lIGJ1dCB0aGVuIG5ldmVyIHJlc2V0LCBh
bmQgaW4gdGhlIG1lYW50aW1lIHRoZSBnbG9iYWwgb2JqZWN0IHRoYXQgb3ducyBpdCBnZXRzCisg
ICAgLy8gZGVzdHJveWVkLgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGlmIHdlIGRpZCBob2xk
IG9udG8gc29tZSBtZW1vcnkgYW5kIHdlIHdhbnRlZCB0byByZXR1cm4gaXQgdGhlbiB0aGlzIGNv
dWxkIGJlIHdlaXJkLgorICAgIC8vIFdlIHdvdWxkIHBvdGVudGlhbGx5IGhhdmUgdG8gc3RvcEFs
bG9jYXRpbmcoKS4gVGhhdCB3b3VsZCBtZWFuIGhhdmluZyB0byByZXR1cm4gYSBibG9jayB0byB0
aGUKKyAgICAvLyBCbG9ja0RpcmVjdG9yeS4gSXQncyBub3QgY2xlYXIgdGhhdCB0aGUgQmxvY2tE
aXJlY3RvcnkgaXMgcHJlcGFyZWQgdG8gaGFuZGxlIHRoYXQgZHVyaW5nCisgICAgLy8gc3dlZXBp
bmcgYW5vdGhlciBibG9jaywgZm9yIGV4YW1wbGUuCiAgICAgYm9vbCBvayA9IHRydWU7CiAgICAg
aWYgKCFtX2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKSB7CiAgICAgICAgIGRhdGFMb2co
IkZBVEFMOiAiLCBSYXdQb2ludGVyKHRoaXMpLCAiLT5+TG9jYWxBbGxvY2F0b3IgaGFzIG5vbi1l
bXB0eSBmcmVlLWxpc3QuXG4iKTsKQEAgLTE2NCw2ICsxNzcsNyBAQCB2b2lkKiBMb2NhbEFsbG9j
YXRvcjo6YWxsb2NhdGVTbG93Q2FzZShHCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KKyAgICBibG9jay0+YXNzb2NpYXRlV2l0aE9yaWdpbihtX3RsYy0+
c2VjdXJpdHlPcmlnaW5Ub2tlbigpKTsKICAgICBtX2RpcmVjdG9yeS0+YWRkQmxvY2soYmxvY2sp
OwogICAgIHJlc3VsdCA9IGFsbG9jYXRlSW4oYmxvY2spOwogICAgIEFTU0VSVChyZXN1bHQpOwpA
QCAtMjAxLDcgKzIxNSw3IEBAIHZvaWQqIExvY2FsQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhv
dXQKICAgICBBU1NFUlQobV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSk7CiAgICAgCiAg
ICAgZm9yICg7OykgewotICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IG1fZGly
ZWN0b3J5LT5maW5kQmxvY2tGb3JBbGxvY2F0aW9uKCk7CisgICAgICAgIE1hcmtlZEJsb2NrOjpI
YW5kbGUqIGJsb2NrID0gbV9kaXJlY3RvcnktPmZpbmRCbG9ja0ZvckFsbG9jYXRpb24oKnRoaXMp
OwogICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTIyMCw2ICsy
MzQsNyBAQCB2b2lkKiBMb2NhbEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVXaXRob3V0CiAgICAgICAg
ICAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIGEgcmVtb3RlIGNoYW5jZSB0aGF0IGEgYmxvY2sgbWF5
IGhhdmUgYm90aCBjYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5CiAgICAgICAgICAgICAvLyBhbmQgZW1w
dHkgc2V0IGF0IHRoZSBzYW1lIHRpbWUuCiAgICAgICAgICAgICBibG9jay0+cmVtb3ZlRnJvbURp
cmVjdG9yeSgpOworICAgICAgICAgICAgYmxvY2stPmFzc29jaWF0ZVdpdGhPcmlnaW4obV90bGMt
PnNlY3VyaXR5T3JpZ2luVG9rZW4oKSk7CiAgICAgICAgICAgICBtX2RpcmVjdG9yeS0+YWRkQmxv
Y2soYmxvY2spOwogICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlSW4oYmxvY2spOwogICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmgJ
KHJldmlzaW9uIDIyNzczOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxs
b2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEyICszMywxMyBAQCBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgQmxvY2tEaXJlY3Rvcnk7CiBjbGFzcyBHQ0RlZmVycmFsQ29udGV4dDsKK2Ns
YXNzIFRocmVhZExvY2FsQ2FjaGU7CiAKIGNsYXNzIExvY2FsQWxsb2NhdG9yIDogcHVibGljIEJh
c2ljUmF3U2VudGluZWxOb2RlPExvY2FsQWxsb2NhdG9yPiB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoTG9jYWxBbGxvY2F0b3IpOwogICAgIAogcHVibGljOgotICAgIExvY2FsQWxsb2NhdG9y
KEJsb2NrRGlyZWN0b3J5Kik7CisgICAgTG9jYWxBbGxvY2F0b3IoVGhyZWFkTG9jYWxDYWNoZSos
IEJsb2NrRGlyZWN0b3J5Kik7CiAgICAgTG9jYWxBbGxvY2F0b3IoTG9jYWxBbGxvY2F0b3ImJik7
CiAgICAgfkxvY2FsQWxsb2NhdG9yKCk7CiAgICAgCkBAIC01Myw4ICs1NCwxMiBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNlbGxTaXplKCk7CiAgICAgCiAgICAgYm9v
bCBpc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqKSBjb25zdDsKKyAgICAKKyAgICBUaHJlYWRM
b2NhbENhY2hlKiB0bGMoKSBjb25zdCB7IHJldHVybiBtX3RsYzsgfQogCiBwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBCbG9ja0RpcmVjdG9yeTsKKyAgICAKICAgICB2b2lkIHJlc2V0KCk7CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShHQ0RlZmVycmFsQ29u
dGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSk7CiAgICAgdm9pZCBkaWRD
b25zdW1lRnJlZUxpc3QoKTsKQEAgLTYzLDExICs2OCwxNiBAQCBwcml2YXRlOgogICAgIHZvaWQq
IGFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRsZSopOwogICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKEdDRGVmZXJyYWxDb250ZXh0Kik7CiAKKyAgICBU
aHJlYWRMb2NhbENhY2hlKiBtX3RsYzsKICAgICBCbG9ja0RpcmVjdG9yeSogbV9kaXJlY3Rvcnk7
CiAgICAgdW5zaWduZWQgbV9jZWxsU2l6ZTsKICAgICBGcmVlTGlzdCBtX2ZyZWVMaXN0OwogICAg
IE1hcmtlZEJsb2NrOjpIYW5kbGUqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0ciB9OwogICAgIE1h
cmtlZEJsb2NrOjpIYW5kbGUqIG1fbGFzdEFjdGl2ZUJsb2NrIHsgbnVsbHB0ciB9OworICAgIAor
ICAgIC8vIEFmdGVyIHlvdSBkbyBzb21ldGhpbmcgdG8gYSBibG9jayBiYXNlZCBvbiBvbmUgb2Yg
dGhlc2UgY3Vyc29ycywgeW91IGNsZWFyIHRoZSBiaXQgaW4gdGhlCisgICAgLy8gY29ycmVzcG9u
ZGluZyBiaXR2ZWN0b3IgYW5kIGxlYXZlIHRoZSBjdXJzb3Igd2hlcmUgaXQgd2FzLgorICAgIHNp
emVfdCBtX2FsbG9jYXRpb25DdXJzb3IgeyAwIH07IC8vIFBvaW50cyB0byB0aGUgbmV4dCBibG9j
ayB0aGF0IGlzIGEgY2FuZGlkYXRlIGZvciBhbGxvY2F0aW9uLgogfTsKIAogaW5saW5lIHB0cmRp
ZmZfdCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFp
bnQuY3BwCShyZXZpc2lvbiAyMjc3MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2
LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYXJrU3RhY2tNZXJnaW5nQ29u
c3RyYWludC5oIgogCisjaW5jbHVkZSAiR0NTZWdtZW50ZWRBcnJheUlubGluZXMuaCIKKyNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiBNYXJrU3RhY2tNZXJnaW5n
Q29uc3RyYWludDo6TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQoSGVhcCYgaGVhcCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2lu
Z0NvbnN0cmFpbnQuaAkocmV2aXNpb24gMjI3NzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjks
NiArMjksOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgSGVhcDsKK2NsYXNzIFNsb3RW
aXNpdG9yOworCiBjbGFzcyBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludCA6IHB1YmxpYyBNYXJr
aW5nQ29uc3RyYWludCB7CiBwdWJsaWM6CiAgICAgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQo
SGVhcCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNw
cAkocmV2aXNpb24gMjI3NzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODgsNiArNDg4LDE1IEBAIGJvb2wgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6aXNGcmVlTGlzdGVkQ2UKICAgICByZXR1cm4gbV9kaXJlY3RvcnktPmlz
RnJlZUxpc3RlZENlbGwodGFyZ2V0KTsKIH0KIAordm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjph
c3NvY2lhdGVXaXRoT3JpZ2luKFNlY3VyaXR5T3JpZ2luVG9rZW4gc2VjdXJpdHlPcmlnaW5Ub2tl
bikKK3sKKyAgICBpZiAobV9zZWN1cml0eU9yaWdpblRva2VuID09IHNlY3VyaXR5T3JpZ2luVG9r
ZW4pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtZW1zZXQoJmJsb2NrKCksIDAsIGVuZEF0
b20gKiBhdG9tU2l6ZSk7CisgICAgbV9zZWN1cml0eU9yaWdpblRva2VuID0gc2VjdXJpdHlPcmln
aW5Ub2tlbjsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMjc3
MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiRGVzdHJ1Y3Rpb25Nb2RlLmgiCiAj
aW5jbHVkZSAiSGVhcENlbGwuaCIKICNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKKyNpbmNs
dWRlICJTZWN1cml0eU9yaWdpblRva2VuLmgiCiAjaW5jbHVkZSAiV2Vha1NldC5oIgogI2luY2x1
ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL0JpdG1hcC5oPgpAQCAtMTk0LDYgKzE5
NSw5IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIHZvaWQgZHVtcFN0YXRlKFByaW50U3Ry
ZWFtJik7CiAgICAgICAgIAorICAgICAgICB2b2lkIGFzc29jaWF0ZVdpdGhPcmlnaW4oU2VjdXJp
dHlPcmlnaW5Ub2tlbik7CisgICAgICAgIFNlY3VyaXR5T3JpZ2luVG9rZW4gc2VjdXJpdHlPcmln
aW5Ub2tlbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VjdXJpdHlPcmlnaW5Ub2tlbjsgfQorICAgICAg
ICAKICAgICBwcml2YXRlOgogICAgICAgICBIYW5kbGUoSGVhcCYsIEFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IqLCB2b2lkKik7CiAgICAgICAgIApAQCAtMjI5LDYgKzIzMyw4IEBAIHB1YmxpYzoKICAg
ICAgICAgV2Vha1NldCBtX3dlYWtTZXQ7CiAgICAgICAgIAogICAgICAgICBNYXJrZWRCbG9jayog
bV9ibG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAgCisgICAgICAgIFNlY3VyaXR5T3JpZ2luVG9r
ZW4gbV9zZWN1cml0eU9yaWdpblRva2VuIHsgMCB9OwogICAgIH07CiAKIHByaXZhdGU6ICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2VjdXJpdHlPcmlnaW5Ub2tlbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2VjdXJpdHlPcmlnaW5U
b2tlbi5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2Vj
dXJpdHlPcmlnaW5Ub2tlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5Ub2tlbi5oIgorCisjaW5jbHVkZSA8d3Rm
L0F0b21pY3MuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK1NlY3VyaXR5T3JpZ2luVG9rZW4gdW5p
cXVlU2VjdXJpdHlPcmlnaW5Ub2tlbigpCit7CisgICAgc3RhdGljIFNlY3VyaXR5T3JpZ2luVG9r
ZW4gY291bnRlcjsKKyAgICByZXR1cm4gV1RGOjphdG9taWNFeGNoYW5nZUFkZCgmY291bnRlciwg
MSkgKyAxOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2VjdXJpdHlPcmlnaW5Ub2tlbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1NlY3VyaXR5T3JpZ2luVG9rZW4uaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TZWN1cml0eU9yaWdpblRva2VuLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVk
ZWYgdWludDY0X3QgU2VjdXJpdHlPcmlnaW5Ub2tlbjsKKworU2VjdXJpdHlPcmlnaW5Ub2tlbiB1
bmlxdWVTZWN1cml0eU9yaWdpblRva2VuKCk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmNwcAko
cmV2aXNpb24gMjI3NzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9j
YWxDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDEzICszMiwxNCBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IFRocmVhZExvY2FsQ2FjaGU6OmNy
ZWF0ZShIZWFwJiBoZWFwKQorUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IFRocmVhZExvY2FsQ2Fj
aGU6OmNyZWF0ZShIZWFwJiBoZWFwLCBTZWN1cml0eU9yaWdpblRva2VuIHNlY3VyaXR5T3JpZ2lu
VG9rZW4pCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUaHJlYWRMb2NhbENhY2hlKGhlYXAp
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRocmVhZExvY2FsQ2FjaGUoaGVhcCwgc2VjdXJp
dHlPcmlnaW5Ub2tlbikpOwogfQogCi1UaHJlYWRMb2NhbENhY2hlOjpUaHJlYWRMb2NhbENhY2hl
KEhlYXAmIGhlYXApCitUaHJlYWRMb2NhbENhY2hlOjpUaHJlYWRMb2NhbENhY2hlKEhlYXAmIGhl
YXAsIFNlY3VyaXR5T3JpZ2luVG9rZW4gc2VjdXJpdHlPcmlnaW5Ub2tlbikKICAgICA6IG1faGVh
cChoZWFwKQorICAgICwgbV9zZWN1cml0eU9yaWdpblRva2VuKHNlY3VyaXR5T3JpZ2luVG9rZW4p
CiB7CiAgICAgbV9kYXRhID0gYWxsb2NhdGVEYXRhKCk7CiB9CkBAIC01OSw3ICs2MCw3IEBAIFRo
cmVhZExvY2FsQ2FjaGU6OkRhdGEqIFRocmVhZExvY2FsQ2FjaGUKICAgICBmb3IgKHNpemVfdCBv
ZmZzZXQgPSAwOyBvZmZzZXQgPCBvbGRTaXplOyBvZmZzZXQgKz0gc2l6ZW9mKExvY2FsQWxsb2Nh
dG9yKSkKICAgICAgICAgbmV3ICgmYWxsb2NhdG9yKCpyZXN1bHQsIG9mZnNldCkpIExvY2FsQWxs
b2NhdG9yKFdURk1vdmUoYWxsb2NhdG9yKCptX2RhdGEsIG9mZnNldCkpKTsKICAgICBmb3IgKHNp
emVfdCBvZmZzZXQgPSBvbGRTaXplOyBvZmZzZXQgPCBsYXlvdXQuc2l6ZTsgb2Zmc2V0ICs9IHNp
emVvZihMb2NhbEFsbG9jYXRvcikpCi0gICAgICAgIG5ldyAoJmFsbG9jYXRvcigqcmVzdWx0LCBv
ZmZzZXQpKSBMb2NhbEFsbG9jYXRvcihsYXlvdXQuZGlyZWN0b3JpZXNbb2Zmc2V0IC8gc2l6ZW9m
KExvY2FsQWxsb2NhdG9yKV0pOworICAgICAgICBuZXcgKCZhbGxvY2F0b3IoKnJlc3VsdCwgb2Zm
c2V0KSkgTG9jYWxBbGxvY2F0b3IodGhpcywgbGF5b3V0LmRpcmVjdG9yaWVzW29mZnNldCAvIHNp
emVvZihMb2NhbEFsbG9jYXRvcildKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC03MCw3
ICs3MSw3IEBAIHZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6ZGVzdHJveURhdGEoRGF0YSoKICAgICBm
YXN0RnJlZShkYXRhKTsKIH0KIAotdm9pZCBUaHJlYWRMb2NhbENhY2hlOjppbnN0YWxsU2xvdyhW
TSYgdm0pCit2b2lkIFRocmVhZExvY2FsQ2FjaGU6Omluc3RhbGxTbG93KFZNJiB2bSwgUmVmUHRy
PFRocmVhZExvY2FsQ2FjaGU+KiBwcmV2aW91cykKIHsKICNpZiBVU0UoRkFTVF9UTFNfRk9SX1RM
QykKICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CkBAIC04Myw4ICs4NCwxMyBA
QCB2b2lkIFRocmVhZExvY2FsQ2FjaGU6Omluc3RhbGxTbG93KFZNJiB2CiAgICAgCiAgICAgcmVm
KCk7CiAgICAgCi0gICAgaWYgKFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBvbGRDYWNoZSA9IGdl
dCh2bSkpCi0gICAgICAgIG9sZENhY2hlLT5kZXJlZigpOworICAgIGlmIChUaHJlYWRMb2NhbENh
Y2hlOjpEYXRhKiBvbGRDYWNoZURhdGEgPSBnZXRJbXBsKHZtKSkgeworICAgICAgICBUaHJlYWRM
b2NhbENhY2hlKiBvbGRDYWNoZSA9IG9sZENhY2hlRGF0YS0+Y2FjaGU7CisgICAgICAgIGlmIChw
cmV2aW91cykKKyAgICAgICAgICAgICpwcmV2aW91cyA9IGFkb3B0UmVmKG9sZENhY2hlKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgb2xkQ2FjaGUtPmRlcmVmKCk7CisgICAgfQogICAgIAog
ICAgIGluc3RhbGxEYXRhKHZtLCBtX2RhdGEpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuaAkocmV2aXNpb24gMjI3NzM4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw5ICsyNSwxMyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkFsbG9jYXRp
b25GYWlsdXJlTW9kZS5oIgorI2luY2x1ZGUgIkxvY2FsQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW5Ub2tlbi5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5j
bHVkZSA8d3RmL0Zhc3RUTFMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zOSw3
ICs0Myw3IEBAIGNsYXNzIFRocmVhZExvY2FsQ2FjaGUgOiBwdWJsaWMgVGhyZWFkU2EKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRy
PFRocmVhZExvY2FsQ2FjaGU+IGNyZWF0ZShIZWFwJik7CisgICAgc3RhdGljIFJlZlB0cjxUaHJl
YWRMb2NhbENhY2hlPiBjcmVhdGUoSGVhcCYsIFNlY3VyaXR5T3JpZ2luVG9rZW4gPSB1bmlxdWVT
ZWN1cml0eU9yaWdpblRva2VuKCkpOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5UaHJl
YWRMb2NhbENhY2hlKCk7CiAKQEAgLTQ5LDcgKzUzLDcgQEAgcHVibGljOgogICAgIC8vIG9wdGlt
aXppbmcgZm9yIHRoZSBjYXNlIHRoYXQgeW91J3JlIGp1c3QgaW5zdGFsbGluZyB0aGUgY2FjaGUg
dGhhdCBpcyBhbHJlYWR5IGluc3RhbGxlZC4gVGhpcwogICAgIC8vIGFzc3VtZXMgYSByZWxhdGl2
ZWx5IHNtYWxsIG51bWJlciBvZiBjYWNoZXMgb3IgbG93IGNoYW5jZSBvZiBhY3R1YWwgY29udGV4
dCBzd2l0Y2ggY29tYmluZWQKICAgICAvLyB3aXRoIHBvc3NpYmx5IGhpZ2ggcmF0ZSBvZiAiSSBt
YXkgaGF2ZSBjb250ZXh0IHN3aXRjaGVkIiBzaXRlcyB0aGF0IGNhbGwgdGhpcyBvdXQgb2YgcGFy
YW5vaWEuCi0gICAgdm9pZCBpbnN0YWxsKFZNJik7CisgICAgdm9pZCBpbnN0YWxsKFZNJiwgUmVm
UHRyPFRocmVhZExvY2FsQ2FjaGU+KiA9IG51bGxwdHIpOwogICAgIAogICAgIHN0YXRpYyBMb2Nh
bEFsbG9jYXRvciYgYWxsb2NhdG9yKFZNJiwgc2l6ZV90IG9mZnNldCk7CiAgICAgCkBAIC01OSwx
MCArNjMsMTIgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplSW5E
YXRhKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKERhdGEsIHNpemUpOyB9CiAgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZkZpcnN0QWxsb2NhdG9ySW5EYXRhKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKERhdGEsIGFsbG9jYXRvcik7IH0KICAgICAKKyAgICBTZWN1cml0eU9yaWdpblRv
a2VuIHNlY3VyaXR5T3JpZ2luVG9rZW4oKSBjb25zdCB7IHJldHVybiBtX3NlY3VyaXR5T3JpZ2lu
VG9rZW47IH0KKyAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFZNOwogICAgIAotICAg
IFRocmVhZExvY2FsQ2FjaGUoSGVhcCYpOworICAgIFRocmVhZExvY2FsQ2FjaGUoSGVhcCYsIFNl
Y3VyaXR5T3JpZ2luVG9rZW4pOwogICAgIAogICAgIHN0cnVjdCBEYXRhIHsKICAgICAgICAgc2l6
ZV90IHNpemU7CkBAIC03Niw3ICs4Miw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkZXN0cm95RGF0
YShEYXRhKik7CiAgICAgc3RhdGljIExvY2FsQWxsb2NhdG9yJiBhbGxvY2F0b3IoRGF0YSYgZGF0
YSwgc2l6ZV90IG9mZnNldCk7CiAKLSAgICB2b2lkIGluc3RhbGxTbG93KFZNJik7CisgICAgdm9p
ZCBpbnN0YWxsU2xvdyhWTSYsIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiopOwogICAgIHN0YXRp
YyB2b2lkIGluc3RhbGxEYXRhKFZNJiwgRGF0YSopOwogICAgIAogICAgIExvY2FsQWxsb2NhdG9y
JiBhbGxvY2F0b3JTbG93KFZNJiwgc2l6ZV90IG9mZnNldCk7CkBAIC05MSw2ICs5Nyw4IEBAIHBy
aXZhdGU6CiAgICAgLy8gaXQncyBjb3JyZWN0IGZvciBpbW1vcnRhbCBjYWNoZXMuCiAgICAgSGVh
cCYgbV9oZWFwOwogICAgIERhdGEqIG1fZGF0YSB7IG51bGxwdHIgfTsKKyAgICAKKyAgICBTZWN1
cml0eU9yaWdpblRva2VuIG1fc2VjdXJpdHlPcmlnaW5Ub2tlbjsKIAogI2lmIFVTRShGQVNUX1RM
U19GT1JfVExDKQogICAgIHN0YXRpYyBjb25zdCBwdGhyZWFkX2tleV90IHRsc0tleSA9IFdURl9H
Q19UTENfS0VZOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxD
YWNoZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9U
aHJlYWRMb2NhbENhY2hlSW5saW5lcy5oCShyZXZpc2lvbiAyMjc3MzgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIlRocmVhZExvY2Fs
Q2FjaGUuaCIKKyNpbmNsdWRlICJWTS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDcsMTEg
KzQ4LDE0IEBAIGlubGluZSBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gVGhyZWFkTG8KICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAotaW5saW5lIHZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFs
bChWTSYgdm0pCitpbmxpbmUgdm9pZCBUaHJlYWRMb2NhbENhY2hlOjppbnN0YWxsKFZNJiB2bSwg
UmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+KiBwcmV2aW91cykKIHsKLSAgICBpZiAoZ2V0SW1wbCh2
bSkgPT0gbV9kYXRhKQorICAgIGlmIChnZXRJbXBsKHZtKSA9PSBtX2RhdGEpIHsKKyAgICAgICAg
aWYgKHByZXZpb3VzKQorICAgICAgICAgICAgKnByZXZpb3VzID0gbnVsbHB0cjsKICAgICAgICAg
cmV0dXJuOwotICAgIGluc3RhbGxTbG93KHZtKTsKKyAgICB9CisgICAgaW5zdGFsbFNsb3codm0s
IHByZXZpb3VzKTsKIH0KIAogaW5saW5lIExvY2FsQWxsb2NhdG9yJiBUaHJlYWRMb2NhbENhY2hl
OjphbGxvY2F0b3IoVk0mIHZtLCBzaXplX3Qgb2Zmc2V0KQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjI3NzM4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMzUsNyArMzM1LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZW5xdQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiB9CiAKLUpTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdChWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSogZ2xvYmFsT2JqZWN0
TWV0aG9kVGFibGUsIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiB0aHJlYWRMb2NhbENhY2hlKQor
SlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiBnbG9iYWxPYmplY3RNZXRob2RUYWJs
ZSkKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgMCkKICAgICAsIG1fdm0odm0pCiAgICAgLCBt
X21hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KGFkb3B0UmVmKG5ldyBXYXRjaHBvaW50
U2V0KElzV2F0Y2hlZCkpKQpAQCAtMzUzLDcgKzM1Myw2IEBAIEpTR2xvYmFsT2JqZWN0OjpKU0ds
b2JhbE9iamVjdChWTSYgdm0sIFMKICAgICAsIG1fdGVtcGxhdGVSZWdpc3RyeSh2bSkKICAgICAs
IG1fcnVudGltZUZsYWdzKCkKICAgICAsIG1fZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoZ2xvYmFs
T2JqZWN0TWV0aG9kVGFibGUgPyBnbG9iYWxPYmplY3RNZXRob2RUYWJsZSA6ICZzX2dsb2JhbE9i
amVjdE1ldGhvZFRhYmxlKQotICAgICwgbV90aHJlYWRMb2NhbENhY2hlKHRocmVhZExvY2FsQ2Fj
aGUgPyBXVEZNb3ZlKHRocmVhZExvY2FsQ2FjaGUpIDogdm0uZGVmYXVsdFRocmVhZExvY2FsQ2Fj
aGUpCiB7CiB9CiAKQEAgLTE1ODksNCArMTU4OCw5IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmZp
bmlzaENyZWF0aW9uKFZNJiAKICAgICBzZXRHbG9iYWxUaGlzKHZtLCB0aGlzVmFsdWUpOwogfQog
Cit2b2lkIEpTR2xvYmFsT2JqZWN0OjpjcmVhdGVUaHJlYWRMb2NhbENhY2hlKCkKK3sKKyAgICBt
X3RocmVhZExvY2FsQ2FjaGUgPSBUaHJlYWRMb2NhbENhY2hlOjpjcmVhdGUodm0oKS5oZWFwKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDIyNzczOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ5MSw3ICs0OTEsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgUnVudGltZUZsYWdzJiBydW50aW1l
RmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX3J1bnRpbWVGbGFnczsgfQogCiBwcm90ZWN0ZWQ6Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgZXhwbGljaXQgSlNHbG9iYWxPYmplY3QoVk0mLCBTdHJ1Y3R1
cmUqLCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSogPSAwLCBSZWZQdHI8VGhyZWFkTG9j
YWxDYWNoZT4gPSBudWxscHRyKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBleHBsaWNpdCBKU0ds
b2JhbE9iamVjdChWTSYsIFN0cnVjdHVyZSosIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxl
KiA9IDApOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYp
OwogCkBAIC04OTQsNyArODk0LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFdyYXBwZXJNYXAo
SlNXcmFwcGVyTWFwKiBtYXApIHsgbV93cmFwcGVyTWFwID0gbWFwOyB9CiAjZW5kaWYKICAgICAK
LSAgICBUaHJlYWRMb2NhbENhY2hlJiB0aHJlYWRMb2NhbENhY2hlKCkgY29uc3QgeyByZXR1cm4g
Km1fdGhyZWFkTG9jYWxDYWNoZS5nZXQoKTsgfQorICAgIFRocmVhZExvY2FsQ2FjaGUmIHRocmVh
ZExvY2FsQ2FjaGUoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3RocmVhZExvY2FsQ2FjaGUpCisg
ICAgICAgICAgICBjcmVhdGVUaHJlYWRMb2NhbENhY2hlKCk7CisgICAgICAgIHJldHVybiAqbV90
aHJlYWRMb2NhbENhY2hlLmdldCgpOworICAgIH0KIAogcHJvdGVjdGVkOgogICAgIHN0cnVjdCBH
bG9iYWxQcm9wZXJ0eUluZm8gewpAQCAtOTE3LDYgKzkyMiw4IEBAIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgIHZvaWQgc2V0R2xvYmFsVGhp
cyhWTSYsIEpTT2JqZWN0KiBnbG9iYWxUaGlzKTsKKyAgICAKKyAgICB2b2lkIGNyZWF0ZVRocmVh
ZExvY2FsQ2FjaGUoKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdChWTSYpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5j
cHAJKHJldmlzaW9uIDIyNzczOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
RW50cnlTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgVk1FbnRyeVNj
b3BlOjpWTUVudHJ5U2NvcGUoVk0mIHZtLCBKU0dsbwogICAgIDogbV92bSh2bSkKICAgICAsIG1f
Z2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKIHsKLSAgICBnbG9iYWxPYmplY3QtPnRocmVhZExv
Y2FsQ2FjaGUoKS5pbnN0YWxsKHZtKTsKKyAgICBnbG9iYWxPYmplY3QtPnRocmVhZExvY2FsQ2Fj
aGUoKS5pbnN0YWxsKHZtLCAmbV9wcmV2aW91c1RMQyk7CiAgICAgQVNTRVJUKCFEaXNhbGxvd1ZN
UmVlbnRyeTo6aXNJbkVmZmVjdE9uQ3VycmVudFRocmVhZCgpKTsKICAgICBBU1NFUlQoVGhyZWFk
OjpjdXJyZW50KCkuc3RhY2soKS5pc0dyb3dpbmdEb3dud2FyZCgpKTsKICAgICBpZiAoIXZtLmVu
dHJ5U2NvcGUpIHsKQEAgLTcxLDExICs3MSwxNCBAQCB2b2lkIFZNRW50cnlTY29wZTo6YWRkRGlk
UG9wTGlzdGVuZXIoc3RkCiAKIFZNRW50cnlTY29wZTo6flZNRW50cnlTY29wZSgpCiB7CisgICAg
aWYgKG1fcHJldmlvdXNUTEMpCisgICAgICAgIG1fcHJldmlvdXNUTEMtPmluc3RhbGwobV92bSk7
CisgICAgCiAgICAgaWYgKG1fdm0uZW50cnlTY29wZSAhPSB0aGlzKQogICAgICAgICByZXR1cm47
CiAKICAgICBUcmFjZVBvaW50KFZNRW50cnlTY29wZUVuZCk7Ci0KKyAgICAKICAgICBpZiAobV92
bS53YXRjaGRvZygpKQogICAgICAgICBtX3ZtLndhdGNoZG9nKCktPmV4aXRlZFZNKCk7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5oCShyZXZp
c2lvbiAyMjc3MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5U2Nv
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIEpTR2xvYmFsT2JqZWN0OworY2xhc3MgVGhyZWFkTG9jYWxDYWNoZTsKIGNsYXNzIFZN
OwogCiBjbGFzcyBWTUVudHJ5U2NvcGUgewpAQCAtNDcsNiArNDgsNyBAQCBwcml2YXRlOgogICAg
IFZNJiBtX3ZtOwogICAgIEpTR2xvYmFsT2JqZWN0KiBtX2dsb2JhbE9iamVjdDsKICAgICBWZWN0
b3I8c3RkOjpmdW5jdGlvbjx2b2lkICgpPj4gbV9kaWRQb3BMaXN0ZW5lcnM7CisgICAgUmVmUHRy
PFRocmVhZExvY2FsQ2FjaGU+IG1fcHJldmlvdXNUTEM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MK
</data>
<flag name="review"
          id="351525"
          type_id="1"
          status="+"
          setter="jfbastien"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>332666</attachid>
            <date>2018-01-30 10:25:55 -0800</date>
            <delta_ts>2018-01-31 15:32:01 -0800</delta_ts>
            <desc>new patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>40900</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI3NzM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBA
CisyMDE4LTAxLTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R2xvYmFsIG9iamVjdHMgc2hvdWxkIGJlIGFibGUgdG8gdXNlIFRMQ3MgdG8gYWxsb2NhdGUgZnJv
bSBkaWZmZXJlbnQgYmxvY2tzIGZyb20gZWFjaCBvdGhlcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgyMjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
SkYgQmFzdGllbi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgdXNlcyBUTENzIHRvIGNyZWF0ZSBh
dCBsZWFzdCBgbWluaW11bURpc3RhbmNlQmV0d2VlbkNlbGxzRnJvbURpZmZlcmVuT3JpZ2luc2Ag
Ynl0ZXMgb2YKKyAgICAgICAgZGlzdGFuY2UgYmV0d2VlbiBvYmplY3RzIGZyb20gZGlmZmVyZW50
IG9yaWdpbnMsIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tYmluYXRpb24gb2YgdGhpbmdzLiBGb3IK
KyAgICAgICAgc2hvcnQgbGV0cyByZWZlciB0byB0aGF0IGNvbnN0YW50IGFzIEsuCisgICAgICAg
IAorICAgICAgICAtIFNpbmNlIHIyMjc3MjEsIExhcmdlQWxsb2NhdGlvbiBwdXRzIEsgYnl0ZXMg
cGFkZGluZyBhdCB0aGUgZW5kIG9mIGVhY2ggYWxsb2NhdGlvbi4KKyAgICAgICAgCisgICAgICAg
IC0gU2luY2UgcjIyNzcxOCwgTWFya2VkQmxvY2sgcHV0cyBhdCBsZWFzdCBLIGJ5dGVzIGluIGl0
cyBmb290ZXIuCisgICAgICAgIAorICAgICAgICAtIFNpbmNlIHIyMjc2MTcsIGdsb2JhbCBvYmpl
Y3RzIGNhbiBoYXZlIHRoZWlyIG93biBUTENzLCB3aGljaCBtYWtlIHRoZW0gYWxsb2NhdGUgZnJv
bSBhCisgICAgICAgICAgZGlmZmVyZW50IHNldCBvZiBibG9ja3MgdGhhbiBvdGhlciBnbG9iYWwg
b2JqZWN0cy4gVGhlIFRMQyBvZiBhIGdsb2JhbCBvYmplY3QgY29tZXMgaW50bworICAgICAgICAg
IGVmZmVjdCB3aGVuIHlvdSBlbnRlciB0aGUgVk0gdmlhIHRoYXQgZ2xvYmFsIG9iamVjdC4KKyAg
ICAgICAgCisgICAgICAgIC0gV2l0aCB0aGlzIGNoYW5nZSwgVExDcyBhbmQgYmxvY2tzIGJvdGgg
aGF2ZSBzZWN1cml0eSBvcmlnaW5zLiBBIFRMQyB3aWxsIG9ubHkgdXNlIGJsb2NrcyB0aGF0Cisg
ICAgICAgICAgc2hhcmUgdGhlIHNhbWUgc2VjdXJpdHkgb3JpZ2luIG9yIGVtcHR5IGJsb2NrcyAo
aW4gd2hpY2ggY2FzZSB3ZSB6ZXJvIHRoZSBibG9jayBhbmQgY2hhbmdlCisgICAgICAgICAgaXRz
IHNlY3VyaXR5IG9yaWdpbikuCisgICAgICAgIAorICAgICAgICBXZWJDb3JlIGRldGVybWluZXMg
dGhlIFRMQy1HbG9iYWxPYmplY3QgbWFwcGluZy4gQnkgZGVmYXVsdCwgZ2xvYmFsIG9iamVjdHMg
d291bGQgc2ltcGx5IHVzZQorICAgICAgICB0aGUgVk0ncyBkZWZhdWx0IFRMQy4gV2ViQ29yZSBt
YWtlcyBpdCBzbyB0aGF0IERPTSB3aW5kb3dzIChidXQgbm90IHdvcmtlciBnbG9iYWwgb2JqZWN0
cykgZ2V0CisgICAgICAgIGEgVExDIGZyb20gdGhlaXIgZG9jdW1lbnQncyBTZWN1cml0eU9yaWdp
bi4gRWFjaCBTZWN1cml0eU9yaWdpbiBpcyBhYmxlIHRvIHZlbmQgeW91IGEgVExDIG9uCisgICAg
ICAgIGRlbWFuZC4KKyAgICAgICAgCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBoZWFw
L0Jsb2NrRGlyZWN0b3J5LmNwcDoKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OmZpbmRC
bG9ja0ZvckFsbG9jYXRpb24pOgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6cHJlcGFy
ZUZvckFsbG9jYXRpb24pOgorICAgICAgICAqIGhlYXAvQmxvY2tEaXJlY3RvcnkuaDoKKyAgICAg
ICAgKiBoZWFwL0xvY2FsQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0
b3I6OkxvY2FsQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6OnJlc2V0
KToKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6On5Mb2NhbEFsbG9jYXRvcik6CisgICAg
ICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKToKKyAgICAgICAgKEpT
Qzo6TG9jYWxBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcpOgorICAgICAg
ICAqIGhlYXAvTG9jYWxBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6TG9jYWxBbGxvY2F0b3I6
OnRsYyBjb25zdCk6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5j
cHA6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oOgorICAgICAg
ICAqIGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFu
ZGxlOjphc3NvY2lhdGVXaXRoT3JpZ2luKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmg6
CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OnNlY3VyaXR5T3JpZ2luVG9rZW4g
Y29uc3QpOgorICAgICAgICAqIGhlYXAvU2VjdXJpdHlPcmlnaW5Ub2tlbi5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjp1bmlxdWVTZWN1cml0eU9yaWdpblRva2VuKToKKyAgICAgICAgKiBoZWFw
L1NlY3VyaXR5T3JpZ2luVG9rZW4uaDogQWRkZWQuCisgICAgICAgICogaGVhcC9UaHJlYWRMb2Nh
bENhY2hlLmNwcDoKKyAgICAgICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6Y3JlYXRlKToKKyAg
ICAgICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6VGhyZWFkTG9jYWxDYWNoZSk6CisgICAgICAg
IChKU0M6OlRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRlRGF0YSk6CisgICAgICAgIChKU0M6OlRo
cmVhZExvY2FsQ2FjaGU6Omluc3RhbGxTbG93KToKKyAgICAgICAgKiBoZWFwL1RocmVhZExvY2Fs
Q2FjaGUuaDoKKyAgICAgICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6c2VjdXJpdHlPcmlnaW5U
b2tlbiBjb25zdCk6CisgICAgICAgICogaGVhcC9UaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpUaHJlYWRMb2NhbENhY2hlOjppbnN0YWxsKToKKyAgICAgICAgKiBydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OkpT
R2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmNyZWF0ZVRocmVh
ZExvY2FsQ2FjaGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAg
ICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnRocmVhZExvY2FsQ2FjaGUpOgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6dGhyZWFkTG9jYWxDYWNoZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwOgorICAgICAgICAoSlNDOjpWTUVudHJ5U2Nv
cGU6OlZNRW50cnlTY29wZSk6CisgICAgICAgIChKU0M6OlZNRW50cnlTY29wZTo6flZNRW50cnlT
Y29wZSk6CisgICAgICAgICogcnVudGltZS9WTUVudHJ5U2NvcGUuaDoKKwogMjAxOC0wMS0yOSAg
TWF0dCBMZXdpcyAgPGpsZXdpczNAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJv
bGxpbmcgb3V0IHIyMjc3MjUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZp
c2lvbiAyMjc3MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8KIC8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogLy8gbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC01MTIsNiArNTEyLDcgQEAgaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAKIGhlYXAv
TWFya2luZ0NvbnN0cmFpbnRTb2x2ZXIuY3BwCiBoZWFwL011dGF0b3JTY2hlZHVsZXIuY3BwCiBo
ZWFwL011dGF0b3JTdGF0ZS5jcHAKK2hlYXAvU2VjdXJpdHlPcmlnaW5Ub2tlbi5jcHAKIGhlYXAv
U2ltcGxlTWFya2luZ0NvbnN0cmFpbnQuY3BwCiBoZWFwL1Nsb3RWaXNpdG9yLmNwcAogaGVhcC9T
cGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDIyNzczOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQs
NiArMjk0LDcgQEAKIAkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3Zlcnku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1
MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8q
IFZpcnR1YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY0MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTRC
MTQ2MENENkUwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZv
cm1hdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTBGNDJCM0MzMjAxRUM5RkYwMDM1NzAzMSAvKiBTZWN1cml0eU9yaWdpblRva2VuLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyQjNDMjIwMUVDOUZE
MDAzNTcwMzEgLyogU2VjdXJpdHlPcmlnaW5Ub2tlbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDMxNzM4MTQ2QkFDNjkwMDdFMzg5MCAvKiBM
aXN0YWJsZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNDMxNzM2MTQ2QkFDNjUwMDdFMzg5MCAvKiBMaXN0YWJsZUhhbmRsZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQ1NzAzOTFC
RTQ0QzkxMDA2MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENvZGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDU3MDM3MUJFNDRDOTEwMDYyQTYyOSAv
KiBBaXJFbGltaW5hdGVEZWFkQ29kZS5oICovOyB9OwogCQkwRjQ1NzAzRDFCRTQ1RjBBMDA2MkE2
MjkgLyogQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NTcwM0IxQkU0NUYwQTAwNjJBNjI5IC8qIEFpclJlcG9y
dFVzZWRSZWdpc3RlcnMuaCAqLzsgfTsKQEAgLTIyNjIsNiArMjI2Myw4IEBACiAJCTBGNDI2QTQ1
MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFZhbHVlUmVjb3ZlcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY0MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaXJ0dWFsUmVnaXN0ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERhdGFGb3JtYXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YUZvcm1hdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjQyQjNDMDIwMUVCNTA5MDAzNTcwMzEgLyogQWxsb2Nh
dG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFsbG9jYXRvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDJCM0MyMjAxRUM5RkQwMDM1NzAz
MSAvKiBTZWN1cml0eU9yaWdpblRva2VuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNlY3VyaXR5T3JpZ2luVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY0MzE3MzYxNDZCQUM2NTAwN0UzODkwIC8qIExpc3RhYmxlSGFuZGxlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBMaXN0YWJsZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY0NTcwMzYxQkU0NEM5MTAwNjJBNjI5IC8qIEFpckVsaW1pbmF0ZURl
YWRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckVsaW1p
bmF0ZURlYWRDb2RlLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJFbGltaW5hdGVEZWFkQ29kZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDU3MDM3MUJFNDRDOTEwMDYyQTYyOSAv
KiBBaXJFbGltaW5hdGVEZWFkQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBBaXJFbGltaW5hdGVEZWFkQ29kZS5oOyBwYXRoID0gYjMvYWlyL0FpckVsaW1pbmF0ZURlYWRD
b2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NTU5LDIxICs1NTYyLDE0IEBA
CiAJCTE0MkUzMTJBMTM0RkYwQTYwMEFGQURCNSAvKiBoZWFwICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkwRjc1QTA1NDIwMEQyNUVGMDAzOEUyQ0YgLyog
QWxsb2NhdG9yLmggKi8sCi0JCQkJMEY3NUEwNUQyMDBEMjVGMTAwMzhFMkNGIC8qIEFsbG9jYXRv
cklubGluZXMuaCAqLywKLQkJCQkwRjc1QTA1OTIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxv
Y2F0b3IuY3BwICovLAotCQkJCTBGNzVBMDU3MjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9j
YXRvci5oICovLAotCQkJCTBGNzVBMDVBMjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRv
cklubGluZXMuaCAqLywKLQkJCQkwRjc1QTA1ODIwMEQyNUYwMDAzOEUyQ0YgLyogVGhyZWFkTG9j
YWxDYWNoZS5jcHAgKi8sCi0JCQkJMEY3NUEwNTUyMDBEMjVFRjAwMzhFMkNGIC8qIFRocmVhZExv
Y2FsQ2FjaGUuaCAqLywKLQkJCQkwRjc1QTA1NjIwMEQyNUVGMDAzOEUyQ0YgLyogVGhyZWFkTG9j
YWxDYWNoZUlubGluZXMuaCAqLywKLQkJCQkwRjc1QTA1QjIwMEQyNUYxMDAzOEUyQ0YgLyogVGhy
ZWFkTG9jYWxDYWNoZUxheW91dC5jcHAgKi8sCi0JCQkJMEY3NUEwNUMyMDBEMjVGMTAwMzhFMkNG
IC8qIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQuaCAqLywKIAkJCQkwRkVDM0M1MDFGMzNBNDE2MDBG
NTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJMEZFQzNDNTExRjMz
QTQxNjAwRjU5QjZDIC8qIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCAqLywKIAkJCQkwRkE3NjIw
QTFEQjk1OUY2MDBCN0EyRkQgLyogQWxsb2NhdGluZ1Njb3BlLmggKi8sCiAJCQkJMEZEQ0UxMUIx
RkFFNjFGNDAwNkYzOTAxIC8qIEFsbG9jYXRpb25GYWlsdXJlTW9kZS5oICovLAorCQkJCTBGNDJC
M0MwMjAxRUI1MDkwMDM1NzAzMSAvKiBBbGxvY2F0b3IuY3BwICovLAorCQkJCTBGNzVBMDU0MjAw
RDI1RUYwMDM4RTJDRiAvKiBBbGxvY2F0b3IuaCAqLywKIAkJCQkwRjMwQ0I1RDFGQ0U0NkI0MDA0
QjUzMjMgLyogQWxsb2NhdG9yRm9yTW9kZS5oICovLAorCQkJCTBGNzVBMDVEMjAwRDI1RjEwMDM4
RTJDRiAvKiBBbGxvY2F0b3JJbmxpbmVzLmggKi8sCiAJCQkJMEZCNDY3N0UxRkREQTZFNTAwM0ZD
QjA5IC8qIEF0b21JbmRpY2VzLmggKi8sCiAJCQkJQzJCOTE2QzQxNERBMDQwQzAwQ0JBQzg2IC8q
IEJsb2NrRGlyZWN0b3J5LmNwcCAqLywKIAkJCQlDMkI5MTZDMTE0REEwMTRFMDBDQkFDODYgLyog
QmxvY2tEaXJlY3RvcnkuaCAqLywKQEAgLTU2NzQsNiArNTY3MCw5IEBACiAJCQkJMEYwNzBBNDUx
RDU0M0E4OTAwNkU3MjMyIC8qIExhcmdlQWxsb2NhdGlvbi5jcHAgKi8sCiAJCQkJMEYwNzBBNDYx
RDU0M0E4OTAwNkU3MjMyIC8qIExhcmdlQWxsb2NhdGlvbi5oICovLAogCQkJCTBGNDMxNzM2MTQ2
QkFDNjUwMDdFMzg5MCAvKiBMaXN0YWJsZUhhbmRsZXIuaCAqLywKKwkJCQkwRjc1QTA1OTIwMEQy
NUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3IuY3BwICovLAorCQkJCTBGNzVBMDU3MjAwRDI1
RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5oICovLAorCQkJCTBGNzVBMDVBMjAwRDI1RjAw
MDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvcklubGluZXMuaCAqLywKIAkJCQkwRjIwOEFENjFERjA5
MjVBMDA3RDMyNjkgLyogTG9ja0R1cmluZ01hcmtpbmcuaCAqLywKIAkJCQkxNEI3MjMzRjEyRDdE
MERBMDAzQkQ1RUQgLyogTWFjaGluZVN0YWNrTWFya2VyLmNwcCAqLywKIAkJCQkxNEI3MjM0MDEy
RDdEMERBMDAzQkQ1RUQgLyogTWFjaGluZVN0YWNrTWFya2VyLmggKi8sCkBAIC01NzAzLDYgKzU3
MDIsNyBAQAogCQkJCTBGRDBFNUVGMUU0NkJGMjMwMDA2QUIwOCAvKiBSZWdpc3RlclN0YXRlLmgg
Ki8sCiAJCQkJMEY3Q0Y5NEUxREJFRUU4NjAwOThDQzEyIC8qIFJlbGVhc2VIZWFwQWNjZXNzU2Nv
cGUuaCAqLywKIAkJCQkwRjJDNjNBOTFFNEZBNDJDMDBDMTM4MzkgLyogUnVubmluZ1Njb3BlLmgg
Ki8sCisJCQkJMEY0MkIzQzIyMDFFQzlGRDAwMzU3MDMxIC8qIFNlY3VyaXR5T3JpZ2luVG9rZW4u
aCAqLywKIAkJCQkwRjREOEM3NjFGQ0EzQ0YyMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0
cmFpbnQuY3BwICovLAogCQkJCTBGNEQ4Qzc3MUZDQTNDRjMwMDFEMzJBQyAvKiBTaW1wbGVNYXJr
aW5nQ29uc3RyYWludC5oICovLAogCQkJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90
VmlzaXRvci5jcHAgKi8sCkBAIC01NzI0LDYgKzU3MjQsMTEgQEAKIAkJCQkwRkQ3OUEyQzFFQkJC
REIyMDBEQTg4RDMgLyogU3luY2hyb25vdXNuZXNzLmggKi8sCiAJCQkJMEYxRkIzOEExRTE3M0E2
MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAg
Ki8sCiAJCQkJMEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdv
cmxkTXV0YXRvclNjaGVkdWxlci5oICovLAorCQkJCTBGNzVBMDU4MjAwRDI1RjAwMDM4RTJDRiAv
KiBUaHJlYWRMb2NhbENhY2hlLmNwcCAqLywKKwkJCQkwRjc1QTA1NTIwMEQyNUVGMDAzOEUyQ0Yg
LyogVGhyZWFkTG9jYWxDYWNoZS5oICovLAorCQkJCTBGNzVBMDU2MjAwRDI1RUYwMDM4RTJDRiAv
KiBUaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oICovLAorCQkJCTBGNzVBMDVCMjAwRDI1RjEwMDM4
RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlTGF5b3V0LmNwcCAqLywKKwkJCQkwRjc1QTA1QzIwMEQy
NUYxMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oICovLAogCQkJCTE0MTQ0OEND
MTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCAqLywKIAkJCQkwRjVGMDhDRTE0
NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oICovLAogCQkJCTBGNEQ4
QzcyMUZDN0E5NzMwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCAqLywKQEAgLTg1MjIsNiArODUy
Nyw3IEBACiAJCQkJMEY3QzM5RkYxQzkwQzU1QjAwNDgwMTUxIC8qIERGR09wSW5mby5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTdEODlDRkUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgyRTU3MTQxREFGMTAw
MDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0MkIzQzMyMDFF
QzlGRjAwMzU3MDMxIC8qIFNlY3VyaXR5T3JpZ2luVG9rZW4uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRDhBMzI2MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09T
UkV4aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVDMTcxNzhFNzMwMDY5MEM3RiAvKiBE
RkdPU1JFeGl0QmFzZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCShyZXZpc2lvbiAyMjc3MzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFy
a2VkQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCisjaW5jbHVkZSAi
VGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaCIKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0
Zi9DdXJyZW50VGltZS5oPgogCkBAIC04MCwxNCArODEsMjAgQEAgTWFya2VkQmxvY2s6OkhhbmRs
ZSogQmxvY2tEaXJlY3Rvcnk6OmZpbgogICAgIHJldHVybiBtX2Jsb2Nrc1ttX2VtcHR5Q3Vyc29y
XTsKIH0KIAotTWFya2VkQmxvY2s6OkhhbmRsZSogQmxvY2tEaXJlY3Rvcnk6OmZpbmRCbG9ja0Zv
ckFsbG9jYXRpb24oKQorTWFya2VkQmxvY2s6OkhhbmRsZSogQmxvY2tEaXJlY3Rvcnk6OmZpbmRC
bG9ja0ZvckFsbG9jYXRpb24oTG9jYWxBbGxvY2F0b3ImIGFsbG9jYXRvcikKIHsKLSAgICBtX2Fs
bG9jYXRpb25DdXJzb3IgPSAobV9jYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IHwgbV9lbXB0eSkuZmlu
ZEJpdChtX2FsbG9jYXRpb25DdXJzb3IsIHRydWUpOwotICAgIGlmIChtX2FsbG9jYXRpb25DdXJz
b3IgPj0gbV9ibG9ja3Muc2l6ZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAg
ICBzZXRJc0NhbkFsbG9jYXRlQnV0Tm90RW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBtX2FsbG9j
YXRpb25DdXJzb3IsIGZhbHNlKTsKLSAgICByZXR1cm4gbV9ibG9ja3NbbV9hbGxvY2F0aW9uQ3Vy
c29yXTsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGFsbG9jYXRvci5tX2FsbG9jYXRpb25DdXJz
b3IgPSAobV9jYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IHwgbV9lbXB0eSkuZmluZEJpdChhbGxvY2F0
b3IubV9hbGxvY2F0aW9uQ3Vyc29yLCB0cnVlKTsKKyAgICAgICAgaWYgKGFsbG9jYXRvci5tX2Fs
bG9jYXRpb25DdXJzb3IgPj0gbV9ibG9ja3Muc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIAorICAgICAgICBzaXplX3QgYmxvY2tJbmRleCA9IGFsbG9jYXRvci5t
X2FsbG9jYXRpb25DdXJzb3IrKzsKKyAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogcmVzdWx0
ID0gbV9ibG9ja3NbYmxvY2tJbmRleF07CisgICAgICAgIGlmIChyZXN1bHQtPnNlY3VyaXR5T3Jp
Z2luVG9rZW4oKSA9PSBhbGxvY2F0b3IudGxjKCktPnNlY3VyaXR5T3JpZ2luVG9rZW4oKSkgewor
ICAgICAgICAgICAgc2V0SXNDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KE5vTG9ja2luZ05lY2Vzc2Fy
eSwgYmxvY2tJbmRleCwgZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgfQorICAgIH0KIH0KIAogTWFya2VkQmxvY2s6OkhhbmRsZSogQmxvY2tEaXJlY3Rvcnk6OnRy
eUFsbG9jYXRlQmxvY2soKQpAQCAtMTgzLDggKzE5MCw2IEBAIHZvaWQgQmxvY2tEaXJlY3Rvcnk6
OnByZXBhcmVGb3JBbGxvY2F0aW8KICAgICAgICAgICAgIGFsbG9jYXRvci0+cHJlcGFyZUZvckFs
bG9jYXRpb24oKTsKICAgICAgICAgfSk7CiAgICAgCi0gICAgbV9hbGxvY2F0aW9uQ3Vyc29yID0g
MDsKLSAgICBtX2VtcHR5Q3Vyc29yID0gMDsKICAgICBtX3Vuc3dlcHRDdXJzb3IgPSAwOwogICAg
IAogICAgIG1fZWRlbi5jbGVhckFsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQmxvY2tEaXJlY3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9CbG9ja0RpcmVjdG9yeS5oCShyZXZpc2lvbiAyMjc3MzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0
Myw3IEBAIGNsYXNzIEhlYXA7CiBjbGFzcyBJc29DZWxsU2V0OwogY2xhc3MgTWFya2VkU3BhY2U7
CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CitjbGFzcyBUaHJlYWRMb2NhbENhY2hlOwog
Y2xhc3MgVGhyZWFkTG9jYWxDYWNoZUxheW91dDsKIAogI2RlZmluZSBGT1JfRUFDSF9CTE9DS19E
SVJFQ1RPUllfQklUKG1hY3JvKSBcCkBAIC0xNjIsMTIgKzE2MywxMyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkdW1wQml0cyhQcmludFN0cmVhbSYgPSBXVEY6OmRhdGFGaWxlKCkpOwogICAgIAogcHJp
dmF0ZToKLSAgICBmcmllbmQgY2xhc3MgTG9jYWxBbGxvY2F0b3I7CiAgICAgZnJpZW5kIGNsYXNz
IElzb0NlbGxTZXQ7CisgICAgZnJpZW5kIGNsYXNzIExvY2FsQWxsb2NhdG9yOworICAgIGZyaWVu
ZCBjbGFzcyBMb2NhbFNpZGVBbGxvY2F0b3I7CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJsb2Nr
OwogICAgIGZyaWVuZCBjbGFzcyBUaHJlYWRMb2NhbENhY2hlTGF5b3V0OwogICAgIAotICAgIE1h
cmtlZEJsb2NrOjpIYW5kbGUqIGZpbmRCbG9ja0ZvckFsbG9jYXRpb24oKTsKKyAgICBNYXJrZWRC
bG9jazo6SGFuZGxlKiBmaW5kQmxvY2tGb3JBbGxvY2F0aW9uKExvY2FsQWxsb2NhdG9yJik7CiAg
ICAgCiAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogdHJ5QWxsb2NhdGVCbG9jaygpOwogICAgIApA
QCAtMTg0LDggKzE4Niw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgLy8gQWZ0ZXIgeW91IGRvIHNv
bWV0aGluZyB0byBhIGJsb2NrIGJhc2VkIG9uIG9uZSBvZiB0aGVzZSBjdXJzb3JzLCB5b3UgY2xl
YXIgdGhlIGJpdCBpbiB0aGUKICAgICAvLyBjb3JyZXNwb25kaW5nIGJpdHZlY3RvciBhbmQgbGVh
dmUgdGhlIGN1cnNvciB3aGVyZSBpdCB3YXMuCi0gICAgc2l6ZV90IG1fYWxsb2NhdGlvbkN1cnNv
ciB7IDAgfTsgLy8gUG9pbnRzIHRvIHRoZSBuZXh0IGJsb2NrIHRoYXQgaXMgYSBjYW5kaWRhdGUg
Zm9yIGFsbG9jYXRpb24uCi0gICAgc2l6ZV90IG1fZW1wdHlDdXJzb3IgeyAwIH07IC8vIFBvaW50
cyB0byB0aGUgbmV4dCBibG9jayB0aGF0IGlzIGEgY2FuZGlkYXRlIGZvciBlbXB0eSBhbGxvY2F0
aW9uIChhbGxvY2F0aW5nIGluIGVtcHR5IGJsb2NrcykuCisgICAgc2l6ZV90IG1fZW1wdHlDdXJz
b3IgeyAwIH07CiAgICAgc2l6ZV90IG1fdW5zd2VwdEN1cnNvciB7IDAgfTsgLy8gUG9pbnRzIHRv
IHRoZSBuZXh0IGJsb2NrIHRoYXQgaXMgYSBjYW5kaWRhdGUgZm9yIGluY3JlbWVudGFsIHN3ZWVw
aW5nLgogICAgIAogICAgIHVuc2lnbmVkIG1fY2VsbFNpemU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMjc3MzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDggKzMyLDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUxvY2FsQWxsb2Nh
dG9yOjpMb2NhbEFsbG9jYXRvcihCbG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5KQotICAgIDogbV9k
aXJlY3RvcnkoZGlyZWN0b3J5KQorTG9jYWxBbGxvY2F0b3I6OkxvY2FsQWxsb2NhdG9yKFRocmVh
ZExvY2FsQ2FjaGUqIHRsYywgQmxvY2tEaXJlY3RvcnkqIGRpcmVjdG9yeSkKKyAgICA6IG1fdGxj
KHRsYykKKyAgICAsIG1fZGlyZWN0b3J5KGRpcmVjdG9yeSkKICAgICAsIG1fY2VsbFNpemUoZGly
ZWN0b3J5LT5tX2NlbGxTaXplKQogICAgICwgbV9mcmVlTGlzdChtX2NlbGxTaXplKQogewpAQCAt
NDIsMTEgKzQzLDEzIEBAIExvY2FsQWxsb2NhdG9yOjpMb2NhbEFsbG9jYXRvcihCbG9ja0RpcmUK
IH0KIAogTG9jYWxBbGxvY2F0b3I6OkxvY2FsQWxsb2NhdG9yKExvY2FsQWxsb2NhdG9yJiYgb3Ro
ZXIpCi0gICAgOiBtX2RpcmVjdG9yeShvdGhlci5tX2RpcmVjdG9yeSkKKyAgICA6IG1fdGxjKG90
aGVyLm1fdGxjKQorICAgICwgbV9kaXJlY3Rvcnkob3RoZXIubV9kaXJlY3RvcnkpCiAgICAgLCBt
X2NlbGxTaXplKG90aGVyLm1fY2VsbFNpemUpCiAgICAgLCBtX2ZyZWVMaXN0KFdURk1vdmUob3Ro
ZXIubV9mcmVlTGlzdCkpCiAgICAgLCBtX2N1cnJlbnRCbG9jayhvdGhlci5tX2N1cnJlbnRCbG9j
aykKICAgICAsIG1fbGFzdEFjdGl2ZUJsb2NrKG90aGVyLm1fbGFzdEFjdGl2ZUJsb2NrKQorICAg
ICwgbV9hbGxvY2F0aW9uQ3Vyc29yKG90aGVyLm1fYWxsb2NhdGlvbkN1cnNvcikKIHsKICAgICBv
dGhlci5yZXNldCgpOwogICAgIGlmIChvdGhlci5pc09uTGlzdCgpKSB7CkBAIC02MSw2ICs2NCw3
IEBAIHZvaWQgTG9jYWxBbGxvY2F0b3I6OnJlc2V0KCkKICAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7
CiAgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOwogICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0g
bnVsbHB0cjsKKyAgICBtX2FsbG9jYXRpb25DdXJzb3IgPSAwOwogfQogCiBMb2NhbEFsbG9jYXRv
cjo6fkxvY2FsQWxsb2NhdG9yKCkKQEAgLTgwLDYgKzg0LDE1IEBAIExvY2FsQWxsb2NhdG9yOjp+
TG9jYWxBbGxvY2F0b3IoKQogICAgIC8vICAgdGhhdCBpdCBpcyBub3QgcmVhY2hhYmxlLiBUaGVy
ZWZvcmUsIHRoZSBUTEMgc2hvdWxkIHN0aWxsIGJlIGluIGEgZnVsbHkgcmVzZXQgc3RhdGUgYXQg
dGhlCiAgICAgLy8gICB0aW1lIG9mIGRlc3RydWN0aW9uIGJlY2F1c2UgZm9yIGl0IHRvIGdldCBp
bnRvIGFueSBvdGhlciBzdGF0ZSwgc29tZW9uZSBtdXN0IGhhdmUgYWxsb2NhdGVkCiAgICAgLy8g
ICBpbiBpdCAod2hpY2ggaXMgaW1wb3NzaWJsZSBiZWNhdXNlIGl0J3Mgc3VwcG9zZWRseSB1bnJl
YWNoYWJsZSkuCisgICAgLy8KKyAgICAvLyBNeSBiaWdnZXN0IHdvcnJ5IHdpdGggdGhlc2UgYXNz
ZXJ0aW9ucyBpcyB0aGF0IHRoZXJlIHdpbGwgYmUgc29tZSBUTEMgdGhhdCBnZXRzIHNldCBhcyB0
aGUKKyAgICAvLyBjdXJyZW50IG9uZSBidXQgdGhlbiBuZXZlciByZXNldCwgYW5kIGluIHRoZSBt
ZWFudGltZSB0aGUgZ2xvYmFsIG9iamVjdCB0aGF0IG93bnMgaXQgZ2V0cworICAgIC8vIGRlc3Ry
b3llZC4KKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCBpZiB3ZSBkaWQgaG9sZCBvbnRvIHNvbWUg
bWVtb3J5IGFuZCB3ZSB3YW50ZWQgdG8gcmV0dXJuIGl0IHRoZW4gdGhpcyBjb3VsZCBiZSB3ZWly
ZC4KKyAgICAvLyBXZSB3b3VsZCBwb3RlbnRpYWxseSBoYXZlIHRvIHN0b3BBbGxvY2F0aW5nKCku
IFRoYXQgd291bGQgbWVhbiBoYXZpbmcgdG8gcmV0dXJuIGEgYmxvY2sgdG8gdGhlCisgICAgLy8g
QmxvY2tEaXJlY3RvcnkuIEl0J3Mgbm90IGNsZWFyIHRoYXQgdGhlIEJsb2NrRGlyZWN0b3J5IGlz
IHByZXBhcmVkIHRvIGhhbmRsZSB0aGF0IGR1cmluZworICAgIC8vIHN3ZWVwaW5nIGFub3RoZXIg
YmxvY2ssIGZvciBleGFtcGxlLgogICAgIGJvb2wgb2sgPSB0cnVlOwogICAgIGlmICghbV9mcmVl
TGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSkgewogICAgICAgICBkYXRhTG9nKCJGQVRBTDogIiwg
UmF3UG9pbnRlcih0aGlzKSwgIi0+fkxvY2FsQWxsb2NhdG9yIGhhcyBub24tZW1wdHkgZnJlZS1s
aXN0LlxuIik7CkBAIC0xNjQsNiArMTc3LDcgQEAgdm9pZCogTG9jYWxBbGxvY2F0b3I6OmFsbG9j
YXRlU2xvd0Nhc2UoRwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CisgICAgYmxvY2stPmFzc29jaWF0ZVdpdGhPcmlnaW4obV90bGMtPnNlY3VyaXR5T3Jp
Z2luVG9rZW4oKSk7CiAgICAgbV9kaXJlY3RvcnktPmFkZEJsb2NrKGJsb2NrKTsKICAgICByZXN1
bHQgPSBhbGxvY2F0ZUluKGJsb2NrKTsKICAgICBBU1NFUlQocmVzdWx0KTsKQEAgLTIwMSw3ICsy
MTUsNyBAQCB2b2lkKiBMb2NhbEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVXaXRob3V0CiAgICAgQVNT
RVJUKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpOwogICAgIAogICAgIGZvciAoOzsp
IHsKLSAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSBtX2RpcmVjdG9yeS0+Zmlu
ZEJsb2NrRm9yQWxsb2NhdGlvbigpOworICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9j
ayA9IG1fZGlyZWN0b3J5LT5maW5kQmxvY2tGb3JBbGxvY2F0aW9uKCp0aGlzKTsKICAgICAgICAg
aWYgKCFibG9jaykKICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0yMjAsNiArMjM0LDcgQEAgdm9p
ZCogTG9jYWxBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dAogICAgICAgICAgICAgLy8gYmVj
YXVzZSB0aGVyZSBpcyBhIHJlbW90ZSBjaGFuY2UgdGhhdCBhIGJsb2NrIG1heSBoYXZlIGJvdGgg
Y2FuQWxsb2NhdGVCdXROb3RFbXB0eQogICAgICAgICAgICAgLy8gYW5kIGVtcHR5IHNldCBhdCB0
aGUgc2FtZSB0aW1lLgogICAgICAgICAgICAgYmxvY2stPnJlbW92ZUZyb21EaXJlY3RvcnkoKTsK
KyAgICAgICAgICAgIGJsb2NrLT5hc3NvY2lhdGVXaXRoT3JpZ2luKG1fdGxjLT5zZWN1cml0eU9y
aWdpblRva2VuKCkpOwogICAgICAgICAgICAgbV9kaXJlY3RvcnktPmFkZEJsb2NrKGJsb2NrKTsK
ICAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZUluKGJsb2NrKTsKICAgICAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5oCShyZXZpc2lvbiAy
Mjc3MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMywxMiArMzMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNz
IEJsb2NrRGlyZWN0b3J5OwogY2xhc3MgR0NEZWZlcnJhbENvbnRleHQ7CitjbGFzcyBUaHJlYWRM
b2NhbENhY2hlOwogCiBjbGFzcyBMb2NhbEFsbG9jYXRvciA6IHB1YmxpYyBCYXNpY1Jhd1NlbnRp
bmVsTm9kZTxMb2NhbEFsbG9jYXRvcj4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExvY2Fs
QWxsb2NhdG9yKTsKICAgICAKIHB1YmxpYzoKLSAgICBMb2NhbEFsbG9jYXRvcihCbG9ja0RpcmVj
dG9yeSopOworICAgIExvY2FsQWxsb2NhdG9yKFRocmVhZExvY2FsQ2FjaGUqLCBCbG9ja0RpcmVj
dG9yeSopOwogICAgIExvY2FsQWxsb2NhdG9yKExvY2FsQWxsb2NhdG9yJiYpOwogICAgIH5Mb2Nh
bEFsbG9jYXRvcigpOwogICAgIApAQCAtNTMsOCArNTQsMTIgQEAgcHVibGljOgogICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDZWxsU2l6ZSgpOwogICAgIAogICAgIGJvb2wgaXNGcmVlTGlz
dGVkQ2VsbChjb25zdCB2b2lkKikgY29uc3Q7CisgICAgCisgICAgVGhyZWFkTG9jYWxDYWNoZSog
dGxjKCkgY29uc3QgeyByZXR1cm4gbV90bGM7IH0KIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xh
c3MgQmxvY2tEaXJlY3Rvcnk7CisgICAgCiAgICAgdm9pZCByZXNldCgpOwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqLCBBbGxv
Y2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpOwogICAgIHZvaWQgZGlkQ29uc3VtZUZyZWVM
aXN0KCk7CkBAIC02MywxMSArNjgsMTYgQEAgcHJpdmF0ZToKICAgICB2b2lkKiBhbGxvY2F0ZUlu
KE1hcmtlZEJsb2NrOjpIYW5kbGUqKTsKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZG9UZXN0Q29s
bGVjdGlvbnNJZk5lZWRlZChHQ0RlZmVycmFsQ29udGV4dCopOwogCisgICAgVGhyZWFkTG9jYWxD
YWNoZSogbV90bGM7CiAgICAgQmxvY2tEaXJlY3RvcnkqIG1fZGlyZWN0b3J5OwogICAgIHVuc2ln
bmVkIG1fY2VsbFNpemU7CiAgICAgRnJlZUxpc3QgbV9mcmVlTGlzdDsKICAgICBNYXJrZWRCbG9j
azo6SGFuZGxlKiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKICAgICBNYXJrZWRCbG9jazo6
SGFuZGxlKiBtX2xhc3RBY3RpdmVCbG9jayB7IG51bGxwdHIgfTsKKyAgICAKKyAgICAvLyBBZnRl
ciB5b3UgZG8gc29tZXRoaW5nIHRvIGEgYmxvY2sgYmFzZWQgb24gb25lIG9mIHRoZXNlIGN1cnNv
cnMsIHlvdSBjbGVhciB0aGUgYml0IGluIHRoZQorICAgIC8vIGNvcnJlc3BvbmRpbmcgYml0dmVj
dG9yIGFuZCBsZWF2ZSB0aGUgY3Vyc29yIHdoZXJlIGl0IHdhcy4KKyAgICBzaXplX3QgbV9hbGxv
Y2F0aW9uQ3Vyc29yIHsgMCB9OyAvLyBQb2ludHMgdG8gdGhlIG5leHQgYmxvY2sgdGhhdCBpcyBh
IGNhbmRpZGF0ZSBmb3IgYWxsb2NhdGlvbi4KIH07CiAKIGlubGluZSBwdHJkaWZmX3QgTG9jYWxB
bGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAkocmV2
aXNpb24gMjI3NzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVy
Z2luZ0NvbnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw5IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCIK
IAorI2luY2x1ZGUgIkdDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAogTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6
Ok1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50KEhlYXAmIGhlYXApCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50
LmgJKHJldmlzaW9uIDIyNzczOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtT
dGFja01lcmdpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDkgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEhlYXA7CitjbGFzcyBTbG90VmlzaXRvcjsKKwog
Y2xhc3MgTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQgOiBwdWJsaWMgTWFya2luZ0NvbnN0cmFp
bnQgewogcHVibGljOgogICAgIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50KEhlYXAmKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9u
IDIyNzczOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDg4LDYgKzQ4OCwxNSBAQCBib29sIE1hcmtlZEJsb2NrOjpIYW5k
bGU6OmlzRnJlZUxpc3RlZENlCiAgICAgcmV0dXJuIG1fZGlyZWN0b3J5LT5pc0ZyZWVMaXN0ZWRD
ZWxsKHRhcmdldCk7CiB9CiAKK3ZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6YXNzb2NpYXRlV2l0
aE9yaWdpbihTZWN1cml0eU9yaWdpblRva2VuIHNlY3VyaXR5T3JpZ2luVG9rZW4pCit7CisgICAg
aWYgKG1fc2VjdXJpdHlPcmlnaW5Ub2tlbiA9PSBzZWN1cml0eU9yaWdpblRva2VuKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgbWVtc2V0KCZibG9jaygpLCAwLCBlbmRBdG9tICogYXRvbVNp
emUpOworICAgIG1fc2VjdXJpdHlPcmlnaW5Ub2tlbiA9IHNlY3VyaXR5T3JpZ2luVG9rZW47Cit9
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjI3NzM4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkRlc3RydWN0aW9uTW9kZS5oIgogI2luY2x1ZGUgIkhl
YXBDZWxsLmgiCiAjaW5jbHVkZSAiSXRlcmF0aW9uU3RhdHVzLmgiCisjaW5jbHVkZSAiU2VjdXJp
dHlPcmlnaW5Ub2tlbi5oIgogI2luY2x1ZGUgIldlYWtTZXQuaCIKICNpbmNsdWRlIDx3dGYvQXRv
bWljcy5oPgogI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KQEAgLTE5NCw2ICsxOTUsOSBAQCBwdWJs
aWM6CiAgICAgICAgIAogICAgICAgICB2b2lkIGR1bXBTdGF0ZShQcmludFN0cmVhbSYpOwogICAg
ICAgICAKKyAgICAgICAgdm9pZCBhc3NvY2lhdGVXaXRoT3JpZ2luKFNlY3VyaXR5T3JpZ2luVG9r
ZW4pOworICAgICAgICBTZWN1cml0eU9yaWdpblRva2VuIHNlY3VyaXR5T3JpZ2luVG9rZW4oKSBj
b25zdCB7IHJldHVybiBtX3NlY3VyaXR5T3JpZ2luVG9rZW47IH0KKyAgICAgICAgCiAgICAgcHJp
dmF0ZToKICAgICAgICAgSGFuZGxlKEhlYXAmLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiwgdm9p
ZCopOwogICAgICAgICAKQEAgLTIyOSw2ICsyMzMsOCBAQCBwdWJsaWM6CiAgICAgICAgIFdlYWtT
ZXQgbV93ZWFrU2V0OwogICAgICAgICAKICAgICAgICAgTWFya2VkQmxvY2sqIG1fYmxvY2sgeyBu
dWxscHRyIH07CisgICAgICAgIAorICAgICAgICBTZWN1cml0eU9yaWdpblRva2VuIG1fc2VjdXJp
dHlPcmlnaW5Ub2tlbiB7IDAgfTsKICAgICB9OwogCiBwcml2YXRlOiAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NlY3VyaXR5T3JpZ2luVG9rZW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NlY3VyaXR5T3JpZ2luVG9rZW4uY3BwCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NlY3VyaXR5T3JpZ2lu
VG9rZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luVG9rZW4uaCIKKworI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+
CisKK25hbWVzcGFjZSBKU0MgeworCitTZWN1cml0eU9yaWdpblRva2VuIHVuaXF1ZVNlY3VyaXR5
T3JpZ2luVG9rZW4oKQoreworICAgIHN0YXRpYyBTZWN1cml0eU9yaWdpblRva2VuIGNvdW50ZXI7
CisgICAgcmV0dXJuIFdURjo6YXRvbWljRXhjaGFuZ2VBZGQoJmNvdW50ZXIsIDEpICsgMTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1NlY3VyaXR5T3JpZ2luVG9rZW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TZWN1cml0eU9yaWdpblRva2VuLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2VjdXJpdHlPcmlnaW5Ub2tlbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIHVpbnQ2NF90
IFNlY3VyaXR5T3JpZ2luVG9rZW47CisKK0pTX0VYUE9SVF9QUklWQVRFIFNlY3VyaXR5T3JpZ2lu
VG9rZW4gdW5pcXVlU2VjdXJpdHlPcmlnaW5Ub2tlbigpOworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNo
ZS5jcHAJKHJldmlzaW9uIDIyNzczOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ro
cmVhZExvY2FsQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMyArMzIsMTQgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLVJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBUaHJlYWRMb2NhbENh
Y2hlOjpjcmVhdGUoSGVhcCYgaGVhcCkKK1JlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBUaHJlYWRM
b2NhbENhY2hlOjpjcmVhdGUoSGVhcCYgaGVhcCwgU2VjdXJpdHlPcmlnaW5Ub2tlbiBzZWN1cml0
eU9yaWdpblRva2VuKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGhyZWFkTG9jYWxDYWNo
ZShoZWFwKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUaHJlYWRMb2NhbENhY2hlKGhlYXAs
IHNlY3VyaXR5T3JpZ2luVG9rZW4pKTsKIH0KIAotVGhyZWFkTG9jYWxDYWNoZTo6VGhyZWFkTG9j
YWxDYWNoZShIZWFwJiBoZWFwKQorVGhyZWFkTG9jYWxDYWNoZTo6VGhyZWFkTG9jYWxDYWNoZShI
ZWFwJiBoZWFwLCBTZWN1cml0eU9yaWdpblRva2VuIHNlY3VyaXR5T3JpZ2luVG9rZW4pCiAgICAg
OiBtX2hlYXAoaGVhcCkKKyAgICAsIG1fc2VjdXJpdHlPcmlnaW5Ub2tlbihzZWN1cml0eU9yaWdp
blRva2VuKQogewogICAgIG1fZGF0YSA9IGFsbG9jYXRlRGF0YSgpOwogfQpAQCAtNTksNyArNjAs
NyBAQCBUaHJlYWRMb2NhbENhY2hlOjpEYXRhKiBUaHJlYWRMb2NhbENhY2hlCiAgICAgZm9yIChz
aXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgb2xkU2l6ZTsgb2Zmc2V0ICs9IHNpemVvZihMb2Nh
bEFsbG9jYXRvcikpCiAgICAgICAgIG5ldyAoJmFsbG9jYXRvcigqcmVzdWx0LCBvZmZzZXQpKSBM
b2NhbEFsbG9jYXRvcihXVEZNb3ZlKGFsbG9jYXRvcigqbV9kYXRhLCBvZmZzZXQpKSk7CiAgICAg
Zm9yIChzaXplX3Qgb2Zmc2V0ID0gb2xkU2l6ZTsgb2Zmc2V0IDwgbGF5b3V0LnNpemU7IG9mZnNl
dCArPSBzaXplb2YoTG9jYWxBbGxvY2F0b3IpKQotICAgICAgICBuZXcgKCZhbGxvY2F0b3IoKnJl
c3VsdCwgb2Zmc2V0KSkgTG9jYWxBbGxvY2F0b3IobGF5b3V0LmRpcmVjdG9yaWVzW29mZnNldCAv
IHNpemVvZihMb2NhbEFsbG9jYXRvcildKTsKKyAgICAgICAgbmV3ICgmYWxsb2NhdG9yKCpyZXN1
bHQsIG9mZnNldCkpIExvY2FsQWxsb2NhdG9yKHRoaXMsIGxheW91dC5kaXJlY3Rvcmllc1tvZmZz
ZXQgLyBzaXplb2YoTG9jYWxBbGxvY2F0b3IpXSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApA
QCAtNzAsNyArNzEsNyBAQCB2b2lkIFRocmVhZExvY2FsQ2FjaGU6OmRlc3Ryb3lEYXRhKERhdGEq
CiAgICAgZmFzdEZyZWUoZGF0YSk7CiB9CiAKLXZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFs
bFNsb3coVk0mIHZtKQordm9pZCBUaHJlYWRMb2NhbENhY2hlOjppbnN0YWxsU2xvdyhWTSYgdm0s
IFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiogcHJldmlvdXMpCiB7CiAjaWYgVVNFKEZBU1RfVExT
X0ZPUl9UTEMpCiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwpAQCAtODMsOCAr
ODQsMTMgQEAgdm9pZCBUaHJlYWRMb2NhbENhY2hlOjppbnN0YWxsU2xvdyhWTSYgdgogICAgIAog
ICAgIHJlZigpOwogICAgIAotICAgIGlmIChSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gb2xkQ2Fj
aGUgPSBnZXQodm0pKQotICAgICAgICBvbGRDYWNoZS0+ZGVyZWYoKTsKKyAgICBpZiAoVGhyZWFk
TG9jYWxDYWNoZTo6RGF0YSogb2xkQ2FjaGVEYXRhID0gZ2V0SW1wbCh2bSkpIHsKKyAgICAgICAg
VGhyZWFkTG9jYWxDYWNoZSogb2xkQ2FjaGUgPSBvbGRDYWNoZURhdGEtPmNhY2hlOworICAgICAg
ICBpZiAocHJldmlvdXMpCisgICAgICAgICAgICAqcHJldmlvdXMgPSBhZG9wdFJlZihvbGRDYWNo
ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9sZENhY2hlLT5kZXJlZigpOworICAgIH0K
ICAgICAKICAgICBpbnN0YWxsRGF0YSh2bSwgbV9kYXRhKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmgJKHJldmlzaW9uIDIyNzczOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsOSArMjUsMTMgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJB
bGxvY2F0aW9uRmFpbHVyZU1vZGUuaCIKKyNpbmNsdWRlICJMb2NhbEFsbG9jYXRvci5oIgorI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luVG9rZW4uaCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5o
PgogI2luY2x1ZGUgPHd0Zi9GYXN0VExTLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApA
QCAtMzksNyArNDMsNyBAQCBjbGFzcyBUaHJlYWRMb2NhbENhY2hlIDogcHVibGljIFRocmVhZFNh
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgCiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBjcmVhdGUoSGVhcCYpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gY3JlYXRlKEhlYXAmLCBTZWN1
cml0eU9yaWdpblRva2VuID0gdW5pcXVlU2VjdXJpdHlPcmlnaW5Ub2tlbigpKTsKICAgICAKICAg
ICBKU19FWFBPUlRfUFJJVkFURSB+VGhyZWFkTG9jYWxDYWNoZSgpOwogCkBAIC00OSw3ICs1Myw3
IEBAIHB1YmxpYzoKICAgICAvLyBvcHRpbWl6aW5nIGZvciB0aGUgY2FzZSB0aGF0IHlvdSdyZSBq
dXN0IGluc3RhbGxpbmcgdGhlIGNhY2hlIHRoYXQgaXMgYWxyZWFkeSBpbnN0YWxsZWQuIFRoaXMK
ICAgICAvLyBhc3N1bWVzIGEgcmVsYXRpdmVseSBzbWFsbCBudW1iZXIgb2YgY2FjaGVzIG9yIGxv
dyBjaGFuY2Ugb2YgYWN0dWFsIGNvbnRleHQgc3dpdGNoIGNvbWJpbmVkCiAgICAgLy8gd2l0aCBw
b3NzaWJseSBoaWdoIHJhdGUgb2YgIkkgbWF5IGhhdmUgY29udGV4dCBzd2l0Y2hlZCIgc2l0ZXMg
dGhhdCBjYWxsIHRoaXMgb3V0IG9mIHBhcmFub2lhLgotICAgIHZvaWQgaW5zdGFsbChWTSYpOwor
ICAgIHZvaWQgaW5zdGFsbChWTSYsIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiogPSBudWxscHRy
KTsKICAgICAKICAgICBzdGF0aWMgTG9jYWxBbGxvY2F0b3ImIGFsbG9jYXRvcihWTSYsIHNpemVf
dCBvZmZzZXQpOwogICAgIApAQCAtNTksMTAgKzYzLDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mU2l6ZUluRGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihE
YXRhLCBzaXplKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGaXJzdEFsbG9jYXRv
ckluRGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihEYXRhLCBhbGxvY2F0b3IpOyB9CiAg
ICAgCisgICAgU2VjdXJpdHlPcmlnaW5Ub2tlbiBzZWN1cml0eU9yaWdpblRva2VuKCkgY29uc3Qg
eyByZXR1cm4gbV9zZWN1cml0eU9yaWdpblRva2VuOyB9CisgICAgCiBwcml2YXRlOgogICAgIGZy
aWVuZCBjbGFzcyBWTTsKICAgICAKLSAgICBUaHJlYWRMb2NhbENhY2hlKEhlYXAmKTsKKyAgICBU
aHJlYWRMb2NhbENhY2hlKEhlYXAmLCBTZWN1cml0eU9yaWdpblRva2VuKTsKICAgICAKICAgICBz
dHJ1Y3QgRGF0YSB7CiAgICAgICAgIHNpemVfdCBzaXplOwpAQCAtNzYsNyArODIsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgZGVzdHJveURhdGEoRGF0YSopOwogICAgIHN0YXRpYyBMb2NhbEFsbG9j
YXRvciYgYWxsb2NhdG9yKERhdGEmIGRhdGEsIHNpemVfdCBvZmZzZXQpOwogCi0gICAgdm9pZCBp
bnN0YWxsU2xvdyhWTSYpOworICAgIHZvaWQgaW5zdGFsbFNsb3coVk0mLCBSZWZQdHI8VGhyZWFk
TG9jYWxDYWNoZT4qKTsKICAgICBzdGF0aWMgdm9pZCBpbnN0YWxsRGF0YShWTSYsIERhdGEqKTsK
ICAgICAKICAgICBMb2NhbEFsbG9jYXRvciYgYWxsb2NhdG9yU2xvdyhWTSYsIHNpemVfdCBvZmZz
ZXQpOwpAQCAtOTEsNiArOTcsOCBAQCBwcml2YXRlOgogICAgIC8vIGl0J3MgY29ycmVjdCBmb3Ig
aW1tb3J0YWwgY2FjaGVzLgogICAgIEhlYXAmIG1faGVhcDsKICAgICBEYXRhKiBtX2RhdGEgeyBu
dWxscHRyIH07CisgICAgCisgICAgU2VjdXJpdHlPcmlnaW5Ub2tlbiBtX3NlY3VyaXR5T3JpZ2lu
VG9rZW47CiAKICNpZiBVU0UoRkFTVF9UTFNfRk9SX1RMQykKICAgICBzdGF0aWMgY29uc3QgcHRo
cmVhZF9rZXlfdCB0bHNLZXkgPSBXVEZfR0NfVExDX0tFWTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaAkocmV2aXNp
b24gMjI3NzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNo
ZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJUaHJlYWRMb2NhbENhY2hlLmgiCisjaW5jbHVkZSAiVk0uaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKQEAgLTQ3LDExICs0OCwxNCBAQCBpbmxpbmUgUmVmUHRyPFRocmVhZExv
Y2FsQ2FjaGU+IFRocmVhZExvCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLWlubGluZSB2b2lk
IFRocmVhZExvY2FsQ2FjaGU6Omluc3RhbGwoVk0mIHZtKQoraW5saW5lIHZvaWQgVGhyZWFkTG9j
YWxDYWNoZTo6aW5zdGFsbChWTSYgdm0sIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiogcHJldmlv
dXMpCiB7Ci0gICAgaWYgKGdldEltcGwodm0pID09IG1fZGF0YSkKKyAgICBpZiAoZ2V0SW1wbCh2
bSkgPT0gbV9kYXRhKSB7CisgICAgICAgIGlmIChwcmV2aW91cykKKyAgICAgICAgICAgICpwcmV2
aW91cyA9IG51bGxwdHI7CiAgICAgICAgIHJldHVybjsKLSAgICBpbnN0YWxsU2xvdyh2bSk7Cisg
ICAgfQorICAgIGluc3RhbGxTbG93KHZtLCBwcmV2aW91cyk7CiB9CiAKIGlubGluZSBMb2NhbEFs
bG9jYXRvciYgVGhyZWFkTG9jYWxDYWNoZTo6YWxsb2NhdG9yKFZNJiB2bSwgc2l6ZV90IG9mZnNl
dCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaAkocmV2aXNpb24gMjI3NzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDkxLDcgKzQ5MSw3IEBAIHB1Ymxp
YzoKICAgICBjb25zdCBSdW50aW1lRmxhZ3MmIHJ1bnRpbWVGbGFncygpIGNvbnN0IHsgcmV0dXJu
IG1fcnVudGltZUZsYWdzOyB9CiAKIHByb3RlY3RlZDoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBl
eHBsaWNpdCBKU0dsb2JhbE9iamVjdChWTSYsIFN0cnVjdHVyZSosIGNvbnN0IEdsb2JhbE9iamVj
dE1ldGhvZFRhYmxlKiA9IDAsIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiA9IG51bGxwdHIpOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIGV4cGxpY2l0IEpTR2xvYmFsT2JqZWN0KFZNJiwgU3RydWN0
dXJlKiwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqID0gbnVsbHB0ciwgUmVmUHRyPFRo
cmVhZExvY2FsQ2FjaGU+ID0gbnVsbHB0cik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNRW50cnlTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcAkocmV2aXNpb24gMjI3NzM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNyArNDEsNyBAQCBWTUVudHJ5U2NvcGU6OlZNRW50cnlTY29wZShWTSYgdm0sIEpTR2xvCiAg
ICAgOiBtX3ZtKHZtKQogICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KQogewotICAg
IGdsb2JhbE9iamVjdC0+dGhyZWFkTG9jYWxDYWNoZSgpLmluc3RhbGwodm0pOworICAgIGdsb2Jh
bE9iamVjdC0+dGhyZWFkTG9jYWxDYWNoZSgpLmluc3RhbGwodm0sICZtX3ByZXZpb3VzVExDKTsK
ICAgICBBU1NFUlQoIURpc2FsbG93Vk1SZWVudHJ5Ojppc0luRWZmZWN0T25DdXJyZW50VGhyZWFk
KCkpOwogICAgIEFTU0VSVChUaHJlYWQ6OmN1cnJlbnQoKS5zdGFjaygpLmlzR3Jvd2luZ0Rvd253
YXJkKCkpOwogICAgIGlmICghdm0uZW50cnlTY29wZSkgewpAQCAtNzEsMTEgKzcxLDE0IEBAIHZv
aWQgVk1FbnRyeVNjb3BlOjphZGREaWRQb3BMaXN0ZW5lcihzdGQKIAogVk1FbnRyeVNjb3BlOjp+
Vk1FbnRyeVNjb3BlKCkKIHsKKyAgICBpZiAobV9wcmV2aW91c1RMQykKKyAgICAgICAgbV9wcmV2
aW91c1RMQy0+aW5zdGFsbChtX3ZtKTsKKyAgICAKICAgICBpZiAobV92bS5lbnRyeVNjb3BlICE9
IHRoaXMpCiAgICAgICAgIHJldHVybjsKIAogICAgIFRyYWNlUG9pbnQoVk1FbnRyeVNjb3BlRW5k
KTsKLQorICAgIAogICAgIGlmIChtX3ZtLndhdGNoZG9nKCkpCiAgICAgICAgIG1fdm0ud2F0Y2hk
b2coKS0+ZXhpdGVkVk0oKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk1FbnRyeVNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk1FbnRyeVNjb3BlLmgJKHJldmlzaW9uIDIyNzczOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3
IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNHbG9iYWxPYmplY3Q7CitjbGFzcyBUaHJl
YWRMb2NhbENhY2hlOwogY2xhc3MgVk07CiAKIGNsYXNzIFZNRW50cnlTY29wZSB7CkBAIC00Nyw2
ICs0OCw3IEBAIHByaXZhdGU6CiAgICAgVk0mIG1fdm07CiAgICAgSlNHbG9iYWxPYmplY3QqIG1f
Z2xvYmFsT2JqZWN0OwogICAgIFZlY3RvcjxzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+PiBtX2RpZFBv
cExpc3RlbmVyczsKKyAgICBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gbV9wcmV2aW91c1RMQzsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI3Nzky
KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MjQgQEAKKzIwMTgtMDEtMzAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAg
ICAgICBHbG9iYWwgb2JqZWN0cyBzaG91bGQgYmUgYWJsZSB0byB1c2UgVExDcyB0byBhbGxvY2F0
ZSBmcm9tIGRpZmZlcmVudCBibG9ja3MgZnJvbSBlYWNoIG90aGVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODIyMjcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBubyBj
aGFuZ2UgaW4gYmVoYXZpb3IuCisgICAgICAgIAorICAgICAgICBBZG9wdCBKU0MgVExDIEFQSSB0
byBwdXQgZGlzdGFuY2UgYmV0d2VlbiBvYmplY3RzIGZyb20gZGlmZmVyZW50IHNlY3VyaXR5IG9y
aWdpbi4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL2hlYXAvVGhyZWFkTG9jYWxDYWNo
ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6SlNET01HbG9iYWxPYmplY3Qp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9N
V2luZG93QmFzZTo6SlNET01XaW5kb3dCYXNlKToKKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5T3Jp
Z2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjp0aHJlYWRMb2NhbENh
Y2hlKToKKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5T3JpZ2luLmg6CisKIDIwMTgtMDEtMzAgIFph
bGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbUmVuZGVyVHJlZUJ1aWxk
ZXJdIE1vdmUgY2hpbGRCZWNhbWVOb25JbmxpbmUgdG8gUmVuZGVyVHJlZUJ1aWxkZXIKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvVGhy
ZWFkTG9jYWxDYWNoZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRp
bmdIZWFkZXJzL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMiBAQAorI3ByYWdtYSBvbmNlCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVGhyZWFkTG9j
YWxDYWNoZS5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
R2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjI3NzM4KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTYsOCAr
NTYsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGlzUmVhZGFibGVCCiAKIGNvbnN0
IENsYXNzSW5mbyBKU0RPTUdsb2JhbE9iamVjdDo6c19pbmZvID0geyAiRE9NR2xvYmFsT2JqZWN0
IiwgJkpTR2xvYmFsT2JqZWN0OjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRI
T0RfVEFCTEUoSlNET01HbG9iYWxPYmplY3QpIH07CiAKLUpTRE9NR2xvYmFsT2JqZWN0OjpKU0RP
TUdsb2JhbE9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8RE9NV3JhcHBl
cldvcmxkPiYmIHdvcmxkLCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSogZ2xvYmFsT2Jq
ZWN0TWV0aG9kVGFibGUpCi0gICAgOiBKU0dsb2JhbE9iamVjdCh2bSwgc3RydWN0dXJlLCBnbG9i
YWxPYmplY3RNZXRob2RUYWJsZSkKK0pTRE9NR2xvYmFsT2JqZWN0OjpKU0RPTUdsb2JhbE9iamVj
dChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8RE9NV3JhcHBlcldvcmxkPiYmIHdv
cmxkLCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSogZ2xvYmFsT2JqZWN0TWV0aG9kVGFi
bGUsIFJlZlB0cjxKU0M6OlRocmVhZExvY2FsQ2FjaGU+IHRocmVhZExvY2FsQ2FjaGUpCisgICAg
OiBKU0dsb2JhbE9iamVjdCh2bSwgc3RydWN0dXJlLCBnbG9iYWxPYmplY3RNZXRob2RUYWJsZSwg
dGhyZWFkTG9jYWxDYWNoZSkKICAgICAsIG1fY3VycmVudEV2ZW50KDApCiAgICAgLCBtX3dvcmxk
KFdURk1vdmUod29ybGQpKQogICAgICwgbV93b3JsZElzTm9ybWFsKG1fd29ybGQtPmlzTm9ybWFs
KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2Jq
ZWN0LmgJKHJldmlzaW9uIDIyNzczOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNs
dWRlICJXZWJDb3JlSlNCdWlsdGluSW50ZXJuYWxzLmgiCiAjaW5jbHVkZSA8aGVhcC9IZWFwSW5s
aW5lcy5oPgogI2luY2x1ZGUgPGhlYXAvTG9ja0R1cmluZ01hcmtpbmcuaD4KKyNpbmNsdWRlIDxo
ZWFwL1RocmVhZExvY2FsQ2FjaGUuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+CiAKQEAgLTUwLDcgKzUx
LDcgQEAgY2xhc3MgV0VCQ09SRV9FWFBPUlQgSlNET01HbG9iYWxPYmplY3QgOgogcHJvdGVjdGVk
OgogICAgIHN0cnVjdCBKU0RPTUdsb2JhbE9iamVjdERhdGE7CiAKLSAgICBKU0RPTUdsb2JhbE9i
amVjdChKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBSZWY8RE9NV3JhcHBlcldvcmxkPiYmLCBj
b25zdCBKU0M6Okdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiA9IDApOworICAgIEpTRE9NR2xvYmFs
T2JqZWN0KEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFJlZjxET01XcmFwcGVyV29ybGQ+JiYs
IGNvbnN0IEpTQzo6R2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqID0gbnVsbHB0ciwgUmVmUHRyPEpT
Qzo6VGhyZWFkTG9jYWxDYWNoZT4gPSBudWxscHRyKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95
KEpTQzo6SlNDZWxsKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CiAgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNDOjpKU09iamVjdCopOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCShyZXZpc2lv
biAyMjc3MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIGNvbnN0IEdsb2JhbE9iamVjdE1l
dGhvZFRhYmxlIEpTRE9NV2luZG8KIH07CiAKIEpTRE9NV2luZG93QmFzZTo6SlNET01XaW5kb3dC
YXNlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZlB0cjxET01XaW5kb3c+JiYgd2lu
ZG93LCBKU0RPTVdpbmRvd1Byb3h5KiBwcm94eSkKLSAgICA6IEpTRE9NR2xvYmFsT2JqZWN0KHZt
LCBzdHJ1Y3R1cmUsIHByb3h5LT53b3JsZCgpLCAmc19nbG9iYWxPYmplY3RNZXRob2RUYWJsZSkK
KyAgICA6IEpTRE9NR2xvYmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUsIHByb3h5LT53b3JsZCgpLCAm
c19nbG9iYWxPYmplY3RNZXRob2RUYWJsZSwgd2luZG93LT5kb2N1bWVudCgpLT5zZWN1cml0eU9y
aWdpbigpLnRocmVhZExvY2FsQ2FjaGUoKSkKICAgICAsIG1fd2luZG93Q2xvc2VXYXRjaHBvaW50
cygod2luZG93ICYmIHdpbmRvdy0+ZnJhbWUoKSkgPyBJc1dhdGNoZWQgOiBJc0ludmFsaWRhdGVk
KQogICAgICwgbV93cmFwcGVkKFdURk1vdmUod2luZG93KSkKICAgICAsIG1fcHJveHkocHJveHkp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkocmV2aXNpb24gMjI3
NzM4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMCwxMSArMzAsMTMgQEAKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgog
CiAjaW5jbHVkZSAiQmxvYlVSTC5oIgorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAi
RmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgIlNjaGVtZVJlZ2lzdHJ5
LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlQb2xpY3kuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlQmxv
YlJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8cnVudGltZS9WTS5oPgogI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgpAQCAtNTk1LDQgKzU5NywxMSBAQCBib29sIFNlY3VyaXR5T3JpZ2lu
Ojppc0xvY2FsSG9zdE9yTG9vcGJhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitSZWZQdHI8SlND
OjpUaHJlYWRMb2NhbENhY2hlPiBTZWN1cml0eU9yaWdpbjo6dGhyZWFkTG9jYWxDYWNoZSgpCit7
CisgICAgaWYgKCFtX3RocmVhZExvY2FsQ2FjaGUpCisgICAgICAgIG1fdGhyZWFkTG9jYWxDYWNo
ZSA9IEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6Y3JlYXRlKGNvbW1vblZNKCkuaGVhcCk7CisgICAg
cmV0dXJuIG1fdGhyZWFkTG9jYWxDYWNoZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uaAkocmV2aXNpb24gMjI3NzM4KQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjgsNiArMjgsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgPGhlYXAvVGhyZWFk
TG9jYWxDYWNoZS5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC0yMDMsNiArMjA0LDggQEAgcHVibGlj
OgogICAgIGJvb2wgaXNQb3RlbnRpYWxseVRydXN0d29ydGh5KCkgY29uc3QgeyByZXR1cm4gbV9p
c1BvdGVudGlhbGx5VHJ1c3R3b3J0aHk7IH0KIAogICAgIHN0YXRpYyBib29sIGlzTG9jYWxIb3N0
T3JMb29wYmFja0lQQWRkcmVzcyhjb25zdCBVUkwmKTsKKyAgICAKKyAgICBSZWZQdHI8SlNDOjpU
aHJlYWRMb2NhbENhY2hlPiB0aHJlYWRMb2NhbENhY2hlKCk7CiAKIHByaXZhdGU6CiAgICAgU2Vj
dXJpdHlPcmlnaW4oKTsKQEAgLTIzMiw2ICsyMzUsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9l
bmZvcmNlRmlsZVBhdGhTZXBhcmF0aW9uIHsgZmFsc2UgfTsKICAgICBib29sIG1fbmVlZHNTdG9y
YWdlQWNjZXNzRnJvbUZpbGVVUkxzUXVpcmsgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc1BvdGVu
dGlhbGx5VHJ1c3R3b3J0aHkgeyBmYWxzZSB9OworICAgIFJlZlB0cjxKU0M6OlRocmVhZExvY2Fs
Q2FjaGU+IG1fdGhyZWFkTG9jYWxDYWNoZTsKIH07CiAKIGJvb2wgc2hvdWxkVHJlYXRBc1BvdGVu
dGlhbGx5VHJ1c3R3b3J0aHkoY29uc3QgVVJMJik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>332810</attachid>
            <date>2018-01-31 15:32:01 -0800</date>
            <delta_ts>2018-02-05 11:19:22 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>60314</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI3ODQ5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDczIEBA
CisyMDE4LTAxLTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R2xvYmFsIG9iamVjdHMgc2hvdWxkIGJlIGFibGUgdG8gdXNlIFRMQ3MgdG8gYWxsb2NhdGUgZnJv
bSBkaWZmZXJlbnQgYmxvY2tzIGZyb20gZWFjaCBvdGhlcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgyMjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
SkYgQmFzdGllbi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgdXNlcyBUTENzIHRvIGNyZWF0ZSBh
dCBsZWFzdCBgbWluaW11bURpc3RhbmNlQmV0d2VlbkNlbGxzRnJvbURpZmZlcmVuT3JpZ2luc2Ag
Ynl0ZXMgb2YKKyAgICAgICAgZGlzdGFuY2UgYmV0d2VlbiBvYmplY3RzIGZyb20gZGlmZmVyZW50
IG9yaWdpbnMsIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tYmluYXRpb24gb2YgdGhpbmdzLiBGb3IK
KyAgICAgICAgc2hvcnQgbGV0cyByZWZlciB0byB0aGF0IGNvbnN0YW50IGFzIEsuCisgICAgICAg
IAorICAgICAgICAtIFNpbmNlIHIyMjc3MjEsIExhcmdlQWxsb2NhdGlvbiBwdXRzIEsgYnl0ZXMg
cGFkZGluZyBhdCB0aGUgZW5kIG9mIGVhY2ggYWxsb2NhdGlvbi4KKyAgICAgICAgCisgICAgICAg
IC0gU2luY2UgcjIyNzcxOCwgTWFya2VkQmxvY2sgcHV0cyBhdCBsZWFzdCBLIGJ5dGVzIGluIGl0
cyBmb290ZXIuCisgICAgICAgIAorICAgICAgICAtIFNpbmNlIHIyMjc2MTcsIGdsb2JhbCBvYmpl
Y3RzIGNhbiBoYXZlIHRoZWlyIG93biBUTENzLCB3aGljaCBtYWtlIHRoZW0gYWxsb2NhdGUgZnJv
bSBhCisgICAgICAgICAgZGlmZmVyZW50IHNldCBvZiBibG9ja3MgdGhhbiBvdGhlciBnbG9iYWwg
b2JqZWN0cy4gVGhlIFRMQyBvZiBhIGdsb2JhbCBvYmplY3QgY29tZXMgaW50bworICAgICAgICAg
IGVmZmVjdCB3aGVuIHlvdSBlbnRlciB0aGUgVk0gdmlhIHRoYXQgZ2xvYmFsIG9iamVjdC4KKyAg
ICAgICAgCisgICAgICAgIC0gV2l0aCB0aGlzIGNoYW5nZSwgVExDcyBhbmQgYmxvY2tzIGJvdGgg
aGF2ZSBzZWN1cml0eSBvcmlnaW5zLiBBIFRMQyB3aWxsIG9ubHkgdXNlIGJsb2NrcyB0aGF0Cisg
ICAgICAgICAgc2hhcmUgdGhlIHNhbWUgc2VjdXJpdHkgb3JpZ2luIG9yIGVtcHR5IGJsb2NrcyAo
aW4gd2hpY2ggY2FzZSB3ZSB6ZXJvIHRoZSBibG9jayBhbmQgY2hhbmdlCisgICAgICAgICAgaXRz
IHNlY3VyaXR5IG9yaWdpbikuCisgICAgICAgIAorICAgICAgICBXZWJDb3JlIGRldGVybWluZXMg
dGhlIFRMQy1HbG9iYWxPYmplY3QgbWFwcGluZy4gQnkgZGVmYXVsdCwgZ2xvYmFsIG9iamVjdHMg
d291bGQgc2ltcGx5IHVzZQorICAgICAgICB0aGUgVk0ncyBkZWZhdWx0IFRMQy4gV2ViQ29yZSBt
YWtlcyBpdCBzbyB0aGF0IERPTSB3aW5kb3dzIChidXQgbm90IHdvcmtlciBnbG9iYWwgb2JqZWN0
cykgZ2V0CisgICAgICAgIGEgVExDIGJhc2VkIG9uIHRoZWlyIGRvY3VtZW50J3MgU2VjdXJpdHlP
cmlnaW4uCisgICAgICAgIAorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogaGVhcC9CbG9j
a0RpcmVjdG9yeS5jcHA6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5OjpmaW5kQmxvY2tG
b3JBbGxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OnByZXBhcmVGb3JB
bGxvY2F0aW9uKToKKyAgICAgICAgKiBoZWFwL0Jsb2NrRGlyZWN0b3J5Lmg6CisgICAgICAgICog
aGVhcC9Mb2NhbEFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjpM
b2NhbEFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjpyZXNldCk6Cisg
ICAgICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjp+TG9jYWxBbGxvY2F0b3IpOgorICAgICAgICAo
SlNDOjpMb2NhbEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6Okxv
Y2FsQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKToKKyAgICAgICAgKiBo
ZWFwL0xvY2FsQWxsb2NhdG9yLmg6CisgICAgICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjp0bGMg
Y29uc3QpOgorICAgICAgICAqIGhlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwOgor
ICAgICAgICAqIGhlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaDoKKyAgICAgICAgKiBo
ZWFwL01hcmtlZEJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6
YXNzb2NpYXRlV2l0aE9yaWdpbik6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAg
ICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpzZWN1cml0eU9yaWdpblRva2VuIGNvbnN0
KToKKyAgICAgICAgKiBoZWFwL1NlY3VyaXR5T3JpZ2luVG9rZW4uY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6dW5pcXVlU2VjdXJpdHlPcmlnaW5Ub2tlbik6CisgICAgICAgICogaGVhcC9TZWN1
cml0eU9yaWdpblRva2VuLmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAvVGhyZWFkTG9jYWxDYWNo
ZS5jcHA6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGU6OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OlRocmVhZExvY2FsQ2FjaGU6OlRocmVhZExvY2FsQ2FjaGUpOgorICAgICAgICAoSlND
OjpUaHJlYWRMb2NhbENhY2hlOjphbGxvY2F0ZURhdGEpOgorICAgICAgICAoSlNDOjpUaHJlYWRM
b2NhbENhY2hlOjppbnN0YWxsU2xvdyk6CisgICAgICAgICogaGVhcC9UaHJlYWRMb2NhbENhY2hl
Lmg6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGU6OnNlY3VyaXR5T3JpZ2luVG9rZW4g
Y29uc3QpOgorICAgICAgICAqIGhlYXAvVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFsbCk6CisgICAgICAgICogcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpKU0dsb2Jh
bE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpjcmVhdGVUaHJlYWRMb2Nh
bENhY2hlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsT2JqZWN0Ojp0aHJlYWRMb2NhbENhY2hlKToKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxPYmplY3Q6OnRocmVhZExvY2FsQ2FjaGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcDoKKyAgICAgICAgKEpTQzo6Vk1FbnRyeVNjb3BlOjpW
TUVudHJ5U2NvcGUpOgorICAgICAgICAoSlNDOjpWTUVudHJ5U2NvcGU6On5WTUVudHJ5U2NvcGUp
OgorICAgICAgICAqIHJ1bnRpbWUvVk1FbnRyeVNjb3BlLmg6CisKIDIwMTgtMDEtMjkgIFl1c3Vr
ZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgW0pTQ10gSW1wbGVt
ZW50IHRyaW1TdGFydCBhbmQgdHJpbUVuZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1Nv
dXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4
dAkocmV2aXNpb24gMjI3ODQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNy0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vCiAvLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIC8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTEyLDYgKzUxMiw3IEBAIGhlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3Bw
CiBoZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNwcAogaGVhcC9NdXRhdG9yU2NoZWR1bGVy
LmNwcAogaGVhcC9NdXRhdG9yU3RhdGUuY3BwCitoZWFwL1NlY3VyaXR5T3JpZ2luVG9rZW4uY3Bw
CiBoZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAogaGVhcC9TbG90VmlzaXRvci5jcHAK
IGhlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjc4NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMjk0LDYgKzI5NCw3IEBACiAJCTBGNDI2QTQ4MTQ2MENCQjMwMDEzMUY4RiAvKiBWYWx1ZVJl
Y292ZXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjQyNkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTQ5MTQ2MENCQjcwMDEz
MUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjQyNkE0QjE0NjBDRDZFMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8q
IERhdGFGb3JtYXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRjQyQjNDMzIwMUVDOUZGMDAzNTcwMzEgLyogU2VjdXJpdHlPcmlnaW5Ub2tlbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MkIzQzIy
MDFFQzlGRDAwMzU3MDMxIC8qIFNlY3VyaXR5T3JpZ2luVG9rZW4uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQzMTczODE0NkJBQzY5MDA3RTM4
OTAgLyogTGlzdGFibGVIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjQzMTczNjE0NkJBQzY1MDA3RTM4OTAgLyogTGlzdGFibGVIYW5kbGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0
NTcwMzkxQkU0NEM5MTAwNjJBNjI5IC8qIEFpckVsaW1pbmF0ZURlYWRDb2RlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ1NzAzNzFCRTQ0QzkxMDA2
MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENvZGUuaCAqLzsgfTsKIAkJMEY0NTcwM0QxQkU0NUYw
QTAwNjJBNjI5IC8qIEFpclJlcG9ydFVzZWRSZWdpc3RlcnMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDU3MDNCMUJFNDVGMEEwMDYyQTYyOSAvKiBB
aXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmggKi87IH07CkBAIC0yMjYyLDYgKzIyNjMsOCBAQAogCQkw
RjQyNkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVJlY292ZXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNDI2QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlydHVhbFJlZ2lzdGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAvKiBEYXRh
Rm9ybWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFGb3JtYXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0MkIzQzAyMDFFQjUwOTAwMzU3MDMxIC8q
IEFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBbGxv
Y2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjQyQjNDMjIwMUVDOUZE
MDAzNTcwMzEgLyogU2VjdXJpdHlPcmlnaW5Ub2tlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTZWN1cml0eU9yaWdpblRva2VuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNDMxNzM2MTQ2QkFDNjUwMDdFMzg5MCAvKiBMaXN0YWJsZUhhbmRsZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGlzdGFibGVIYW5kbGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDU3MDM2MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGlt
aW5hdGVEZWFkQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBB
aXJFbGltaW5hdGVEZWFkQ29kZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyRWxpbWluYXRlRGVhZENv
ZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ1NzAzNzFCRTQ0QzkxMDA2
MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQWlyRWxpbWluYXRlRGVhZENvZGUuaDsgcGF0aCA9IGIzL2Fpci9BaXJFbGltaW5h
dGVEZWFkQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTU1OSwyMSArNTU2
MiwxNCBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyogaGVhcCAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMEY3NUEwNTQyMDBEMjVFRjAwMzhF
MkNGIC8qIEFsbG9jYXRvci5oICovLAotCQkJCTBGNzVBMDVEMjAwRDI1RjEwMDM4RTJDRiAvKiBB
bGxvY2F0b3JJbmxpbmVzLmggKi8sCi0JCQkJMEY3NUEwNTkyMDBEMjVGMDAwMzhFMkNGIC8qIExv
Y2FsQWxsb2NhdG9yLmNwcCAqLywKLQkJCQkwRjc1QTA1NzIwMEQyNUYwMDAzOEUyQ0YgLyogTG9j
YWxBbGxvY2F0b3IuaCAqLywKLQkJCQkwRjc1QTA1QTIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxB
bGxvY2F0b3JJbmxpbmVzLmggKi8sCi0JCQkJMEY3NUEwNTgyMDBEMjVGMDAwMzhFMkNGIC8qIFRo
cmVhZExvY2FsQ2FjaGUuY3BwICovLAotCQkJCTBGNzVBMDU1MjAwRDI1RUYwMDM4RTJDRiAvKiBU
aHJlYWRMb2NhbENhY2hlLmggKi8sCi0JCQkJMEY3NUEwNTYyMDBEMjVFRjAwMzhFMkNGIC8qIFRo
cmVhZExvY2FsQ2FjaGVJbmxpbmVzLmggKi8sCi0JCQkJMEY3NUEwNUIyMDBEMjVGMTAwMzhFMkNG
IC8qIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQuY3BwICovLAotCQkJCTBGNzVBMDVDMjAwRDI1RjEw
MDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlTGF5b3V0LmggKi8sCiAJCQkJMEZFQzNDNTAxRjMz
QTQxNjAwRjU5QjZDIC8qIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICovLAogCQkJCTBGRUMz
QzUxMUYzM0E0MTYwMEY1OUI2QyAvKiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggKi8sCiAJCQkJ
MEZBNzYyMEExREI5NTlGNjAwQjdBMkZEIC8qIEFsbG9jYXRpbmdTY29wZS5oICovLAogCQkJCTBG
RENFMTFCMUZBRTYxRjQwMDZGMzkwMSAvKiBBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCAqLywKKwkJ
CQkwRjQyQjNDMDIwMUVCNTA5MDAzNTcwMzEgLyogQWxsb2NhdG9yLmNwcCAqLywKKwkJCQkwRjc1
QTA1NDIwMEQyNUVGMDAzOEUyQ0YgLyogQWxsb2NhdG9yLmggKi8sCiAJCQkJMEYzMENCNUQxRkNF
NDZCNDAwNEI1MzIzIC8qIEFsbG9jYXRvckZvck1vZGUuaCAqLywKKwkJCQkwRjc1QTA1RDIwMEQy
NUYxMDAzOEUyQ0YgLyogQWxsb2NhdG9ySW5saW5lcy5oICovLAogCQkJCTBGQjQ2NzdFMUZEREE2
RTUwMDNGQ0IwOSAvKiBBdG9tSW5kaWNlcy5oICovLAogCQkJCUMyQjkxNkM0MTREQTA0MEMwMENC
QUM4NiAvKiBCbG9ja0RpcmVjdG9yeS5jcHAgKi8sCiAJCQkJQzJCOTE2QzExNERBMDE0RTAwQ0JB
Qzg2IC8qIEJsb2NrRGlyZWN0b3J5LmggKi8sCkBAIC01Njc0LDYgKzU2NzAsOSBAQAogCQkJCTBG
MDcwQTQ1MUQ1NDNBODkwMDZFNzIzMiAvKiBMYXJnZUFsbG9jYXRpb24uY3BwICovLAogCQkJCTBG
MDcwQTQ2MUQ1NDNBODkwMDZFNzIzMiAvKiBMYXJnZUFsbG9jYXRpb24uaCAqLywKIAkJCQkwRjQz
MTczNjE0NkJBQzY1MDA3RTM4OTAgLyogTGlzdGFibGVIYW5kbGVyLmggKi8sCisJCQkJMEY3NUEw
NTkyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9yLmNwcCAqLywKKwkJCQkwRjc1QTA1
NzIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3IuaCAqLywKKwkJCQkwRjc1QTA1QTIw
MEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3JJbmxpbmVzLmggKi8sCiAJCQkJMEYyMDhB
RDYxREYwOTI1QTAwN0QzMjY5IC8qIExvY2tEdXJpbmdNYXJraW5nLmggKi8sCiAJCQkJMTRCNzIz
M0YxMkQ3RDBEQTAwM0JENUVEIC8qIE1hY2hpbmVTdGFja01hcmtlci5jcHAgKi8sCiAJCQkJMTRC
NzIzNDAxMkQ3RDBEQTAwM0JENUVEIC8qIE1hY2hpbmVTdGFja01hcmtlci5oICovLApAQCAtNTcw
Myw2ICs1NzAyLDcgQEAKIAkJCQkwRkQwRTVFRjFFNDZCRjIzMDAwNkFCMDggLyogUmVnaXN0ZXJT
dGF0ZS5oICovLAogCQkJCTBGN0NGOTRFMURCRUVFODYwMDk4Q0MxMiAvKiBSZWxlYXNlSGVhcEFj
Y2Vzc1Njb3BlLmggKi8sCiAJCQkJMEYyQzYzQTkxRTRGQTQyQzAwQzEzODM5IC8qIFJ1bm5pbmdT
Y29wZS5oICovLAorCQkJCTBGNDJCM0MyMjAxRUM5RkQwMDM1NzAzMSAvKiBTZWN1cml0eU9yaWdp
blRva2VuLmggKi8sCiAJCQkJMEY0RDhDNzYxRkNBM0NGMjAwMUQzMkFDIC8qIFNpbXBsZU1hcmtp
bmdDb25zdHJhaW50LmNwcCAqLywKIAkJCQkwRjREOEM3NzFGQ0EzQ0YzMDAxRDMyQUMgLyogU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuaCAqLywKIAkJCQlDMjI1NDk0MjE1RjdEQkFBMDA2NUU4OTgg
LyogU2xvdFZpc2l0b3IuY3BwICovLApAQCAtNTcyNCw2ICs1NzI0LDExIEBACiAJCQkJMEZENzlB
MkMxRUJCQkRCMjAwREE4OEQzIC8qIFN5bmNocm9ub3VzbmVzcy5oICovLAogCQkJCTBGMUZCMzhB
MUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVs
ZXIuY3BwICovLAogCQkJCTBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0
b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLywKKwkJCQkwRjc1QTA1ODIwMEQyNUYwMDAz
OEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZS5jcHAgKi8sCisJCQkJMEY3NUEwNTUyMDBEMjVFRjAw
MzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGUuaCAqLywKKwkJCQkwRjc1QTA1NjIwMEQyNUVGMDAz
OEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaCAqLywKKwkJCQkwRjc1QTA1QjIwMEQy
NUYxMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUxheW91dC5jcHAgKi8sCisJCQkJMEY3NUEw
NUMyMDBEMjVGMTAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQuaCAqLywKIAkJCQkx
NDE0NDhDQzEzQTE3ODM3MDBGNUJBMUEgLyogVGlueUJsb29tRmlsdGVyLmggKi8sCiAJCQkJMEY1
RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5IC8qIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCAqLywKIAkJ
CQkwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi8sCkBAIC04NTIy
LDYgKzg1MjcsNyBAQAogCQkJCTBGN0MzOUZGMUM5MEM1NUIwMDQ4MDE1MSAvKiBERkdPcEluZm8u
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0ZFMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkU1NzE0
MURBRjEwMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNDJC
M0MzMjAxRUM5RkYwMDM1NzAzMSAvKiBTZWN1cml0eU9yaWdpblRva2VuLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkQ4QTMyNjE3RDUxRjU3MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0
aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAv
KiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFQzE3MTc4RTczMDA2OTBD
N0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcAkocmV2aXNpb24gMjI3ODQ5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1
ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5oIgorI2lu
Y2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVk0uaCIKICNpbmNs
dWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIApAQCAtODAsMTQgKzgxLDIwIEBAIE1hcmtlZEJsb2Nr
OjpIYW5kbGUqIEJsb2NrRGlyZWN0b3J5OjpmaW4KICAgICByZXR1cm4gbV9ibG9ja3NbbV9lbXB0
eUN1cnNvcl07CiB9CiAKLU1hcmtlZEJsb2NrOjpIYW5kbGUqIEJsb2NrRGlyZWN0b3J5OjpmaW5k
QmxvY2tGb3JBbGxvY2F0aW9uKCkKK01hcmtlZEJsb2NrOjpIYW5kbGUqIEJsb2NrRGlyZWN0b3J5
OjpmaW5kQmxvY2tGb3JBbGxvY2F0aW9uKExvY2FsQWxsb2NhdG9yJiBhbGxvY2F0b3IpCiB7Ci0g
ICAgbV9hbGxvY2F0aW9uQ3Vyc29yID0gKG1fY2FuQWxsb2NhdGVCdXROb3RFbXB0eSB8IG1fZW1w
dHkpLmZpbmRCaXQobV9hbGxvY2F0aW9uQ3Vyc29yLCB0cnVlKTsKLSAgICBpZiAobV9hbGxvY2F0
aW9uQ3Vyc29yID49IG1fYmxvY2tzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgCi0gICAgc2V0SXNDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwg
bV9hbGxvY2F0aW9uQ3Vyc29yLCBmYWxzZSk7Ci0gICAgcmV0dXJuIG1fYmxvY2tzW21fYWxsb2Nh
dGlvbkN1cnNvcl07CisgICAgZm9yICg7OykgeworICAgICAgICBhbGxvY2F0b3IubV9hbGxvY2F0
aW9uQ3Vyc29yID0gKG1fY2FuQWxsb2NhdGVCdXROb3RFbXB0eSB8IG1fZW1wdHkpLmZpbmRCaXQo
YWxsb2NhdG9yLm1fYWxsb2NhdGlvbkN1cnNvciwgdHJ1ZSk7CisgICAgICAgIGlmIChhbGxvY2F0
b3IubV9hbGxvY2F0aW9uQ3Vyc29yID49IG1fYmxvY2tzLnNpemUoKSkKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IGJsb2NrSW5kZXggPSBhbGxv
Y2F0b3IubV9hbGxvY2F0aW9uQ3Vyc29yKys7CisgICAgICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUq
IHJlc3VsdCA9IG1fYmxvY2tzW2Jsb2NrSW5kZXhdOworICAgICAgICBpZiAocmVzdWx0LT5zZWN1
cml0eU9yaWdpblRva2VuKCkgPT0gYWxsb2NhdG9yLnRsYygpLT5zZWN1cml0eU9yaWdpblRva2Vu
KCkpIHsKKyAgICAgICAgICAgIHNldElzQ2FuQWxsb2NhdGVCdXROb3RFbXB0eShOb0xvY2tpbmdO
ZWNlc3NhcnksIGJsb2NrSW5kZXgsIGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIH0KKyAgICB9CiB9CiAKIE1hcmtlZEJsb2NrOjpIYW5kbGUqIEJsb2NrRGlyZWN0
b3J5Ojp0cnlBbGxvY2F0ZUJsb2NrKCkKQEAgLTE4Myw4ICsxOTAsNiBAQCB2b2lkIEJsb2NrRGly
ZWN0b3J5OjpwcmVwYXJlRm9yQWxsb2NhdGlvCiAgICAgICAgICAgICBhbGxvY2F0b3ItPnByZXBh
cmVGb3JBbGxvY2F0aW9uKCk7CiAgICAgICAgIH0pOwogICAgIAotICAgIG1fYWxsb2NhdGlvbkN1
cnNvciA9IDA7Ci0gICAgbV9lbXB0eUN1cnNvciA9IDA7CiAgICAgbV91bnN3ZXB0Q3Vyc29yID0g
MDsKICAgICAKICAgICBtX2VkZW4uY2xlYXJBbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuaAkocmV2aXNpb24gMjI3ODQ5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuaAkod29ya2luZyBjb3B5KQpAQCAt
NDMsNiArNDMsNyBAQCBjbGFzcyBIZWFwOwogY2xhc3MgSXNvQ2VsbFNldDsKIGNsYXNzIE1hcmtl
ZFNwYWNlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworY2xhc3MgVGhyZWFkTG9jYWxD
YWNoZTsKIGNsYXNzIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ7CiAKICNkZWZpbmUgRk9SX0VBQ0hf
QkxPQ0tfRElSRUNUT1JZX0JJVChtYWNybykgXApAQCAtMTYyLDEyICsxNjMsMTMgQEAgcHVibGlj
OgogICAgIHZvaWQgZHVtcEJpdHMoUHJpbnRTdHJlYW0mID0gV1RGOjpkYXRhRmlsZSgpKTsKICAg
ICAKIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIExvY2FsQWxsb2NhdG9yOwogICAgIGZyaWVu
ZCBjbGFzcyBJc29DZWxsU2V0OworICAgIGZyaWVuZCBjbGFzcyBMb2NhbEFsbG9jYXRvcjsKKyAg
ICBmcmllbmQgY2xhc3MgTG9jYWxTaWRlQWxsb2NhdG9yOwogICAgIGZyaWVuZCBjbGFzcyBNYXJr
ZWRCbG9jazsKICAgICBmcmllbmQgY2xhc3MgVGhyZWFkTG9jYWxDYWNoZUxheW91dDsKICAgICAK
LSAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBmaW5kQmxvY2tGb3JBbGxvY2F0aW9uKCk7CisgICAg
TWFya2VkQmxvY2s6OkhhbmRsZSogZmluZEJsb2NrRm9yQWxsb2NhdGlvbihMb2NhbEFsbG9jYXRv
ciYpOwogICAgIAogICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIHRyeUFsbG9jYXRlQmxvY2soKTsK
ICAgICAKQEAgLTE4NCw4ICsxODYsNyBAQCBwcml2YXRlOgogICAgIAogICAgIC8vIEFmdGVyIHlv
dSBkbyBzb21ldGhpbmcgdG8gYSBibG9jayBiYXNlZCBvbiBvbmUgb2YgdGhlc2UgY3Vyc29ycywg
eW91IGNsZWFyIHRoZSBiaXQgaW4gdGhlCiAgICAgLy8gY29ycmVzcG9uZGluZyBiaXR2ZWN0b3Ig
YW5kIGxlYXZlIHRoZSBjdXJzb3Igd2hlcmUgaXQgd2FzLgotICAgIHNpemVfdCBtX2FsbG9jYXRp
b25DdXJzb3IgeyAwIH07IC8vIFBvaW50cyB0byB0aGUgbmV4dCBibG9jayB0aGF0IGlzIGEgY2Fu
ZGlkYXRlIGZvciBhbGxvY2F0aW9uLgotICAgIHNpemVfdCBtX2VtcHR5Q3Vyc29yIHsgMCB9OyAv
LyBQb2ludHMgdG8gdGhlIG5leHQgYmxvY2sgdGhhdCBpcyBhIGNhbmRpZGF0ZSBmb3IgZW1wdHkg
YWxsb2NhdGlvbiAoYWxsb2NhdGluZyBpbiBlbXB0eSBibG9ja3MpLgorICAgIHNpemVfdCBtX2Vt
cHR5Q3Vyc29yIHsgMCB9OwogICAgIHNpemVfdCBtX3Vuc3dlcHRDdXJzb3IgeyAwIH07IC8vIFBv
aW50cyB0byB0aGUgbmV4dCBibG9jayB0aGF0IGlzIGEgY2FuZGlkYXRlIGZvciBpbmNyZW1lbnRh
bCBzd2VlcGluZy4KICAgICAKICAgICB1bnNpZ25lZCBtX2NlbGxTaXplOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjI3
ODQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiw5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1Mb2Nh
bEFsbG9jYXRvcjo6TG9jYWxBbGxvY2F0b3IoQmxvY2tEaXJlY3RvcnkqIGRpcmVjdG9yeSkKLSAg
ICA6IG1fZGlyZWN0b3J5KGRpcmVjdG9yeSkKK0xvY2FsQWxsb2NhdG9yOjpMb2NhbEFsbG9jYXRv
cihUaHJlYWRMb2NhbENhY2hlKiB0bGMsIEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkpCisgICAg
OiBtX3RsYyh0bGMpCisgICAgLCBtX2RpcmVjdG9yeShkaXJlY3RvcnkpCiAgICAgLCBtX2NlbGxT
aXplKGRpcmVjdG9yeS0+bV9jZWxsU2l6ZSkKICAgICAsIG1fZnJlZUxpc3QobV9jZWxsU2l6ZSkK
IHsKQEAgLTQyLDExICs0MywxMyBAQCBMb2NhbEFsbG9jYXRvcjo6TG9jYWxBbGxvY2F0b3IoQmxv
Y2tEaXJlCiB9CiAKIExvY2FsQWxsb2NhdG9yOjpMb2NhbEFsbG9jYXRvcihMb2NhbEFsbG9jYXRv
ciYmIG90aGVyKQotICAgIDogbV9kaXJlY3Rvcnkob3RoZXIubV9kaXJlY3RvcnkpCisgICAgOiBt
X3RsYyhvdGhlci5tX3RsYykKKyAgICAsIG1fZGlyZWN0b3J5KG90aGVyLm1fZGlyZWN0b3J5KQog
ICAgICwgbV9jZWxsU2l6ZShvdGhlci5tX2NlbGxTaXplKQogICAgICwgbV9mcmVlTGlzdChXVEZN
b3ZlKG90aGVyLm1fZnJlZUxpc3QpKQogICAgICwgbV9jdXJyZW50QmxvY2sob3RoZXIubV9jdXJy
ZW50QmxvY2spCiAgICAgLCBtX2xhc3RBY3RpdmVCbG9jayhvdGhlci5tX2xhc3RBY3RpdmVCbG9j
aykKKyAgICAsIG1fYWxsb2NhdGlvbkN1cnNvcihvdGhlci5tX2FsbG9jYXRpb25DdXJzb3IpCiB7
CiAgICAgb3RoZXIucmVzZXQoKTsKICAgICBpZiAob3RoZXIuaXNPbkxpc3QoKSkgewpAQCAtNjEs
NiArNjQsNyBAQCB2b2lkIExvY2FsQWxsb2NhdG9yOjpyZXNldCgpCiAgICAgbV9mcmVlTGlzdC5j
bGVhcigpOwogICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKICAgICBtX2xhc3RBY3RpdmVC
bG9jayA9IG51bGxwdHI7CisgICAgbV9hbGxvY2F0aW9uQ3Vyc29yID0gMDsKIH0KIAogTG9jYWxB
bGxvY2F0b3I6On5Mb2NhbEFsbG9jYXRvcigpCkBAIC04MCw2ICs4NCwxNSBAQCBMb2NhbEFsbG9j
YXRvcjo6fkxvY2FsQWxsb2NhdG9yKCkKICAgICAvLyAgIHRoYXQgaXQgaXMgbm90IHJlYWNoYWJs
ZS4gVGhlcmVmb3JlLCB0aGUgVExDIHNob3VsZCBzdGlsbCBiZSBpbiBhIGZ1bGx5IHJlc2V0IHN0
YXRlIGF0IHRoZQogICAgIC8vICAgdGltZSBvZiBkZXN0cnVjdGlvbiBiZWNhdXNlIGZvciBpdCB0
byBnZXQgaW50byBhbnkgb3RoZXIgc3RhdGUsIHNvbWVvbmUgbXVzdCBoYXZlIGFsbG9jYXRlZAog
ICAgIC8vICAgaW4gaXQgKHdoaWNoIGlzIGltcG9zc2libGUgYmVjYXVzZSBpdCdzIHN1cHBvc2Vk
bHkgdW5yZWFjaGFibGUpLgorICAgIC8vCisgICAgLy8gTXkgYmlnZ2VzdCB3b3JyeSB3aXRoIHRo
ZXNlIGFzc2VydGlvbnMgaXMgdGhhdCB0aGVyZSB3aWxsIGJlIHNvbWUgVExDIHRoYXQgZ2V0cyBz
ZXQgYXMgdGhlCisgICAgLy8gY3VycmVudCBvbmUgYnV0IHRoZW4gbmV2ZXIgcmVzZXQsIGFuZCBp
biB0aGUgbWVhbnRpbWUgdGhlIGdsb2JhbCBvYmplY3QgdGhhdCBvd25zIGl0IGdldHMKKyAgICAv
LyBkZXN0cm95ZWQuCisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgaWYgd2UgZGlkIGhvbGQgb250
byBzb21lIG1lbW9yeSBhbmQgd2Ugd2FudGVkIHRvIHJldHVybiBpdCB0aGVuIHRoaXMgY291bGQg
YmUgd2VpcmQuCisgICAgLy8gV2Ugd291bGQgcG90ZW50aWFsbHkgaGF2ZSB0byBzdG9wQWxsb2Nh
dGluZygpLiBUaGF0IHdvdWxkIG1lYW4gaGF2aW5nIHRvIHJldHVybiBhIGJsb2NrIHRvIHRoZQor
ICAgIC8vIEJsb2NrRGlyZWN0b3J5LiBJdCdzIG5vdCBjbGVhciB0aGF0IHRoZSBCbG9ja0RpcmVj
dG9yeSBpcyBwcmVwYXJlZCB0byBoYW5kbGUgdGhhdCBkdXJpbmcKKyAgICAvLyBzd2VlcGluZyBh
bm90aGVyIGJsb2NrLCBmb3IgZXhhbXBsZS4KICAgICBib29sIG9rID0gdHJ1ZTsKICAgICBpZiAo
IW1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpIHsKICAgICAgICAgZGF0YUxvZygiRkFU
QUw6ICIsIFJhd1BvaW50ZXIodGhpcyksICItPn5Mb2NhbEFsbG9jYXRvciBoYXMgbm9uLWVtcHR5
IGZyZWUtbGlzdC5cbiIpOwpAQCAtMTY0LDYgKzE3Nyw3IEBAIHZvaWQqIExvY2FsQWxsb2NhdG9y
OjphbGxvY2F0ZVNsb3dDYXNlKEcKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQorICAgIGJsb2NrLT5hc3NvY2lhdGVXaXRoT3JpZ2luKG1fdGxjLT5zZWN1
cml0eU9yaWdpblRva2VuKCkpOwogICAgIG1fZGlyZWN0b3J5LT5hZGRCbG9jayhibG9jayk7CiAg
ICAgcmVzdWx0ID0gYWxsb2NhdGVJbihibG9jayk7CiAgICAgQVNTRVJUKHJlc3VsdCk7CkBAIC0y
MDEsNyArMjE1LDcgQEAgdm9pZCogTG9jYWxBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dAog
ICAgIEFTU0VSVChtX2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKICAgICAKICAgICBm
b3IgKDs7KSB7Ci0gICAgICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9kaXJlY3Rv
cnktPmZpbmRCbG9ja0ZvckFsbG9jYXRpb24oKTsKKyAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRs
ZSogYmxvY2sgPSBtX2RpcmVjdG9yeS0+ZmluZEJsb2NrRm9yQWxsb2NhdGlvbigqdGhpcyk7CiAg
ICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICBicmVhazsKIApAQCAtMjIwLDYgKzIzNCw3
IEBAIHZvaWQqIExvY2FsQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXQKICAgICAgICAgICAg
IC8vIGJlY2F1c2UgdGhlcmUgaXMgYSByZW1vdGUgY2hhbmNlIHRoYXQgYSBibG9jayBtYXkgaGF2
ZSBib3RoIGNhbkFsbG9jYXRlQnV0Tm90RW1wdHkKICAgICAgICAgICAgIC8vIGFuZCBlbXB0eSBz
ZXQgYXQgdGhlIHNhbWUgdGltZS4KICAgICAgICAgICAgIGJsb2NrLT5yZW1vdmVGcm9tRGlyZWN0
b3J5KCk7CisgICAgICAgICAgICBibG9jay0+YXNzb2NpYXRlV2l0aE9yaWdpbihtX3RsYy0+c2Vj
dXJpdHlPcmlnaW5Ub2tlbigpKTsKICAgICAgICAgICAgIG1fZGlyZWN0b3J5LT5hZGRCbG9jayhi
bG9jayk7CiAgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVJbihibG9jayk7CiAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuaAkocmV2
aXNpb24gMjI3ODQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTIgKzMzLDEzIEBAIG5hbWVzcGFjZSBKU0Mgewog
CiBjbGFzcyBCbG9ja0RpcmVjdG9yeTsKIGNsYXNzIEdDRGVmZXJyYWxDb250ZXh0OworY2xhc3Mg
VGhyZWFkTG9jYWxDYWNoZTsKIAogY2xhc3MgTG9jYWxBbGxvY2F0b3IgOiBwdWJsaWMgQmFzaWNS
YXdTZW50aW5lbE5vZGU8TG9jYWxBbGxvY2F0b3I+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShMb2NhbEFsbG9jYXRvcik7CiAgICAgCiBwdWJsaWM6Ci0gICAgTG9jYWxBbGxvY2F0b3IoQmxv
Y2tEaXJlY3RvcnkqKTsKKyAgICBMb2NhbEFsbG9jYXRvcihUaHJlYWRMb2NhbENhY2hlKiwgQmxv
Y2tEaXJlY3RvcnkqKTsKICAgICBMb2NhbEFsbG9jYXRvcihMb2NhbEFsbG9jYXRvciYmKTsKICAg
ICB+TG9jYWxBbGxvY2F0b3IoKTsKICAgICAKQEAgLTUzLDggKzU0LDEyIEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2VsbFNpemUoKTsKICAgICAKICAgICBib29sIGlz
RnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCopIGNvbnN0OworICAgIAorICAgIFRocmVhZExvY2Fs
Q2FjaGUqIHRsYygpIGNvbnN0IHsgcmV0dXJuIG1fdGxjOyB9CiAKIHByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIEJsb2NrRGlyZWN0b3J5OworICAgIAogICAgIHZvaWQgcmVzZXQoKTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0
KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKTsKICAgICB2b2lkIGRpZENvbnN1
bWVGcmVlTGlzdCgpOwpAQCAtNjMsMTEgKzY4LDE2IEBAIHByaXZhdGU6CiAgICAgdm9pZCogYWxs
b2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGRv
VGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqKTsKIAorICAgIFRocmVh
ZExvY2FsQ2FjaGUqIG1fdGxjOwogICAgIEJsb2NrRGlyZWN0b3J5KiBtX2RpcmVjdG9yeTsKICAg
ICB1bnNpZ25lZCBtX2NlbGxTaXplOwogICAgIEZyZWVMaXN0IG1fZnJlZUxpc3Q7CiAgICAgTWFy
a2VkQmxvY2s6OkhhbmRsZSogbV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CiAgICAgTWFya2Vk
QmxvY2s6OkhhbmRsZSogbV9sYXN0QWN0aXZlQmxvY2sgeyBudWxscHRyIH07CisgICAgCisgICAg
Ly8gQWZ0ZXIgeW91IGRvIHNvbWV0aGluZyB0byBhIGJsb2NrIGJhc2VkIG9uIG9uZSBvZiB0aGVz
ZSBjdXJzb3JzLCB5b3UgY2xlYXIgdGhlIGJpdCBpbiB0aGUKKyAgICAvLyBjb3JyZXNwb25kaW5n
IGJpdHZlY3RvciBhbmQgbGVhdmUgdGhlIGN1cnNvciB3aGVyZSBpdCB3YXMuCisgICAgc2l6ZV90
IG1fYWxsb2NhdGlvbkN1cnNvciB7IDAgfTsgLy8gUG9pbnRzIHRvIHRoZSBuZXh0IGJsb2NrIHRo
YXQgaXMgYSBjYW5kaWRhdGUgZm9yIGFsbG9jYXRpb24uCiB9OwogCiBpbmxpbmUgcHRyZGlmZl90
IExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5j
cHAJKHJldmlzaW9uIDIyNzg0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtT
dGFja01lcmdpbmdDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOSBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hcmtTdGFja01lcmdpbmdDb25zdHJh
aW50LmgiCiAKKyNpbmNsdWRlICJHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oIgorI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIE1hcmtTdGFja01lcmdpbmdDb25z
dHJhaW50OjpNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludChIZWFwJiBoZWFwKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29u
c3RyYWludC5oCShyZXZpc2lvbiAyMjc4NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsy
OSw5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBIZWFwOworY2xhc3MgU2xvdFZpc2l0
b3I7CisKIGNsYXNzIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50IDogcHVibGljIE1hcmtpbmdD
b25zdHJhaW50IHsKIHB1YmxpYzoKICAgICBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludChIZWFw
Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShy
ZXZpc2lvbiAyMjc4NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4OCw2ICs0ODgsMTUgQEAgYm9vbCBNYXJrZWRCbG9j
azo6SGFuZGxlOjppc0ZyZWVMaXN0ZWRDZQogICAgIHJldHVybiBtX2RpcmVjdG9yeS0+aXNGcmVl
TGlzdGVkQ2VsbCh0YXJnZXQpOwogfQogCit2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmFzc29j
aWF0ZVdpdGhPcmlnaW4oU2VjdXJpdHlPcmlnaW5Ub2tlbiBzZWN1cml0eU9yaWdpblRva2VuKQor
eworICAgIGlmIChtX3NlY3VyaXR5T3JpZ2luVG9rZW4gPT0gc2VjdXJpdHlPcmlnaW5Ub2tlbikK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1lbXNldCgmYmxvY2soKSwgMCwgZW5kQXRvbSAq
IGF0b21TaXplKTsKKyAgICBtX3NlY3VyaXR5T3JpZ2luVG9rZW4gPSBzZWN1cml0eU9yaWdpblRv
a2VuOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDIyNzg0OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJEZXN0cnVjdGlvbk1vZGUuaCIKICNpbmNs
dWRlICJIZWFwQ2VsbC5oIgogI2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgorI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luVG9rZW4uaCIKICNpbmNsdWRlICJXZWFrU2V0LmgiCiAjaW5jbHVkZSA8
d3RmL0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvQml0bWFwLmg+CkBAIC0xOTQsNiArMTk1LDkg
QEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgdm9pZCBkdW1wU3RhdGUoUHJpbnRTdHJlYW0m
KTsKICAgICAgICAgCisgICAgICAgIHZvaWQgYXNzb2NpYXRlV2l0aE9yaWdpbihTZWN1cml0eU9y
aWdpblRva2VuKTsKKyAgICAgICAgU2VjdXJpdHlPcmlnaW5Ub2tlbiBzZWN1cml0eU9yaWdpblRv
a2VuKCkgY29uc3QgeyByZXR1cm4gbV9zZWN1cml0eU9yaWdpblRva2VuOyB9CisgICAgICAgIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIEhhbmRsZShIZWFwJiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ciosIHZvaWQqKTsKICAgICAgICAgCkBAIC0yMjksNiArMjMzLDggQEAgcHVibGljOgogICAgICAg
ICBXZWFrU2V0IG1fd2Vha1NldDsKICAgICAgICAgCiAgICAgICAgIE1hcmtlZEJsb2NrKiBtX2Js
b2NrIHsgbnVsbHB0ciB9OworICAgICAgICAKKyAgICAgICAgU2VjdXJpdHlPcmlnaW5Ub2tlbiBt
X3NlY3VyaXR5T3JpZ2luVG9rZW4geyAwIH07CiAgICAgfTsKIAogcHJpdmF0ZTogICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TZWN1cml0eU9yaWdpblRva2VuLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TZWN1cml0eU9yaWdpblRva2Vu
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TZWN1cml0
eU9yaWdpblRva2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpblRva2VuLmgiCisKKyNpbmNsdWRlIDx3dGYvQXRv
bWljcy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworU2VjdXJpdHlPcmlnaW5Ub2tlbiB1bmlxdWVT
ZWN1cml0eU9yaWdpblRva2VuKCkKK3sKKyAgICBzdGF0aWMgU2VjdXJpdHlPcmlnaW5Ub2tlbiBj
b3VudGVyOworICAgIHJldHVybiBXVEY6OmF0b21pY0V4Y2hhbmdlQWRkKCZjb3VudGVyLCAxKSAr
IDE7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TZWN1cml0eU9yaWdpblRva2VuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2VjdXJpdHlPcmlnaW5Ub2tlbi5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NlY3VyaXR5T3JpZ2luVG9rZW4uaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiB1
aW50NjRfdCBTZWN1cml0eU9yaWdpblRva2VuOworCitKU19FWFBPUlRfUFJJVkFURSBTZWN1cml0
eU9yaWdpblRva2VuIHVuaXF1ZVNlY3VyaXR5T3JpZ2luVG9rZW4oKTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2Fj
aGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExv
Y2FsQ2FjaGUuY3BwCShyZXZpc2lvbiAyMjc4NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9UaHJlYWRMb2NhbENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTkgKzMyLDIy
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1SZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gVGhyZWFk
TG9jYWxDYWNoZTo6Y3JlYXRlKEhlYXAmIGhlYXApCitSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4g
VGhyZWFkTG9jYWxDYWNoZTo6Y3JlYXRlKEhlYXAmIGhlYXAsIFNlY3VyaXR5T3JpZ2luVG9rZW4g
c2VjdXJpdHlPcmlnaW5Ub2tlbikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRocmVhZExv
Y2FsQ2FjaGUoaGVhcCkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGhyZWFkTG9jYWxDYWNo
ZShoZWFwLCBzZWN1cml0eU9yaWdpblRva2VuKSk7CiB9CiAKLVRocmVhZExvY2FsQ2FjaGU6OlRo
cmVhZExvY2FsQ2FjaGUoSGVhcCYgaGVhcCkKK1RocmVhZExvY2FsQ2FjaGU6OlRocmVhZExvY2Fs
Q2FjaGUoSGVhcCYgaGVhcCwgU2VjdXJpdHlPcmlnaW5Ub2tlbiBzZWN1cml0eU9yaWdpblRva2Vu
KQogICAgIDogbV9oZWFwKGhlYXApCisgICAgLCBtX3NlY3VyaXR5T3JpZ2luVG9rZW4oc2VjdXJp
dHlPcmlnaW5Ub2tlbikKIHsKICAgICBtX2RhdGEgPSBhbGxvY2F0ZURhdGEoKTsKKyAgICBkYXRh
TG9nKFJhd1BvaW50ZXIodGhpcyksICI6IGNyZWF0aW5nIFRMQy5cbiIpOwogfQogCiBUaHJlYWRM
b2NhbENhY2hlOjp+VGhyZWFkTG9jYWxDYWNoZSgpCiB7CisgICAgZGF0YUxvZyhSYXdQb2ludGVy
KHRoaXMpLCAiOiBkZXN0cm95aW5nIFRMQy5cbiIpOwogICAgIGRlc3Ryb3lEYXRhKG1fZGF0YSk7
CiB9CiAKQEAgLTU5LDcgKzYyLDcgQEAgVGhyZWFkTG9jYWxDYWNoZTo6RGF0YSogVGhyZWFkTG9j
YWxDYWNoZQogICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9m
ZnNldCArPSBzaXplb2YoTG9jYWxBbGxvY2F0b3IpKQogICAgICAgICBuZXcgKCZhbGxvY2F0b3Io
KnJlc3VsdCwgb2Zmc2V0KSkgTG9jYWxBbGxvY2F0b3IoV1RGTW92ZShhbGxvY2F0b3IoKm1fZGF0
YSwgb2Zmc2V0KSkpOwogICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IG9sZFNpemU7IG9mZnNldCA8
IGxheW91dC5zaXplOyBvZmZzZXQgKz0gc2l6ZW9mKExvY2FsQWxsb2NhdG9yKSkKLSAgICAgICAg
bmV3ICgmYWxsb2NhdG9yKCpyZXN1bHQsIG9mZnNldCkpIExvY2FsQWxsb2NhdG9yKGxheW91dC5k
aXJlY3Rvcmllc1tvZmZzZXQgLyBzaXplb2YoTG9jYWxBbGxvY2F0b3IpXSk7CisgICAgICAgIG5l
dyAoJmFsbG9jYXRvcigqcmVzdWx0LCBvZmZzZXQpKSBMb2NhbEFsbG9jYXRvcih0aGlzLCBsYXlv
dXQuZGlyZWN0b3JpZXNbb2Zmc2V0IC8gc2l6ZW9mKExvY2FsQWxsb2NhdG9yKV0pOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKQEAgLTcwLDcgKzczLDcgQEAgdm9pZCBUaHJlYWRMb2NhbENhY2hl
OjpkZXN0cm95RGF0YShEYXRhKgogICAgIGZhc3RGcmVlKGRhdGEpOwogfQogCi12b2lkIFRocmVh
ZExvY2FsQ2FjaGU6Omluc3RhbGxTbG93KFZNJiB2bSkKK3ZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6
aW5zdGFsbFNsb3coVk0mIHZtLCBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4qIHByZXZpb3VzKQog
ewogI2lmIFVTRShGQVNUX1RMU19GT1JfVExDKQogICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBv
bmNlRmxhZzsKQEAgLTgzLDggKzg2LDEzIEBAIHZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFs
bFNsb3coVk0mIHYKICAgICAKICAgICByZWYoKTsKICAgICAKLSAgICBpZiAoUmVmUHRyPFRocmVh
ZExvY2FsQ2FjaGU+IG9sZENhY2hlID0gZ2V0KHZtKSkKLSAgICAgICAgb2xkQ2FjaGUtPmRlcmVm
KCk7CisgICAgaWYgKFRocmVhZExvY2FsQ2FjaGU6OkRhdGEqIG9sZENhY2hlRGF0YSA9IGdldElt
cGwodm0pKSB7CisgICAgICAgIFRocmVhZExvY2FsQ2FjaGUqIG9sZENhY2hlID0gb2xkQ2FjaGVE
YXRhLT5jYWNoZTsKKyAgICAgICAgaWYgKHByZXZpb3VzKQorICAgICAgICAgICAgKnByZXZpb3Vz
ID0gYWRvcHRSZWYob2xkQ2FjaGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvbGRDYWNo
ZS0+ZGVyZWYoKTsKKyAgICB9CiAgICAgCiAgICAgaW5zdGFsbERhdGEodm0sIG1fZGF0YSk7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5o
CShyZXZpc2lvbiAyMjc4NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRM
b2NhbENhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDkgKzI1LDEzIEBACiAKICNwcmFnbWEg
b25jZQogCisjaW5jbHVkZSAiQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmgiCisjaW5jbHVkZSAiTG9j
YWxBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpblRva2VuLmgiCiAjaW5jbHVk
ZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvRmFzdFRMUy5oPgogI2luY2x1ZGUg
PHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAog
bmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM5LDkgKzQzLDkgQEAgY2xhc3MgVGhyZWFkTG9jYWxDYWNo
ZSA6IHB1YmxpYyBUaHJlYWRTYQogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIAog
cHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gY3JlYXRlKEhlYXAm
KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+
IGNyZWF0ZShIZWFwJiwgU2VjdXJpdHlPcmlnaW5Ub2tlbiA9IHVuaXF1ZVNlY3VyaXR5T3JpZ2lu
VG9rZW4oKSk7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgflRocmVhZExvY2FsQ2FjaGUo
KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5UaHJlYWRMb2NhbENhY2hlKCk7CiAK
ICAgICBzdGF0aWMgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IGdldChWTSYpOwogICAgIApAQCAt
NDksNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgLy8gb3B0aW1pemluZyBmb3IgdGhlIGNhc2UgdGhh
dCB5b3UncmUganVzdCBpbnN0YWxsaW5nIHRoZSBjYWNoZSB0aGF0IGlzIGFscmVhZHkgaW5zdGFs
bGVkLiBUaGlzCiAgICAgLy8gYXNzdW1lcyBhIHJlbGF0aXZlbHkgc21hbGwgbnVtYmVyIG9mIGNh
Y2hlcyBvciBsb3cgY2hhbmNlIG9mIGFjdHVhbCBjb250ZXh0IHN3aXRjaCBjb21iaW5lZAogICAg
IC8vIHdpdGggcG9zc2libHkgaGlnaCByYXRlIG9mICJJIG1heSBoYXZlIGNvbnRleHQgc3dpdGNo
ZWQiIHNpdGVzIHRoYXQgY2FsbCB0aGlzIG91dCBvZiBwYXJhbm9pYS4KLSAgICB2b2lkIGluc3Rh
bGwoVk0mKTsKKyAgICB2b2lkIGluc3RhbGwoVk0mLCBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4q
ID0gbnVsbHB0cik7CiAgICAgCiAgICAgc3RhdGljIExvY2FsQWxsb2NhdG9yJiBhbGxvY2F0b3Io
Vk0mLCBzaXplX3Qgb2Zmc2V0KTsKICAgICAKQEAgLTU5LDExICs2MywxNCBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNpemVJbkRhdGEoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoRGF0YSwgc2l6ZSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRmly
c3RBbGxvY2F0b3JJbkRhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRGF0YSwgYWxsb2Nh
dG9yKTsgfQogICAgIAorICAgIFNlY3VyaXR5T3JpZ2luVG9rZW4gc2VjdXJpdHlPcmlnaW5Ub2tl
bigpIGNvbnN0IHsgcmV0dXJuIG1fc2VjdXJpdHlPcmlnaW5Ub2tlbjsgfQorCitwcm90ZWN0ZWQ6
ICAgIAorICAgIFRocmVhZExvY2FsQ2FjaGUoSGVhcCYsIFNlY3VyaXR5T3JpZ2luVG9rZW4pOwor
ICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgVk07CiAgICAgCi0gICAgVGhyZWFkTG9j
YWxDYWNoZShIZWFwJik7Ci0gICAgCiAgICAgc3RydWN0IERhdGEgewogICAgICAgICBzaXplX3Qg
c2l6ZTsKICAgICAgICAgVGhyZWFkTG9jYWxDYWNoZSogY2FjaGU7CkBAIC03Niw3ICs4Myw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBkZXN0cm95RGF0YShEYXRhKik7CiAgICAgc3RhdGljIExvY2Fs
QWxsb2NhdG9yJiBhbGxvY2F0b3IoRGF0YSYgZGF0YSwgc2l6ZV90IG9mZnNldCk7CiAKLSAgICB2
b2lkIGluc3RhbGxTbG93KFZNJik7CisgICAgdm9pZCBpbnN0YWxsU2xvdyhWTSYsIFJlZlB0cjxU
aHJlYWRMb2NhbENhY2hlPiopOwogICAgIHN0YXRpYyB2b2lkIGluc3RhbGxEYXRhKFZNJiwgRGF0
YSopOwogICAgIAogICAgIExvY2FsQWxsb2NhdG9yJiBhbGxvY2F0b3JTbG93KFZNJiwgc2l6ZV90
IG9mZnNldCk7CkBAIC05MSw2ICs5OCw4IEBAIHByaXZhdGU6CiAgICAgLy8gaXQncyBjb3JyZWN0
IGZvciBpbW1vcnRhbCBjYWNoZXMuCiAgICAgSGVhcCYgbV9oZWFwOwogICAgIERhdGEqIG1fZGF0
YSB7IG51bGxwdHIgfTsKKyAgICAKKyAgICBTZWN1cml0eU9yaWdpblRva2VuIG1fc2VjdXJpdHlP
cmlnaW5Ub2tlbjsKIAogI2lmIFVTRShGQVNUX1RMU19GT1JfVExDKQogICAgIHN0YXRpYyBjb25z
dCBwdGhyZWFkX2tleV90IHRsc0tleSA9IFdURl9HQ19UTENfS0VZOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oCShy
ZXZpc2lvbiAyMjc4NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2Nh
bENhY2hlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGUuaCIKKyNpbmNsdWRlICJWTS5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDcsMTEgKzQ4LDE0IEBAIGlubGluZSBSZWZQdHI8VGhy
ZWFkTG9jYWxDYWNoZT4gVGhyZWFkTG8KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotaW5saW5l
IHZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFsbChWTSYgdm0pCitpbmxpbmUgdm9pZCBUaHJl
YWRMb2NhbENhY2hlOjppbnN0YWxsKFZNJiB2bSwgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+KiBw
cmV2aW91cykKIHsKLSAgICBpZiAoZ2V0SW1wbCh2bSkgPT0gbV9kYXRhKQorICAgIGlmIChnZXRJ
bXBsKHZtKSA9PSBtX2RhdGEpIHsKKyAgICAgICAgaWYgKHByZXZpb3VzKQorICAgICAgICAgICAg
KnByZXZpb3VzID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuOwotICAgIGluc3RhbGxTbG93KHZt
KTsKKyAgICB9CisgICAgaW5zdGFsbFNsb3codm0sIHByZXZpb3VzKTsKIH0KIAogaW5saW5lIExv
Y2FsQWxsb2NhdG9yJiBUaHJlYWRMb2NhbENhY2hlOjphbGxvY2F0b3IoVk0mIHZtLCBzaXplX3Qg
b2Zmc2V0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCShyZXZpc2lvbiAyMjc4NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTEsNyArNDkxLDcgQEAg
cHVibGljOgogICAgIGNvbnN0IFJ1bnRpbWVGbGFncyYgcnVudGltZUZsYWdzKCkgY29uc3QgeyBy
ZXR1cm4gbV9ydW50aW1lRmxhZ3M7IH0KIAogcHJvdGVjdGVkOgotICAgIEpTX0VYUE9SVF9QUklW
QVRFIGV4cGxpY2l0IEpTR2xvYmFsT2JqZWN0KFZNJiwgU3RydWN0dXJlKiwgY29uc3QgR2xvYmFs
T2JqZWN0TWV0aG9kVGFibGUqID0gMCwgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+ID0gbnVsbHB0
cik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgZXhwbGljaXQgSlNHbG9iYWxPYmplY3QoVk0mLCBT
dHJ1Y3R1cmUqLCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSogPSBudWxscHRyLCBSZWZQ
dHI8VGhyZWFkTG9jYWxDYWNoZT4gPSBudWxscHRyKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwCShyZXZpc2lvbiAyMjc4NDkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw3ICs0MSw3IEBAIFZNRW50cnlTY29wZTo6Vk1FbnRyeVNjb3BlKFZNJiB2bSwgSlNH
bG8KICAgICA6IG1fdm0odm0pCiAgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpCiB7
Ci0gICAgZ2xvYmFsT2JqZWN0LT50aHJlYWRMb2NhbENhY2hlKCkuaW5zdGFsbCh2bSk7CisgICAg
Z2xvYmFsT2JqZWN0LT50aHJlYWRMb2NhbENhY2hlKCkuaW5zdGFsbCh2bSwgJm1fcHJldmlvdXNU
TEMpOwogICAgIEFTU0VSVCghRGlzYWxsb3dWTVJlZW50cnk6OmlzSW5FZmZlY3RPbkN1cnJlbnRU
aHJlYWQoKSk7CiAgICAgQVNTRVJUKFRocmVhZDo6Y3VycmVudCgpLnN0YWNrKCkuaXNHcm93aW5n
RG93bndhcmQoKSk7CiAgICAgaWYgKCF2bS5lbnRyeVNjb3BlKSB7CkBAIC03MSwxMSArNzEsMTQg
QEAgdm9pZCBWTUVudHJ5U2NvcGU6OmFkZERpZFBvcExpc3RlbmVyKHN0ZAogCiBWTUVudHJ5U2Nv
cGU6On5WTUVudHJ5U2NvcGUoKQogeworICAgIGlmIChtX3ByZXZpb3VzVExDKQorICAgICAgICBt
X3ByZXZpb3VzVExDLT5pbnN0YWxsKG1fdm0pOworICAgIAogICAgIGlmIChtX3ZtLmVudHJ5U2Nv
cGUgIT0gdGhpcykKICAgICAgICAgcmV0dXJuOwogCiAgICAgVHJhY2VQb2ludChWTUVudHJ5U2Nv
cGVFbmQpOwotCisgICAgCiAgICAgaWYgKG1fdm0ud2F0Y2hkb2coKSkKICAgICAgICAgbV92bS53
YXRjaGRvZygpLT5leGl0ZWRWTSgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTUVudHJ5U2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTUVudHJ5U2NvcGUuaAkocmV2aXNpb24gMjI3ODQ5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYg
KzMxLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKK2NsYXNz
IFRocmVhZExvY2FsQ2FjaGU7CiBjbGFzcyBWTTsKIAogY2xhc3MgVk1FbnRyeVNjb3BlIHsKQEAg
LTQ3LDYgKzQ4LDcgQEAgcHJpdmF0ZToKICAgICBWTSYgbV92bTsKICAgICBKU0dsb2JhbE9iamVj
dCogbV9nbG9iYWxPYmplY3Q7CiAgICAgVmVjdG9yPHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4+IG1f
ZGlkUG9wTGlzdGVuZXJzOworICAgIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBtX3ByZXZpb3Vz
VExDOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
Mjc5MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw2NiBAQAorMjAxOC0wMS0zMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgor
CisgICAgICAgIEdsb2JhbCBvYmplY3RzIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBUTENzIHRvIGFs
bG9jYXRlIGZyb20gZGlmZmVyZW50IGJsb2NrcyBmcm9tIGVhY2ggb3RoZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjIyNworCisgICAgICAgIFJl
dmlld2VkIGJ5IEFuZHkgRXN0ZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8g
Y2hhbmdlIGluIGJlaGF2aW9yLgorICAgICAgICAKKyAgICAgICAgQWRvcHQgSlNDIFRMQyBBUEkg
dG8gcHV0IGRpc3RhbmNlIGJldHdlZW4gb2JqZWN0cyBmcm9tIGRpZmZlcmVudCBzZWN1cml0eSBv
cmlnaW4uCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9oZWFwL1RocmVhZExvY2FsQ2Fj
aGUuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3Q6OkpTRE9NR2xvYmFsT2JqZWN0
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RP
TVdpbmRvd0Jhc2U6OkpTRE9NV2luZG93QmFzZSk6CisgICAgICAgICogcGFnZS9TZWN1cml0eU9y
aWdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6dGhyZWFkTG9jYWxD
YWNoZSk6CisgICAgICAgICogcGFnZS9TZWN1cml0eU9yaWdpbi5oOgorCisyMDE4LTAxLTMxICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR2xvYmFsIG9iamVjdHMg
c2hvdWxkIGJlIGFibGUgdG8gdXNlIFRMQ3MgdG8gYWxsb2NhdGUgZnJvbSBkaWZmZXJlbnQgYmxv
Y2tzIGZyb20gZWFjaCBvdGhlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTgyMjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gbmV3IGJlaGF2aW9yLgorICAgICAg
ICAKKyAgICAgICAgQWRvcHQgSlNDIFRMQyBBUEkgdG8gcHV0IGRpc3RhbmNlIGJldHdlZW4gb2Jq
ZWN0cyBmcm9tIGRpZmZlcmVudCBzZWN1cml0eSBvcmlnaW5zLiBXZWJDb3JlIGhhcworICAgICAg
ICBhIHN1YmNsYXNzIG9mIFRocmVhZExvY2FsQ2FjaGUgdGhhdCBzdXBwb3J0cyBoYXNoLWNvbnNp
bmcgYmFzZWQgb24gdGhlIHJlbGV2YW50IG9yaWdpbiBkYXRhLAorICAgICAgICB3aGljaCB3ZSBl
bmNhcHN1bGF0ZSB3aXRoIFRocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXkuCisgICAgICAgIAorICAg
ICAgICBXb3JrZXJzIGRvbid0IG9wdCBpbnRvIHRoaXMuIFRoZXkganVzdCBnZXQgdGhlIFZNJ3Mg
ZGVmYXVsdCBUTEMgYWxsIHRoZSB0aW1lLgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMv
aGVhcC9UaHJlYWRMb2NhbENhY2hlLmg6IEFkZGVkLgorICAgICAgICAqIFNvdXJjZXMudHh0Ogor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RP
TUdsb2JhbE9iamVjdDo6SlNET01HbG9iYWxPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRE9NR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dC
YXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6SlNET01XaW5kb3dC
YXNlKToKKyAgICAgICAgKiBwYWdlL09yaWdpblRocmVhZExvY2FsQ2FjaGUuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OnRocmVhZExvY2FsQ2FjaGVNYXApOgorICAgICAgICAoV2ViQ29y
ZTo6T3JpZ2luVGhyZWFkTG9jYWxDYWNoZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9y
aWdpblRocmVhZExvY2FsQ2FjaGU6On5PcmlnaW5UaHJlYWRMb2NhbENhY2hlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok9yaWdpblRocmVhZExvY2FsQ2FjaGU6Ok9yaWdpblRocmVhZExvY2FsQ2FjaGUp
OgorICAgICAgICAqIHBhZ2UvT3JpZ2luVGhyZWFkTG9jYWxDYWNoZS5oOiBBZGRlZC4KKyAgICAg
ICAgKiBwYWdlL1NlY3VyaXR5T3JpZ2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luOjp0aHJlYWRMb2NhbENhY2hlKToKKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5T3JpZ2lu
Lmg6CisgICAgICAgICogcGFnZS9UaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5Lmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6VGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleTo6VGhyZWFkTG9jYWxD
YWNoZU9yaWdpbktleSk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRMb2NhbENhY2hlT3JpZ2lu
S2V5OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZExvY2FsQ2Fj
aGVPcmlnaW5LZXk6Om9wZXJhdG9yIT0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFk
TG9jYWxDYWNoZU9yaWdpbktleTo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5Ojppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5OjpoYXNo
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXlIYXNo
OjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXlIYXNo
OjplcXVhbCk6CisKIDIwMTgtMDEtMzEgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdh
QGFwcGxlLmNvbT4KIAogICAgICAgICBCaXRtYXBJbWFnZTo6ZHJhd1BhdHRlcm4oKSBtYXkgbm90
IGRyYXcgYSBjb21wbGV0ZSBmcmFtZSBldmVuIGFmdGVyIGFsbCB0aGUgZGF0YSBpcyByZWNlaXZl
ZApJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyNzg0OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMzM0LDYgKzEzMzQsNyBAQCBwYWdlL01v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuY3BwCiBwYWdlL05hdmlnYXRvci5jcHAKIHBhZ2Uv
TmF2aWdhdG9yQmFzZS5jcHAKIHBhZ2UvT3JpZ2luQWNjZXNzRW50cnkuY3BwCitwYWdlL09yaWdp
blRocmVhZExvY2FsQ2FjaGUuY3BwCiBwYWdlL1BhZ2UuY3BwCiBwYWdlL1BhZ2VDb25maWd1cmF0
aW9uLmNwcAogcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAv
VGhyZWFkTG9jYWxDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMiBAQAorI3ByYWdt
YSBvbmNlCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVGhyZWFkTG9jYWxDYWNoZS5oPgpJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjI3ODQ5KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNDIsNiArMzQyLDggQEAKIAkJMEY1
ODBDRkYwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQmFja2luZy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1ODBDRkIwRjEyREU5QjAwNTFE
Njg5IC8qIFJlbmRlckxheWVyQmFja2luZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGNTgwRkEzMTQ5NjkzOTEwMEZCNUJEOCAvKiBXZWJUaWxl
ZEJhY2tpbmdMYXllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY1ODBGQTExNDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVyLmgg
Ki87IH07CiAJCTBGNTgwRkFGMTQ5ODAwRDQwMEZCNUJEOCAvKiBBbmltYXRpb25VdGlsaXRpZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTgwRkFF
MTQ5ODAwRDQwMEZCNUJEOCAvKiBBbmltYXRpb25VdGlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjVCNDA4NzIwMjEyQzRDMDA4MEY5
MTMgLyogVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QjQwODUyMDIxMkM0NjAwODBGOTEzIC8qIFRocmVh
ZExvY2FsQ2FjaGVPcmlnaW5LZXkuaCAqLzsgfTsKKwkJMEY1QjQwOEEyMDIxMkY3NzAwODBGOTEz
IC8qIE9yaWdpblRocmVhZExvY2FsQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUI0MDg4MjAyMTJGNzMwMDgwRjkxMyAvKiBPcmlnaW5UaHJl
YWRMb2NhbENhY2hlLmggKi87IH07CiAJCTBGNUI3QTU1MTBGNjVEN0EwMDM3NjMwMiAvKiBSZW5k
ZXJFbWJlZGRlZE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY1QjdBNTMxMEY2NUQ3QTAwMzc2MzAyIC8qIFJlbmRlckVtYmVkZGVkT2JqZWN0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1
RTIwMDYxOEU3NzFGQzAwM0VDM0U1IC8qIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RTIwMDUxOEU3NzFG
QzAwM0VDM0U1IC8qIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjA1QUVEMTVGOTQ4NDgwMDRERjBD
MCAvKiBTY3JvbGxpbmdDb25zdHJhaW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2MDVBRUIxNUY5NDg0ODAwNERGMEMwIC8qIFNjcm9sbGluZ0Nv
bnN0cmFpbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTU0OTYsNiArNTQ5OCw5IEBACiAJCTBGNTgwRkExMTQ5NjkzOTEwMEZCNUJEOCAvKiBX
ZWJUaWxlZEJhY2tpbmdMYXllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJUaWxlZEJhY2tpbmdMYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU4
MEZBMjE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJUaWxlZEJhY2tpbmdMYXllci5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1ODBGQUUxNDk4MDBENDAwRkI1QkQ4IC8q
IEFuaW1hdGlvblV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
bmltYXRpb25VdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1QjQw
ODUyMDIxMkM0NjAwODBGOTEzIC8qIFRocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVCNDA4ODIwMjEyRjczMDA4MEY5MTMgLyog
T3JpZ2luVGhyZWFkTG9jYWxDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBPcmlnaW5UaHJlYWRMb2NhbENhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGNUI0MDg5MjAyMTJGNzMwMDgwRjkxMyAvKiBPcmlnaW5UaHJlYWRMb2NhbENhY2hlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9yaWdpblRocmVhZExvY2FsQ2Fj
aGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVCN0E1MjEwRjY1RDdBMDAz
NzYzMDIgLyogUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjVCN0E1MzEwRjY1RDdBMDAzNzYzMDIgLyogUmVuZGVyRW1iZWRkZWRP
YmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyRW1iZWRkZWRP
YmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1RTIwMDUxOEU3NzFGQzAw
M0VDM0U1IC8qIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTk5MzYsOCArOTk0MSw4IEBACiAJCThBRjRFNTU0MTFEQzVBMzYwMDBF
RDNERSAvKiBQZXJmb3JtYW5jZU5hdmlnYXRpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFBlcmZvcm1hbmNlTmF2aWdhdGlvbi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CThBRjRFNTU5MTFEQzVBNjMwMDBFRDNERSAvKiBQZXJmb3JtYW5jZVRpbWluZy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQZXJmb3JtYW5jZVRpbWluZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4QUY0RTU1QTExREM1QTYzMDAwRUQzREUgLyogUGVyZm9ybWFu
Y2VUaW1pbmcuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFBlcmZvcm1hbmNlVGltaW5nLmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOEUzM0NEOTMyMDFBMjlDMTAwRTM5MDkz
IC8qIEdhcExlbmd0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBH
YXBMZW5ndGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4QkQzN0E2NzIwMUJC
MzlDMDAxMTczNEEgLyogUmVhZGFibGVTdHJlYW1DaHVuay5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFk
YWJsZVN0cmVhbUNodW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCThFMzNDRDkz
MjAxQTI5QzEwMEUzOTA5MyAvKiBHYXBMZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gR2FwTGVuZ3RoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOEU0Qzk2RDgxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTRmV0Y2hSZXNwb25zZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ZldGNoUmVzcG9uc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4RTRDOTZEOTFBRDQ0ODM1MDAzNjVBNTAgLyogSlNG
ZXRjaFJlc3BvbnNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmV0Y2hS
ZXNwb25zZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4RUM2Qzk2MTIwMUEyNTAx
MDBGQkZBNTMgLyogR2FwTGVuZ3RoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEdhcExlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTg4MjksNiArMTg4
MzQsOCBAQAogCQkJCTUxODJDMjRCMUYzMTNBRTAwMDU5QkE3QyAvKiBOYXZpZ2F0b3JTZXJ2aWNl
V29ya2VyLmlkbCAqLywKIAkJCQkwMDE0NjI4ODEwM0NEMURFMDAwQjIwREIgLyogT3JpZ2luQWNj
ZXNzRW50cnkuY3BwICovLAogCQkJCTAwMTQ2Mjg5MTAzQ0QxREUwMDBCMjBEQiAvKiBPcmlnaW5B
Y2Nlc3NFbnRyeS5oICovLAorCQkJCTBGNUI0MDg5MjAyMTJGNzMwMDgwRjkxMyAvKiBPcmlnaW5U
aHJlYWRMb2NhbENhY2hlLmNwcCAqLywKKwkJCQkwRjVCNDA4ODIwMjEyRjczMDA4MEY5MTMgLyog
T3JpZ2luVGhyZWFkTG9jYWxDYWNoZS5oICovLAogCQkJCTY1RkVBODY4MDk4MzNBREUwMEJFRDRB
QiAvKiBQYWdlLmNwcCAqLywKIAkJCQk2NUEyMTQ2NzA5N0EzMjkxMDBCOTA1MEEgLyogUGFnZS5o
ICovLAogCQkJCUNENUU1QjYwMUExNUYxNTYwMDBDNjA5RSAvKiBQYWdlQ29uZmlndXJhdGlvbi5j
cHAgKi8sCkBAIC0xODkxOCw2ICsxODkyNSw3IEBACiAJCQkJNjJDMTIxN0IxMUFCOUU3NzAwM0M0
NjJDIC8qIFN1c3BlbmRhYmxlVGltZXIuaCAqLywKIAkJCQkyRDRGOTZGMTFBMUVDQzI0MDA5OEJG
ODggLyogVGV4dEluZGljYXRvci5jcHAgKi8sCiAJCQkJMkQ0Rjk2RjIxQTFFQ0MyNDAwOThCRjg4
IC8qIFRleHRJbmRpY2F0b3IuaCAqLywKKwkJCQkwRjVCNDA4NTIwMjEyQzQ2MDA4MEY5MTMgLyog
VGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleS5oICovLAogCQkJCTFBRTc5RDQwMTg4REI2MUYwMDIy
MzlDMiAvKiBVc2VyQ29udGVudENvbnRyb2xsZXIuY3BwICovLAogCQkJCTFBRTc5RDQxMTg4REI2
MUYwMDIyMzlDMiAvKiBVc2VyQ29udGVudENvbnRyb2xsZXIuaCAqLywKIAkJCQk3QzNGMDFCRjFD
OEU1QUIxMDBBREQ5NjIgLyogVXNlckNvbnRlbnRQcm92aWRlci5jcHAgKi8sCkBAIC0yODA4Myw2
ICsyODA5MSw3IEBACiAJCQkJMUE4NUIyMTEwQTFCMjU4NzAwRDhDODdDIC8qIEpTSFRNTFVMaXN0
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU0QUJDRDUxMzhFQTBCNzAwNzFEMjkxIC8q
IEpTSFRNTFVua25vd25FbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDQ2MTQxNzBDRDY4
MjY5MDBGQURBNzUgLyogSlNIVE1MVmlkZW9FbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjVCNDA4NzIwMjEyQzRDMDA4MEY5MTMgLyogVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODFCRTIwRDMxMUY0QkMzMjAwOTE1REZBIC8qIEpTSURCQ3Vyc29y
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzNEOEVGMDFFMEIyMTQzMDAyM0IwODQgLyogSlNJREJD
dXJzb3JEaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUM1ODVBNjgzMTFENEZCMDgwMDRD
M0U0QiAvKiBKU0lEQkRhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTI4MjY2LDYgKzI4Mjc1
LDcgQEAKIAkJCQkwNzk2OURDMjE3RDE0MTUxMDA3RkY4NDIgLyogSlNSVENTdGF0c1JlcG9ydC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNUUyQzQzNkMxQkNGMDcxRTAwMDFFMkJDIC8qIEpTUlRDVHJh
Y2tFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQzAxQzMwQzI3NERERDAwOUY0RUM5IC8q
IEpTU2NyZWVuLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjVCNDA4QTIwMjEyRjc3MDA4MEY5MTMg
LyogT3JpZ2luVGhyZWFkTG9jYWxDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkRBMTVFQ0Ux
MkIwM0Y2MTAwM0E1ODNBIC8qIEpTU2NyaXB0UHJvY2Vzc29yTm9kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODM0NDc2RUYxREE1QkM1RTAwMkI2RUQyIC8qIEpTU2Nyb2xsVG9PcHRpb25zLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDRUQwNkFEMTFDNzc3NTQ4MDBGREZBRjEgLyogSlNTZWN1cml0eVBv
bGljeVZpb2xhdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDIyNzg0
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDggKzU2LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBpc1JlYWRhYmxlQgogCiBjb25zdCBDbGFzc0luZm8gSlNET01HbG9iYWxPYmplY3Q6OnNf
aW5mbyA9IHsgIkRPTUdsb2JhbE9iamVjdCIsICZKU0dsb2JhbE9iamVjdDo6c19pbmZvLCBudWxs
cHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRE9NR2xvYmFsT2JqZWN0KSB9Owog
Ci1KU0RPTUdsb2JhbE9iamVjdDo6SlNET01HbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgUmVmPERPTVdyYXBwZXJXb3JsZD4mJiB3b3JsZCwgY29uc3QgR2xvYmFsT2Jq
ZWN0TWV0aG9kVGFibGUqIGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQotICAgIDogSlNHbG9iYWxP
YmplY3Qodm0sIHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCitKU0RPTUdsb2Jh
bE9iamVjdDo6SlNET01HbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
UmVmPERPTVdyYXBwZXJXb3JsZD4mJiB3b3JsZCwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFi
bGUqIGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlLCBSZWZQdHI8SlNDOjpUaHJlYWRMb2NhbENhY2hl
PiB0aHJlYWRMb2NhbENhY2hlKQorICAgIDogSlNHbG9iYWxPYmplY3Qodm0sIHN0cnVjdHVyZSwg
Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUsIFdURk1vdmUodGhyZWFkTG9jYWxDYWNoZSkpCiAgICAg
LCBtX2N1cnJlbnRFdmVudCgwKQogICAgICwgbV93b3JsZChXVEZNb3ZlKHdvcmxkKSkKICAgICAs
IG1fd29ybGRJc05vcm1hbChtX3dvcmxkLT5pc05vcm1hbCgpKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyMjc4NDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiV2ViQ29yZUpTQnVpbHRpbklu
dGVybmFscy5oIgogI2luY2x1ZGUgPGhlYXAvSGVhcElubGluZXMuaD4KICNpbmNsdWRlIDxoZWFw
L0xvY2tEdXJpbmdNYXJraW5nLmg+CisjaW5jbHVkZSA8aGVhcC9UaHJlYWRMb2NhbENhY2hlLmg+
CiAjaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
U3RydWN0dXJlSW5saW5lcy5oPgogCkBAIC01MCw3ICs1MSw3IEBAIGNsYXNzIFdFQkNPUkVfRVhQ
T1JUIEpTRE9NR2xvYmFsT2JqZWN0IDoKIHByb3RlY3RlZDoKICAgICBzdHJ1Y3QgSlNET01HbG9i
YWxPYmplY3REYXRhOwogCi0gICAgSlNET01HbG9iYWxPYmplY3QoSlNDOjpWTSYsIEpTQzo6U3Ry
dWN0dXJlKiwgUmVmPERPTVdyYXBwZXJXb3JsZD4mJiwgY29uc3QgSlNDOjpHbG9iYWxPYmplY3RN
ZXRob2RUYWJsZSogPSAwKTsKKyAgICBKU0RPTUdsb2JhbE9iamVjdChKU0M6OlZNJiwgSlNDOjpT
dHJ1Y3R1cmUqLCBSZWY8RE9NV3JhcHBlcldvcmxkPiYmLCBjb25zdCBKU0M6Okdsb2JhbE9iamVj
dE1ldGhvZFRhYmxlKiA9IG51bGxwdHIsIFJlZlB0cjxKU0M6OlRocmVhZExvY2FsQ2FjaGU+ID0g
bnVsbHB0cik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlND
OjpWTSYsIEpTQzo6SlNPYmplY3QqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkocmV2aXNpb24gMjI3ODQ5KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzksNyArNzksNyBAQCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSBKU0RPTVdpbmRvCiB9
OwogCiBKU0RPTVdpbmRvd0Jhc2U6OkpTRE9NV2luZG93QmFzZShWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBSZWZQdHI8RE9NV2luZG93PiYmIHdpbmRvdywgSlNET01XaW5kb3dQcm94eSog
cHJveHkpCi0gICAgOiBKU0RPTUdsb2JhbE9iamVjdCh2bSwgc3RydWN0dXJlLCBwcm94eS0+d29y
bGQoKSwgJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCisgICAgOiBKU0RPTUdsb2JhbE9iamVj
dCh2bSwgc3RydWN0dXJlLCBwcm94eS0+d29ybGQoKSwgJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFi
bGUsIHdpbmRvdy0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS50aHJlYWRMb2NhbENhY2hl
KCkpCiAgICAgLCBtX3dpbmRvd0Nsb3NlV2F0Y2hwb2ludHMoKHdpbmRvdyAmJiB3aW5kb3ctPmZy
YW1lKCkpID8gSXNXYXRjaGVkIDogSXNJbnZhbGlkYXRlZCkKICAgICAsIG1fd3JhcHBlZChXVEZN
b3ZlKHdpbmRvdykpCiAgICAgLCBtX3Byb3h5KHByb3h5KQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9PcmlnaW5UaHJlYWRMb2NhbENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL09yaWdpblRocmVhZExvY2FsQ2FjaGUuY3BwCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvT3JpZ2luVGhyZWFkTG9jYWxDYWNoZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiT3JpZ2luVGhyZWFkTG9j
YWxDYWNoZS5oIgorCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit0eXBlZGVmIEhhc2hNYXA8VGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleSwgT3JpZ2luVGhy
ZWFkTG9jYWxDYWNoZSo+IFRocmVhZExvY2FsQ2FjaGVNYXA7CisKK3N0YXRpYyBUaHJlYWRMb2Nh
bENhY2hlTWFwJiB0aHJlYWRMb2NhbENhY2hlTWFwKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8VGhyZWFkTG9jYWxDYWNoZU1hcD4gbWFwOworICAgIHJldHVybiBtYXA7Cit9CisKK1Jl
ZlB0cjxPcmlnaW5UaHJlYWRMb2NhbENhY2hlPiBPcmlnaW5UaHJlYWRMb2NhbENhY2hlOjpjcmVh
dGUoY29uc3QgVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleSYga2V5KQoreworICAgIGF1dG8gaXRl
ciA9IHRocmVhZExvY2FsQ2FjaGVNYXAoKS5maW5kKGtleSk7CisgICAgaWYgKGl0ZXIgIT0gdGhy
ZWFkTG9jYWxDYWNoZU1hcCgpLmVuZCgpKQorICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7Cisg
ICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPcmlnaW5UaHJlYWRMb2NhbENhY2hlKGtleSkp
OworfQorCitPcmlnaW5UaHJlYWRMb2NhbENhY2hlOjp+T3JpZ2luVGhyZWFkTG9jYWxDYWNoZSgp
Cit7CisgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBkZXN0cm95aW5nIG9yaWdpbiBU
TEMuXG4iKTsKKyAgICBib29sIHJlc3VsdCA9IHRocmVhZExvY2FsQ2FjaGVNYXAoKS5yZW1vdmUo
bV9rZXkpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7Cit9CisKK09yaWdpblRocmVhZExv
Y2FsQ2FjaGU6Ok9yaWdpblRocmVhZExvY2FsQ2FjaGUoY29uc3QgVGhyZWFkTG9jYWxDYWNoZU9y
aWdpbktleSYga2V5KQorICAgIDogVGhyZWFkTG9jYWxDYWNoZShjb21tb25WTSgpLmhlYXAsIEpT
Qzo6dW5pcXVlU2VjdXJpdHlPcmlnaW5Ub2tlbigpKQorICAgICwgbV9rZXkoa2V5KQoreworICAg
IGF1dG8gcmVzdWx0ID0gdGhyZWFkTG9jYWxDYWNoZU1hcCgpLmFkZChrZXksIHRoaXMpOworICAg
IFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CisgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAi
OiBjcmVhdGluZyBvcmlnaW4gVExDLlxuIik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9PcmlnaW5UaHJlYWRMb2NhbENhY2hlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9PcmlnaW5UaHJlYWRMb2NhbENhY2hlLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9PcmlnaW5UaHJlYWRMb2NhbENh
Y2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRo
cmVhZExvY2FsQ2FjaGVPcmlnaW5LZXkuaCIKKyNpbmNsdWRlIDxoZWFwL1RocmVhZExvY2FsQ2Fj
aGUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE9yaWdpblRocmVhZExvY2Fs
Q2FjaGUgOiBwdWJsaWMgSlNDOjpUaHJlYWRMb2NhbENhY2hlIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmUHRyPE9yaWdpblRocmVhZExvY2FsQ2FjaGU+IGNyZWF0ZShjb25zdCBUaHJlYWRMb2Nh
bENhY2hlT3JpZ2luS2V5Jik7CisgICAgCisgICAgfk9yaWdpblRocmVhZExvY2FsQ2FjaGUoKSBv
dmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBPcmlnaW5UaHJlYWRMb2NhbENhY2hlKGNvbnN0IFRo
cmVhZExvY2FsQ2FjaGVPcmlnaW5LZXkmKTsKKyAgICAKKyAgICBUaHJlYWRMb2NhbENhY2hlT3Jp
Z2luS2V5IG1fa2V5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkocmV2aXNpb24gMjI3ODQ5KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
MCwxMSArMzAsMTUgQEAKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogCiAjaW5jbHVkZSAi
QmxvYlVSTC5oIgorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5o
IgotI2luY2x1ZGUgIlVSTC5oIgorI2luY2x1ZGUgIk9yaWdpblRocmVhZExvY2FsQ2FjaGUuaCIK
ICNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlNlY3VyaXR5UG9saWN5Lmgi
CisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleS5oIgogI2luY2x1ZGUgIlRocmVh
ZGFibGVCbG9iUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlIDxydW50aW1l
L1ZNLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC01OTUsNCArNTk5
LDE1IEBAIGJvb2wgU2VjdXJpdHlPcmlnaW46OmlzTG9jYWxIb3N0T3JMb29wYmEKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKK1JlZlB0cjxKU0M6OlRocmVhZExvY2FsQ2FjaGU+IFNlY3VyaXR5T3Jp
Z2luOjp0aHJlYWRMb2NhbENhY2hlKCkKK3sKKyAgICBpZiAoIW1fdGhyZWFkTG9jYWxDYWNoZSkg
eworICAgICAgICBpZiAoaXNVbmlxdWUoKSB8fCAoaXNMb2NhbCgpICYmIG1fZW5mb3JjZUZpbGVQ
YXRoU2VwYXJhdGlvbikpCisgICAgICAgICAgICBtX3RocmVhZExvY2FsQ2FjaGUgPSBKU0M6OlRo
cmVhZExvY2FsQ2FjaGU6OmNyZWF0ZShjb21tb25WTSgpLmhlYXApOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX3RocmVhZExvY2FsQ2FjaGUgPSBPcmlnaW5UaHJlYWRMb2NhbENhY2hlOjpj
cmVhdGUoVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleShtX2hvc3QsIG1fcHJvdG9jb2wsIG1fcG9y
dCkpOworICAgIH0KKyAgICByZXR1cm4gbV90aHJlYWRMb2NhbENhY2hlOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2lu
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5oCShy
ZXZpc2lvbiAyMjc4NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOCw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5j
bHVkZSA8aGVhcC9UaHJlYWRMb2NhbENhY2hlLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVS
ZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTIwMyw2
ICsyMDQsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1BvdGVudGlhbGx5VHJ1c3R3b3J0aHkoKSBj
b25zdCB7IHJldHVybiBtX2lzUG90ZW50aWFsbHlUcnVzdHdvcnRoeTsgfQogCiAgICAgc3RhdGlj
IGJvb2wgaXNMb2NhbEhvc3RPckxvb3BiYWNrSVBBZGRyZXNzKGNvbnN0IFVSTCYpOworICAgIAor
ICAgIFJlZlB0cjxKU0M6OlRocmVhZExvY2FsQ2FjaGU+IHRocmVhZExvY2FsQ2FjaGUoKTsKIAog
cHJpdmF0ZToKICAgICBTZWN1cml0eU9yaWdpbigpOwpAQCAtMjMyLDYgKzIzNSw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX2VuZm9yY2VGaWxlUGF0aFNlcGFyYXRpb24geyBmYWxzZSB9OwogICAg
IGJvb2wgbV9uZWVkc1N0b3JhZ2VBY2Nlc3NGcm9tRmlsZVVSTHNRdWlyayB7IGZhbHNlIH07CiAg
ICAgYm9vbCBtX2lzUG90ZW50aWFsbHlUcnVzdHdvcnRoeSB7IGZhbHNlIH07CisgICAgUmVmUHRy
PEpTQzo6VGhyZWFkTG9jYWxDYWNoZT4gbV90aHJlYWRMb2NhbENhY2hlOwogfTsKIAogYm9vbCBz
aG91bGRUcmVhdEFzUG90ZW50aWFsbHlUcnVzdHdvcnRoeShjb25zdCBVUkwmKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleS5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktl
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGhyZWFk
TG9jYWxDYWNoZU9yaWdpbktleSB7CitwdWJsaWM6CisgICAgVGhyZWFkTG9jYWxDYWNoZU9yaWdp
bktleSgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5
KFN0cmluZyBob3N0LCBTdHJpbmcgcHJvdG9jb2wsIHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+IHBv
cnQpCisgICAgICAgIDogbV9ob3N0KGhvc3QpCisgICAgICAgICwgbV9wcm90b2NvbChwcm90b2Nv
bCkKKyAgICAgICAgLCBtX3BvcnQocG9ydCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFRocmVh
ZExvY2FsQ2FjaGVPcmlnaW5LZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAg
ICAgICA6IG1faG9zdChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2hvc3QgPT0gb3RoZXIubV9o
b3N0CisgICAgICAgICAgICAmJiBtX3Byb3RvY29sID09IG90aGVyLm1fcHJvdG9jb2wKKyAgICAg
ICAgICAgICYmIG1fcG9ydCA9PSBvdGhlci5tX3BvcnQ7CisgICAgfQorICAgIAorICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5JiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisgICAgCisg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
KnRoaXMgIT0gVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleSgpOworICAgIH0KKyAgICAKKyAgICBi
b29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9ob3N0LmlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2hvc3QuaGFzaCgpICsgbV9wcm90b2NvbC5oYXNoKCkg
KyAobV9wb3J0ID8gKm1fcG9ydCA6IDApOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgU3Ry
aW5nIG1faG9zdDsKKyAgICBTdHJpbmcgbV9wcm90b2NvbDsKKyAgICBzdGQ6Om9wdGlvbmFsPHVp
bnQxNl90PiBtX3BvcnQ7Cit9OworCitzdHJ1Y3QgVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleUhh
c2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFRocmVhZExvY2FsQ2FjaGVPcmln
aW5LZXkmIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBrZXkuaGFzaCgpOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5
JiBhLCBjb25zdCBUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5JiBiKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGEgPT0gYjsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRv
Q29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsgLy8gVGhpcyBpcyBhIHNhZmUgY2hvaWNl
LCBwb3NzaWJseSBtb3JlIGNvbnNlcnZhdGl2ZSB0aGFuIG5lY2Vzc2FyeS4KK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
PiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxXZWJD
b3JlOjpUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5PiB7CisgICAgdHlwZWRlZiBXZWJDb3JlOjpU
aHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5IEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZT4g
c3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPFdlYkNvcmU6
OlRocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXk+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPFdlYkNv
cmU6OlRocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXk+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBl
bXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7IC8vIFRoaXMgaXMgYSBzYWZlIGNob2ljZSwgcG9zc2li
bHkgbW9yZSBjb25zZXJ2YXRpdmUgdGhhbiBuZWNlc3NhcnkuCit9OworCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>332811</attachid>
            <date>2018-01-31 15:35:49 -0800</date>
            <delta_ts>2018-02-05 11:19:22 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>60318</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI3ODQ5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDczIEBA
CisyMDE4LTAxLTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R2xvYmFsIG9iamVjdHMgc2hvdWxkIGJlIGFibGUgdG8gdXNlIFRMQ3MgdG8gYWxsb2NhdGUgZnJv
bSBkaWZmZXJlbnQgYmxvY2tzIGZyb20gZWFjaCBvdGhlcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgyMjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
SkYgQmFzdGllbi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgdXNlcyBUTENzIHRvIGNyZWF0ZSBh
dCBsZWFzdCBgbWluaW11bURpc3RhbmNlQmV0d2VlbkNlbGxzRnJvbURpZmZlcmVuT3JpZ2luc2Ag
Ynl0ZXMgb2YKKyAgICAgICAgZGlzdGFuY2UgYmV0d2VlbiBvYmplY3RzIGZyb20gZGlmZmVyZW50
IG9yaWdpbnMsIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tYmluYXRpb24gb2YgdGhpbmdzLiBGb3IK
KyAgICAgICAgc2hvcnQgbGV0cyByZWZlciB0byB0aGF0IGNvbnN0YW50IGFzIEsuCisgICAgICAg
IAorICAgICAgICAtIFNpbmNlIHIyMjc3MjEsIExhcmdlQWxsb2NhdGlvbiBwdXRzIEsgYnl0ZXMg
cGFkZGluZyBhdCB0aGUgZW5kIG9mIGVhY2ggYWxsb2NhdGlvbi4KKyAgICAgICAgCisgICAgICAg
IC0gU2luY2UgcjIyNzcxOCwgTWFya2VkQmxvY2sgcHV0cyBhdCBsZWFzdCBLIGJ5dGVzIGluIGl0
cyBmb290ZXIuCisgICAgICAgIAorICAgICAgICAtIFNpbmNlIHIyMjc2MTcsIGdsb2JhbCBvYmpl
Y3RzIGNhbiBoYXZlIHRoZWlyIG93biBUTENzLCB3aGljaCBtYWtlIHRoZW0gYWxsb2NhdGUgZnJv
bSBhCisgICAgICAgICAgZGlmZmVyZW50IHNldCBvZiBibG9ja3MgdGhhbiBvdGhlciBnbG9iYWwg
b2JqZWN0cy4gVGhlIFRMQyBvZiBhIGdsb2JhbCBvYmplY3QgY29tZXMgaW50bworICAgICAgICAg
IGVmZmVjdCB3aGVuIHlvdSBlbnRlciB0aGUgVk0gdmlhIHRoYXQgZ2xvYmFsIG9iamVjdC4KKyAg
ICAgICAgCisgICAgICAgIC0gV2l0aCB0aGlzIGNoYW5nZSwgVExDcyBhbmQgYmxvY2tzIGJvdGgg
aGF2ZSBzZWN1cml0eSBvcmlnaW5zLiBBIFRMQyB3aWxsIG9ubHkgdXNlIGJsb2NrcyB0aGF0Cisg
ICAgICAgICAgc2hhcmUgdGhlIHNhbWUgc2VjdXJpdHkgb3JpZ2luIG9yIGVtcHR5IGJsb2NrcyAo
aW4gd2hpY2ggY2FzZSB3ZSB6ZXJvIHRoZSBibG9jayBhbmQgY2hhbmdlCisgICAgICAgICAgaXRz
IHNlY3VyaXR5IG9yaWdpbikuCisgICAgICAgIAorICAgICAgICBXZWJDb3JlIGRldGVybWluZXMg
dGhlIFRMQy1HbG9iYWxPYmplY3QgbWFwcGluZy4gQnkgZGVmYXVsdCwgZ2xvYmFsIG9iamVjdHMg
d291bGQgc2ltcGx5IHVzZQorICAgICAgICB0aGUgVk0ncyBkZWZhdWx0IFRMQy4gV2ViQ29yZSBt
YWtlcyBpdCBzbyB0aGF0IERPTSB3aW5kb3dzIChidXQgbm90IHdvcmtlciBnbG9iYWwgb2JqZWN0
cykgZ2V0CisgICAgICAgIGEgVExDIGJhc2VkIG9uIHRoZWlyIGRvY3VtZW50J3MgU2VjdXJpdHlP
cmlnaW4uCisgICAgICAgIAorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogaGVhcC9CbG9j
a0RpcmVjdG9yeS5jcHA6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5OjpmaW5kQmxvY2tG
b3JBbGxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OnByZXBhcmVGb3JB
bGxvY2F0aW9uKToKKyAgICAgICAgKiBoZWFwL0Jsb2NrRGlyZWN0b3J5Lmg6CisgICAgICAgICog
aGVhcC9Mb2NhbEFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjpM
b2NhbEFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjpyZXNldCk6Cisg
ICAgICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjp+TG9jYWxBbGxvY2F0b3IpOgorICAgICAgICAo
SlNDOjpMb2NhbEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6Okxv
Y2FsQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKToKKyAgICAgICAgKiBo
ZWFwL0xvY2FsQWxsb2NhdG9yLmg6CisgICAgICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjp0bGMg
Y29uc3QpOgorICAgICAgICAqIGhlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwOgor
ICAgICAgICAqIGhlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaDoKKyAgICAgICAgKiBo
ZWFwL01hcmtlZEJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6
YXNzb2NpYXRlV2l0aE9yaWdpbik6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAg
ICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpzZWN1cml0eU9yaWdpblRva2VuIGNvbnN0
KToKKyAgICAgICAgKiBoZWFwL1NlY3VyaXR5T3JpZ2luVG9rZW4uY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6dW5pcXVlU2VjdXJpdHlPcmlnaW5Ub2tlbik6CisgICAgICAgICogaGVhcC9TZWN1
cml0eU9yaWdpblRva2VuLmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAvVGhyZWFkTG9jYWxDYWNo
ZS5jcHA6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGU6OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OlRocmVhZExvY2FsQ2FjaGU6OlRocmVhZExvY2FsQ2FjaGUpOgorICAgICAgICAoSlND
OjpUaHJlYWRMb2NhbENhY2hlOjphbGxvY2F0ZURhdGEpOgorICAgICAgICAoSlNDOjpUaHJlYWRM
b2NhbENhY2hlOjppbnN0YWxsU2xvdyk6CisgICAgICAgICogaGVhcC9UaHJlYWRMb2NhbENhY2hl
Lmg6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGU6OnNlY3VyaXR5T3JpZ2luVG9rZW4g
Y29uc3QpOgorICAgICAgICAqIGhlYXAvVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFsbCk6CisgICAgICAgICogcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpKU0dsb2Jh
bE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpjcmVhdGVUaHJlYWRMb2Nh
bENhY2hlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsT2JqZWN0Ojp0aHJlYWRMb2NhbENhY2hlKToKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxPYmplY3Q6OnRocmVhZExvY2FsQ2FjaGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcDoKKyAgICAgICAgKEpTQzo6Vk1FbnRyeVNjb3BlOjpW
TUVudHJ5U2NvcGUpOgorICAgICAgICAoSlNDOjpWTUVudHJ5U2NvcGU6On5WTUVudHJ5U2NvcGUp
OgorICAgICAgICAqIHJ1bnRpbWUvVk1FbnRyeVNjb3BlLmg6CisKIDIwMTgtMDEtMjkgIFl1c3Vr
ZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgW0pTQ10gSW1wbGVt
ZW50IHRyaW1TdGFydCBhbmQgdHJpbUVuZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1Nv
dXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4
dAkocmV2aXNpb24gMjI3ODQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxNy0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vCiAvLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIC8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTEyLDYgKzUxMiw3IEBAIGhlYXAvTWFya2luZ0NvbnN0cmFpbnRTZXQuY3Bw
CiBoZWFwL01hcmtpbmdDb25zdHJhaW50U29sdmVyLmNwcAogaGVhcC9NdXRhdG9yU2NoZWR1bGVy
LmNwcAogaGVhcC9NdXRhdG9yU3RhdGUuY3BwCitoZWFwL1NlY3VyaXR5T3JpZ2luVG9rZW4uY3Bw
CiBoZWFwL1NpbXBsZU1hcmtpbmdDb25zdHJhaW50LmNwcAogaGVhcC9TbG90VmlzaXRvci5jcHAK
IGhlYXAvU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjc4NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMjk0LDYgKzI5NCw3IEBACiAJCTBGNDI2QTQ4MTQ2MENCQjMwMDEzMUY4RiAvKiBWYWx1ZVJl
Y292ZXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjQyNkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTQ5MTQ2MENCQjcwMDEz
MUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjQyNkE0QjE0NjBDRDZFMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8q
IERhdGFGb3JtYXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRjQyQjNDMzIwMUVDOUZGMDAzNTcwMzEgLyogU2VjdXJpdHlPcmlnaW5Ub2tlbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MkIzQzIy
MDFFQzlGRDAwMzU3MDMxIC8qIFNlY3VyaXR5T3JpZ2luVG9rZW4uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQzMTczODE0NkJBQzY5MDA3RTM4
OTAgLyogTGlzdGFibGVIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjQzMTczNjE0NkJBQzY1MDA3RTM4OTAgLyogTGlzdGFibGVIYW5kbGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0
NTcwMzkxQkU0NEM5MTAwNjJBNjI5IC8qIEFpckVsaW1pbmF0ZURlYWRDb2RlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ1NzAzNzFCRTQ0QzkxMDA2
MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENvZGUuaCAqLzsgfTsKIAkJMEY0NTcwM0QxQkU0NUYw
QTAwNjJBNjI5IC8qIEFpclJlcG9ydFVzZWRSZWdpc3RlcnMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDU3MDNCMUJFNDVGMEEwMDYyQTYyOSAvKiBB
aXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmggKi87IH07CkBAIC0yMjYyLDYgKzIyNjMsOCBAQAogCQkw
RjQyNkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVJlY292ZXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNDI2QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlydHVhbFJlZ2lzdGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAvKiBEYXRh
Rm9ybWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFGb3JtYXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0MkIzQzAyMDFFQjUwOTAwMzU3MDMxIC8q
IEFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBbGxv
Y2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjQyQjNDMjIwMUVDOUZE
MDAzNTcwMzEgLyogU2VjdXJpdHlPcmlnaW5Ub2tlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTZWN1cml0eU9yaWdpblRva2VuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNDMxNzM2MTQ2QkFDNjUwMDdFMzg5MCAvKiBMaXN0YWJsZUhhbmRsZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGlzdGFibGVIYW5kbGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDU3MDM2MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGlt
aW5hdGVEZWFkQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBB
aXJFbGltaW5hdGVEZWFkQ29kZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyRWxpbWluYXRlRGVhZENv
ZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ1NzAzNzFCRTQ0QzkxMDA2
MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQWlyRWxpbWluYXRlRGVhZENvZGUuaDsgcGF0aCA9IGIzL2Fpci9BaXJFbGltaW5h
dGVEZWFkQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTU1OSwyMSArNTU2
MiwxNCBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyogaGVhcCAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMEY3NUEwNTQyMDBEMjVFRjAwMzhF
MkNGIC8qIEFsbG9jYXRvci5oICovLAotCQkJCTBGNzVBMDVEMjAwRDI1RjEwMDM4RTJDRiAvKiBB
bGxvY2F0b3JJbmxpbmVzLmggKi8sCi0JCQkJMEY3NUEwNTkyMDBEMjVGMDAwMzhFMkNGIC8qIExv
Y2FsQWxsb2NhdG9yLmNwcCAqLywKLQkJCQkwRjc1QTA1NzIwMEQyNUYwMDAzOEUyQ0YgLyogTG9j
YWxBbGxvY2F0b3IuaCAqLywKLQkJCQkwRjc1QTA1QTIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxB
bGxvY2F0b3JJbmxpbmVzLmggKi8sCi0JCQkJMEY3NUEwNTgyMDBEMjVGMDAwMzhFMkNGIC8qIFRo
cmVhZExvY2FsQ2FjaGUuY3BwICovLAotCQkJCTBGNzVBMDU1MjAwRDI1RUYwMDM4RTJDRiAvKiBU
aHJlYWRMb2NhbENhY2hlLmggKi8sCi0JCQkJMEY3NUEwNTYyMDBEMjVFRjAwMzhFMkNGIC8qIFRo
cmVhZExvY2FsQ2FjaGVJbmxpbmVzLmggKi8sCi0JCQkJMEY3NUEwNUIyMDBEMjVGMTAwMzhFMkNG
IC8qIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQuY3BwICovLAotCQkJCTBGNzVBMDVDMjAwRDI1RjEw
MDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlTGF5b3V0LmggKi8sCiAJCQkJMEZFQzNDNTAxRjMz
QTQxNjAwRjU5QjZDIC8qIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICovLAogCQkJCTBGRUMz
QzUxMUYzM0E0MTYwMEY1OUI2QyAvKiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggKi8sCiAJCQkJ
MEZBNzYyMEExREI5NTlGNjAwQjdBMkZEIC8qIEFsbG9jYXRpbmdTY29wZS5oICovLAogCQkJCTBG
RENFMTFCMUZBRTYxRjQwMDZGMzkwMSAvKiBBbGxvY2F0aW9uRmFpbHVyZU1vZGUuaCAqLywKKwkJ
CQkwRjQyQjNDMDIwMUVCNTA5MDAzNTcwMzEgLyogQWxsb2NhdG9yLmNwcCAqLywKKwkJCQkwRjc1
QTA1NDIwMEQyNUVGMDAzOEUyQ0YgLyogQWxsb2NhdG9yLmggKi8sCiAJCQkJMEYzMENCNUQxRkNF
NDZCNDAwNEI1MzIzIC8qIEFsbG9jYXRvckZvck1vZGUuaCAqLywKKwkJCQkwRjc1QTA1RDIwMEQy
NUYxMDAzOEUyQ0YgLyogQWxsb2NhdG9ySW5saW5lcy5oICovLAogCQkJCTBGQjQ2NzdFMUZEREE2
RTUwMDNGQ0IwOSAvKiBBdG9tSW5kaWNlcy5oICovLAogCQkJCUMyQjkxNkM0MTREQTA0MEMwMENC
QUM4NiAvKiBCbG9ja0RpcmVjdG9yeS5jcHAgKi8sCiAJCQkJQzJCOTE2QzExNERBMDE0RTAwQ0JB
Qzg2IC8qIEJsb2NrRGlyZWN0b3J5LmggKi8sCkBAIC01Njc0LDYgKzU2NzAsOSBAQAogCQkJCTBG
MDcwQTQ1MUQ1NDNBODkwMDZFNzIzMiAvKiBMYXJnZUFsbG9jYXRpb24uY3BwICovLAogCQkJCTBG
MDcwQTQ2MUQ1NDNBODkwMDZFNzIzMiAvKiBMYXJnZUFsbG9jYXRpb24uaCAqLywKIAkJCQkwRjQz
MTczNjE0NkJBQzY1MDA3RTM4OTAgLyogTGlzdGFibGVIYW5kbGVyLmggKi8sCisJCQkJMEY3NUEw
NTkyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9yLmNwcCAqLywKKwkJCQkwRjc1QTA1
NzIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3IuaCAqLywKKwkJCQkwRjc1QTA1QTIw
MEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3JJbmxpbmVzLmggKi8sCiAJCQkJMEYyMDhB
RDYxREYwOTI1QTAwN0QzMjY5IC8qIExvY2tEdXJpbmdNYXJraW5nLmggKi8sCiAJCQkJMTRCNzIz
M0YxMkQ3RDBEQTAwM0JENUVEIC8qIE1hY2hpbmVTdGFja01hcmtlci5jcHAgKi8sCiAJCQkJMTRC
NzIzNDAxMkQ3RDBEQTAwM0JENUVEIC8qIE1hY2hpbmVTdGFja01hcmtlci5oICovLApAQCAtNTcw
Myw2ICs1NzAyLDcgQEAKIAkJCQkwRkQwRTVFRjFFNDZCRjIzMDAwNkFCMDggLyogUmVnaXN0ZXJT
dGF0ZS5oICovLAogCQkJCTBGN0NGOTRFMURCRUVFODYwMDk4Q0MxMiAvKiBSZWxlYXNlSGVhcEFj
Y2Vzc1Njb3BlLmggKi8sCiAJCQkJMEYyQzYzQTkxRTRGQTQyQzAwQzEzODM5IC8qIFJ1bm5pbmdT
Y29wZS5oICovLAorCQkJCTBGNDJCM0MyMjAxRUM5RkQwMDM1NzAzMSAvKiBTZWN1cml0eU9yaWdp
blRva2VuLmggKi8sCiAJCQkJMEY0RDhDNzYxRkNBM0NGMjAwMUQzMkFDIC8qIFNpbXBsZU1hcmtp
bmdDb25zdHJhaW50LmNwcCAqLywKIAkJCQkwRjREOEM3NzFGQ0EzQ0YzMDAxRDMyQUMgLyogU2lt
cGxlTWFya2luZ0NvbnN0cmFpbnQuaCAqLywKIAkJCQlDMjI1NDk0MjE1RjdEQkFBMDA2NUU4OTgg
LyogU2xvdFZpc2l0b3IuY3BwICovLApAQCAtNTcyNCw2ICs1NzI0LDExIEBACiAJCQkJMEZENzlB
MkMxRUJCQkRCMjAwREE4OEQzIC8qIFN5bmNocm9ub3VzbmVzcy5oICovLAogCQkJCTBGMUZCMzhB
MUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVs
ZXIuY3BwICovLAogCQkJCTBGMUZCMzhCMUUxNzNBNjIwMEE5QkU1MCAvKiBTeW5jaHJvbm91c1N0
b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuaCAqLywKKwkJCQkwRjc1QTA1ODIwMEQyNUYwMDAz
OEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZS5jcHAgKi8sCisJCQkJMEY3NUEwNTUyMDBEMjVFRjAw
MzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGUuaCAqLywKKwkJCQkwRjc1QTA1NjIwMEQyNUVGMDAz
OEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaCAqLywKKwkJCQkwRjc1QTA1QjIwMEQy
NUYxMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUxheW91dC5jcHAgKi8sCisJCQkJMEY3NUEw
NUMyMDBEMjVGMTAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQuaCAqLywKIAkJCQkx
NDE0NDhDQzEzQTE3ODM3MDBGNUJBMUEgLyogVGlueUJsb29tRmlsdGVyLmggKi8sCiAJCQkJMEY1
RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5IC8qIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCAqLywKIAkJ
CQkwRjREOEM3MjFGQzdBOTczMDAxRDMyQUMgLyogVmlzaXRDb3VudGVyLmggKi8sCkBAIC04NTIy
LDYgKzg1MjcsNyBAQAogCQkJCTBGN0MzOUZGMUM5MEM1NUIwMDQ4MDE1MSAvKiBERkdPcEluZm8u
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0ZFMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkU1NzE0
MURBRjEwMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNDJC
M0MzMjAxRUM5RkYwMDM1NzAzMSAvKiBTZWN1cml0eU9yaWdpblRva2VuLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkQ4QTMyNjE3RDUxRjU3MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0
aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAv
KiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFQzE3MTc4RTczMDA2OTBD
N0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcAkocmV2aXNpb24gMjI3ODQ5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1
ZGUgIk1hcmtlZEJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5oIgorI2lu
Y2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVk0uaCIKICNpbmNs
dWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIApAQCAtODAsMTQgKzgxLDIwIEBAIE1hcmtlZEJsb2Nr
OjpIYW5kbGUqIEJsb2NrRGlyZWN0b3J5OjpmaW4KICAgICByZXR1cm4gbV9ibG9ja3NbbV9lbXB0
eUN1cnNvcl07CiB9CiAKLU1hcmtlZEJsb2NrOjpIYW5kbGUqIEJsb2NrRGlyZWN0b3J5OjpmaW5k
QmxvY2tGb3JBbGxvY2F0aW9uKCkKK01hcmtlZEJsb2NrOjpIYW5kbGUqIEJsb2NrRGlyZWN0b3J5
OjpmaW5kQmxvY2tGb3JBbGxvY2F0aW9uKExvY2FsQWxsb2NhdG9yJiBhbGxvY2F0b3IpCiB7Ci0g
ICAgbV9hbGxvY2F0aW9uQ3Vyc29yID0gKG1fY2FuQWxsb2NhdGVCdXROb3RFbXB0eSB8IG1fZW1w
dHkpLmZpbmRCaXQobV9hbGxvY2F0aW9uQ3Vyc29yLCB0cnVlKTsKLSAgICBpZiAobV9hbGxvY2F0
aW9uQ3Vyc29yID49IG1fYmxvY2tzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgCi0gICAgc2V0SXNDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwg
bV9hbGxvY2F0aW9uQ3Vyc29yLCBmYWxzZSk7Ci0gICAgcmV0dXJuIG1fYmxvY2tzW21fYWxsb2Nh
dGlvbkN1cnNvcl07CisgICAgZm9yICg7OykgeworICAgICAgICBhbGxvY2F0b3IubV9hbGxvY2F0
aW9uQ3Vyc29yID0gKG1fY2FuQWxsb2NhdGVCdXROb3RFbXB0eSB8IG1fZW1wdHkpLmZpbmRCaXQo
YWxsb2NhdG9yLm1fYWxsb2NhdGlvbkN1cnNvciwgdHJ1ZSk7CisgICAgICAgIGlmIChhbGxvY2F0
b3IubV9hbGxvY2F0aW9uQ3Vyc29yID49IG1fYmxvY2tzLnNpemUoKSkKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IGJsb2NrSW5kZXggPSBhbGxv
Y2F0b3IubV9hbGxvY2F0aW9uQ3Vyc29yKys7CisgICAgICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUq
IHJlc3VsdCA9IG1fYmxvY2tzW2Jsb2NrSW5kZXhdOworICAgICAgICBpZiAocmVzdWx0LT5zZWN1
cml0eU9yaWdpblRva2VuKCkgPT0gYWxsb2NhdG9yLnRsYygpLT5zZWN1cml0eU9yaWdpblRva2Vu
KCkpIHsKKyAgICAgICAgICAgIHNldElzQ2FuQWxsb2NhdGVCdXROb3RFbXB0eShOb0xvY2tpbmdO
ZWNlc3NhcnksIGJsb2NrSW5kZXgsIGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIH0KKyAgICB9CiB9CiAKIE1hcmtlZEJsb2NrOjpIYW5kbGUqIEJsb2NrRGlyZWN0
b3J5Ojp0cnlBbGxvY2F0ZUJsb2NrKCkKQEAgLTE4Myw4ICsxOTAsNiBAQCB2b2lkIEJsb2NrRGly
ZWN0b3J5OjpwcmVwYXJlRm9yQWxsb2NhdGlvCiAgICAgICAgICAgICBhbGxvY2F0b3ItPnByZXBh
cmVGb3JBbGxvY2F0aW9uKCk7CiAgICAgICAgIH0pOwogICAgIAotICAgIG1fYWxsb2NhdGlvbkN1
cnNvciA9IDA7Ci0gICAgbV9lbXB0eUN1cnNvciA9IDA7CiAgICAgbV91bnN3ZXB0Q3Vyc29yID0g
MDsKICAgICAKICAgICBtX2VkZW4uY2xlYXJBbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuaAkocmV2aXNpb24gMjI3ODQ5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuaAkod29ya2luZyBjb3B5KQpAQCAt
NDMsNiArNDMsNyBAQCBjbGFzcyBIZWFwOwogY2xhc3MgSXNvQ2VsbFNldDsKIGNsYXNzIE1hcmtl
ZFNwYWNlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworY2xhc3MgVGhyZWFkTG9jYWxD
YWNoZTsKIGNsYXNzIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ7CiAKICNkZWZpbmUgRk9SX0VBQ0hf
QkxPQ0tfRElSRUNUT1JZX0JJVChtYWNybykgXApAQCAtMTYyLDEyICsxNjMsMTMgQEAgcHVibGlj
OgogICAgIHZvaWQgZHVtcEJpdHMoUHJpbnRTdHJlYW0mID0gV1RGOjpkYXRhRmlsZSgpKTsKICAg
ICAKIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIExvY2FsQWxsb2NhdG9yOwogICAgIGZyaWVu
ZCBjbGFzcyBJc29DZWxsU2V0OworICAgIGZyaWVuZCBjbGFzcyBMb2NhbEFsbG9jYXRvcjsKKyAg
ICBmcmllbmQgY2xhc3MgTG9jYWxTaWRlQWxsb2NhdG9yOwogICAgIGZyaWVuZCBjbGFzcyBNYXJr
ZWRCbG9jazsKICAgICBmcmllbmQgY2xhc3MgVGhyZWFkTG9jYWxDYWNoZUxheW91dDsKICAgICAK
LSAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBmaW5kQmxvY2tGb3JBbGxvY2F0aW9uKCk7CisgICAg
TWFya2VkQmxvY2s6OkhhbmRsZSogZmluZEJsb2NrRm9yQWxsb2NhdGlvbihMb2NhbEFsbG9jYXRv
ciYpOwogICAgIAogICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIHRyeUFsbG9jYXRlQmxvY2soKTsK
ICAgICAKQEAgLTE4NCw4ICsxODYsNyBAQCBwcml2YXRlOgogICAgIAogICAgIC8vIEFmdGVyIHlv
dSBkbyBzb21ldGhpbmcgdG8gYSBibG9jayBiYXNlZCBvbiBvbmUgb2YgdGhlc2UgY3Vyc29ycywg
eW91IGNsZWFyIHRoZSBiaXQgaW4gdGhlCiAgICAgLy8gY29ycmVzcG9uZGluZyBiaXR2ZWN0b3Ig
YW5kIGxlYXZlIHRoZSBjdXJzb3Igd2hlcmUgaXQgd2FzLgotICAgIHNpemVfdCBtX2FsbG9jYXRp
b25DdXJzb3IgeyAwIH07IC8vIFBvaW50cyB0byB0aGUgbmV4dCBibG9jayB0aGF0IGlzIGEgY2Fu
ZGlkYXRlIGZvciBhbGxvY2F0aW9uLgotICAgIHNpemVfdCBtX2VtcHR5Q3Vyc29yIHsgMCB9OyAv
LyBQb2ludHMgdG8gdGhlIG5leHQgYmxvY2sgdGhhdCBpcyBhIGNhbmRpZGF0ZSBmb3IgZW1wdHkg
YWxsb2NhdGlvbiAoYWxsb2NhdGluZyBpbiBlbXB0eSBibG9ja3MpLgorICAgIHNpemVfdCBtX2Vt
cHR5Q3Vyc29yIHsgMCB9OwogICAgIHNpemVfdCBtX3Vuc3dlcHRDdXJzb3IgeyAwIH07IC8vIFBv
aW50cyB0byB0aGUgbmV4dCBibG9jayB0aGF0IGlzIGEgY2FuZGlkYXRlIGZvciBpbmNyZW1lbnRh
bCBzd2VlcGluZy4KICAgICAKICAgICB1bnNpZ25lZCBtX2NlbGxTaXplOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjI3
ODQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiw5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1Mb2Nh
bEFsbG9jYXRvcjo6TG9jYWxBbGxvY2F0b3IoQmxvY2tEaXJlY3RvcnkqIGRpcmVjdG9yeSkKLSAg
ICA6IG1fZGlyZWN0b3J5KGRpcmVjdG9yeSkKK0xvY2FsQWxsb2NhdG9yOjpMb2NhbEFsbG9jYXRv
cihUaHJlYWRMb2NhbENhY2hlKiB0bGMsIEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkpCisgICAg
OiBtX3RsYyh0bGMpCisgICAgLCBtX2RpcmVjdG9yeShkaXJlY3RvcnkpCiAgICAgLCBtX2NlbGxT
aXplKGRpcmVjdG9yeS0+bV9jZWxsU2l6ZSkKICAgICAsIG1fZnJlZUxpc3QobV9jZWxsU2l6ZSkK
IHsKQEAgLTQyLDExICs0MywxMyBAQCBMb2NhbEFsbG9jYXRvcjo6TG9jYWxBbGxvY2F0b3IoQmxv
Y2tEaXJlCiB9CiAKIExvY2FsQWxsb2NhdG9yOjpMb2NhbEFsbG9jYXRvcihMb2NhbEFsbG9jYXRv
ciYmIG90aGVyKQotICAgIDogbV9kaXJlY3Rvcnkob3RoZXIubV9kaXJlY3RvcnkpCisgICAgOiBt
X3RsYyhvdGhlci5tX3RsYykKKyAgICAsIG1fZGlyZWN0b3J5KG90aGVyLm1fZGlyZWN0b3J5KQog
ICAgICwgbV9jZWxsU2l6ZShvdGhlci5tX2NlbGxTaXplKQogICAgICwgbV9mcmVlTGlzdChXVEZN
b3ZlKG90aGVyLm1fZnJlZUxpc3QpKQogICAgICwgbV9jdXJyZW50QmxvY2sob3RoZXIubV9jdXJy
ZW50QmxvY2spCiAgICAgLCBtX2xhc3RBY3RpdmVCbG9jayhvdGhlci5tX2xhc3RBY3RpdmVCbG9j
aykKKyAgICAsIG1fYWxsb2NhdGlvbkN1cnNvcihvdGhlci5tX2FsbG9jYXRpb25DdXJzb3IpCiB7
CiAgICAgb3RoZXIucmVzZXQoKTsKICAgICBpZiAob3RoZXIuaXNPbkxpc3QoKSkgewpAQCAtNjEs
NiArNjQsNyBAQCB2b2lkIExvY2FsQWxsb2NhdG9yOjpyZXNldCgpCiAgICAgbV9mcmVlTGlzdC5j
bGVhcigpOwogICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKICAgICBtX2xhc3RBY3RpdmVC
bG9jayA9IG51bGxwdHI7CisgICAgbV9hbGxvY2F0aW9uQ3Vyc29yID0gMDsKIH0KIAogTG9jYWxB
bGxvY2F0b3I6On5Mb2NhbEFsbG9jYXRvcigpCkBAIC04MCw2ICs4NCwxNSBAQCBMb2NhbEFsbG9j
YXRvcjo6fkxvY2FsQWxsb2NhdG9yKCkKICAgICAvLyAgIHRoYXQgaXQgaXMgbm90IHJlYWNoYWJs
ZS4gVGhlcmVmb3JlLCB0aGUgVExDIHNob3VsZCBzdGlsbCBiZSBpbiBhIGZ1bGx5IHJlc2V0IHN0
YXRlIGF0IHRoZQogICAgIC8vICAgdGltZSBvZiBkZXN0cnVjdGlvbiBiZWNhdXNlIGZvciBpdCB0
byBnZXQgaW50byBhbnkgb3RoZXIgc3RhdGUsIHNvbWVvbmUgbXVzdCBoYXZlIGFsbG9jYXRlZAog
ICAgIC8vICAgaW4gaXQgKHdoaWNoIGlzIGltcG9zc2libGUgYmVjYXVzZSBpdCdzIHN1cHBvc2Vk
bHkgdW5yZWFjaGFibGUpLgorICAgIC8vCisgICAgLy8gTXkgYmlnZ2VzdCB3b3JyeSB3aXRoIHRo
ZXNlIGFzc2VydGlvbnMgaXMgdGhhdCB0aGVyZSB3aWxsIGJlIHNvbWUgVExDIHRoYXQgZ2V0cyBz
ZXQgYXMgdGhlCisgICAgLy8gY3VycmVudCBvbmUgYnV0IHRoZW4gbmV2ZXIgcmVzZXQsIGFuZCBp
biB0aGUgbWVhbnRpbWUgdGhlIGdsb2JhbCBvYmplY3QgdGhhdCBvd25zIGl0IGdldHMKKyAgICAv
LyBkZXN0cm95ZWQuCisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgaWYgd2UgZGlkIGhvbGQgb250
byBzb21lIG1lbW9yeSBhbmQgd2Ugd2FudGVkIHRvIHJldHVybiBpdCB0aGVuIHRoaXMgY291bGQg
YmUgd2VpcmQuCisgICAgLy8gV2Ugd291bGQgcG90ZW50aWFsbHkgaGF2ZSB0byBzdG9wQWxsb2Nh
dGluZygpLiBUaGF0IHdvdWxkIG1lYW4gaGF2aW5nIHRvIHJldHVybiBhIGJsb2NrIHRvIHRoZQor
ICAgIC8vIEJsb2NrRGlyZWN0b3J5LiBJdCdzIG5vdCBjbGVhciB0aGF0IHRoZSBCbG9ja0RpcmVj
dG9yeSBpcyBwcmVwYXJlZCB0byBoYW5kbGUgdGhhdCBkdXJpbmcKKyAgICAvLyBzd2VlcGluZyBh
bm90aGVyIGJsb2NrLCBmb3IgZXhhbXBsZS4KICAgICBib29sIG9rID0gdHJ1ZTsKICAgICBpZiAo
IW1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpIHsKICAgICAgICAgZGF0YUxvZygiRkFU
QUw6ICIsIFJhd1BvaW50ZXIodGhpcyksICItPn5Mb2NhbEFsbG9jYXRvciBoYXMgbm9uLWVtcHR5
IGZyZWUtbGlzdC5cbiIpOwpAQCAtMTY0LDYgKzE3Nyw3IEBAIHZvaWQqIExvY2FsQWxsb2NhdG9y
OjphbGxvY2F0ZVNsb3dDYXNlKEcKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQorICAgIGJsb2NrLT5hc3NvY2lhdGVXaXRoT3JpZ2luKG1fdGxjLT5zZWN1
cml0eU9yaWdpblRva2VuKCkpOwogICAgIG1fZGlyZWN0b3J5LT5hZGRCbG9jayhibG9jayk7CiAg
ICAgcmVzdWx0ID0gYWxsb2NhdGVJbihibG9jayk7CiAgICAgQVNTRVJUKHJlc3VsdCk7CkBAIC0y
MDEsNyArMjE1LDcgQEAgdm9pZCogTG9jYWxBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dAog
ICAgIEFTU0VSVChtX2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKICAgICAKICAgICBm
b3IgKDs7KSB7Ci0gICAgICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9kaXJlY3Rv
cnktPmZpbmRCbG9ja0ZvckFsbG9jYXRpb24oKTsKKyAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRs
ZSogYmxvY2sgPSBtX2RpcmVjdG9yeS0+ZmluZEJsb2NrRm9yQWxsb2NhdGlvbigqdGhpcyk7CiAg
ICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICBicmVhazsKIApAQCAtMjIwLDYgKzIzNCw3
IEBAIHZvaWQqIExvY2FsQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXQKICAgICAgICAgICAg
IC8vIGJlY2F1c2UgdGhlcmUgaXMgYSByZW1vdGUgY2hhbmNlIHRoYXQgYSBibG9jayBtYXkgaGF2
ZSBib3RoIGNhbkFsbG9jYXRlQnV0Tm90RW1wdHkKICAgICAgICAgICAgIC8vIGFuZCBlbXB0eSBz
ZXQgYXQgdGhlIHNhbWUgdGltZS4KICAgICAgICAgICAgIGJsb2NrLT5yZW1vdmVGcm9tRGlyZWN0
b3J5KCk7CisgICAgICAgICAgICBibG9jay0+YXNzb2NpYXRlV2l0aE9yaWdpbihtX3RsYy0+c2Vj
dXJpdHlPcmlnaW5Ub2tlbigpKTsKICAgICAgICAgICAgIG1fZGlyZWN0b3J5LT5hZGRCbG9jayhi
bG9jayk7CiAgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVJbihibG9jayk7CiAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuaAkocmV2
aXNpb24gMjI3ODQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTIgKzMzLDEzIEBAIG5hbWVzcGFjZSBKU0Mgewog
CiBjbGFzcyBCbG9ja0RpcmVjdG9yeTsKIGNsYXNzIEdDRGVmZXJyYWxDb250ZXh0OworY2xhc3Mg
VGhyZWFkTG9jYWxDYWNoZTsKIAogY2xhc3MgTG9jYWxBbGxvY2F0b3IgOiBwdWJsaWMgQmFzaWNS
YXdTZW50aW5lbE5vZGU8TG9jYWxBbGxvY2F0b3I+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShMb2NhbEFsbG9jYXRvcik7CiAgICAgCiBwdWJsaWM6Ci0gICAgTG9jYWxBbGxvY2F0b3IoQmxv
Y2tEaXJlY3RvcnkqKTsKKyAgICBMb2NhbEFsbG9jYXRvcihUaHJlYWRMb2NhbENhY2hlKiwgQmxv
Y2tEaXJlY3RvcnkqKTsKICAgICBMb2NhbEFsbG9jYXRvcihMb2NhbEFsbG9jYXRvciYmKTsKICAg
ICB+TG9jYWxBbGxvY2F0b3IoKTsKICAgICAKQEAgLTUzLDggKzU0LDEyIEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2VsbFNpemUoKTsKICAgICAKICAgICBib29sIGlz
RnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCopIGNvbnN0OworICAgIAorICAgIFRocmVhZExvY2Fs
Q2FjaGUqIHRsYygpIGNvbnN0IHsgcmV0dXJuIG1fdGxjOyB9CiAKIHByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIEJsb2NrRGlyZWN0b3J5OworICAgIAogICAgIHZvaWQgcmVzZXQoKTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0
KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKTsKICAgICB2b2lkIGRpZENvbnN1
bWVGcmVlTGlzdCgpOwpAQCAtNjMsMTEgKzY4LDE2IEBAIHByaXZhdGU6CiAgICAgdm9pZCogYWxs
b2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGRv
VGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqKTsKIAorICAgIFRocmVh
ZExvY2FsQ2FjaGUqIG1fdGxjOwogICAgIEJsb2NrRGlyZWN0b3J5KiBtX2RpcmVjdG9yeTsKICAg
ICB1bnNpZ25lZCBtX2NlbGxTaXplOwogICAgIEZyZWVMaXN0IG1fZnJlZUxpc3Q7CiAgICAgTWFy
a2VkQmxvY2s6OkhhbmRsZSogbV9jdXJyZW50QmxvY2sgeyBudWxscHRyIH07CiAgICAgTWFya2Vk
QmxvY2s6OkhhbmRsZSogbV9sYXN0QWN0aXZlQmxvY2sgeyBudWxscHRyIH07CisgICAgCisgICAg
Ly8gQWZ0ZXIgeW91IGRvIHNvbWV0aGluZyB0byBhIGJsb2NrIGJhc2VkIG9uIG9uZSBvZiB0aGVz
ZSBjdXJzb3JzLCB5b3UgY2xlYXIgdGhlIGJpdCBpbiB0aGUKKyAgICAvLyBjb3JyZXNwb25kaW5n
IGJpdHZlY3RvciBhbmQgbGVhdmUgdGhlIGN1cnNvciB3aGVyZSBpdCB3YXMuCisgICAgc2l6ZV90
IG1fYWxsb2NhdGlvbkN1cnNvciB7IDAgfTsgLy8gUG9pbnRzIHRvIHRoZSBuZXh0IGJsb2NrIHRo
YXQgaXMgYSBjYW5kaWRhdGUgZm9yIGFsbG9jYXRpb24uCiB9OwogCiBpbmxpbmUgcHRyZGlmZl90
IExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5j
cHAJKHJldmlzaW9uIDIyNzg0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtT
dGFja01lcmdpbmdDb25zdHJhaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOSBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hcmtTdGFja01lcmdpbmdDb25zdHJh
aW50LmgiCiAKKyNpbmNsdWRlICJHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oIgorI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIE1hcmtTdGFja01lcmdpbmdDb25z
dHJhaW50OjpNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludChIZWFwJiBoZWFwKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29u
c3RyYWludC5oCShyZXZpc2lvbiAyMjc4NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsy
OSw5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBIZWFwOworY2xhc3MgU2xvdFZpc2l0
b3I7CisKIGNsYXNzIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50IDogcHVibGljIE1hcmtpbmdD
b25zdHJhaW50IHsKIHB1YmxpYzoKICAgICBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludChIZWFw
Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShy
ZXZpc2lvbiAyMjc4NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4OCw2ICs0ODgsMTUgQEAgYm9vbCBNYXJrZWRCbG9j
azo6SGFuZGxlOjppc0ZyZWVMaXN0ZWRDZQogICAgIHJldHVybiBtX2RpcmVjdG9yeS0+aXNGcmVl
TGlzdGVkQ2VsbCh0YXJnZXQpOwogfQogCit2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmFzc29j
aWF0ZVdpdGhPcmlnaW4oU2VjdXJpdHlPcmlnaW5Ub2tlbiBzZWN1cml0eU9yaWdpblRva2VuKQor
eworICAgIGlmIChtX3NlY3VyaXR5T3JpZ2luVG9rZW4gPT0gc2VjdXJpdHlPcmlnaW5Ub2tlbikK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1lbXNldCgmYmxvY2soKSwgMCwgZW5kQXRvbSAq
IGF0b21TaXplKTsKKyAgICBtX3NlY3VyaXR5T3JpZ2luVG9rZW4gPSBzZWN1cml0eU9yaWdpblRv
a2VuOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDIyNzg0OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJEZXN0cnVjdGlvbk1vZGUuaCIKICNpbmNs
dWRlICJIZWFwQ2VsbC5oIgogI2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgorI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luVG9rZW4uaCIKICNpbmNsdWRlICJXZWFrU2V0LmgiCiAjaW5jbHVkZSA8
d3RmL0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvQml0bWFwLmg+CkBAIC0xOTQsNiArMTk1LDkg
QEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgdm9pZCBkdW1wU3RhdGUoUHJpbnRTdHJlYW0m
KTsKICAgICAgICAgCisgICAgICAgIHZvaWQgYXNzb2NpYXRlV2l0aE9yaWdpbihTZWN1cml0eU9y
aWdpblRva2VuKTsKKyAgICAgICAgU2VjdXJpdHlPcmlnaW5Ub2tlbiBzZWN1cml0eU9yaWdpblRv
a2VuKCkgY29uc3QgeyByZXR1cm4gbV9zZWN1cml0eU9yaWdpblRva2VuOyB9CisgICAgICAgIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIEhhbmRsZShIZWFwJiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRv
ciosIHZvaWQqKTsKICAgICAgICAgCkBAIC0yMjksNiArMjMzLDggQEAgcHVibGljOgogICAgICAg
ICBXZWFrU2V0IG1fd2Vha1NldDsKICAgICAgICAgCiAgICAgICAgIE1hcmtlZEJsb2NrKiBtX2Js
b2NrIHsgbnVsbHB0ciB9OworICAgICAgICAKKyAgICAgICAgU2VjdXJpdHlPcmlnaW5Ub2tlbiBt
X3NlY3VyaXR5T3JpZ2luVG9rZW4geyAwIH07CiAgICAgfTsKIAogcHJpdmF0ZTogICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TZWN1cml0eU9yaWdpblRva2VuLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TZWN1cml0eU9yaWdpblRva2Vu
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TZWN1cml0
eU9yaWdpblRva2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpblRva2VuLmgiCisKKyNpbmNsdWRlIDx3dGYvQXRv
bWljcy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworU2VjdXJpdHlPcmlnaW5Ub2tlbiB1bmlxdWVT
ZWN1cml0eU9yaWdpblRva2VuKCkKK3sKKyAgICBzdGF0aWMgU2VjdXJpdHlPcmlnaW5Ub2tlbiBj
b3VudGVyOworICAgIHJldHVybiBXVEY6OmF0b21pY0V4Y2hhbmdlQWRkKCZjb3VudGVyLCAxKSAr
IDE7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TZWN1cml0eU9yaWdpblRva2VuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2VjdXJpdHlPcmlnaW5Ub2tlbi5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NlY3VyaXR5T3JpZ2luVG9rZW4uaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiB1
aW50NjRfdCBTZWN1cml0eU9yaWdpblRva2VuOworCitKU19FWFBPUlRfUFJJVkFURSBTZWN1cml0
eU9yaWdpblRva2VuIHVuaXF1ZVNlY3VyaXR5T3JpZ2luVG9rZW4oKTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2Fj
aGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExv
Y2FsQ2FjaGUuY3BwCShyZXZpc2lvbiAyMjc4NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9UaHJlYWRMb2NhbENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTkgKzMyLDIy
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1SZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gVGhyZWFk
TG9jYWxDYWNoZTo6Y3JlYXRlKEhlYXAmIGhlYXApCitSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4g
VGhyZWFkTG9jYWxDYWNoZTo6Y3JlYXRlKEhlYXAmIGhlYXAsIFNlY3VyaXR5T3JpZ2luVG9rZW4g
c2VjdXJpdHlPcmlnaW5Ub2tlbikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRocmVhZExv
Y2FsQ2FjaGUoaGVhcCkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGhyZWFkTG9jYWxDYWNo
ZShoZWFwLCBzZWN1cml0eU9yaWdpblRva2VuKSk7CiB9CiAKLVRocmVhZExvY2FsQ2FjaGU6OlRo
cmVhZExvY2FsQ2FjaGUoSGVhcCYgaGVhcCkKK1RocmVhZExvY2FsQ2FjaGU6OlRocmVhZExvY2Fs
Q2FjaGUoSGVhcCYgaGVhcCwgU2VjdXJpdHlPcmlnaW5Ub2tlbiBzZWN1cml0eU9yaWdpblRva2Vu
KQogICAgIDogbV9oZWFwKGhlYXApCisgICAgLCBtX3NlY3VyaXR5T3JpZ2luVG9rZW4oc2VjdXJp
dHlPcmlnaW5Ub2tlbikKIHsKICAgICBtX2RhdGEgPSBhbGxvY2F0ZURhdGEoKTsKKyAgICBkYXRh
TG9nKFJhd1BvaW50ZXIodGhpcyksICI6IGNyZWF0aW5nIFRMQy5cbiIpOwogfQogCiBUaHJlYWRM
b2NhbENhY2hlOjp+VGhyZWFkTG9jYWxDYWNoZSgpCiB7CisgICAgZGF0YUxvZyhSYXdQb2ludGVy
KHRoaXMpLCAiOiBkZXN0cm95aW5nIFRMQy5cbiIpOwogICAgIGRlc3Ryb3lEYXRhKG1fZGF0YSk7
CiB9CiAKQEAgLTU5LDcgKzYyLDcgQEAgVGhyZWFkTG9jYWxDYWNoZTo6RGF0YSogVGhyZWFkTG9j
YWxDYWNoZQogICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9m
ZnNldCArPSBzaXplb2YoTG9jYWxBbGxvY2F0b3IpKQogICAgICAgICBuZXcgKCZhbGxvY2F0b3Io
KnJlc3VsdCwgb2Zmc2V0KSkgTG9jYWxBbGxvY2F0b3IoV1RGTW92ZShhbGxvY2F0b3IoKm1fZGF0
YSwgb2Zmc2V0KSkpOwogICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IG9sZFNpemU7IG9mZnNldCA8
IGxheW91dC5zaXplOyBvZmZzZXQgKz0gc2l6ZW9mKExvY2FsQWxsb2NhdG9yKSkKLSAgICAgICAg
bmV3ICgmYWxsb2NhdG9yKCpyZXN1bHQsIG9mZnNldCkpIExvY2FsQWxsb2NhdG9yKGxheW91dC5k
aXJlY3Rvcmllc1tvZmZzZXQgLyBzaXplb2YoTG9jYWxBbGxvY2F0b3IpXSk7CisgICAgICAgIG5l
dyAoJmFsbG9jYXRvcigqcmVzdWx0LCBvZmZzZXQpKSBMb2NhbEFsbG9jYXRvcih0aGlzLCBsYXlv
dXQuZGlyZWN0b3JpZXNbb2Zmc2V0IC8gc2l6ZW9mKExvY2FsQWxsb2NhdG9yKV0pOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKQEAgLTcwLDcgKzczLDcgQEAgdm9pZCBUaHJlYWRMb2NhbENhY2hl
OjpkZXN0cm95RGF0YShEYXRhKgogICAgIGZhc3RGcmVlKGRhdGEpOwogfQogCi12b2lkIFRocmVh
ZExvY2FsQ2FjaGU6Omluc3RhbGxTbG93KFZNJiB2bSkKK3ZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6
aW5zdGFsbFNsb3coVk0mIHZtLCBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4qIHByZXZpb3VzKQog
ewogI2lmIFVTRShGQVNUX1RMU19GT1JfVExDKQogICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBv
bmNlRmxhZzsKQEAgLTgzLDggKzg2LDEzIEBAIHZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFs
bFNsb3coVk0mIHYKICAgICAKICAgICByZWYoKTsKICAgICAKLSAgICBpZiAoUmVmUHRyPFRocmVh
ZExvY2FsQ2FjaGU+IG9sZENhY2hlID0gZ2V0KHZtKSkKLSAgICAgICAgb2xkQ2FjaGUtPmRlcmVm
KCk7CisgICAgaWYgKFRocmVhZExvY2FsQ2FjaGU6OkRhdGEqIG9sZENhY2hlRGF0YSA9IGdldElt
cGwodm0pKSB7CisgICAgICAgIFRocmVhZExvY2FsQ2FjaGUqIG9sZENhY2hlID0gb2xkQ2FjaGVE
YXRhLT5jYWNoZTsKKyAgICAgICAgaWYgKHByZXZpb3VzKQorICAgICAgICAgICAgKnByZXZpb3Vz
ID0gYWRvcHRSZWYob2xkQ2FjaGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvbGRDYWNo
ZS0+ZGVyZWYoKTsKKyAgICB9CiAgICAgCiAgICAgaW5zdGFsbERhdGEodm0sIG1fZGF0YSk7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5o
CShyZXZpc2lvbiAyMjc4NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRM
b2NhbENhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDkgKzI1LDEzIEBACiAKICNwcmFnbWEg
b25jZQogCisjaW5jbHVkZSAiQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmgiCisjaW5jbHVkZSAiTG9j
YWxBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpblRva2VuLmgiCiAjaW5jbHVk
ZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvRmFzdFRMUy5oPgogI2luY2x1ZGUg
PHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAog
bmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM5LDkgKzQzLDkgQEAgY2xhc3MgVGhyZWFkTG9jYWxDYWNo
ZSA6IHB1YmxpYyBUaHJlYWRTYQogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIAog
cHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gY3JlYXRlKEhlYXAm
KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+
IGNyZWF0ZShIZWFwJiwgU2VjdXJpdHlPcmlnaW5Ub2tlbiA9IHVuaXF1ZVNlY3VyaXR5T3JpZ2lu
VG9rZW4oKSk7CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgflRocmVhZExvY2FsQ2FjaGUo
KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5UaHJlYWRMb2NhbENhY2hlKCk7CiAK
ICAgICBzdGF0aWMgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IGdldChWTSYpOwogICAgIApAQCAt
NDksNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgLy8gb3B0aW1pemluZyBmb3IgdGhlIGNhc2UgdGhh
dCB5b3UncmUganVzdCBpbnN0YWxsaW5nIHRoZSBjYWNoZSB0aGF0IGlzIGFscmVhZHkgaW5zdGFs
bGVkLiBUaGlzCiAgICAgLy8gYXNzdW1lcyBhIHJlbGF0aXZlbHkgc21hbGwgbnVtYmVyIG9mIGNh
Y2hlcyBvciBsb3cgY2hhbmNlIG9mIGFjdHVhbCBjb250ZXh0IHN3aXRjaCBjb21iaW5lZAogICAg
IC8vIHdpdGggcG9zc2libHkgaGlnaCByYXRlIG9mICJJIG1heSBoYXZlIGNvbnRleHQgc3dpdGNo
ZWQiIHNpdGVzIHRoYXQgY2FsbCB0aGlzIG91dCBvZiBwYXJhbm9pYS4KLSAgICB2b2lkIGluc3Rh
bGwoVk0mKTsKKyAgICB2b2lkIGluc3RhbGwoVk0mLCBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4q
ID0gbnVsbHB0cik7CiAgICAgCiAgICAgc3RhdGljIExvY2FsQWxsb2NhdG9yJiBhbGxvY2F0b3Io
Vk0mLCBzaXplX3Qgb2Zmc2V0KTsKICAgICAKQEAgLTU5LDExICs2MywxNCBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNpemVJbkRhdGEoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoRGF0YSwgc2l6ZSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRmly
c3RBbGxvY2F0b3JJbkRhdGEoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRGF0YSwgYWxsb2Nh
dG9yKTsgfQogICAgIAorICAgIFNlY3VyaXR5T3JpZ2luVG9rZW4gc2VjdXJpdHlPcmlnaW5Ub2tl
bigpIGNvbnN0IHsgcmV0dXJuIG1fc2VjdXJpdHlPcmlnaW5Ub2tlbjsgfQorCitwcm90ZWN0ZWQ6
ICAgIAorICAgIFRocmVhZExvY2FsQ2FjaGUoSGVhcCYsIFNlY3VyaXR5T3JpZ2luVG9rZW4pOwor
ICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgVk07CiAgICAgCi0gICAgVGhyZWFkTG9j
YWxDYWNoZShIZWFwJik7Ci0gICAgCiAgICAgc3RydWN0IERhdGEgewogICAgICAgICBzaXplX3Qg
c2l6ZTsKICAgICAgICAgVGhyZWFkTG9jYWxDYWNoZSogY2FjaGU7CkBAIC03Niw3ICs4Myw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBkZXN0cm95RGF0YShEYXRhKik7CiAgICAgc3RhdGljIExvY2Fs
QWxsb2NhdG9yJiBhbGxvY2F0b3IoRGF0YSYgZGF0YSwgc2l6ZV90IG9mZnNldCk7CiAKLSAgICB2
b2lkIGluc3RhbGxTbG93KFZNJik7CisgICAgdm9pZCBpbnN0YWxsU2xvdyhWTSYsIFJlZlB0cjxU
aHJlYWRMb2NhbENhY2hlPiopOwogICAgIHN0YXRpYyB2b2lkIGluc3RhbGxEYXRhKFZNJiwgRGF0
YSopOwogICAgIAogICAgIExvY2FsQWxsb2NhdG9yJiBhbGxvY2F0b3JTbG93KFZNJiwgc2l6ZV90
IG9mZnNldCk7CkBAIC05MSw2ICs5OCw4IEBAIHByaXZhdGU6CiAgICAgLy8gaXQncyBjb3JyZWN0
IGZvciBpbW1vcnRhbCBjYWNoZXMuCiAgICAgSGVhcCYgbV9oZWFwOwogICAgIERhdGEqIG1fZGF0
YSB7IG51bGxwdHIgfTsKKyAgICAKKyAgICBTZWN1cml0eU9yaWdpblRva2VuIG1fc2VjdXJpdHlP
cmlnaW5Ub2tlbjsKIAogI2lmIFVTRShGQVNUX1RMU19GT1JfVExDKQogICAgIHN0YXRpYyBjb25z
dCBwdGhyZWFkX2tleV90IHRsc0tleSA9IFdURl9HQ19UTENfS0VZOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oCShy
ZXZpc2lvbiAyMjc4NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2Nh
bENhY2hlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGUuaCIKKyNpbmNsdWRlICJWTS5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDcsMTEgKzQ4LDE0IEBAIGlubGluZSBSZWZQdHI8VGhy
ZWFkTG9jYWxDYWNoZT4gVGhyZWFkTG8KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotaW5saW5l
IHZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFsbChWTSYgdm0pCitpbmxpbmUgdm9pZCBUaHJl
YWRMb2NhbENhY2hlOjppbnN0YWxsKFZNJiB2bSwgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+KiBw
cmV2aW91cykKIHsKLSAgICBpZiAoZ2V0SW1wbCh2bSkgPT0gbV9kYXRhKQorICAgIGlmIChnZXRJ
bXBsKHZtKSA9PSBtX2RhdGEpIHsKKyAgICAgICAgaWYgKHByZXZpb3VzKQorICAgICAgICAgICAg
KnByZXZpb3VzID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuOwotICAgIGluc3RhbGxTbG93KHZt
KTsKKyAgICB9CisgICAgaW5zdGFsbFNsb3codm0sIHByZXZpb3VzKTsKIH0KIAogaW5saW5lIExv
Y2FsQWxsb2NhdG9yJiBUaHJlYWRMb2NhbENhY2hlOjphbGxvY2F0b3IoVk0mIHZtLCBzaXplX3Qg
b2Zmc2V0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCShyZXZpc2lvbiAyMjc4NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTEsNyArNDkxLDcgQEAg
cHVibGljOgogICAgIGNvbnN0IFJ1bnRpbWVGbGFncyYgcnVudGltZUZsYWdzKCkgY29uc3QgeyBy
ZXR1cm4gbV9ydW50aW1lRmxhZ3M7IH0KIAogcHJvdGVjdGVkOgotICAgIEpTX0VYUE9SVF9QUklW
QVRFIGV4cGxpY2l0IEpTR2xvYmFsT2JqZWN0KFZNJiwgU3RydWN0dXJlKiwgY29uc3QgR2xvYmFs
T2JqZWN0TWV0aG9kVGFibGUqID0gMCwgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+ID0gbnVsbHB0
cik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgZXhwbGljaXQgSlNHbG9iYWxPYmplY3QoVk0mLCBT
dHJ1Y3R1cmUqLCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSogPSBudWxscHRyLCBSZWZQ
dHI8VGhyZWFkTG9jYWxDYWNoZT4gPSBudWxscHRyKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwCShyZXZpc2lvbiAyMjc4NDkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTUVudHJ5U2NvcGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw3ICs0MSw3IEBAIFZNRW50cnlTY29wZTo6Vk1FbnRyeVNjb3BlKFZNJiB2bSwgSlNH
bG8KICAgICA6IG1fdm0odm0pCiAgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpCiB7
Ci0gICAgZ2xvYmFsT2JqZWN0LT50aHJlYWRMb2NhbENhY2hlKCkuaW5zdGFsbCh2bSk7CisgICAg
Z2xvYmFsT2JqZWN0LT50aHJlYWRMb2NhbENhY2hlKCkuaW5zdGFsbCh2bSwgJm1fcHJldmlvdXNU
TEMpOwogICAgIEFTU0VSVCghRGlzYWxsb3dWTVJlZW50cnk6OmlzSW5FZmZlY3RPbkN1cnJlbnRU
aHJlYWQoKSk7CiAgICAgQVNTRVJUKFRocmVhZDo6Y3VycmVudCgpLnN0YWNrKCkuaXNHcm93aW5n
RG93bndhcmQoKSk7CiAgICAgaWYgKCF2bS5lbnRyeVNjb3BlKSB7CkBAIC03MSwxMSArNzEsMTQg
QEAgdm9pZCBWTUVudHJ5U2NvcGU6OmFkZERpZFBvcExpc3RlbmVyKHN0ZAogCiBWTUVudHJ5U2Nv
cGU6On5WTUVudHJ5U2NvcGUoKQogeworICAgIGlmIChtX3ByZXZpb3VzVExDKQorICAgICAgICBt
X3ByZXZpb3VzVExDLT5pbnN0YWxsKG1fdm0pOworICAgIAogICAgIGlmIChtX3ZtLmVudHJ5U2Nv
cGUgIT0gdGhpcykKICAgICAgICAgcmV0dXJuOwogCiAgICAgVHJhY2VQb2ludChWTUVudHJ5U2Nv
cGVFbmQpOwotCisgICAgCiAgICAgaWYgKG1fdm0ud2F0Y2hkb2coKSkKICAgICAgICAgbV92bS53
YXRjaGRvZygpLT5leGl0ZWRWTSgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTUVudHJ5U2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTUVudHJ5U2NvcGUuaAkocmV2aXNpb24gMjI3ODQ5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYg
KzMxLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKK2NsYXNz
IFRocmVhZExvY2FsQ2FjaGU7CiBjbGFzcyBWTTsKIAogY2xhc3MgVk1FbnRyeVNjb3BlIHsKQEAg
LTQ3LDYgKzQ4LDcgQEAgcHJpdmF0ZToKICAgICBWTSYgbV92bTsKICAgICBKU0dsb2JhbE9iamVj
dCogbV9nbG9iYWxPYmplY3Q7CiAgICAgVmVjdG9yPHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4+IG1f
ZGlkUG9wTGlzdGVuZXJzOworICAgIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBtX3ByZXZpb3Vz
VExDOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
Mjc5MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw2NiBAQAorMjAxOC0wMS0zMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgor
CisgICAgICAgIEdsb2JhbCBvYmplY3RzIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBUTENzIHRvIGFs
bG9jYXRlIGZyb20gZGlmZmVyZW50IGJsb2NrcyBmcm9tIGVhY2ggb3RoZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjIyNworCisgICAgICAgIFJl
dmlld2VkIGJ5IEFuZHkgRXN0ZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8g
Y2hhbmdlIGluIGJlaGF2aW9yLgorICAgICAgICAKKyAgICAgICAgQWRvcHQgSlNDIFRMQyBBUEkg
dG8gcHV0IGRpc3RhbmNlIGJldHdlZW4gb2JqZWN0cyBmcm9tIGRpZmZlcmVudCBzZWN1cml0eSBv
cmlnaW4uCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9oZWFwL1RocmVhZExvY2FsQ2Fj
aGUuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3Q6OkpTRE9NR2xvYmFsT2JqZWN0
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RP
TVdpbmRvd0Jhc2U6OkpTRE9NV2luZG93QmFzZSk6CisgICAgICAgICogcGFnZS9TZWN1cml0eU9y
aWdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6dGhyZWFkTG9jYWxD
YWNoZSk6CisgICAgICAgICogcGFnZS9TZWN1cml0eU9yaWdpbi5oOgorCisyMDE4LTAxLTMxICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR2xvYmFsIG9iamVjdHMg
c2hvdWxkIGJlIGFibGUgdG8gdXNlIFRMQ3MgdG8gYWxsb2NhdGUgZnJvbSBkaWZmZXJlbnQgYmxv
Y2tzIGZyb20gZWFjaCBvdGhlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTgyMjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gbmV3IGJlaGF2aW9yLgorICAgICAg
ICAKKyAgICAgICAgQWRvcHQgSlNDIFRMQyBBUEkgdG8gcHV0IGRpc3RhbmNlIGJldHdlZW4gb2Jq
ZWN0cyBmcm9tIGRpZmZlcmVudCBzZWN1cml0eSBvcmlnaW5zLiBXZWJDb3JlIGhhcworICAgICAg
ICBhIHN1YmNsYXNzIG9mIFRocmVhZExvY2FsQ2FjaGUgdGhhdCBzdXBwb3J0cyBoYXNoLWNvbnNp
bmcgYmFzZWQgb24gdGhlIHJlbGV2YW50IG9yaWdpbiBkYXRhLAorICAgICAgICB3aGljaCB3ZSBl
bmNhcHN1bGF0ZSB3aXRoIFRocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXkuCisgICAgICAgIAorICAg
ICAgICBXb3JrZXJzIGRvbid0IG9wdCBpbnRvIHRoaXMuIFRoZXkganVzdCBnZXQgdGhlIFZNJ3Mg
ZGVmYXVsdCBUTEMgYWxsIHRoZSB0aW1lLgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMv
aGVhcC9UaHJlYWRMb2NhbENhY2hlLmg6IEFkZGVkLgorICAgICAgICAqIFNvdXJjZXMudHh0Ogor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RP
TUdsb2JhbE9iamVjdDo6SlNET01HbG9iYWxPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRE9NR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dC
YXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6SlNET01XaW5kb3dC
YXNlKToKKyAgICAgICAgKiBwYWdlL09yaWdpblRocmVhZExvY2FsQ2FjaGUuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OnRocmVhZExvY2FsQ2FjaGVNYXApOgorICAgICAgICAoV2ViQ29y
ZTo6T3JpZ2luVGhyZWFkTG9jYWxDYWNoZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9y
aWdpblRocmVhZExvY2FsQ2FjaGU6On5PcmlnaW5UaHJlYWRMb2NhbENhY2hlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok9yaWdpblRocmVhZExvY2FsQ2FjaGU6Ok9yaWdpblRocmVhZExvY2FsQ2FjaGUp
OgorICAgICAgICAqIHBhZ2UvT3JpZ2luVGhyZWFkTG9jYWxDYWNoZS5oOiBBZGRlZC4KKyAgICAg
ICAgKiBwYWdlL1NlY3VyaXR5T3JpZ2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luOjp0aHJlYWRMb2NhbENhY2hlKToKKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5T3JpZ2lu
Lmg6CisgICAgICAgICogcGFnZS9UaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5Lmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6VGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleTo6VGhyZWFkTG9jYWxD
YWNoZU9yaWdpbktleSk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRMb2NhbENhY2hlT3JpZ2lu
S2V5OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZExvY2FsQ2Fj
aGVPcmlnaW5LZXk6Om9wZXJhdG9yIT0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFk
TG9jYWxDYWNoZU9yaWdpbktleTo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5Ojppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5OjpoYXNo
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXlIYXNo
OjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXlIYXNo
OjplcXVhbCk6CisKIDIwMTgtMDEtMzEgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdh
QGFwcGxlLmNvbT4KIAogICAgICAgICBCaXRtYXBJbWFnZTo6ZHJhd1BhdHRlcm4oKSBtYXkgbm90
IGRyYXcgYSBjb21wbGV0ZSBmcmFtZSBldmVuIGFmdGVyIGFsbCB0aGUgZGF0YSBpcyByZWNlaXZl
ZApJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyNzg0OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMzM0LDYgKzEzMzQsNyBAQCBwYWdlL01v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuY3BwCiBwYWdlL05hdmlnYXRvci5jcHAKIHBhZ2Uv
TmF2aWdhdG9yQmFzZS5jcHAKIHBhZ2UvT3JpZ2luQWNjZXNzRW50cnkuY3BwCitwYWdlL09yaWdp
blRocmVhZExvY2FsQ2FjaGUuY3BwCiBwYWdlL1BhZ2UuY3BwCiBwYWdlL1BhZ2VDb25maWd1cmF0
aW9uLmNwcAogcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAv
VGhyZWFkTG9jYWxDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMiBAQAorI3ByYWdt
YSBvbmNlCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVGhyZWFkTG9jYWxDYWNoZS5oPgpJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjI3ODQ5KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNDIsNiArMzQyLDggQEAKIAkJMEY1
ODBDRkYwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQmFja2luZy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1ODBDRkIwRjEyREU5QjAwNTFE
Njg5IC8qIFJlbmRlckxheWVyQmFja2luZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGNTgwRkEzMTQ5NjkzOTEwMEZCNUJEOCAvKiBXZWJUaWxl
ZEJhY2tpbmdMYXllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY1ODBGQTExNDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVyLmgg
Ki87IH07CiAJCTBGNTgwRkFGMTQ5ODAwRDQwMEZCNUJEOCAvKiBBbmltYXRpb25VdGlsaXRpZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTgwRkFF
MTQ5ODAwRDQwMEZCNUJEOCAvKiBBbmltYXRpb25VdGlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjVCNDA4NzIwMjEyQzRDMDA4MEY5
MTMgLyogVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QjQwODUyMDIxMkM0NjAwODBGOTEzIC8qIFRocmVh
ZExvY2FsQ2FjaGVPcmlnaW5LZXkuaCAqLzsgfTsKKwkJMEY1QjQwOEEyMDIxMkY3NzAwODBGOTEz
IC8qIE9yaWdpblRocmVhZExvY2FsQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUI0MDg4MjAyMTJGNzMwMDgwRjkxMyAvKiBPcmlnaW5UaHJl
YWRMb2NhbENhY2hlLmggKi87IH07CiAJCTBGNUI3QTU1MTBGNjVEN0EwMDM3NjMwMiAvKiBSZW5k
ZXJFbWJlZGRlZE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY1QjdBNTMxMEY2NUQ3QTAwMzc2MzAyIC8qIFJlbmRlckVtYmVkZGVkT2JqZWN0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1
RTIwMDYxOEU3NzFGQzAwM0VDM0U1IC8qIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RTIwMDUxOEU3NzFG
QzAwM0VDM0U1IC8qIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjA1QUVEMTVGOTQ4NDgwMDRERjBD
MCAvKiBTY3JvbGxpbmdDb25zdHJhaW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2MDVBRUIxNUY5NDg0ODAwNERGMEMwIC8qIFNjcm9sbGluZ0Nv
bnN0cmFpbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTU0OTYsNiArNTQ5OCw5IEBACiAJCTBGNTgwRkExMTQ5NjkzOTEwMEZCNUJEOCAvKiBX
ZWJUaWxlZEJhY2tpbmdMYXllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJUaWxlZEJhY2tpbmdMYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU4
MEZBMjE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJUaWxlZEJhY2tpbmdMYXllci5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1ODBGQUUxNDk4MDBENDAwRkI1QkQ4IC8q
IEFuaW1hdGlvblV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
bmltYXRpb25VdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1QjQw
ODUyMDIxMkM0NjAwODBGOTEzIC8qIFRocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVCNDA4ODIwMjEyRjczMDA4MEY5MTMgLyog
T3JpZ2luVGhyZWFkTG9jYWxDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBPcmlnaW5UaHJlYWRMb2NhbENhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGNUI0MDg5MjAyMTJGNzMwMDgwRjkxMyAvKiBPcmlnaW5UaHJlYWRMb2NhbENhY2hlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9yaWdpblRocmVhZExvY2FsQ2Fj
aGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVCN0E1MjEwRjY1RDdBMDAz
NzYzMDIgLyogUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjVCN0E1MzEwRjY1RDdBMDAzNzYzMDIgLyogUmVuZGVyRW1iZWRkZWRP
YmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyRW1iZWRkZWRP
YmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1RTIwMDUxOEU3NzFGQzAw
M0VDM0U1IC8qIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTk5MzYsOCArOTk0MSw4IEBACiAJCThBRjRFNTU0MTFEQzVBMzYwMDBF
RDNERSAvKiBQZXJmb3JtYW5jZU5hdmlnYXRpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFBlcmZvcm1hbmNlTmF2aWdhdGlvbi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CThBRjRFNTU5MTFEQzVBNjMwMDBFRDNERSAvKiBQZXJmb3JtYW5jZVRpbWluZy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQZXJmb3JtYW5jZVRpbWluZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4QUY0RTU1QTExREM1QTYzMDAwRUQzREUgLyogUGVyZm9ybWFu
Y2VUaW1pbmcuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFBlcmZvcm1hbmNlVGltaW5nLmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOEUzM0NEOTMyMDFBMjlDMTAwRTM5MDkz
IC8qIEdhcExlbmd0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBH
YXBMZW5ndGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4QkQzN0E2NzIwMUJC
MzlDMDAxMTczNEEgLyogUmVhZGFibGVTdHJlYW1DaHVuay5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFk
YWJsZVN0cmVhbUNodW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCThFMzNDRDkz
MjAxQTI5QzEwMEUzOTA5MyAvKiBHYXBMZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gR2FwTGVuZ3RoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOEU0Qzk2RDgxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTRmV0Y2hSZXNwb25zZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ZldGNoUmVzcG9uc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4RTRDOTZEOTFBRDQ0ODM1MDAzNjVBNTAgLyogSlNG
ZXRjaFJlc3BvbnNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmV0Y2hS
ZXNwb25zZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4RUM2Qzk2MTIwMUEyNTAx
MDBGQkZBNTMgLyogR2FwTGVuZ3RoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEdhcExlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTg4MjksNiArMTg4
MzQsOCBAQAogCQkJCTUxODJDMjRCMUYzMTNBRTAwMDU5QkE3QyAvKiBOYXZpZ2F0b3JTZXJ2aWNl
V29ya2VyLmlkbCAqLywKIAkJCQkwMDE0NjI4ODEwM0NEMURFMDAwQjIwREIgLyogT3JpZ2luQWNj
ZXNzRW50cnkuY3BwICovLAogCQkJCTAwMTQ2Mjg5MTAzQ0QxREUwMDBCMjBEQiAvKiBPcmlnaW5B
Y2Nlc3NFbnRyeS5oICovLAorCQkJCTBGNUI0MDg5MjAyMTJGNzMwMDgwRjkxMyAvKiBPcmlnaW5U
aHJlYWRMb2NhbENhY2hlLmNwcCAqLywKKwkJCQkwRjVCNDA4ODIwMjEyRjczMDA4MEY5MTMgLyog
T3JpZ2luVGhyZWFkTG9jYWxDYWNoZS5oICovLAogCQkJCTY1RkVBODY4MDk4MzNBREUwMEJFRDRB
QiAvKiBQYWdlLmNwcCAqLywKIAkJCQk2NUEyMTQ2NzA5N0EzMjkxMDBCOTA1MEEgLyogUGFnZS5o
ICovLAogCQkJCUNENUU1QjYwMUExNUYxNTYwMDBDNjA5RSAvKiBQYWdlQ29uZmlndXJhdGlvbi5j
cHAgKi8sCkBAIC0xODkxOCw2ICsxODkyNSw3IEBACiAJCQkJNjJDMTIxN0IxMUFCOUU3NzAwM0M0
NjJDIC8qIFN1c3BlbmRhYmxlVGltZXIuaCAqLywKIAkJCQkyRDRGOTZGMTFBMUVDQzI0MDA5OEJG
ODggLyogVGV4dEluZGljYXRvci5jcHAgKi8sCiAJCQkJMkQ0Rjk2RjIxQTFFQ0MyNDAwOThCRjg4
IC8qIFRleHRJbmRpY2F0b3IuaCAqLywKKwkJCQkwRjVCNDA4NTIwMjEyQzQ2MDA4MEY5MTMgLyog
VGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleS5oICovLAogCQkJCTFBRTc5RDQwMTg4REI2MUYwMDIy
MzlDMiAvKiBVc2VyQ29udGVudENvbnRyb2xsZXIuY3BwICovLAogCQkJCTFBRTc5RDQxMTg4REI2
MUYwMDIyMzlDMiAvKiBVc2VyQ29udGVudENvbnRyb2xsZXIuaCAqLywKIAkJCQk3QzNGMDFCRjFD
OEU1QUIxMDBBREQ5NjIgLyogVXNlckNvbnRlbnRQcm92aWRlci5jcHAgKi8sCkBAIC0yODA4Myw2
ICsyODA5MSw3IEBACiAJCQkJMUE4NUIyMTEwQTFCMjU4NzAwRDhDODdDIC8qIEpTSFRNTFVMaXN0
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU0QUJDRDUxMzhFQTBCNzAwNzFEMjkxIC8q
IEpTSFRNTFVua25vd25FbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDQ2MTQxNzBDRDY4
MjY5MDBGQURBNzUgLyogSlNIVE1MVmlkZW9FbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjVCNDA4NzIwMjEyQzRDMDA4MEY5MTMgLyogVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODFCRTIwRDMxMUY0QkMzMjAwOTE1REZBIC8qIEpTSURCQ3Vyc29y
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzNEOEVGMDFFMEIyMTQzMDAyM0IwODQgLyogSlNJREJD
dXJzb3JEaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUM1ODVBNjgzMTFENEZCMDgwMDRD
M0U0QiAvKiBKU0lEQkRhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTI4MjY2LDYgKzI4Mjc1
LDcgQEAKIAkJCQkwNzk2OURDMjE3RDE0MTUxMDA3RkY4NDIgLyogSlNSVENTdGF0c1JlcG9ydC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNUUyQzQzNkMxQkNGMDcxRTAwMDFFMkJDIC8qIEpTUlRDVHJh
Y2tFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQzAxQzMwQzI3NERERDAwOUY0RUM5IC8q
IEpTU2NyZWVuLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjVCNDA4QTIwMjEyRjc3MDA4MEY5MTMg
LyogT3JpZ2luVGhyZWFkTG9jYWxDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkRBMTVFQ0Ux
MkIwM0Y2MTAwM0E1ODNBIC8qIEpTU2NyaXB0UHJvY2Vzc29yTm9kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODM0NDc2RUYxREE1QkM1RTAwMkI2RUQyIC8qIEpTU2Nyb2xsVG9PcHRpb25zLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDRUQwNkFEMTFDNzc3NTQ4MDBGREZBRjEgLyogSlNTZWN1cml0eVBv
bGljeVZpb2xhdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDIyNzg0
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDggKzU2LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBpc1JlYWRhYmxlQgogCiBjb25zdCBDbGFzc0luZm8gSlNET01HbG9iYWxPYmplY3Q6OnNf
aW5mbyA9IHsgIkRPTUdsb2JhbE9iamVjdCIsICZKU0dsb2JhbE9iamVjdDo6c19pbmZvLCBudWxs
cHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRE9NR2xvYmFsT2JqZWN0KSB9Owog
Ci1KU0RPTUdsb2JhbE9iamVjdDo6SlNET01HbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgUmVmPERPTVdyYXBwZXJXb3JsZD4mJiB3b3JsZCwgY29uc3QgR2xvYmFsT2Jq
ZWN0TWV0aG9kVGFibGUqIGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQotICAgIDogSlNHbG9iYWxP
YmplY3Qodm0sIHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCitKU0RPTUdsb2Jh
bE9iamVjdDo6SlNET01HbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
UmVmPERPTVdyYXBwZXJXb3JsZD4mJiB3b3JsZCwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFi
bGUqIGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlLCBSZWZQdHI8SlNDOjpUaHJlYWRMb2NhbENhY2hl
PiB0aHJlYWRMb2NhbENhY2hlKQorICAgIDogSlNHbG9iYWxPYmplY3Qodm0sIHN0cnVjdHVyZSwg
Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUsIFdURk1vdmUodGhyZWFkTG9jYWxDYWNoZSkpCiAgICAg
LCBtX2N1cnJlbnRFdmVudCgwKQogICAgICwgbV93b3JsZChXVEZNb3ZlKHdvcmxkKSkKICAgICAs
IG1fd29ybGRJc05vcm1hbChtX3dvcmxkLT5pc05vcm1hbCgpKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyMjc4NDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiV2ViQ29yZUpTQnVpbHRpbklu
dGVybmFscy5oIgogI2luY2x1ZGUgPGhlYXAvSGVhcElubGluZXMuaD4KICNpbmNsdWRlIDxoZWFw
L0xvY2tEdXJpbmdNYXJraW5nLmg+CisjaW5jbHVkZSA8aGVhcC9UaHJlYWRMb2NhbENhY2hlLmg+
CiAjaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
U3RydWN0dXJlSW5saW5lcy5oPgogCkBAIC01MCw3ICs1MSw3IEBAIGNsYXNzIFdFQkNPUkVfRVhQ
T1JUIEpTRE9NR2xvYmFsT2JqZWN0IDoKIHByb3RlY3RlZDoKICAgICBzdHJ1Y3QgSlNET01HbG9i
YWxPYmplY3REYXRhOwogCi0gICAgSlNET01HbG9iYWxPYmplY3QoSlNDOjpWTSYsIEpTQzo6U3Ry
dWN0dXJlKiwgUmVmPERPTVdyYXBwZXJXb3JsZD4mJiwgY29uc3QgSlNDOjpHbG9iYWxPYmplY3RN
ZXRob2RUYWJsZSogPSAwKTsKKyAgICBKU0RPTUdsb2JhbE9iamVjdChKU0M6OlZNJiwgSlNDOjpT
dHJ1Y3R1cmUqLCBSZWY8RE9NV3JhcHBlcldvcmxkPiYmLCBjb25zdCBKU0M6Okdsb2JhbE9iamVj
dE1ldGhvZFRhYmxlKiA9IG51bGxwdHIsIFJlZlB0cjxKU0M6OlRocmVhZExvY2FsQ2FjaGU+ID0g
bnVsbHB0cik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlND
OjpWTSYsIEpTQzo6SlNPYmplY3QqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkocmV2aXNpb24gMjI3ODQ5KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzksNyArNzksNyBAQCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSBKU0RPTVdpbmRvCiB9
OwogCiBKU0RPTVdpbmRvd0Jhc2U6OkpTRE9NV2luZG93QmFzZShWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBSZWZQdHI8RE9NV2luZG93PiYmIHdpbmRvdywgSlNET01XaW5kb3dQcm94eSog
cHJveHkpCi0gICAgOiBKU0RPTUdsb2JhbE9iamVjdCh2bSwgc3RydWN0dXJlLCBwcm94eS0+d29y
bGQoKSwgJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCisgICAgOiBKU0RPTUdsb2JhbE9iamVj
dCh2bSwgc3RydWN0dXJlLCBwcm94eS0+d29ybGQoKSwgJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFi
bGUsIHdpbmRvdy0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS50aHJlYWRMb2NhbENhY2hl
KCkpCiAgICAgLCBtX3dpbmRvd0Nsb3NlV2F0Y2hwb2ludHMoKHdpbmRvdyAmJiB3aW5kb3ctPmZy
YW1lKCkpID8gSXNXYXRjaGVkIDogSXNJbnZhbGlkYXRlZCkKICAgICAsIG1fd3JhcHBlZChXVEZN
b3ZlKHdpbmRvdykpCiAgICAgLCBtX3Byb3h5KHByb3h5KQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9PcmlnaW5UaHJlYWRMb2NhbENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL09yaWdpblRocmVhZExvY2FsQ2FjaGUuY3BwCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvT3JpZ2luVGhyZWFkTG9jYWxDYWNoZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiT3JpZ2luVGhyZWFkTG9j
YWxDYWNoZS5oIgorCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit0eXBlZGVmIEhhc2hNYXA8VGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleSwgT3JpZ2luVGhy
ZWFkTG9jYWxDYWNoZSo+IFRocmVhZExvY2FsQ2FjaGVNYXA7CisKK3N0YXRpYyBUaHJlYWRMb2Nh
bENhY2hlTWFwJiB0aHJlYWRMb2NhbENhY2hlTWFwKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8VGhyZWFkTG9jYWxDYWNoZU1hcD4gbWFwOworICAgIHJldHVybiBtYXA7Cit9CisKK1Jl
ZlB0cjxPcmlnaW5UaHJlYWRMb2NhbENhY2hlPiBPcmlnaW5UaHJlYWRMb2NhbENhY2hlOjpjcmVh
dGUoY29uc3QgVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleSYga2V5KQoreworICAgIGF1dG8gaXRl
ciA9IHRocmVhZExvY2FsQ2FjaGVNYXAoKS5maW5kKGtleSk7CisgICAgaWYgKGl0ZXIgIT0gdGhy
ZWFkTG9jYWxDYWNoZU1hcCgpLmVuZCgpKQorICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7Cisg
ICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPcmlnaW5UaHJlYWRMb2NhbENhY2hlKGtleSkp
OworfQorCitPcmlnaW5UaHJlYWRMb2NhbENhY2hlOjp+T3JpZ2luVGhyZWFkTG9jYWxDYWNoZSgp
Cit7CisgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBkZXN0cm95aW5nIG9yaWdpbiBU
TEMuXG4iKTsKKyAgICBib29sIHJlc3VsdCA9IHRocmVhZExvY2FsQ2FjaGVNYXAoKS5yZW1vdmUo
bV9rZXkpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7Cit9CisKK09yaWdpblRocmVhZExv
Y2FsQ2FjaGU6Ok9yaWdpblRocmVhZExvY2FsQ2FjaGUoY29uc3QgVGhyZWFkTG9jYWxDYWNoZU9y
aWdpbktleSYga2V5KQorICAgIDogVGhyZWFkTG9jYWxDYWNoZShjb21tb25WTSgpLmhlYXAsIEpT
Qzo6dW5pcXVlU2VjdXJpdHlPcmlnaW5Ub2tlbigpKQorICAgICwgbV9rZXkoa2V5KQoreworICAg
IGF1dG8gcmVzdWx0ID0gdGhyZWFkTG9jYWxDYWNoZU1hcCgpLmFkZChrZXksIHRoaXMpOworICAg
IFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CisgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAi
OiBjcmVhdGluZyBvcmlnaW4gVExDLlxuIik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9PcmlnaW5UaHJlYWRMb2NhbENhY2hlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9PcmlnaW5UaHJlYWRMb2NhbENhY2hlLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9PcmlnaW5UaHJlYWRMb2NhbENh
Y2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRo
cmVhZExvY2FsQ2FjaGVPcmlnaW5LZXkuaCIKKyNpbmNsdWRlIDxoZWFwL1RocmVhZExvY2FsQ2Fj
aGUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE9yaWdpblRocmVhZExvY2Fs
Q2FjaGUgOiBwdWJsaWMgSlNDOjpUaHJlYWRMb2NhbENhY2hlIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmUHRyPE9yaWdpblRocmVhZExvY2FsQ2FjaGU+IGNyZWF0ZShjb25zdCBUaHJlYWRMb2Nh
bENhY2hlT3JpZ2luS2V5Jik7CisgICAgCisgICAgfk9yaWdpblRocmVhZExvY2FsQ2FjaGUoKSBv
dmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBPcmlnaW5UaHJlYWRMb2NhbENhY2hlKGNvbnN0IFRo
cmVhZExvY2FsQ2FjaGVPcmlnaW5LZXkmKTsKKyAgICAKKyAgICBUaHJlYWRMb2NhbENhY2hlT3Jp
Z2luS2V5IG1fa2V5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkocmV2aXNpb24gMjI3ODQ5KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
MCwxMSArMzAsMTUgQEAKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogCiAjaW5jbHVkZSAi
QmxvYlVSTC5oIgorI2luY2x1ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5o
IgotI2luY2x1ZGUgIlVSTC5oIgorI2luY2x1ZGUgIk9yaWdpblRocmVhZExvY2FsQ2FjaGUuaCIK
ICNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlNlY3VyaXR5UG9saWN5Lmgi
CisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleS5oIgogI2luY2x1ZGUgIlRocmVh
ZGFibGVCbG9iUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlIDxydW50aW1l
L1ZNLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC01OTUsNCArNTk5
LDE1IEBAIGJvb2wgU2VjdXJpdHlPcmlnaW46OmlzTG9jYWxIb3N0T3JMb29wYmEKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKK1JlZlB0cjxKU0M6OlRocmVhZExvY2FsQ2FjaGU+IFNlY3VyaXR5T3Jp
Z2luOjp0aHJlYWRMb2NhbENhY2hlKCkKK3sKKyAgICBpZiAoIW1fdGhyZWFkTG9jYWxDYWNoZSkg
eworICAgICAgICBpZiAoaXNVbmlxdWUoKSB8fCAoaXNMb2NhbCgpICYmIG1fZW5mb3JjZUZpbGVQ
YXRoU2VwYXJhdGlvbikpCisgICAgICAgICAgICBtX3RocmVhZExvY2FsQ2FjaGUgPSBKU0M6OlRo
cmVhZExvY2FsQ2FjaGU6OmNyZWF0ZShjb21tb25WTSgpLmhlYXApOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX3RocmVhZExvY2FsQ2FjaGUgPSBPcmlnaW5UaHJlYWRMb2NhbENhY2hlOjpj
cmVhdGUoVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleShtX2hvc3QsIG1fcHJvdG9jb2wsIG1fcG9y
dCkpOworICAgIH0KKyAgICByZXR1cm4gbV90aHJlYWRMb2NhbENhY2hlOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2lu
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5oCShy
ZXZpc2lvbiAyMjc4NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOCw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5j
bHVkZSA8aGVhcC9UaHJlYWRMb2NhbENhY2hlLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVS
ZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTIwMyw2
ICsyMDQsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1BvdGVudGlhbGx5VHJ1c3R3b3J0aHkoKSBj
b25zdCB7IHJldHVybiBtX2lzUG90ZW50aWFsbHlUcnVzdHdvcnRoeTsgfQogCiAgICAgc3RhdGlj
IGJvb2wgaXNMb2NhbEhvc3RPckxvb3BiYWNrSVBBZGRyZXNzKGNvbnN0IFVSTCYpOworICAgIAor
ICAgIFJlZlB0cjxKU0M6OlRocmVhZExvY2FsQ2FjaGU+IHRocmVhZExvY2FsQ2FjaGUoKTsKIAog
cHJpdmF0ZToKICAgICBTZWN1cml0eU9yaWdpbigpOwpAQCAtMjMyLDYgKzIzNSw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX2VuZm9yY2VGaWxlUGF0aFNlcGFyYXRpb24geyBmYWxzZSB9OwogICAg
IGJvb2wgbV9uZWVkc1N0b3JhZ2VBY2Nlc3NGcm9tRmlsZVVSTHNRdWlyayB7IGZhbHNlIH07CiAg
ICAgYm9vbCBtX2lzUG90ZW50aWFsbHlUcnVzdHdvcnRoeSB7IGZhbHNlIH07CisgICAgUmVmUHRy
PEpTQzo6VGhyZWFkTG9jYWxDYWNoZT4gbV90aHJlYWRMb2NhbENhY2hlOwogfTsKIAogYm9vbCBz
aG91bGRUcmVhdEFzUG90ZW50aWFsbHlUcnVzdHdvcnRoeShjb25zdCBVUkwmKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleS5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktl
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGhyZWFk
TG9jYWxDYWNoZU9yaWdpbktleSB7CitwdWJsaWM6CisgICAgVGhyZWFkTG9jYWxDYWNoZU9yaWdp
bktleSgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5
KFN0cmluZyBob3N0LCBTdHJpbmcgcHJvdG9jb2wsIHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+IHBv
cnQpCisgICAgICAgIDogbV9ob3N0KGhvc3QpCisgICAgICAgICwgbV9wcm90b2NvbChwcm90b2Nv
bCkKKyAgICAgICAgLCBtX3BvcnQocG9ydCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFRocmVh
ZExvY2FsQ2FjaGVPcmlnaW5LZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAg
ICAgICA6IG1faG9zdChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2hvc3QgPT0gb3RoZXIubV9o
b3N0CisgICAgICAgICAgICAmJiBtX3Byb3RvY29sID09IG90aGVyLm1fcHJvdG9jb2wKKyAgICAg
ICAgICAgICYmIG1fcG9ydCA9PSBvdGhlci5tX3BvcnQ7CisgICAgfQorICAgIAorICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5JiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisgICAgCisg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
KnRoaXMgIT0gVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleSgpOworICAgIH0KKyAgICAKKyAgICBi
b29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9ob3N0LmlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2hvc3QuaGFzaCgpICsgbV9wcm90b2NvbC5oYXNoKCkg
KyAobV9wb3J0ID8gKm1fcG9ydCA6IDApOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgU3Ry
aW5nIG1faG9zdDsKKyAgICBTdHJpbmcgbV9wcm90b2NvbDsKKyAgICBzdGQ6Om9wdGlvbmFsPHVp
bnQxNl90PiBtX3BvcnQ7Cit9OworCitzdHJ1Y3QgVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleUhh
c2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFRocmVhZExvY2FsQ2FjaGVPcmln
aW5LZXkmIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBrZXkuaGFzaCgpOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5
JiBhLCBjb25zdCBUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5JiBiKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGEgPT0gYjsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRv
Q29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsgLy8gVGhpcyBpcyBhIHNhZmUgY2hvaWNl
LCBwb3NzaWJseSBtb3JlIGNvbnNlcnZhdGl2ZSB0aGFuIG5lY2Vzc2FyeS4KK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
PiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxXZWJD
b3JlOjpUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5PiB7CisgICAgdHlwZWRlZiBXZWJDb3JlOjpU
aHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5SGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWU+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxXZWJD
b3JlOjpUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5PiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxX
ZWJDb3JlOjpUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5PiB7CisgICAgc3RhdGljIGNvbnN0IGJv
b2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOyAvLyBUaGlzIGlzIGEgc2FmZSBjaG9pY2UsIHBv
c3NpYmx5IG1vcmUgY29uc2VydmF0aXZlIHRoYW4gbmVjZXNzYXJ5LgorfTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>333100</attachid>
            <date>2018-02-05 11:19:22 -0800</date>
            <delta_ts>2018-02-05 11:35:24 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>67113</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI4MTA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDczIEBA
CisyMDE4LTAxLTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R2xvYmFsIG9iamVjdHMgc2hvdWxkIGJlIGFibGUgdG8gdXNlIFRMQ3MgdG8gYWxsb2NhdGUgZnJv
bSBkaWZmZXJlbnQgYmxvY2tzIGZyb20gZWFjaCBvdGhlcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgyMjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
SkYgQmFzdGllbi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgdXNlcyBUTENzIHRvIGNyZWF0ZSBh
dCBsZWFzdCBgbWluaW11bURpc3RhbmNlQmV0d2VlbkNlbGxzRnJvbURpZmZlcmVuT3JpZ2luc2Ag
Ynl0ZXMgb2YKKyAgICAgICAgZGlzdGFuY2UgYmV0d2VlbiBvYmplY3RzIGZyb20gZGlmZmVyZW50
IG9yaWdpbnMsIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tYmluYXRpb24gb2YgdGhpbmdzLiBGb3IK
KyAgICAgICAgc2hvcnQgbGV0cyByZWZlciB0byB0aGF0IGNvbnN0YW50IGFzIEsuCisgICAgICAg
IAorICAgICAgICAtIFNpbmNlIHIyMjc3MjEsIExhcmdlQWxsb2NhdGlvbiBwdXRzIEsgYnl0ZXMg
cGFkZGluZyBhdCB0aGUgZW5kIG9mIGVhY2ggYWxsb2NhdGlvbi4KKyAgICAgICAgCisgICAgICAg
IC0gU2luY2UgcjIyNzcxOCwgTWFya2VkQmxvY2sgcHV0cyBhdCBsZWFzdCBLIGJ5dGVzIGluIGl0
cyBmb290ZXIuCisgICAgICAgIAorICAgICAgICAtIFNpbmNlIHIyMjc2MTcsIGdsb2JhbCBvYmpl
Y3RzIGNhbiBoYXZlIHRoZWlyIG93biBUTENzLCB3aGljaCBtYWtlIHRoZW0gYWxsb2NhdGUgZnJv
bSBhCisgICAgICAgICAgZGlmZmVyZW50IHNldCBvZiBibG9ja3MgdGhhbiBvdGhlciBnbG9iYWwg
b2JqZWN0cy4gVGhlIFRMQyBvZiBhIGdsb2JhbCBvYmplY3QgY29tZXMgaW50bworICAgICAgICAg
IGVmZmVjdCB3aGVuIHlvdSBlbnRlciB0aGUgVk0gdmlhIHRoYXQgZ2xvYmFsIG9iamVjdC4KKyAg
ICAgICAgCisgICAgICAgIC0gV2l0aCB0aGlzIGNoYW5nZSwgVExDcyBhbmQgYmxvY2tzIGJvdGgg
aGF2ZSBzZWN1cml0eSBvcmlnaW5zLiBBIFRMQyB3aWxsIG9ubHkgdXNlIGJsb2NrcyB0aGF0Cisg
ICAgICAgICAgc2hhcmUgdGhlIHNhbWUgc2VjdXJpdHkgb3JpZ2luIG9yIGVtcHR5IGJsb2NrcyAo
aW4gd2hpY2ggY2FzZSB3ZSB6ZXJvIHRoZSBibG9jayBhbmQgY2hhbmdlCisgICAgICAgICAgaXRz
IHNlY3VyaXR5IG9yaWdpbikuCisgICAgICAgIAorICAgICAgICBXZWJDb3JlIGRldGVybWluZXMg
dGhlIFRMQy1HbG9iYWxPYmplY3QgbWFwcGluZy4gQnkgZGVmYXVsdCwgZ2xvYmFsIG9iamVjdHMg
d291bGQgc2ltcGx5IHVzZQorICAgICAgICB0aGUgVk0ncyBkZWZhdWx0IFRMQy4gV2ViQ29yZSBt
YWtlcyBpdCBzbyB0aGF0IERPTSB3aW5kb3dzIChidXQgbm90IHdvcmtlciBnbG9iYWwgb2JqZWN0
cykgZ2V0CisgICAgICAgIGEgVExDIGJhc2VkIG9uIHRoZWlyIGRvY3VtZW50J3MgU2VjdXJpdHlP
cmlnaW4uCisgICAgICAgIAorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogaGVhcC9CbG9j
a0RpcmVjdG9yeS5jcHA6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5OjpmaW5kQmxvY2tG
b3JBbGxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OnByZXBhcmVGb3JB
bGxvY2F0aW9uKToKKyAgICAgICAgKiBoZWFwL0Jsb2NrRGlyZWN0b3J5Lmg6CisgICAgICAgICog
aGVhcC9Mb2NhbEFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjpM
b2NhbEFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjpyZXNldCk6Cisg
ICAgICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjp+TG9jYWxBbGxvY2F0b3IpOgorICAgICAgICAo
SlNDOjpMb2NhbEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6Okxv
Y2FsQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKToKKyAgICAgICAgKiBo
ZWFwL0xvY2FsQWxsb2NhdG9yLmg6CisgICAgICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjp0bGMg
Y29uc3QpOgorICAgICAgICAqIGhlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwOgor
ICAgICAgICAqIGhlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaDoKKyAgICAgICAgKiBo
ZWFwL01hcmtlZEJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6
YXNzb2NpYXRlV2l0aE9yaWdpbik6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAg
ICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpzZWN1cml0eU9yaWdpblRva2VuIGNvbnN0
KToKKyAgICAgICAgKiBoZWFwL1NlY3VyaXR5T3JpZ2luVG9rZW4uY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6dW5pcXVlU2VjdXJpdHlPcmlnaW5Ub2tlbik6CisgICAgICAgICogaGVhcC9TZWN1
cml0eU9yaWdpblRva2VuLmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAvVGhyZWFkTG9jYWxDYWNo
ZS5jcHA6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGU6OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OlRocmVhZExvY2FsQ2FjaGU6OlRocmVhZExvY2FsQ2FjaGUpOgorICAgICAgICAoSlND
OjpUaHJlYWRMb2NhbENhY2hlOjphbGxvY2F0ZURhdGEpOgorICAgICAgICAoSlNDOjpUaHJlYWRM
b2NhbENhY2hlOjppbnN0YWxsU2xvdyk6CisgICAgICAgICogaGVhcC9UaHJlYWRMb2NhbENhY2hl
Lmg6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGU6OnNlY3VyaXR5T3JpZ2luVG9rZW4g
Y29uc3QpOgorICAgICAgICAqIGhlYXAvVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFsbCk6CisgICAgICAgICogcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpKU0dsb2Jh
bE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpjcmVhdGVUaHJlYWRMb2Nh
bENhY2hlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsT2JqZWN0Ojp0aHJlYWRMb2NhbENhY2hlKToKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxPYmplY3Q6OnRocmVhZExvY2FsQ2FjaGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcDoKKyAgICAgICAgKEpTQzo6Vk1FbnRyeVNjb3BlOjpW
TUVudHJ5U2NvcGUpOgorICAgICAgICAoSlNDOjpWTUVudHJ5U2NvcGU6On5WTUVudHJ5U2NvcGUp
OgorICAgICAgICAqIHJ1bnRpbWUvVk1FbnRyeVNjb3BlLmg6CisKIDIwMTgtMDItMDUgIERvbiBP
bG1zdGVhZCAgPGRvbi5vbG1zdGVhZEBzb255LmNvbT4KIAogICAgICAgICBKYXZhU2NyaXB0Q29y
ZSBmaWxlcyBzaG91bGQgbm90IGJlIGluY2x1ZGVkIHJlbGF0aXZlbHkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyODEwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLS8vIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmln
aHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLwogLy8g
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxMiw2ICs1MTIsNyBAQCBoZWFwL01hcmtpbmdD
b25zdHJhaW50U2V0LmNwcAogaGVhcC9NYXJraW5nQ29uc3RyYWludFNvbHZlci5jcHAKIGhlYXAv
TXV0YXRvclNjaGVkdWxlci5jcHAKIGhlYXAvTXV0YXRvclN0YXRlLmNwcAoraGVhcC9TZWN1cml0
eU9yaWdpblRva2VuLmNwcAogaGVhcC9TaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAKIGhlYXAv
U2xvdFZpc2l0b3IuY3BwCiBoZWFwL1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjI4MTA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTI5NCw2ICsyOTQsNyBAQAogCQkwRjQyNkE0ODE0NjBDQkIzMDAx
MzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3Zlcnku
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQy
NkE0OTE0NjBDQkI3MDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYg
LyogVmlydHVhbFJlZ2lzdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNEIxNDYwQ0Q2RTAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTRBMTQ2
MENENkIwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY0MkIzQzMyMDFFQzlGRjAwMzU3MDMxIC8qIFNlY3Vy
aXR5T3JpZ2luVG9rZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNDJCM0MyMjAxRUM5RkQwMDM1NzAzMSAvKiBTZWN1cml0eU9yaWdpblRva2VuLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MzE3
MzgxNDZCQUM2OTAwN0UzODkwIC8qIExpc3RhYmxlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MzE3MzYxNDZCQUM2NTAwN0UzODkwIC8q
IExpc3RhYmxlSGFuZGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNDU3MDM5MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFk
Q29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0
NTcwMzcxQkU0NEM5MTAwNjJBNjI5IC8qIEFpckVsaW1pbmF0ZURlYWRDb2RlLmggKi87IH07CiAJ
CTBGNDU3MDNEMUJFNDVGMEEwMDYyQTYyOSAvKiBBaXJSZXBvcnRVc2VkUmVnaXN0ZXJzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ1NzAzQjFCRTQ1
RjBBMDA2MkE2MjkgLyogQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5oICovOyB9OwpAQCAtMjI2Miw2
ICsyMjYzLDggQEAKIAkJMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3Zlcnku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmly
dHVhbFJlZ2lzdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpcnR1YWxS
ZWdpc3Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0QTE0NjBDRDZC
MDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEYXRhRm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDJCM0MwMjAx
RUI1MDkwMDM1NzAzMSAvKiBBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEY0MkIzQzIyMDFFQzlGRDAwMzU3MDMxIC8qIFNlY3VyaXR5T3JpZ2luVG9rZW4uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VjdXJpdHlPcmlnaW5Ub2tlbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQzMTczNjE0NkJBQzY1MDA3RTM4OTAgLyogTGlzdGFi
bGVIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpc3RhYmxlSGFu
ZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ1NzAzNjFCRTQ0QzkxMDA2
MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyRWxpbWluYXRlRGVhZENvZGUuY3BwOyBwYXRoID0gYjMvYWlyL0Fp
ckVsaW1pbmF0ZURlYWRDb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0
NTcwMzcxQkU0NEM5MTAwNjJBNjI5IC8qIEFpckVsaW1pbmF0ZURlYWRDb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckVsaW1pbmF0ZURlYWRDb2RlLmg7IHBhdGggPSBi
My9haXIvQWlyRWxpbWluYXRlRGVhZENvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTU1NTksMjEgKzU1NjIsMTQgQEAKIAkJMTQyRTMxMkExMzRGRjBBNjAwQUZBREI1IC8qIGhl
YXAgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTBGNzVB
MDU0MjAwRDI1RUYwMDM4RTJDRiAvKiBBbGxvY2F0b3IuaCAqLywKLQkJCQkwRjc1QTA1RDIwMEQy
NUYxMDAzOEUyQ0YgLyogQWxsb2NhdG9ySW5saW5lcy5oICovLAotCQkJCTBGNzVBMDU5MjAwRDI1
RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5jcHAgKi8sCi0JCQkJMEY3NUEwNTcyMDBEMjVG
MDAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9yLmggKi8sCi0JCQkJMEY3NUEwNUEyMDBEMjVGMDAw
MzhFMkNGIC8qIExvY2FsQWxsb2NhdG9ySW5saW5lcy5oICovLAotCQkJCTBGNzVBMDU4MjAwRDI1
RjAwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlLmNwcCAqLywKLQkJCQkwRjc1QTA1NTIwMEQy
NUVGMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZS5oICovLAotCQkJCTBGNzVBMDU2MjAwRDI1
RUYwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oICovLAotCQkJCTBGNzVBMDVC
MjAwRDI1RjEwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlTGF5b3V0LmNwcCAqLywKLQkJCQkw
Rjc1QTA1QzIwMEQyNUYxMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oICovLAog
CQkJCTBGRUMzQzUwMUYzM0E0MTYwMEY1OUI2QyAvKiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmNw
cCAqLywKIAkJCQkwRkVDM0M1MTFGMzNBNDE2MDBGNTlCNkMgLyogQWxpZ25lZE1lbW9yeUFsbG9j
YXRvci5oICovLAogCQkJCTBGQTc2MjBBMURCOTU5RjYwMEI3QTJGRCAvKiBBbGxvY2F0aW5nU2Nv
cGUuaCAqLywKIAkJCQkwRkRDRTExQjFGQUU2MUY0MDA2RjM5MDEgLyogQWxsb2NhdGlvbkZhaWx1
cmVNb2RlLmggKi8sCisJCQkJMEY0MkIzQzAyMDFFQjUwOTAwMzU3MDMxIC8qIEFsbG9jYXRvci5j
cHAgKi8sCisJCQkJMEY3NUEwNTQyMDBEMjVFRjAwMzhFMkNGIC8qIEFsbG9jYXRvci5oICovLAog
CQkJCTBGMzBDQjVEMUZDRTQ2QjQwMDRCNTMyMyAvKiBBbGxvY2F0b3JGb3JNb2RlLmggKi8sCisJ
CQkJMEY3NUEwNUQyMDBEMjVGMTAwMzhFMkNGIC8qIEFsbG9jYXRvcklubGluZXMuaCAqLywKIAkJ
CQkwRkI0Njc3RTFGRERBNkU1MDAzRkNCMDkgLyogQXRvbUluZGljZXMuaCAqLywKIAkJCQlDMkI5
MTZDNDE0REEwNDBDMDBDQkFDODYgLyogQmxvY2tEaXJlY3RvcnkuY3BwICovLAogCQkJCUMyQjkx
NkMxMTREQTAxNEUwMENCQUM4NiAvKiBCbG9ja0RpcmVjdG9yeS5oICovLApAQCAtNTY3NCw2ICs1
NjcwLDkgQEAKIAkJCQkwRjA3MEE0NTFENTQzQTg5MDA2RTcyMzIgLyogTGFyZ2VBbGxvY2F0aW9u
LmNwcCAqLywKIAkJCQkwRjA3MEE0NjFENTQzQTg5MDA2RTcyMzIgLyogTGFyZ2VBbGxvY2F0aW9u
LmggKi8sCiAJCQkJMEY0MzE3MzYxNDZCQUM2NTAwN0UzODkwIC8qIExpc3RhYmxlSGFuZGxlci5o
ICovLAorCQkJCTBGNzVBMDU5MjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5jcHAg
Ki8sCisJCQkJMEY3NUEwNTcyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9yLmggKi8s
CisJCQkJMEY3NUEwNUEyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9ySW5saW5lcy5o
ICovLAogCQkJCTBGMjA4QUQ2MURGMDkyNUEwMDdEMzI2OSAvKiBMb2NrRHVyaW5nTWFya2luZy5o
ICovLAogCQkJCTE0QjcyMzNGMTJEN0QwREEwMDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJrZXIu
Y3BwICovLAogCQkJCTE0QjcyMzQwMTJEN0QwREEwMDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJr
ZXIuaCAqLywKQEAgLTU3MDMsNiArNTcwMiw3IEBACiAJCQkJMEZEMEU1RUYxRTQ2QkYyMzAwMDZB
QjA4IC8qIFJlZ2lzdGVyU3RhdGUuaCAqLywKIAkJCQkwRjdDRjk0RTFEQkVFRTg2MDA5OENDMTIg
LyogUmVsZWFzZUhlYXBBY2Nlc3NTY29wZS5oICovLAogCQkJCTBGMkM2M0E5MUU0RkE0MkMwMEMx
MzgzOSAvKiBSdW5uaW5nU2NvcGUuaCAqLywKKwkJCQkwRjQyQjNDMjIwMUVDOUZEMDAzNTcwMzEg
LyogU2VjdXJpdHlPcmlnaW5Ub2tlbi5oICovLAogCQkJCTBGNEQ4Qzc2MUZDQTNDRjIwMDFEMzJB
QyAvKiBTaW1wbGVNYXJraW5nQ29uc3RyYWludC5jcHAgKi8sCiAJCQkJMEY0RDhDNzcxRkNBM0NG
MzAwMUQzMkFDIC8qIFNpbXBsZU1hcmtpbmdDb25zdHJhaW50LmggKi8sCiAJCQkJQzIyNTQ5NDIx
NUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKQEAgLTU3MjQsNiArNTcyNCwx
MSBAQAogCQkJCTBGRDc5QTJDMUVCQkJEQjIwMERBODhEMyAvKiBTeW5jaHJvbm91c25lc3MuaCAq
LywKIAkJCQkwRjFGQjM4QTFFMTczQTYyMDBBOUJFNTAgLyogU3luY2hyb25vdXNTdG9wVGhlV29y
bGRNdXRhdG9yU2NoZWR1bGVyLmNwcCAqLywKIAkJCQkwRjFGQjM4QjFFMTczQTYyMDBBOUJFNTAg
LyogU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9yU2NoZWR1bGVyLmggKi8sCisJCQkJMEY3
NUEwNTgyMDBEMjVGMDAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGUuY3BwICovLAorCQkJCTBG
NzVBMDU1MjAwRDI1RUYwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlLmggKi8sCisJCQkJMEY3
NUEwNTYyMDBEMjVFRjAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmggKi8sCisJ
CQkJMEY3NUEwNUIyMDBEMjVGMTAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGVMYXlvdXQuY3Bw
ICovLAorCQkJCTBGNzVBMDVDMjAwRDI1RjEwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlTGF5
b3V0LmggKi8sCiAJCQkJMTQxNDQ4Q0MxM0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRl
ci5oICovLAogCQkJCTBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNvbmRpdGlvbmFsRmlu
YWxpemVyLmggKi8sCiAJCQkJMEY0RDhDNzIxRkM3QTk3MzAwMUQzMkFDIC8qIFZpc2l0Q291bnRl
ci5oICovLApAQCAtODUyMiw2ICs4NTI3LDcgQEAKIAkJCQkwRjdDMzlGRjFDOTBDNTVCMDA0ODAx
NTEgLyogREZHT3BJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGRTE3QTBCOENDMDA3
NzNBRDggLyogREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZEODJFNTcxNDFEQUYxMDAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjQyQjNDMzIwMUVDOUZGMDAzNTcwMzEgLyogU2VjdXJpdHlPcmlnaW5Ub2tl
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMjYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09T
UkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMwOTc2QTE0
NjhBNkY3MDBDRjI0NDIgLyogREZHT1NSRXhpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVC
RUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5jcHAJKHJl
dmlzaW9uIDIyODEwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0
b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJTdXBl
clNhbXBsZXIuaCIKKyNpbmNsdWRlICJUaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oIgogI2luY2x1
ZGUgIlZNLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKQEAgLTgwLDE0ICs4MSwy
MCBAQCBNYXJrZWRCbG9jazo6SGFuZGxlKiBCbG9ja0RpcmVjdG9yeTo6ZmluCiAgICAgcmV0dXJu
IG1fYmxvY2tzW21fZW1wdHlDdXJzb3JdOwogfQogCi1NYXJrZWRCbG9jazo6SGFuZGxlKiBCbG9j
a0RpcmVjdG9yeTo6ZmluZEJsb2NrRm9yQWxsb2NhdGlvbigpCitNYXJrZWRCbG9jazo6SGFuZGxl
KiBCbG9ja0RpcmVjdG9yeTo6ZmluZEJsb2NrRm9yQWxsb2NhdGlvbihMb2NhbEFsbG9jYXRvciYg
YWxsb2NhdG9yKQogewotICAgIG1fYWxsb2NhdGlvbkN1cnNvciA9IChtX2NhbkFsbG9jYXRlQnV0
Tm90RW1wdHkgfCBtX2VtcHR5KS5maW5kQml0KG1fYWxsb2NhdGlvbkN1cnNvciwgdHJ1ZSk7Ci0g
ICAgaWYgKG1fYWxsb2NhdGlvbkN1cnNvciA+PSBtX2Jsb2Nrcy5zaXplKCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIAotICAgIHNldElzQ2FuQWxsb2NhdGVCdXROb3RFbXB0eShOb0xv
Y2tpbmdOZWNlc3NhcnksIG1fYWxsb2NhdGlvbkN1cnNvciwgZmFsc2UpOwotICAgIHJldHVybiBt
X2Jsb2Nrc1ttX2FsbG9jYXRpb25DdXJzb3JdOworICAgIGZvciAoOzspIHsKKyAgICAgICAgYWxs
b2NhdG9yLm1fYWxsb2NhdGlvbkN1cnNvciA9IChtX2NhbkFsbG9jYXRlQnV0Tm90RW1wdHkgfCBt
X2VtcHR5KS5maW5kQml0KGFsbG9jYXRvci5tX2FsbG9jYXRpb25DdXJzb3IsIHRydWUpOworICAg
ICAgICBpZiAoYWxsb2NhdG9yLm1fYWxsb2NhdGlvbkN1cnNvciA+PSBtX2Jsb2Nrcy5zaXplKCkp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBi
bG9ja0luZGV4ID0gYWxsb2NhdG9yLm1fYWxsb2NhdGlvbkN1cnNvcisrOworICAgICAgICBNYXJr
ZWRCbG9jazo6SGFuZGxlKiByZXN1bHQgPSBtX2Jsb2Nrc1tibG9ja0luZGV4XTsKKyAgICAgICAg
aWYgKHJlc3VsdC0+c2VjdXJpdHlPcmlnaW5Ub2tlbigpID09IGFsbG9jYXRvci50bGMoKS0+c2Vj
dXJpdHlPcmlnaW5Ub2tlbigpKSB7CisgICAgICAgICAgICBzZXRJc0NhbkFsbG9jYXRlQnV0Tm90
RW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBibG9ja0luZGV4LCBmYWxzZSk7CisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfQogfQogCiBNYXJrZWRCbG9jazo6SGFu
ZGxlKiBCbG9ja0RpcmVjdG9yeTo6dHJ5QWxsb2NhdGVCbG9jaygpCkBAIC0xODMsOCArMTkwLDYg
QEAgdm9pZCBCbG9ja0RpcmVjdG9yeTo6cHJlcGFyZUZvckFsbG9jYXRpbwogICAgICAgICAgICAg
YWxsb2NhdG9yLT5wcmVwYXJlRm9yQWxsb2NhdGlvbigpOwogICAgICAgICB9KTsKICAgICAKLSAg
ICBtX2FsbG9jYXRpb25DdXJzb3IgPSAwOwotICAgIG1fZW1wdHlDdXJzb3IgPSAwOwogICAgIG1f
dW5zd2VwdEN1cnNvciA9IDA7CiAgICAgCiAgICAgbV9lZGVuLmNsZWFyQWxsKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmgJKHJldmlzaW9uIDIy
ODEwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAgY2xhc3MgSGVhcDsKIGNsYXNzIElzb0NlbGxT
ZXQ7CiBjbGFzcyBNYXJrZWRTcGFjZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKK2Ns
YXNzIFRocmVhZExvY2FsQ2FjaGU7CiBjbGFzcyBUaHJlYWRMb2NhbENhY2hlTGF5b3V0OwogCiAj
ZGVmaW5lIEZPUl9FQUNIX0JMT0NLX0RJUkVDVE9SWV9CSVQobWFjcm8pIFwKQEAgLTE2MiwxMiAr
MTYzLDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXBCaXRzKFByaW50U3RyZWFtJiA9IFdURjo6
ZGF0YUZpbGUoKSk7CiAgICAgCiBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBMb2NhbEFsbG9j
YXRvcjsKICAgICBmcmllbmQgY2xhc3MgSXNvQ2VsbFNldDsKKyAgICBmcmllbmQgY2xhc3MgTG9j
YWxBbGxvY2F0b3I7CisgICAgZnJpZW5kIGNsYXNzIExvY2FsU2lkZUFsbG9jYXRvcjsKICAgICBm
cmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CiAgICAgZnJpZW5kIGNsYXNzIFRocmVhZExvY2FsQ2Fj
aGVMYXlvdXQ7CiAgICAgCi0gICAgTWFya2VkQmxvY2s6OkhhbmRsZSogZmluZEJsb2NrRm9yQWxs
b2NhdGlvbigpOworICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGZpbmRCbG9ja0ZvckFsbG9jYXRp
b24oTG9jYWxBbGxvY2F0b3ImKTsKICAgICAKICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiB0cnlB
bGxvY2F0ZUJsb2NrKCk7CiAgICAgCkBAIC0xODQsOCArMTg2LDcgQEAgcHJpdmF0ZToKICAgICAK
ICAgICAvLyBBZnRlciB5b3UgZG8gc29tZXRoaW5nIHRvIGEgYmxvY2sgYmFzZWQgb24gb25lIG9m
IHRoZXNlIGN1cnNvcnMsIHlvdSBjbGVhciB0aGUgYml0IGluIHRoZQogICAgIC8vIGNvcnJlc3Bv
bmRpbmcgYml0dmVjdG9yIGFuZCBsZWF2ZSB0aGUgY3Vyc29yIHdoZXJlIGl0IHdhcy4KLSAgICBz
aXplX3QgbV9hbGxvY2F0aW9uQ3Vyc29yIHsgMCB9OyAvLyBQb2ludHMgdG8gdGhlIG5leHQgYmxv
Y2sgdGhhdCBpcyBhIGNhbmRpZGF0ZSBmb3IgYWxsb2NhdGlvbi4KLSAgICBzaXplX3QgbV9lbXB0
eUN1cnNvciB7IDAgfTsgLy8gUG9pbnRzIHRvIHRoZSBuZXh0IGJsb2NrIHRoYXQgaXMgYSBjYW5k
aWRhdGUgZm9yIGVtcHR5IGFsbG9jYXRpb24gKGFsbG9jYXRpbmcgaW4gZW1wdHkgYmxvY2tzKS4K
KyAgICBzaXplX3QgbV9lbXB0eUN1cnNvciB7IDAgfTsKICAgICBzaXplX3QgbV91bnN3ZXB0Q3Vy
c29yIHsgMCB9OyAvLyBQb2ludHMgdG8gdGhlIG5leHQgYmxvY2sgdGhhdCBpcyBhIGNhbmRpZGF0
ZSBmb3IgaW5jcmVtZW50YWwgc3dlZXBpbmcuCiAgICAgCiAgICAgdW5zaWduZWQgbV9jZWxsU2l6
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5j
cHAJKHJldmlzaW9uIDIyODEwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2Fs
QWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsOSBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotTG9jYWxBbGxvY2F0b3I6OkxvY2FsQWxsb2NhdG9yKEJsb2NrRGlyZWN0b3J5
KiBkaXJlY3RvcnkpCi0gICAgOiBtX2RpcmVjdG9yeShkaXJlY3RvcnkpCitMb2NhbEFsbG9jYXRv
cjo6TG9jYWxBbGxvY2F0b3IoVGhyZWFkTG9jYWxDYWNoZSogdGxjLCBCbG9ja0RpcmVjdG9yeSog
ZGlyZWN0b3J5KQorICAgIDogbV90bGModGxjKQorICAgICwgbV9kaXJlY3RvcnkoZGlyZWN0b3J5
KQogICAgICwgbV9jZWxsU2l6ZShkaXJlY3RvcnktPm1fY2VsbFNpemUpCiAgICAgLCBtX2ZyZWVM
aXN0KG1fY2VsbFNpemUpCiB7CkBAIC00MiwxMSArNDMsMTMgQEAgTG9jYWxBbGxvY2F0b3I6Okxv
Y2FsQWxsb2NhdG9yKEJsb2NrRGlyZQogfQogCiBMb2NhbEFsbG9jYXRvcjo6TG9jYWxBbGxvY2F0
b3IoTG9jYWxBbGxvY2F0b3ImJiBvdGhlcikKLSAgICA6IG1fZGlyZWN0b3J5KG90aGVyLm1fZGly
ZWN0b3J5KQorICAgIDogbV90bGMob3RoZXIubV90bGMpCisgICAgLCBtX2RpcmVjdG9yeShvdGhl
ci5tX2RpcmVjdG9yeSkKICAgICAsIG1fY2VsbFNpemUob3RoZXIubV9jZWxsU2l6ZSkKICAgICAs
IG1fZnJlZUxpc3QoV1RGTW92ZShvdGhlci5tX2ZyZWVMaXN0KSkKICAgICAsIG1fY3VycmVudEJs
b2NrKG90aGVyLm1fY3VycmVudEJsb2NrKQogICAgICwgbV9sYXN0QWN0aXZlQmxvY2sob3RoZXIu
bV9sYXN0QWN0aXZlQmxvY2spCisgICAgLCBtX2FsbG9jYXRpb25DdXJzb3Iob3RoZXIubV9hbGxv
Y2F0aW9uQ3Vyc29yKQogewogICAgIG90aGVyLnJlc2V0KCk7CiAgICAgaWYgKG90aGVyLmlzT25M
aXN0KCkpIHsKQEAgLTYxLDYgKzY0LDcgQEAgdm9pZCBMb2NhbEFsbG9jYXRvcjo6cmVzZXQoKQog
ICAgIG1fZnJlZUxpc3QuY2xlYXIoKTsKICAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7CiAg
ICAgbV9sYXN0QWN0aXZlQmxvY2sgPSBudWxscHRyOworICAgIG1fYWxsb2NhdGlvbkN1cnNvciA9
IDA7CiB9CiAKIExvY2FsQWxsb2NhdG9yOjp+TG9jYWxBbGxvY2F0b3IoKQpAQCAtODAsNiArODQs
MTUgQEAgTG9jYWxBbGxvY2F0b3I6On5Mb2NhbEFsbG9jYXRvcigpCiAgICAgLy8gICB0aGF0IGl0
IGlzIG5vdCByZWFjaGFibGUuIFRoZXJlZm9yZSwgdGhlIFRMQyBzaG91bGQgc3RpbGwgYmUgaW4g
YSBmdWxseSByZXNldCBzdGF0ZSBhdCB0aGUKICAgICAvLyAgIHRpbWUgb2YgZGVzdHJ1Y3Rpb24g
YmVjYXVzZSBmb3IgaXQgdG8gZ2V0IGludG8gYW55IG90aGVyIHN0YXRlLCBzb21lb25lIG11c3Qg
aGF2ZSBhbGxvY2F0ZWQKICAgICAvLyAgIGluIGl0ICh3aGljaCBpcyBpbXBvc3NpYmxlIGJlY2F1
c2UgaXQncyBzdXBwb3NlZGx5IHVucmVhY2hhYmxlKS4KKyAgICAvLworICAgIC8vIE15IGJpZ2dl
c3Qgd29ycnkgd2l0aCB0aGVzZSBhc3NlcnRpb25zIGlzIHRoYXQgdGhlcmUgd2lsbCBiZSBzb21l
IFRMQyB0aGF0IGdldHMgc2V0IGFzIHRoZQorICAgIC8vIGN1cnJlbnQgb25lIGJ1dCB0aGVuIG5l
dmVyIHJlc2V0LCBhbmQgaW4gdGhlIG1lYW50aW1lIHRoZSBnbG9iYWwgb2JqZWN0IHRoYXQgb3du
cyBpdCBnZXRzCisgICAgLy8gZGVzdHJveWVkLgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGlm
IHdlIGRpZCBob2xkIG9udG8gc29tZSBtZW1vcnkgYW5kIHdlIHdhbnRlZCB0byByZXR1cm4gaXQg
dGhlbiB0aGlzIGNvdWxkIGJlIHdlaXJkLgorICAgIC8vIFdlIHdvdWxkIHBvdGVudGlhbGx5IGhh
dmUgdG8gc3RvcEFsbG9jYXRpbmcoKS4gVGhhdCB3b3VsZCBtZWFuIGhhdmluZyB0byByZXR1cm4g
YSBibG9jayB0byB0aGUKKyAgICAvLyBCbG9ja0RpcmVjdG9yeS4gSXQncyBub3QgY2xlYXIgdGhh
dCB0aGUgQmxvY2tEaXJlY3RvcnkgaXMgcHJlcGFyZWQgdG8gaGFuZGxlIHRoYXQgZHVyaW5nCisg
ICAgLy8gc3dlZXBpbmcgYW5vdGhlciBibG9jaywgZm9yIGV4YW1wbGUuCiAgICAgYm9vbCBvayA9
IHRydWU7CiAgICAgaWYgKCFtX2ZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKSB7CiAgICAg
ICAgIGRhdGFMb2coIkZBVEFMOiAiLCBSYXdQb2ludGVyKHRoaXMpLCAiLT5+TG9jYWxBbGxvY2F0
b3IgaGFzIG5vbi1lbXB0eSBmcmVlLWxpc3QuXG4iKTsKQEAgLTE2NCw2ICsxNzcsNyBAQCB2b2lk
KiBMb2NhbEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZShHCiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KKyAgICBibG9jay0+YXNzb2NpYXRlV2l0aE9y
aWdpbihtX3RsYy0+c2VjdXJpdHlPcmlnaW5Ub2tlbigpKTsKICAgICBtX2RpcmVjdG9yeS0+YWRk
QmxvY2soYmxvY2spOwogICAgIHJlc3VsdCA9IGFsbG9jYXRlSW4oYmxvY2spOwogICAgIEFTU0VS
VChyZXN1bHQpOwpAQCAtMjAxLDcgKzIxNSw3IEBAIHZvaWQqIExvY2FsQWxsb2NhdG9yOjp0cnlB
bGxvY2F0ZVdpdGhvdXQKICAgICBBU1NFUlQobV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwo
KSk7CiAgICAgCiAgICAgZm9yICg7OykgewotICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBi
bG9jayA9IG1fZGlyZWN0b3J5LT5maW5kQmxvY2tGb3JBbGxvY2F0aW9uKCk7CisgICAgICAgIE1h
cmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9kaXJlY3RvcnktPmZpbmRCbG9ja0ZvckFsbG9j
YXRpb24oKnRoaXMpOwogICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgYnJlYWs7CiAK
QEAgLTIyMCw2ICsyMzQsNyBAQCB2b2lkKiBMb2NhbEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVXaXRo
b3V0CiAgICAgICAgICAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIGEgcmVtb3RlIGNoYW5jZSB0aGF0
IGEgYmxvY2sgbWF5IGhhdmUgYm90aCBjYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5CiAgICAgICAgICAg
ICAvLyBhbmQgZW1wdHkgc2V0IGF0IHRoZSBzYW1lIHRpbWUuCiAgICAgICAgICAgICBibG9jay0+
cmVtb3ZlRnJvbURpcmVjdG9yeSgpOworICAgICAgICAgICAgYmxvY2stPmFzc29jaWF0ZVdpdGhP
cmlnaW4obV90bGMtPnNlY3VyaXR5T3JpZ2luVG9rZW4oKSk7CiAgICAgICAgICAgICBtX2RpcmVj
dG9yeS0+YWRkQmxvY2soYmxvY2spOwogICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlSW4oYmxv
Y2spOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFs
bG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2Fs
QWxsb2NhdG9yLmgJKHJldmlzaW9uIDIyODEwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0xvY2FsQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEyICszMywxMyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQmxvY2tEaXJlY3Rvcnk7CiBjbGFzcyBHQ0RlZmVycmFs
Q29udGV4dDsKK2NsYXNzIFRocmVhZExvY2FsQ2FjaGU7CiAKIGNsYXNzIExvY2FsQWxsb2NhdG9y
IDogcHVibGljIEJhc2ljUmF3U2VudGluZWxOb2RlPExvY2FsQWxsb2NhdG9yPiB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoTG9jYWxBbGxvY2F0b3IpOwogICAgIAogcHVibGljOgotICAgIExv
Y2FsQWxsb2NhdG9yKEJsb2NrRGlyZWN0b3J5Kik7CisgICAgTG9jYWxBbGxvY2F0b3IoVGhyZWFk
TG9jYWxDYWNoZSosIEJsb2NrRGlyZWN0b3J5Kik7CiAgICAgTG9jYWxBbGxvY2F0b3IoTG9jYWxB
bGxvY2F0b3ImJik7CiAgICAgfkxvY2FsQWxsb2NhdG9yKCk7CiAgICAgCkBAIC01Myw4ICs1NCwx
MiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNlbGxTaXplKCk7CiAg
ICAgCiAgICAgYm9vbCBpc0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqKSBjb25zdDsKKyAgICAK
KyAgICBUaHJlYWRMb2NhbENhY2hlKiB0bGMoKSBjb25zdCB7IHJldHVybiBtX3RsYzsgfQogCiBw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBCbG9ja0RpcmVjdG9yeTsKKyAgICAKICAgICB2b2lk
IHJlc2V0KCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZShH
Q0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSk7CiAg
ICAgdm9pZCBkaWRDb25zdW1lRnJlZUxpc3QoKTsKQEAgLTYzLDExICs2OCwxNiBAQCBwcml2YXRl
OgogICAgIHZvaWQqIGFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRsZSopOwogICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKEdDRGVmZXJyYWxDb250ZXh0
Kik7CiAKKyAgICBUaHJlYWRMb2NhbENhY2hlKiBtX3RsYzsKICAgICBCbG9ja0RpcmVjdG9yeSog
bV9kaXJlY3Rvcnk7CiAgICAgdW5zaWduZWQgbV9jZWxsU2l6ZTsKICAgICBGcmVlTGlzdCBtX2Zy
ZWVMaXN0OwogICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIG1fY3VycmVudEJsb2NrIHsgbnVsbHB0
ciB9OwogICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIG1fbGFzdEFjdGl2ZUJsb2NrIHsgbnVsbHB0
ciB9OworICAgIAorICAgIC8vIEFmdGVyIHlvdSBkbyBzb21ldGhpbmcgdG8gYSBibG9jayBiYXNl
ZCBvbiBvbmUgb2YgdGhlc2UgY3Vyc29ycywgeW91IGNsZWFyIHRoZSBiaXQgaW4gdGhlCisgICAg
Ly8gY29ycmVzcG9uZGluZyBiaXR2ZWN0b3IgYW5kIGxlYXZlIHRoZSBjdXJzb3Igd2hlcmUgaXQg
d2FzLgorICAgIHNpemVfdCBtX2FsbG9jYXRpb25DdXJzb3IgeyAwIH07IC8vIFBvaW50cyB0byB0
aGUgbmV4dCBibG9jayB0aGF0IGlzIGEgY2FuZGlkYXRlIGZvciBhbGxvY2F0aW9uLgogfTsKIAog
aW5saW5lIHB0cmRpZmZfdCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVy
Z2luZ0NvbnN0cmFpbnQuY3BwCShyZXZpc2lvbiAyMjgxMDYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYXJrU3Rh
Y2tNZXJnaW5nQ29uc3RyYWludC5oIgogCisjaW5jbHVkZSAiR0NTZWdtZW50ZWRBcnJheUlubGlu
ZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiBNYXJr
U3RhY2tNZXJnaW5nQ29uc3RyYWludDo6TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQoSGVhcCYg
aGVhcCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdD
b25zdHJhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAkocmV2aXNpb24gMjI4MTA2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjksNiArMjksOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgSGVhcDsK
K2NsYXNzIFNsb3RWaXNpdG9yOworCiBjbGFzcyBNYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludCA6
IHB1YmxpYyBNYXJraW5nQ29uc3RyYWludCB7CiBwdWJsaWM6CiAgICAgTWFya1N0YWNrTWVyZ2lu
Z0NvbnN0cmFpbnQoSGVhcCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEJsb2NrLmNwcAkocmV2aXNpb24gMjI4MTA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODgsNiArNDg4LDE1IEBA
IGJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNGcmVlTGlzdGVkQ2UKICAgICByZXR1cm4gbV9k
aXJlY3RvcnktPmlzRnJlZUxpc3RlZENlbGwodGFyZ2V0KTsKIH0KIAordm9pZCBNYXJrZWRCbG9j
azo6SGFuZGxlOjphc3NvY2lhdGVXaXRoT3JpZ2luKFNlY3VyaXR5T3JpZ2luVG9rZW4gc2VjdXJp
dHlPcmlnaW5Ub2tlbikKK3sKKyAgICBpZiAobV9zZWN1cml0eU9yaWdpblRva2VuID09IHNlY3Vy
aXR5T3JpZ2luVG9rZW4pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtZW1zZXQoJmJsb2Nr
KCksIDAsIGVuZEF0b20gKiBhdG9tU2l6ZSk7CisgICAgbV9zZWN1cml0eU9yaWdpblRva2VuID0g
c2VjdXJpdHlPcmlnaW5Ub2tlbjsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIG5hbWVzcGFj
ZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShy
ZXZpc2lvbiAyMjgxMDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiRGVzdHJ1Y3Rp
b25Nb2RlLmgiCiAjaW5jbHVkZSAiSGVhcENlbGwuaCIKICNpbmNsdWRlICJJdGVyYXRpb25TdGF0
dXMuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpblRva2VuLmgiCiAjaW5jbHVkZSAiV2Vha1Nl
dC5oIgogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL0JpdG1hcC5oPgpA
QCAtMTk0LDYgKzE5NSw5IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIHZvaWQgZHVtcFN0
YXRlKFByaW50U3RyZWFtJik7CiAgICAgICAgIAorICAgICAgICB2b2lkIGFzc29jaWF0ZVdpdGhP
cmlnaW4oU2VjdXJpdHlPcmlnaW5Ub2tlbik7CisgICAgICAgIFNlY3VyaXR5T3JpZ2luVG9rZW4g
c2VjdXJpdHlPcmlnaW5Ub2tlbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VjdXJpdHlPcmlnaW5Ub2tl
bjsgfQorICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBIYW5kbGUoSGVhcCYsIEFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IqLCB2b2lkKik7CiAgICAgICAgIApAQCAtMjI5LDYgKzIzMyw4IEBA
IHB1YmxpYzoKICAgICAgICAgV2Vha1NldCBtX3dlYWtTZXQ7CiAgICAgICAgIAogICAgICAgICBN
YXJrZWRCbG9jayogbV9ibG9jayB7IG51bGxwdHIgfTsKKyAgICAgICAgCisgICAgICAgIFNlY3Vy
aXR5T3JpZ2luVG9rZW4gbV9zZWN1cml0eU9yaWdpblRva2VuIHsgMCB9OwogICAgIH07CiAKIHBy
aXZhdGU6ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2VjdXJpdHlPcmln
aW5Ub2tlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2Vj
dXJpdHlPcmlnaW5Ub2tlbi5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2VjdXJpdHlPcmlnaW5Ub2tlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5Ub2tlbi5oIgorCisj
aW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK1NlY3VyaXR5T3Jp
Z2luVG9rZW4gdW5pcXVlU2VjdXJpdHlPcmlnaW5Ub2tlbigpCit7CisgICAgc3RhdGljIFNlY3Vy
aXR5T3JpZ2luVG9rZW4gY291bnRlcjsKKyAgICByZXR1cm4gV1RGOjphdG9taWNFeGNoYW5nZUFk
ZCgmY291bnRlciwgMSkgKyAxOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2VjdXJpdHlPcmlnaW5Ub2tlbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NlY3VyaXR5T3JpZ2luVG9rZW4uaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TZWN1cml0eU9yaWdpblRv
a2VuLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIEpT
QyB7CisKK3R5cGVkZWYgdWludDY0X3QgU2VjdXJpdHlPcmlnaW5Ub2tlbjsKKworSlNfRVhQT1JU
X1BSSVZBVEUgU2VjdXJpdHlPcmlnaW5Ub2tlbiB1bmlxdWVTZWN1cml0eU9yaWdpblRva2VuKCk7
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9UaHJlYWRMb2NhbENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmNwcAkocmV2aXNpb24gMjI4MTA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDEzICszMiwxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotUmVmUHRyPFRocmVhZExv
Y2FsQ2FjaGU+IFRocmVhZExvY2FsQ2FjaGU6OmNyZWF0ZShIZWFwJiBoZWFwKQorUmVmUHRyPFRo
cmVhZExvY2FsQ2FjaGU+IFRocmVhZExvY2FsQ2FjaGU6OmNyZWF0ZShIZWFwJiBoZWFwLCBTZWN1
cml0eU9yaWdpblRva2VuIHNlY3VyaXR5T3JpZ2luVG9rZW4pCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBUaHJlYWRMb2NhbENhY2hlKGhlYXApKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFRocmVhZExvY2FsQ2FjaGUoaGVhcCwgc2VjdXJpdHlPcmlnaW5Ub2tlbikpOwogfQogCi1UaHJl
YWRMb2NhbENhY2hlOjpUaHJlYWRMb2NhbENhY2hlKEhlYXAmIGhlYXApCitUaHJlYWRMb2NhbENh
Y2hlOjpUaHJlYWRMb2NhbENhY2hlKEhlYXAmIGhlYXAsIFNlY3VyaXR5T3JpZ2luVG9rZW4gc2Vj
dXJpdHlPcmlnaW5Ub2tlbikKICAgICA6IG1faGVhcChoZWFwKQorICAgICwgbV9zZWN1cml0eU9y
aWdpblRva2VuKHNlY3VyaXR5T3JpZ2luVG9rZW4pCiB7CiAgICAgbV9kYXRhID0gYWxsb2NhdGVE
YXRhKCk7CiB9CkBAIC01OSw3ICs2MCw3IEBAIFRocmVhZExvY2FsQ2FjaGU6OkRhdGEqIFRocmVh
ZExvY2FsQ2FjaGUKICAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBvbGRTaXpl
OyBvZmZzZXQgKz0gc2l6ZW9mKExvY2FsQWxsb2NhdG9yKSkKICAgICAgICAgbmV3ICgmYWxsb2Nh
dG9yKCpyZXN1bHQsIG9mZnNldCkpIExvY2FsQWxsb2NhdG9yKFdURk1vdmUoYWxsb2NhdG9yKCpt
X2RhdGEsIG9mZnNldCkpKTsKICAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSBvbGRTaXplOyBvZmZz
ZXQgPCBsYXlvdXQuc2l6ZTsgb2Zmc2V0ICs9IHNpemVvZihMb2NhbEFsbG9jYXRvcikpCi0gICAg
ICAgIG5ldyAoJmFsbG9jYXRvcigqcmVzdWx0LCBvZmZzZXQpKSBMb2NhbEFsbG9jYXRvcihsYXlv
dXQuZGlyZWN0b3JpZXNbb2Zmc2V0IC8gc2l6ZW9mKExvY2FsQWxsb2NhdG9yKV0pOworICAgICAg
ICBuZXcgKCZhbGxvY2F0b3IoKnJlc3VsdCwgb2Zmc2V0KSkgTG9jYWxBbGxvY2F0b3IodGhpcywg
bGF5b3V0LmRpcmVjdG9yaWVzW29mZnNldCAvIHNpemVvZihMb2NhbEFsbG9jYXRvcildKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC03MCw3ICs3MSw3IEBAIHZvaWQgVGhyZWFkTG9jYWxD
YWNoZTo6ZGVzdHJveURhdGEoRGF0YSoKICAgICBmYXN0RnJlZShkYXRhKTsKIH0KIAotdm9pZCBU
aHJlYWRMb2NhbENhY2hlOjppbnN0YWxsU2xvdyhWTSYgdm0pCit2b2lkIFRocmVhZExvY2FsQ2Fj
aGU6Omluc3RhbGxTbG93KFZNJiB2bSwgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+KiBwcmV2aW91
cykKIHsKICNpZiBVU0UoRkFTVF9UTFNfRk9SX1RMQykKICAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgb25jZUZsYWc7CkBAIC04Myw4ICs4NCwxMyBAQCB2b2lkIFRocmVhZExvY2FsQ2FjaGU6Omlu
c3RhbGxTbG93KFZNJiB2CiAgICAgCiAgICAgcmVmKCk7CiAgICAgCi0gICAgaWYgKFJlZlB0cjxU
aHJlYWRMb2NhbENhY2hlPiBvbGRDYWNoZSA9IGdldCh2bSkpCi0gICAgICAgIG9sZENhY2hlLT5k
ZXJlZigpOworICAgIGlmIChUaHJlYWRMb2NhbENhY2hlOjpEYXRhKiBvbGRDYWNoZURhdGEgPSBn
ZXRJbXBsKHZtKSkgeworICAgICAgICBUaHJlYWRMb2NhbENhY2hlKiBvbGRDYWNoZSA9IG9sZENh
Y2hlRGF0YS0+Y2FjaGU7CisgICAgICAgIGlmIChwcmV2aW91cykKKyAgICAgICAgICAgICpwcmV2
aW91cyA9IGFkb3B0UmVmKG9sZENhY2hlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb2xk
Q2FjaGUtPmRlcmVmKCk7CisgICAgfQogICAgIAogICAgIGluc3RhbGxEYXRhKHZtLCBtX2RhdGEp
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2Fj
aGUuaAkocmV2aXNpb24gMjI4MTA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhy
ZWFkTG9jYWxDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw5ICsyNSwxMyBAQAogCiAjcHJh
Z21hIG9uY2UKIAorI2luY2x1ZGUgIkFsbG9jYXRpb25GYWlsdXJlTW9kZS5oIgorI2luY2x1ZGUg
IkxvY2FsQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5Ub2tlbi5oIgogI2lu
Y2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RUTFMuaD4KICNpbmNs
dWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zOSw5ICs0Myw5IEBAIGNsYXNzIFRocmVhZExvY2Fs
Q2FjaGUgOiBwdWJsaWMgVGhyZWFkU2EKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAg
ICAKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IGNyZWF0ZShI
ZWFwJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZlB0cjxUaHJlYWRMb2NhbENh
Y2hlPiBjcmVhdGUoSGVhcCYsIFNlY3VyaXR5T3JpZ2luVG9rZW4gPSB1bmlxdWVTZWN1cml0eU9y
aWdpblRva2VuKCkpOwogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIH5UaHJlYWRMb2NhbENh
Y2hlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+VGhyZWFkTG9jYWxDYWNoZSgp
OwogCiAgICAgc3RhdGljIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBnZXQoVk0mKTsKICAgICAK
QEAgLTQ5LDcgKzUzLDcgQEAgcHVibGljOgogICAgIC8vIG9wdGltaXppbmcgZm9yIHRoZSBjYXNl
IHRoYXQgeW91J3JlIGp1c3QgaW5zdGFsbGluZyB0aGUgY2FjaGUgdGhhdCBpcyBhbHJlYWR5IGlu
c3RhbGxlZC4gVGhpcwogICAgIC8vIGFzc3VtZXMgYSByZWxhdGl2ZWx5IHNtYWxsIG51bWJlciBv
ZiBjYWNoZXMgb3IgbG93IGNoYW5jZSBvZiBhY3R1YWwgY29udGV4dCBzd2l0Y2ggY29tYmluZWQK
ICAgICAvLyB3aXRoIHBvc3NpYmx5IGhpZ2ggcmF0ZSBvZiAiSSBtYXkgaGF2ZSBjb250ZXh0IHN3
aXRjaGVkIiBzaXRlcyB0aGF0IGNhbGwgdGhpcyBvdXQgb2YgcGFyYW5vaWEuCi0gICAgdm9pZCBp
bnN0YWxsKFZNJik7CisgICAgdm9pZCBpbnN0YWxsKFZNJiwgUmVmUHRyPFRocmVhZExvY2FsQ2Fj
aGU+KiA9IG51bGxwdHIpOwogICAgIAogICAgIHN0YXRpYyBMb2NhbEFsbG9jYXRvciYgYWxsb2Nh
dG9yKFZNJiwgc2l6ZV90IG9mZnNldCk7CiAgICAgCkBAIC01OSwxMSArNjMsMTQgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplSW5EYXRhKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKERhdGEsIHNpemUpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZkZpcnN0QWxsb2NhdG9ySW5EYXRhKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKERhdGEsIGFs
bG9jYXRvcik7IH0KICAgICAKKyAgICBTZWN1cml0eU9yaWdpblRva2VuIHNlY3VyaXR5T3JpZ2lu
VG9rZW4oKSBjb25zdCB7IHJldHVybiBtX3NlY3VyaXR5T3JpZ2luVG9rZW47IH0KKworcHJvdGVj
dGVkOiAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSBUaHJlYWRMb2NhbENhY2hlKEhlYXAmLCBT
ZWN1cml0eU9yaWdpblRva2VuKTsKKyAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFZN
OwogICAgIAotICAgIFRocmVhZExvY2FsQ2FjaGUoSGVhcCYpOwotICAgIAogICAgIHN0cnVjdCBE
YXRhIHsKICAgICAgICAgc2l6ZV90IHNpemU7CiAgICAgICAgIFRocmVhZExvY2FsQ2FjaGUqIGNh
Y2hlOwpAQCAtNzYsNyArODMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGVzdHJveURhdGEoRGF0
YSopOwogICAgIHN0YXRpYyBMb2NhbEFsbG9jYXRvciYgYWxsb2NhdG9yKERhdGEmIGRhdGEsIHNp
emVfdCBvZmZzZXQpOwogCi0gICAgdm9pZCBpbnN0YWxsU2xvdyhWTSYpOworICAgIHZvaWQgaW5z
dGFsbFNsb3coVk0mLCBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4qKTsKICAgICBzdGF0aWMgdm9p
ZCBpbnN0YWxsRGF0YShWTSYsIERhdGEqKTsKICAgICAKICAgICBMb2NhbEFsbG9jYXRvciYgYWxs
b2NhdG9yU2xvdyhWTSYsIHNpemVfdCBvZmZzZXQpOwpAQCAtOTEsNiArOTgsOCBAQCBwcml2YXRl
OgogICAgIC8vIGl0J3MgY29ycmVjdCBmb3IgaW1tb3J0YWwgY2FjaGVzLgogICAgIEhlYXAmIG1f
aGVhcDsKICAgICBEYXRhKiBtX2RhdGEgeyBudWxscHRyIH07CisgICAgCisgICAgU2VjdXJpdHlP
cmlnaW5Ub2tlbiBtX3NlY3VyaXR5T3JpZ2luVG9rZW47CiAKICNpZiBVU0UoRkFTVF9UTFNfRk9S
X1RMQykKICAgICBzdGF0aWMgY29uc3QgcHRocmVhZF9rZXlfdCB0bHNLZXkgPSBXVEZfR0NfVExD
X0tFWTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFk
TG9jYWxDYWNoZUlubGluZXMuaAkocmV2aXNpb24gMjI4MTA2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJUaHJlYWRMb2NhbENhY2hl
LmgiCisjaW5jbHVkZSAiVk0uaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQ3LDExICs0OCwx
NCBAQCBpbmxpbmUgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IFRocmVhZExvCiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKLWlubGluZSB2b2lkIFRocmVhZExvY2FsQ2FjaGU6Omluc3RhbGwoVk0m
IHZtKQoraW5saW5lIHZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFsbChWTSYgdm0sIFJlZlB0
cjxUaHJlYWRMb2NhbENhY2hlPiogcHJldmlvdXMpCiB7Ci0gICAgaWYgKGdldEltcGwodm0pID09
IG1fZGF0YSkKKyAgICBpZiAoZ2V0SW1wbCh2bSkgPT0gbV9kYXRhKSB7CisgICAgICAgIGlmIChw
cmV2aW91cykKKyAgICAgICAgICAgICpwcmV2aW91cyA9IG51bGxwdHI7CiAgICAgICAgIHJldHVy
bjsKLSAgICBpbnN0YWxsU2xvdyh2bSk7CisgICAgfQorICAgIGluc3RhbGxTbG93KHZtLCBwcmV2
aW91cyk7CiB9CiAKIGlubGluZSBMb2NhbEFsbG9jYXRvciYgVGhyZWFkTG9jYWxDYWNoZTo6YWxs
b2NhdG9yKFZNJiB2bSwgc2l6ZV90IG9mZnNldCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjI4MTA2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNDkxLDcgKzQ5MSw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBSdW50aW1lRmxhZ3MmIHJ1
bnRpbWVGbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fcnVudGltZUZsYWdzOyB9CiAKIHByb3RlY3Rl
ZDoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBleHBsaWNpdCBKU0dsb2JhbE9iamVjdChWTSYsIFN0
cnVjdHVyZSosIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiA9IDAsIFJlZlB0cjxUaHJl
YWRMb2NhbENhY2hlPiA9IG51bGxwdHIpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIGV4cGxpY2l0
IEpTR2xvYmFsT2JqZWN0KFZNJiwgU3RydWN0dXJlKiwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9k
VGFibGUqID0gbnVsbHB0ciwgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+ID0gbnVsbHB0cik7CiAK
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcAkocmV2
aXNpb24gMjI4MTA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNj
b3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBWTUVudHJ5U2NvcGU6OlZN
RW50cnlTY29wZShWTSYgdm0sIEpTR2xvCiAgICAgOiBtX3ZtKHZtKQogICAgICwgbV9nbG9iYWxP
YmplY3QoZ2xvYmFsT2JqZWN0KQogewotICAgIGdsb2JhbE9iamVjdC0+dGhyZWFkTG9jYWxDYWNo
ZSgpLmluc3RhbGwodm0pOworICAgIGdsb2JhbE9iamVjdC0+dGhyZWFkTG9jYWxDYWNoZSgpLmlu
c3RhbGwodm0sICZtX3ByZXZpb3VzVExDKTsKICAgICBBU1NFUlQoIURpc2FsbG93Vk1SZWVudHJ5
Ojppc0luRWZmZWN0T25DdXJyZW50VGhyZWFkKCkpOwogICAgIEFTU0VSVChUaHJlYWQ6OmN1cnJl
bnQoKS5zdGFjaygpLmlzR3Jvd2luZ0Rvd253YXJkKCkpOwogICAgIGlmICghdm0uZW50cnlTY29w
ZSkgewpAQCAtNzEsMTEgKzcxLDE0IEBAIHZvaWQgVk1FbnRyeVNjb3BlOjphZGREaWRQb3BMaXN0
ZW5lcihzdGQKIAogVk1FbnRyeVNjb3BlOjp+Vk1FbnRyeVNjb3BlKCkKIHsKKyAgICBpZiAobV9w
cmV2aW91c1RMQykKKyAgICAgICAgbV9wcmV2aW91c1RMQy0+aW5zdGFsbChtX3ZtKTsKKyAgICAK
ICAgICBpZiAobV92bS5lbnRyeVNjb3BlICE9IHRoaXMpCiAgICAgICAgIHJldHVybjsKIAogICAg
IFRyYWNlUG9pbnQoVk1FbnRyeVNjb3BlRW5kKTsKLQorICAgIAogICAgIGlmIChtX3ZtLndhdGNo
ZG9nKCkpCiAgICAgICAgIG1fdm0ud2F0Y2hkb2coKS0+ZXhpdGVkVk0oKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNjb3BlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNjb3BlLmgJKHJldmlzaW9uIDIy
ODEwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
SlNHbG9iYWxPYmplY3Q7CitjbGFzcyBUaHJlYWRMb2NhbENhY2hlOwogY2xhc3MgVk07CiAKIGNs
YXNzIFZNRW50cnlTY29wZSB7CkBAIC00Nyw2ICs0OCw3IEBAIHByaXZhdGU6CiAgICAgVk0mIG1f
dm07CiAgICAgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0OwogICAgIFZlY3RvcjxzdGQ6
OmZ1bmN0aW9uPHZvaWQgKCk+PiBtX2RpZFBvcExpc3RlbmVyczsKKyAgICBSZWZQdHI8VGhyZWFk
TG9jYWxDYWNoZT4gbV9wcmV2aW91c1RMQzsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwkocmV2aXNpb24gMjI4MTA2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTE3IEBACisyMDE4LTAyLTA1ICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgR2xvYmFsIG9iamVjdHMgc2hvdWxkIGJl
IGFibGUgdG8gdXNlIFRMQ3MgdG8gYWxsb2NhdGUgZnJvbSBkaWZmZXJlbnQgYmxvY2tzIGZyb20g
ZWFjaCBvdGhlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTgyMjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gY2hhbmdlIGluIGJlaGF2aW9yLgorICAgICAgICAK
KyAgICAgICAgQWRvcHQgSlNDIFRMQyBBUEkgdG8gcHV0IGRpc3RhbmNlIGJldHdlZW4gb2JqZWN0
cyBmcm9tIGRpZmZlcmVudCBzZWN1cml0eSBvcmlnaW5zLiBXZWJDb3JlIGhhcworICAgICAgICBh
IHN1YmNsYXNzIG9mIFRocmVhZExvY2FsQ2FjaGUgdGhhdCBzdXBwb3J0cyBoYXNoLWNvbnNpbmcg
YmFzZWQgb24gdGhlIHJlbGV2YW50IG9yaWdpbiBkYXRhLAorICAgICAgICB3aGljaCB3ZSBlbmNh
cHN1bGF0ZSB3aXRoIFRocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXkuIEl0J3MgRG9jdW1lbnQncyBq
b2IgdG8gaW5pdGlhdGUgdGhlIGhhc2gKKyAgICAgICAgY29uc2luZy4KKyAgICAgICAgCisgICAg
ICAgIFdvcmtlcnMgZG9uJ3Qgb3B0IGludG8gdGhpcy4gVGhleSBqdXN0IGdldCB0aGUgVk0ncyBk
ZWZhdWx0IFRMQyBhbGwgdGhlIHRpbWUuCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9o
ZWFwL1RocmVhZExvY2FsQ2FjaGUuaDogQWRkZWQuCisgICAgICAgICogU291cmNlcy50eHQ6Cisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9N
R2xvYmFsT2JqZWN0OjpKU0RPTUdsb2JhbE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNET01HbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jh
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpKU0RPTVdpbmRvd0Jh
c2UpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6aW5pdFNlY3VyaXR5Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6
dGhyZWFkTG9jYWxDYWNoZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICog
cGFnZS9PcmlnaW5UaHJlYWRMb2NhbENhY2hlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
Ojp0aHJlYWRMb2NhbENhY2hlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6Ok9yaWdpblRocmVhZExv
Y2FsQ2FjaGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpPcmlnaW5UaHJlYWRMb2NhbENh
Y2hlOjp+T3JpZ2luVGhyZWFkTG9jYWxDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpPcmlnaW5U
aHJlYWRMb2NhbENhY2hlOjpPcmlnaW5UaHJlYWRMb2NhbENhY2hlKToKKyAgICAgICAgKiBwYWdl
L09yaWdpblRocmVhZExvY2FsQ2FjaGUuaDogQWRkZWQuCisgICAgICAgICogcGFnZS9TZWN1cml0
eU9yaWdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6cGFzc2VzRmls
ZUNoZWNrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpzZXRFbmZv
cmNlc0ZpbGVQYXRoU2VwYXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bjo6dG9TdHJpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OmVu
Zm9yY2VGaWxlUGF0aFNlcGFyYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvU2VjdXJp
dHlPcmlnaW4uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjplbmZvcmNlc0Zp
bGVQYXRoU2VwYXJhdGlvbiBjb25zdCk6CisgICAgICAgICogcGFnZS9UaHJlYWRMb2NhbENhY2hl
T3JpZ2luS2V5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkTG9jYWxDYWNoZU9y
aWdpbktleTo6VGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleSk6CisgICAgICAgIChXZWJDb3JlOjpU
aHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlRocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXk6Om9wZXJhdG9yIT0gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6VGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleTo6b3BlcmF0b3IgYm9vbCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5Ojppc0hh
c2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRMb2Nh
bENhY2hlT3JpZ2luS2V5OjpoYXNoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZExv
Y2FsQ2FjaGVPcmlnaW5LZXlIYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZExv
Y2FsQ2FjaGVPcmlnaW5LZXlIYXNoOjplcXVhbCk6CisKKzIwMTgtMDEtMzAgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBHbG9iYWwgb2JqZWN0cyBzaG91bGQgYmUg
YWJsZSB0byB1c2UgVExDcyB0byBhbGxvY2F0ZSBmcm9tIGRpZmZlcmVudCBibG9ja3MgZnJvbSBl
YWNoIG90aGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xODIyMjcKKworICAgICAgICBSZXZpZXdlZCBieSBBbmR5IEVzdGVzLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyBiZWNhdXNlIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKyAgICAgICAgCisgICAg
ICAgIEFkb3B0IEpTQyBUTEMgQVBJIHRvIHB1dCBkaXN0YW5jZSBiZXR3ZWVuIG9iamVjdHMgZnJv
bSBkaWZmZXJlbnQgc2VjdXJpdHkgb3JpZ2luLgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRl
cnMvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRE9NR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFsT2Jq
ZWN0OjpKU0RPTUdsb2JhbE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01HbG9i
YWxPYmplY3QuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpKU0RPTVdpbmRvd0Jhc2UpOgorICAg
ICAgICAqIHBhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW46OnRocmVhZExvY2FsQ2FjaGUpOgorICAgICAgICAqIHBhZ2UvU2VjdXJpdHlPcmln
aW4uaDoKKworMjAxOC0wMS0zMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisg
ICAgICAgIEdsb2JhbCBvYmplY3RzIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBUTENzIHRvIGFsbG9j
YXRlIGZyb20gZGlmZmVyZW50IGJsb2NrcyBmcm9tIGVhY2ggb3RoZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjIyNworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIG5v
IG5ldyBiZWhhdmlvci4KKyAgICAgICAgCisgICAgICAgIEFkb3B0IEpTQyBUTEMgQVBJIHRvIHB1
dCBkaXN0YW5jZSBiZXR3ZWVuIG9iamVjdHMgZnJvbSBkaWZmZXJlbnQgc2VjdXJpdHkgb3JpZ2lu
cy4gV2ViQ29yZSBoYXMKKyAgICAgICAgYSBzdWJjbGFzcyBvZiBUaHJlYWRMb2NhbENhY2hlIHRo
YXQgc3VwcG9ydHMgaGFzaC1jb25zaW5nIGJhc2VkIG9uIHRoZSByZWxldmFudCBvcmlnaW4gZGF0
YSwKKyAgICAgICAgd2hpY2ggd2UgZW5jYXBzdWxhdGUgd2l0aCBUaHJlYWRMb2NhbENhY2hlT3Jp
Z2luS2V5LgorICAgICAgICAKKyAgICAgICAgV29ya2VycyBkb24ndCBvcHQgaW50byB0aGlzLiBU
aGV5IGp1c3QgZ2V0IHRoZSBWTSdzIGRlZmF1bHQgVExDIGFsbCB0aGUgdGltZS4KKworICAgICAg
ICAqIEZvcndhcmRpbmdIZWFkZXJzL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3Q6OkpTRE9NR2xvYmFsT2JqZWN0KToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdp
bmRvd0Jhc2U6OkpTRE9NV2luZG93QmFzZSk6CisgICAgICAgICogcGFnZS9PcmlnaW5UaHJlYWRM
b2NhbENhY2hlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjp0aHJlYWRMb2NhbENhY2hl
TWFwKToKKyAgICAgICAgKFdlYkNvcmU6Ok9yaWdpblRocmVhZExvY2FsQ2FjaGU6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpPcmlnaW5UaHJlYWRMb2NhbENhY2hlOjp+T3JpZ2luVGhyZWFk
TG9jYWxDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpPcmlnaW5UaHJlYWRMb2NhbENhY2hlOjpP
cmlnaW5UaHJlYWRMb2NhbENhY2hlKToKKyAgICAgICAgKiBwYWdlL09yaWdpblRocmVhZExvY2Fs
Q2FjaGUuaDogQWRkZWQuCisgICAgICAgICogcGFnZS9TZWN1cml0eU9yaWdpbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6dGhyZWFkTG9jYWxDYWNoZSk6CisgICAgICAg
ICogcGFnZS9TZWN1cml0eU9yaWdpbi5oOgorICAgICAgICAqIHBhZ2UvVGhyZWFkTG9jYWxDYWNo
ZU9yaWdpbktleS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZExvY2FsQ2FjaGVP
cmlnaW5LZXk6OlRocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXkpOgorICAgICAgICAoV2ViQ29yZTo6
VGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleTo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5OjpvcGVyYXRvciE9IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlRocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXk6Om9wZXJhdG9yIGJvb2wg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleTo6aXNI
YXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkTG9j
YWxDYWNoZU9yaWdpbktleTo6aGFzaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRM
b2NhbENhY2hlT3JpZ2luS2V5SGFzaDo6aGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRM
b2NhbENhY2hlT3JpZ2luS2V5SGFzaDo6ZXF1YWwpOgorCiAyMDE4LTAyLTA1ICBZb3Vlbm4gRmFi
bGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBVc2UgZG93bmNhc3QgaW4gY3JlYXRl
TGlua1ByZWxvYWRSZXNvdXJjZUNsaWVudApJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIy
ODEwNikKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
MzM0LDYgKzEzMzQsNyBAQCBwYWdlL01vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuY3BwCiBw
YWdlL05hdmlnYXRvci5jcHAKIHBhZ2UvTmF2aWdhdG9yQmFzZS5jcHAKIHBhZ2UvT3JpZ2luQWNj
ZXNzRW50cnkuY3BwCitwYWdlL09yaWdpblRocmVhZExvY2FsQ2FjaGUuY3BwCiBwYWdlL1BhZ2Uu
Y3BwCiBwYWdlL1BhZ2VDb25maWd1cmF0aW9uLmNwcAogcGFnZS9QYWdlQ29uc29sZUNsaWVudC5j
cHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvVGhyZWFkTG9j
YWxDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJz
L2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3Jl
L0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMiBAQAorI3ByYWdtYSBvbmNlCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
VGhyZWFkTG9jYWxDYWNoZS5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjI4MTA2KQorKysgU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0zNDIsNiArMzQyLDggQEAKIAkJMEY1ODBDRkYwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxh
eWVyQmFja2luZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY1ODBDRkIwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQmFja2luZy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNTgwRkEzMTQ5
NjkzOTEwMEZCNUJEOCAvKiBXZWJUaWxlZEJhY2tpbmdMYXllci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1ODBGQTExNDk2OTM5MTAwRkI1QkQ4IC8q
IFdlYlRpbGVkQmFja2luZ0xheWVyLmggKi87IH07CiAJCTBGNTgwRkFGMTQ5ODAwRDQwMEZCNUJE
OCAvKiBBbmltYXRpb25VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNTgwRkFFMTQ5ODAwRDQwMEZCNUJEOCAvKiBBbmltYXRpb25VdGls
aXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjVCNDA4NzIwMjEyQzRDMDA4MEY5MTMgLyogVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QjQwODUy
MDIxMkM0NjAwODBGOTEzIC8qIFRocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXkuaCAqLzsgfTsKKwkJ
MEY1QjQwOEEyMDIxMkY3NzAwODBGOTEzIC8qIE9yaWdpblRocmVhZExvY2FsQ2FjaGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUI0MDg4MjAyMTJG
NzMwMDgwRjkxMyAvKiBPcmlnaW5UaHJlYWRMb2NhbENhY2hlLmggKi87IH07CiAJCTBGNUI3QTU1
MTBGNjVEN0EwMDM3NjMwMiAvKiBSZW5kZXJFbWJlZGRlZE9iamVjdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QjdBNTMxMEY2NUQ3QTAwMzc2MzAy
IC8qIFJlbmRlckVtYmVkZGVkT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1RTIwMDYxOEU3NzFGQzAwM0VDM0U1IC8qIFBsYXRmb3Jt
Q0FBbmltYXRpb25Db2NvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY1RTIwMDUxOEU3NzFGQzAwM0VDM0U1IC8qIFBsYXRmb3JtQ0FBbmltYXRpb25D
b2NvYS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNjA1QUVEMTVGOTQ4NDgwMDRERjBDMCAvKiBTY3JvbGxpbmdDb25zdHJhaW50cy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MDVBRUIxNUY5NDg0
ODAwNERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU0OTYsNiArNTQ5OCw5IEBACiAJCTBGNTgw
RkExMTQ5NjkzOTEwMEZCNUJEOCAvKiBXZWJUaWxlZEJhY2tpbmdMYXllci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJUaWxlZEJhY2tpbmdMYXllci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjU4MEZBMjE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRC
YWNraW5nTGF5ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBX
ZWJUaWxlZEJhY2tpbmdMYXllci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1
ODBGQUUxNDk4MDBENDAwRkI1QkQ4IC8qIEFuaW1hdGlvblV0aWxpdGllcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBbmltYXRpb25VdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY1QjQwODUyMDIxMkM0NjAwODBGOTEzIC8qIFRocmVhZExvY2Fs
Q2FjaGVPcmlnaW5LZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFk
TG9jYWxDYWNoZU9yaWdpbktleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVC
NDA4ODIwMjEyRjczMDA4MEY5MTMgLyogT3JpZ2luVGhyZWFkTG9jYWxDYWNoZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcmlnaW5UaHJlYWRMb2NhbENhY2hlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNUI0MDg5MjAyMTJGNzMwMDgwRjkxMyAvKiBPcmln
aW5UaHJlYWRMb2NhbENhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE9yaWdpblRocmVhZExvY2FsQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjVCN0E1MjEwRjY1RDdBMDAzNzYzMDIgLyogUmVuZGVyRW1iZWRkZWRPYmplY3QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyRW1iZWRkZWRPYmpl
Y3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVCN0E1MzEwRjY1RDdBMDAz
NzYzMDIgLyogUmVuZGVyRW1iZWRkZWRPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVuZGVyRW1iZWRkZWRPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY1RTIwMDUxOEU3NzFGQzAwM0VDM0U1IC8qIFBsYXRmb3JtQ0FBbmltYXRpb25Db2Nv
YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUNBQW5pbWF0aW9u
Q29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk5MzYsOCArOTk0MSw4IEBA
CiAJCThBRjRFNTU0MTFEQzVBMzYwMDBFRDNERSAvKiBQZXJmb3JtYW5jZU5hdmlnYXRpb24uaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFBlcmZvcm1hbmNlTmF2aWdhdGlvbi5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThBRjRFNTU5MTFEQzVBNjMwMDBFRDNERSAvKiBQZXJm
b3JtYW5jZVRpbWluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQZXJmb3Jt
YW5jZVRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4QUY0RTU1QTExREM1
QTYzMDAwRUQzREUgLyogUGVyZm9ybWFuY2VUaW1pbmcuaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IFBlcmZvcm1hbmNlVGltaW5nLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
OEUzM0NEOTMyMDFBMjlDMTAwRTM5MDkzIC8qIEdhcExlbmd0aC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHYXBMZW5ndGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4QkQzN0E2NzIwMUJCMzlDMDAxMTczNEEgLyogUmVhZGFibGVTdHJlYW1DaHVu
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZVN0cmVhbUNodW5rLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCThFMzNDRDkzMjAxQTI5QzEwMEUzOTA5MyAvKiBHYXBMZW5ndGguY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2FwTGVuZ3RoLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEU0Qzk2RDgxQUQ0NDgzNTAwMzY1QTUwIC8qIEpT
RmV0Y2hSZXNwb25zZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U0ZldGNoUmVzcG9uc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4RTRDOTZE
OTFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaFJlc3BvbnNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTRmV0Y2hSZXNwb25zZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4RUM2Qzk2MTIwMUEyNTAxMDBGQkZBNTMgLyogR2FwTGVuZ3RoLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdhcExlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTg4MjksNiArMTg4MzQsOCBAQAogCQkJCTUxODJDMjRCMUYzMTNBRTAwMDU5
QkE3QyAvKiBOYXZpZ2F0b3JTZXJ2aWNlV29ya2VyLmlkbCAqLywKIAkJCQkwMDE0NjI4ODEwM0NE
MURFMDAwQjIwREIgLyogT3JpZ2luQWNjZXNzRW50cnkuY3BwICovLAogCQkJCTAwMTQ2Mjg5MTAz
Q0QxREUwMDBCMjBEQiAvKiBPcmlnaW5BY2Nlc3NFbnRyeS5oICovLAorCQkJCTBGNUI0MDg5MjAy
MTJGNzMwMDgwRjkxMyAvKiBPcmlnaW5UaHJlYWRMb2NhbENhY2hlLmNwcCAqLywKKwkJCQkwRjVC
NDA4ODIwMjEyRjczMDA4MEY5MTMgLyogT3JpZ2luVGhyZWFkTG9jYWxDYWNoZS5oICovLAogCQkJ
CTY1RkVBODY4MDk4MzNBREUwMEJFRDRBQiAvKiBQYWdlLmNwcCAqLywKIAkJCQk2NUEyMTQ2NzA5
N0EzMjkxMDBCOTA1MEEgLyogUGFnZS5oICovLAogCQkJCUNENUU1QjYwMUExNUYxNTYwMDBDNjA5
RSAvKiBQYWdlQ29uZmlndXJhdGlvbi5jcHAgKi8sCkBAIC0xODkxOCw2ICsxODkyNSw3IEBACiAJ
CQkJNjJDMTIxN0IxMUFCOUU3NzAwM0M0NjJDIC8qIFN1c3BlbmRhYmxlVGltZXIuaCAqLywKIAkJ
CQkyRDRGOTZGMTFBMUVDQzI0MDA5OEJGODggLyogVGV4dEluZGljYXRvci5jcHAgKi8sCiAJCQkJ
MkQ0Rjk2RjIxQTFFQ0MyNDAwOThCRjg4IC8qIFRleHRJbmRpY2F0b3IuaCAqLywKKwkJCQkwRjVC
NDA4NTIwMjEyQzQ2MDA4MEY5MTMgLyogVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleS5oICovLAog
CQkJCTFBRTc5RDQwMTg4REI2MUYwMDIyMzlDMiAvKiBVc2VyQ29udGVudENvbnRyb2xsZXIuY3Bw
ICovLAogCQkJCTFBRTc5RDQxMTg4REI2MUYwMDIyMzlDMiAvKiBVc2VyQ29udGVudENvbnRyb2xs
ZXIuaCAqLywKIAkJCQk3QzNGMDFCRjFDOEU1QUIxMDBBREQ5NjIgLyogVXNlckNvbnRlbnRQcm92
aWRlci5jcHAgKi8sCkBAIC0yODA4Myw2ICsyODA5MSw3IEBACiAJCQkJMUE4NUIyMTEwQTFCMjU4
NzAwRDhDODdDIC8qIEpTSFRNTFVMaXN0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU0
QUJDRDUxMzhFQTBCNzAwNzFEMjkxIC8qIEpTSFRNTFVua25vd25FbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFNDQ2MTQxNzBDRDY4MjY5MDBGQURBNzUgLyogSlNIVE1MVmlkZW9FbGVtZW50
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjVCNDA4NzIwMjEyQzRDMDA4MEY5MTMgLyogVGhyZWFk
TG9jYWxDYWNoZU9yaWdpbktleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODFCRTIwRDMxMUY0QkMz
MjAwOTE1REZBIC8qIEpTSURCQ3Vyc29yLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzNEOEVGMDFF
MEIyMTQzMDAyM0IwODQgLyogSlNJREJDdXJzb3JEaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCUM1ODVBNjgzMTFENEZCMDgwMDRDM0U0QiAvKiBKU0lEQkRhdGFiYXNlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTI4MjY2LDYgKzI4Mjc1LDcgQEAKIAkJCQkwNzk2OURDMjE3RDE0MTUxMDA3RkY4
NDIgLyogSlNSVENTdGF0c1JlcG9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUUyQzQzNkMxQkNG
MDcxRTAwMDFFMkJDIC8qIEpTUlRDVHJhY2tFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNF
QzAxQzMwQzI3NERERDAwOUY0RUM5IC8qIEpTU2NyZWVuLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjVCNDA4QTIwMjEyRjc3MDA4MEY5MTMgLyogT3JpZ2luVGhyZWFkTG9jYWxDYWNoZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkRBMTVFQ0UxMkIwM0Y2MTAwM0E1ODNBIC8qIEpTU2NyaXB0UHJvY2Vz
c29yTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODM0NDc2RUYxREE1QkM1RTAwMkI2RUQyIC8q
IEpTU2Nyb2xsVG9PcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRUQwNkFEMTFDNzc3NTQ4
MDBGREZBRjEgLyogSlNTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50LmggaW4gSGVhZGVycyAq
LywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9i
amVjdC5jcHAJKHJldmlzaW9uIDIyODEwNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDggKzU2LDggQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBpc1JlYWRhYmxlQgogCiBjb25zdCBDbGFzc0lu
Zm8gSlNET01HbG9iYWxPYmplY3Q6OnNfaW5mbyA9IHsgIkRPTUdsb2JhbE9iamVjdCIsICZKU0ds
b2JhbE9iamVjdDo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTRE9NR2xvYmFsT2JqZWN0KSB9OwogCi1KU0RPTUdsb2JhbE9iamVjdDo6SlNET01HbG9iYWxP
YmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPERPTVdyYXBwZXJXb3JsZD4m
JiB3b3JsZCwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqIGdsb2JhbE9iamVjdE1ldGhv
ZFRhYmxlKQotICAgIDogSlNHbG9iYWxPYmplY3Qodm0sIHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0
TWV0aG9kVGFibGUpCitKU0RPTUdsb2JhbE9iamVjdDo6SlNET01HbG9iYWxPYmplY3QoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPERPTVdyYXBwZXJXb3JsZD4mJiB3b3JsZCwgY29u
c3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqIGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlLCBSZWZQ
dHI8SlNDOjpUaHJlYWRMb2NhbENhY2hlPiB0aHJlYWRMb2NhbENhY2hlKQorICAgIDogSlNHbG9i
YWxPYmplY3Qodm0sIHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUsIFdURk1vdmUo
dGhyZWFkTG9jYWxDYWNoZSkpCiAgICAgLCBtX2N1cnJlbnRFdmVudCgwKQogICAgICwgbV93b3Js
ZChXVEZNb3ZlKHdvcmxkKSkKICAgICAsIG1fd29ybGRJc05vcm1hbChtX3dvcmxkLT5pc05vcm1h
bCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9i
amVjdC5oCShyZXZpc2lvbiAyMjgxMDYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUdsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5j
bHVkZSAiV2ViQ29yZUpTQnVpbHRpbkludGVybmFscy5oIgogI2luY2x1ZGUgPGhlYXAvSGVhcElu
bGluZXMuaD4KICNpbmNsdWRlIDxoZWFwL0xvY2tEdXJpbmdNYXJraW5nLmg+CisjaW5jbHVkZSA8
aGVhcC9UaHJlYWRMb2NhbENhY2hlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVj
dC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oPgogCkBAIC01MCw3ICs1
MSw3IEBAIGNsYXNzIFdFQkNPUkVfRVhQT1JUIEpTRE9NR2xvYmFsT2JqZWN0IDoKIHByb3RlY3Rl
ZDoKICAgICBzdHJ1Y3QgSlNET01HbG9iYWxPYmplY3REYXRhOwogCi0gICAgSlNET01HbG9iYWxP
YmplY3QoSlNDOjpWTSYsIEpTQzo6U3RydWN0dXJlKiwgUmVmPERPTVdyYXBwZXJXb3JsZD4mJiwg
Y29uc3QgSlNDOjpHbG9iYWxPYmplY3RNZXRob2RUYWJsZSogPSAwKTsKKyAgICBKU0RPTUdsb2Jh
bE9iamVjdChKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBSZWY8RE9NV3JhcHBlcldvcmxkPiYm
LCBjb25zdCBKU0M6Okdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiA9IG51bGxwdHIsIFJlZlB0cjxK
U0M6OlRocmVhZExvY2FsQ2FjaGU+ID0gbnVsbHB0cik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0M6OkpTQ2VsbCopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwogICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTQzo6SlNPYmplY3QqKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkocmV2aXNp
b24gMjI4MTA2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBjb25zdCBHbG9iYWxPYmplY3RN
ZXRob2RUYWJsZSBKU0RPTVdpbmRvCiB9OwogCiBKU0RPTVdpbmRvd0Jhc2U6OkpTRE9NV2luZG93
QmFzZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWZQdHI8RE9NV2luZG93PiYmIHdp
bmRvdywgSlNET01XaW5kb3dQcm94eSogcHJveHkpCi0gICAgOiBKU0RPTUdsb2JhbE9iamVjdCh2
bSwgc3RydWN0dXJlLCBwcm94eS0+d29ybGQoKSwgJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUp
CisgICAgOiBKU0RPTUdsb2JhbE9iamVjdCh2bSwgc3RydWN0dXJlLCBwcm94eS0+d29ybGQoKSwg
JnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUsIHdpbmRvdy0+ZG9jdW1lbnQoKS0+dGhyZWFkTG9j
YWxDYWNoZSgpKQogICAgICwgbV93aW5kb3dDbG9zZVdhdGNocG9pbnRzKCh3aW5kb3cgJiYgd2lu
ZG93LT5mcmFtZSgpKSA/IElzV2F0Y2hlZCA6IElzSW52YWxpZGF0ZWQpCiAgICAgLCBtX3dyYXBw
ZWQoV1RGTW92ZSh3aW5kb3cpKQogICAgICwgbV9wcm94eShwcm94eSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjI4MTA2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICAqICAgICAgICAgICAo
QykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAo
QykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqICAgICAgICAgICAoQykg
MjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQotICogQ29weXJpZ2h0IChD
KSAyMDA0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
IChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDksIDIwMTEsIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKQEAgLTEyNiwxMSArMTI2LDExIEBACiAjaW5jbHVkZSAiTmF2aWdhdGlvbkRpc2FibGVyLmgi
CiAjaW5jbHVkZSAiTmF2aWdhdGlvblNjaGVkdWxlci5oIgogI2luY2x1ZGUgIk5lc3RpbmdMZXZl
bEluY3JlbWVudGVyLmgiCi0KICNpbmNsdWRlICJOb2RlSXRlcmF0b3IuaCIKICNpbmNsdWRlICJO
b2RlUmFyZURhdGEuaCIKICNpbmNsdWRlICJOb2RlV2l0aEluZGV4LmgiCiAjaW5jbHVkZSAiT3Jp
Z2luQWNjZXNzRW50cnkuaCIKKyNpbmNsdWRlICJPcmlnaW5UaHJlYWRMb2NhbENhY2hlLmgiCiAj
aW5jbHVkZSAiT3ZlcmZsb3dFdmVudC5oIgogI2luY2x1ZGUgIlBhZ2VDb25zb2xlQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCkBAIC0xOTUsNiArMTk1LDcgQEAKICNpbmNsdWRlICJT
dHlsZVNoZWV0TGlzdC5oIgogI2luY2x1ZGUgIlN0eWxlVHJlZVJlc29sdmVyLmgiCiAjaW5jbHVk
ZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJUaHJlYWRMb2NhbENhY2hlT3JpZ2lu
S2V5LmgiCiAjaW5jbHVkZSAiVGV4dEF1dG9TaXppbmcuaCIKICNpbmNsdWRlICJUZXh0RXZlbnQu
aCIKICNpbmNsdWRlICJUZXh0Tm9kZVRyYXZlcnNhbC5oIgpAQCAtMjE4LDYgKzIxOSw3IEBACiAj
aW5jbHVkZSA8Y3RpbWU+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmg+CiAj
aW5jbHVkZSA8aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5oPgorI2luY2x1ZGUgPHJ1bnRpbWUv
Vk0uaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTGFuZ3Vh
Z2UuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTU1NDgsNyArNTU1MCw3
IEBAIHZvaWQgRG9jdW1lbnQ6OmluaXRTZWN1cml0eUNvbnRleHQoKQogICAgICAgICAgICAgLy8g
U29tZSBjbGllbnRzIHdhbnQgbG9jYWwgVVJMcyB0byBoYXZlIGV2ZW4gdGlnaHRlciByZXN0cmlj
dGlvbnMgYnkgZGVmYXVsdCwgYW5kIG5vdCBiZSBhYmxlIHRvIGFjY2VzcyBvdGhlciBsb2NhbCBm
aWxlcy4KICAgICAgICAgICAgIC8vIEZJWE1FIDgxNTc4OiBUaGUgbmFtaW5nIG9mIHRoaXMgaXMg
Y29uZnVzaW5nLiBGaWxlcyB3aXRoIHJlc3RyaWN0ZWQgYWNjZXNzIHRvIG90aGVyIGxvY2FsIGZp
bGVzCiAgICAgICAgICAgICAvLyBzdGlsbCBjYW4gaGF2ZSBvdGhlciBwcml2aWxlZ2VzIHRoYXQg
Y2FuIGJlIHJlbWVtYmVyZWQsIHRoZXJlYnkgbm90IG1ha2luZyB0aGVtIHVuaXF1ZSBvcmlnaW5z
LgotICAgICAgICAgICAgc2VjdXJpdHlPcmlnaW4oKS5lbmZvcmNlRmlsZVBhdGhTZXBhcmF0aW9u
KCk7CisgICAgICAgICAgICBzZWN1cml0eU9yaWdpbigpLnNldEVuZm9yY2VzRmlsZVBhdGhTZXBh
cmF0aW9uKHRydWUpOwogICAgICAgICB9CiAgICAgfQogICAgIHNlY3VyaXR5T3JpZ2luKCkuc2V0
U3RvcmFnZUJsb2NraW5nUG9saWN5KHNldHRpbmdzKCkuc3RvcmFnZUJsb2NraW5nUG9saWN5KCkp
OwpAQCAtNzc0MCw0ICs3NzQyLDE2IEBAIHZvaWQgRG9jdW1lbnQ6OnNldFNlcnZpY2VXb3JrZXJD
b25uZWN0aW8KIH0KICNlbmRpZgogCitSZWZQdHI8SlNDOjpUaHJlYWRMb2NhbENhY2hlPiBEb2N1
bWVudDo6dGhyZWFkTG9jYWxDYWNoZSgpCit7CisgICAgaWYgKCFtX3RocmVhZExvY2FsQ2FjaGUp
IHsKKyAgICAgICAgU2VjdXJpdHlPcmlnaW4mIG9yaWdpbiA9IHNlY3VyaXR5T3JpZ2luKCk7Cisg
ICAgICAgIGlmIChvcmlnaW4uaXNVbmlxdWUoKSB8fCAob3JpZ2luLmlzTG9jYWwoKSAmJiBvcmln
aW4uZW5mb3JjZXNGaWxlUGF0aFNlcGFyYXRpb24oKSkpCisgICAgICAgICAgICBtX3RocmVhZExv
Y2FsQ2FjaGUgPSBKU0M6OlRocmVhZExvY2FsQ2FjaGU6OmNyZWF0ZShjb21tb25WTSgpLmhlYXAp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3RocmVhZExvY2FsQ2FjaGUgPSBPcmlnaW5U
aHJlYWRMb2NhbENhY2hlOjpjcmVhdGUoVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleShvcmlnaW4u
aG9zdCgpLCBvcmlnaW4ucHJvdG9jb2woKSwgb3JpZ2luLnBvcnQoKSkpOworICAgIH0KKyAgICBy
ZXR1cm4gbV90aHJlYWRMb2NhbENhY2hlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMjI4MTA2KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNs
dWRlICJVc2VyQWN0aW9uRWxlbWVudFNldC5oIgogI2luY2x1ZGUgIlZpZXdwb3J0QXJndW1lbnRz
LmgiCiAjaW5jbHVkZSAiVmlzaWJpbGl0eVN0YXRlLmgiCisjaW5jbHVkZSA8aGVhcC9UaHJlYWRM
b2NhbENhY2hlLmg+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9E
ZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC0xNDExLDYgKzE0MTIsOCBAQCBw
dWJsaWM6CiAgICAgYm9vbCBoYW5kbGluZ1RvdWNoRXZlbnQoKSBjb25zdCB7IHJldHVybiBtX2hh
bmRsaW5nVG91Y2hFdmVudDsgfQogI2VuZGlmCiAKKyAgICBSZWZQdHI8SlNDOjpUaHJlYWRMb2Nh
bENhY2hlPiB0aHJlYWRMb2NhbENhY2hlKCk7CisKIHByb3RlY3RlZDoKICAgICBlbnVtIENvbnN0
cnVjdGlvbkZsYWdzIHsgU3ludGhlc2l6ZWQgPSAxLCBOb25SZW5kZXJlZFBsYWNlaG9sZGVyID0g
MSA8PCAxIH07CiAgICAgRG9jdW1lbnQoRnJhbWUqLCBjb25zdCBVUkwmLCB1bnNpZ25lZCA9IERl
ZmF1bHREb2N1bWVudENsYXNzLCB1bnNpZ25lZCBjb25zdHJ1Y3Rpb25GbGFncyA9IDApOwpAQCAt
MTg5NSw2ICsxODk4LDggQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgSGFzaFNldDxBcHBsaWNh
dGlvblN0YXRlQ2hhbmdlTGlzdGVuZXIqPiBtX2FwcGxpY2F0aW9uU3RhdGVDaGFuZ2VMaXN0ZW5l
cnM7CisgICAgCisgICAgUmVmUHRyPEpTQzo6VGhyZWFkTG9jYWxDYWNoZT4gbV90aHJlYWRMb2Nh
bENhY2hlOwogfTsKIAogRWxlbWVudCogZXZlbnRUYXJnZXRFbGVtZW50Rm9yRG9jdW1lbnQoRG9j
dW1lbnQqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvT3JpZ2luVGhyZWFkTG9jYWxDYWNo
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9PcmlnaW5UaHJlYWRMb2Nh
bENhY2hlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL09yaWdpblRo
cmVhZExvY2FsQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIk9yaWdpblRocmVhZExvY2FsQ2FjaGUuaCIKKworI2luY2x1ZGUgIkNv
bW1vblZNLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBIYXNoTWFwPFRocmVh
ZExvY2FsQ2FjaGVPcmlnaW5LZXksIE9yaWdpblRocmVhZExvY2FsQ2FjaGUqPiBUaHJlYWRMb2Nh
bENhY2hlTWFwOworCitzdGF0aWMgVGhyZWFkTG9jYWxDYWNoZU1hcCYgdGhyZWFkTG9jYWxDYWNo
ZU1hcCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFRocmVhZExvY2FsQ2FjaGVNYXA+
IG1hcDsKKyAgICByZXR1cm4gbWFwOworfQorCitSZWZQdHI8T3JpZ2luVGhyZWFkTG9jYWxDYWNo
ZT4gT3JpZ2luVGhyZWFkTG9jYWxDYWNoZTo6Y3JlYXRlKGNvbnN0IFRocmVhZExvY2FsQ2FjaGVP
cmlnaW5LZXkmIGtleSkKK3sKKyAgICBhdXRvIGl0ZXIgPSB0aHJlYWRMb2NhbENhY2hlTWFwKCku
ZmluZChrZXkpOworICAgIGlmIChpdGVyICE9IHRocmVhZExvY2FsQ2FjaGVNYXAoKS5lbmQoKSkK
KyAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOworICAgIAorICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgT3JpZ2luVGhyZWFkTG9jYWxDYWNoZShrZXkpKTsKK30KKworT3JpZ2luVGhyZWFkTG9jYWxD
YWNoZTo6fk9yaWdpblRocmVhZExvY2FsQ2FjaGUoKQoreworICAgIGJvb2wgcmVzdWx0ID0gdGhy
ZWFkTG9jYWxDYWNoZU1hcCgpLnJlbW92ZShtX2tleSk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVz
dWx0KTsKK30KKworT3JpZ2luVGhyZWFkTG9jYWxDYWNoZTo6T3JpZ2luVGhyZWFkTG9jYWxDYWNo
ZShjb25zdCBUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5JiBrZXkpCisgICAgOiBUaHJlYWRMb2Nh
bENhY2hlKGNvbW1vblZNKCkuaGVhcCwgSlNDOjp1bmlxdWVTZWN1cml0eU9yaWdpblRva2VuKCkp
CisgICAgLCBtX2tleShrZXkpCit7CisgICAgYXV0byByZXN1bHQgPSB0aHJlYWRMb2NhbENhY2hl
TWFwKCkuYWRkKGtleSwgdGhpcyk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL09yaWdp
blRocmVhZExvY2FsQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL09y
aWdpblRocmVhZExvY2FsQ2FjaGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL09yaWdpblRocmVhZExvY2FsQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleS5oIgorI2luY2x1
ZGUgPGhlYXAvVGhyZWFkTG9jYWxDYWNoZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgT3JpZ2luVGhyZWFkTG9jYWxDYWNoZSA6IHB1YmxpYyBKU0M6OlRocmVhZExvY2FsQ2Fj
aGUgeworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8T3JpZ2luVGhyZWFkTG9jYWxDYWNoZT4g
Y3JlYXRlKGNvbnN0IFRocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXkmKTsKKyAgICAKKyAgICB+T3Jp
Z2luVGhyZWFkTG9jYWxDYWNoZSgpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIE9yaWdpblRo
cmVhZExvY2FsQ2FjaGUoY29uc3QgVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleSYpOworICAgIAor
ICAgIFRocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXkgbV9rZXk7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwCShy
ZXZpc2lvbiAyMjgxMDYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDcgKzE4MCw3IEBAIFNlY3VyaXR5T3JpZ2luOjpTZWN1
cml0eU9yaWdpbihjb25zdCBTZWMKICAgICAsIG1fZG9tYWluV2FzU2V0SW5ET00geyBvdGhlci0+
bV9kb21haW5XYXNTZXRJbkRPTSB9CiAgICAgLCBtX2NhbkxvYWRMb2NhbFJlc291cmNlcyB7IG90
aGVyLT5tX2NhbkxvYWRMb2NhbFJlc291cmNlcyB9CiAgICAgLCBtX3N0b3JhZ2VCbG9ja2luZ1Bv
bGljeSB7IG90aGVyLT5tX3N0b3JhZ2VCbG9ja2luZ1BvbGljeSB9Ci0gICAgLCBtX2VuZm9yY2VG
aWxlUGF0aFNlcGFyYXRpb24geyBvdGhlci0+bV9lbmZvcmNlRmlsZVBhdGhTZXBhcmF0aW9uIH0K
KyAgICAsIG1fZW5mb3JjZXNGaWxlUGF0aFNlcGFyYXRpb24geyBvdGhlci0+bV9lbmZvcmNlc0Zp
bGVQYXRoU2VwYXJhdGlvbiB9CiAgICAgLCBtX25lZWRzU3RvcmFnZUFjY2Vzc0Zyb21GaWxlVVJM
c1F1aXJrIHsgb3RoZXItPm1fbmVlZHNTdG9yYWdlQWNjZXNzRnJvbUZpbGVVUkxzUXVpcmsgfQog
ICAgICwgbV9pc1BvdGVudGlhbGx5VHJ1c3R3b3J0aHkgeyBvdGhlci0+bV9pc1BvdGVudGlhbGx5
VHJ1c3R3b3J0aHkgfQogewpAQCAtMjgzLDcgKzI4Myw3IEBAIGJvb2wgU2VjdXJpdHlPcmlnaW46
OnBhc3Nlc0ZpbGVDaGVjayhjb24KIHsKICAgICBBU1NFUlQoaXNMb2NhbCgpICYmIG90aGVyLmlz
TG9jYWwoKSk7CiAKLSAgICByZXR1cm4gIW1fZW5mb3JjZUZpbGVQYXRoU2VwYXJhdGlvbiAmJiAh
b3RoZXIubV9lbmZvcmNlRmlsZVBhdGhTZXBhcmF0aW9uOworICAgIHJldHVybiAhbV9lbmZvcmNl
c0ZpbGVQYXRoU2VwYXJhdGlvbiAmJiAhb3RoZXIubV9lbmZvcmNlc0ZpbGVQYXRoU2VwYXJhdGlv
bjsKIH0KIAogYm9vbCBTZWN1cml0eU9yaWdpbjo6Y2FuUmVxdWVzdChjb25zdCBVUkwmIHVybCkg
Y29uc3QKQEAgLTQ1MywxMCArNDUzLDExIEBAIFN0cmluZyBTZWN1cml0eU9yaWdpbjo6ZG9tYWlu
Rm9yQ2FjaGVQYXIKICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAotdm9pZCBTZWN1cml0
eU9yaWdpbjo6ZW5mb3JjZUZpbGVQYXRoU2VwYXJhdGlvbigpCit2b2lkIFNlY3VyaXR5T3JpZ2lu
OjpzZXRFbmZvcmNlc0ZpbGVQYXRoU2VwYXJhdGlvbihib29sIHZhbHVlKQogewogICAgIEFTU0VS
VChpc0xvY2FsKCkpOwotICAgIG1fZW5mb3JjZUZpbGVQYXRoU2VwYXJhdGlvbiA9IHRydWU7Cisg
ICAgQVNTRVJUKHZhbHVlKTsgLy8gQ3VycmVudGx5IHdlIG9ubHkgdXNlIHRoaXMgbWV0aG9kIHRv
IHNldCB0aGlzIHRvIHRydWUuCisgICAgbV9lbmZvcmNlc0ZpbGVQYXRoU2VwYXJhdGlvbiA9IHZh
bHVlOwogfQogCiBib29sIFNlY3VyaXR5T3JpZ2luOjppc0xvY2FsKCkgY29uc3QKQEAgLTQ2OCw3
ICs0NjksNyBAQCBTdHJpbmcgU2VjdXJpdHlPcmlnaW46OnRvU3RyaW5nKCkgY29uc3QKIHsKICAg
ICBpZiAoaXNVbmlxdWUoKSkKICAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgibnVsbCIpOwot
ICAgIGlmIChtX3Byb3RvY29sID09ICJmaWxlIiAmJiBtX2VuZm9yY2VGaWxlUGF0aFNlcGFyYXRp
b24pCisgICAgaWYgKG1fcHJvdG9jb2wgPT0gImZpbGUiICYmIG1fZW5mb3JjZXNGaWxlUGF0aFNl
cGFyYXRpb24pCiAgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIm51bGwiKTsKICAgICByZXR1
cm4gdG9SYXdTdHJpbmcoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlP
cmlnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2lu
LmgJKHJldmlzaW9uIDIyODEwNikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmln
aW4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDctMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2NSw3ICsxNjUsOCBAQCBwdWJsaWM6CiAgICAgLy8g
TWFya3MgYSBmaWxlOi8vIG9yaWdpbiBhcyBiZWluZyBpbiBhIGRvbWFpbiBkZWZpbmVkIGJ5IGl0
cyBwYXRoLgogICAgIC8vIEZJWE1FIDgxNTc4OiBUaGUgbmFtaW5nIG9mIHRoaXMgaXMgY29uZnVz
aW5nLiBGaWxlcyB3aXRoIHJlc3RyaWN0ZWQgYWNjZXNzIHRvIG90aGVyIGxvY2FsIGZpbGVzCiAg
ICAgLy8gc3RpbGwgY2FuIGhhdmUgb3RoZXIgcHJpdmlsZWdlcyB0aGF0IGNhbiBiZSByZW1lbWJl
cmVkLCB0aGVyZWJ5IG5vdCBtYWtpbmcgdGhlbSB1bmlxdWUuCi0gICAgdm9pZCBlbmZvcmNlRmls
ZVBhdGhTZXBhcmF0aW9uKCk7CisgICAgdm9pZCBzZXRFbmZvcmNlc0ZpbGVQYXRoU2VwYXJhdGlv
bihib29sKTsKKyAgICBib29sIGVuZm9yY2VzRmlsZVBhdGhTZXBhcmF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9lbmZvcmNlc0ZpbGVQYXRoU2VwYXJhdGlvbjsgfQogCiAgICAgLy8gQ29udmVydCB0
aGlzIFNlY3VyaXR5T3JpZ2luIGludG8gYSBzdHJpbmcuIFRoZSBzdHJpbmcKICAgICAvLyByZXBy
ZXNlbnRhdGlvbiBvZiBhIFNlY3VyaXR5T3JpZ2luIGlzIHNpbWlsYXIgdG8gYSBVUkwsIGV4Y2Vw
dCBpdApAQCAtMjI5LDcgKzIzMCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2RvbWFpbldhc1Nl
dEluRE9NIHsgZmFsc2UgfTsKICAgICBib29sIG1fY2FuTG9hZExvY2FsUmVzb3VyY2VzIHsgZmFs
c2UgfTsKICAgICBTdG9yYWdlQmxvY2tpbmdQb2xpY3kgbV9zdG9yYWdlQmxvY2tpbmdQb2xpY3kg
eyBBbGxvd0FsbFN0b3JhZ2UgfTsKLSAgICBib29sIG1fZW5mb3JjZUZpbGVQYXRoU2VwYXJhdGlv
biB7IGZhbHNlIH07CisgICAgYm9vbCBtX2VuZm9yY2VzRmlsZVBhdGhTZXBhcmF0aW9uIHsgZmFs
c2UgfTsKICAgICBib29sIG1fbmVlZHNTdG9yYWdlQWNjZXNzRnJvbUZpbGVVUkxzUXVpcmsgeyBm
YWxzZSB9OwogICAgIGJvb2wgbV9pc1BvdGVudGlhbGx5VHJ1c3R3b3J0aHkgeyBmYWxzZSB9Owog
fTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVGhyZWFkTG9jYWxDYWNoZU9yaWdp
bktleS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVGhyZWFkTG9jYWxD
YWNoZU9yaWdpbktleS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleSB7CitwdWJsaWM6CisgICAgVGhyZWFkTG9j
YWxDYWNoZU9yaWdpbktleSgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBUaHJlYWRMb2NhbENh
Y2hlT3JpZ2luS2V5KFN0cmluZyBob3N0LCBTdHJpbmcgcHJvdG9jb2wsIHN0ZDo6b3B0aW9uYWw8
dWludDE2X3Q+IHBvcnQpCisgICAgICAgIDogbV9ob3N0KGhvc3QpCisgICAgICAgICwgbV9wcm90
b2NvbChwcm90b2NvbCkKKyAgICAgICAgLCBtX3BvcnQocG9ydCkKKyAgICB7CisgICAgfQorICAg
IAorICAgIFRocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFs
dWVUeXBlKQorICAgICAgICA6IG1faG9zdChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUaHJlYWRMb2NhbENh
Y2hlT3JpZ2luS2V5JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2hvc3Qg
PT0gb3RoZXIubV9ob3N0CisgICAgICAgICAgICAmJiBtX3Byb3RvY29sID09IG90aGVyLm1fcHJv
dG9jb2wKKyAgICAgICAgICAgICYmIG1fcG9ydCA9PSBvdGhlci5tX3BvcnQ7CisgICAgfQorICAg
IAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5JiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAg
ICB9CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gKnRoaXMgIT0gVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleSgpOworICAgIH0K
KyAgICAKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4g
bV9ob3N0LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2hvc3QuaGFzaCgpICsgbV9wcm90
b2NvbC5oYXNoKCkgKyAobV9wb3J0ID8gKm1fcG9ydCA6IDApOworICAgIH0KKyAgICAKK3ByaXZh
dGU6CisgICAgU3RyaW5nIG1faG9zdDsKKyAgICBTdHJpbmcgbV9wcm90b2NvbDsKKyAgICBzdGQ6
Om9wdGlvbmFsPHVpbnQxNl90PiBtX3BvcnQ7Cit9OworCitzdHJ1Y3QgVGhyZWFkTG9jYWxDYWNo
ZU9yaWdpbktleUhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFRocmVhZExv
Y2FsQ2FjaGVPcmlnaW5LZXkmIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBrZXkuaGFzaCgp
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUaHJlYWRMb2NhbENh
Y2hlT3JpZ2luS2V5JiBhLCBjb25zdCBUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5JiBiKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGNvbnN0
IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsgLy8gVGhpcyBpcyBh
IHNhZmUgY2hvaWNlLCBwb3NzaWJseSBtb3JlIGNvbnNlcnZhdGl2ZSB0aGFuIG5lY2Vzc2FyeS4K
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZh
dWx0SGFzaDxXZWJDb3JlOjpUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5PiB7CisgICAgdHlwZWRl
ZiBXZWJDb3JlOjpUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5SGFzaCBIYXNoOworfTsKKwordGVt
cGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFz
aFRyYWl0czxXZWJDb3JlOjpUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5PiA6IFNpbXBsZUNsYXNz
SGFzaFRyYWl0czxXZWJDb3JlOjpUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5PiB7CisgICAgc3Rh
dGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOyAvLyBUaGlzIGlzIGEgc2Fm
ZSBjaG9pY2UsIHBvc3NpYmx5IG1vcmUgY29uc2VydmF0aXZlIHRoYW4gbmVjZXNzYXJ5LgorfTsK
KworfSAvLyBuYW1lc3BhY2UgV1RGCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>333104</attachid>
            <date>2018-02-05 11:35:24 -0800</date>
            <delta_ts>2018-02-05 17:59:18 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>67597</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI4MTA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDczIEBA
CisyMDE4LTAxLTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R2xvYmFsIG9iamVjdHMgc2hvdWxkIGJlIGFibGUgdG8gdXNlIFRMQ3MgdG8gYWxsb2NhdGUgZnJv
bSBkaWZmZXJlbnQgYmxvY2tzIGZyb20gZWFjaCBvdGhlcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgyMjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
SkYgQmFzdGllbi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgdXNlcyBUTENzIHRvIGNyZWF0ZSBh
dCBsZWFzdCBgbWluaW11bURpc3RhbmNlQmV0d2VlbkNlbGxzRnJvbURpZmZlcmVuT3JpZ2luc2Ag
Ynl0ZXMgb2YKKyAgICAgICAgZGlzdGFuY2UgYmV0d2VlbiBvYmplY3RzIGZyb20gZGlmZmVyZW50
IG9yaWdpbnMsIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tYmluYXRpb24gb2YgdGhpbmdzLiBGb3IK
KyAgICAgICAgc2hvcnQgbGV0cyByZWZlciB0byB0aGF0IGNvbnN0YW50IGFzIEsuCisgICAgICAg
IAorICAgICAgICAtIFNpbmNlIHIyMjc3MjEsIExhcmdlQWxsb2NhdGlvbiBwdXRzIEsgYnl0ZXMg
cGFkZGluZyBhdCB0aGUgZW5kIG9mIGVhY2ggYWxsb2NhdGlvbi4KKyAgICAgICAgCisgICAgICAg
IC0gU2luY2UgcjIyNzcxOCwgTWFya2VkQmxvY2sgcHV0cyBhdCBsZWFzdCBLIGJ5dGVzIGluIGl0
cyBmb290ZXIuCisgICAgICAgIAorICAgICAgICAtIFNpbmNlIHIyMjc2MTcsIGdsb2JhbCBvYmpl
Y3RzIGNhbiBoYXZlIHRoZWlyIG93biBUTENzLCB3aGljaCBtYWtlIHRoZW0gYWxsb2NhdGUgZnJv
bSBhCisgICAgICAgICAgZGlmZmVyZW50IHNldCBvZiBibG9ja3MgdGhhbiBvdGhlciBnbG9iYWwg
b2JqZWN0cy4gVGhlIFRMQyBvZiBhIGdsb2JhbCBvYmplY3QgY29tZXMgaW50bworICAgICAgICAg
IGVmZmVjdCB3aGVuIHlvdSBlbnRlciB0aGUgVk0gdmlhIHRoYXQgZ2xvYmFsIG9iamVjdC4KKyAg
ICAgICAgCisgICAgICAgIC0gV2l0aCB0aGlzIGNoYW5nZSwgVExDcyBhbmQgYmxvY2tzIGJvdGgg
aGF2ZSBzZWN1cml0eSBvcmlnaW5zLiBBIFRMQyB3aWxsIG9ubHkgdXNlIGJsb2NrcyB0aGF0Cisg
ICAgICAgICAgc2hhcmUgdGhlIHNhbWUgc2VjdXJpdHkgb3JpZ2luIG9yIGVtcHR5IGJsb2NrcyAo
aW4gd2hpY2ggY2FzZSB3ZSB6ZXJvIHRoZSBibG9jayBhbmQgY2hhbmdlCisgICAgICAgICAgaXRz
IHNlY3VyaXR5IG9yaWdpbikuCisgICAgICAgIAorICAgICAgICBXZWJDb3JlIGRldGVybWluZXMg
dGhlIFRMQy1HbG9iYWxPYmplY3QgbWFwcGluZy4gQnkgZGVmYXVsdCwgZ2xvYmFsIG9iamVjdHMg
d291bGQgc2ltcGx5IHVzZQorICAgICAgICB0aGUgVk0ncyBkZWZhdWx0IFRMQy4gV2ViQ29yZSBt
YWtlcyBpdCBzbyB0aGF0IERPTSB3aW5kb3dzIChidXQgbm90IHdvcmtlciBnbG9iYWwgb2JqZWN0
cykgZ2V0CisgICAgICAgIGEgVExDIGJhc2VkIG9uIHRoZWlyIGRvY3VtZW50J3MgU2VjdXJpdHlP
cmlnaW4uCisgICAgICAgIAorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogaGVhcC9CbG9j
a0RpcmVjdG9yeS5jcHA6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5OjpmaW5kQmxvY2tG
b3JBbGxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OnByZXBhcmVGb3JB
bGxvY2F0aW9uKToKKyAgICAgICAgKiBoZWFwL0Jsb2NrRGlyZWN0b3J5Lmg6CisgICAgICAgICog
aGVhcC9Mb2NhbEFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjpM
b2NhbEFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjpyZXNldCk6Cisg
ICAgICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjp+TG9jYWxBbGxvY2F0b3IpOgorICAgICAgICAo
SlNDOjpMb2NhbEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6Okxv
Y2FsQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKToKKyAgICAgICAgKiBo
ZWFwL0xvY2FsQWxsb2NhdG9yLmg6CisgICAgICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjp0bGMg
Y29uc3QpOgorICAgICAgICAqIGhlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwOgor
ICAgICAgICAqIGhlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaDoKKyAgICAgICAgKiBo
ZWFwL01hcmtlZEJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6
YXNzb2NpYXRlV2l0aE9yaWdpbik6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAg
ICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpzZWN1cml0eU9yaWdpblRva2VuIGNvbnN0
KToKKyAgICAgICAgKiBoZWFwL1NlY3VyaXR5T3JpZ2luVG9rZW4uY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6dW5pcXVlU2VjdXJpdHlPcmlnaW5Ub2tlbik6CisgICAgICAgICogaGVhcC9TZWN1
cml0eU9yaWdpblRva2VuLmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAvVGhyZWFkTG9jYWxDYWNo
ZS5jcHA6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGU6OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OlRocmVhZExvY2FsQ2FjaGU6OlRocmVhZExvY2FsQ2FjaGUpOgorICAgICAgICAoSlND
OjpUaHJlYWRMb2NhbENhY2hlOjphbGxvY2F0ZURhdGEpOgorICAgICAgICAoSlNDOjpUaHJlYWRM
b2NhbENhY2hlOjppbnN0YWxsU2xvdyk6CisgICAgICAgICogaGVhcC9UaHJlYWRMb2NhbENhY2hl
Lmg6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGU6OnNlY3VyaXR5T3JpZ2luVG9rZW4g
Y29uc3QpOgorICAgICAgICAqIGhlYXAvVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFsbCk6CisgICAgICAgICogcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpKU0dsb2Jh
bE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpjcmVhdGVUaHJlYWRMb2Nh
bENhY2hlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsT2JqZWN0Ojp0aHJlYWRMb2NhbENhY2hlKToKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxPYmplY3Q6OnRocmVhZExvY2FsQ2FjaGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcDoKKyAgICAgICAgKEpTQzo6Vk1FbnRyeVNjb3BlOjpW
TUVudHJ5U2NvcGUpOgorICAgICAgICAoSlNDOjpWTUVudHJ5U2NvcGU6On5WTUVudHJ5U2NvcGUp
OgorICAgICAgICAqIHJ1bnRpbWUvVk1FbnRyeVNjb3BlLmg6CisKIDIwMTgtMDItMDUgIERvbiBP
bG1zdGVhZCAgPGRvbi5vbG1zdGVhZEBzb255LmNvbT4KIAogICAgICAgICBKYXZhU2NyaXB0Q29y
ZSBmaWxlcyBzaG91bGQgbm90IGJlIGluY2x1ZGVkIHJlbGF0aXZlbHkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIyODEwNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTEzLDYgKzUxMyw3
IEBAIHNldChKYXZhU2NyaXB0Q29yZV9GT1JXQVJESU5HX0hFQURFUlMKICAgICBoZWFwL011dGF0
b3JTdGF0ZS5oCiAgICAgaGVhcC9SZWdpc3RlclN0YXRlLmgKICAgICBoZWFwL1J1bm5pbmdTY29w
ZS5oCisgICAgaGVhcC9TZWN1cml0eU9yaWdpblRva2VuLmgKICAgICBoZWFwL1NpbXBsZU1hcmtp
bmdDb25zdHJhaW50LmgKICAgICBoZWFwL1Nsb3RWaXNpdG9yLmgKICAgICBoZWFwL1Nsb3RWaXNp
dG9ySW5saW5lcy5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAy
MjgxMDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNCArMSw0IEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogLy8KIC8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogLy8gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
MTIsNiArNTEyLDcgQEAgaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAKIGhlYXAvTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXIuY3BwCiBoZWFwL011dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL011
dGF0b3JTdGF0ZS5jcHAKK2hlYXAvU2VjdXJpdHlPcmlnaW5Ub2tlbi5jcHAKIGhlYXAvU2ltcGxl
TWFya2luZ0NvbnN0cmFpbnQuY3BwCiBoZWFwL1Nsb3RWaXNpdG9yLmNwcAogaGVhcC9TcGFjZVRp
bWVNdXRhdG9yU2NoZWR1bGVyLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDIyODEwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQsNiArMjk0
LDcgQEAKIAkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2MENC
QUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1
YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY0MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTRCMTQ2MENE
NkUwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNDJC
M0MzMjAxRUM5RkYwMDM1NzAzMSAvKiBTZWN1cml0eU9yaWdpblRva2VuLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyQjNDMjIwMUVDOUZEMDAzNTcw
MzEgLyogU2VjdXJpdHlPcmlnaW5Ub2tlbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGNDMxNzM4MTQ2QkFDNjkwMDdFMzg5MCAvKiBMaXN0YWJs
ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNDMxNzM2MTQ2QkFDNjUwMDdFMzg5MCAvKiBMaXN0YWJsZUhhbmRsZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQ1NzAzOTFCRTQ0Qzkx
MDA2MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDU3MDM3MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJF
bGltaW5hdGVEZWFkQ29kZS5oICovOyB9OwogCQkwRjQ1NzAzRDFCRTQ1RjBBMDA2MkE2MjkgLyog
QWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NTcwM0IxQkU0NUYwQTAwNjJBNjI5IC8qIEFpclJlcG9ydFVzZWRS
ZWdpc3RlcnMuaCAqLzsgfTsKQEAgLTIyNjIsNiArMjI2Myw4IEBACiAJCTBGNDI2QTQ1MTQ2MENC
QUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFZhbHVlUmVjb3ZlcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0
MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBWaXJ0dWFsUmVnaXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YUZvcm1hdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjQyQjNDMDIwMUVCNTA5MDAzNTcwMzEgLyogQWxsb2NhdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFsbG9jYXRvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDJCM0MyMjAxRUM5RkQwMDM1NzAzMSAvKiBT
ZWN1cml0eU9yaWdpblRva2VuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNl
Y3VyaXR5T3JpZ2luVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MzE3
MzYxNDZCQUM2NTAwN0UzODkwIC8qIExpc3RhYmxlSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBMaXN0YWJsZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY0NTcwMzYxQkU0NEM5MTAwNjJBNjI5IC8qIEFpckVsaW1pbmF0ZURlYWRDb2Rl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckVsaW1pbmF0ZURl
YWRDb2RlLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJFbGltaW5hdGVEZWFkQ29kZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDU3MDM3MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJF
bGltaW5hdGVEZWFkQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJF
bGltaW5hdGVEZWFkQ29kZS5oOyBwYXRoID0gYjMvYWlyL0FpckVsaW1pbmF0ZURlYWRDb2RlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NTU5LDIxICs1NTYyLDE0IEBACiAJCTE0
MkUzMTJBMTM0RkYwQTYwMEFGQURCNSAvKiBoZWFwICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkwRjc1QTA1NDIwMEQyNUVGMDAzOEUyQ0YgLyogQWxsb2Nh
dG9yLmggKi8sCi0JCQkJMEY3NUEwNUQyMDBEMjVGMTAwMzhFMkNGIC8qIEFsbG9jYXRvcklubGlu
ZXMuaCAqLywKLQkJCQkwRjc1QTA1OTIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3Iu
Y3BwICovLAotCQkJCTBGNzVBMDU3MjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5o
ICovLAotCQkJCTBGNzVBMDVBMjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvcklubGlu
ZXMuaCAqLywKLQkJCQkwRjc1QTA1ODIwMEQyNUYwMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNo
ZS5jcHAgKi8sCi0JCQkJMEY3NUEwNTUyMDBEMjVFRjAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2Fj
aGUuaCAqLywKLQkJCQkwRjc1QTA1NjIwMEQyNUVGMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNo
ZUlubGluZXMuaCAqLywKLQkJCQkwRjc1QTA1QjIwMEQyNUYxMDAzOEUyQ0YgLyogVGhyZWFkTG9j
YWxDYWNoZUxheW91dC5jcHAgKi8sCi0JCQkJMEY3NUEwNUMyMDBEMjVGMTAwMzhFMkNGIC8qIFRo
cmVhZExvY2FsQ2FjaGVMYXlvdXQuaCAqLywKIAkJCQkwRkVDM0M1MDFGMzNBNDE2MDBGNTlCNkMg
LyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJMEZFQzNDNTExRjMzQTQxNjAw
RjU5QjZDIC8qIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCAqLywKIAkJCQkwRkE3NjIwQTFEQjk1
OUY2MDBCN0EyRkQgLyogQWxsb2NhdGluZ1Njb3BlLmggKi8sCiAJCQkJMEZEQ0UxMUIxRkFFNjFG
NDAwNkYzOTAxIC8qIEFsbG9jYXRpb25GYWlsdXJlTW9kZS5oICovLAorCQkJCTBGNDJCM0MwMjAx
RUI1MDkwMDM1NzAzMSAvKiBBbGxvY2F0b3IuY3BwICovLAorCQkJCTBGNzVBMDU0MjAwRDI1RUYw
MDM4RTJDRiAvKiBBbGxvY2F0b3IuaCAqLywKIAkJCQkwRjMwQ0I1RDFGQ0U0NkI0MDA0QjUzMjMg
LyogQWxsb2NhdG9yRm9yTW9kZS5oICovLAorCQkJCTBGNzVBMDVEMjAwRDI1RjEwMDM4RTJDRiAv
KiBBbGxvY2F0b3JJbmxpbmVzLmggKi8sCiAJCQkJMEZCNDY3N0UxRkREQTZFNTAwM0ZDQjA5IC8q
IEF0b21JbmRpY2VzLmggKi8sCiAJCQkJQzJCOTE2QzQxNERBMDQwQzAwQ0JBQzg2IC8qIEJsb2Nr
RGlyZWN0b3J5LmNwcCAqLywKIAkJCQlDMkI5MTZDMTE0REEwMTRFMDBDQkFDODYgLyogQmxvY2tE
aXJlY3RvcnkuaCAqLywKQEAgLTU2NzQsNiArNTY3MCw5IEBACiAJCQkJMEYwNzBBNDUxRDU0M0E4
OTAwNkU3MjMyIC8qIExhcmdlQWxsb2NhdGlvbi5jcHAgKi8sCiAJCQkJMEYwNzBBNDYxRDU0M0E4
OTAwNkU3MjMyIC8qIExhcmdlQWxsb2NhdGlvbi5oICovLAogCQkJCTBGNDMxNzM2MTQ2QkFDNjUw
MDdFMzg5MCAvKiBMaXN0YWJsZUhhbmRsZXIuaCAqLywKKwkJCQkwRjc1QTA1OTIwMEQyNUYwMDAz
OEUyQ0YgLyogTG9jYWxBbGxvY2F0b3IuY3BwICovLAorCQkJCTBGNzVBMDU3MjAwRDI1RjAwMDM4
RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5oICovLAorCQkJCTBGNzVBMDVBMjAwRDI1RjAwMDM4RTJD
RiAvKiBMb2NhbEFsbG9jYXRvcklubGluZXMuaCAqLywKIAkJCQkwRjIwOEFENjFERjA5MjVBMDA3
RDMyNjkgLyogTG9ja0R1cmluZ01hcmtpbmcuaCAqLywKIAkJCQkxNEI3MjMzRjEyRDdEMERBMDAz
QkQ1RUQgLyogTWFjaGluZVN0YWNrTWFya2VyLmNwcCAqLywKIAkJCQkxNEI3MjM0MDEyRDdEMERB
MDAzQkQ1RUQgLyogTWFjaGluZVN0YWNrTWFya2VyLmggKi8sCkBAIC01NzAzLDYgKzU3MDIsNyBA
QAogCQkJCTBGRDBFNUVGMUU0NkJGMjMwMDA2QUIwOCAvKiBSZWdpc3RlclN0YXRlLmggKi8sCiAJ
CQkJMEY3Q0Y5NEUxREJFRUU4NjAwOThDQzEyIC8qIFJlbGVhc2VIZWFwQWNjZXNzU2NvcGUuaCAq
LywKIAkJCQkwRjJDNjNBOTFFNEZBNDJDMDBDMTM4MzkgLyogUnVubmluZ1Njb3BlLmggKi8sCisJ
CQkJMEY0MkIzQzIyMDFFQzlGRDAwMzU3MDMxIC8qIFNlY3VyaXR5T3JpZ2luVG9rZW4uaCAqLywK
IAkJCQkwRjREOEM3NjFGQ0EzQ0YyMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQu
Y3BwICovLAogCQkJCTBGNEQ4Qzc3MUZDQTNDRjMwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29u
c3RyYWludC5oICovLAogCQkJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRv
ci5jcHAgKi8sCkBAIC01NzI0LDYgKzU3MjQsMTEgQEAKIAkJCQkwRkQ3OUEyQzFFQkJCREIyMDBE
QTg4RDMgLyogU3luY2hyb25vdXNuZXNzLmggKi8sCiAJCQkJMEYxRkIzOEExRTE3M0E2MjAwQTlC
RTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgKi8sCiAJ
CQkJMEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0
YXRvclNjaGVkdWxlci5oICovLAorCQkJCTBGNzVBMDU4MjAwRDI1RjAwMDM4RTJDRiAvKiBUaHJl
YWRMb2NhbENhY2hlLmNwcCAqLywKKwkJCQkwRjc1QTA1NTIwMEQyNUVGMDAzOEUyQ0YgLyogVGhy
ZWFkTG9jYWxDYWNoZS5oICovLAorCQkJCTBGNzVBMDU2MjAwRDI1RUYwMDM4RTJDRiAvKiBUaHJl
YWRMb2NhbENhY2hlSW5saW5lcy5oICovLAorCQkJCTBGNzVBMDVCMjAwRDI1RjEwMDM4RTJDRiAv
KiBUaHJlYWRMb2NhbENhY2hlTGF5b3V0LmNwcCAqLywKKwkJCQkwRjc1QTA1QzIwMEQyNUYxMDAz
OEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oICovLAogCQkJCTE0MTQ0OENDMTNBMTc4
MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCAqLywKIAkJCQkwRjVGMDhDRTE0NkM3NjJG
MDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oICovLAogCQkJCTBGNEQ4QzcyMUZD
N0E5NzMwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCAqLywKQEAgLTg1MjIsNiArODUyNyw3IEBA
CiAJCQkJMEY3QzM5RkYxQzkwQzU1QjAwNDgwMTUxIC8qIERGR09wSW5mby5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTdEODlDRkUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJpbGl0eUFu
YWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5
NCAvKiBERkdPU1JFbnRyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0MkIzQzMyMDFFQzlGRjAw
MzU3MDMxIC8qIFNlY3VyaXR5T3JpZ2luVG9rZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhB
MzI2MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVDMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JF
eGl0QmFzZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9CbG9ja0RpcmVjdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCShyZXZpc2lvbiAyMjgxMDYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDYgKzMzLDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxv
Y2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCisjaW5jbHVkZSAiVGhyZWFk
TG9jYWxDYWNoZUlubGluZXMuaCIKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9DdXJy
ZW50VGltZS5oPgogCkBAIC04MCwxNCArODEsMjAgQEAgTWFya2VkQmxvY2s6OkhhbmRsZSogQmxv
Y2tEaXJlY3Rvcnk6OmZpbgogICAgIHJldHVybiBtX2Jsb2Nrc1ttX2VtcHR5Q3Vyc29yXTsKIH0K
IAotTWFya2VkQmxvY2s6OkhhbmRsZSogQmxvY2tEaXJlY3Rvcnk6OmZpbmRCbG9ja0ZvckFsbG9j
YXRpb24oKQorTWFya2VkQmxvY2s6OkhhbmRsZSogQmxvY2tEaXJlY3Rvcnk6OmZpbmRCbG9ja0Zv
ckFsbG9jYXRpb24oTG9jYWxBbGxvY2F0b3ImIGFsbG9jYXRvcikKIHsKLSAgICBtX2FsbG9jYXRp
b25DdXJzb3IgPSAobV9jYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IHwgbV9lbXB0eSkuZmluZEJpdCht
X2FsbG9jYXRpb25DdXJzb3IsIHRydWUpOwotICAgIGlmIChtX2FsbG9jYXRpb25DdXJzb3IgPj0g
bV9ibG9ja3Muc2l6ZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBzZXRJ
c0NhbkFsbG9jYXRlQnV0Tm90RW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBtX2FsbG9jYXRpb25D
dXJzb3IsIGZhbHNlKTsKLSAgICByZXR1cm4gbV9ibG9ja3NbbV9hbGxvY2F0aW9uQ3Vyc29yXTsK
KyAgICBmb3IgKDs7KSB7CisgICAgICAgIGFsbG9jYXRvci5tX2FsbG9jYXRpb25DdXJzb3IgPSAo
bV9jYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IHwgbV9lbXB0eSkuZmluZEJpdChhbGxvY2F0b3IubV9h
bGxvY2F0aW9uQ3Vyc29yLCB0cnVlKTsKKyAgICAgICAgaWYgKGFsbG9jYXRvci5tX2FsbG9jYXRp
b25DdXJzb3IgPj0gbV9ibG9ja3Muc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIAorICAgICAgICBzaXplX3QgYmxvY2tJbmRleCA9IGFsbG9jYXRvci5tX2FsbG9j
YXRpb25DdXJzb3IrKzsKKyAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogcmVzdWx0ID0gbV9i
bG9ja3NbYmxvY2tJbmRleF07CisgICAgICAgIGlmIChyZXN1bHQtPnNlY3VyaXR5T3JpZ2luVG9r
ZW4oKSA9PSBhbGxvY2F0b3IudGxjKCktPnNlY3VyaXR5T3JpZ2luVG9rZW4oKSkgeworICAgICAg
ICAgICAgc2V0SXNDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgYmxv
Y2tJbmRleCwgZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQor
ICAgIH0KIH0KIAogTWFya2VkQmxvY2s6OkhhbmRsZSogQmxvY2tEaXJlY3Rvcnk6OnRyeUFsbG9j
YXRlQmxvY2soKQpAQCAtMTgzLDggKzE5MCw2IEBAIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OnByZXBh
cmVGb3JBbGxvY2F0aW8KICAgICAgICAgICAgIGFsbG9jYXRvci0+cHJlcGFyZUZvckFsbG9jYXRp
b24oKTsKICAgICAgICAgfSk7CiAgICAgCi0gICAgbV9hbGxvY2F0aW9uQ3Vyc29yID0gMDsKLSAg
ICBtX2VtcHR5Q3Vyc29yID0gMDsKICAgICBtX3Vuc3dlcHRDdXJzb3IgPSAwOwogICAgIAogICAg
IG1fZWRlbi5jbGVhckFsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxv
Y2tEaXJlY3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9C
bG9ja0RpcmVjdG9yeS5oCShyZXZpc2lvbiAyMjgxMDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBA
IGNsYXNzIEhlYXA7CiBjbGFzcyBJc29DZWxsU2V0OwogY2xhc3MgTWFya2VkU3BhY2U7CiBjbGFz
cyBMTEludE9mZnNldHNFeHRyYWN0b3I7CitjbGFzcyBUaHJlYWRMb2NhbENhY2hlOwogY2xhc3Mg
VGhyZWFkTG9jYWxDYWNoZUxheW91dDsKIAogI2RlZmluZSBGT1JfRUFDSF9CTE9DS19ESVJFQ1RP
UllfQklUKG1hY3JvKSBcCkBAIC0xNjIsMTIgKzE2MywxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
dW1wQml0cyhQcmludFN0cmVhbSYgPSBXVEY6OmRhdGFGaWxlKCkpOwogICAgIAogcHJpdmF0ZToK
LSAgICBmcmllbmQgY2xhc3MgTG9jYWxBbGxvY2F0b3I7CiAgICAgZnJpZW5kIGNsYXNzIElzb0Nl
bGxTZXQ7CisgICAgZnJpZW5kIGNsYXNzIExvY2FsQWxsb2NhdG9yOworICAgIGZyaWVuZCBjbGFz
cyBMb2NhbFNpZGVBbGxvY2F0b3I7CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJsb2NrOwogICAg
IGZyaWVuZCBjbGFzcyBUaHJlYWRMb2NhbENhY2hlTGF5b3V0OwogICAgIAotICAgIE1hcmtlZEJs
b2NrOjpIYW5kbGUqIGZpbmRCbG9ja0ZvckFsbG9jYXRpb24oKTsKKyAgICBNYXJrZWRCbG9jazo6
SGFuZGxlKiBmaW5kQmxvY2tGb3JBbGxvY2F0aW9uKExvY2FsQWxsb2NhdG9yJik7CiAgICAgCiAg
ICAgTWFya2VkQmxvY2s6OkhhbmRsZSogdHJ5QWxsb2NhdGVCbG9jaygpOwogICAgIApAQCAtMTg0
LDggKzE4Niw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgLy8gQWZ0ZXIgeW91IGRvIHNvbWV0aGlu
ZyB0byBhIGJsb2NrIGJhc2VkIG9uIG9uZSBvZiB0aGVzZSBjdXJzb3JzLCB5b3UgY2xlYXIgdGhl
IGJpdCBpbiB0aGUKICAgICAvLyBjb3JyZXNwb25kaW5nIGJpdHZlY3RvciBhbmQgbGVhdmUgdGhl
IGN1cnNvciB3aGVyZSBpdCB3YXMuCi0gICAgc2l6ZV90IG1fYWxsb2NhdGlvbkN1cnNvciB7IDAg
fTsgLy8gUG9pbnRzIHRvIHRoZSBuZXh0IGJsb2NrIHRoYXQgaXMgYSBjYW5kaWRhdGUgZm9yIGFs
bG9jYXRpb24uCi0gICAgc2l6ZV90IG1fZW1wdHlDdXJzb3IgeyAwIH07IC8vIFBvaW50cyB0byB0
aGUgbmV4dCBibG9jayB0aGF0IGlzIGEgY2FuZGlkYXRlIGZvciBlbXB0eSBhbGxvY2F0aW9uIChh
bGxvY2F0aW5nIGluIGVtcHR5IGJsb2NrcykuCisgICAgc2l6ZV90IG1fZW1wdHlDdXJzb3IgeyAw
IH07CiAgICAgc2l6ZV90IG1fdW5zd2VwdEN1cnNvciB7IDAgfTsgLy8gUG9pbnRzIHRvIHRoZSBu
ZXh0IGJsb2NrIHRoYXQgaXMgYSBjYW5kaWRhdGUgZm9yIGluY3JlbWVudGFsIHN3ZWVwaW5nLgog
ICAgIAogICAgIHVuc2lnbmVkIG1fY2VsbFNpemU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMjgxMDYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDggKzMyLDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUxvY2FsQWxsb2NhdG9yOjpM
b2NhbEFsbG9jYXRvcihCbG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5KQotICAgIDogbV9kaXJlY3Rv
cnkoZGlyZWN0b3J5KQorTG9jYWxBbGxvY2F0b3I6OkxvY2FsQWxsb2NhdG9yKFRocmVhZExvY2Fs
Q2FjaGUqIHRsYywgQmxvY2tEaXJlY3RvcnkqIGRpcmVjdG9yeSkKKyAgICA6IG1fdGxjKHRsYykK
KyAgICAsIG1fZGlyZWN0b3J5KGRpcmVjdG9yeSkKICAgICAsIG1fY2VsbFNpemUoZGlyZWN0b3J5
LT5tX2NlbGxTaXplKQogICAgICwgbV9mcmVlTGlzdChtX2NlbGxTaXplKQogewpAQCAtNDIsMTEg
KzQzLDEzIEBAIExvY2FsQWxsb2NhdG9yOjpMb2NhbEFsbG9jYXRvcihCbG9ja0RpcmUKIH0KIAog
TG9jYWxBbGxvY2F0b3I6OkxvY2FsQWxsb2NhdG9yKExvY2FsQWxsb2NhdG9yJiYgb3RoZXIpCi0g
ICAgOiBtX2RpcmVjdG9yeShvdGhlci5tX2RpcmVjdG9yeSkKKyAgICA6IG1fdGxjKG90aGVyLm1f
dGxjKQorICAgICwgbV9kaXJlY3Rvcnkob3RoZXIubV9kaXJlY3RvcnkpCiAgICAgLCBtX2NlbGxT
aXplKG90aGVyLm1fY2VsbFNpemUpCiAgICAgLCBtX2ZyZWVMaXN0KFdURk1vdmUob3RoZXIubV9m
cmVlTGlzdCkpCiAgICAgLCBtX2N1cnJlbnRCbG9jayhvdGhlci5tX2N1cnJlbnRCbG9jaykKICAg
ICAsIG1fbGFzdEFjdGl2ZUJsb2NrKG90aGVyLm1fbGFzdEFjdGl2ZUJsb2NrKQorICAgICwgbV9h
bGxvY2F0aW9uQ3Vyc29yKG90aGVyLm1fYWxsb2NhdGlvbkN1cnNvcikKIHsKICAgICBvdGhlci5y
ZXNldCgpOwogICAgIGlmIChvdGhlci5pc09uTGlzdCgpKSB7CkBAIC02MSw2ICs2NCw3IEBAIHZv
aWQgTG9jYWxBbGxvY2F0b3I6OnJlc2V0KCkKICAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7CiAgICAg
bV9jdXJyZW50QmxvY2sgPSBudWxscHRyOwogICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbnVsbHB0
cjsKKyAgICBtX2FsbG9jYXRpb25DdXJzb3IgPSAwOwogfQogCiBMb2NhbEFsbG9jYXRvcjo6fkxv
Y2FsQWxsb2NhdG9yKCkKQEAgLTgwLDYgKzg0LDE1IEBAIExvY2FsQWxsb2NhdG9yOjp+TG9jYWxB
bGxvY2F0b3IoKQogICAgIC8vICAgdGhhdCBpdCBpcyBub3QgcmVhY2hhYmxlLiBUaGVyZWZvcmUs
IHRoZSBUTEMgc2hvdWxkIHN0aWxsIGJlIGluIGEgZnVsbHkgcmVzZXQgc3RhdGUgYXQgdGhlCiAg
ICAgLy8gICB0aW1lIG9mIGRlc3RydWN0aW9uIGJlY2F1c2UgZm9yIGl0IHRvIGdldCBpbnRvIGFu
eSBvdGhlciBzdGF0ZSwgc29tZW9uZSBtdXN0IGhhdmUgYWxsb2NhdGVkCiAgICAgLy8gICBpbiBp
dCAod2hpY2ggaXMgaW1wb3NzaWJsZSBiZWNhdXNlIGl0J3Mgc3VwcG9zZWRseSB1bnJlYWNoYWJs
ZSkuCisgICAgLy8KKyAgICAvLyBNeSBiaWdnZXN0IHdvcnJ5IHdpdGggdGhlc2UgYXNzZXJ0aW9u
cyBpcyB0aGF0IHRoZXJlIHdpbGwgYmUgc29tZSBUTEMgdGhhdCBnZXRzIHNldCBhcyB0aGUKKyAg
ICAvLyBjdXJyZW50IG9uZSBidXQgdGhlbiBuZXZlciByZXNldCwgYW5kIGluIHRoZSBtZWFudGlt
ZSB0aGUgZ2xvYmFsIG9iamVjdCB0aGF0IG93bnMgaXQgZ2V0cworICAgIC8vIGRlc3Ryb3llZC4K
KyAgICAvLworICAgIC8vIE5vdGUgdGhhdCBpZiB3ZSBkaWQgaG9sZCBvbnRvIHNvbWUgbWVtb3J5
IGFuZCB3ZSB3YW50ZWQgdG8gcmV0dXJuIGl0IHRoZW4gdGhpcyBjb3VsZCBiZSB3ZWlyZC4KKyAg
ICAvLyBXZSB3b3VsZCBwb3RlbnRpYWxseSBoYXZlIHRvIHN0b3BBbGxvY2F0aW5nKCkuIFRoYXQg
d291bGQgbWVhbiBoYXZpbmcgdG8gcmV0dXJuIGEgYmxvY2sgdG8gdGhlCisgICAgLy8gQmxvY2tE
aXJlY3RvcnkuIEl0J3Mgbm90IGNsZWFyIHRoYXQgdGhlIEJsb2NrRGlyZWN0b3J5IGlzIHByZXBh
cmVkIHRvIGhhbmRsZSB0aGF0IGR1cmluZworICAgIC8vIHN3ZWVwaW5nIGFub3RoZXIgYmxvY2ss
IGZvciBleGFtcGxlLgogICAgIGJvb2wgb2sgPSB0cnVlOwogICAgIGlmICghbV9mcmVlTGlzdC5h
bGxvY2F0aW9uV2lsbEZhaWwoKSkgewogICAgICAgICBkYXRhTG9nKCJGQVRBTDogIiwgUmF3UG9p
bnRlcih0aGlzKSwgIi0+fkxvY2FsQWxsb2NhdG9yIGhhcyBub24tZW1wdHkgZnJlZS1saXN0Llxu
Iik7CkBAIC0xNjQsNiArMTc3LDcgQEAgdm9pZCogTG9jYWxBbGxvY2F0b3I6OmFsbG9jYXRlU2xv
d0Nhc2UoRwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CisgICAgYmxvY2stPmFzc29jaWF0ZVdpdGhPcmlnaW4obV90bGMtPnNlY3VyaXR5T3JpZ2luVG9r
ZW4oKSk7CiAgICAgbV9kaXJlY3RvcnktPmFkZEJsb2NrKGJsb2NrKTsKICAgICByZXN1bHQgPSBh
bGxvY2F0ZUluKGJsb2NrKTsKICAgICBBU1NFUlQocmVzdWx0KTsKQEAgLTIwMSw3ICsyMTUsNyBA
QCB2b2lkKiBMb2NhbEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVXaXRob3V0CiAgICAgQVNTRVJUKG1f
ZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpOwogICAgIAogICAgIGZvciAoOzspIHsKLSAg
ICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSBtX2RpcmVjdG9yeS0+ZmluZEJsb2Nr
Rm9yQWxsb2NhdGlvbigpOworICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IG1f
ZGlyZWN0b3J5LT5maW5kQmxvY2tGb3JBbGxvY2F0aW9uKCp0aGlzKTsKICAgICAgICAgaWYgKCFi
bG9jaykKICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0yMjAsNiArMjM0LDcgQEAgdm9pZCogTG9j
YWxBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dAogICAgICAgICAgICAgLy8gYmVjYXVzZSB0
aGVyZSBpcyBhIHJlbW90ZSBjaGFuY2UgdGhhdCBhIGJsb2NrIG1heSBoYXZlIGJvdGggY2FuQWxs
b2NhdGVCdXROb3RFbXB0eQogICAgICAgICAgICAgLy8gYW5kIGVtcHR5IHNldCBhdCB0aGUgc2Ft
ZSB0aW1lLgogICAgICAgICAgICAgYmxvY2stPnJlbW92ZUZyb21EaXJlY3RvcnkoKTsKKyAgICAg
ICAgICAgIGJsb2NrLT5hc3NvY2lhdGVXaXRoT3JpZ2luKG1fdGxjLT5zZWN1cml0eU9yaWdpblRv
a2VuKCkpOwogICAgICAgICAgICAgbV9kaXJlY3RvcnktPmFkZEJsb2NrKGJsb2NrKTsKICAgICAg
ICAgICAgIHJldHVybiBhbGxvY2F0ZUluKGJsb2NrKTsKICAgICAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMjgxMDYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMywxMiArMzMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEJsb2Nr
RGlyZWN0b3J5OwogY2xhc3MgR0NEZWZlcnJhbENvbnRleHQ7CitjbGFzcyBUaHJlYWRMb2NhbENh
Y2hlOwogCiBjbGFzcyBMb2NhbEFsbG9jYXRvciA6IHB1YmxpYyBCYXNpY1Jhd1NlbnRpbmVsTm9k
ZTxMb2NhbEFsbG9jYXRvcj4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExvY2FsQWxsb2Nh
dG9yKTsKICAgICAKIHB1YmxpYzoKLSAgICBMb2NhbEFsbG9jYXRvcihCbG9ja0RpcmVjdG9yeSop
OworICAgIExvY2FsQWxsb2NhdG9yKFRocmVhZExvY2FsQ2FjaGUqLCBCbG9ja0RpcmVjdG9yeSop
OwogICAgIExvY2FsQWxsb2NhdG9yKExvY2FsQWxsb2NhdG9yJiYpOwogICAgIH5Mb2NhbEFsbG9j
YXRvcigpOwogICAgIApAQCAtNTMsOCArNTQsMTIgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZDZWxsU2l6ZSgpOwogICAgIAogICAgIGJvb2wgaXNGcmVlTGlzdGVkQ2Vs
bChjb25zdCB2b2lkKikgY29uc3Q7CisgICAgCisgICAgVGhyZWFkTG9jYWxDYWNoZSogdGxjKCkg
Y29uc3QgeyByZXR1cm4gbV90bGM7IH0KIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQmxv
Y2tEaXJlY3Rvcnk7CisgICAgCiAgICAgdm9pZCByZXNldCgpOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpOwogICAgIHZvaWQgZGlkQ29uc3VtZUZyZWVMaXN0KCk7
CkBAIC02MywxMSArNjgsMTYgQEAgcHJpdmF0ZToKICAgICB2b2lkKiBhbGxvY2F0ZUluKE1hcmtl
ZEJsb2NrOjpIYW5kbGUqKTsKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlv
bnNJZk5lZWRlZChHQ0RlZmVycmFsQ29udGV4dCopOwogCisgICAgVGhyZWFkTG9jYWxDYWNoZSog
bV90bGM7CiAgICAgQmxvY2tEaXJlY3RvcnkqIG1fZGlyZWN0b3J5OwogICAgIHVuc2lnbmVkIG1f
Y2VsbFNpemU7CiAgICAgRnJlZUxpc3QgbV9mcmVlTGlzdDsKICAgICBNYXJrZWRCbG9jazo6SGFu
ZGxlKiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKICAgICBNYXJrZWRCbG9jazo6SGFuZGxl
KiBtX2xhc3RBY3RpdmVCbG9jayB7IG51bGxwdHIgfTsKKyAgICAKKyAgICAvLyBBZnRlciB5b3Ug
ZG8gc29tZXRoaW5nIHRvIGEgYmxvY2sgYmFzZWQgb24gb25lIG9mIHRoZXNlIGN1cnNvcnMsIHlv
dSBjbGVhciB0aGUgYml0IGluIHRoZQorICAgIC8vIGNvcnJlc3BvbmRpbmcgYml0dmVjdG9yIGFu
ZCBsZWF2ZSB0aGUgY3Vyc29yIHdoZXJlIGl0IHdhcy4KKyAgICBzaXplX3QgbV9hbGxvY2F0aW9u
Q3Vyc29yIHsgMCB9OyAvLyBQb2ludHMgdG8gdGhlIG5leHQgYmxvY2sgdGhhdCBpcyBhIGNhbmRp
ZGF0ZSBmb3IgYWxsb2NhdGlvbi4KIH07CiAKIGlubGluZSBwdHJkaWZmX3QgTG9jYWxBbGxvY2F0
b3I6Om9mZnNldE9mRnJlZUxpc3QoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAkocmV2aXNpb24g
MjI4MTA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0Nv
bnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw5IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCIKIAorI2lu
Y2x1ZGUgIkdDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorCiBuYW1lc3BhY2UgSlNDIHsKIAogTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6Ok1hcmtT
dGFja01lcmdpbmdDb25zdHJhaW50KEhlYXAmIGhlYXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmgJKHJl
dmlzaW9uIDIyODEwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01l
cmdpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDkgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEhlYXA7CitjbGFzcyBTbG90VmlzaXRvcjsKKwogY2xhc3Mg
TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQgOiBwdWJsaWMgTWFya2luZ0NvbnN0cmFpbnQgewog
cHVibGljOgogICAgIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50KEhlYXAmKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDIyODEw
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDg4LDYgKzQ4OCwxNSBAQCBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6Omlz
RnJlZUxpc3RlZENlCiAgICAgcmV0dXJuIG1fZGlyZWN0b3J5LT5pc0ZyZWVMaXN0ZWRDZWxsKHRh
cmdldCk7CiB9CiAKK3ZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6YXNzb2NpYXRlV2l0aE9yaWdp
bihTZWN1cml0eU9yaWdpblRva2VuIHNlY3VyaXR5T3JpZ2luVG9rZW4pCit7CisgICAgaWYgKG1f
c2VjdXJpdHlPcmlnaW5Ub2tlbiA9PSBzZWN1cml0eU9yaWdpblRva2VuKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgbWVtc2V0KCZibG9jaygpLCAwLCBlbmRBdG9tICogYXRvbVNpemUpOwor
ICAgIG1fc2VjdXJpdHlPcmlnaW5Ub2tlbiA9IHNlY3VyaXR5T3JpZ2luVG9rZW47Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjI4MTA2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiAr
MjUsNyBAQAogI2luY2x1ZGUgIkRlc3RydWN0aW9uTW9kZS5oIgogI2luY2x1ZGUgIkhlYXBDZWxs
LmgiCiAjaW5jbHVkZSAiSXRlcmF0aW9uU3RhdHVzLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW5Ub2tlbi5oIgogI2luY2x1ZGUgIldlYWtTZXQuaCIKICNpbmNsdWRlIDx3dGYvQXRvbWljcy5o
PgogI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KQEAgLTE5NCw2ICsxOTUsOSBAQCBwdWJsaWM6CiAg
ICAgICAgIAogICAgICAgICB2b2lkIGR1bXBTdGF0ZShQcmludFN0cmVhbSYpOwogICAgICAgICAK
KyAgICAgICAgdm9pZCBhc3NvY2lhdGVXaXRoT3JpZ2luKFNlY3VyaXR5T3JpZ2luVG9rZW4pOwor
ICAgICAgICBTZWN1cml0eU9yaWdpblRva2VuIHNlY3VyaXR5T3JpZ2luVG9rZW4oKSBjb25zdCB7
IHJldHVybiBtX3NlY3VyaXR5T3JpZ2luVG9rZW47IH0KKyAgICAgICAgCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgSGFuZGxlKEhlYXAmLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiwgdm9pZCopOwog
ICAgICAgICAKQEAgLTIyOSw2ICsyMzMsOCBAQCBwdWJsaWM6CiAgICAgICAgIFdlYWtTZXQgbV93
ZWFrU2V0OwogICAgICAgICAKICAgICAgICAgTWFya2VkQmxvY2sqIG1fYmxvY2sgeyBudWxscHRy
IH07CisgICAgICAgIAorICAgICAgICBTZWN1cml0eU9yaWdpblRva2VuIG1fc2VjdXJpdHlPcmln
aW5Ub2tlbiB7IDAgfTsKICAgICB9OwogCiBwcml2YXRlOiAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1NlY3VyaXR5T3JpZ2luVG9rZW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NlY3VyaXR5T3JpZ2luVG9rZW4uY3BwCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NlY3VyaXR5T3JpZ2luVG9rZW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luVG9rZW4uaCIKKworI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCitTZWN1cml0eU9yaWdpblRva2VuIHVuaXF1ZVNlY3VyaXR5T3JpZ2lu
VG9rZW4oKQoreworICAgIHN0YXRpYyBTZWN1cml0eU9yaWdpblRva2VuIGNvdW50ZXI7CisgICAg
cmV0dXJuIFdURjo6YXRvbWljRXhjaGFuZ2VBZGQoJmNvdW50ZXIsIDEpICsgMTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NlY3Vy
aXR5T3JpZ2luVG9rZW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TZWN1cml0eU9yaWdpblRva2VuLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2VjdXJpdHlPcmlnaW5Ub2tlbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIHVpbnQ2NF90IFNlY3Vy
aXR5T3JpZ2luVG9rZW47CisKK0pTX0VYUE9SVF9QUklWQVRFIFNlY3VyaXR5T3JpZ2luVG9rZW4g
dW5pcXVlU2VjdXJpdHlPcmlnaW5Ub2tlbigpOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5jcHAJ
KHJldmlzaW9uIDIyODEwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExv
Y2FsQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMyArMzIsMTQgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLVJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBUaHJlYWRMb2NhbENhY2hlOjpj
cmVhdGUoSGVhcCYgaGVhcCkKK1JlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBUaHJlYWRMb2NhbENh
Y2hlOjpjcmVhdGUoSGVhcCYgaGVhcCwgU2VjdXJpdHlPcmlnaW5Ub2tlbiBzZWN1cml0eU9yaWdp
blRva2VuKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGhyZWFkTG9jYWxDYWNoZShoZWFw
KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUaHJlYWRMb2NhbENhY2hlKGhlYXAsIHNlY3Vy
aXR5T3JpZ2luVG9rZW4pKTsKIH0KIAotVGhyZWFkTG9jYWxDYWNoZTo6VGhyZWFkTG9jYWxDYWNo
ZShIZWFwJiBoZWFwKQorVGhyZWFkTG9jYWxDYWNoZTo6VGhyZWFkTG9jYWxDYWNoZShIZWFwJiBo
ZWFwLCBTZWN1cml0eU9yaWdpblRva2VuIHNlY3VyaXR5T3JpZ2luVG9rZW4pCiAgICAgOiBtX2hl
YXAoaGVhcCkKKyAgICAsIG1fc2VjdXJpdHlPcmlnaW5Ub2tlbihzZWN1cml0eU9yaWdpblRva2Vu
KQogewogICAgIG1fZGF0YSA9IGFsbG9jYXRlRGF0YSgpOwogfQpAQCAtNTksNyArNjAsNyBAQCBU
aHJlYWRMb2NhbENhY2hlOjpEYXRhKiBUaHJlYWRMb2NhbENhY2hlCiAgICAgZm9yIChzaXplX3Qg
b2Zmc2V0ID0gMDsgb2Zmc2V0IDwgb2xkU2l6ZTsgb2Zmc2V0ICs9IHNpemVvZihMb2NhbEFsbG9j
YXRvcikpCiAgICAgICAgIG5ldyAoJmFsbG9jYXRvcigqcmVzdWx0LCBvZmZzZXQpKSBMb2NhbEFs
bG9jYXRvcihXVEZNb3ZlKGFsbG9jYXRvcigqbV9kYXRhLCBvZmZzZXQpKSk7CiAgICAgZm9yIChz
aXplX3Qgb2Zmc2V0ID0gb2xkU2l6ZTsgb2Zmc2V0IDwgbGF5b3V0LnNpemU7IG9mZnNldCArPSBz
aXplb2YoTG9jYWxBbGxvY2F0b3IpKQotICAgICAgICBuZXcgKCZhbGxvY2F0b3IoKnJlc3VsdCwg
b2Zmc2V0KSkgTG9jYWxBbGxvY2F0b3IobGF5b3V0LmRpcmVjdG9yaWVzW29mZnNldCAvIHNpemVv
ZihMb2NhbEFsbG9jYXRvcildKTsKKyAgICAgICAgbmV3ICgmYWxsb2NhdG9yKCpyZXN1bHQsIG9m
ZnNldCkpIExvY2FsQWxsb2NhdG9yKHRoaXMsIGxheW91dC5kaXJlY3Rvcmllc1tvZmZzZXQgLyBz
aXplb2YoTG9jYWxBbGxvY2F0b3IpXSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNzAs
NyArNzEsNyBAQCB2b2lkIFRocmVhZExvY2FsQ2FjaGU6OmRlc3Ryb3lEYXRhKERhdGEqCiAgICAg
ZmFzdEZyZWUoZGF0YSk7CiB9CiAKLXZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFsbFNsb3co
Vk0mIHZtKQordm9pZCBUaHJlYWRMb2NhbENhY2hlOjppbnN0YWxsU2xvdyhWTSYgdm0sIFJlZlB0
cjxUaHJlYWRMb2NhbENhY2hlPiogcHJldmlvdXMpCiB7CiAjaWYgVVNFKEZBU1RfVExTX0ZPUl9U
TEMpCiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwpAQCAtODMsOCArODQsMTMg
QEAgdm9pZCBUaHJlYWRMb2NhbENhY2hlOjppbnN0YWxsU2xvdyhWTSYgdgogICAgIAogICAgIHJl
ZigpOwogICAgIAotICAgIGlmIChSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gb2xkQ2FjaGUgPSBn
ZXQodm0pKQotICAgICAgICBvbGRDYWNoZS0+ZGVyZWYoKTsKKyAgICBpZiAoVGhyZWFkTG9jYWxD
YWNoZTo6RGF0YSogb2xkQ2FjaGVEYXRhID0gZ2V0SW1wbCh2bSkpIHsKKyAgICAgICAgVGhyZWFk
TG9jYWxDYWNoZSogb2xkQ2FjaGUgPSBvbGRDYWNoZURhdGEtPmNhY2hlOworICAgICAgICBpZiAo
cHJldmlvdXMpCisgICAgICAgICAgICAqcHJldmlvdXMgPSBhZG9wdFJlZihvbGRDYWNoZSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9sZENhY2hlLT5kZXJlZigpOworICAgIH0KICAgICAK
ICAgICBpbnN0YWxsRGF0YSh2bSwgbV9kYXRhKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmgJKHJldmlzaW9uIDIyODEwNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjUsOSArMjUsMTMgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBbGxvY2F0
aW9uRmFpbHVyZU1vZGUuaCIKKyNpbmNsdWRlICJMb2NhbEFsbG9jYXRvci5oIgorI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luVG9rZW4uaCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2lu
Y2x1ZGUgPHd0Zi9GYXN0VExTLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVk
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzks
OSArNDMsOSBAQCBjbGFzcyBUaHJlYWRMb2NhbENhY2hlIDogcHVibGljIFRocmVhZFNhCiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgCiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0
cjxUaHJlYWRMb2NhbENhY2hlPiBjcmVhdGUoSGVhcCYpOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gY3JlYXRlKEhlYXAmLCBTZWN1cml0eU9y
aWdpblRva2VuID0gdW5pcXVlU2VjdXJpdHlPcmlnaW5Ub2tlbigpKTsKICAgICAKLSAgICBKU19F
WFBPUlRfUFJJVkFURSB+VGhyZWFkTG9jYWxDYWNoZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZpcnR1YWwgflRocmVhZExvY2FsQ2FjaGUoKTsKIAogICAgIHN0YXRpYyBSZWZQdHI8VGhyZWFk
TG9jYWxDYWNoZT4gZ2V0KFZNJik7CiAgICAgCkBAIC00OSw3ICs1Myw3IEBAIHB1YmxpYzoKICAg
ICAvLyBvcHRpbWl6aW5nIGZvciB0aGUgY2FzZSB0aGF0IHlvdSdyZSBqdXN0IGluc3RhbGxpbmcg
dGhlIGNhY2hlIHRoYXQgaXMgYWxyZWFkeSBpbnN0YWxsZWQuIFRoaXMKICAgICAvLyBhc3N1bWVz
IGEgcmVsYXRpdmVseSBzbWFsbCBudW1iZXIgb2YgY2FjaGVzIG9yIGxvdyBjaGFuY2Ugb2YgYWN0
dWFsIGNvbnRleHQgc3dpdGNoIGNvbWJpbmVkCiAgICAgLy8gd2l0aCBwb3NzaWJseSBoaWdoIHJh
dGUgb2YgIkkgbWF5IGhhdmUgY29udGV4dCBzd2l0Y2hlZCIgc2l0ZXMgdGhhdCBjYWxsIHRoaXMg
b3V0IG9mIHBhcmFub2lhLgotICAgIHZvaWQgaW5zdGFsbChWTSYpOworICAgIHZvaWQgaW5zdGFs
bChWTSYsIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiogPSBudWxscHRyKTsKICAgICAKICAgICBz
dGF0aWMgTG9jYWxBbGxvY2F0b3ImIGFsbG9jYXRvcihWTSYsIHNpemVfdCBvZmZzZXQpOwogICAg
IApAQCAtNTksMTEgKzYzLDE0IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mU2l6ZUluRGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihEYXRhLCBzaXplKTsgfQog
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGaXJzdEFsbG9jYXRvckluRGF0YSgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihEYXRhLCBhbGxvY2F0b3IpOyB9CiAgICAgCisgICAgU2VjdXJp
dHlPcmlnaW5Ub2tlbiBzZWN1cml0eU9yaWdpblRva2VuKCkgY29uc3QgeyByZXR1cm4gbV9zZWN1
cml0eU9yaWdpblRva2VuOyB9CisKK3Byb3RlY3RlZDogICAgCisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgVGhyZWFkTG9jYWxDYWNoZShIZWFwJiwgU2VjdXJpdHlPcmlnaW5Ub2tlbik7CisgICAgCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBWTTsKICAgICAKLSAgICBUaHJlYWRMb2NhbENhY2hl
KEhlYXAmKTsKLSAgICAKICAgICBzdHJ1Y3QgRGF0YSB7CiAgICAgICAgIHNpemVfdCBzaXplOwog
ICAgICAgICBUaHJlYWRMb2NhbENhY2hlKiBjYWNoZTsKQEAgLTc2LDcgKzgzLDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGRlc3Ryb3lEYXRhKERhdGEqKTsKICAgICBzdGF0aWMgTG9jYWxBbGxvY2F0
b3ImIGFsbG9jYXRvcihEYXRhJiBkYXRhLCBzaXplX3Qgb2Zmc2V0KTsKIAotICAgIHZvaWQgaW5z
dGFsbFNsb3coVk0mKTsKKyAgICB2b2lkIGluc3RhbGxTbG93KFZNJiwgUmVmUHRyPFRocmVhZExv
Y2FsQ2FjaGU+Kik7CiAgICAgc3RhdGljIHZvaWQgaW5zdGFsbERhdGEoVk0mLCBEYXRhKik7CiAg
ICAgCiAgICAgTG9jYWxBbGxvY2F0b3ImIGFsbG9jYXRvclNsb3coVk0mLCBzaXplX3Qgb2Zmc2V0
KTsKQEAgLTkxLDYgKzk4LDggQEAgcHJpdmF0ZToKICAgICAvLyBpdCdzIGNvcnJlY3QgZm9yIGlt
bW9ydGFsIGNhY2hlcy4KICAgICBIZWFwJiBtX2hlYXA7CiAgICAgRGF0YSogbV9kYXRhIHsgbnVs
bHB0ciB9OworICAgIAorICAgIFNlY3VyaXR5T3JpZ2luVG9rZW4gbV9zZWN1cml0eU9yaWdpblRv
a2VuOwogCiAjaWYgVVNFKEZBU1RfVExTX0ZPUl9UTEMpCiAgICAgc3RhdGljIGNvbnN0IHB0aHJl
YWRfa2V5X3QgdGxzS2V5ID0gV1RGX0dDX1RMQ19LRVk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgJKHJldmlzaW9u
IDIyODEwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZS5oIgorI2luY2x1ZGUgIlZNLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewogCkBAIC00NywxMSArNDgsMTQgQEAgaW5saW5lIFJlZlB0cjxUaHJlYWRMb2Nh
bENhY2hlPiBUaHJlYWRMbwogICAgIHJldHVybiBudWxscHRyOwogfQogCi1pbmxpbmUgdm9pZCBU
aHJlYWRMb2NhbENhY2hlOjppbnN0YWxsKFZNJiB2bSkKK2lubGluZSB2b2lkIFRocmVhZExvY2Fs
Q2FjaGU6Omluc3RhbGwoVk0mIHZtLCBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4qIHByZXZpb3Vz
KQogewotICAgIGlmIChnZXRJbXBsKHZtKSA9PSBtX2RhdGEpCisgICAgaWYgKGdldEltcGwodm0p
ID09IG1fZGF0YSkgeworICAgICAgICBpZiAocHJldmlvdXMpCisgICAgICAgICAgICAqcHJldmlv
dXMgPSBudWxscHRyOwogICAgICAgICByZXR1cm47Ci0gICAgaW5zdGFsbFNsb3codm0pOworICAg
IH0KKyAgICBpbnN0YWxsU2xvdyh2bSwgcHJldmlvdXMpOwogfQogCiBpbmxpbmUgTG9jYWxBbGxv
Y2F0b3ImIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRvcihWTSYgdm0sIHNpemVfdCBvZmZzZXQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmgJKHJldmlzaW9uIDIyODEwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5MSw3ICs0OTEsNyBAQCBwdWJsaWM6
CiAgICAgY29uc3QgUnVudGltZUZsYWdzJiBydW50aW1lRmxhZ3MoKSBjb25zdCB7IHJldHVybiBt
X3J1bnRpbWVGbGFnczsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgZXhw
bGljaXQgSlNHbG9iYWxPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBHbG9iYWxPYmplY3RN
ZXRob2RUYWJsZSogPSAwLCBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gPSBudWxscHRyKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBleHBsaWNpdCBKU0dsb2JhbE9iamVjdChWTSYsIFN0cnVjdHVy
ZSosIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiA9IG51bGxwdHIsIFJlZlB0cjxUaHJl
YWRMb2NhbENhY2hlPiA9IG51bGxwdHIpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTUVudHJ5U2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNRW50cnlTY29wZS5jcHAJKHJldmlzaW9uIDIyODEwNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDcgKzQxLDcgQEAgVk1FbnRyeVNjb3BlOjpWTUVudHJ5U2NvcGUoVk0mIHZtLCBKU0dsbwogICAg
IDogbV92bSh2bSkKICAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKIHsKLSAgICBn
bG9iYWxPYmplY3QtPnRocmVhZExvY2FsQ2FjaGUoKS5pbnN0YWxsKHZtKTsKKyAgICBnbG9iYWxP
YmplY3QtPnRocmVhZExvY2FsQ2FjaGUoKS5pbnN0YWxsKHZtLCAmbV9wcmV2aW91c1RMQyk7CiAg
ICAgQVNTRVJUKCFEaXNhbGxvd1ZNUmVlbnRyeTo6aXNJbkVmZmVjdE9uQ3VycmVudFRocmVhZCgp
KTsKICAgICBBU1NFUlQoVGhyZWFkOjpjdXJyZW50KCkuc3RhY2soKS5pc0dyb3dpbmdEb3dud2Fy
ZCgpKTsKICAgICBpZiAoIXZtLmVudHJ5U2NvcGUpIHsKQEAgLTcxLDExICs3MSwxNCBAQCB2b2lk
IFZNRW50cnlTY29wZTo6YWRkRGlkUG9wTGlzdGVuZXIoc3RkCiAKIFZNRW50cnlTY29wZTo6flZN
RW50cnlTY29wZSgpCiB7CisgICAgaWYgKG1fcHJldmlvdXNUTEMpCisgICAgICAgIG1fcHJldmlv
dXNUTEMtPmluc3RhbGwobV92bSk7CisgICAgCiAgICAgaWYgKG1fdm0uZW50cnlTY29wZSAhPSB0
aGlzKQogICAgICAgICByZXR1cm47CiAKICAgICBUcmFjZVBvaW50KFZNRW50cnlTY29wZUVuZCk7
Ci0KKyAgICAKICAgICBpZiAobV92bS53YXRjaGRvZygpKQogICAgICAgICBtX3ZtLndhdGNoZG9n
KCktPmV4aXRlZFZNKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
RW50cnlTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNRW50cnlTY29wZS5oCShyZXZpc2lvbiAyMjgxMDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTUVudHJ5U2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBA
QAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTR2xvYmFsT2JqZWN0OworY2xhc3MgVGhyZWFk
TG9jYWxDYWNoZTsKIGNsYXNzIFZNOwogCiBjbGFzcyBWTUVudHJ5U2NvcGUgewpAQCAtNDcsNiAr
NDgsNyBAQCBwcml2YXRlOgogICAgIFZNJiBtX3ZtOwogICAgIEpTR2xvYmFsT2JqZWN0KiBtX2ds
b2JhbE9iamVjdDsKICAgICBWZWN0b3I8c3RkOjpmdW5jdGlvbjx2b2lkICgpPj4gbV9kaWRQb3BM
aXN0ZW5lcnM7CisgICAgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IG1fcHJldmlvdXNUTEM7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyODEwNikK
KysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEx
NyBAQAorMjAxOC0wMi0wNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAg
ICAgIEdsb2JhbCBvYmplY3RzIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBUTENzIHRvIGFsbG9jYXRl
IGZyb20gZGlmZmVyZW50IGJsb2NrcyBmcm9tIGVhY2ggb3RoZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjIyNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIG5vIGNo
YW5nZSBpbiBiZWhhdmlvci4KKyAgICAgICAgCisgICAgICAgIEFkb3B0IEpTQyBUTEMgQVBJIHRv
IHB1dCBkaXN0YW5jZSBiZXR3ZWVuIG9iamVjdHMgZnJvbSBkaWZmZXJlbnQgc2VjdXJpdHkgb3Jp
Z2lucy4gV2ViQ29yZSBoYXMKKyAgICAgICAgYSBzdWJjbGFzcyBvZiBUaHJlYWRMb2NhbENhY2hl
IHRoYXQgc3VwcG9ydHMgaGFzaC1jb25zaW5nIGJhc2VkIG9uIHRoZSByZWxldmFudCBvcmlnaW4g
ZGF0YSwKKyAgICAgICAgd2hpY2ggd2UgZW5jYXBzdWxhdGUgd2l0aCBUaHJlYWRMb2NhbENhY2hl
T3JpZ2luS2V5LiBJdCdzIERvY3VtZW50J3Mgam9iIHRvIGluaXRpYXRlIHRoZSBoYXNoCisgICAg
ICAgIGNvbnNpbmcuCisgICAgICAgIAorICAgICAgICBXb3JrZXJzIGRvbid0IG9wdCBpbnRvIHRo
aXMuIFRoZXkganVzdCBnZXQgdGhlIFZNJ3MgZGVmYXVsdCBUTEMgYWxsIHRoZSB0aW1lLgorCisg
ICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmg6IEFkZGVk
LgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6SlNET01HbG9iYWxPYmpl
Y3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0Lmg6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
RE9NV2luZG93QmFzZTo6SlNET01XaW5kb3dCYXNlKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmluaXRTZWN1cml0eUNvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnRocmVhZExvY2FsQ2FjaGUpOgorICAgICAgICAq
IGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAqIHBhZ2UvT3JpZ2luVGhyZWFkTG9jYWxDYWNoZS5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6dGhyZWFkTG9jYWxDYWNoZU1hcCk6CisgICAg
ICAgIChXZWJDb3JlOjpPcmlnaW5UaHJlYWRMb2NhbENhY2hlOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6T3JpZ2luVGhyZWFkTG9jYWxDYWNoZTo6fk9yaWdpblRocmVhZExvY2FsQ2FjaGUp
OgorICAgICAgICAoV2ViQ29yZTo6T3JpZ2luVGhyZWFkTG9jYWxDYWNoZTo6T3JpZ2luVGhyZWFk
TG9jYWxDYWNoZSk6CisgICAgICAgICogcGFnZS9PcmlnaW5UaHJlYWRMb2NhbENhY2hlLmg6IEFk
ZGVkLgorICAgICAgICAqIHBhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW46OnBhc3Nlc0ZpbGVDaGVjayBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbjo6c2V0RW5mb3JjZXNGaWxlUGF0aFNlcGFyYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OnRvU3RyaW5nIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjplbmZvcmNlRmlsZVBhdGhTZXBhcmF0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5T3JpZ2luLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbjo6ZW5mb3JjZXNGaWxlUGF0aFNlcGFyYXRpb24gY29uc3QpOgorICAg
ICAgICAqIHBhZ2UvVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlRocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXk6OlRocmVhZExvY2FsQ2FjaGVPcmln
aW5LZXkpOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleTo6b3Bl
cmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRMb2NhbENhY2hlT3JpZ2lu
S2V5OjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZExvY2FsQ2Fj
aGVPcmlnaW5LZXk6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGhy
ZWFkTG9jYWxDYWNoZU9yaWdpbktleTo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6VGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleTo6aGFzaCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5SGFzaDo6aGFzaCk6
CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5SGFzaDo6ZXF1YWwp
OgorCisyMDE4LTAxLTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAg
ICAgR2xvYmFsIG9iamVjdHMgc2hvdWxkIGJlIGFibGUgdG8gdXNlIFRMQ3MgdG8gYWxsb2NhdGUg
ZnJvbSBkaWZmZXJlbnQgYmxvY2tzIGZyb20gZWFjaCBvdGhlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgyMjI3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgQW5keSBFc3Rlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBubyBjaGFuZ2Ug
aW4gYmVoYXZpb3IuCisgICAgICAgIAorICAgICAgICBBZG9wdCBKU0MgVExDIEFQSSB0byBwdXQg
ZGlzdGFuY2UgYmV0d2VlbiBvYmplY3RzIGZyb20gZGlmZmVyZW50IHNlY3VyaXR5IG9yaWdpbi4K
KworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5oOiBB
ZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6SlNET01HbG9iYWxPYmplY3QpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNET01XaW5kb3dCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93
QmFzZTo6SlNET01XaW5kb3dCYXNlKToKKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5T3JpZ2luLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjp0aHJlYWRMb2NhbENhY2hlKToK
KyAgICAgICAgKiBwYWdlL1NlY3VyaXR5T3JpZ2luLmg6CisKKzIwMTgtMDEtMzEgIEZpbGlwIFBp
emxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBHbG9iYWwgb2JqZWN0cyBzaG91bGQg
YmUgYWJsZSB0byB1c2UgVExDcyB0byBhbGxvY2F0ZSBmcm9tIGRpZmZlcmVudCBibG9ja3MgZnJv
bSBlYWNoIG90aGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xODIyMjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBubyBuZXcgYmVoYXZpb3IuCisgICAgICAgIAorICAg
ICAgICBBZG9wdCBKU0MgVExDIEFQSSB0byBwdXQgZGlzdGFuY2UgYmV0d2VlbiBvYmplY3RzIGZy
b20gZGlmZmVyZW50IHNlY3VyaXR5IG9yaWdpbnMuIFdlYkNvcmUgaGFzCisgICAgICAgIGEgc3Vi
Y2xhc3Mgb2YgVGhyZWFkTG9jYWxDYWNoZSB0aGF0IHN1cHBvcnRzIGhhc2gtY29uc2luZyBiYXNl
ZCBvbiB0aGUgcmVsZXZhbnQgb3JpZ2luIGRhdGEsCisgICAgICAgIHdoaWNoIHdlIGVuY2Fwc3Vs
YXRlIHdpdGggVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleS4KKyAgICAgICAgCisgICAgICAgIFdv
cmtlcnMgZG9uJ3Qgb3B0IGludG8gdGhpcy4gVGhleSBqdXN0IGdldCB0aGUgVk0ncyBkZWZhdWx0
IFRMQyBhbGwgdGhlIHRpbWUuCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9oZWFwL1Ro
cmVhZExvY2FsQ2FjaGUuaDogQWRkZWQuCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFs
T2JqZWN0OjpKU0RPTUdsb2JhbE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01H
bG9iYWxPYmplY3QuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpKU0RPTVdpbmRvd0Jhc2UpOgor
ICAgICAgICAqIHBhZ2UvT3JpZ2luVGhyZWFkTG9jYWxDYWNoZS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6dGhyZWFkTG9jYWxDYWNoZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpPcmln
aW5UaHJlYWRMb2NhbENhY2hlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6T3JpZ2luVGhy
ZWFkTG9jYWxDYWNoZTo6fk9yaWdpblRocmVhZExvY2FsQ2FjaGUpOgorICAgICAgICAoV2ViQ29y
ZTo6T3JpZ2luVGhyZWFkTG9jYWxDYWNoZTo6T3JpZ2luVGhyZWFkTG9jYWxDYWNoZSk6CisgICAg
ICAgICogcGFnZS9PcmlnaW5UaHJlYWRMb2NhbENhY2hlLmg6IEFkZGVkLgorICAgICAgICAqIHBh
Z2UvU2VjdXJpdHlPcmlnaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46
OnRocmVhZExvY2FsQ2FjaGUpOgorICAgICAgICAqIHBhZ2UvU2VjdXJpdHlPcmlnaW4uaDoKKyAg
ICAgICAgKiBwYWdlL1RocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXkuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5OjpUaHJlYWRMb2NhbENhY2hlT3Jp
Z2luS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXk6Om9w
ZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkTG9jYWxDYWNoZU9yaWdp
bktleTo6b3BlcmF0b3IhPSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRMb2NhbENh
Y2hlT3JpZ2luS2V5OjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRo
cmVhZExvY2FsQ2FjaGVPcmlnaW5LZXk6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlRocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXk6Omhhc2ggY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleUhhc2g6Omhhc2gp
OgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleUhhc2g6OmVxdWFs
KToKKwogMjAxOC0wMi0wNSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAg
ICAgICAgVXNlIGRvd25jYXN0IGluIGNyZWF0ZUxpbmtQcmVsb2FkUmVzb3VyY2VDbGllbnQKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMjgxMDYpCisrKyBTb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTMzNCw2ICsxMzM0LDcgQEAgcGFnZS9Nb3VzZUV2
ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmNwcAogcGFnZS9OYXZpZ2F0b3IuY3BwCiBwYWdlL05hdmln
YXRvckJhc2UuY3BwCiBwYWdlL09yaWdpbkFjY2Vzc0VudHJ5LmNwcAorcGFnZS9PcmlnaW5UaHJl
YWRMb2NhbENhY2hlLmNwcAogcGFnZS9QYWdlLmNwcAogcGFnZS9QYWdlQ29uZmlndXJhdGlvbi5j
cHAKIHBhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3
YXJkaW5nSGVhZGVycy9oZWFwL1RocmVhZExvY2FsQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1RocmVhZExvY2FsQ2FjaGUuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1RocmVh
ZExvY2FsQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIgQEAKKyNwcmFnbWEgb25j
ZQorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1RocmVhZExvY2FsQ2FjaGUuaD4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDIyODEwNikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzQyLDYgKzM0Miw4IEBACiAJCTBGNTgwQ0ZG
MEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckJhY2tpbmcuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTgwQ0ZCMEYxMkRFOUIwMDUxRDY4OSAv
KiBSZW5kZXJMYXllckJhY2tpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjU4MEZBMzE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNr
aW5nTGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNTgwRkExMTQ5NjkzOTEwMEZCNUJEOCAvKiBXZWJUaWxlZEJhY2tpbmdMYXllci5oICovOyB9
OwogCQkwRjU4MEZBRjE0OTgwMEQ0MDBGQjVCRDggLyogQW5pbWF0aW9uVXRpbGl0aWVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU4MEZBRTE0OTgw
MEQ0MDBGQjVCRDggLyogQW5pbWF0aW9uVXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY1QjQwODcyMDIxMkM0QzAwODBGOTEzIC8q
IFRocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUI0MDg1MjAyMTJDNDYwMDgwRjkxMyAvKiBUaHJlYWRMb2Nh
bENhY2hlT3JpZ2luS2V5LmggKi87IH07CisJCTBGNUI0MDhBMjAyMTJGNzcwMDgwRjkxMyAvKiBP
cmlnaW5UaHJlYWRMb2NhbENhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjVCNDA4ODIwMjEyRjczMDA4MEY5MTMgLyogT3JpZ2luVGhyZWFkTG9j
YWxDYWNoZS5oICovOyB9OwogCQkwRjVCN0E1NTEwRjY1RDdBMDAzNzYzMDIgLyogUmVuZGVyRW1i
ZWRkZWRPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNUI3QTUzMTBGNjVEN0EwMDM3NjMwMiAvKiBSZW5kZXJFbWJlZGRlZE9iamVjdC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNUUyMDA2
MThFNzcxRkMwMDNFQzNFNSAvKiBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUUyMDA1MThFNzcxRkMwMDNF
QzNFNSAvKiBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjYwNUFFRDE1Rjk0ODQ4MDA0REYwQzAgLyog
U2Nyb2xsaW5nQ29uc3RyYWludHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNjA1QUVCMTVGOTQ4NDgwMDRERjBDMCAvKiBTY3JvbGxpbmdDb25zdHJh
aW50cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC01NDk2LDYgKzU0OTgsOSBAQAogCQkwRjU4MEZBMTE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGls
ZWRCYWNraW5nTGF5ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVGls
ZWRCYWNraW5nTGF5ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1ODBGQTIx
NDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVyLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViVGlsZWRCYWNraW5nTGF5ZXIubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTgwRkFFMTQ5ODAwRDQwMEZCNUJEOCAvKiBBbmlt
YXRpb25VdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQW5pbWF0
aW9uVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNUI0MDg1MjAy
MTJDNDYwMDgwRjkxMyAvKiBUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1QjQwODgyMDIxMkY3MzAwODBGOTEzIC8qIE9yaWdp
blRocmVhZExvY2FsQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3Jp
Z2luVGhyZWFkTG9jYWxDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVC
NDA4OTIwMjEyRjczMDA4MEY5MTMgLyogT3JpZ2luVGhyZWFkTG9jYWxDYWNoZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcmlnaW5UaHJlYWRMb2NhbENhY2hlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1QjdBNTIxMEY2NUQ3QTAwMzc2MzAy
IC8qIFJlbmRlckVtYmVkZGVkT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlbmRlckVtYmVkZGVkT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY1QjdBNTMxMEY2NUQ3QTAwMzc2MzAyIC8qIFJlbmRlckVtYmVkZGVkT2JqZWN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckVtYmVkZGVkT2JqZWN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUUyMDA1MThFNzcxRkMwMDNFQzNF
NSAvKiBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC05OTM2LDggKzk5NDEsOCBAQAogCQk4QUY0RTU1NDExREM1QTM2MDAwRUQzREUg
LyogUGVyZm9ybWFuY2VOYXZpZ2F0aW9uLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQZXJm
b3JtYW5jZU5hdmlnYXRpb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4QUY0
RTU1OTExREM1QTYzMDAwRUQzREUgLyogUGVyZm9ybWFuY2VUaW1pbmcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUGVyZm9ybWFuY2VUaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOEFGNEU1NUExMURDNUE2MzAwMEVEM0RFIC8qIFBlcmZvcm1hbmNlVGlt
aW5nLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQZXJmb3JtYW5jZVRpbWluZy5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCThFMzNDRDkzMjAxQTI5QzEwMEUzOTA5MyAvKiBH
YXBMZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2FwTGVu
Z3RoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEJEMzdBNjcyMDFCQjM5QzAw
MTE3MzRBIC8qIFJlYWRhYmxlU3RyZWFtQ2h1bmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVhZGFibGVT
dHJlYW1DaHVuay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4RTMzQ0Q5MzIwMUEy
OUMxMDBFMzkwOTMgLyogR2FwTGVuZ3RoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEdhcExlbmd0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThF
NEM5NkQ4MUFENDQ4MzUwMDM2NUE1MCAvKiBKU0ZldGNoUmVzcG9uc2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGZXRjaFJlc3BvbnNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEU0Qzk2RDkxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTRmV0Y2hS
ZXNwb25zZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ZldGNoUmVzcG9u
c2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEVDNkM5NjEyMDFBMjUwMTAwRkJG
QTUzIC8qIEdhcExlbmd0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHYXBM
ZW5ndGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4ODI5LDYgKzE4ODM0LDgg
QEAKIAkJCQk1MTgyQzI0QjFGMzEzQUUwMDA1OUJBN0MgLyogTmF2aWdhdG9yU2VydmljZVdvcmtl
ci5pZGwgKi8sCiAJCQkJMDAxNDYyODgxMDNDRDFERTAwMEIyMERCIC8qIE9yaWdpbkFjY2Vzc0Vu
dHJ5LmNwcCAqLywKIAkJCQkwMDE0NjI4OTEwM0NEMURFMDAwQjIwREIgLyogT3JpZ2luQWNjZXNz
RW50cnkuaCAqLywKKwkJCQkwRjVCNDA4OTIwMjEyRjczMDA4MEY5MTMgLyogT3JpZ2luVGhyZWFk
TG9jYWxDYWNoZS5jcHAgKi8sCisJCQkJMEY1QjQwODgyMDIxMkY3MzAwODBGOTEzIC8qIE9yaWdp
blRocmVhZExvY2FsQ2FjaGUuaCAqLywKIAkJCQk2NUZFQTg2ODA5ODMzQURFMDBCRUQ0QUIgLyog
UGFnZS5jcHAgKi8sCiAJCQkJNjVBMjE0NjcwOTdBMzI5MTAwQjkwNTBBIC8qIFBhZ2UuaCAqLywK
IAkJCQlDRDVFNUI2MDFBMTVGMTU2MDAwQzYwOUUgLyogUGFnZUNvbmZpZ3VyYXRpb24uY3BwICov
LApAQCAtMTg5MTgsNiArMTg5MjUsNyBAQAogCQkJCTYyQzEyMTdCMTFBQjlFNzcwMDNDNDYyQyAv
KiBTdXNwZW5kYWJsZVRpbWVyLmggKi8sCiAJCQkJMkQ0Rjk2RjExQTFFQ0MyNDAwOThCRjg4IC8q
IFRleHRJbmRpY2F0b3IuY3BwICovLAogCQkJCTJENEY5NkYyMUExRUNDMjQwMDk4QkY4OCAvKiBU
ZXh0SW5kaWNhdG9yLmggKi8sCisJCQkJMEY1QjQwODUyMDIxMkM0NjAwODBGOTEzIC8qIFRocmVh
ZExvY2FsQ2FjaGVPcmlnaW5LZXkuaCAqLywKIAkJCQkxQUU3OUQ0MDE4OERCNjFGMDAyMjM5QzIg
LyogVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcCAqLywKIAkJCQkxQUU3OUQ0MTE4OERCNjFGMDAy
MjM5QzIgLyogVXNlckNvbnRlbnRDb250cm9sbGVyLmggKi8sCiAJCQkJN0MzRjAxQkYxQzhFNUFC
MTAwQUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlkZXIuY3BwICovLApAQCAtMjgwODMsNiArMjgw
OTEsNyBAQAogCQkJCTFBODVCMjExMEExQjI1ODcwMEQ4Qzg3QyAvKiBKU0hUTUxVTGlzdEVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTZFNEFCQ0Q1MTM4RUEwQjcwMDcxRDI5MSAvKiBKU0hU
TUxVbmtub3duRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0NjE0MTcwQ0Q2ODI2OTAw
RkFEQTc1IC8qIEpTSFRNTFZpZGVvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY1QjQw
ODcyMDIxMkM0QzAwODBGOTEzIC8qIFRocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTgxQkUyMEQzMTFGNEJDMzIwMDkxNURGQSAvKiBKU0lEQkN1cnNvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJN0MzRDhFRjAxRTBCMjE0MzAwMjNCMDg0IC8qIEpTSURCQ3Vyc29y
RGlyZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTg1QTY4MzExRDRGQjA4MDA0QzNFNEIg
LyogSlNJREJEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODI2Niw2ICsyODI3NSw3IEBA
CiAJCQkJMDc5NjlEQzIxN0QxNDE1MTAwN0ZGODQyIC8qIEpTUlRDU3RhdHNSZXBvcnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTVFMkM0MzZDMUJDRjA3MUUwMDAxRTJCQyAvKiBKU1JUQ1RyYWNrRXZl
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUMwMUMzMEMyNzREREQwMDlGNEVDOSAvKiBKU1Nj
cmVlbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY1QjQwOEEyMDIxMkY3NzAwODBGOTEzIC8qIE9y
aWdpblRocmVhZExvY2FsQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEQTE1RUNFMTJCMDNG
NjEwMDNBNTgzQSAvKiBKU1NjcmlwdFByb2Nlc3Nvck5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTgzNDQ3NkVGMURBNUJDNUUwMDJCNkVEMiAvKiBKU1Njcm9sbFRvT3B0aW9ucy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQ0VEMDZBRDExQzc3NzU0ODAwRkRGQUYxIC8qIEpTU2VjdXJpdHlQb2xpY3lW
aW9sYXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyMjgxMDYpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MTggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC01Niw4ICs1Niw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
aXNSZWFkYWJsZUIKIAogY29uc3QgQ2xhc3NJbmZvIEpTRE9NR2xvYmFsT2JqZWN0OjpzX2luZm8g
PSB7ICJET01HbG9iYWxPYmplY3QiLCAmSlNHbG9iYWxPYmplY3Q6OnNfaW5mbywgbnVsbHB0ciwg
bnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0RPTUdsb2JhbE9iamVjdCkgfTsKIAotSlNE
T01HbG9iYWxPYmplY3Q6OkpTRE9NR2xvYmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFJlZjxET01XcmFwcGVyV29ybGQ+JiYgd29ybGQsIGNvbnN0IEdsb2JhbE9iamVjdE1l
dGhvZFRhYmxlKiBnbG9iYWxPYmplY3RNZXRob2RUYWJsZSkKLSAgICA6IEpTR2xvYmFsT2JqZWN0
KHZtLCBzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQorSlNET01HbG9iYWxPYmpl
Y3Q6OkpTRE9NR2xvYmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZjxE
T01XcmFwcGVyV29ybGQ+JiYgd29ybGQsIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiBn
bG9iYWxPYmplY3RNZXRob2RUYWJsZSwgUmVmUHRyPEpTQzo6VGhyZWFkTG9jYWxDYWNoZT4gdGhy
ZWFkTG9jYWxDYWNoZSkKKyAgICA6IEpTR2xvYmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUsIGdsb2Jh
bE9iamVjdE1ldGhvZFRhYmxlLCBXVEZNb3ZlKHRocmVhZExvY2FsQ2FjaGUpKQogICAgICwgbV9j
dXJyZW50RXZlbnQoMCkKICAgICAsIG1fd29ybGQoV1RGTW92ZSh3b3JsZCkpCiAgICAgLCBtX3dv
cmxkSXNOb3JtYWwobV93b3JsZC0+aXNOb3JtYWwoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjI4MTA2KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIldlYkNvcmVKU0J1aWx0aW5JbnRlcm5h
bHMuaCIKICNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aGVhcC9Mb2Nr
RHVyaW5nTWFya2luZy5oPgorI2luY2x1ZGUgPGhlYXAvVGhyZWFkTG9jYWxDYWNoZS5oPgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4KICNpbmNsdWRlIDxydW50aW1lL1N0cnVj
dHVyZUlubGluZXMuaD4KIApAQCAtNTAsNyArNTEsNyBAQCBjbGFzcyBXRUJDT1JFX0VYUE9SVCBK
U0RPTUdsb2JhbE9iamVjdCA6CiBwcm90ZWN0ZWQ6CiAgICAgc3RydWN0IEpTRE9NR2xvYmFsT2Jq
ZWN0RGF0YTsKIAotICAgIEpTRE9NR2xvYmFsT2JqZWN0KEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVy
ZSosIFJlZjxET01XcmFwcGVyV29ybGQ+JiYsIGNvbnN0IEpTQzo6R2xvYmFsT2JqZWN0TWV0aG9k
VGFibGUqID0gMCk7CisgICAgSlNET01HbG9iYWxPYmplY3QoSlNDOjpWTSYsIEpTQzo6U3RydWN0
dXJlKiwgUmVmPERPTVdyYXBwZXJXb3JsZD4mJiwgY29uc3QgSlNDOjpHbG9iYWxPYmplY3RNZXRo
b2RUYWJsZSogPSBudWxscHRyLCBSZWZQdHI8SlNDOjpUaHJlYWRMb2NhbENhY2hlPiA9IG51bGxw
dHIpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0m
LCBKU0M6OkpTT2JqZWN0Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93QmFzZS5jcHAJKHJldmlzaW9uIDIyODEwNikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcg
Kzc5LDcgQEAgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgSlNET01XaW5kbwogfTsKIAog
SlNET01XaW5kb3dCYXNlOjpKU0RPTVdpbmRvd0Jhc2UoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgUmVmUHRyPERPTVdpbmRvdz4mJiB3aW5kb3csIEpTRE9NV2luZG93UHJveHkqIHByb3h5
KQotICAgIDogSlNET01HbG9iYWxPYmplY3Qodm0sIHN0cnVjdHVyZSwgcHJveHktPndvcmxkKCks
ICZzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQorICAgIDogSlNET01HbG9iYWxPYmplY3Qodm0s
IHN0cnVjdHVyZSwgcHJveHktPndvcmxkKCksICZzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlLCB3
aW5kb3ctPmRvY3VtZW50KCktPnRocmVhZExvY2FsQ2FjaGUoKSkKICAgICAsIG1fd2luZG93Q2xv
c2VXYXRjaHBvaW50cygod2luZG93ICYmIHdpbmRvdy0+ZnJhbWUoKSkgPyBJc1dhdGNoZWQgOiBJ
c0ludmFsaWRhdGVkKQogICAgICwgbV93cmFwcGVkKFdURk1vdmUod2luZG93KSkKICAgICAsIG1f
cHJveHkocHJveHkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDIyODEw
NikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMsNyArMyw3IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZp
c3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVy
QGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBA
d2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2Jp
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20v
KQogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDExLCAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCkBAIC0xMjYsMTEgKzEyNiwxMSBAQAogI2lu
Y2x1ZGUgIk5hdmlnYXRpb25EaXNhYmxlci5oIgogI2luY2x1ZGUgIk5hdmlnYXRpb25TY2hlZHVs
ZXIuaCIKICNpbmNsdWRlICJOZXN0aW5nTGV2ZWxJbmNyZW1lbnRlci5oIgotCiAjaW5jbHVkZSAi
Tm9kZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCiAjaW5jbHVkZSAiTm9k
ZVdpdGhJbmRleC5oIgogI2luY2x1ZGUgIk9yaWdpbkFjY2Vzc0VudHJ5LmgiCisjaW5jbHVkZSAi
T3JpZ2luVGhyZWFkTG9jYWxDYWNoZS5oIgogI2luY2x1ZGUgIk92ZXJmbG93RXZlbnQuaCIKICNp
bmNsdWRlICJQYWdlQ29uc29sZUNsaWVudC5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgpAQCAt
MTk1LDYgKzE5NSw3IEBACiAjaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKICNpbmNsdWRlICJT
dHlsZVRyZWVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCisjaW5j
bHVkZSAiVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleS5oIgogI2luY2x1ZGUgIlRleHRBdXRvU2l6
aW5nLmgiCiAjaW5jbHVkZSAiVGV4dEV2ZW50LmgiCiAjaW5jbHVkZSAiVGV4dE5vZGVUcmF2ZXJz
YWwuaCIKQEAgLTIxOCw2ICsyMTksNyBAQAogI2luY2x1ZGUgPGN0aW1lPgogI2luY2x1ZGUgPGlu
c3BlY3Rvci9Db25zb2xlTWVzc2FnZS5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHRDYWxs
U3RhY2suaD4KKyNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CiAjaW5jbHVkZSA8d3RmL0xhbmd1YWdlLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CkBAIC01NTQ4LDcgKzU1NTAsNyBAQCB2b2lkIERvY3VtZW50Ojppbml0U2VjdXJp
dHlDb250ZXh0KCkKICAgICAgICAgICAgIC8vIFNvbWUgY2xpZW50cyB3YW50IGxvY2FsIFVSTHMg
dG8gaGF2ZSBldmVuIHRpZ2h0ZXIgcmVzdHJpY3Rpb25zIGJ5IGRlZmF1bHQsIGFuZCBub3QgYmUg
YWJsZSB0byBhY2Nlc3Mgb3RoZXIgbG9jYWwgZmlsZXMuCiAgICAgICAgICAgICAvLyBGSVhNRSA4
MTU3ODogVGhlIG5hbWluZyBvZiB0aGlzIGlzIGNvbmZ1c2luZy4gRmlsZXMgd2l0aCByZXN0cmlj
dGVkIGFjY2VzcyB0byBvdGhlciBsb2NhbCBmaWxlcwogICAgICAgICAgICAgLy8gc3RpbGwgY2Fu
IGhhdmUgb3RoZXIgcHJpdmlsZWdlcyB0aGF0IGNhbiBiZSByZW1lbWJlcmVkLCB0aGVyZWJ5IG5v
dCBtYWtpbmcgdGhlbSB1bmlxdWUgb3JpZ2lucy4KLSAgICAgICAgICAgIHNlY3VyaXR5T3JpZ2lu
KCkuZW5mb3JjZUZpbGVQYXRoU2VwYXJhdGlvbigpOworICAgICAgICAgICAgc2VjdXJpdHlPcmln
aW4oKS5zZXRFbmZvcmNlc0ZpbGVQYXRoU2VwYXJhdGlvbih0cnVlKTsKICAgICAgICAgfQogICAg
IH0KICAgICBzZWN1cml0eU9yaWdpbigpLnNldFN0b3JhZ2VCbG9ja2luZ1BvbGljeShzZXR0aW5n
cygpLnN0b3JhZ2VCbG9ja2luZ1BvbGljeSgpKTsKQEAgLTc3NDAsNCArNzc0MiwxNiBAQCB2b2lk
IERvY3VtZW50OjpzZXRTZXJ2aWNlV29ya2VyQ29ubmVjdGlvCiB9CiAjZW5kaWYKIAorUmVmUHRy
PEpTQzo6VGhyZWFkTG9jYWxDYWNoZT4gRG9jdW1lbnQ6OnRocmVhZExvY2FsQ2FjaGUoKQorewor
ICAgIGlmICghbV90aHJlYWRMb2NhbENhY2hlKSB7CisgICAgICAgIFNlY3VyaXR5T3JpZ2luJiBv
cmlnaW4gPSBzZWN1cml0eU9yaWdpbigpOworICAgICAgICBpZiAob3JpZ2luLmlzVW5pcXVlKCkg
fHwgKG9yaWdpbi5pc0xvY2FsKCkgJiYgb3JpZ2luLmVuZm9yY2VzRmlsZVBhdGhTZXBhcmF0aW9u
KCkpKQorICAgICAgICAgICAgbV90aHJlYWRMb2NhbENhY2hlID0gSlNDOjpUaHJlYWRMb2NhbENh
Y2hlOjpjcmVhdGUoY29tbW9uVk0oKS5oZWFwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bV90aHJlYWRMb2NhbENhY2hlID0gT3JpZ2luVGhyZWFkTG9jYWxDYWNoZTo6Y3JlYXRlKFRocmVh
ZExvY2FsQ2FjaGVPcmlnaW5LZXkob3JpZ2luLmhvc3QoKSwgb3JpZ2luLnByb3RvY29sKCksIG9y
aWdpbi5wb3J0KCkpKTsKKyAgICB9CisgICAgcmV0dXJuIG1fdGhyZWFkTG9jYWxDYWNoZTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlz
aW9uIDIyODEwNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiVXNlckFjdGlvbkVsZW1lbnRTZXQuaCIK
ICNpbmNsdWRlICJWaWV3cG9ydEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlZpc2liaWxpdHlTdGF0
ZS5oIgorI2luY2x1ZGUgPGhlYXAvVGhyZWFkTG9jYWxDYWNoZS5oPgogI2luY2x1ZGUgPHBhbC9T
ZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgpAQCAtMTQxMSw2ICsxNDEyLDggQEAgcHVibGljOgogICAgIGJvb2wgaGFuZGxpbmdUb3Vj
aEV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9oYW5kbGluZ1RvdWNoRXZlbnQ7IH0KICNlbmRpZgog
CisgICAgUmVmUHRyPEpTQzo6VGhyZWFkTG9jYWxDYWNoZT4gdGhyZWFkTG9jYWxDYWNoZSgpOwor
CiBwcm90ZWN0ZWQ6CiAgICAgZW51bSBDb25zdHJ1Y3Rpb25GbGFncyB7IFN5bnRoZXNpemVkID0g
MSwgTm9uUmVuZGVyZWRQbGFjZWhvbGRlciA9IDEgPDwgMSB9OwogICAgIERvY3VtZW50KEZyYW1l
KiwgY29uc3QgVVJMJiwgdW5zaWduZWQgPSBEZWZhdWx0RG9jdW1lbnRDbGFzcywgdW5zaWduZWQg
Y29uc3RydWN0aW9uRmxhZ3MgPSAwKTsKQEAgLTE4OTUsNiArMTg5OCw4IEBAIHByaXZhdGU6CiAj
ZW5kaWYKIAogICAgIEhhc2hTZXQ8QXBwbGljYXRpb25TdGF0ZUNoYW5nZUxpc3RlbmVyKj4gbV9h
cHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXJzOworICAgIAorICAgIFJlZlB0cjxKU0M6OlRo
cmVhZExvY2FsQ2FjaGU+IG1fdGhyZWFkTG9jYWxDYWNoZTsKIH07CiAKIEVsZW1lbnQqIGV2ZW50
VGFyZ2V0RWxlbWVudEZvckRvY3VtZW50KERvY3VtZW50Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL09yaWdpblRocmVhZExvY2FsQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvT3JpZ2luVGhyZWFkTG9jYWxDYWNoZS5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9PcmlnaW5UaHJlYWRMb2NhbENhY2hlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJPcmlnaW5UaHJlYWRM
b2NhbENhY2hlLmgiCisKKyNpbmNsdWRlICJDb21tb25WTS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3R5cGVkZWYgSGFzaE1hcDxUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5LCBPcmlnaW5U
aHJlYWRMb2NhbENhY2hlKj4gVGhyZWFkTG9jYWxDYWNoZU1hcDsKKworc3RhdGljIFRocmVhZExv
Y2FsQ2FjaGVNYXAmIHRocmVhZExvY2FsQ2FjaGVNYXAoKQoreworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxUaHJlYWRMb2NhbENhY2hlTWFwPiBtYXA7CisgICAgcmV0dXJuIG1hcDsKK30KKwor
UmVmUHRyPE9yaWdpblRocmVhZExvY2FsQ2FjaGU+IE9yaWdpblRocmVhZExvY2FsQ2FjaGU6OmNy
ZWF0ZShjb25zdCBUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5JiBrZXkpCit7CisgICAgYXV0byBp
dGVyID0gdGhyZWFkTG9jYWxDYWNoZU1hcCgpLmZpbmQoa2V5KTsKKyAgICBpZiAoaXRlciAhPSB0
aHJlYWRMb2NhbENhY2hlTWFwKCkuZW5kKCkpCisgICAgICAgIHJldHVybiBpdGVyLT52YWx1ZTsK
KyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE9yaWdpblRocmVhZExvY2FsQ2FjaGUoa2V5
KSk7Cit9CisKK09yaWdpblRocmVhZExvY2FsQ2FjaGU6On5PcmlnaW5UaHJlYWRMb2NhbENhY2hl
KCkKK3sKKyAgICBib29sIHJlc3VsdCA9IHRocmVhZExvY2FsQ2FjaGVNYXAoKS5yZW1vdmUobV9r
ZXkpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7Cit9CisKK09yaWdpblRocmVhZExvY2Fs
Q2FjaGU6Ok9yaWdpblRocmVhZExvY2FsQ2FjaGUoY29uc3QgVGhyZWFkTG9jYWxDYWNoZU9yaWdp
bktleSYga2V5KQorICAgIDogVGhyZWFkTG9jYWxDYWNoZShjb21tb25WTSgpLmhlYXAsIEpTQzo6
dW5pcXVlU2VjdXJpdHlPcmlnaW5Ub2tlbigpKQorICAgICwgbV9rZXkoa2V5KQoreworICAgIGF1
dG8gcmVzdWx0ID0gdGhyZWFkTG9jYWxDYWNoZU1hcCgpLmFkZChrZXksIHRoaXMpOworICAgIFJF
TEVBU0VfQVNTRVJUKHJlc3VsdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9PcmlnaW5UaHJlYWRMb2NhbENhY2hlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9PcmlnaW5UaHJlYWRMb2NhbENhY2hlLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9PcmlnaW5UaHJlYWRMb2NhbENhY2hlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRocmVhZExv
Y2FsQ2FjaGVPcmlnaW5LZXkuaCIKKyNpbmNsdWRlIDxoZWFwL1RocmVhZExvY2FsQ2FjaGUuaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE9yaWdpblRocmVhZExvY2FsQ2FjaGUg
OiBwdWJsaWMgSlNDOjpUaHJlYWRMb2NhbENhY2hlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
UHRyPE9yaWdpblRocmVhZExvY2FsQ2FjaGU+IGNyZWF0ZShjb25zdCBUaHJlYWRMb2NhbENhY2hl
T3JpZ2luS2V5Jik7CisgICAgCisgICAgfk9yaWdpblRocmVhZExvY2FsQ2FjaGUoKSBvdmVycmlk
ZTsKKworcHJpdmF0ZToKKyAgICBPcmlnaW5UaHJlYWRMb2NhbENhY2hlKGNvbnN0IFRocmVhZExv
Y2FsQ2FjaGVPcmlnaW5LZXkmKTsKKyAgICAKKyAgICBUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5
IG1fa2V5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkocmV2aXNpb24gMjI4MTA2KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw3ICsx
ODAsNyBAQCBTZWN1cml0eU9yaWdpbjo6U2VjdXJpdHlPcmlnaW4oY29uc3QgU2VjCiAgICAgLCBt
X2RvbWFpbldhc1NldEluRE9NIHsgb3RoZXItPm1fZG9tYWluV2FzU2V0SW5ET00gfQogICAgICwg
bV9jYW5Mb2FkTG9jYWxSZXNvdXJjZXMgeyBvdGhlci0+bV9jYW5Mb2FkTG9jYWxSZXNvdXJjZXMg
fQogICAgICwgbV9zdG9yYWdlQmxvY2tpbmdQb2xpY3kgeyBvdGhlci0+bV9zdG9yYWdlQmxvY2tp
bmdQb2xpY3kgfQotICAgICwgbV9lbmZvcmNlRmlsZVBhdGhTZXBhcmF0aW9uIHsgb3RoZXItPm1f
ZW5mb3JjZUZpbGVQYXRoU2VwYXJhdGlvbiB9CisgICAgLCBtX2VuZm9yY2VzRmlsZVBhdGhTZXBh
cmF0aW9uIHsgb3RoZXItPm1fZW5mb3JjZXNGaWxlUGF0aFNlcGFyYXRpb24gfQogICAgICwgbV9u
ZWVkc1N0b3JhZ2VBY2Nlc3NGcm9tRmlsZVVSTHNRdWlyayB7IG90aGVyLT5tX25lZWRzU3RvcmFn
ZUFjY2Vzc0Zyb21GaWxlVVJMc1F1aXJrIH0KICAgICAsIG1faXNQb3RlbnRpYWxseVRydXN0d29y
dGh5IHsgb3RoZXItPm1faXNQb3RlbnRpYWxseVRydXN0d29ydGh5IH0KIHsKQEAgLTI4Myw3ICsy
ODMsNyBAQCBib29sIFNlY3VyaXR5T3JpZ2luOjpwYXNzZXNGaWxlQ2hlY2soY29uCiB7CiAgICAg
QVNTRVJUKGlzTG9jYWwoKSAmJiBvdGhlci5pc0xvY2FsKCkpOwogCi0gICAgcmV0dXJuICFtX2Vu
Zm9yY2VGaWxlUGF0aFNlcGFyYXRpb24gJiYgIW90aGVyLm1fZW5mb3JjZUZpbGVQYXRoU2VwYXJh
dGlvbjsKKyAgICByZXR1cm4gIW1fZW5mb3JjZXNGaWxlUGF0aFNlcGFyYXRpb24gJiYgIW90aGVy
Lm1fZW5mb3JjZXNGaWxlUGF0aFNlcGFyYXRpb247CiB9CiAKIGJvb2wgU2VjdXJpdHlPcmlnaW46
OmNhblJlcXVlc3QoY29uc3QgVVJMJiB1cmwpIGNvbnN0CkBAIC00NTMsMTAgKzQ1MywxMSBAQCBT
dHJpbmcgU2VjdXJpdHlPcmlnaW46OmRvbWFpbkZvckNhY2hlUGFyCiAgICAgcmV0dXJuIGVtcHR5
U3RyaW5nKCk7CiB9CiAKLXZvaWQgU2VjdXJpdHlPcmlnaW46OmVuZm9yY2VGaWxlUGF0aFNlcGFy
YXRpb24oKQordm9pZCBTZWN1cml0eU9yaWdpbjo6c2V0RW5mb3JjZXNGaWxlUGF0aFNlcGFyYXRp
b24oYm9vbCB2YWx1ZSkKIHsKICAgICBBU1NFUlQoaXNMb2NhbCgpKTsKLSAgICBtX2VuZm9yY2VG
aWxlUGF0aFNlcGFyYXRpb24gPSB0cnVlOworICAgIEFTU0VSVCh2YWx1ZSk7IC8vIEN1cnJlbnRs
eSB3ZSBvbmx5IHVzZSB0aGlzIG1ldGhvZCB0byBzZXQgdGhpcyB0byB0cnVlLgorICAgIG1fZW5m
b3JjZXNGaWxlUGF0aFNlcGFyYXRpb24gPSB2YWx1ZTsKIH0KIAogYm9vbCBTZWN1cml0eU9yaWdp
bjo6aXNMb2NhbCgpIGNvbnN0CkBAIC00NjgsNyArNDY5LDcgQEAgU3RyaW5nIFNlY3VyaXR5T3Jp
Z2luOjp0b1N0cmluZygpIGNvbnN0CiB7CiAgICAgaWYgKGlzVW5pcXVlKCkpCiAgICAgICAgIHJl
dHVybiBBU0NJSUxpdGVyYWwoIm51bGwiKTsKLSAgICBpZiAobV9wcm90b2NvbCA9PSAiZmlsZSIg
JiYgbV9lbmZvcmNlRmlsZVBhdGhTZXBhcmF0aW9uKQorICAgIGlmIChtX3Byb3RvY29sID09ICJm
aWxlIiAmJiBtX2VuZm9yY2VzRmlsZVBhdGhTZXBhcmF0aW9uKQogICAgICAgICByZXR1cm4gQVND
SUlMaXRlcmFsKCJudWxsIik7CiAgICAgcmV0dXJuIHRvUmF3U3RyaW5nKCk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5oCShyZXZpc2lvbiAyMjgxMDYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjUs
NyArMTY1LDggQEAgcHVibGljOgogICAgIC8vIE1hcmtzIGEgZmlsZTovLyBvcmlnaW4gYXMgYmVp
bmcgaW4gYSBkb21haW4gZGVmaW5lZCBieSBpdHMgcGF0aC4KICAgICAvLyBGSVhNRSA4MTU3ODog
VGhlIG5hbWluZyBvZiB0aGlzIGlzIGNvbmZ1c2luZy4gRmlsZXMgd2l0aCByZXN0cmljdGVkIGFj
Y2VzcyB0byBvdGhlciBsb2NhbCBmaWxlcwogICAgIC8vIHN0aWxsIGNhbiBoYXZlIG90aGVyIHBy
aXZpbGVnZXMgdGhhdCBjYW4gYmUgcmVtZW1iZXJlZCwgdGhlcmVieSBub3QgbWFraW5nIHRoZW0g
dW5pcXVlLgotICAgIHZvaWQgZW5mb3JjZUZpbGVQYXRoU2VwYXJhdGlvbigpOworICAgIHZvaWQg
c2V0RW5mb3JjZXNGaWxlUGF0aFNlcGFyYXRpb24oYm9vbCk7CisgICAgYm9vbCBlbmZvcmNlc0Zp
bGVQYXRoU2VwYXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5mb3JjZXNGaWxlUGF0aFNlcGFy
YXRpb247IH0KIAogICAgIC8vIENvbnZlcnQgdGhpcyBTZWN1cml0eU9yaWdpbiBpbnRvIGEgc3Ry
aW5nLiBUaGUgc3RyaW5nCiAgICAgLy8gcmVwcmVzZW50YXRpb24gb2YgYSBTZWN1cml0eU9yaWdp
biBpcyBzaW1pbGFyIHRvIGEgVVJMLCBleGNlcHQgaXQKQEAgLTIyOSw3ICsyMzAsNyBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9kb21haW5XYXNTZXRJbkRPTSB7IGZhbHNlIH07CiAgICAgYm9vbCBt
X2NhbkxvYWRMb2NhbFJlc291cmNlcyB7IGZhbHNlIH07CiAgICAgU3RvcmFnZUJsb2NraW5nUG9s
aWN5IG1fc3RvcmFnZUJsb2NraW5nUG9saWN5IHsgQWxsb3dBbGxTdG9yYWdlIH07Ci0gICAgYm9v
bCBtX2VuZm9yY2VGaWxlUGF0aFNlcGFyYXRpb24geyBmYWxzZSB9OworICAgIGJvb2wgbV9lbmZv
cmNlc0ZpbGVQYXRoU2VwYXJhdGlvbiB7IGZhbHNlIH07CiAgICAgYm9vbCBtX25lZWRzU3RvcmFn
ZUFjY2Vzc0Zyb21GaWxlVVJMc1F1aXJrIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNQb3RlbnRp
YWxseVRydXN0d29ydGh5IHsgZmFsc2UgfTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L1RocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1RocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXkuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1RocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXkuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRocmVhZExvY2FsQ2FjaGVPcmlnaW5L
ZXkgeworcHVibGljOgorICAgIFRocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXkoKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleShTdHJpbmcgaG9zdCwgU3Ry
aW5nIHByb3RvY29sLCBzdGQ6Om9wdGlvbmFsPHVpbnQxNl90PiBwb3J0KQorICAgICAgICA6IG1f
aG9zdChob3N0KQorICAgICAgICAsIG1fcHJvdG9jb2wocHJvdG9jb2wpCisgICAgICAgICwgbV9w
b3J0KHBvcnQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBUaHJlYWRMb2NhbENhY2hlT3JpZ2lu
S2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX2hvc3QoV1RG
OjpIYXNoVGFibGVEZWxldGVkVmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleSYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9ob3N0ID09IG90aGVyLm1faG9zdAorICAgICAgICAgICAg
JiYgbV9wcm90b2NvbCA9PSBvdGhlci5tX3Byb3RvY29sCisgICAgICAgICAgICAmJiBtX3BvcnQg
PT0gb3RoZXIubV9wb3J0OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
VGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzICE9IFRocmVhZExv
Y2FsQ2FjaGVPcmlnaW5LZXkoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faG9zdC5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpOyB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9ob3N0Lmhhc2goKSArIG1fcHJvdG9jb2wuaGFzaCgpICsgKG1fcG9ydCA/ICptX3Bv
cnQgOiAwKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIFN0cmluZyBtX2hvc3Q7CisgICAg
U3RyaW5nIG1fcHJvdG9jb2w7CisgICAgc3RkOjpvcHRpb25hbDx1aW50MTZfdD4gbV9wb3J0Owor
fTsKKworc3RydWN0IFRocmVhZExvY2FsQ2FjaGVPcmlnaW5LZXlIYXNoIHsKKyAgICBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCBUaHJlYWRMb2NhbENhY2hlT3JpZ2luS2V5JiBrZXkpCisgICAg
eworICAgICAgICByZXR1cm4ga2V5Lmhhc2goKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3QgVGhyZWFkTG9jYWxDYWNoZU9yaWdpbktleSYgYSwgY29uc3QgVGhyZWFk
TG9jYWxDYWNoZU9yaWdpbktleSYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBhID09IGI7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JE
ZWxldGVkID0gZmFsc2U7IC8vIFRoaXMgaXMgYSBzYWZlIGNob2ljZSwgcG9zc2libHkgbW9yZSBj
b25zZXJ2YXRpdmUgdGhhbiBuZWNlc3NhcnkuCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IERlZmF1bHRI
YXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8V2ViQ29yZTo6VGhyZWFkTG9jYWxD
YWNoZU9yaWdpbktleT4geworICAgIHR5cGVkZWYgV2ViQ29yZTo6VGhyZWFkTG9jYWxDYWNoZU9y
aWdpbktleUhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgSGFzaFRy
YWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViQ29yZTo6VGhyZWFkTG9jYWxD
YWNoZU9yaWdpbktleT4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8V2ViQ29yZTo6VGhyZWFkTG9j
YWxDYWNoZU9yaWdpbktleT4geworICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1pl
cm8gPSBmYWxzZTsgLy8gVGhpcyBpcyBhIHNhZmUgY2hvaWNlLCBwb3NzaWJseSBtb3JlIGNvbnNl
cnZhdGl2ZSB0aGFuIG5lY2Vzc2FyeS4KK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCg==
</data>
<flag name="review"
          id="352024"
          type_id="1"
          status="+"
          setter="dbates"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>333138</attachid>
            <date>2018-02-05 17:59:18 -0800</date>
            <delta_ts>2018-02-05 18:00:40 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>58309</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI4MTA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDczIEBA
CisyMDE4LTAxLTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R2xvYmFsIG9iamVjdHMgc2hvdWxkIGJlIGFibGUgdG8gdXNlIFRMQ3MgdG8gYWxsb2NhdGUgZnJv
bSBkaWZmZXJlbnQgYmxvY2tzIGZyb20gZWFjaCBvdGhlcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgyMjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
SkYgQmFzdGllbi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgdXNlcyBUTENzIHRvIGNyZWF0ZSBh
dCBsZWFzdCBgbWluaW11bURpc3RhbmNlQmV0d2VlbkNlbGxzRnJvbURpZmZlcmVuT3JpZ2luc2Ag
Ynl0ZXMgb2YKKyAgICAgICAgZGlzdGFuY2UgYmV0d2VlbiBvYmplY3RzIGZyb20gZGlmZmVyZW50
IG9yaWdpbnMsIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tYmluYXRpb24gb2YgdGhpbmdzLiBGb3IK
KyAgICAgICAgc2hvcnQgbGV0cyByZWZlciB0byB0aGF0IGNvbnN0YW50IGFzIEsuCisgICAgICAg
IAorICAgICAgICAtIFNpbmNlIHIyMjc3MjEsIExhcmdlQWxsb2NhdGlvbiBwdXRzIEsgYnl0ZXMg
cGFkZGluZyBhdCB0aGUgZW5kIG9mIGVhY2ggYWxsb2NhdGlvbi4KKyAgICAgICAgCisgICAgICAg
IC0gU2luY2UgcjIyNzcxOCwgTWFya2VkQmxvY2sgcHV0cyBhdCBsZWFzdCBLIGJ5dGVzIGluIGl0
cyBmb290ZXIuCisgICAgICAgIAorICAgICAgICAtIFNpbmNlIHIyMjc2MTcsIGdsb2JhbCBvYmpl
Y3RzIGNhbiBoYXZlIHRoZWlyIG93biBUTENzLCB3aGljaCBtYWtlIHRoZW0gYWxsb2NhdGUgZnJv
bSBhCisgICAgICAgICAgZGlmZmVyZW50IHNldCBvZiBibG9ja3MgdGhhbiBvdGhlciBnbG9iYWwg
b2JqZWN0cy4gVGhlIFRMQyBvZiBhIGdsb2JhbCBvYmplY3QgY29tZXMgaW50bworICAgICAgICAg
IGVmZmVjdCB3aGVuIHlvdSBlbnRlciB0aGUgVk0gdmlhIHRoYXQgZ2xvYmFsIG9iamVjdC4KKyAg
ICAgICAgCisgICAgICAgIC0gV2l0aCB0aGlzIGNoYW5nZSwgVExDcyBhbmQgYmxvY2tzIGJvdGgg
aGF2ZSBzZWN1cml0eSBvcmlnaW5zLiBBIFRMQyB3aWxsIG9ubHkgdXNlIGJsb2NrcyB0aGF0Cisg
ICAgICAgICAgc2hhcmUgdGhlIHNhbWUgc2VjdXJpdHkgb3JpZ2luIG9yIGVtcHR5IGJsb2NrcyAo
aW4gd2hpY2ggY2FzZSB3ZSB6ZXJvIHRoZSBibG9jayBhbmQgY2hhbmdlCisgICAgICAgICAgaXRz
IHNlY3VyaXR5IG9yaWdpbikuCisgICAgICAgIAorICAgICAgICBXZWJDb3JlIGRldGVybWluZXMg
dGhlIFRMQy1HbG9iYWxPYmplY3QgbWFwcGluZy4gQnkgZGVmYXVsdCwgZ2xvYmFsIG9iamVjdHMg
d291bGQgc2ltcGx5IHVzZQorICAgICAgICB0aGUgVk0ncyBkZWZhdWx0IFRMQy4gV2ViQ29yZSBt
YWtlcyBpdCBzbyB0aGF0IERPTSB3aW5kb3dzIChidXQgbm90IHdvcmtlciBnbG9iYWwgb2JqZWN0
cykgZ2V0CisgICAgICAgIGEgVExDIGJhc2VkIG9uIHRoZWlyIGRvY3VtZW50J3MgU2VjdXJpdHlP
cmlnaW4uCisgICAgICAgIAorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogaGVhcC9CbG9j
a0RpcmVjdG9yeS5jcHA6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5OjpmaW5kQmxvY2tG
b3JBbGxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OnByZXBhcmVGb3JB
bGxvY2F0aW9uKToKKyAgICAgICAgKiBoZWFwL0Jsb2NrRGlyZWN0b3J5Lmg6CisgICAgICAgICog
aGVhcC9Mb2NhbEFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjpM
b2NhbEFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjpyZXNldCk6Cisg
ICAgICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjp+TG9jYWxBbGxvY2F0b3IpOgorICAgICAgICAo
SlNDOjpMb2NhbEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6Okxv
Y2FsQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKToKKyAgICAgICAgKiBo
ZWFwL0xvY2FsQWxsb2NhdG9yLmg6CisgICAgICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjp0bGMg
Y29uc3QpOgorICAgICAgICAqIGhlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwOgor
ICAgICAgICAqIGhlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaDoKKyAgICAgICAgKiBo
ZWFwL01hcmtlZEJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6
YXNzb2NpYXRlV2l0aE9yaWdpbik6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAg
ICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpzZWN1cml0eU9yaWdpblRva2VuIGNvbnN0
KToKKyAgICAgICAgKiBoZWFwL1NlY3VyaXR5T3JpZ2luVG9rZW4uY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6dW5pcXVlU2VjdXJpdHlPcmlnaW5Ub2tlbik6CisgICAgICAgICogaGVhcC9TZWN1
cml0eU9yaWdpblRva2VuLmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAvVGhyZWFkTG9jYWxDYWNo
ZS5jcHA6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGU6OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OlRocmVhZExvY2FsQ2FjaGU6OlRocmVhZExvY2FsQ2FjaGUpOgorICAgICAgICAoSlND
OjpUaHJlYWRMb2NhbENhY2hlOjphbGxvY2F0ZURhdGEpOgorICAgICAgICAoSlNDOjpUaHJlYWRM
b2NhbENhY2hlOjppbnN0YWxsU2xvdyk6CisgICAgICAgICogaGVhcC9UaHJlYWRMb2NhbENhY2hl
Lmg6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGU6OnNlY3VyaXR5T3JpZ2luVG9rZW4g
Y29uc3QpOgorICAgICAgICAqIGhlYXAvVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFsbCk6CisgICAgICAgICogcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpKU0dsb2Jh
bE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpjcmVhdGVUaHJlYWRMb2Nh
bENhY2hlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsT2JqZWN0Ojp0aHJlYWRMb2NhbENhY2hlKToKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxPYmplY3Q6OnRocmVhZExvY2FsQ2FjaGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcDoKKyAgICAgICAgKEpTQzo6Vk1FbnRyeVNjb3BlOjpW
TUVudHJ5U2NvcGUpOgorICAgICAgICAoSlNDOjpWTUVudHJ5U2NvcGU6On5WTUVudHJ5U2NvcGUp
OgorICAgICAgICAqIHJ1bnRpbWUvVk1FbnRyeVNjb3BlLmg6CisKIDIwMTgtMDItMDUgIERvbiBP
bG1zdGVhZCAgPGRvbi5vbG1zdGVhZEBzb255LmNvbT4KIAogICAgICAgICBKYXZhU2NyaXB0Q29y
ZSBmaWxlcyBzaG91bGQgbm90IGJlIGluY2x1ZGVkIHJlbGF0aXZlbHkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIyODEwNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTEzLDYgKzUxMyw3
IEBAIHNldChKYXZhU2NyaXB0Q29yZV9GT1JXQVJESU5HX0hFQURFUlMKICAgICBoZWFwL011dGF0
b3JTdGF0ZS5oCiAgICAgaGVhcC9SZWdpc3RlclN0YXRlLmgKICAgICBoZWFwL1J1bm5pbmdTY29w
ZS5oCisgICAgaGVhcC9TZWN1cml0eU9yaWdpblRva2VuLmgKICAgICBoZWFwL1NpbXBsZU1hcmtp
bmdDb25zdHJhaW50LmgKICAgICBoZWFwL1Nsb3RWaXNpdG9yLmgKICAgICBoZWFwL1Nsb3RWaXNp
dG9ySW5saW5lcy5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAy
MjgxMDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNCArMSw0IEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogLy8KIC8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogLy8gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
MTIsNiArNTEyLDcgQEAgaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAKIGhlYXAvTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXIuY3BwCiBoZWFwL011dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL011
dGF0b3JTdGF0ZS5jcHAKK2hlYXAvU2VjdXJpdHlPcmlnaW5Ub2tlbi5jcHAKIGhlYXAvU2ltcGxl
TWFya2luZ0NvbnN0cmFpbnQuY3BwCiBoZWFwL1Nsb3RWaXNpdG9yLmNwcAogaGVhcC9TcGFjZVRp
bWVNdXRhdG9yU2NoZWR1bGVyLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDIyODEwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQsNiArMjk0
LDcgQEAKIAkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2MENC
QUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1
YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY0MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTRCMTQ2MENE
NkUwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNDJC
M0MzMjAxRUM5RkYwMDM1NzAzMSAvKiBTZWN1cml0eU9yaWdpblRva2VuLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyQjNDMjIwMUVDOUZEMDAzNTcw
MzEgLyogU2VjdXJpdHlPcmlnaW5Ub2tlbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGNDMxNzM4MTQ2QkFDNjkwMDdFMzg5MCAvKiBMaXN0YWJs
ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNDMxNzM2MTQ2QkFDNjUwMDdFMzg5MCAvKiBMaXN0YWJsZUhhbmRsZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQ1NzAzOTFCRTQ0Qzkx
MDA2MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDU3MDM3MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJF
bGltaW5hdGVEZWFkQ29kZS5oICovOyB9OwogCQkwRjQ1NzAzRDFCRTQ1RjBBMDA2MkE2MjkgLyog
QWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NTcwM0IxQkU0NUYwQTAwNjJBNjI5IC8qIEFpclJlcG9ydFVzZWRS
ZWdpc3RlcnMuaCAqLzsgfTsKQEAgLTIyNjIsNiArMjI2Myw4IEBACiAJCTBGNDI2QTQ1MTQ2MENC
QUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFZhbHVlUmVjb3ZlcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0
MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBWaXJ0dWFsUmVnaXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YUZvcm1hdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjQyQjNDMDIwMUVCNTA5MDAzNTcwMzEgLyogQWxsb2NhdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFsbG9jYXRvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDJCM0MyMjAxRUM5RkQwMDM1NzAzMSAvKiBT
ZWN1cml0eU9yaWdpblRva2VuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNl
Y3VyaXR5T3JpZ2luVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MzE3
MzYxNDZCQUM2NTAwN0UzODkwIC8qIExpc3RhYmxlSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBMaXN0YWJsZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY0NTcwMzYxQkU0NEM5MTAwNjJBNjI5IC8qIEFpckVsaW1pbmF0ZURlYWRDb2Rl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckVsaW1pbmF0ZURl
YWRDb2RlLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJFbGltaW5hdGVEZWFkQ29kZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDU3MDM3MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJF
bGltaW5hdGVEZWFkQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJF
bGltaW5hdGVEZWFkQ29kZS5oOyBwYXRoID0gYjMvYWlyL0FpckVsaW1pbmF0ZURlYWRDb2RlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NTU5LDIxICs1NTYyLDE0IEBACiAJCTE0
MkUzMTJBMTM0RkYwQTYwMEFGQURCNSAvKiBoZWFwICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkwRjc1QTA1NDIwMEQyNUVGMDAzOEUyQ0YgLyogQWxsb2Nh
dG9yLmggKi8sCi0JCQkJMEY3NUEwNUQyMDBEMjVGMTAwMzhFMkNGIC8qIEFsbG9jYXRvcklubGlu
ZXMuaCAqLywKLQkJCQkwRjc1QTA1OTIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3Iu
Y3BwICovLAotCQkJCTBGNzVBMDU3MjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5o
ICovLAotCQkJCTBGNzVBMDVBMjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvcklubGlu
ZXMuaCAqLywKLQkJCQkwRjc1QTA1ODIwMEQyNUYwMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNo
ZS5jcHAgKi8sCi0JCQkJMEY3NUEwNTUyMDBEMjVFRjAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2Fj
aGUuaCAqLywKLQkJCQkwRjc1QTA1NjIwMEQyNUVGMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNo
ZUlubGluZXMuaCAqLywKLQkJCQkwRjc1QTA1QjIwMEQyNUYxMDAzOEUyQ0YgLyogVGhyZWFkTG9j
YWxDYWNoZUxheW91dC5jcHAgKi8sCi0JCQkJMEY3NUEwNUMyMDBEMjVGMTAwMzhFMkNGIC8qIFRo
cmVhZExvY2FsQ2FjaGVMYXlvdXQuaCAqLywKIAkJCQkwRkVDM0M1MDFGMzNBNDE2MDBGNTlCNkMg
LyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJMEZFQzNDNTExRjMzQTQxNjAw
RjU5QjZDIC8qIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCAqLywKIAkJCQkwRkE3NjIwQTFEQjk1
OUY2MDBCN0EyRkQgLyogQWxsb2NhdGluZ1Njb3BlLmggKi8sCiAJCQkJMEZEQ0UxMUIxRkFFNjFG
NDAwNkYzOTAxIC8qIEFsbG9jYXRpb25GYWlsdXJlTW9kZS5oICovLAorCQkJCTBGNDJCM0MwMjAx
RUI1MDkwMDM1NzAzMSAvKiBBbGxvY2F0b3IuY3BwICovLAorCQkJCTBGNzVBMDU0MjAwRDI1RUYw
MDM4RTJDRiAvKiBBbGxvY2F0b3IuaCAqLywKIAkJCQkwRjMwQ0I1RDFGQ0U0NkI0MDA0QjUzMjMg
LyogQWxsb2NhdG9yRm9yTW9kZS5oICovLAorCQkJCTBGNzVBMDVEMjAwRDI1RjEwMDM4RTJDRiAv
KiBBbGxvY2F0b3JJbmxpbmVzLmggKi8sCiAJCQkJMEZCNDY3N0UxRkREQTZFNTAwM0ZDQjA5IC8q
IEF0b21JbmRpY2VzLmggKi8sCiAJCQkJQzJCOTE2QzQxNERBMDQwQzAwQ0JBQzg2IC8qIEJsb2Nr
RGlyZWN0b3J5LmNwcCAqLywKIAkJCQlDMkI5MTZDMTE0REEwMTRFMDBDQkFDODYgLyogQmxvY2tE
aXJlY3RvcnkuaCAqLywKQEAgLTU2NzQsNiArNTY3MCw5IEBACiAJCQkJMEYwNzBBNDUxRDU0M0E4
OTAwNkU3MjMyIC8qIExhcmdlQWxsb2NhdGlvbi5jcHAgKi8sCiAJCQkJMEYwNzBBNDYxRDU0M0E4
OTAwNkU3MjMyIC8qIExhcmdlQWxsb2NhdGlvbi5oICovLAogCQkJCTBGNDMxNzM2MTQ2QkFDNjUw
MDdFMzg5MCAvKiBMaXN0YWJsZUhhbmRsZXIuaCAqLywKKwkJCQkwRjc1QTA1OTIwMEQyNUYwMDAz
OEUyQ0YgLyogTG9jYWxBbGxvY2F0b3IuY3BwICovLAorCQkJCTBGNzVBMDU3MjAwRDI1RjAwMDM4
RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5oICovLAorCQkJCTBGNzVBMDVBMjAwRDI1RjAwMDM4RTJD
RiAvKiBMb2NhbEFsbG9jYXRvcklubGluZXMuaCAqLywKIAkJCQkwRjIwOEFENjFERjA5MjVBMDA3
RDMyNjkgLyogTG9ja0R1cmluZ01hcmtpbmcuaCAqLywKIAkJCQkxNEI3MjMzRjEyRDdEMERBMDAz
QkQ1RUQgLyogTWFjaGluZVN0YWNrTWFya2VyLmNwcCAqLywKIAkJCQkxNEI3MjM0MDEyRDdEMERB
MDAzQkQ1RUQgLyogTWFjaGluZVN0YWNrTWFya2VyLmggKi8sCkBAIC01NzAzLDYgKzU3MDIsNyBA
QAogCQkJCTBGRDBFNUVGMUU0NkJGMjMwMDA2QUIwOCAvKiBSZWdpc3RlclN0YXRlLmggKi8sCiAJ
CQkJMEY3Q0Y5NEUxREJFRUU4NjAwOThDQzEyIC8qIFJlbGVhc2VIZWFwQWNjZXNzU2NvcGUuaCAq
LywKIAkJCQkwRjJDNjNBOTFFNEZBNDJDMDBDMTM4MzkgLyogUnVubmluZ1Njb3BlLmggKi8sCisJ
CQkJMEY0MkIzQzIyMDFFQzlGRDAwMzU3MDMxIC8qIFNlY3VyaXR5T3JpZ2luVG9rZW4uaCAqLywK
IAkJCQkwRjREOEM3NjFGQ0EzQ0YyMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQu
Y3BwICovLAogCQkJCTBGNEQ4Qzc3MUZDQTNDRjMwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29u
c3RyYWludC5oICovLAogCQkJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRv
ci5jcHAgKi8sCkBAIC01NzI0LDYgKzU3MjQsMTEgQEAKIAkJCQkwRkQ3OUEyQzFFQkJCREIyMDBE
QTg4RDMgLyogU3luY2hyb25vdXNuZXNzLmggKi8sCiAJCQkJMEYxRkIzOEExRTE3M0E2MjAwQTlC
RTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgKi8sCiAJ
CQkJMEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0
YXRvclNjaGVkdWxlci5oICovLAorCQkJCTBGNzVBMDU4MjAwRDI1RjAwMDM4RTJDRiAvKiBUaHJl
YWRMb2NhbENhY2hlLmNwcCAqLywKKwkJCQkwRjc1QTA1NTIwMEQyNUVGMDAzOEUyQ0YgLyogVGhy
ZWFkTG9jYWxDYWNoZS5oICovLAorCQkJCTBGNzVBMDU2MjAwRDI1RUYwMDM4RTJDRiAvKiBUaHJl
YWRMb2NhbENhY2hlSW5saW5lcy5oICovLAorCQkJCTBGNzVBMDVCMjAwRDI1RjEwMDM4RTJDRiAv
KiBUaHJlYWRMb2NhbENhY2hlTGF5b3V0LmNwcCAqLywKKwkJCQkwRjc1QTA1QzIwMEQyNUYxMDAz
OEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oICovLAogCQkJCTE0MTQ0OENDMTNBMTc4
MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCAqLywKIAkJCQkwRjVGMDhDRTE0NkM3NjJG
MDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oICovLAogCQkJCTBGNEQ4QzcyMUZD
N0E5NzMwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCAqLywKQEAgLTg1MjIsNiArODUyNyw3IEBA
CiAJCQkJMEY3QzM5RkYxQzkwQzU1QjAwNDgwMTUxIC8qIERGR09wSW5mby5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTdEODlDRkUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJpbGl0eUFu
YWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5
NCAvKiBERkdPU1JFbnRyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0MkIzQzMyMDFFQzlGRjAw
MzU3MDMxIC8qIFNlY3VyaXR5T3JpZ2luVG9rZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhB
MzI2MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVDMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JF
eGl0QmFzZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9CbG9ja0RpcmVjdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCShyZXZpc2lvbiAyMjgxMDYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDYgKzMzLDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxv
Y2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCisjaW5jbHVkZSAiVGhyZWFk
TG9jYWxDYWNoZUlubGluZXMuaCIKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9DdXJy
ZW50VGltZS5oPgogCkBAIC04MCwxNCArODEsMjAgQEAgTWFya2VkQmxvY2s6OkhhbmRsZSogQmxv
Y2tEaXJlY3Rvcnk6OmZpbgogICAgIHJldHVybiBtX2Jsb2Nrc1ttX2VtcHR5Q3Vyc29yXTsKIH0K
IAotTWFya2VkQmxvY2s6OkhhbmRsZSogQmxvY2tEaXJlY3Rvcnk6OmZpbmRCbG9ja0ZvckFsbG9j
YXRpb24oKQorTWFya2VkQmxvY2s6OkhhbmRsZSogQmxvY2tEaXJlY3Rvcnk6OmZpbmRCbG9ja0Zv
ckFsbG9jYXRpb24oTG9jYWxBbGxvY2F0b3ImIGFsbG9jYXRvcikKIHsKLSAgICBtX2FsbG9jYXRp
b25DdXJzb3IgPSAobV9jYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IHwgbV9lbXB0eSkuZmluZEJpdCht
X2FsbG9jYXRpb25DdXJzb3IsIHRydWUpOwotICAgIGlmIChtX2FsbG9jYXRpb25DdXJzb3IgPj0g
bV9ibG9ja3Muc2l6ZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBzZXRJ
c0NhbkFsbG9jYXRlQnV0Tm90RW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBtX2FsbG9jYXRpb25D
dXJzb3IsIGZhbHNlKTsKLSAgICByZXR1cm4gbV9ibG9ja3NbbV9hbGxvY2F0aW9uQ3Vyc29yXTsK
KyAgICBmb3IgKDs7KSB7CisgICAgICAgIGFsbG9jYXRvci5tX2FsbG9jYXRpb25DdXJzb3IgPSAo
bV9jYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IHwgbV9lbXB0eSkuZmluZEJpdChhbGxvY2F0b3IubV9h
bGxvY2F0aW9uQ3Vyc29yLCB0cnVlKTsKKyAgICAgICAgaWYgKGFsbG9jYXRvci5tX2FsbG9jYXRp
b25DdXJzb3IgPj0gbV9ibG9ja3Muc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIAorICAgICAgICBzaXplX3QgYmxvY2tJbmRleCA9IGFsbG9jYXRvci5tX2FsbG9j
YXRpb25DdXJzb3IrKzsKKyAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogcmVzdWx0ID0gbV9i
bG9ja3NbYmxvY2tJbmRleF07CisgICAgICAgIGlmIChyZXN1bHQtPnNlY3VyaXR5T3JpZ2luVG9r
ZW4oKSA9PSBhbGxvY2F0b3IudGxjKCktPnNlY3VyaXR5T3JpZ2luVG9rZW4oKSkgeworICAgICAg
ICAgICAgc2V0SXNDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgYmxv
Y2tJbmRleCwgZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQor
ICAgIH0KIH0KIAogTWFya2VkQmxvY2s6OkhhbmRsZSogQmxvY2tEaXJlY3Rvcnk6OnRyeUFsbG9j
YXRlQmxvY2soKQpAQCAtMTgzLDggKzE5MCw2IEBAIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OnByZXBh
cmVGb3JBbGxvY2F0aW8KICAgICAgICAgICAgIGFsbG9jYXRvci0+cHJlcGFyZUZvckFsbG9jYXRp
b24oKTsKICAgICAgICAgfSk7CiAgICAgCi0gICAgbV9hbGxvY2F0aW9uQ3Vyc29yID0gMDsKLSAg
ICBtX2VtcHR5Q3Vyc29yID0gMDsKICAgICBtX3Vuc3dlcHRDdXJzb3IgPSAwOwogICAgIAogICAg
IG1fZWRlbi5jbGVhckFsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxv
Y2tEaXJlY3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9C
bG9ja0RpcmVjdG9yeS5oCShyZXZpc2lvbiAyMjgxMDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBA
IGNsYXNzIEhlYXA7CiBjbGFzcyBJc29DZWxsU2V0OwogY2xhc3MgTWFya2VkU3BhY2U7CiBjbGFz
cyBMTEludE9mZnNldHNFeHRyYWN0b3I7CitjbGFzcyBUaHJlYWRMb2NhbENhY2hlOwogY2xhc3Mg
VGhyZWFkTG9jYWxDYWNoZUxheW91dDsKIAogI2RlZmluZSBGT1JfRUFDSF9CTE9DS19ESVJFQ1RP
UllfQklUKG1hY3JvKSBcCkBAIC0xNjIsMTIgKzE2MywxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
dW1wQml0cyhQcmludFN0cmVhbSYgPSBXVEY6OmRhdGFGaWxlKCkpOwogICAgIAogcHJpdmF0ZToK
LSAgICBmcmllbmQgY2xhc3MgTG9jYWxBbGxvY2F0b3I7CiAgICAgZnJpZW5kIGNsYXNzIElzb0Nl
bGxTZXQ7CisgICAgZnJpZW5kIGNsYXNzIExvY2FsQWxsb2NhdG9yOworICAgIGZyaWVuZCBjbGFz
cyBMb2NhbFNpZGVBbGxvY2F0b3I7CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJsb2NrOwogICAg
IGZyaWVuZCBjbGFzcyBUaHJlYWRMb2NhbENhY2hlTGF5b3V0OwogICAgIAotICAgIE1hcmtlZEJs
b2NrOjpIYW5kbGUqIGZpbmRCbG9ja0ZvckFsbG9jYXRpb24oKTsKKyAgICBNYXJrZWRCbG9jazo6
SGFuZGxlKiBmaW5kQmxvY2tGb3JBbGxvY2F0aW9uKExvY2FsQWxsb2NhdG9yJik7CiAgICAgCiAg
ICAgTWFya2VkQmxvY2s6OkhhbmRsZSogdHJ5QWxsb2NhdGVCbG9jaygpOwogICAgIApAQCAtMTg0
LDggKzE4Niw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgLy8gQWZ0ZXIgeW91IGRvIHNvbWV0aGlu
ZyB0byBhIGJsb2NrIGJhc2VkIG9uIG9uZSBvZiB0aGVzZSBjdXJzb3JzLCB5b3UgY2xlYXIgdGhl
IGJpdCBpbiB0aGUKICAgICAvLyBjb3JyZXNwb25kaW5nIGJpdHZlY3RvciBhbmQgbGVhdmUgdGhl
IGN1cnNvciB3aGVyZSBpdCB3YXMuCi0gICAgc2l6ZV90IG1fYWxsb2NhdGlvbkN1cnNvciB7IDAg
fTsgLy8gUG9pbnRzIHRvIHRoZSBuZXh0IGJsb2NrIHRoYXQgaXMgYSBjYW5kaWRhdGUgZm9yIGFs
bG9jYXRpb24uCi0gICAgc2l6ZV90IG1fZW1wdHlDdXJzb3IgeyAwIH07IC8vIFBvaW50cyB0byB0
aGUgbmV4dCBibG9jayB0aGF0IGlzIGEgY2FuZGlkYXRlIGZvciBlbXB0eSBhbGxvY2F0aW9uIChh
bGxvY2F0aW5nIGluIGVtcHR5IGJsb2NrcykuCisgICAgc2l6ZV90IG1fZW1wdHlDdXJzb3IgeyAw
IH07CiAgICAgc2l6ZV90IG1fdW5zd2VwdEN1cnNvciB7IDAgfTsgLy8gUG9pbnRzIHRvIHRoZSBu
ZXh0IGJsb2NrIHRoYXQgaXMgYSBjYW5kaWRhdGUgZm9yIGluY3JlbWVudGFsIHN3ZWVwaW5nLgog
ICAgIAogICAgIHVuc2lnbmVkIG1fY2VsbFNpemU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMjgxMDYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDggKzMyLDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUxvY2FsQWxsb2NhdG9yOjpM
b2NhbEFsbG9jYXRvcihCbG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5KQotICAgIDogbV9kaXJlY3Rv
cnkoZGlyZWN0b3J5KQorTG9jYWxBbGxvY2F0b3I6OkxvY2FsQWxsb2NhdG9yKFRocmVhZExvY2Fs
Q2FjaGUqIHRsYywgQmxvY2tEaXJlY3RvcnkqIGRpcmVjdG9yeSkKKyAgICA6IG1fdGxjKHRsYykK
KyAgICAsIG1fZGlyZWN0b3J5KGRpcmVjdG9yeSkKICAgICAsIG1fY2VsbFNpemUoZGlyZWN0b3J5
LT5tX2NlbGxTaXplKQogICAgICwgbV9mcmVlTGlzdChtX2NlbGxTaXplKQogewpAQCAtNDIsMTEg
KzQzLDEzIEBAIExvY2FsQWxsb2NhdG9yOjpMb2NhbEFsbG9jYXRvcihCbG9ja0RpcmUKIH0KIAog
TG9jYWxBbGxvY2F0b3I6OkxvY2FsQWxsb2NhdG9yKExvY2FsQWxsb2NhdG9yJiYgb3RoZXIpCi0g
ICAgOiBtX2RpcmVjdG9yeShvdGhlci5tX2RpcmVjdG9yeSkKKyAgICA6IG1fdGxjKG90aGVyLm1f
dGxjKQorICAgICwgbV9kaXJlY3Rvcnkob3RoZXIubV9kaXJlY3RvcnkpCiAgICAgLCBtX2NlbGxT
aXplKG90aGVyLm1fY2VsbFNpemUpCiAgICAgLCBtX2ZyZWVMaXN0KFdURk1vdmUob3RoZXIubV9m
cmVlTGlzdCkpCiAgICAgLCBtX2N1cnJlbnRCbG9jayhvdGhlci5tX2N1cnJlbnRCbG9jaykKICAg
ICAsIG1fbGFzdEFjdGl2ZUJsb2NrKG90aGVyLm1fbGFzdEFjdGl2ZUJsb2NrKQorICAgICwgbV9h
bGxvY2F0aW9uQ3Vyc29yKG90aGVyLm1fYWxsb2NhdGlvbkN1cnNvcikKIHsKICAgICBvdGhlci5y
ZXNldCgpOwogICAgIGlmIChvdGhlci5pc09uTGlzdCgpKSB7CkBAIC02MSw2ICs2NCw3IEBAIHZv
aWQgTG9jYWxBbGxvY2F0b3I6OnJlc2V0KCkKICAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7CiAgICAg
bV9jdXJyZW50QmxvY2sgPSBudWxscHRyOwogICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbnVsbHB0
cjsKKyAgICBtX2FsbG9jYXRpb25DdXJzb3IgPSAwOwogfQogCiBMb2NhbEFsbG9jYXRvcjo6fkxv
Y2FsQWxsb2NhdG9yKCkKQEAgLTgwLDYgKzg0LDE1IEBAIExvY2FsQWxsb2NhdG9yOjp+TG9jYWxB
bGxvY2F0b3IoKQogICAgIC8vICAgdGhhdCBpdCBpcyBub3QgcmVhY2hhYmxlLiBUaGVyZWZvcmUs
IHRoZSBUTEMgc2hvdWxkIHN0aWxsIGJlIGluIGEgZnVsbHkgcmVzZXQgc3RhdGUgYXQgdGhlCiAg
ICAgLy8gICB0aW1lIG9mIGRlc3RydWN0aW9uIGJlY2F1c2UgZm9yIGl0IHRvIGdldCBpbnRvIGFu
eSBvdGhlciBzdGF0ZSwgc29tZW9uZSBtdXN0IGhhdmUgYWxsb2NhdGVkCiAgICAgLy8gICBpbiBp
dCAod2hpY2ggaXMgaW1wb3NzaWJsZSBiZWNhdXNlIGl0J3Mgc3VwcG9zZWRseSB1bnJlYWNoYWJs
ZSkuCisgICAgLy8KKyAgICAvLyBNeSBiaWdnZXN0IHdvcnJ5IHdpdGggdGhlc2UgYXNzZXJ0aW9u
cyBpcyB0aGF0IHRoZXJlIHdpbGwgYmUgc29tZSBUTEMgdGhhdCBnZXRzIHNldCBhcyB0aGUKKyAg
ICAvLyBjdXJyZW50IG9uZSBidXQgdGhlbiBuZXZlciByZXNldCwgYW5kIGluIHRoZSBtZWFudGlt
ZSB0aGUgZ2xvYmFsIG9iamVjdCB0aGF0IG93bnMgaXQgZ2V0cworICAgIC8vIGRlc3Ryb3llZC4K
KyAgICAvLworICAgIC8vIE5vdGUgdGhhdCBpZiB3ZSBkaWQgaG9sZCBvbnRvIHNvbWUgbWVtb3J5
IGFuZCB3ZSB3YW50ZWQgdG8gcmV0dXJuIGl0IHRoZW4gdGhpcyBjb3VsZCBiZSB3ZWlyZC4KKyAg
ICAvLyBXZSB3b3VsZCBwb3RlbnRpYWxseSBoYXZlIHRvIHN0b3BBbGxvY2F0aW5nKCkuIFRoYXQg
d291bGQgbWVhbiBoYXZpbmcgdG8gcmV0dXJuIGEgYmxvY2sgdG8gdGhlCisgICAgLy8gQmxvY2tE
aXJlY3RvcnkuIEl0J3Mgbm90IGNsZWFyIHRoYXQgdGhlIEJsb2NrRGlyZWN0b3J5IGlzIHByZXBh
cmVkIHRvIGhhbmRsZSB0aGF0IGR1cmluZworICAgIC8vIHN3ZWVwaW5nIGFub3RoZXIgYmxvY2ss
IGZvciBleGFtcGxlLgogICAgIGJvb2wgb2sgPSB0cnVlOwogICAgIGlmICghbV9mcmVlTGlzdC5h
bGxvY2F0aW9uV2lsbEZhaWwoKSkgewogICAgICAgICBkYXRhTG9nKCJGQVRBTDogIiwgUmF3UG9p
bnRlcih0aGlzKSwgIi0+fkxvY2FsQWxsb2NhdG9yIGhhcyBub24tZW1wdHkgZnJlZS1saXN0Llxu
Iik7CkBAIC0xNjQsNiArMTc3LDcgQEAgdm9pZCogTG9jYWxBbGxvY2F0b3I6OmFsbG9jYXRlU2xv
d0Nhc2UoRwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CisgICAgYmxvY2stPmFzc29jaWF0ZVdpdGhPcmlnaW4obV90bGMtPnNlY3VyaXR5T3JpZ2luVG9r
ZW4oKSk7CiAgICAgbV9kaXJlY3RvcnktPmFkZEJsb2NrKGJsb2NrKTsKICAgICByZXN1bHQgPSBh
bGxvY2F0ZUluKGJsb2NrKTsKICAgICBBU1NFUlQocmVzdWx0KTsKQEAgLTIwMSw3ICsyMTUsNyBA
QCB2b2lkKiBMb2NhbEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVXaXRob3V0CiAgICAgQVNTRVJUKG1f
ZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpOwogICAgIAogICAgIGZvciAoOzspIHsKLSAg
ICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSBtX2RpcmVjdG9yeS0+ZmluZEJsb2Nr
Rm9yQWxsb2NhdGlvbigpOworICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IG1f
ZGlyZWN0b3J5LT5maW5kQmxvY2tGb3JBbGxvY2F0aW9uKCp0aGlzKTsKICAgICAgICAgaWYgKCFi
bG9jaykKICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0yMjAsNiArMjM0LDcgQEAgdm9pZCogTG9j
YWxBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dAogICAgICAgICAgICAgLy8gYmVjYXVzZSB0
aGVyZSBpcyBhIHJlbW90ZSBjaGFuY2UgdGhhdCBhIGJsb2NrIG1heSBoYXZlIGJvdGggY2FuQWxs
b2NhdGVCdXROb3RFbXB0eQogICAgICAgICAgICAgLy8gYW5kIGVtcHR5IHNldCBhdCB0aGUgc2Ft
ZSB0aW1lLgogICAgICAgICAgICAgYmxvY2stPnJlbW92ZUZyb21EaXJlY3RvcnkoKTsKKyAgICAg
ICAgICAgIGJsb2NrLT5hc3NvY2lhdGVXaXRoT3JpZ2luKG1fdGxjLT5zZWN1cml0eU9yaWdpblRv
a2VuKCkpOwogICAgICAgICAgICAgbV9kaXJlY3RvcnktPmFkZEJsb2NrKGJsb2NrKTsKICAgICAg
ICAgICAgIHJldHVybiBhbGxvY2F0ZUluKGJsb2NrKTsKICAgICAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMjgxMDYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMywxMiArMzMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEJsb2Nr
RGlyZWN0b3J5OwogY2xhc3MgR0NEZWZlcnJhbENvbnRleHQ7CitjbGFzcyBUaHJlYWRMb2NhbENh
Y2hlOwogCiBjbGFzcyBMb2NhbEFsbG9jYXRvciA6IHB1YmxpYyBCYXNpY1Jhd1NlbnRpbmVsTm9k
ZTxMb2NhbEFsbG9jYXRvcj4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExvY2FsQWxsb2Nh
dG9yKTsKICAgICAKIHB1YmxpYzoKLSAgICBMb2NhbEFsbG9jYXRvcihCbG9ja0RpcmVjdG9yeSop
OworICAgIExvY2FsQWxsb2NhdG9yKFRocmVhZExvY2FsQ2FjaGUqLCBCbG9ja0RpcmVjdG9yeSop
OwogICAgIExvY2FsQWxsb2NhdG9yKExvY2FsQWxsb2NhdG9yJiYpOwogICAgIH5Mb2NhbEFsbG9j
YXRvcigpOwogICAgIApAQCAtNTMsOCArNTQsMTIgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZDZWxsU2l6ZSgpOwogICAgIAogICAgIGJvb2wgaXNGcmVlTGlzdGVkQ2Vs
bChjb25zdCB2b2lkKikgY29uc3Q7CisgICAgCisgICAgVGhyZWFkTG9jYWxDYWNoZSogdGxjKCkg
Y29uc3QgeyByZXR1cm4gbV90bGM7IH0KIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQmxv
Y2tEaXJlY3Rvcnk7CisgICAgCiAgICAgdm9pZCByZXNldCgpOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpOwogICAgIHZvaWQgZGlkQ29uc3VtZUZyZWVMaXN0KCk7
CkBAIC02MywxMSArNjgsMTYgQEAgcHJpdmF0ZToKICAgICB2b2lkKiBhbGxvY2F0ZUluKE1hcmtl
ZEJsb2NrOjpIYW5kbGUqKTsKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlv
bnNJZk5lZWRlZChHQ0RlZmVycmFsQ29udGV4dCopOwogCisgICAgVGhyZWFkTG9jYWxDYWNoZSog
bV90bGM7CiAgICAgQmxvY2tEaXJlY3RvcnkqIG1fZGlyZWN0b3J5OwogICAgIHVuc2lnbmVkIG1f
Y2VsbFNpemU7CiAgICAgRnJlZUxpc3QgbV9mcmVlTGlzdDsKICAgICBNYXJrZWRCbG9jazo6SGFu
ZGxlKiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKICAgICBNYXJrZWRCbG9jazo6SGFuZGxl
KiBtX2xhc3RBY3RpdmVCbG9jayB7IG51bGxwdHIgfTsKKyAgICAKKyAgICAvLyBBZnRlciB5b3Ug
ZG8gc29tZXRoaW5nIHRvIGEgYmxvY2sgYmFzZWQgb24gb25lIG9mIHRoZXNlIGN1cnNvcnMsIHlv
dSBjbGVhciB0aGUgYml0IGluIHRoZQorICAgIC8vIGNvcnJlc3BvbmRpbmcgYml0dmVjdG9yIGFu
ZCBsZWF2ZSB0aGUgY3Vyc29yIHdoZXJlIGl0IHdhcy4KKyAgICBzaXplX3QgbV9hbGxvY2F0aW9u
Q3Vyc29yIHsgMCB9OyAvLyBQb2ludHMgdG8gdGhlIG5leHQgYmxvY2sgdGhhdCBpcyBhIGNhbmRp
ZGF0ZSBmb3IgYWxsb2NhdGlvbi4KIH07CiAKIGlubGluZSBwdHJkaWZmX3QgTG9jYWxBbGxvY2F0
b3I6Om9mZnNldE9mRnJlZUxpc3QoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAkocmV2aXNpb24g
MjI4MTA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0Nv
bnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw5IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCIKIAorI2lu
Y2x1ZGUgIkdDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorCiBuYW1lc3BhY2UgSlNDIHsKIAogTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6Ok1hcmtT
dGFja01lcmdpbmdDb25zdHJhaW50KEhlYXAmIGhlYXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmgJKHJl
dmlzaW9uIDIyODEwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01l
cmdpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDkgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEhlYXA7CitjbGFzcyBTbG90VmlzaXRvcjsKKwogY2xhc3Mg
TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQgOiBwdWJsaWMgTWFya2luZ0NvbnN0cmFpbnQgewog
cHVibGljOgogICAgIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50KEhlYXAmKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDIyODEw
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDg4LDYgKzQ4OCwxNSBAQCBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6Omlz
RnJlZUxpc3RlZENlCiAgICAgcmV0dXJuIG1fZGlyZWN0b3J5LT5pc0ZyZWVMaXN0ZWRDZWxsKHRh
cmdldCk7CiB9CiAKK3ZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6YXNzb2NpYXRlV2l0aE9yaWdp
bihTZWN1cml0eU9yaWdpblRva2VuIHNlY3VyaXR5T3JpZ2luVG9rZW4pCit7CisgICAgaWYgKG1f
c2VjdXJpdHlPcmlnaW5Ub2tlbiA9PSBzZWN1cml0eU9yaWdpblRva2VuKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgbWVtc2V0KCZibG9jaygpLCAwLCBlbmRBdG9tICogYXRvbVNpemUpOwor
ICAgIG1fc2VjdXJpdHlPcmlnaW5Ub2tlbiA9IHNlY3VyaXR5T3JpZ2luVG9rZW47Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjI4MTA2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiAr
MjUsNyBAQAogI2luY2x1ZGUgIkRlc3RydWN0aW9uTW9kZS5oIgogI2luY2x1ZGUgIkhlYXBDZWxs
LmgiCiAjaW5jbHVkZSAiSXRlcmF0aW9uU3RhdHVzLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW5Ub2tlbi5oIgogI2luY2x1ZGUgIldlYWtTZXQuaCIKICNpbmNsdWRlIDx3dGYvQXRvbWljcy5o
PgogI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KQEAgLTE5NCw2ICsxOTUsOSBAQCBwdWJsaWM6CiAg
ICAgICAgIAogICAgICAgICB2b2lkIGR1bXBTdGF0ZShQcmludFN0cmVhbSYpOwogICAgICAgICAK
KyAgICAgICAgdm9pZCBhc3NvY2lhdGVXaXRoT3JpZ2luKFNlY3VyaXR5T3JpZ2luVG9rZW4pOwor
ICAgICAgICBTZWN1cml0eU9yaWdpblRva2VuIHNlY3VyaXR5T3JpZ2luVG9rZW4oKSBjb25zdCB7
IHJldHVybiBtX3NlY3VyaXR5T3JpZ2luVG9rZW47IH0KKyAgICAgICAgCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgSGFuZGxlKEhlYXAmLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiwgdm9pZCopOwog
ICAgICAgICAKQEAgLTIyOSw2ICsyMzMsOCBAQCBwdWJsaWM6CiAgICAgICAgIFdlYWtTZXQgbV93
ZWFrU2V0OwogICAgICAgICAKICAgICAgICAgTWFya2VkQmxvY2sqIG1fYmxvY2sgeyBudWxscHRy
IH07CisgICAgICAgIAorICAgICAgICBTZWN1cml0eU9yaWdpblRva2VuIG1fc2VjdXJpdHlPcmln
aW5Ub2tlbiB7IDAgfTsKICAgICB9OwogCiBwcml2YXRlOiAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1NlY3VyaXR5T3JpZ2luVG9rZW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NlY3VyaXR5T3JpZ2luVG9rZW4uY3BwCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NlY3VyaXR5T3JpZ2luVG9rZW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luVG9rZW4uaCIKKworI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCitTZWN1cml0eU9yaWdpblRva2VuIHVuaXF1ZVNlY3VyaXR5T3JpZ2lu
VG9rZW4oKQoreworICAgIHN0YXRpYyBTZWN1cml0eU9yaWdpblRva2VuIGNvdW50ZXI7CisgICAg
cmV0dXJuIFdURjo6YXRvbWljRXhjaGFuZ2VBZGQoJmNvdW50ZXIsIDEpICsgMTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NlY3Vy
aXR5T3JpZ2luVG9rZW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TZWN1cml0eU9yaWdpblRva2VuLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2VjdXJpdHlPcmlnaW5Ub2tlbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIHVpbnQ2NF90IFNlY3Vy
aXR5T3JpZ2luVG9rZW47CisKK0pTX0VYUE9SVF9QUklWQVRFIFNlY3VyaXR5T3JpZ2luVG9rZW4g
dW5pcXVlU2VjdXJpdHlPcmlnaW5Ub2tlbigpOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5jcHAJ
KHJldmlzaW9uIDIyODEwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExv
Y2FsQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMyArMzIsMTQgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLVJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBUaHJlYWRMb2NhbENhY2hlOjpj
cmVhdGUoSGVhcCYgaGVhcCkKK1JlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBUaHJlYWRMb2NhbENh
Y2hlOjpjcmVhdGUoSGVhcCYgaGVhcCwgU2VjdXJpdHlPcmlnaW5Ub2tlbiBzZWN1cml0eU9yaWdp
blRva2VuKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGhyZWFkTG9jYWxDYWNoZShoZWFw
KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUaHJlYWRMb2NhbENhY2hlKGhlYXAsIHNlY3Vy
aXR5T3JpZ2luVG9rZW4pKTsKIH0KIAotVGhyZWFkTG9jYWxDYWNoZTo6VGhyZWFkTG9jYWxDYWNo
ZShIZWFwJiBoZWFwKQorVGhyZWFkTG9jYWxDYWNoZTo6VGhyZWFkTG9jYWxDYWNoZShIZWFwJiBo
ZWFwLCBTZWN1cml0eU9yaWdpblRva2VuIHNlY3VyaXR5T3JpZ2luVG9rZW4pCiAgICAgOiBtX2hl
YXAoaGVhcCkKKyAgICAsIG1fc2VjdXJpdHlPcmlnaW5Ub2tlbihzZWN1cml0eU9yaWdpblRva2Vu
KQogewogICAgIG1fZGF0YSA9IGFsbG9jYXRlRGF0YSgpOwogfQpAQCAtNTksNyArNjAsNyBAQCBU
aHJlYWRMb2NhbENhY2hlOjpEYXRhKiBUaHJlYWRMb2NhbENhY2hlCiAgICAgZm9yIChzaXplX3Qg
b2Zmc2V0ID0gMDsgb2Zmc2V0IDwgb2xkU2l6ZTsgb2Zmc2V0ICs9IHNpemVvZihMb2NhbEFsbG9j
YXRvcikpCiAgICAgICAgIG5ldyAoJmFsbG9jYXRvcigqcmVzdWx0LCBvZmZzZXQpKSBMb2NhbEFs
bG9jYXRvcihXVEZNb3ZlKGFsbG9jYXRvcigqbV9kYXRhLCBvZmZzZXQpKSk7CiAgICAgZm9yIChz
aXplX3Qgb2Zmc2V0ID0gb2xkU2l6ZTsgb2Zmc2V0IDwgbGF5b3V0LnNpemU7IG9mZnNldCArPSBz
aXplb2YoTG9jYWxBbGxvY2F0b3IpKQotICAgICAgICBuZXcgKCZhbGxvY2F0b3IoKnJlc3VsdCwg
b2Zmc2V0KSkgTG9jYWxBbGxvY2F0b3IobGF5b3V0LmRpcmVjdG9yaWVzW29mZnNldCAvIHNpemVv
ZihMb2NhbEFsbG9jYXRvcildKTsKKyAgICAgICAgbmV3ICgmYWxsb2NhdG9yKCpyZXN1bHQsIG9m
ZnNldCkpIExvY2FsQWxsb2NhdG9yKHRoaXMsIGxheW91dC5kaXJlY3Rvcmllc1tvZmZzZXQgLyBz
aXplb2YoTG9jYWxBbGxvY2F0b3IpXSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNzAs
NyArNzEsNyBAQCB2b2lkIFRocmVhZExvY2FsQ2FjaGU6OmRlc3Ryb3lEYXRhKERhdGEqCiAgICAg
ZmFzdEZyZWUoZGF0YSk7CiB9CiAKLXZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFsbFNsb3co
Vk0mIHZtKQordm9pZCBUaHJlYWRMb2NhbENhY2hlOjppbnN0YWxsU2xvdyhWTSYgdm0sIFJlZlB0
cjxUaHJlYWRMb2NhbENhY2hlPiogcHJldmlvdXMpCiB7CiAjaWYgVVNFKEZBU1RfVExTX0ZPUl9U
TEMpCiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwpAQCAtODMsOCArODQsMTMg
QEAgdm9pZCBUaHJlYWRMb2NhbENhY2hlOjppbnN0YWxsU2xvdyhWTSYgdgogICAgIAogICAgIHJl
ZigpOwogICAgIAotICAgIGlmIChSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gb2xkQ2FjaGUgPSBn
ZXQodm0pKQotICAgICAgICBvbGRDYWNoZS0+ZGVyZWYoKTsKKyAgICBpZiAoVGhyZWFkTG9jYWxD
YWNoZTo6RGF0YSogb2xkQ2FjaGVEYXRhID0gZ2V0SW1wbCh2bSkpIHsKKyAgICAgICAgVGhyZWFk
TG9jYWxDYWNoZSogb2xkQ2FjaGUgPSBvbGRDYWNoZURhdGEtPmNhY2hlOworICAgICAgICBpZiAo
cHJldmlvdXMpCisgICAgICAgICAgICAqcHJldmlvdXMgPSBhZG9wdFJlZihvbGRDYWNoZSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9sZENhY2hlLT5kZXJlZigpOworICAgIH0KICAgICAK
ICAgICBpbnN0YWxsRGF0YSh2bSwgbV9kYXRhKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmgJKHJldmlzaW9uIDIyODEwNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjUsOSArMjUsMTMgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBbGxvY2F0
aW9uRmFpbHVyZU1vZGUuaCIKKyNpbmNsdWRlICJMb2NhbEFsbG9jYXRvci5oIgorI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luVG9rZW4uaCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2lu
Y2x1ZGUgPHd0Zi9GYXN0VExTLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVk
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzks
OSArNDMsOSBAQCBjbGFzcyBUaHJlYWRMb2NhbENhY2hlIDogcHVibGljIFRocmVhZFNhCiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgCiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0
cjxUaHJlYWRMb2NhbENhY2hlPiBjcmVhdGUoSGVhcCYpOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gY3JlYXRlKEhlYXAmLCBTZWN1cml0eU9y
aWdpblRva2VuID0gdW5pcXVlU2VjdXJpdHlPcmlnaW5Ub2tlbigpKTsKICAgICAKLSAgICBKU19F
WFBPUlRfUFJJVkFURSB+VGhyZWFkTG9jYWxDYWNoZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZpcnR1YWwgflRocmVhZExvY2FsQ2FjaGUoKTsKIAogICAgIHN0YXRpYyBSZWZQdHI8VGhyZWFk
TG9jYWxDYWNoZT4gZ2V0KFZNJik7CiAgICAgCkBAIC00OSw3ICs1Myw3IEBAIHB1YmxpYzoKICAg
ICAvLyBvcHRpbWl6aW5nIGZvciB0aGUgY2FzZSB0aGF0IHlvdSdyZSBqdXN0IGluc3RhbGxpbmcg
dGhlIGNhY2hlIHRoYXQgaXMgYWxyZWFkeSBpbnN0YWxsZWQuIFRoaXMKICAgICAvLyBhc3N1bWVz
IGEgcmVsYXRpdmVseSBzbWFsbCBudW1iZXIgb2YgY2FjaGVzIG9yIGxvdyBjaGFuY2Ugb2YgYWN0
dWFsIGNvbnRleHQgc3dpdGNoIGNvbWJpbmVkCiAgICAgLy8gd2l0aCBwb3NzaWJseSBoaWdoIHJh
dGUgb2YgIkkgbWF5IGhhdmUgY29udGV4dCBzd2l0Y2hlZCIgc2l0ZXMgdGhhdCBjYWxsIHRoaXMg
b3V0IG9mIHBhcmFub2lhLgotICAgIHZvaWQgaW5zdGFsbChWTSYpOworICAgIHZvaWQgaW5zdGFs
bChWTSYsIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiogPSBudWxscHRyKTsKICAgICAKICAgICBz
dGF0aWMgTG9jYWxBbGxvY2F0b3ImIGFsbG9jYXRvcihWTSYsIHNpemVfdCBvZmZzZXQpOwogICAg
IApAQCAtNTksMTEgKzYzLDE0IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mU2l6ZUluRGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihEYXRhLCBzaXplKTsgfQog
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGaXJzdEFsbG9jYXRvckluRGF0YSgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihEYXRhLCBhbGxvY2F0b3IpOyB9CiAgICAgCisgICAgU2VjdXJp
dHlPcmlnaW5Ub2tlbiBzZWN1cml0eU9yaWdpblRva2VuKCkgY29uc3QgeyByZXR1cm4gbV9zZWN1
cml0eU9yaWdpblRva2VuOyB9CisKK3Byb3RlY3RlZDogICAgCisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgVGhyZWFkTG9jYWxDYWNoZShIZWFwJiwgU2VjdXJpdHlPcmlnaW5Ub2tlbik7CisgICAgCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBWTTsKICAgICAKLSAgICBUaHJlYWRMb2NhbENhY2hl
KEhlYXAmKTsKLSAgICAKICAgICBzdHJ1Y3QgRGF0YSB7CiAgICAgICAgIHNpemVfdCBzaXplOwog
ICAgICAgICBUaHJlYWRMb2NhbENhY2hlKiBjYWNoZTsKQEAgLTc2LDcgKzgzLDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGRlc3Ryb3lEYXRhKERhdGEqKTsKICAgICBzdGF0aWMgTG9jYWxBbGxvY2F0
b3ImIGFsbG9jYXRvcihEYXRhJiBkYXRhLCBzaXplX3Qgb2Zmc2V0KTsKIAotICAgIHZvaWQgaW5z
dGFsbFNsb3coVk0mKTsKKyAgICB2b2lkIGluc3RhbGxTbG93KFZNJiwgUmVmUHRyPFRocmVhZExv
Y2FsQ2FjaGU+Kik7CiAgICAgc3RhdGljIHZvaWQgaW5zdGFsbERhdGEoVk0mLCBEYXRhKik7CiAg
ICAgCiAgICAgTG9jYWxBbGxvY2F0b3ImIGFsbG9jYXRvclNsb3coVk0mLCBzaXplX3Qgb2Zmc2V0
KTsKQEAgLTkxLDYgKzk4LDggQEAgcHJpdmF0ZToKICAgICAvLyBpdCdzIGNvcnJlY3QgZm9yIGlt
bW9ydGFsIGNhY2hlcy4KICAgICBIZWFwJiBtX2hlYXA7CiAgICAgRGF0YSogbV9kYXRhIHsgbnVs
bHB0ciB9OworICAgIAorICAgIFNlY3VyaXR5T3JpZ2luVG9rZW4gbV9zZWN1cml0eU9yaWdpblRv
a2VuOwogCiAjaWYgVVNFKEZBU1RfVExTX0ZPUl9UTEMpCiAgICAgc3RhdGljIGNvbnN0IHB0aHJl
YWRfa2V5X3QgdGxzS2V5ID0gV1RGX0dDX1RMQ19LRVk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgJKHJldmlzaW9u
IDIyODEwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZS5oIgorI2luY2x1ZGUgIlZNLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewogCkBAIC00NywxMSArNDgsMTQgQEAgaW5saW5lIFJlZlB0cjxUaHJlYWRMb2Nh
bENhY2hlPiBUaHJlYWRMbwogICAgIHJldHVybiBudWxscHRyOwogfQogCi1pbmxpbmUgdm9pZCBU
aHJlYWRMb2NhbENhY2hlOjppbnN0YWxsKFZNJiB2bSkKK2lubGluZSB2b2lkIFRocmVhZExvY2Fs
Q2FjaGU6Omluc3RhbGwoVk0mIHZtLCBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4qIHByZXZpb3Vz
KQogewotICAgIGlmIChnZXRJbXBsKHZtKSA9PSBtX2RhdGEpCisgICAgaWYgKGdldEltcGwodm0p
ID09IG1fZGF0YSkgeworICAgICAgICBpZiAocHJldmlvdXMpCisgICAgICAgICAgICAqcHJldmlv
dXMgPSBudWxscHRyOwogICAgICAgICByZXR1cm47Ci0gICAgaW5zdGFsbFNsb3codm0pOworICAg
IH0KKyAgICBpbnN0YWxsU2xvdyh2bSwgcHJldmlvdXMpOwogfQogCiBpbmxpbmUgTG9jYWxBbGxv
Y2F0b3ImIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRvcihWTSYgdm0sIHNpemVfdCBvZmZzZXQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmgJKHJldmlzaW9uIDIyODEwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5MSw3ICs0OTEsNyBAQCBwdWJsaWM6
CiAgICAgY29uc3QgUnVudGltZUZsYWdzJiBydW50aW1lRmxhZ3MoKSBjb25zdCB7IHJldHVybiBt
X3J1bnRpbWVGbGFnczsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgZXhw
bGljaXQgSlNHbG9iYWxPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBHbG9iYWxPYmplY3RN
ZXRob2RUYWJsZSogPSAwLCBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gPSBudWxscHRyKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBleHBsaWNpdCBKU0dsb2JhbE9iamVjdChWTSYsIFN0cnVjdHVy
ZSosIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiA9IG51bGxwdHIsIFJlZlB0cjxUaHJl
YWRMb2NhbENhY2hlPiA9IG51bGxwdHIpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTUVudHJ5U2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNRW50cnlTY29wZS5jcHAJKHJldmlzaW9uIDIyODEwNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDcgKzQxLDcgQEAgVk1FbnRyeVNjb3BlOjpWTUVudHJ5U2NvcGUoVk0mIHZtLCBKU0dsbwogICAg
IDogbV92bSh2bSkKICAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKIHsKLSAgICBn
bG9iYWxPYmplY3QtPnRocmVhZExvY2FsQ2FjaGUoKS5pbnN0YWxsKHZtKTsKKyAgICBnbG9iYWxP
YmplY3QtPnRocmVhZExvY2FsQ2FjaGUoKS5pbnN0YWxsKHZtLCAmbV9wcmV2aW91c1RMQyk7CiAg
ICAgQVNTRVJUKCFEaXNhbGxvd1ZNUmVlbnRyeTo6aXNJbkVmZmVjdE9uQ3VycmVudFRocmVhZCgp
KTsKICAgICBBU1NFUlQoVGhyZWFkOjpjdXJyZW50KCkuc3RhY2soKS5pc0dyb3dpbmdEb3dud2Fy
ZCgpKTsKICAgICBpZiAoIXZtLmVudHJ5U2NvcGUpIHsKQEAgLTcxLDExICs3MSwxNCBAQCB2b2lk
IFZNRW50cnlTY29wZTo6YWRkRGlkUG9wTGlzdGVuZXIoc3RkCiAKIFZNRW50cnlTY29wZTo6flZN
RW50cnlTY29wZSgpCiB7CisgICAgaWYgKG1fcHJldmlvdXNUTEMpCisgICAgICAgIG1fcHJldmlv
dXNUTEMtPmluc3RhbGwobV92bSk7CisgICAgCiAgICAgaWYgKG1fdm0uZW50cnlTY29wZSAhPSB0
aGlzKQogICAgICAgICByZXR1cm47CiAKICAgICBUcmFjZVBvaW50KFZNRW50cnlTY29wZUVuZCk7
Ci0KKyAgICAKICAgICBpZiAobV92bS53YXRjaGRvZygpKQogICAgICAgICBtX3ZtLndhdGNoZG9n
KCktPmV4aXRlZFZNKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
RW50cnlTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNRW50cnlTY29wZS5oCShyZXZpc2lvbiAyMjgxMDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTUVudHJ5U2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBA
QAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTR2xvYmFsT2JqZWN0OworY2xhc3MgVGhyZWFk
TG9jYWxDYWNoZTsKIGNsYXNzIFZNOwogCiBjbGFzcyBWTUVudHJ5U2NvcGUgewpAQCAtNDcsNiAr
NDgsNyBAQCBwcml2YXRlOgogICAgIFZNJiBtX3ZtOwogICAgIEpTR2xvYmFsT2JqZWN0KiBtX2ds
b2JhbE9iamVjdDsKICAgICBWZWN0b3I8c3RkOjpmdW5jdGlvbjx2b2lkICgpPj4gbV9kaWRQb3BM
aXN0ZW5lcnM7CisgICAgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IG1fcHJldmlvdXNUTEM7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyODEwNikK
KysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1
IEBACisyMDE4LTAyLTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAg
ICAgR2xvYmFsIG9iamVjdHMgc2hvdWxkIGJlIGFibGUgdG8gdXNlIFRMQ3MgdG8gYWxsb2NhdGUg
ZnJvbSBkaWZmZXJlbnQgYmxvY2tzIGZyb20gZWFjaCBvdGhlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgyMjI3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFuaWVsIEJhdGVzIGFuZCBDaHJpcyBEdW1lei4KKworICAgICAgICBObyBuZXcgdGVzdHMg
YmVjYXVzZSBubyBjaGFuZ2UgaW4gYmVoYXZpb3IuCisgICAgICAgIAorICAgICAgICBBZG9wdCBK
U0MgVExDIEFQSSB0byBwdXQgZGlzdGFuY2UgYmV0d2VlbiBvYmplY3RzIGZyb20gZGlmZmVyZW50
IHNlY3VyaXR5IG9yaWdpbnMuIFdlYkNvcmUgaGFzCisgICAgICAgIGEgc3ViY2xhc3Mgb2YgVGhy
ZWFkTG9jYWxDYWNoZSB0aGF0IHN1cHBvcnRzIGhhc2gtY29uc2luZyBiYXNlZCBvbiB0aGUgcmVs
ZXZhbnQgb3JpZ2luIGRhdGEsCisgICAgICAgIHdoaWNoIHdlIGVuY2Fwc3VsYXRlIHdpdGggVGhy
ZWFkTG9jYWxDYWNoZU9yaWdpbktleS4gSXQncyBEb2N1bWVudCdzIGpvYiB0byBpbml0aWF0ZSB0
aGUgaGFzaAorICAgICAgICBjb25zaW5nLgorICAgICAgICAKKyAgICAgICAgV29ya2VycyBkb24n
dCBvcHQgaW50byB0aGlzLiBUaGV5IGp1c3QgZ2V0IHRoZSBWTSdzIGRlZmF1bHQgVExDIGFsbCB0
aGUgdGltZS4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL2hlYXAvVGhyZWFkTG9jYWxD
YWNoZS5oOiBBZGRlZC4KKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01H
bG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3Q6OkpT
RE9NR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVj
dC5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OkpTRE9NV2luZG93QmFzZSk6CisgICAgICAgICog
ZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojppbml0U2VjdXJp
dHlDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0aHJlYWRMb2NhbENhY2hl
KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBwYWdlL09yaWdpblRocmVh
ZExvY2FsQ2FjaGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRocmVhZExvY2FsQ2Fj
aGVNYXApOgorICAgICAgICAoV2ViQ29yZTo6T3JpZ2luVGhyZWFkTG9jYWxDYWNoZTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok9yaWdpblRocmVhZExvY2FsQ2FjaGU6On5PcmlnaW5UaHJl
YWRMb2NhbENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9yaWdpblRocmVhZExvY2FsQ2FjaGU6
Ok9yaWdpblRocmVhZExvY2FsQ2FjaGUpOgorICAgICAgICAqIHBhZ2UvT3JpZ2luVGhyZWFkTG9j
YWxDYWNoZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5T3JpZ2luLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpwYXNzZXNGaWxlQ2hlY2sgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OnNldEVuZm9yY2VzRmlsZVBhdGhTZXBh
cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjp0b1N0cmluZyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6ZW5mb3JjZUZpbGVQYXRoU2Vw
YXJhdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogcGFnZS9TZWN1cml0eU9yaWdpbi5oOgorICAg
ICAgICAoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OmVuZm9yY2VzRmlsZVBhdGhTZXBhcmF0aW9u
IGNvbnN0KToKKwogMjAxOC0wMi0wNSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+
CiAKICAgICAgICAgVXNlIGRvd25jYXN0IGluIGNyZWF0ZUxpbmtQcmVsb2FkUmVzb3VyY2VDbGll
bnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyMjgxMDYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTMzNCw2ICsxMzM0LDcgQEAgcGFnZS9N
b3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmNwcAogcGFnZS9OYXZpZ2F0b3IuY3BwCiBwYWdl
L05hdmlnYXRvckJhc2UuY3BwCiBwYWdlL09yaWdpbkFjY2Vzc0VudHJ5LmNwcAorcGFnZS9Pcmln
aW5UaHJlYWRMb2NhbENhY2hlLmNwcAogcGFnZS9QYWdlLmNwcAogcGFnZS9QYWdlQ29uZmlndXJh
dGlvbi5jcHAKIHBhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1RocmVhZExvY2FsQ2FjaGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1RocmVhZExvY2FsQ2FjaGUu
aAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFw
L1RocmVhZExvY2FsQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIgQEAKKyNwcmFn
bWEgb25jZQorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1RocmVhZExvY2FsQ2FjaGUuaD4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDIyODEwNikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzQyLDYgKzM0Miw3IEBACiAJCTBG
NTgwQ0ZGMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckJhY2tpbmcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTgwQ0ZCMEYxMkRFOUIwMDUx
RDY4OSAvKiBSZW5kZXJMYXllckJhY2tpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjU4MEZBMzE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGls
ZWRCYWNraW5nTGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNTgwRkExMTQ5NjkzOTEwMEZCNUJEOCAvKiBXZWJUaWxlZEJhY2tpbmdMYXllci5o
ICovOyB9OwogCQkwRjU4MEZBRjE0OTgwMEQ0MDBGQjVCRDggLyogQW5pbWF0aW9uVXRpbGl0aWVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU4MEZB
RTE0OTgwMEQ0MDBGQjVCRDggLyogQW5pbWF0aW9uVXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY1QjQwOEEyMDIxMkY3NzAwODBG
OTEzIC8qIE9yaWdpblRocmVhZExvY2FsQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUI0MDg4MjAyMTJGNzMwMDgwRjkxMyAvKiBPcmlnaW5U
aHJlYWRMb2NhbENhY2hlLmggKi87IH07CiAJCTBGNUI3QTU1MTBGNjVEN0EwMDM3NjMwMiAvKiBS
ZW5kZXJFbWJlZGRlZE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY1QjdBNTMxMEY2NUQ3QTAwMzc2MzAyIC8qIFJlbmRlckVtYmVkZGVkT2Jq
ZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY1RTIwMDYxOEU3NzFGQzAwM0VDM0U1IC8qIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RTIwMDUxOEU3
NzFGQzAwM0VDM0U1IC8qIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjA1QUVEMTVGOTQ4NDgwMDRE
RjBDMCAvKiBTY3JvbGxpbmdDb25zdHJhaW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MDVBRUIxNUY5NDg0ODAwNERGMEMwIC8qIFNjcm9sbGlu
Z0NvbnN0cmFpbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTU0OTYsNiArNTQ5Nyw4IEBACiAJCTBGNTgwRkExMTQ5NjkzOTEwMEZCNUJEOCAv
KiBXZWJUaWxlZEJhY2tpbmdMYXllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJUaWxlZEJhY2tpbmdMYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjU4MEZBMjE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJUaWxlZEJhY2tpbmdMYXllci5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1ODBGQUUxNDk4MDBENDAwRkI1QkQ4
IC8qIEFuaW1hdGlvblV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBbmltYXRpb25VdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1
QjQwODgyMDIxMkY3MzAwODBGOTEzIC8qIE9yaWdpblRocmVhZExvY2FsQ2FjaGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3JpZ2luVGhyZWFkTG9jYWxDYWNoZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVCNDA4OTIwMjEyRjczMDA4MEY5MTMgLyogT3Jp
Z2luVGhyZWFkTG9jYWxDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBPcmlnaW5UaHJlYWRMb2NhbENhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY1QjdBNTIxMEY2NUQ3QTAwMzc2MzAyIC8qIFJlbmRlckVtYmVkZGVkT2JqZWN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckVtYmVkZGVkT2Jq
ZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1QjdBNTMxMEY2NUQ3QTAw
Mzc2MzAyIC8qIFJlbmRlckVtYmVkZGVkT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlbmRlckVtYmVkZGVkT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNUUyMDA1MThFNzcxRkMwMDNFQzNFNSAvKiBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29j
b2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1DQUFuaW1hdGlv
bkNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05OTM2LDggKzk5MzksOCBA
QAogCQk4QUY0RTU1NDExREM1QTM2MDAwRUQzREUgLyogUGVyZm9ybWFuY2VOYXZpZ2F0aW9uLmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQZXJmb3JtYW5jZU5hdmlnYXRpb24uaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4QUY0RTU1OTExREM1QTYzMDAwRUQzREUgLyogUGVy
Zm9ybWFuY2VUaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVyZm9y
bWFuY2VUaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEFGNEU1NUExMURD
NUE2MzAwMEVEM0RFIC8qIFBlcmZvcm1hbmNlVGltaW5nLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBQZXJmb3JtYW5jZVRpbWluZy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CThFMzNDRDkzMjAxQTI5QzEwMEUzOTA5MyAvKiBHYXBMZW5ndGguY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2FwTGVuZ3RoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOEJEMzdBNjcyMDFCQjM5QzAwMTE3MzRBIC8qIFJlYWRhYmxlU3RyZWFtQ2h1
bmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVhZGFibGVTdHJlYW1DaHVuay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk4RTMzQ0Q5MzIwMUEyOUMxMDBFMzkwOTMgLyogR2FwTGVuZ3RoLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdhcExlbmd0aC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThFNEM5NkQ4MUFENDQ4MzUwMDM2NUE1MCAvKiBK
U0ZldGNoUmVzcG9uc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNGZXRjaFJlc3BvbnNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEU0Qzk2
RDkxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTRmV0Y2hSZXNwb25zZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0ZldGNoUmVzcG9uc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOEVDNkM5NjEyMDFBMjUwMTAwRkJGQTUzIC8qIEdhcExlbmd0aC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHYXBMZW5ndGguaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTE4ODI5LDYgKzE4ODMyLDggQEAKIAkJCQk1MTgyQzI0QjFGMzEzQUUwMDA1
OUJBN0MgLyogTmF2aWdhdG9yU2VydmljZVdvcmtlci5pZGwgKi8sCiAJCQkJMDAxNDYyODgxMDND
RDFERTAwMEIyMERCIC8qIE9yaWdpbkFjY2Vzc0VudHJ5LmNwcCAqLywKIAkJCQkwMDE0NjI4OTEw
M0NEMURFMDAwQjIwREIgLyogT3JpZ2luQWNjZXNzRW50cnkuaCAqLywKKwkJCQkwRjVCNDA4OTIw
MjEyRjczMDA4MEY5MTMgLyogT3JpZ2luVGhyZWFkTG9jYWxDYWNoZS5jcHAgKi8sCisJCQkJMEY1
QjQwODgyMDIxMkY3MzAwODBGOTEzIC8qIE9yaWdpblRocmVhZExvY2FsQ2FjaGUuaCAqLywKIAkJ
CQk2NUZFQTg2ODA5ODMzQURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgKi8sCiAJCQkJNjVBMjE0Njcw
OTdBMzI5MTAwQjkwNTBBIC8qIFBhZ2UuaCAqLywKIAkJCQlDRDVFNUI2MDFBMTVGMTU2MDAwQzYw
OUUgLyogUGFnZUNvbmZpZ3VyYXRpb24uY3BwICovLApAQCAtMjgyNjYsNiArMjgyNzEsNyBAQAog
CQkJCTA3OTY5REMyMTdEMTQxNTEwMDdGRjg0MiAvKiBKU1JUQ1N0YXRzUmVwb3J0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1RTJDNDM2QzFCQ0YwNzFFMDAwMUUyQkMgLyogSlNSVENUcmFja0V2ZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VDMDFDMzBDMjc0REREMDA5RjRFQzkgLyogSlNTY3Jl
ZW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNUI0MDhBMjAyMTJGNzcwMDgwRjkxMyAvKiBPcmln
aW5UaHJlYWRMb2NhbENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGREExNUVDRTEyQjAzRjYx
MDAzQTU4M0EgLyogSlNTY3JpcHRQcm9jZXNzb3JOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
MzQ0NzZFRjFEQTVCQzVFMDAyQjZFRDIgLyogSlNTY3JvbGxUb09wdGlvbnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUNFRDA2QUQxMUM3Nzc1NDgwMEZERkFGMSAvKiBKU1NlY3VyaXR5UG9saWN5Vmlv
bGF0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjI4MTA2KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTYsOCArNTYsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGlz
UmVhZGFibGVCCiAKIGNvbnN0IENsYXNzSW5mbyBKU0RPTUdsb2JhbE9iamVjdDo6c19pbmZvID0g
eyAiRE9NR2xvYmFsT2JqZWN0IiwgJkpTR2xvYmFsT2JqZWN0OjpzX2luZm8sIG51bGxwdHIsIG51
bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNET01HbG9iYWxPYmplY3QpIH07CiAKLUpTRE9N
R2xvYmFsT2JqZWN0OjpKU0RPTUdsb2JhbE9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBSZWY8RE9NV3JhcHBlcldvcmxkPiYmIHdvcmxkLCBjb25zdCBHbG9iYWxPYmplY3RNZXRo
b2RUYWJsZSogZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCi0gICAgOiBKU0dsb2JhbE9iamVjdCh2
bSwgc3RydWN0dXJlLCBnbG9iYWxPYmplY3RNZXRob2RUYWJsZSkKK0pTRE9NR2xvYmFsT2JqZWN0
OjpKU0RPTUdsb2JhbE9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8RE9N
V3JhcHBlcldvcmxkPiYmIHdvcmxkLCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSogZ2xv
YmFsT2JqZWN0TWV0aG9kVGFibGUsIFJlZlB0cjxKU0M6OlRocmVhZExvY2FsQ2FjaGU+JiYgdGhy
ZWFkTG9jYWxDYWNoZSkKKyAgICA6IEpTR2xvYmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUsIGdsb2Jh
bE9iamVjdE1ldGhvZFRhYmxlLCBXVEZNb3ZlKHRocmVhZExvY2FsQ2FjaGUpKQogICAgICwgbV9j
dXJyZW50RXZlbnQoMCkKICAgICAsIG1fd29ybGQoV1RGTW92ZSh3b3JsZCkpCiAgICAgLCBtX3dv
cmxkSXNOb3JtYWwobV93b3JsZC0+aXNOb3JtYWwoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjI4MTA2KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIldlYkNvcmVKU0J1aWx0aW5JbnRlcm5h
bHMuaCIKICNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aGVhcC9Mb2Nr
RHVyaW5nTWFya2luZy5oPgorI2luY2x1ZGUgPGhlYXAvVGhyZWFkTG9jYWxDYWNoZS5oPgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4KICNpbmNsdWRlIDxydW50aW1lL1N0cnVj
dHVyZUlubGluZXMuaD4KIApAQCAtNTAsNyArNTEsNyBAQCBjbGFzcyBXRUJDT1JFX0VYUE9SVCBK
U0RPTUdsb2JhbE9iamVjdCA6CiBwcm90ZWN0ZWQ6CiAgICAgc3RydWN0IEpTRE9NR2xvYmFsT2Jq
ZWN0RGF0YTsKIAotICAgIEpTRE9NR2xvYmFsT2JqZWN0KEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVy
ZSosIFJlZjxET01XcmFwcGVyV29ybGQ+JiYsIGNvbnN0IEpTQzo6R2xvYmFsT2JqZWN0TWV0aG9k
VGFibGUqID0gMCk7CisgICAgSlNET01HbG9iYWxPYmplY3QoSlNDOjpWTSYsIEpTQzo6U3RydWN0
dXJlKiwgUmVmPERPTVdyYXBwZXJXb3JsZD4mJiwgY29uc3QgSlNDOjpHbG9iYWxPYmplY3RNZXRo
b2RUYWJsZSogPSBudWxscHRyLCBSZWZQdHI8SlNDOjpUaHJlYWRMb2NhbENhY2hlPiYmID0gbnVs
bHB0cik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpW
TSYsIEpTQzo6SlNPYmplY3QqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV2luZG93QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01XaW5kb3dCYXNlLmNwcAkocmV2aXNpb24gMjI4MTA2KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzks
NyArNzksNyBAQCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSBKU0RPTVdpbmRvCiB9Owog
CiBKU0RPTVdpbmRvd0Jhc2U6OkpTRE9NV2luZG93QmFzZShWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBSZWZQdHI8RE9NV2luZG93PiYmIHdpbmRvdywgSlNET01XaW5kb3dQcm94eSogcHJv
eHkpCi0gICAgOiBKU0RPTUdsb2JhbE9iamVjdCh2bSwgc3RydWN0dXJlLCBwcm94eS0+d29ybGQo
KSwgJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCisgICAgOiBKU0RPTUdsb2JhbE9iamVjdCh2
bSwgc3RydWN0dXJlLCBwcm94eS0+d29ybGQoKSwgJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUs
IHdpbmRvdyA/ICZ3aW5kb3ctPmRvY3VtZW50KCktPnRocmVhZExvY2FsQ2FjaGUoKSA6IG51bGxw
dHIpCiAgICAgLCBtX3dpbmRvd0Nsb3NlV2F0Y2hwb2ludHMoKHdpbmRvdyAmJiB3aW5kb3ctPmZy
YW1lKCkpID8gSXNXYXRjaGVkIDogSXNJbnZhbGlkYXRlZCkKICAgICAsIG1fd3JhcHBlZChXVEZN
b3ZlKHdpbmRvdykpCiAgICAgLCBtX3Byb3h5KHByb3h5KQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCShyZXZpc2lvbiAyMjgxMDYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogICogICAgICAgICAgIChDKSAxOTk5
IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAx
IERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDA2IEFs
ZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6
Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAx
MSwgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQpAQCAt
MTI2LDExICsxMjYsMTEgQEAKICNpbmNsdWRlICJOYXZpZ2F0aW9uRGlzYWJsZXIuaCIKICNpbmNs
dWRlICJOYXZpZ2F0aW9uU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiTmVzdGluZ0xldmVsSW5jcmVt
ZW50ZXIuaCIKLQogI2luY2x1ZGUgIk5vZGVJdGVyYXRvci5oIgogI2luY2x1ZGUgIk5vZGVSYXJl
RGF0YS5oIgogI2luY2x1ZGUgIk5vZGVXaXRoSW5kZXguaCIKICNpbmNsdWRlICJPcmlnaW5BY2Nl
c3NFbnRyeS5oIgorI2luY2x1ZGUgIk9yaWdpblRocmVhZExvY2FsQ2FjaGUuaCIKICNpbmNsdWRl
ICJPdmVyZmxvd0V2ZW50LmgiCiAjaW5jbHVkZSAiUGFnZUNvbnNvbGVDbGllbnQuaCIKICNpbmNs
dWRlICJQYWdlR3JvdXAuaCIKQEAgLTIxOCw2ICsyMTgsNyBAQAogI2luY2x1ZGUgPGN0aW1lPgog
I2luY2x1ZGUgPGluc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5oPgogI2luY2x1ZGUgPGluc3BlY3Rv
ci9TY3JpcHRDYWxsU3RhY2suaD4KKyNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CiAjaW5jbHVkZSA8
d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL0xhbmd1YWdlLmg+CiAjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC01NTQ4LDcgKzU1NDksNyBAQCB2b2lkIERvY3VtZW50
Ojppbml0U2VjdXJpdHlDb250ZXh0KCkKICAgICAgICAgICAgIC8vIFNvbWUgY2xpZW50cyB3YW50
IGxvY2FsIFVSTHMgdG8gaGF2ZSBldmVuIHRpZ2h0ZXIgcmVzdHJpY3Rpb25zIGJ5IGRlZmF1bHQs
IGFuZCBub3QgYmUgYWJsZSB0byBhY2Nlc3Mgb3RoZXIgbG9jYWwgZmlsZXMuCiAgICAgICAgICAg
ICAvLyBGSVhNRSA4MTU3ODogVGhlIG5hbWluZyBvZiB0aGlzIGlzIGNvbmZ1c2luZy4gRmlsZXMg
d2l0aCByZXN0cmljdGVkIGFjY2VzcyB0byBvdGhlciBsb2NhbCBmaWxlcwogICAgICAgICAgICAg
Ly8gc3RpbGwgY2FuIGhhdmUgb3RoZXIgcHJpdmlsZWdlcyB0aGF0IGNhbiBiZSByZW1lbWJlcmVk
LCB0aGVyZWJ5IG5vdCBtYWtpbmcgdGhlbSB1bmlxdWUgb3JpZ2lucy4KLSAgICAgICAgICAgIHNl
Y3VyaXR5T3JpZ2luKCkuZW5mb3JjZUZpbGVQYXRoU2VwYXJhdGlvbigpOworICAgICAgICAgICAg
c2VjdXJpdHlPcmlnaW4oKS5zZXRFbmZvcmNlc0ZpbGVQYXRoU2VwYXJhdGlvbigpOwogICAgICAg
ICB9CiAgICAgfQogICAgIHNlY3VyaXR5T3JpZ2luKCkuc2V0U3RvcmFnZUJsb2NraW5nUG9saWN5
KHNldHRpbmdzKCkuc3RvcmFnZUJsb2NraW5nUG9saWN5KCkpOwpAQCAtNzc0MCw0ICs3NzQxLDE2
IEBAIHZvaWQgRG9jdW1lbnQ6OnNldFNlcnZpY2VXb3JrZXJDb25uZWN0aW8KIH0KICNlbmRpZgog
CitKU0M6OlRocmVhZExvY2FsQ2FjaGUmIERvY3VtZW50Ojp0aHJlYWRMb2NhbENhY2hlKCkKK3sK
KyAgICBpZiAoIW1fdGhyZWFkTG9jYWxDYWNoZSkgeworICAgICAgICBTZWN1cml0eU9yaWdpbiYg
b3JpZ2luID0gc2VjdXJpdHlPcmlnaW4oKTsKKyAgICAgICAgaWYgKG9yaWdpbi5pc1VuaXF1ZSgp
IHx8IChvcmlnaW4uaXNMb2NhbCgpICYmIG9yaWdpbi5lbmZvcmNlc0ZpbGVQYXRoU2VwYXJhdGlv
bigpKSkKKyAgICAgICAgICAgIG1fdGhyZWFkTG9jYWxDYWNoZSA9IEpTQzo6VGhyZWFkTG9jYWxD
YWNoZTo6Y3JlYXRlKGNvbW1vblZNKCkuaGVhcCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG1fdGhyZWFkTG9jYWxDYWNoZSA9IE9yaWdpblRocmVhZExvY2FsQ2FjaGU6OmNyZWF0ZShvcmln
aW4pOworICAgIH0KKyAgICByZXR1cm4gKm1fdGhyZWFkTG9jYWxDYWNoZTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDIyODEw
NikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiVXNlckFjdGlvbkVsZW1lbnRTZXQuaCIKICNpbmNsdWRl
ICJWaWV3cG9ydEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlZpc2liaWxpdHlTdGF0ZS5oIgorI2lu
Y2x1ZGUgPGhlYXAvVGhyZWFkTG9jYWxDYWNoZS5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQu
aD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAt
MTQxMSw2ICsxNDEyLDggQEAgcHVibGljOgogICAgIGJvb2wgaGFuZGxpbmdUb3VjaEV2ZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9oYW5kbGluZ1RvdWNoRXZlbnQ7IH0KICNlbmRpZgogCisgICAgSlND
OjpUaHJlYWRMb2NhbENhY2hlJiB0aHJlYWRMb2NhbENhY2hlKCk7CisKIHByb3RlY3RlZDoKICAg
ICBlbnVtIENvbnN0cnVjdGlvbkZsYWdzIHsgU3ludGhlc2l6ZWQgPSAxLCBOb25SZW5kZXJlZFBs
YWNlaG9sZGVyID0gMSA8PCAxIH07CiAgICAgRG9jdW1lbnQoRnJhbWUqLCBjb25zdCBVUkwmLCB1
bnNpZ25lZCA9IERlZmF1bHREb2N1bWVudENsYXNzLCB1bnNpZ25lZCBjb25zdHJ1Y3Rpb25GbGFn
cyA9IDApOwpAQCAtMTg5NSw2ICsxODk4LDggQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgSGFz
aFNldDxBcHBsaWNhdGlvblN0YXRlQ2hhbmdlTGlzdGVuZXIqPiBtX2FwcGxpY2F0aW9uU3RhdGVD
aGFuZ2VMaXN0ZW5lcnM7CisgICAgCisgICAgUmVmUHRyPEpTQzo6VGhyZWFkTG9jYWxDYWNoZT4g
bV90aHJlYWRMb2NhbENhY2hlOwogfTsKIAogRWxlbWVudCogZXZlbnRUYXJnZXRFbGVtZW50Rm9y
RG9jdW1lbnQoRG9jdW1lbnQqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvT3JpZ2luVGhy
ZWFkTG9jYWxDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Pcmln
aW5UaHJlYWRMb2NhbENhY2hlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL09yaWdpblRocmVhZExvY2FsQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9yaWdpblRocmVhZExvY2FsQ2FjaGUuaCIKKwor
I2luY2x1ZGUgIkNvbW1vblZNLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5IYXNoLmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiwgT3JpZ2luVGhyZWFkTG9jYWxDYWNoZSo+IFRocmVhZExvY2FsQ2FjaGVNYXA7CisK
K3N0YXRpYyBUaHJlYWRMb2NhbENhY2hlTWFwJiB0aHJlYWRMb2NhbENhY2hlTWFwKCkKK3sKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VGhyZWFkTG9jYWxDYWNoZU1hcD4gbWFwOworICAgIHJl
dHVybiBtYXA7Cit9CisKK1JlZjxPcmlnaW5UaHJlYWRMb2NhbENhY2hlPiBPcmlnaW5UaHJlYWRM
b2NhbENhY2hlOjpjcmVhdGUoU2VjdXJpdHlPcmlnaW4mIGtleSkKK3sKKyAgICBhdXRvIGl0ZXIg
PSB0aHJlYWRMb2NhbENhY2hlTWFwKCkuZmluZCgma2V5KTsKKyAgICBpZiAoaXRlciAhPSB0aHJl
YWRMb2NhbENhY2hlTWFwKCkuZW5kKCkpCisgICAgICAgIHJldHVybiAqaXRlci0+dmFsdWU7Cisg
ICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT3JpZ2luVGhyZWFkTG9jYWxDYWNoZShrZXkp
KTsKK30KKworT3JpZ2luVGhyZWFkTG9jYWxDYWNoZTo6fk9yaWdpblRocmVhZExvY2FsQ2FjaGUo
KQoreworICAgIGJvb2wgcmVzdWx0ID0gdGhyZWFkTG9jYWxDYWNoZU1hcCgpLnJlbW92ZShtX2tl
eSk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKK30KKworT3JpZ2luVGhyZWFkTG9jYWxD
YWNoZTo6T3JpZ2luVGhyZWFkTG9jYWxDYWNoZShTZWN1cml0eU9yaWdpbiYga2V5KQorICAgIDog
VGhyZWFkTG9jYWxDYWNoZShjb21tb25WTSgpLmhlYXAsIEpTQzo6dW5pcXVlU2VjdXJpdHlPcmln
aW5Ub2tlbigpKQorICAgICwgbV9rZXkoJmtleSkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IHRocmVh
ZExvY2FsQ2FjaGVNYXAoKS5hZGQoJmtleSwgdGhpcyk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVz
dWx0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL09yaWdpblRocmVhZExvY2FsQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL09yaWdpblRocmVhZExvY2FsQ2FjaGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL09yaWdpblRocmVhZExvY2FsQ2FjaGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNs
dWRlIDxoZWFwL1RocmVhZExvY2FsQ2FjaGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBPcmlnaW5UaHJlYWRMb2NhbENhY2hlIGZpbmFsIDogcHVibGljIEpTQzo6VGhyZWFkTG9j
YWxDYWNoZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxPcmlnaW5UaHJlYWRMb2NhbENhY2hl
PiBjcmVhdGUoU2VjdXJpdHlPcmlnaW4mKTsKKyAgICAKKyAgICB+T3JpZ2luVGhyZWFkTG9jYWxD
YWNoZSgpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IE9yaWdpblRocmVhZExv
Y2FsQ2FjaGUoU2VjdXJpdHlPcmlnaW4mKTsKKyAgICAKKyAgICBSZWZQdHI8U2VjdXJpdHlPcmln
aW4+IG1fa2V5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkocmV2aXNpb24gMjI4MTA2KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw3
ICsxODAsNyBAQCBTZWN1cml0eU9yaWdpbjo6U2VjdXJpdHlPcmlnaW4oY29uc3QgU2VjCiAgICAg
LCBtX2RvbWFpbldhc1NldEluRE9NIHsgb3RoZXItPm1fZG9tYWluV2FzU2V0SW5ET00gfQogICAg
ICwgbV9jYW5Mb2FkTG9jYWxSZXNvdXJjZXMgeyBvdGhlci0+bV9jYW5Mb2FkTG9jYWxSZXNvdXJj
ZXMgfQogICAgICwgbV9zdG9yYWdlQmxvY2tpbmdQb2xpY3kgeyBvdGhlci0+bV9zdG9yYWdlQmxv
Y2tpbmdQb2xpY3kgfQotICAgICwgbV9lbmZvcmNlRmlsZVBhdGhTZXBhcmF0aW9uIHsgb3RoZXIt
Pm1fZW5mb3JjZUZpbGVQYXRoU2VwYXJhdGlvbiB9CisgICAgLCBtX2VuZm9yY2VzRmlsZVBhdGhT
ZXBhcmF0aW9uIHsgb3RoZXItPm1fZW5mb3JjZXNGaWxlUGF0aFNlcGFyYXRpb24gfQogICAgICwg
bV9uZWVkc1N0b3JhZ2VBY2Nlc3NGcm9tRmlsZVVSTHNRdWlyayB7IG90aGVyLT5tX25lZWRzU3Rv
cmFnZUFjY2Vzc0Zyb21GaWxlVVJMc1F1aXJrIH0KICAgICAsIG1faXNQb3RlbnRpYWxseVRydXN0
d29ydGh5IHsgb3RoZXItPm1faXNQb3RlbnRpYWxseVRydXN0d29ydGh5IH0KIHsKQEAgLTI4Myw3
ICsyODMsNyBAQCBib29sIFNlY3VyaXR5T3JpZ2luOjpwYXNzZXNGaWxlQ2hlY2soY29uCiB7CiAg
ICAgQVNTRVJUKGlzTG9jYWwoKSAmJiBvdGhlci5pc0xvY2FsKCkpOwogCi0gICAgcmV0dXJuICFt
X2VuZm9yY2VGaWxlUGF0aFNlcGFyYXRpb24gJiYgIW90aGVyLm1fZW5mb3JjZUZpbGVQYXRoU2Vw
YXJhdGlvbjsKKyAgICByZXR1cm4gIW1fZW5mb3JjZXNGaWxlUGF0aFNlcGFyYXRpb24gJiYgIW90
aGVyLm1fZW5mb3JjZXNGaWxlUGF0aFNlcGFyYXRpb247CiB9CiAKIGJvb2wgU2VjdXJpdHlPcmln
aW46OmNhblJlcXVlc3QoY29uc3QgVVJMJiB1cmwpIGNvbnN0CkBAIC00NTMsMTAgKzQ1MywxMCBA
QCBTdHJpbmcgU2VjdXJpdHlPcmlnaW46OmRvbWFpbkZvckNhY2hlUGFyCiAgICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7CiB9CiAKLXZvaWQgU2VjdXJpdHlPcmlnaW46OmVuZm9yY2VGaWxlUGF0aFNl
cGFyYXRpb24oKQordm9pZCBTZWN1cml0eU9yaWdpbjo6c2V0RW5mb3JjZXNGaWxlUGF0aFNlcGFy
YXRpb24oKQogewogICAgIEFTU0VSVChpc0xvY2FsKCkpOwotICAgIG1fZW5mb3JjZUZpbGVQYXRo
U2VwYXJhdGlvbiA9IHRydWU7CisgICAgbV9lbmZvcmNlc0ZpbGVQYXRoU2VwYXJhdGlvbiA9IHRy
dWU7CiB9CiAKIGJvb2wgU2VjdXJpdHlPcmlnaW46OmlzTG9jYWwoKSBjb25zdApAQCAtNDY4LDcg
KzQ2OCw3IEBAIFN0cmluZyBTZWN1cml0eU9yaWdpbjo6dG9TdHJpbmcoKSBjb25zdAogewogICAg
IGlmIChpc1VuaXF1ZSgpKQogICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJudWxsIik7Ci0g
ICAgaWYgKG1fcHJvdG9jb2wgPT0gImZpbGUiICYmIG1fZW5mb3JjZUZpbGVQYXRoU2VwYXJhdGlv
bikKKyAgICBpZiAobV9wcm90b2NvbCA9PSAiZmlsZSIgJiYgbV9lbmZvcmNlc0ZpbGVQYXRoU2Vw
YXJhdGlvbikKICAgICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgibnVsbCIpOwogICAgIHJldHVy
biB0b1Jhd1N0cmluZygpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9y
aWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4u
aAkocmV2aXNpb24gMjI4MTA2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdp
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTY1LDcgKzE2NSw4IEBAIHB1YmxpYzoKICAgICAvLyBN
YXJrcyBhIGZpbGU6Ly8gb3JpZ2luIGFzIGJlaW5nIGluIGEgZG9tYWluIGRlZmluZWQgYnkgaXRz
IHBhdGguCiAgICAgLy8gRklYTUUgODE1Nzg6IFRoZSBuYW1pbmcgb2YgdGhpcyBpcyBjb25mdXNp
bmcuIEZpbGVzIHdpdGggcmVzdHJpY3RlZCBhY2Nlc3MgdG8gb3RoZXIgbG9jYWwgZmlsZXMKICAg
ICAvLyBzdGlsbCBjYW4gaGF2ZSBvdGhlciBwcml2aWxlZ2VzIHRoYXQgY2FuIGJlIHJlbWVtYmVy
ZWQsIHRoZXJlYnkgbm90IG1ha2luZyB0aGVtIHVuaXF1ZS4KLSAgICB2b2lkIGVuZm9yY2VGaWxl
UGF0aFNlcGFyYXRpb24oKTsKKyAgICB2b2lkIHNldEVuZm9yY2VzRmlsZVBhdGhTZXBhcmF0aW9u
KCk7CisgICAgYm9vbCBlbmZvcmNlc0ZpbGVQYXRoU2VwYXJhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZW5mb3JjZXNGaWxlUGF0aFNlcGFyYXRpb247IH0KIAogICAgIC8vIENvbnZlcnQgdGhpcyBT
ZWN1cml0eU9yaWdpbiBpbnRvIGEgc3RyaW5nLiBUaGUgc3RyaW5nCiAgICAgLy8gcmVwcmVzZW50
YXRpb24gb2YgYSBTZWN1cml0eU9yaWdpbiBpcyBzaW1pbGFyIHRvIGEgVVJMLCBleGNlcHQgaXQK
QEAgLTIyOSw3ICsyMzAsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9kb21haW5XYXNTZXRJbkRP
TSB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2NhbkxvYWRMb2NhbFJlc291cmNlcyB7IGZhbHNlIH07
CiAgICAgU3RvcmFnZUJsb2NraW5nUG9saWN5IG1fc3RvcmFnZUJsb2NraW5nUG9saWN5IHsgQWxs
b3dBbGxTdG9yYWdlIH07Ci0gICAgYm9vbCBtX2VuZm9yY2VGaWxlUGF0aFNlcGFyYXRpb24geyBm
YWxzZSB9OworICAgIGJvb2wgbV9lbmZvcmNlc0ZpbGVQYXRoU2VwYXJhdGlvbiB7IGZhbHNlIH07
CiAgICAgYm9vbCBtX25lZWRzU3RvcmFnZUFjY2Vzc0Zyb21GaWxlVVJMc1F1aXJrIHsgZmFsc2Ug
fTsKICAgICBib29sIG1faXNQb3RlbnRpYWxseVRydXN0d29ydGh5IHsgZmFsc2UgfTsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>333139</attachid>
            <date>2018-02-05 18:00:40 -0800</date>
            <delta_ts>2018-02-05 18:00:40 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>58342</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI4MTA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDczIEBA
CisyMDE4LTAxLTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R2xvYmFsIG9iamVjdHMgc2hvdWxkIGJlIGFibGUgdG8gdXNlIFRMQ3MgdG8gYWxsb2NhdGUgZnJv
bSBkaWZmZXJlbnQgYmxvY2tzIGZyb20gZWFjaCBvdGhlcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgyMjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
SkYgQmFzdGllbi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgdXNlcyBUTENzIHRvIGNyZWF0ZSBh
dCBsZWFzdCBgbWluaW11bURpc3RhbmNlQmV0d2VlbkNlbGxzRnJvbURpZmZlcmVuT3JpZ2luc2Ag
Ynl0ZXMgb2YKKyAgICAgICAgZGlzdGFuY2UgYmV0d2VlbiBvYmplY3RzIGZyb20gZGlmZmVyZW50
IG9yaWdpbnMsIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tYmluYXRpb24gb2YgdGhpbmdzLiBGb3IK
KyAgICAgICAgc2hvcnQgbGV0cyByZWZlciB0byB0aGF0IGNvbnN0YW50IGFzIEsuCisgICAgICAg
IAorICAgICAgICAtIFNpbmNlIHIyMjc3MjEsIExhcmdlQWxsb2NhdGlvbiBwdXRzIEsgYnl0ZXMg
cGFkZGluZyBhdCB0aGUgZW5kIG9mIGVhY2ggYWxsb2NhdGlvbi4KKyAgICAgICAgCisgICAgICAg
IC0gU2luY2UgcjIyNzcxOCwgTWFya2VkQmxvY2sgcHV0cyBhdCBsZWFzdCBLIGJ5dGVzIGluIGl0
cyBmb290ZXIuCisgICAgICAgIAorICAgICAgICAtIFNpbmNlIHIyMjc2MTcsIGdsb2JhbCBvYmpl
Y3RzIGNhbiBoYXZlIHRoZWlyIG93biBUTENzLCB3aGljaCBtYWtlIHRoZW0gYWxsb2NhdGUgZnJv
bSBhCisgICAgICAgICAgZGlmZmVyZW50IHNldCBvZiBibG9ja3MgdGhhbiBvdGhlciBnbG9iYWwg
b2JqZWN0cy4gVGhlIFRMQyBvZiBhIGdsb2JhbCBvYmplY3QgY29tZXMgaW50bworICAgICAgICAg
IGVmZmVjdCB3aGVuIHlvdSBlbnRlciB0aGUgVk0gdmlhIHRoYXQgZ2xvYmFsIG9iamVjdC4KKyAg
ICAgICAgCisgICAgICAgIC0gV2l0aCB0aGlzIGNoYW5nZSwgVExDcyBhbmQgYmxvY2tzIGJvdGgg
aGF2ZSBzZWN1cml0eSBvcmlnaW5zLiBBIFRMQyB3aWxsIG9ubHkgdXNlIGJsb2NrcyB0aGF0Cisg
ICAgICAgICAgc2hhcmUgdGhlIHNhbWUgc2VjdXJpdHkgb3JpZ2luIG9yIGVtcHR5IGJsb2NrcyAo
aW4gd2hpY2ggY2FzZSB3ZSB6ZXJvIHRoZSBibG9jayBhbmQgY2hhbmdlCisgICAgICAgICAgaXRz
IHNlY3VyaXR5IG9yaWdpbikuCisgICAgICAgIAorICAgICAgICBXZWJDb3JlIGRldGVybWluZXMg
dGhlIFRMQy1HbG9iYWxPYmplY3QgbWFwcGluZy4gQnkgZGVmYXVsdCwgZ2xvYmFsIG9iamVjdHMg
d291bGQgc2ltcGx5IHVzZQorICAgICAgICB0aGUgVk0ncyBkZWZhdWx0IFRMQy4gV2ViQ29yZSBt
YWtlcyBpdCBzbyB0aGF0IERPTSB3aW5kb3dzIChidXQgbm90IHdvcmtlciBnbG9iYWwgb2JqZWN0
cykgZ2V0CisgICAgICAgIGEgVExDIGJhc2VkIG9uIHRoZWlyIGRvY3VtZW50J3MgU2VjdXJpdHlP
cmlnaW4uCisgICAgICAgIAorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogaGVhcC9CbG9j
a0RpcmVjdG9yeS5jcHA6CisgICAgICAgIChKU0M6OkJsb2NrRGlyZWN0b3J5OjpmaW5kQmxvY2tG
b3JBbGxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OnByZXBhcmVGb3JB
bGxvY2F0aW9uKToKKyAgICAgICAgKiBoZWFwL0Jsb2NrRGlyZWN0b3J5Lmg6CisgICAgICAgICog
aGVhcC9Mb2NhbEFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjpM
b2NhbEFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjpyZXNldCk6Cisg
ICAgICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjp+TG9jYWxBbGxvY2F0b3IpOgorICAgICAgICAo
SlNDOjpMb2NhbEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6Okxv
Y2FsQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZVdpdGhvdXRDb2xsZWN0aW5nKToKKyAgICAgICAgKiBo
ZWFwL0xvY2FsQWxsb2NhdG9yLmg6CisgICAgICAgIChKU0M6OkxvY2FsQWxsb2NhdG9yOjp0bGMg
Y29uc3QpOgorICAgICAgICAqIGhlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwOgor
ICAgICAgICAqIGhlYXAvTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaDoKKyAgICAgICAgKiBo
ZWFwL01hcmtlZEJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6
YXNzb2NpYXRlV2l0aE9yaWdpbik6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAg
ICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpzZWN1cml0eU9yaWdpblRva2VuIGNvbnN0
KToKKyAgICAgICAgKiBoZWFwL1NlY3VyaXR5T3JpZ2luVG9rZW4uY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6dW5pcXVlU2VjdXJpdHlPcmlnaW5Ub2tlbik6CisgICAgICAgICogaGVhcC9TZWN1
cml0eU9yaWdpblRva2VuLmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAvVGhyZWFkTG9jYWxDYWNo
ZS5jcHA6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGU6OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OlRocmVhZExvY2FsQ2FjaGU6OlRocmVhZExvY2FsQ2FjaGUpOgorICAgICAgICAoSlND
OjpUaHJlYWRMb2NhbENhY2hlOjphbGxvY2F0ZURhdGEpOgorICAgICAgICAoSlNDOjpUaHJlYWRM
b2NhbENhY2hlOjppbnN0YWxsU2xvdyk6CisgICAgICAgICogaGVhcC9UaHJlYWRMb2NhbENhY2hl
Lmg6CisgICAgICAgIChKU0M6OlRocmVhZExvY2FsQ2FjaGU6OnNlY3VyaXR5T3JpZ2luVG9rZW4g
Y29uc3QpOgorICAgICAgICAqIGhlYXAvVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFsbCk6CisgICAgICAgICogcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpKU0dsb2Jh
bE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpjcmVhdGVUaHJlYWRMb2Nh
bENhY2hlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsT2JqZWN0Ojp0aHJlYWRMb2NhbENhY2hlKToKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxPYmplY3Q6OnRocmVhZExvY2FsQ2FjaGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcDoKKyAgICAgICAgKEpTQzo6Vk1FbnRyeVNjb3BlOjpW
TUVudHJ5U2NvcGUpOgorICAgICAgICAoSlNDOjpWTUVudHJ5U2NvcGU6On5WTUVudHJ5U2NvcGUp
OgorICAgICAgICAqIHJ1bnRpbWUvVk1FbnRyeVNjb3BlLmg6CisKIDIwMTgtMDItMDUgIERvbiBP
bG1zdGVhZCAgPGRvbi5vbG1zdGVhZEBzb255LmNvbT4KIAogICAgICAgICBKYXZhU2NyaXB0Q29y
ZSBmaWxlcyBzaG91bGQgbm90IGJlIGluY2x1ZGVkIHJlbGF0aXZlbHkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIyODEwNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTEzLDYgKzUxMyw3
IEBAIHNldChKYXZhU2NyaXB0Q29yZV9GT1JXQVJESU5HX0hFQURFUlMKICAgICBoZWFwL011dGF0
b3JTdGF0ZS5oCiAgICAgaGVhcC9SZWdpc3RlclN0YXRlLmgKICAgICBoZWFwL1J1bm5pbmdTY29w
ZS5oCisgICAgaGVhcC9TZWN1cml0eU9yaWdpblRva2VuLmgKICAgICBoZWFwL1NpbXBsZU1hcmtp
bmdDb25zdHJhaW50LmgKICAgICBoZWFwL1Nsb3RWaXNpdG9yLmgKICAgICBoZWFwL1Nsb3RWaXNp
dG9ySW5saW5lcy5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAy
MjgxMDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNCArMSw0IEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogLy8KIC8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogLy8gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
MTIsNiArNTEyLDcgQEAgaGVhcC9NYXJraW5nQ29uc3RyYWludFNldC5jcHAKIGhlYXAvTWFya2lu
Z0NvbnN0cmFpbnRTb2x2ZXIuY3BwCiBoZWFwL011dGF0b3JTY2hlZHVsZXIuY3BwCiBoZWFwL011
dGF0b3JTdGF0ZS5jcHAKK2hlYXAvU2VjdXJpdHlPcmlnaW5Ub2tlbi5jcHAKIGhlYXAvU2ltcGxl
TWFya2luZ0NvbnN0cmFpbnQuY3BwCiBoZWFwL1Nsb3RWaXNpdG9yLmNwcAogaGVhcC9TcGFjZVRp
bWVNdXRhdG9yU2NoZWR1bGVyLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDIyODEwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQsNiArMjk0
LDcgQEAKIAkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2MENC
QUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDkxNDYwQ0JCNzAwMTMxRjhGIC8qIFZpcnR1
YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY0MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDI2QTRCMTQ2MENE
NkUwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNDJC
M0MzMjAxRUM5RkYwMDM1NzAzMSAvKiBTZWN1cml0eU9yaWdpblRva2VuLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyQjNDMjIwMUVDOUZEMDAzNTcw
MzEgLyogU2VjdXJpdHlPcmlnaW5Ub2tlbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGNDMxNzM4MTQ2QkFDNjkwMDdFMzg5MCAvKiBMaXN0YWJs
ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNDMxNzM2MTQ2QkFDNjUwMDdFMzg5MCAvKiBMaXN0YWJsZUhhbmRsZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQ1NzAzOTFCRTQ0Qzkx
MDA2MkE2MjkgLyogQWlyRWxpbWluYXRlRGVhZENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDU3MDM3MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJF
bGltaW5hdGVEZWFkQ29kZS5oICovOyB9OwogCQkwRjQ1NzAzRDFCRTQ1RjBBMDA2MkE2MjkgLyog
QWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0NTcwM0IxQkU0NUYwQTAwNjJBNjI5IC8qIEFpclJlcG9ydFVzZWRS
ZWdpc3RlcnMuaCAqLzsgfTsKQEAgLTIyNjIsNiArMjI2Myw4IEBACiAJCTBGNDI2QTQ1MTQ2MENC
QUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFZhbHVlUmVjb3ZlcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0
MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBWaXJ0dWFsUmVnaXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YUZvcm1hdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjQyQjNDMDIwMUVCNTA5MDAzNTcwMzEgLyogQWxsb2NhdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFsbG9jYXRvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDJCM0MyMjAxRUM5RkQwMDM1NzAzMSAvKiBT
ZWN1cml0eU9yaWdpblRva2VuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNl
Y3VyaXR5T3JpZ2luVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MzE3
MzYxNDZCQUM2NTAwN0UzODkwIC8qIExpc3RhYmxlSGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBMaXN0YWJsZUhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY0NTcwMzYxQkU0NEM5MTAwNjJBNjI5IC8qIEFpckVsaW1pbmF0ZURlYWRDb2Rl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckVsaW1pbmF0ZURl
YWRDb2RlLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJFbGltaW5hdGVEZWFkQ29kZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDU3MDM3MUJFNDRDOTEwMDYyQTYyOSAvKiBBaXJF
bGltaW5hdGVEZWFkQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJF
bGltaW5hdGVEZWFkQ29kZS5oOyBwYXRoID0gYjMvYWlyL0FpckVsaW1pbmF0ZURlYWRDb2RlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NTU5LDIxICs1NTYyLDE0IEBACiAJCTE0
MkUzMTJBMTM0RkYwQTYwMEFGQURCNSAvKiBoZWFwICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkwRjc1QTA1NDIwMEQyNUVGMDAzOEUyQ0YgLyogQWxsb2Nh
dG9yLmggKi8sCi0JCQkJMEY3NUEwNUQyMDBEMjVGMTAwMzhFMkNGIC8qIEFsbG9jYXRvcklubGlu
ZXMuaCAqLywKLQkJCQkwRjc1QTA1OTIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3Iu
Y3BwICovLAotCQkJCTBGNzVBMDU3MjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5o
ICovLAotCQkJCTBGNzVBMDVBMjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvcklubGlu
ZXMuaCAqLywKLQkJCQkwRjc1QTA1ODIwMEQyNUYwMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNo
ZS5jcHAgKi8sCi0JCQkJMEY3NUEwNTUyMDBEMjVFRjAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2Fj
aGUuaCAqLywKLQkJCQkwRjc1QTA1NjIwMEQyNUVGMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNo
ZUlubGluZXMuaCAqLywKLQkJCQkwRjc1QTA1QjIwMEQyNUYxMDAzOEUyQ0YgLyogVGhyZWFkTG9j
YWxDYWNoZUxheW91dC5jcHAgKi8sCi0JCQkJMEY3NUEwNUMyMDBEMjVGMTAwMzhFMkNGIC8qIFRo
cmVhZExvY2FsQ2FjaGVMYXlvdXQuaCAqLywKIAkJCQkwRkVDM0M1MDFGMzNBNDE2MDBGNTlCNkMg
LyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJMEZFQzNDNTExRjMzQTQxNjAw
RjU5QjZDIC8qIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCAqLywKIAkJCQkwRkE3NjIwQTFEQjk1
OUY2MDBCN0EyRkQgLyogQWxsb2NhdGluZ1Njb3BlLmggKi8sCiAJCQkJMEZEQ0UxMUIxRkFFNjFG
NDAwNkYzOTAxIC8qIEFsbG9jYXRpb25GYWlsdXJlTW9kZS5oICovLAorCQkJCTBGNDJCM0MwMjAx
RUI1MDkwMDM1NzAzMSAvKiBBbGxvY2F0b3IuY3BwICovLAorCQkJCTBGNzVBMDU0MjAwRDI1RUYw
MDM4RTJDRiAvKiBBbGxvY2F0b3IuaCAqLywKIAkJCQkwRjMwQ0I1RDFGQ0U0NkI0MDA0QjUzMjMg
LyogQWxsb2NhdG9yRm9yTW9kZS5oICovLAorCQkJCTBGNzVBMDVEMjAwRDI1RjEwMDM4RTJDRiAv
KiBBbGxvY2F0b3JJbmxpbmVzLmggKi8sCiAJCQkJMEZCNDY3N0UxRkREQTZFNTAwM0ZDQjA5IC8q
IEF0b21JbmRpY2VzLmggKi8sCiAJCQkJQzJCOTE2QzQxNERBMDQwQzAwQ0JBQzg2IC8qIEJsb2Nr
RGlyZWN0b3J5LmNwcCAqLywKIAkJCQlDMkI5MTZDMTE0REEwMTRFMDBDQkFDODYgLyogQmxvY2tE
aXJlY3RvcnkuaCAqLywKQEAgLTU2NzQsNiArNTY3MCw5IEBACiAJCQkJMEYwNzBBNDUxRDU0M0E4
OTAwNkU3MjMyIC8qIExhcmdlQWxsb2NhdGlvbi5jcHAgKi8sCiAJCQkJMEYwNzBBNDYxRDU0M0E4
OTAwNkU3MjMyIC8qIExhcmdlQWxsb2NhdGlvbi5oICovLAogCQkJCTBGNDMxNzM2MTQ2QkFDNjUw
MDdFMzg5MCAvKiBMaXN0YWJsZUhhbmRsZXIuaCAqLywKKwkJCQkwRjc1QTA1OTIwMEQyNUYwMDAz
OEUyQ0YgLyogTG9jYWxBbGxvY2F0b3IuY3BwICovLAorCQkJCTBGNzVBMDU3MjAwRDI1RjAwMDM4
RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5oICovLAorCQkJCTBGNzVBMDVBMjAwRDI1RjAwMDM4RTJD
RiAvKiBMb2NhbEFsbG9jYXRvcklubGluZXMuaCAqLywKIAkJCQkwRjIwOEFENjFERjA5MjVBMDA3
RDMyNjkgLyogTG9ja0R1cmluZ01hcmtpbmcuaCAqLywKIAkJCQkxNEI3MjMzRjEyRDdEMERBMDAz
QkQ1RUQgLyogTWFjaGluZVN0YWNrTWFya2VyLmNwcCAqLywKIAkJCQkxNEI3MjM0MDEyRDdEMERB
MDAzQkQ1RUQgLyogTWFjaGluZVN0YWNrTWFya2VyLmggKi8sCkBAIC01NzAzLDYgKzU3MDIsNyBA
QAogCQkJCTBGRDBFNUVGMUU0NkJGMjMwMDA2QUIwOCAvKiBSZWdpc3RlclN0YXRlLmggKi8sCiAJ
CQkJMEY3Q0Y5NEUxREJFRUU4NjAwOThDQzEyIC8qIFJlbGVhc2VIZWFwQWNjZXNzU2NvcGUuaCAq
LywKIAkJCQkwRjJDNjNBOTFFNEZBNDJDMDBDMTM4MzkgLyogUnVubmluZ1Njb3BlLmggKi8sCisJ
CQkJMEY0MkIzQzIyMDFFQzlGRDAwMzU3MDMxIC8qIFNlY3VyaXR5T3JpZ2luVG9rZW4uaCAqLywK
IAkJCQkwRjREOEM3NjFGQ0EzQ0YyMDAxRDMyQUMgLyogU2ltcGxlTWFya2luZ0NvbnN0cmFpbnQu
Y3BwICovLAogCQkJCTBGNEQ4Qzc3MUZDQTNDRjMwMDFEMzJBQyAvKiBTaW1wbGVNYXJraW5nQ29u
c3RyYWludC5oICovLAogCQkJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRv
ci5jcHAgKi8sCkBAIC01NzI0LDYgKzU3MjQsMTEgQEAKIAkJCQkwRkQ3OUEyQzFFQkJCREIyMDBE
QTg4RDMgLyogU3luY2hyb25vdXNuZXNzLmggKi8sCiAJCQkJMEYxRkIzOEExRTE3M0E2MjAwQTlC
RTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgKi8sCiAJ
CQkJMEYxRkIzOEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0
YXRvclNjaGVkdWxlci5oICovLAorCQkJCTBGNzVBMDU4MjAwRDI1RjAwMDM4RTJDRiAvKiBUaHJl
YWRMb2NhbENhY2hlLmNwcCAqLywKKwkJCQkwRjc1QTA1NTIwMEQyNUVGMDAzOEUyQ0YgLyogVGhy
ZWFkTG9jYWxDYWNoZS5oICovLAorCQkJCTBGNzVBMDU2MjAwRDI1RUYwMDM4RTJDRiAvKiBUaHJl
YWRMb2NhbENhY2hlSW5saW5lcy5oICovLAorCQkJCTBGNzVBMDVCMjAwRDI1RjEwMDM4RTJDRiAv
KiBUaHJlYWRMb2NhbENhY2hlTGF5b3V0LmNwcCAqLywKKwkJCQkwRjc1QTA1QzIwMEQyNUYxMDAz
OEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oICovLAogCQkJCTE0MTQ0OENDMTNBMTc4
MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCAqLywKIAkJCQkwRjVGMDhDRTE0NkM3NjJG
MDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oICovLAogCQkJCTBGNEQ4QzcyMUZD
N0E5NzMwMDFEMzJBQyAvKiBWaXNpdENvdW50ZXIuaCAqLywKQEAgLTg1MjIsNiArODUyNyw3IEBA
CiAJCQkJMEY3QzM5RkYxQzkwQzU1QjAwNDgwMTUxIC8qIERGR09wSW5mby5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTdEODlDRkUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJpbGl0eUFu
YWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5
NCAvKiBERkdPU1JFbnRyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0MkIzQzMyMDFFQzlGRjAw
MzU3MDMxIC8qIFNlY3VyaXR5T3JpZ2luVG9rZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhB
MzI2MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVDMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JF
eGl0QmFzZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9CbG9ja0RpcmVjdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCShyZXZpc2lvbiAyMjgxMDYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDYgKzMzLDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxv
Y2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCisjaW5jbHVkZSAiVGhyZWFk
TG9jYWxDYWNoZUlubGluZXMuaCIKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgPHd0Zi9DdXJy
ZW50VGltZS5oPgogCkBAIC04MCwxNCArODEsMjAgQEAgTWFya2VkQmxvY2s6OkhhbmRsZSogQmxv
Y2tEaXJlY3Rvcnk6OmZpbgogICAgIHJldHVybiBtX2Jsb2Nrc1ttX2VtcHR5Q3Vyc29yXTsKIH0K
IAotTWFya2VkQmxvY2s6OkhhbmRsZSogQmxvY2tEaXJlY3Rvcnk6OmZpbmRCbG9ja0ZvckFsbG9j
YXRpb24oKQorTWFya2VkQmxvY2s6OkhhbmRsZSogQmxvY2tEaXJlY3Rvcnk6OmZpbmRCbG9ja0Zv
ckFsbG9jYXRpb24oTG9jYWxBbGxvY2F0b3ImIGFsbG9jYXRvcikKIHsKLSAgICBtX2FsbG9jYXRp
b25DdXJzb3IgPSAobV9jYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IHwgbV9lbXB0eSkuZmluZEJpdCht
X2FsbG9jYXRpb25DdXJzb3IsIHRydWUpOwotICAgIGlmIChtX2FsbG9jYXRpb25DdXJzb3IgPj0g
bV9ibG9ja3Muc2l6ZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBzZXRJ
c0NhbkFsbG9jYXRlQnV0Tm90RW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBtX2FsbG9jYXRpb25D
dXJzb3IsIGZhbHNlKTsKLSAgICByZXR1cm4gbV9ibG9ja3NbbV9hbGxvY2F0aW9uQ3Vyc29yXTsK
KyAgICBmb3IgKDs7KSB7CisgICAgICAgIGFsbG9jYXRvci5tX2FsbG9jYXRpb25DdXJzb3IgPSAo
bV9jYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5IHwgbV9lbXB0eSkuZmluZEJpdChhbGxvY2F0b3IubV9h
bGxvY2F0aW9uQ3Vyc29yLCB0cnVlKTsKKyAgICAgICAgaWYgKGFsbG9jYXRvci5tX2FsbG9jYXRp
b25DdXJzb3IgPj0gbV9ibG9ja3Muc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIAorICAgICAgICBzaXplX3QgYmxvY2tJbmRleCA9IGFsbG9jYXRvci5tX2FsbG9j
YXRpb25DdXJzb3IrKzsKKyAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogcmVzdWx0ID0gbV9i
bG9ja3NbYmxvY2tJbmRleF07CisgICAgICAgIGlmIChyZXN1bHQtPnNlY3VyaXR5T3JpZ2luVG9r
ZW4oKSA9PSBhbGxvY2F0b3IudGxjKCktPnNlY3VyaXR5T3JpZ2luVG9rZW4oKSkgeworICAgICAg
ICAgICAgc2V0SXNDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgYmxv
Y2tJbmRleCwgZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQor
ICAgIH0KIH0KIAogTWFya2VkQmxvY2s6OkhhbmRsZSogQmxvY2tEaXJlY3Rvcnk6OnRyeUFsbG9j
YXRlQmxvY2soKQpAQCAtMTgzLDggKzE5MCw2IEBAIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OnByZXBh
cmVGb3JBbGxvY2F0aW8KICAgICAgICAgICAgIGFsbG9jYXRvci0+cHJlcGFyZUZvckFsbG9jYXRp
b24oKTsKICAgICAgICAgfSk7CiAgICAgCi0gICAgbV9hbGxvY2F0aW9uQ3Vyc29yID0gMDsKLSAg
ICBtX2VtcHR5Q3Vyc29yID0gMDsKICAgICBtX3Vuc3dlcHRDdXJzb3IgPSAwOwogICAgIAogICAg
IG1fZWRlbi5jbGVhckFsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxv
Y2tEaXJlY3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9C
bG9ja0RpcmVjdG9yeS5oCShyZXZpc2lvbiAyMjgxMDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBA
IGNsYXNzIEhlYXA7CiBjbGFzcyBJc29DZWxsU2V0OwogY2xhc3MgTWFya2VkU3BhY2U7CiBjbGFz
cyBMTEludE9mZnNldHNFeHRyYWN0b3I7CitjbGFzcyBUaHJlYWRMb2NhbENhY2hlOwogY2xhc3Mg
VGhyZWFkTG9jYWxDYWNoZUxheW91dDsKIAogI2RlZmluZSBGT1JfRUFDSF9CTE9DS19ESVJFQ1RP
UllfQklUKG1hY3JvKSBcCkBAIC0xNjIsMTIgKzE2MywxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
dW1wQml0cyhQcmludFN0cmVhbSYgPSBXVEY6OmRhdGFGaWxlKCkpOwogICAgIAogcHJpdmF0ZToK
LSAgICBmcmllbmQgY2xhc3MgTG9jYWxBbGxvY2F0b3I7CiAgICAgZnJpZW5kIGNsYXNzIElzb0Nl
bGxTZXQ7CisgICAgZnJpZW5kIGNsYXNzIExvY2FsQWxsb2NhdG9yOworICAgIGZyaWVuZCBjbGFz
cyBMb2NhbFNpZGVBbGxvY2F0b3I7CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJsb2NrOwogICAg
IGZyaWVuZCBjbGFzcyBUaHJlYWRMb2NhbENhY2hlTGF5b3V0OwogICAgIAotICAgIE1hcmtlZEJs
b2NrOjpIYW5kbGUqIGZpbmRCbG9ja0ZvckFsbG9jYXRpb24oKTsKKyAgICBNYXJrZWRCbG9jazo6
SGFuZGxlKiBmaW5kQmxvY2tGb3JBbGxvY2F0aW9uKExvY2FsQWxsb2NhdG9yJik7CiAgICAgCiAg
ICAgTWFya2VkQmxvY2s6OkhhbmRsZSogdHJ5QWxsb2NhdGVCbG9jaygpOwogICAgIApAQCAtMTg0
LDggKzE4Niw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgLy8gQWZ0ZXIgeW91IGRvIHNvbWV0aGlu
ZyB0byBhIGJsb2NrIGJhc2VkIG9uIG9uZSBvZiB0aGVzZSBjdXJzb3JzLCB5b3UgY2xlYXIgdGhl
IGJpdCBpbiB0aGUKICAgICAvLyBjb3JyZXNwb25kaW5nIGJpdHZlY3RvciBhbmQgbGVhdmUgdGhl
IGN1cnNvciB3aGVyZSBpdCB3YXMuCi0gICAgc2l6ZV90IG1fYWxsb2NhdGlvbkN1cnNvciB7IDAg
fTsgLy8gUG9pbnRzIHRvIHRoZSBuZXh0IGJsb2NrIHRoYXQgaXMgYSBjYW5kaWRhdGUgZm9yIGFs
bG9jYXRpb24uCi0gICAgc2l6ZV90IG1fZW1wdHlDdXJzb3IgeyAwIH07IC8vIFBvaW50cyB0byB0
aGUgbmV4dCBibG9jayB0aGF0IGlzIGEgY2FuZGlkYXRlIGZvciBlbXB0eSBhbGxvY2F0aW9uIChh
bGxvY2F0aW5nIGluIGVtcHR5IGJsb2NrcykuCisgICAgc2l6ZV90IG1fZW1wdHlDdXJzb3IgeyAw
IH07CiAgICAgc2l6ZV90IG1fdW5zd2VwdEN1cnNvciB7IDAgfTsgLy8gUG9pbnRzIHRvIHRoZSBu
ZXh0IGJsb2NrIHRoYXQgaXMgYSBjYW5kaWRhdGUgZm9yIGluY3JlbWVudGFsIHN3ZWVwaW5nLgog
ICAgIAogICAgIHVuc2lnbmVkIG1fY2VsbFNpemU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMjgxMDYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDggKzMyLDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUxvY2FsQWxsb2NhdG9yOjpM
b2NhbEFsbG9jYXRvcihCbG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5KQotICAgIDogbV9kaXJlY3Rv
cnkoZGlyZWN0b3J5KQorTG9jYWxBbGxvY2F0b3I6OkxvY2FsQWxsb2NhdG9yKFRocmVhZExvY2Fs
Q2FjaGUqIHRsYywgQmxvY2tEaXJlY3RvcnkqIGRpcmVjdG9yeSkKKyAgICA6IG1fdGxjKHRsYykK
KyAgICAsIG1fZGlyZWN0b3J5KGRpcmVjdG9yeSkKICAgICAsIG1fY2VsbFNpemUoZGlyZWN0b3J5
LT5tX2NlbGxTaXplKQogICAgICwgbV9mcmVlTGlzdChtX2NlbGxTaXplKQogewpAQCAtNDIsMTEg
KzQzLDEzIEBAIExvY2FsQWxsb2NhdG9yOjpMb2NhbEFsbG9jYXRvcihCbG9ja0RpcmUKIH0KIAog
TG9jYWxBbGxvY2F0b3I6OkxvY2FsQWxsb2NhdG9yKExvY2FsQWxsb2NhdG9yJiYgb3RoZXIpCi0g
ICAgOiBtX2RpcmVjdG9yeShvdGhlci5tX2RpcmVjdG9yeSkKKyAgICA6IG1fdGxjKG90aGVyLm1f
dGxjKQorICAgICwgbV9kaXJlY3Rvcnkob3RoZXIubV9kaXJlY3RvcnkpCiAgICAgLCBtX2NlbGxT
aXplKG90aGVyLm1fY2VsbFNpemUpCiAgICAgLCBtX2ZyZWVMaXN0KFdURk1vdmUob3RoZXIubV9m
cmVlTGlzdCkpCiAgICAgLCBtX2N1cnJlbnRCbG9jayhvdGhlci5tX2N1cnJlbnRCbG9jaykKICAg
ICAsIG1fbGFzdEFjdGl2ZUJsb2NrKG90aGVyLm1fbGFzdEFjdGl2ZUJsb2NrKQorICAgICwgbV9h
bGxvY2F0aW9uQ3Vyc29yKG90aGVyLm1fYWxsb2NhdGlvbkN1cnNvcikKIHsKICAgICBvdGhlci5y
ZXNldCgpOwogICAgIGlmIChvdGhlci5pc09uTGlzdCgpKSB7CkBAIC02MSw2ICs2NCw3IEBAIHZv
aWQgTG9jYWxBbGxvY2F0b3I6OnJlc2V0KCkKICAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7CiAgICAg
bV9jdXJyZW50QmxvY2sgPSBudWxscHRyOwogICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbnVsbHB0
cjsKKyAgICBtX2FsbG9jYXRpb25DdXJzb3IgPSAwOwogfQogCiBMb2NhbEFsbG9jYXRvcjo6fkxv
Y2FsQWxsb2NhdG9yKCkKQEAgLTgwLDYgKzg0LDE1IEBAIExvY2FsQWxsb2NhdG9yOjp+TG9jYWxB
bGxvY2F0b3IoKQogICAgIC8vICAgdGhhdCBpdCBpcyBub3QgcmVhY2hhYmxlLiBUaGVyZWZvcmUs
IHRoZSBUTEMgc2hvdWxkIHN0aWxsIGJlIGluIGEgZnVsbHkgcmVzZXQgc3RhdGUgYXQgdGhlCiAg
ICAgLy8gICB0aW1lIG9mIGRlc3RydWN0aW9uIGJlY2F1c2UgZm9yIGl0IHRvIGdldCBpbnRvIGFu
eSBvdGhlciBzdGF0ZSwgc29tZW9uZSBtdXN0IGhhdmUgYWxsb2NhdGVkCiAgICAgLy8gICBpbiBp
dCAod2hpY2ggaXMgaW1wb3NzaWJsZSBiZWNhdXNlIGl0J3Mgc3VwcG9zZWRseSB1bnJlYWNoYWJs
ZSkuCisgICAgLy8KKyAgICAvLyBNeSBiaWdnZXN0IHdvcnJ5IHdpdGggdGhlc2UgYXNzZXJ0aW9u
cyBpcyB0aGF0IHRoZXJlIHdpbGwgYmUgc29tZSBUTEMgdGhhdCBnZXRzIHNldCBhcyB0aGUKKyAg
ICAvLyBjdXJyZW50IG9uZSBidXQgdGhlbiBuZXZlciByZXNldCwgYW5kIGluIHRoZSBtZWFudGlt
ZSB0aGUgZ2xvYmFsIG9iamVjdCB0aGF0IG93bnMgaXQgZ2V0cworICAgIC8vIGRlc3Ryb3llZC4K
KyAgICAvLworICAgIC8vIE5vdGUgdGhhdCBpZiB3ZSBkaWQgaG9sZCBvbnRvIHNvbWUgbWVtb3J5
IGFuZCB3ZSB3YW50ZWQgdG8gcmV0dXJuIGl0IHRoZW4gdGhpcyBjb3VsZCBiZSB3ZWlyZC4KKyAg
ICAvLyBXZSB3b3VsZCBwb3RlbnRpYWxseSBoYXZlIHRvIHN0b3BBbGxvY2F0aW5nKCkuIFRoYXQg
d291bGQgbWVhbiBoYXZpbmcgdG8gcmV0dXJuIGEgYmxvY2sgdG8gdGhlCisgICAgLy8gQmxvY2tE
aXJlY3RvcnkuIEl0J3Mgbm90IGNsZWFyIHRoYXQgdGhlIEJsb2NrRGlyZWN0b3J5IGlzIHByZXBh
cmVkIHRvIGhhbmRsZSB0aGF0IGR1cmluZworICAgIC8vIHN3ZWVwaW5nIGFub3RoZXIgYmxvY2ss
IGZvciBleGFtcGxlLgogICAgIGJvb2wgb2sgPSB0cnVlOwogICAgIGlmICghbV9mcmVlTGlzdC5h
bGxvY2F0aW9uV2lsbEZhaWwoKSkgewogICAgICAgICBkYXRhTG9nKCJGQVRBTDogIiwgUmF3UG9p
bnRlcih0aGlzKSwgIi0+fkxvY2FsQWxsb2NhdG9yIGhhcyBub24tZW1wdHkgZnJlZS1saXN0Llxu
Iik7CkBAIC0xNjQsNiArMTc3LDcgQEAgdm9pZCogTG9jYWxBbGxvY2F0b3I6OmFsbG9jYXRlU2xv
d0Nhc2UoRwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CisgICAgYmxvY2stPmFzc29jaWF0ZVdpdGhPcmlnaW4obV90bGMtPnNlY3VyaXR5T3JpZ2luVG9r
ZW4oKSk7CiAgICAgbV9kaXJlY3RvcnktPmFkZEJsb2NrKGJsb2NrKTsKICAgICByZXN1bHQgPSBh
bGxvY2F0ZUluKGJsb2NrKTsKICAgICBBU1NFUlQocmVzdWx0KTsKQEAgLTIwMSw3ICsyMTUsNyBA
QCB2b2lkKiBMb2NhbEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVXaXRob3V0CiAgICAgQVNTRVJUKG1f
ZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpOwogICAgIAogICAgIGZvciAoOzspIHsKLSAg
ICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSBtX2RpcmVjdG9yeS0+ZmluZEJsb2Nr
Rm9yQWxsb2NhdGlvbigpOworICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IG1f
ZGlyZWN0b3J5LT5maW5kQmxvY2tGb3JBbGxvY2F0aW9uKCp0aGlzKTsKICAgICAgICAgaWYgKCFi
bG9jaykKICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0yMjAsNiArMjM0LDcgQEAgdm9pZCogTG9j
YWxBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dAogICAgICAgICAgICAgLy8gYmVjYXVzZSB0
aGVyZSBpcyBhIHJlbW90ZSBjaGFuY2UgdGhhdCBhIGJsb2NrIG1heSBoYXZlIGJvdGggY2FuQWxs
b2NhdGVCdXROb3RFbXB0eQogICAgICAgICAgICAgLy8gYW5kIGVtcHR5IHNldCBhdCB0aGUgc2Ft
ZSB0aW1lLgogICAgICAgICAgICAgYmxvY2stPnJlbW92ZUZyb21EaXJlY3RvcnkoKTsKKyAgICAg
ICAgICAgIGJsb2NrLT5hc3NvY2lhdGVXaXRoT3JpZ2luKG1fdGxjLT5zZWN1cml0eU9yaWdpblRv
a2VuKCkpOwogICAgICAgICAgICAgbV9kaXJlY3RvcnktPmFkZEJsb2NrKGJsb2NrKTsKICAgICAg
ICAgICAgIHJldHVybiBhbGxvY2F0ZUluKGJsb2NrKTsKICAgICAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5oCShyZXZpc2lvbiAyMjgxMDYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMywxMiArMzMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEJsb2Nr
RGlyZWN0b3J5OwogY2xhc3MgR0NEZWZlcnJhbENvbnRleHQ7CitjbGFzcyBUaHJlYWRMb2NhbENh
Y2hlOwogCiBjbGFzcyBMb2NhbEFsbG9jYXRvciA6IHB1YmxpYyBCYXNpY1Jhd1NlbnRpbmVsTm9k
ZTxMb2NhbEFsbG9jYXRvcj4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExvY2FsQWxsb2Nh
dG9yKTsKICAgICAKIHB1YmxpYzoKLSAgICBMb2NhbEFsbG9jYXRvcihCbG9ja0RpcmVjdG9yeSop
OworICAgIExvY2FsQWxsb2NhdG9yKFRocmVhZExvY2FsQ2FjaGUqLCBCbG9ja0RpcmVjdG9yeSop
OwogICAgIExvY2FsQWxsb2NhdG9yKExvY2FsQWxsb2NhdG9yJiYpOwogICAgIH5Mb2NhbEFsbG9j
YXRvcigpOwogICAgIApAQCAtNTMsOCArNTQsMTIgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZDZWxsU2l6ZSgpOwogICAgIAogICAgIGJvb2wgaXNGcmVlTGlzdGVkQ2Vs
bChjb25zdCB2b2lkKikgY29uc3Q7CisgICAgCisgICAgVGhyZWFkTG9jYWxDYWNoZSogdGxjKCkg
Y29uc3QgeyByZXR1cm4gbV90bGM7IH0KIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQmxv
Y2tEaXJlY3Rvcnk7CisgICAgCiAgICAgdm9pZCByZXNldCgpOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2UoR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpOwogICAgIHZvaWQgZGlkQ29uc3VtZUZyZWVMaXN0KCk7
CkBAIC02MywxMSArNjgsMTYgQEAgcHJpdmF0ZToKICAgICB2b2lkKiBhbGxvY2F0ZUluKE1hcmtl
ZEJsb2NrOjpIYW5kbGUqKTsKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlv
bnNJZk5lZWRlZChHQ0RlZmVycmFsQ29udGV4dCopOwogCisgICAgVGhyZWFkTG9jYWxDYWNoZSog
bV90bGM7CiAgICAgQmxvY2tEaXJlY3RvcnkqIG1fZGlyZWN0b3J5OwogICAgIHVuc2lnbmVkIG1f
Y2VsbFNpemU7CiAgICAgRnJlZUxpc3QgbV9mcmVlTGlzdDsKICAgICBNYXJrZWRCbG9jazo6SGFu
ZGxlKiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKICAgICBNYXJrZWRCbG9jazo6SGFuZGxl
KiBtX2xhc3RBY3RpdmVCbG9jayB7IG51bGxwdHIgfTsKKyAgICAKKyAgICAvLyBBZnRlciB5b3Ug
ZG8gc29tZXRoaW5nIHRvIGEgYmxvY2sgYmFzZWQgb24gb25lIG9mIHRoZXNlIGN1cnNvcnMsIHlv
dSBjbGVhciB0aGUgYml0IGluIHRoZQorICAgIC8vIGNvcnJlc3BvbmRpbmcgYml0dmVjdG9yIGFu
ZCBsZWF2ZSB0aGUgY3Vyc29yIHdoZXJlIGl0IHdhcy4KKyAgICBzaXplX3QgbV9hbGxvY2F0aW9u
Q3Vyc29yIHsgMCB9OyAvLyBQb2ludHMgdG8gdGhlIG5leHQgYmxvY2sgdGhhdCBpcyBhIGNhbmRp
ZGF0ZSBmb3IgYWxsb2NhdGlvbi4KIH07CiAKIGlubGluZSBwdHJkaWZmX3QgTG9jYWxBbGxvY2F0
b3I6Om9mZnNldE9mRnJlZUxpc3QoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmNwcAkocmV2aXNpb24g
MjI4MTA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrTWVyZ2luZ0Nv
bnN0cmFpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw5IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQuaCIKIAorI2lu
Y2x1ZGUgIkdDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorCiBuYW1lc3BhY2UgSlNDIHsKIAogTWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQ6Ok1hcmtT
dGFja01lcmdpbmdDb25zdHJhaW50KEhlYXAmIGhlYXApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3RyYWludC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01lcmdpbmdDb25zdHJhaW50LmgJKHJl
dmlzaW9uIDIyODEwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFja01l
cmdpbmdDb25zdHJhaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDkgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEhlYXA7CitjbGFzcyBTbG90VmlzaXRvcjsKKwogY2xhc3Mg
TWFya1N0YWNrTWVyZ2luZ0NvbnN0cmFpbnQgOiBwdWJsaWMgTWFya2luZ0NvbnN0cmFpbnQgewog
cHVibGljOgogICAgIE1hcmtTdGFja01lcmdpbmdDb25zdHJhaW50KEhlYXAmKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDIyODEw
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDg4LDYgKzQ4OCwxNSBAQCBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6Omlz
RnJlZUxpc3RlZENlCiAgICAgcmV0dXJuIG1fZGlyZWN0b3J5LT5pc0ZyZWVMaXN0ZWRDZWxsKHRh
cmdldCk7CiB9CiAKK3ZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6YXNzb2NpYXRlV2l0aE9yaWdp
bihTZWN1cml0eU9yaWdpblRva2VuIHNlY3VyaXR5T3JpZ2luVG9rZW4pCit7CisgICAgaWYgKG1f
c2VjdXJpdHlPcmlnaW5Ub2tlbiA9PSBzZWN1cml0eU9yaWdpblRva2VuKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgbWVtc2V0KCZibG9jaygpLCAwLCBlbmRBdG9tICogYXRvbVNpemUpOwor
ICAgIG1fc2VjdXJpdHlPcmlnaW5Ub2tlbiA9IHNlY3VyaXR5T3JpZ2luVG9rZW47Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjI4MTA2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiAr
MjUsNyBAQAogI2luY2x1ZGUgIkRlc3RydWN0aW9uTW9kZS5oIgogI2luY2x1ZGUgIkhlYXBDZWxs
LmgiCiAjaW5jbHVkZSAiSXRlcmF0aW9uU3RhdHVzLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW5Ub2tlbi5oIgogI2luY2x1ZGUgIldlYWtTZXQuaCIKICNpbmNsdWRlIDx3dGYvQXRvbWljcy5o
PgogI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KQEAgLTE5NCw2ICsxOTUsOSBAQCBwdWJsaWM6CiAg
ICAgICAgIAogICAgICAgICB2b2lkIGR1bXBTdGF0ZShQcmludFN0cmVhbSYpOwogICAgICAgICAK
KyAgICAgICAgdm9pZCBhc3NvY2lhdGVXaXRoT3JpZ2luKFNlY3VyaXR5T3JpZ2luVG9rZW4pOwor
ICAgICAgICBTZWN1cml0eU9yaWdpblRva2VuIHNlY3VyaXR5T3JpZ2luVG9rZW4oKSBjb25zdCB7
IHJldHVybiBtX3NlY3VyaXR5T3JpZ2luVG9rZW47IH0KKyAgICAgICAgCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgSGFuZGxlKEhlYXAmLCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKiwgdm9pZCopOwog
ICAgICAgICAKQEAgLTIyOSw2ICsyMzMsOCBAQCBwdWJsaWM6CiAgICAgICAgIFdlYWtTZXQgbV93
ZWFrU2V0OwogICAgICAgICAKICAgICAgICAgTWFya2VkQmxvY2sqIG1fYmxvY2sgeyBudWxscHRy
IH07CisgICAgICAgIAorICAgICAgICBTZWN1cml0eU9yaWdpblRva2VuIG1fc2VjdXJpdHlPcmln
aW5Ub2tlbiB7IDAgfTsKICAgICB9OwogCiBwcml2YXRlOiAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1NlY3VyaXR5T3JpZ2luVG9rZW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NlY3VyaXR5T3JpZ2luVG9rZW4uY3BwCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NlY3VyaXR5T3JpZ2luVG9rZW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luVG9rZW4uaCIKKworI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCitTZWN1cml0eU9yaWdpblRva2VuIHVuaXF1ZVNlY3VyaXR5T3JpZ2lu
VG9rZW4oKQoreworICAgIHN0YXRpYyBTZWN1cml0eU9yaWdpblRva2VuIGNvdW50ZXI7CisgICAg
cmV0dXJuIFdURjo6YXRvbWljRXhjaGFuZ2VBZGQoJmNvdW50ZXIsIDEpICsgMTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1NlY3Vy
aXR5T3JpZ2luVG9rZW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TZWN1cml0eU9yaWdpblRva2VuLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2VjdXJpdHlPcmlnaW5Ub2tlbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIHVpbnQ2NF90IFNlY3Vy
aXR5T3JpZ2luVG9rZW47CisKK0pTX0VYUE9SVF9QUklWQVRFIFNlY3VyaXR5T3JpZ2luVG9rZW4g
dW5pcXVlU2VjdXJpdHlPcmlnaW5Ub2tlbigpOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5jcHAJ
KHJldmlzaW9uIDIyODEwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExv
Y2FsQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMyArMzIsMTQgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLVJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBUaHJlYWRMb2NhbENhY2hlOjpj
cmVhdGUoSGVhcCYgaGVhcCkKK1JlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBUaHJlYWRMb2NhbENh
Y2hlOjpjcmVhdGUoSGVhcCYgaGVhcCwgU2VjdXJpdHlPcmlnaW5Ub2tlbiBzZWN1cml0eU9yaWdp
blRva2VuKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGhyZWFkTG9jYWxDYWNoZShoZWFw
KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUaHJlYWRMb2NhbENhY2hlKGhlYXAsIHNlY3Vy
aXR5T3JpZ2luVG9rZW4pKTsKIH0KIAotVGhyZWFkTG9jYWxDYWNoZTo6VGhyZWFkTG9jYWxDYWNo
ZShIZWFwJiBoZWFwKQorVGhyZWFkTG9jYWxDYWNoZTo6VGhyZWFkTG9jYWxDYWNoZShIZWFwJiBo
ZWFwLCBTZWN1cml0eU9yaWdpblRva2VuIHNlY3VyaXR5T3JpZ2luVG9rZW4pCiAgICAgOiBtX2hl
YXAoaGVhcCkKKyAgICAsIG1fc2VjdXJpdHlPcmlnaW5Ub2tlbihzZWN1cml0eU9yaWdpblRva2Vu
KQogewogICAgIG1fZGF0YSA9IGFsbG9jYXRlRGF0YSgpOwogfQpAQCAtNTksNyArNjAsNyBAQCBU
aHJlYWRMb2NhbENhY2hlOjpEYXRhKiBUaHJlYWRMb2NhbENhY2hlCiAgICAgZm9yIChzaXplX3Qg
b2Zmc2V0ID0gMDsgb2Zmc2V0IDwgb2xkU2l6ZTsgb2Zmc2V0ICs9IHNpemVvZihMb2NhbEFsbG9j
YXRvcikpCiAgICAgICAgIG5ldyAoJmFsbG9jYXRvcigqcmVzdWx0LCBvZmZzZXQpKSBMb2NhbEFs
bG9jYXRvcihXVEZNb3ZlKGFsbG9jYXRvcigqbV9kYXRhLCBvZmZzZXQpKSk7CiAgICAgZm9yIChz
aXplX3Qgb2Zmc2V0ID0gb2xkU2l6ZTsgb2Zmc2V0IDwgbGF5b3V0LnNpemU7IG9mZnNldCArPSBz
aXplb2YoTG9jYWxBbGxvY2F0b3IpKQotICAgICAgICBuZXcgKCZhbGxvY2F0b3IoKnJlc3VsdCwg
b2Zmc2V0KSkgTG9jYWxBbGxvY2F0b3IobGF5b3V0LmRpcmVjdG9yaWVzW29mZnNldCAvIHNpemVv
ZihMb2NhbEFsbG9jYXRvcildKTsKKyAgICAgICAgbmV3ICgmYWxsb2NhdG9yKCpyZXN1bHQsIG9m
ZnNldCkpIExvY2FsQWxsb2NhdG9yKHRoaXMsIGxheW91dC5kaXJlY3Rvcmllc1tvZmZzZXQgLyBz
aXplb2YoTG9jYWxBbGxvY2F0b3IpXSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNzAs
NyArNzEsNyBAQCB2b2lkIFRocmVhZExvY2FsQ2FjaGU6OmRlc3Ryb3lEYXRhKERhdGEqCiAgICAg
ZmFzdEZyZWUoZGF0YSk7CiB9CiAKLXZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6aW5zdGFsbFNsb3co
Vk0mIHZtKQordm9pZCBUaHJlYWRMb2NhbENhY2hlOjppbnN0YWxsU2xvdyhWTSYgdm0sIFJlZlB0
cjxUaHJlYWRMb2NhbENhY2hlPiogcHJldmlvdXMpCiB7CiAjaWYgVVNFKEZBU1RfVExTX0ZPUl9U
TEMpCiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwpAQCAtODMsOCArODQsMTMg
QEAgdm9pZCBUaHJlYWRMb2NhbENhY2hlOjppbnN0YWxsU2xvdyhWTSYgdgogICAgIAogICAgIHJl
ZigpOwogICAgIAotICAgIGlmIChSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gb2xkQ2FjaGUgPSBn
ZXQodm0pKQotICAgICAgICBvbGRDYWNoZS0+ZGVyZWYoKTsKKyAgICBpZiAoVGhyZWFkTG9jYWxD
YWNoZTo6RGF0YSogb2xkQ2FjaGVEYXRhID0gZ2V0SW1wbCh2bSkpIHsKKyAgICAgICAgVGhyZWFk
TG9jYWxDYWNoZSogb2xkQ2FjaGUgPSBvbGRDYWNoZURhdGEtPmNhY2hlOworICAgICAgICBpZiAo
cHJldmlvdXMpCisgICAgICAgICAgICAqcHJldmlvdXMgPSBhZG9wdFJlZihvbGRDYWNoZSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9sZENhY2hlLT5kZXJlZigpOworICAgIH0KICAgICAK
ICAgICBpbnN0YWxsRGF0YSh2bSwgbV9kYXRhKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlLmgJKHJldmlzaW9uIDIyODEwNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjUsOSArMjUsMTMgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJBbGxvY2F0
aW9uRmFpbHVyZU1vZGUuaCIKKyNpbmNsdWRlICJMb2NhbEFsbG9jYXRvci5oIgorI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luVG9rZW4uaCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2lu
Y2x1ZGUgPHd0Zi9GYXN0VExTLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVk
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzks
OSArNDMsOSBAQCBjbGFzcyBUaHJlYWRMb2NhbENhY2hlIDogcHVibGljIFRocmVhZFNhCiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgCiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0
cjxUaHJlYWRMb2NhbENhY2hlPiBjcmVhdGUoSGVhcCYpOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gY3JlYXRlKEhlYXAmLCBTZWN1cml0eU9y
aWdpblRva2VuID0gdW5pcXVlU2VjdXJpdHlPcmlnaW5Ub2tlbigpKTsKICAgICAKLSAgICBKU19F
WFBPUlRfUFJJVkFURSB+VGhyZWFkTG9jYWxDYWNoZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZpcnR1YWwgflRocmVhZExvY2FsQ2FjaGUoKTsKIAogICAgIHN0YXRpYyBSZWZQdHI8VGhyZWFk
TG9jYWxDYWNoZT4gZ2V0KFZNJik7CiAgICAgCkBAIC00OSw3ICs1Myw3IEBAIHB1YmxpYzoKICAg
ICAvLyBvcHRpbWl6aW5nIGZvciB0aGUgY2FzZSB0aGF0IHlvdSdyZSBqdXN0IGluc3RhbGxpbmcg
dGhlIGNhY2hlIHRoYXQgaXMgYWxyZWFkeSBpbnN0YWxsZWQuIFRoaXMKICAgICAvLyBhc3N1bWVz
IGEgcmVsYXRpdmVseSBzbWFsbCBudW1iZXIgb2YgY2FjaGVzIG9yIGxvdyBjaGFuY2Ugb2YgYWN0
dWFsIGNvbnRleHQgc3dpdGNoIGNvbWJpbmVkCiAgICAgLy8gd2l0aCBwb3NzaWJseSBoaWdoIHJh
dGUgb2YgIkkgbWF5IGhhdmUgY29udGV4dCBzd2l0Y2hlZCIgc2l0ZXMgdGhhdCBjYWxsIHRoaXMg
b3V0IG9mIHBhcmFub2lhLgotICAgIHZvaWQgaW5zdGFsbChWTSYpOworICAgIHZvaWQgaW5zdGFs
bChWTSYsIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiogPSBudWxscHRyKTsKICAgICAKICAgICBz
dGF0aWMgTG9jYWxBbGxvY2F0b3ImIGFsbG9jYXRvcihWTSYsIHNpemVfdCBvZmZzZXQpOwogICAg
IApAQCAtNTksMTEgKzYzLDE0IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mU2l6ZUluRGF0YSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihEYXRhLCBzaXplKTsgfQog
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZGaXJzdEFsbG9jYXRvckluRGF0YSgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihEYXRhLCBhbGxvY2F0b3IpOyB9CiAgICAgCisgICAgU2VjdXJp
dHlPcmlnaW5Ub2tlbiBzZWN1cml0eU9yaWdpblRva2VuKCkgY29uc3QgeyByZXR1cm4gbV9zZWN1
cml0eU9yaWdpblRva2VuOyB9CisKK3Byb3RlY3RlZDogICAgCisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgVGhyZWFkTG9jYWxDYWNoZShIZWFwJiwgU2VjdXJpdHlPcmlnaW5Ub2tlbik7CisgICAgCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBWTTsKICAgICAKLSAgICBUaHJlYWRMb2NhbENhY2hl
KEhlYXAmKTsKLSAgICAKICAgICBzdHJ1Y3QgRGF0YSB7CiAgICAgICAgIHNpemVfdCBzaXplOwog
ICAgICAgICBUaHJlYWRMb2NhbENhY2hlKiBjYWNoZTsKQEAgLTc2LDcgKzgzLDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGRlc3Ryb3lEYXRhKERhdGEqKTsKICAgICBzdGF0aWMgTG9jYWxBbGxvY2F0
b3ImIGFsbG9jYXRvcihEYXRhJiBkYXRhLCBzaXplX3Qgb2Zmc2V0KTsKIAotICAgIHZvaWQgaW5z
dGFsbFNsb3coVk0mKTsKKyAgICB2b2lkIGluc3RhbGxTbG93KFZNJiwgUmVmUHRyPFRocmVhZExv
Y2FsQ2FjaGU+Kik7CiAgICAgc3RhdGljIHZvaWQgaW5zdGFsbERhdGEoVk0mLCBEYXRhKik7CiAg
ICAgCiAgICAgTG9jYWxBbGxvY2F0b3ImIGFsbG9jYXRvclNsb3coVk0mLCBzaXplX3Qgb2Zmc2V0
KTsKQEAgLTkxLDYgKzk4LDggQEAgcHJpdmF0ZToKICAgICAvLyBpdCdzIGNvcnJlY3QgZm9yIGlt
bW9ydGFsIGNhY2hlcy4KICAgICBIZWFwJiBtX2hlYXA7CiAgICAgRGF0YSogbV9kYXRhIHsgbnVs
bHB0ciB9OworICAgIAorICAgIFNlY3VyaXR5T3JpZ2luVG9rZW4gbV9zZWN1cml0eU9yaWdpblRv
a2VuOwogCiAjaWYgVVNFKEZBU1RfVExTX0ZPUl9UTEMpCiAgICAgc3RhdGljIGNvbnN0IHB0aHJl
YWRfa2V5X3QgdGxzS2V5ID0gV1RGX0dDX1RMQ19LRVk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgJKHJldmlzaW9u
IDIyODEwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZS5oIgorI2luY2x1ZGUgIlZNLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewogCkBAIC00NywxMSArNDgsMTQgQEAgaW5saW5lIFJlZlB0cjxUaHJlYWRMb2Nh
bENhY2hlPiBUaHJlYWRMbwogICAgIHJldHVybiBudWxscHRyOwogfQogCi1pbmxpbmUgdm9pZCBU
aHJlYWRMb2NhbENhY2hlOjppbnN0YWxsKFZNJiB2bSkKK2lubGluZSB2b2lkIFRocmVhZExvY2Fs
Q2FjaGU6Omluc3RhbGwoVk0mIHZtLCBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4qIHByZXZpb3Vz
KQogewotICAgIGlmIChnZXRJbXBsKHZtKSA9PSBtX2RhdGEpCisgICAgaWYgKGdldEltcGwodm0p
ID09IG1fZGF0YSkgeworICAgICAgICBpZiAocHJldmlvdXMpCisgICAgICAgICAgICAqcHJldmlv
dXMgPSBudWxscHRyOwogICAgICAgICByZXR1cm47Ci0gICAgaW5zdGFsbFNsb3codm0pOworICAg
IH0KKyAgICBpbnN0YWxsU2xvdyh2bSwgcHJldmlvdXMpOwogfQogCiBpbmxpbmUgTG9jYWxBbGxv
Y2F0b3ImIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRvcihWTSYgdm0sIHNpemVfdCBvZmZzZXQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmgJKHJldmlzaW9uIDIyODEwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5MSw3ICs0OTEsNyBAQCBwdWJsaWM6
CiAgICAgY29uc3QgUnVudGltZUZsYWdzJiBydW50aW1lRmxhZ3MoKSBjb25zdCB7IHJldHVybiBt
X3J1bnRpbWVGbGFnczsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgZXhw
bGljaXQgSlNHbG9iYWxPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBjb25zdCBHbG9iYWxPYmplY3RN
ZXRob2RUYWJsZSogPSAwLCBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gPSBudWxscHRyKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBleHBsaWNpdCBKU0dsb2JhbE9iamVjdChWTSYsIFN0cnVjdHVy
ZSosIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiA9IG51bGxwdHIsIFJlZlB0cjxUaHJl
YWRMb2NhbENhY2hlPiA9IG51bGxwdHIpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTUVudHJ5U2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNRW50cnlTY29wZS5jcHAJKHJldmlzaW9uIDIyODEwNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDcgKzQxLDcgQEAgVk1FbnRyeVNjb3BlOjpWTUVudHJ5U2NvcGUoVk0mIHZtLCBKU0dsbwogICAg
IDogbV92bSh2bSkKICAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKIHsKLSAgICBn
bG9iYWxPYmplY3QtPnRocmVhZExvY2FsQ2FjaGUoKS5pbnN0YWxsKHZtKTsKKyAgICBnbG9iYWxP
YmplY3QtPnRocmVhZExvY2FsQ2FjaGUoKS5pbnN0YWxsKHZtLCAmbV9wcmV2aW91c1RMQyk7CiAg
ICAgQVNTRVJUKCFEaXNhbGxvd1ZNUmVlbnRyeTo6aXNJbkVmZmVjdE9uQ3VycmVudFRocmVhZCgp
KTsKICAgICBBU1NFUlQoVGhyZWFkOjpjdXJyZW50KCkuc3RhY2soKS5pc0dyb3dpbmdEb3dud2Fy
ZCgpKTsKICAgICBpZiAoIXZtLmVudHJ5U2NvcGUpIHsKQEAgLTcxLDExICs3MSwxNCBAQCB2b2lk
IFZNRW50cnlTY29wZTo6YWRkRGlkUG9wTGlzdGVuZXIoc3RkCiAKIFZNRW50cnlTY29wZTo6flZN
RW50cnlTY29wZSgpCiB7CisgICAgaWYgKG1fcHJldmlvdXNUTEMpCisgICAgICAgIG1fcHJldmlv
dXNUTEMtPmluc3RhbGwobV92bSk7CisgICAgCiAgICAgaWYgKG1fdm0uZW50cnlTY29wZSAhPSB0
aGlzKQogICAgICAgICByZXR1cm47CiAKICAgICBUcmFjZVBvaW50KFZNRW50cnlTY29wZUVuZCk7
Ci0KKyAgICAKICAgICBpZiAobV92bS53YXRjaGRvZygpKQogICAgICAgICBtX3ZtLndhdGNoZG9n
KCktPmV4aXRlZFZNKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
RW50cnlTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNRW50cnlTY29wZS5oCShyZXZpc2lvbiAyMjgxMDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTUVudHJ5U2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBA
QAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTR2xvYmFsT2JqZWN0OworY2xhc3MgVGhyZWFk
TG9jYWxDYWNoZTsKIGNsYXNzIFZNOwogCiBjbGFzcyBWTUVudHJ5U2NvcGUgewpAQCAtNDcsNiAr
NDgsNyBAQCBwcml2YXRlOgogICAgIFZNJiBtX3ZtOwogICAgIEpTR2xvYmFsT2JqZWN0KiBtX2ds
b2JhbE9iamVjdDsKICAgICBWZWN0b3I8c3RkOjpmdW5jdGlvbjx2b2lkICgpPj4gbV9kaWRQb3BM
aXN0ZW5lcnM7CisgICAgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IG1fcHJldmlvdXNUTEM7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyODEwNikK
KysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1
IEBACisyMDE4LTAyLTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAg
ICAgR2xvYmFsIG9iamVjdHMgc2hvdWxkIGJlIGFibGUgdG8gdXNlIFRMQ3MgdG8gYWxsb2NhdGUg
ZnJvbSBkaWZmZXJlbnQgYmxvY2tzIGZyb20gZWFjaCBvdGhlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgyMjI3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFuaWVsIEJhdGVzIGFuZCBDaHJpcyBEdW1lei4KKworICAgICAgICBObyBuZXcgdGVzdHMg
YmVjYXVzZSBubyBjaGFuZ2UgaW4gYmVoYXZpb3IuCisgICAgICAgIAorICAgICAgICBBZG9wdCBK
U0MgVExDIEFQSSB0byBwdXQgZGlzdGFuY2UgYmV0d2VlbiBvYmplY3RzIGZyb20gZGlmZmVyZW50
IHNlY3VyaXR5IG9yaWdpbnMuIFdlYkNvcmUgaGFzCisgICAgICAgIGEgc3ViY2xhc3Mgb2YgVGhy
ZWFkTG9jYWxDYWNoZSB0aGF0IHN1cHBvcnRzIGhhc2gtY29uc2luZyBiYXNlZCBvbiB0aGUgcmVs
ZXZhbnQgb3JpZ2luIGRhdGEKKyAgICAgICAgdXNpbmcgdGhlIGV4aXN0aW5nIFNlY3VyaXR5T3Jp
Z2luSGFzaC4gSXQncyBEb2N1bWVudCdzIGpvYiB0byBpbml0aWF0ZSB0aGlzLCBidXQgYWxsIG9m
IHRoZQorICAgICAgICBsb2dpYyBpcyBpbiBXZWJDb3JlOjpPcmlnaW5UaHJlYWRMb2NhbENhY2hl
LgorICAgICAgICAKKyAgICAgICAgV29ya2VycyBkb24ndCBvcHQgaW50byB0aGlzLiBUaGV5IGp1
c3QgZ2V0IHRoZSBWTSdzIGRlZmF1bHQgVExDIGFsbCB0aGUgdGltZS4KKworICAgICAgICAqIEZv
cndhcmRpbmdIZWFkZXJzL2hlYXAvVGhyZWFkTG9jYWxDYWNoZS5oOiBBZGRlZC4KKyAgICAgICAg
KiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3Q6OkpTRE9NR2xvYmFsT2JqZWN0KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRE9NV2luZG93QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jh
c2U6OkpTRE9NV2luZG93QmFzZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50Ojppbml0U2VjdXJpdHlDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50Ojp0aHJlYWRMb2NhbENhY2hlKToKKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuaDoKKyAgICAgICAgKiBwYWdlL09yaWdpblRocmVhZExvY2FsQ2FjaGUuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OnRocmVhZExvY2FsQ2FjaGVNYXApOgorICAgICAgICAoV2ViQ29y
ZTo6T3JpZ2luVGhyZWFkTG9jYWxDYWNoZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9y
aWdpblRocmVhZExvY2FsQ2FjaGU6On5PcmlnaW5UaHJlYWRMb2NhbENhY2hlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok9yaWdpblRocmVhZExvY2FsQ2FjaGU6Ok9yaWdpblRocmVhZExvY2FsQ2FjaGUp
OgorICAgICAgICAqIHBhZ2UvT3JpZ2luVGhyZWFkTG9jYWxDYWNoZS5oOiBBZGRlZC4KKyAgICAg
ICAgKiBwYWdlL1NlY3VyaXR5T3JpZ2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luOjpwYXNzZXNGaWxlQ2hlY2sgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW46OnNldEVuZm9yY2VzRmlsZVBhdGhTZXBhcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luOjp0b1N0cmluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpT
ZWN1cml0eU9yaWdpbjo6ZW5mb3JjZUZpbGVQYXRoU2VwYXJhdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgICogcGFnZS9TZWN1cml0eU9yaWdpbi5oOgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW46OmVuZm9yY2VzRmlsZVBhdGhTZXBhcmF0aW9uIGNvbnN0KToKKwogMjAxOC0wMi0wNSAg
WW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIGRvd25jYXN0
IGluIGNyZWF0ZUxpbmtQcmVsb2FkUmVzb3VyY2VDbGllbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CShy
ZXZpc2lvbiAyMjgxMDYpCisrKyBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMTMzNCw2ICsxMzM0LDcgQEAgcGFnZS9Nb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1
bHRzLmNwcAogcGFnZS9OYXZpZ2F0b3IuY3BwCiBwYWdlL05hdmlnYXRvckJhc2UuY3BwCiBwYWdl
L09yaWdpbkFjY2Vzc0VudHJ5LmNwcAorcGFnZS9PcmlnaW5UaHJlYWRMb2NhbENhY2hlLmNwcAog
cGFnZS9QYWdlLmNwcAogcGFnZS9QYWdlQ29uZmlndXJhdGlvbi5jcHAKIHBhZ2UvUGFnZUNvbnNv
bGVDbGllbnQuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFw
L1RocmVhZExvY2FsQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJk
aW5nSGVhZGVycy9oZWFwL1RocmVhZExvY2FsQ2FjaGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9oZWFwL1RocmVhZExvY2FsQ2FjaGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDIgQEAKKyNwcmFnbWEgb25jZQorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1RocmVhZExvY2FsQ2FjaGUuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyODEwNikKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMzQyLDYgKzM0Miw3IEBACiAJCTBGNTgwQ0ZGMEYxMkRFOUIwMDUxRDY4OSAv
KiBSZW5kZXJMYXllckJhY2tpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNTgwQ0ZCMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckJhY2tp
bmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjU4MEZBMzE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTgwRkExMTQ5NjkzOTEw
MEZCNUJEOCAvKiBXZWJUaWxlZEJhY2tpbmdMYXllci5oICovOyB9OwogCQkwRjU4MEZBRjE0OTgw
MEQ0MDBGQjVCRDggLyogQW5pbWF0aW9uVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU4MEZBRTE0OTgwMEQ0MDBGQjVCRDggLyogQW5p
bWF0aW9uVXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEY1QjQwOEEyMDIxMkY3NzAwODBGOTEzIC8qIE9yaWdpblRocmVhZExvY2Fs
Q2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NUI0MDg4MjAyMTJGNzMwMDgwRjkxMyAvKiBPcmlnaW5UaHJlYWRMb2NhbENhY2hlLmggKi87IH07
CiAJCTBGNUI3QTU1MTBGNjVEN0EwMDM3NjMwMiAvKiBSZW5kZXJFbWJlZGRlZE9iamVjdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QjdBNTMxMEY2
NUQ3QTAwMzc2MzAyIC8qIFJlbmRlckVtYmVkZGVkT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1RTIwMDYxOEU3NzFGQzAwM0VDM0U1
IC8qIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RTIwMDUxOEU3NzFGQzAwM0VDM0U1IC8qIFBsYXRmb3Jt
Q0FBbmltYXRpb25Db2NvYS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNjA1QUVEMTVGOTQ4NDgwMDRERjBDMCAvKiBTY3JvbGxpbmdDb25zdHJh
aW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2
MDVBRUIxNUY5NDg0ODAwNERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU0OTYsNiArNTQ5Nyw4
IEBACiAJCTBGNTgwRkExMTQ5NjkzOTEwMEZCNUJEOCAvKiBXZWJUaWxlZEJhY2tpbmdMYXllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJUaWxlZEJhY2tpbmdMYXllci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU4MEZBMjE0OTY5MzkxMDBGQjVCRDgg
LyogV2ViVGlsZWRCYWNraW5nTGF5ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBXZWJUaWxlZEJhY2tpbmdMYXllci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY1ODBGQUUxNDk4MDBENDAwRkI1QkQ4IC8qIEFuaW1hdGlvblV0aWxpdGllcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbmltYXRpb25VdGlsaXRpZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1QjQwODgyMDIxMkY3MzAwODBGOTEzIC8q
IE9yaWdpblRocmVhZExvY2FsQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gT3JpZ2luVGhyZWFkTG9jYWxDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjVCNDA4OTIwMjEyRjczMDA4MEY5MTMgLyogT3JpZ2luVGhyZWFkTG9jYWxDYWNoZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcmlnaW5UaHJlYWRMb2NhbENh
Y2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1QjdBNTIxMEY2NUQ3QTAw
Mzc2MzAyIC8qIFJlbmRlckVtYmVkZGVkT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJlbmRlckVtYmVkZGVkT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY1QjdBNTMxMEY2NUQ3QTAwMzc2MzAyIC8qIFJlbmRlckVtYmVkZGVk
T2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckVtYmVkZGVk
T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUUyMDA1MThFNzcxRkMw
MDNFQzNFNSAvKiBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC05OTM2LDggKzk5MzksOCBAQAogCQk4QUY0RTU1NDExREM1QTM2MDAw
RUQzREUgLyogUGVyZm9ybWFuY2VOYXZpZ2F0aW9uLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBQZXJmb3JtYW5jZU5hdmlnYXRpb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4QUY0RTU1OTExREM1QTYzMDAwRUQzREUgLyogUGVyZm9ybWFuY2VUaW1pbmcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVyZm9ybWFuY2VUaW1pbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEFGNEU1NUExMURDNUE2MzAwMEVEM0RFIC8qIFBlcmZvcm1h
bmNlVGltaW5nLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQZXJmb3JtYW5jZVRpbWluZy5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCThFMzNDRDkzMjAxQTI5QzEwMEUzOTA5
MyAvKiBHYXBMZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
R2FwTGVuZ3RoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEJEMzdBNjcyMDFC
QjM5QzAwMTE3MzRBIC8qIFJlYWRhYmxlU3RyZWFtQ2h1bmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVh
ZGFibGVTdHJlYW1DaHVuay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4RTMzQ0Q5
MzIwMUEyOUMxMDBFMzkwOTMgLyogR2FwTGVuZ3RoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEdhcExlbmd0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCThFNEM5NkQ4MUFENDQ4MzUwMDM2NUE1MCAvKiBKU0ZldGNoUmVzcG9uc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGZXRjaFJlc3BvbnNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEU0Qzk2RDkxQUQ0NDgzNTAwMzY1QTUwIC8qIEpT
RmV0Y2hSZXNwb25zZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ZldGNo
UmVzcG9uc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEVDNkM5NjEyMDFBMjUw
MTAwRkJGQTUzIC8qIEdhcExlbmd0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBHYXBMZW5ndGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4ODI5LDYgKzE4
ODMyLDggQEAKIAkJCQk1MTgyQzI0QjFGMzEzQUUwMDA1OUJBN0MgLyogTmF2aWdhdG9yU2Vydmlj
ZVdvcmtlci5pZGwgKi8sCiAJCQkJMDAxNDYyODgxMDNDRDFERTAwMEIyMERCIC8qIE9yaWdpbkFj
Y2Vzc0VudHJ5LmNwcCAqLywKIAkJCQkwMDE0NjI4OTEwM0NEMURFMDAwQjIwREIgLyogT3JpZ2lu
QWNjZXNzRW50cnkuaCAqLywKKwkJCQkwRjVCNDA4OTIwMjEyRjczMDA4MEY5MTMgLyogT3JpZ2lu
VGhyZWFkTG9jYWxDYWNoZS5jcHAgKi8sCisJCQkJMEY1QjQwODgyMDIxMkY3MzAwODBGOTEzIC8q
IE9yaWdpblRocmVhZExvY2FsQ2FjaGUuaCAqLywKIAkJCQk2NUZFQTg2ODA5ODMzQURFMDBCRUQ0
QUIgLyogUGFnZS5jcHAgKi8sCiAJCQkJNjVBMjE0NjcwOTdBMzI5MTAwQjkwNTBBIC8qIFBhZ2Uu
aCAqLywKIAkJCQlDRDVFNUI2MDFBMTVGMTU2MDAwQzYwOUUgLyogUGFnZUNvbmZpZ3VyYXRpb24u
Y3BwICovLApAQCAtMjgyNjYsNiArMjgyNzEsNyBAQAogCQkJCTA3OTY5REMyMTdEMTQxNTEwMDdG
Rjg0MiAvKiBKU1JUQ1N0YXRzUmVwb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1RTJDNDM2QzFC
Q0YwNzFFMDAwMUUyQkMgLyogSlNSVENUcmFja0V2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0VDMDFDMzBDMjc0REREMDA5RjRFQzkgLyogSlNTY3JlZW4uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGNUI0MDhBMjAyMTJGNzcwMDgwRjkxMyAvKiBPcmlnaW5UaHJlYWRMb2NhbENhY2hlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGREExNUVDRTEyQjAzRjYxMDAzQTU4M0EgLyogSlNTY3JpcHRQcm9j
ZXNzb3JOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MzQ0NzZFRjFEQTVCQzVFMDAyQjZFRDIg
LyogSlNTY3JvbGxUb09wdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFRDA2QUQxMUM3Nzc1
NDgwMEZERkFGMSAvKiBKU1NlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaCBpbiBIZWFkZXJz
ICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFs
T2JqZWN0LmNwcAkocmV2aXNpb24gMjI4MTA2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01HbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTYsOCArNTYsOCBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGlzUmVhZGFibGVCCiAKIGNvbnN0IENsYXNz
SW5mbyBKU0RPTUdsb2JhbE9iamVjdDo6c19pbmZvID0geyAiRE9NR2xvYmFsT2JqZWN0IiwgJkpT
R2xvYmFsT2JqZWN0OjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNET01HbG9iYWxPYmplY3QpIH07CiAKLUpTRE9NR2xvYmFsT2JqZWN0OjpKU0RPTUdsb2Jh
bE9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8RE9NV3JhcHBlcldvcmxk
PiYmIHdvcmxkLCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSogZ2xvYmFsT2JqZWN0TWV0
aG9kVGFibGUpCi0gICAgOiBKU0dsb2JhbE9iamVjdCh2bSwgc3RydWN0dXJlLCBnbG9iYWxPYmpl
Y3RNZXRob2RUYWJsZSkKK0pTRE9NR2xvYmFsT2JqZWN0OjpKU0RPTUdsb2JhbE9iamVjdChWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8RE9NV3JhcHBlcldvcmxkPiYmIHdvcmxkLCBj
b25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSogZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUsIFJl
ZlB0cjxKU0M6OlRocmVhZExvY2FsQ2FjaGU+JiYgdGhyZWFkTG9jYWxDYWNoZSkKKyAgICA6IEpT
R2xvYmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlLCBXVEZN
b3ZlKHRocmVhZExvY2FsQ2FjaGUpKQogICAgICwgbV9jdXJyZW50RXZlbnQoMCkKICAgICAsIG1f
d29ybGQoV1RGTW92ZSh3b3JsZCkpCiAgICAgLCBtX3dvcmxkSXNOb3JtYWwobV93b3JsZC0+aXNO
b3JtYWwoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9i
YWxPYmplY3QuaAkocmV2aXNpb24gMjI4MTA2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01HbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgIldlYkNvcmVKU0J1aWx0aW5JbnRlcm5hbHMuaCIKICNpbmNsdWRlIDxoZWFwL0hl
YXBJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aGVhcC9Mb2NrRHVyaW5nTWFya2luZy5oPgorI2luY2x1
ZGUgPGhlYXAvVGhyZWFkTG9jYWxDYWNoZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxP
YmplY3QuaD4KICNpbmNsdWRlIDxydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaD4KIApAQCAtNTAs
NyArNTEsNyBAQCBjbGFzcyBXRUJDT1JFX0VYUE9SVCBKU0RPTUdsb2JhbE9iamVjdCA6CiBwcm90
ZWN0ZWQ6CiAgICAgc3RydWN0IEpTRE9NR2xvYmFsT2JqZWN0RGF0YTsKIAotICAgIEpTRE9NR2xv
YmFsT2JqZWN0KEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFJlZjxET01XcmFwcGVyV29ybGQ+
JiYsIGNvbnN0IEpTQzo6R2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqID0gMCk7CisgICAgSlNET01H
bG9iYWxPYmplY3QoSlNDOjpWTSYsIEpTQzo6U3RydWN0dXJlKiwgUmVmPERPTVdyYXBwZXJXb3Js
ZD4mJiwgY29uc3QgSlNDOjpHbG9iYWxPYmplY3RNZXRob2RUYWJsZSogPSBudWxscHRyLCBSZWZQ
dHI8SlNDOjpUaHJlYWRMb2NhbENhY2hlPiYmID0gbnVsbHB0cik7CiAgICAgc3RhdGljIHZvaWQg
ZGVzdHJveShKU0M6OkpTQ2VsbCopOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYp
OwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTQzo6SlNPYmplY3QqKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAko
cmV2aXNpb24gMjI4MTA2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5k
b3dCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBjb25zdCBHbG9iYWxP
YmplY3RNZXRob2RUYWJsZSBKU0RPTVdpbmRvCiB9OwogCiBKU0RPTVdpbmRvd0Jhc2U6OkpTRE9N
V2luZG93QmFzZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWZQdHI8RE9NV2luZG93
PiYmIHdpbmRvdywgSlNET01XaW5kb3dQcm94eSogcHJveHkpCi0gICAgOiBKU0RPTUdsb2JhbE9i
amVjdCh2bSwgc3RydWN0dXJlLCBwcm94eS0+d29ybGQoKSwgJnNfZ2xvYmFsT2JqZWN0TWV0aG9k
VGFibGUpCisgICAgOiBKU0RPTUdsb2JhbE9iamVjdCh2bSwgc3RydWN0dXJlLCBwcm94eS0+d29y
bGQoKSwgJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUsIHdpbmRvdyA/ICZ3aW5kb3ctPmRvY3Vt
ZW50KCktPnRocmVhZExvY2FsQ2FjaGUoKSA6IG51bGxwdHIpCiAgICAgLCBtX3dpbmRvd0Nsb3Nl
V2F0Y2hwb2ludHMoKHdpbmRvdyAmJiB3aW5kb3ctPmZyYW1lKCkpID8gSXNXYXRjaGVkIDogSXNJ
bnZhbGlkYXRlZCkKICAgICAsIG1fd3JhcHBlZChXVEZNb3ZlKHdpbmRvdykpCiAgICAgLCBtX3By
b3h5KHByb3h5KQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyMjgxMDYp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
LDcgKzMsNyBAQAogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0
b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBr
ZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdl
YmtpdC5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykK
ICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMSwgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQpAQCAtMTI2LDExICsxMjYsMTEgQEAKICNpbmNs
dWRlICJOYXZpZ2F0aW9uRGlzYWJsZXIuaCIKICNpbmNsdWRlICJOYXZpZ2F0aW9uU2NoZWR1bGVy
LmgiCiAjaW5jbHVkZSAiTmVzdGluZ0xldmVsSW5jcmVtZW50ZXIuaCIKLQogI2luY2x1ZGUgIk5v
ZGVJdGVyYXRvci5oIgogI2luY2x1ZGUgIk5vZGVSYXJlRGF0YS5oIgogI2luY2x1ZGUgIk5vZGVX
aXRoSW5kZXguaCIKICNpbmNsdWRlICJPcmlnaW5BY2Nlc3NFbnRyeS5oIgorI2luY2x1ZGUgIk9y
aWdpblRocmVhZExvY2FsQ2FjaGUuaCIKICNpbmNsdWRlICJPdmVyZmxvd0V2ZW50LmgiCiAjaW5j
bHVkZSAiUGFnZUNvbnNvbGVDbGllbnQuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKQEAgLTIx
OCw2ICsyMTgsNyBAQAogI2luY2x1ZGUgPGN0aW1lPgogI2luY2x1ZGUgPGluc3BlY3Rvci9Db25z
b2xlTWVzc2FnZS5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2suaD4KKyNp
bmNsdWRlIDxydW50aW1lL1ZNLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5j
bHVkZSA8d3RmL0xhbmd1YWdlLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBA
IC01NTQ4LDcgKzU1NDksNyBAQCB2b2lkIERvY3VtZW50Ojppbml0U2VjdXJpdHlDb250ZXh0KCkK
ICAgICAgICAgICAgIC8vIFNvbWUgY2xpZW50cyB3YW50IGxvY2FsIFVSTHMgdG8gaGF2ZSBldmVu
IHRpZ2h0ZXIgcmVzdHJpY3Rpb25zIGJ5IGRlZmF1bHQsIGFuZCBub3QgYmUgYWJsZSB0byBhY2Nl
c3Mgb3RoZXIgbG9jYWwgZmlsZXMuCiAgICAgICAgICAgICAvLyBGSVhNRSA4MTU3ODogVGhlIG5h
bWluZyBvZiB0aGlzIGlzIGNvbmZ1c2luZy4gRmlsZXMgd2l0aCByZXN0cmljdGVkIGFjY2VzcyB0
byBvdGhlciBsb2NhbCBmaWxlcwogICAgICAgICAgICAgLy8gc3RpbGwgY2FuIGhhdmUgb3RoZXIg
cHJpdmlsZWdlcyB0aGF0IGNhbiBiZSByZW1lbWJlcmVkLCB0aGVyZWJ5IG5vdCBtYWtpbmcgdGhl
bSB1bmlxdWUgb3JpZ2lucy4KLSAgICAgICAgICAgIHNlY3VyaXR5T3JpZ2luKCkuZW5mb3JjZUZp
bGVQYXRoU2VwYXJhdGlvbigpOworICAgICAgICAgICAgc2VjdXJpdHlPcmlnaW4oKS5zZXRFbmZv
cmNlc0ZpbGVQYXRoU2VwYXJhdGlvbigpOwogICAgICAgICB9CiAgICAgfQogICAgIHNlY3VyaXR5
T3JpZ2luKCkuc2V0U3RvcmFnZUJsb2NraW5nUG9saWN5KHNldHRpbmdzKCkuc3RvcmFnZUJsb2Nr
aW5nUG9saWN5KCkpOwpAQCAtNzc0MCw0ICs3NzQxLDE2IEBAIHZvaWQgRG9jdW1lbnQ6OnNldFNl
cnZpY2VXb3JrZXJDb25uZWN0aW8KIH0KICNlbmRpZgogCitKU0M6OlRocmVhZExvY2FsQ2FjaGUm
IERvY3VtZW50Ojp0aHJlYWRMb2NhbENhY2hlKCkKK3sKKyAgICBpZiAoIW1fdGhyZWFkTG9jYWxD
YWNoZSkgeworICAgICAgICBTZWN1cml0eU9yaWdpbiYgb3JpZ2luID0gc2VjdXJpdHlPcmlnaW4o
KTsKKyAgICAgICAgaWYgKG9yaWdpbi5pc1VuaXF1ZSgpIHx8IChvcmlnaW4uaXNMb2NhbCgpICYm
IG9yaWdpbi5lbmZvcmNlc0ZpbGVQYXRoU2VwYXJhdGlvbigpKSkKKyAgICAgICAgICAgIG1fdGhy
ZWFkTG9jYWxDYWNoZSA9IEpTQzo6VGhyZWFkTG9jYWxDYWNoZTo6Y3JlYXRlKGNvbW1vblZNKCku
aGVhcCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fdGhyZWFkTG9jYWxDYWNoZSA9IE9y
aWdpblRocmVhZExvY2FsQ2FjaGU6OmNyZWF0ZShvcmlnaW4pOworICAgIH0KKyAgICByZXR1cm4g
Km1fdGhyZWFkTG9jYWxDYWNoZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDIyODEwNikKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAi
VXNlckFjdGlvbkVsZW1lbnRTZXQuaCIKICNpbmNsdWRlICJWaWV3cG9ydEFyZ3VtZW50cy5oIgog
I2luY2x1ZGUgIlZpc2liaWxpdHlTdGF0ZS5oIgorI2luY2x1ZGUgPGhlYXAvVGhyZWFkTG9jYWxD
YWNoZS5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUu
aD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtMTQxMSw2ICsxNDEyLDggQEAgcHVibGlj
OgogICAgIGJvb2wgaGFuZGxpbmdUb3VjaEV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9oYW5kbGlu
Z1RvdWNoRXZlbnQ7IH0KICNlbmRpZgogCisgICAgSlNDOjpUaHJlYWRMb2NhbENhY2hlJiB0aHJl
YWRMb2NhbENhY2hlKCk7CisKIHByb3RlY3RlZDoKICAgICBlbnVtIENvbnN0cnVjdGlvbkZsYWdz
IHsgU3ludGhlc2l6ZWQgPSAxLCBOb25SZW5kZXJlZFBsYWNlaG9sZGVyID0gMSA8PCAxIH07CiAg
ICAgRG9jdW1lbnQoRnJhbWUqLCBjb25zdCBVUkwmLCB1bnNpZ25lZCA9IERlZmF1bHREb2N1bWVu
dENsYXNzLCB1bnNpZ25lZCBjb25zdHJ1Y3Rpb25GbGFncyA9IDApOwpAQCAtMTg5NSw2ICsxODk4
LDggQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgSGFzaFNldDxBcHBsaWNhdGlvblN0YXRlQ2hh
bmdlTGlzdGVuZXIqPiBtX2FwcGxpY2F0aW9uU3RhdGVDaGFuZ2VMaXN0ZW5lcnM7CisgICAgCisg
ICAgUmVmUHRyPEpTQzo6VGhyZWFkTG9jYWxDYWNoZT4gbV90aHJlYWRMb2NhbENhY2hlOwogfTsK
IAogRWxlbWVudCogZXZlbnRUYXJnZXRFbGVtZW50Rm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvT3JpZ2luVGhyZWFkTG9jYWxDYWNoZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9PcmlnaW5UaHJlYWRMb2NhbENhY2hlLmNwcAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL09yaWdpblRocmVhZExvY2FsQ2Fj
aGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIk9yaWdpblRocmVhZExvY2FsQ2FjaGUuaCIKKworI2luY2x1ZGUgIkNvbW1vblZNLmgiCisj
aW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5IYXNoLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Cit0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgT3JpZ2luVGhyZWFkTG9j
YWxDYWNoZSo+IFRocmVhZExvY2FsQ2FjaGVNYXA7CisKK3N0YXRpYyBUaHJlYWRMb2NhbENhY2hl
TWFwJiB0aHJlYWRMb2NhbENhY2hlTWFwKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
VGhyZWFkTG9jYWxDYWNoZU1hcD4gbWFwOworICAgIHJldHVybiBtYXA7Cit9CisKK1JlZjxPcmln
aW5UaHJlYWRMb2NhbENhY2hlPiBPcmlnaW5UaHJlYWRMb2NhbENhY2hlOjpjcmVhdGUoU2VjdXJp
dHlPcmlnaW4mIGtleSkKK3sKKyAgICBhdXRvIGl0ZXIgPSB0aHJlYWRMb2NhbENhY2hlTWFwKCku
ZmluZCgma2V5KTsKKyAgICBpZiAoaXRlciAhPSB0aHJlYWRMb2NhbENhY2hlTWFwKCkuZW5kKCkp
CisgICAgICAgIHJldHVybiAqaXRlci0+dmFsdWU7CisgICAgCisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgT3JpZ2luVGhyZWFkTG9jYWxDYWNoZShrZXkpKTsKK30KKworT3JpZ2luVGhyZWFkTG9j
YWxDYWNoZTo6fk9yaWdpblRocmVhZExvY2FsQ2FjaGUoKQoreworICAgIGJvb2wgcmVzdWx0ID0g
dGhyZWFkTG9jYWxDYWNoZU1hcCgpLnJlbW92ZShtX2tleSk7CisgICAgUkVMRUFTRV9BU1NFUlQo
cmVzdWx0KTsKK30KKworT3JpZ2luVGhyZWFkTG9jYWxDYWNoZTo6T3JpZ2luVGhyZWFkTG9jYWxD
YWNoZShTZWN1cml0eU9yaWdpbiYga2V5KQorICAgIDogVGhyZWFkTG9jYWxDYWNoZShjb21tb25W
TSgpLmhlYXAsIEpTQzo6dW5pcXVlU2VjdXJpdHlPcmlnaW5Ub2tlbigpKQorICAgICwgbV9rZXko
JmtleSkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IHRocmVhZExvY2FsQ2FjaGVNYXAoKS5hZGQoJmtl
eSwgdGhpcyk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL09yaWdpblRocmVhZExvY2Fs
Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL09yaWdpblRocmVhZExv
Y2FsQ2FjaGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL09yaWdpblRo
cmVhZExvY2FsQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlIDxoZWFwL1RocmVhZExvY2FsQ2Fj
aGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBPcmlnaW5UaHJlYWRMb2NhbENh
Y2hlIGZpbmFsIDogcHVibGljIEpTQzo6VGhyZWFkTG9jYWxDYWNoZSB7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZjxPcmlnaW5UaHJlYWRMb2NhbENhY2hlPiBjcmVhdGUoU2VjdXJpdHlPcmlnaW4m
KTsKKyAgICAKKyAgICB+T3JpZ2luVGhyZWFkTG9jYWxDYWNoZSgpIG92ZXJyaWRlOworCitwcml2
YXRlOgorICAgIGV4cGxpY2l0IE9yaWdpblRocmVhZExvY2FsQ2FjaGUoU2VjdXJpdHlPcmlnaW4m
KTsKKyAgICAKKyAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG1fa2V5OworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3Jp
Z2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2lu
LmNwcAkocmV2aXNpb24gMjI4MTA2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9y
aWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw3ICsxODAsNyBAQCBTZWN1cml0eU9yaWdp
bjo6U2VjdXJpdHlPcmlnaW4oY29uc3QgU2VjCiAgICAgLCBtX2RvbWFpbldhc1NldEluRE9NIHsg
b3RoZXItPm1fZG9tYWluV2FzU2V0SW5ET00gfQogICAgICwgbV9jYW5Mb2FkTG9jYWxSZXNvdXJj
ZXMgeyBvdGhlci0+bV9jYW5Mb2FkTG9jYWxSZXNvdXJjZXMgfQogICAgICwgbV9zdG9yYWdlQmxv
Y2tpbmdQb2xpY3kgeyBvdGhlci0+bV9zdG9yYWdlQmxvY2tpbmdQb2xpY3kgfQotICAgICwgbV9l
bmZvcmNlRmlsZVBhdGhTZXBhcmF0aW9uIHsgb3RoZXItPm1fZW5mb3JjZUZpbGVQYXRoU2VwYXJh
dGlvbiB9CisgICAgLCBtX2VuZm9yY2VzRmlsZVBhdGhTZXBhcmF0aW9uIHsgb3RoZXItPm1fZW5m
b3JjZXNGaWxlUGF0aFNlcGFyYXRpb24gfQogICAgICwgbV9uZWVkc1N0b3JhZ2VBY2Nlc3NGcm9t
RmlsZVVSTHNRdWlyayB7IG90aGVyLT5tX25lZWRzU3RvcmFnZUFjY2Vzc0Zyb21GaWxlVVJMc1F1
aXJrIH0KICAgICAsIG1faXNQb3RlbnRpYWxseVRydXN0d29ydGh5IHsgb3RoZXItPm1faXNQb3Rl
bnRpYWxseVRydXN0d29ydGh5IH0KIHsKQEAgLTI4Myw3ICsyODMsNyBAQCBib29sIFNlY3VyaXR5
T3JpZ2luOjpwYXNzZXNGaWxlQ2hlY2soY29uCiB7CiAgICAgQVNTRVJUKGlzTG9jYWwoKSAmJiBv
dGhlci5pc0xvY2FsKCkpOwogCi0gICAgcmV0dXJuICFtX2VuZm9yY2VGaWxlUGF0aFNlcGFyYXRp
b24gJiYgIW90aGVyLm1fZW5mb3JjZUZpbGVQYXRoU2VwYXJhdGlvbjsKKyAgICByZXR1cm4gIW1f
ZW5mb3JjZXNGaWxlUGF0aFNlcGFyYXRpb24gJiYgIW90aGVyLm1fZW5mb3JjZXNGaWxlUGF0aFNl
cGFyYXRpb247CiB9CiAKIGJvb2wgU2VjdXJpdHlPcmlnaW46OmNhblJlcXVlc3QoY29uc3QgVVJM
JiB1cmwpIGNvbnN0CkBAIC00NTMsMTAgKzQ1MywxMCBAQCBTdHJpbmcgU2VjdXJpdHlPcmlnaW46
OmRvbWFpbkZvckNhY2hlUGFyCiAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiB9CiAKLXZvaWQg
U2VjdXJpdHlPcmlnaW46OmVuZm9yY2VGaWxlUGF0aFNlcGFyYXRpb24oKQordm9pZCBTZWN1cml0
eU9yaWdpbjo6c2V0RW5mb3JjZXNGaWxlUGF0aFNlcGFyYXRpb24oKQogewogICAgIEFTU0VSVChp
c0xvY2FsKCkpOwotICAgIG1fZW5mb3JjZUZpbGVQYXRoU2VwYXJhdGlvbiA9IHRydWU7CisgICAg
bV9lbmZvcmNlc0ZpbGVQYXRoU2VwYXJhdGlvbiA9IHRydWU7CiB9CiAKIGJvb2wgU2VjdXJpdHlP
cmlnaW46OmlzTG9jYWwoKSBjb25zdApAQCAtNDY4LDcgKzQ2OCw3IEBAIFN0cmluZyBTZWN1cml0
eU9yaWdpbjo6dG9TdHJpbmcoKSBjb25zdAogewogICAgIGlmIChpc1VuaXF1ZSgpKQogICAgICAg
ICByZXR1cm4gQVNDSUlMaXRlcmFsKCJudWxsIik7Ci0gICAgaWYgKG1fcHJvdG9jb2wgPT0gImZp
bGUiICYmIG1fZW5mb3JjZUZpbGVQYXRoU2VwYXJhdGlvbikKKyAgICBpZiAobV9wcm90b2NvbCA9
PSAiZmlsZSIgJiYgbV9lbmZvcmNlc0ZpbGVQYXRoU2VwYXJhdGlvbikKICAgICAgICAgcmV0dXJu
IEFTQ0lJTGl0ZXJhbCgibnVsbCIpOwogICAgIHJldHVybiB0b1Jhd1N0cmluZygpOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uaAkocmV2aXNpb24gMjI4MTA2KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTY1LDcgKzE2NSw4IEBAIHB1YmxpYzoKICAgICAvLyBNYXJrcyBhIGZpbGU6Ly8gb3JpZ2luIGFz
IGJlaW5nIGluIGEgZG9tYWluIGRlZmluZWQgYnkgaXRzIHBhdGguCiAgICAgLy8gRklYTUUgODE1
Nzg6IFRoZSBuYW1pbmcgb2YgdGhpcyBpcyBjb25mdXNpbmcuIEZpbGVzIHdpdGggcmVzdHJpY3Rl
ZCBhY2Nlc3MgdG8gb3RoZXIgbG9jYWwgZmlsZXMKICAgICAvLyBzdGlsbCBjYW4gaGF2ZSBvdGhl
ciBwcml2aWxlZ2VzIHRoYXQgY2FuIGJlIHJlbWVtYmVyZWQsIHRoZXJlYnkgbm90IG1ha2luZyB0
aGVtIHVuaXF1ZS4KLSAgICB2b2lkIGVuZm9yY2VGaWxlUGF0aFNlcGFyYXRpb24oKTsKKyAgICB2
b2lkIHNldEVuZm9yY2VzRmlsZVBhdGhTZXBhcmF0aW9uKCk7CisgICAgYm9vbCBlbmZvcmNlc0Zp
bGVQYXRoU2VwYXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5mb3JjZXNGaWxlUGF0aFNlcGFy
YXRpb247IH0KIAogICAgIC8vIENvbnZlcnQgdGhpcyBTZWN1cml0eU9yaWdpbiBpbnRvIGEgc3Ry
aW5nLiBUaGUgc3RyaW5nCiAgICAgLy8gcmVwcmVzZW50YXRpb24gb2YgYSBTZWN1cml0eU9yaWdp
biBpcyBzaW1pbGFyIHRvIGEgVVJMLCBleGNlcHQgaXQKQEAgLTIyOSw3ICsyMzAsNyBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9kb21haW5XYXNTZXRJbkRPTSB7IGZhbHNlIH07CiAgICAgYm9vbCBt
X2NhbkxvYWRMb2NhbFJlc291cmNlcyB7IGZhbHNlIH07CiAgICAgU3RvcmFnZUJsb2NraW5nUG9s
aWN5IG1fc3RvcmFnZUJsb2NraW5nUG9saWN5IHsgQWxsb3dBbGxTdG9yYWdlIH07Ci0gICAgYm9v
bCBtX2VuZm9yY2VGaWxlUGF0aFNlcGFyYXRpb24geyBmYWxzZSB9OworICAgIGJvb2wgbV9lbmZv
cmNlc0ZpbGVQYXRoU2VwYXJhdGlvbiB7IGZhbHNlIH07CiAgICAgYm9vbCBtX25lZWRzU3RvcmFn
ZUFjY2Vzc0Zyb21GaWxlVVJMc1F1aXJrIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNQb3RlbnRp
YWxseVRydXN0d29ydGh5IHsgZmFsc2UgfTsKIH07Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>