<?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>207715</bug_id>
          
          <creation_ts>2020-02-13 12:23:43 -0800</creation_ts>
          <short_desc>[JSC] JITThunk should be HashSet&lt;Weak&lt;NativeExecutable&gt;&gt; with appropriate GC weakness handling</short_desc>
          <delta_ts>2022-02-12 19:52:15 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=207712</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>207712</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1618655</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-13 12:23:43 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619200</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-02-14 14:15:21 -0800</bug_when>
    <thetext>&lt;rdar://problem/59471675&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619344</commentid>
    <comment_count>2</comment_count>
      <attachid>390848</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-14 19:17:53 -0800</bug_when>
    <thetext>Created attachment 390848
Patch

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619349</commentid>
    <comment_count>3</comment_count>
      <attachid>390849</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-14 19:23:36 -0800</bug_when>
    <thetext>Created attachment 390849
Patch

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619353</commentid>
    <comment_count>4</comment_count>
      <attachid>390852</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-14 20:05:26 -0800</bug_when>
    <thetext>Created attachment 390852
Patch

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619385</commentid>
    <comment_count>5</comment_count>
      <attachid>390858</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-14 23:31:28 -0800</bug_when>
    <thetext>Created attachment 390858
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619514</commentid>
    <comment_count>6</comment_count>
      <attachid>390858</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-16 15:35:32 -0800</bug_when>
    <thetext>Comment on attachment 390858
Patch

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

Did not do review+ yet because of the EWS failure

&gt; Source/JavaScriptCore/heap/Weak.h:52
&gt; +    inline Weak(T*, WeakHandleOwner* = nullptr, void* context = nullptr);

What value does the “inline” keyword here have? Couldn’t we omit it without changing anything?

&gt; Source/JavaScriptCore/heap/Weak.h:55
&gt; +    inline Weak(WTF::HashTableDeletedValueType);

Ditto.

&gt; Source/JavaScriptCore/heap/Weak.h:56
&gt; +    inline bool isHashTableEmptyValue() const;

Ditto.

&gt; Source/JavaScriptCore/heap/Weak.h:79
&gt; +    inline WeakImpl* unsafeImpl() const { return m_impl; }

Ditto.

&gt; Source/JavaScriptCore/heap/WeakInlines.h:44
&gt; +template&lt;typename T&gt; inline bool Weak&lt;T&gt;::isHashTableEmptyValue() const

Can this be constexpr instead of just inline? But also, why do we need the inline keyword? As I understand it inline primarily relaxes the one definition rule so we can include things in headers. Templates already have that relaxed so I don’t think we need to say “inline”.

&gt; Source/JavaScriptCore/heap/WeakInlines.h:49
&gt; +template&lt;typename T&gt; inline Weak&lt;T&gt;::Weak(WTF::HashTableDeletedValueType)

Same questions. Can we use constexpr instead? Can we omit inline?

&gt; Source/JavaScriptCore/jit/JITThunks.cpp:47
&gt; +inline unsigned JITThunks::WeakNativeExecutableHash::hash(const NativeExecutable* executable)

Seems unnecessary to say “inline” on this function (here or in the header). Whether it’s compile in line or not is likely unaffected by that.

&gt; Source/JavaScriptCore/jit/JITThunks.cpp:52
&gt; +inline unsigned JITThunks::WeakNativeExecutableHash::hash(const Weak&lt;NativeExecutable&gt;&amp; key)

Ditto.

&gt; Source/JavaScriptCore/jit/JITThunks.cpp:66
&gt; +inline bool JITThunks::WeakNativeExecutableHash::equal(const Weak&lt;NativeExecutable&gt;&amp; a, const Weak&lt;NativeExecutable&gt;&amp; b)

Ditto.

&gt; Source/JavaScriptCore/jit/JITThunks.cpp:70
&gt; +    auto* bImpl = b.unsafeImpl();

Can we just do the bImpl assertions and call the equal function that takes a raw pointer? Would be nice to have less repetitive code. Maybe even write a function that gets the executable pointer and does the assertions so we don’t have to repeat those.

&gt; Source/JavaScriptCore/jit/JITThunks.cpp:82
&gt; +inline bool JITThunks::WeakNativeExecutableHash::equal(const Weak&lt;NativeExecutable&gt;&amp; a, const NativeExecutable* bExecutable)

Ditto.

&gt; Source/JavaScriptCore/jit/JITThunks.cpp:181
&gt; +        auto iterator = m_nativeExecutableSet.find&lt;HostKeySearcher&gt;(hostFunctionKey);

Seems like we should be using remove directly instead of find/remove. I suppose using find/remove lets us write assertions.

&gt; Source/JavaScriptCore/jit/JITThunks.cpp:202
&gt; +        auto iterator = m_nativeExecutableSet.find&lt;HostKeySearcher&gt;(hostFunctionKey);

Can we write this with HashSet::get instead of find/end/iterator-&gt;get()?

&gt; Source/JavaScriptCore/jit/JITThunks.cpp:227
&gt; +            {

I don’t think we need braces here.

&gt; Source/JavaScriptCore/jit/JITThunks.cpp:228
&gt; +                // Override the existing Weak&lt;NativeExecutable&gt; with the new one since it is dead.

Usually this kind of operation is called set&lt;&gt; but maybe we don’t have a suitable one for Weak?

&gt; Source/JavaScriptCore/jit/JITThunks.cpp:234
&gt; +            {

I don’t think we need braces here.

&gt; Source/JavaScriptCore/jit/JITThunks.h:87
&gt; +        static bool equal(const Weak&lt;NativeExecutable&gt;&amp;, const NativeExecutable*);

The const here is different from the other const. Not clear why the NativeExecutable is const in this case, but not in the others. Consider that “const NativeExecutable*” is like “Weak&lt;const NativeExecutable&gt;”.

&gt; Source/JavaScriptCore/jit/JITThunks.h:98
&gt; +            unsigned hash = WTF::pairIntHash(hashPointer(function), hashPointer(constructor));

All this hashing things that are already hashed seems unfortunate. I think it’s a better pattern to use Hasher the way we would use a StringBuilder. That’s what the computeHash function template is for. Something like this should work:

    return computeHash(function, constructor, name);

It it doesn’t work would be nice to fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619607</commentid>
    <comment_count>7</comment_count>
      <attachid>390858</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-17 02:35:10 -0800</bug_when>
    <thetext>Comment on attachment 390858
Patch

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

EWS failure is due to the different Wasm patch.

&gt;&gt; Source/JavaScriptCore/heap/Weak.h:52
&gt;&gt; +    inline Weak(T*, WeakHandleOwner* = nullptr, void* context = nullptr);
&gt; 
&gt; What value does the “inline” keyword here have? Couldn’t we omit it without changing anything?

We can omit it. Fixed.

&gt;&gt; Source/JavaScriptCore/heap/Weak.h:55
&gt;&gt; +    inline Weak(WTF::HashTableDeletedValueType);
&gt; 
&gt; Ditto.

Ditto.

&gt;&gt; Source/JavaScriptCore/heap/Weak.h:56
&gt;&gt; +    inline bool isHashTableEmptyValue() const;
&gt; 
&gt; Ditto.

Ditto.

&gt;&gt; Source/JavaScriptCore/heap/Weak.h:79
&gt;&gt; +    inline WeakImpl* unsafeImpl() const { return m_impl; }
&gt; 
&gt; Ditto.

Ditto

&gt;&gt; Source/JavaScriptCore/heap/WeakInlines.h:44
&gt;&gt; +template&lt;typename T&gt; inline bool Weak&lt;T&gt;::isHashTableEmptyValue() const
&gt; 
&gt; Can this be constexpr instead of just inline? But also, why do we need the inline keyword? As I understand it inline primarily relaxes the one definition rule so we can include things in headers. Templates already have that relaxed so I don’t think we need to say “inline”.

I think we can omit it. This “inline” exists just because it was here before this patch.

&gt;&gt; Source/JavaScriptCore/heap/WeakInlines.h:49
&gt;&gt; +template&lt;typename T&gt; inline Weak&lt;T&gt;::Weak(WTF::HashTableDeletedValueType)
&gt; 
&gt; Same questions. Can we use constexpr instead? Can we omit inline?

Yes, fixed.

&gt;&gt; Source/JavaScriptCore/jit/JITThunks.cpp:47
&gt;&gt; +inline unsigned JITThunks::WeakNativeExecutableHash::hash(const NativeExecutable* executable)
&gt; 
&gt; Seems unnecessary to say “inline” on this function (here or in the header). Whether it’s compile in line or not is likely unaffected by that.

I would like to put here since this can ensure that (1) it is inlined, and (2) it is ensured that this function in only called from this cpp file.

&gt;&gt; Source/JavaScriptCore/jit/JITThunks.cpp:52
&gt;&gt; +inline unsigned JITThunks::WeakNativeExecutableHash::hash(const Weak&lt;NativeExecutable&gt;&amp; key)
&gt; 
&gt; Ditto.

Ditto here.

&gt;&gt; Source/JavaScriptCore/jit/JITThunks.cpp:66
&gt;&gt; +inline bool JITThunks::WeakNativeExecutableHash::equal(const Weak&lt;NativeExecutable&gt;&amp; a, const Weak&lt;NativeExecutable&gt;&amp; b)
&gt; 
&gt; Ditto.

Ditto here.

&gt;&gt; Source/JavaScriptCore/jit/JITThunks.cpp:70
&gt;&gt; +    auto* bImpl = b.unsafeImpl();
&gt; 
&gt; Can we just do the bImpl assertions and call the equal function that takes a raw pointer? Would be nice to have less repetitive code. Maybe even write a function that gets the executable pointer and does the assertions so we don’t have to repeat those.

Fixed.

&gt;&gt; Source/JavaScriptCore/jit/JITThunks.cpp:82
&gt;&gt; +inline bool JITThunks::WeakNativeExecutableHash::equal(const Weak&lt;NativeExecutable&gt;&amp; a, const NativeExecutable* bExecutable)
&gt; 
&gt; Ditto.

Fixed.

&gt;&gt; Source/JavaScriptCore/jit/JITThunks.cpp:181
&gt;&gt; +        auto iterator = m_nativeExecutableSet.find&lt;HostKeySearcher&gt;(hostFunctionKey);
&gt; 
&gt; Seems like we should be using remove directly instead of find/remove. I suppose using find/remove lets us write assertions.

We currently do no support remove using HashTranslator. In this patch, I’ll just use find and remove which works without introducing inefficiency.

&gt;&gt; Source/JavaScriptCore/jit/JITThunks.cpp:202
&gt;&gt; +        auto iterator = m_nativeExecutableSet.find&lt;HostKeySearcher&gt;(hostFunctionKey);
&gt; 
&gt; Can we write this with HashSet::get instead of find/end/iterator-&gt;get()?

We currently do not support get w/ HashTranslator, so this patch just uses find.

&gt;&gt; Source/JavaScriptCore/jit/JITThunks.cpp:227
&gt;&gt; +            {
&gt; 
&gt; I don’t think we need braces here.

It is just added to perform sanity check after cleaning up all iterators etc. OK for removing.

&gt;&gt; Source/JavaScriptCore/jit/JITThunks.cpp:228
&gt;&gt; +                // Override the existing Weak&lt;NativeExecutable&gt; with the new one since it is dead.
&gt; 
&gt; Usually this kind of operation is called set&lt;&gt; but maybe we don’t have a suitable one for Weak?

HashSet does not have set currently. We could add it but I would like to put this as a FIXME since this is not related to JITThunks’ change itself.

&gt;&gt; Source/JavaScriptCore/jit/JITThunks.cpp:234
&gt;&gt; +            {
&gt; 
&gt; I don’t think we need braces here.

Ditto.

&gt;&gt; Source/JavaScriptCore/jit/JITThunks.h:87
&gt;&gt; +        static bool equal(const Weak&lt;NativeExecutable&gt;&amp;, const NativeExecutable*);
&gt; 
&gt; The const here is different from the other const. Not clear why the NativeExecutable is const in this case, but not in the others. Consider that “const NativeExecutable*” is like “Weak&lt;const NativeExecutable&gt;”.

Just removing const here is OK. I think we do not have an implementation of Weak&lt;const NativeExecutable&gt; and maybe adding it is not so profitable.

&gt;&gt; Source/JavaScriptCore/jit/JITThunks.h:98
&gt;&gt; +            unsigned hash = WTF::pairIntHash(hashPointer(function), hashPointer(constructor));
&gt; 
&gt; All this hashing things that are already hashed seems unfortunate. I think it’s a better pattern to use Hasher the way we would use a StringBuilder. That’s what the computeHash function template is for. Something like this should work:
&gt; 
&gt;     return computeHash(function, constructor, name);
&gt; 
&gt; It it doesn’t work would be nice to fix it.

Checking, if it does not work, I’ll put FIXME for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619611</commentid>
    <comment_count>8</comment_count>
      <attachid>390858</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-17 02:53:30 -0800</bug_when>
    <thetext>Comment on attachment 390858
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/heap/WeakInlines.h:49
&gt;&gt;&gt; +template&lt;typename T&gt; inline Weak&lt;T&gt;::Weak(WTF::HashTableDeletedValueType)
&gt;&gt; 
&gt;&gt; Same questions. Can we use constexpr instead? Can we omit inline?
&gt; 
&gt; Yes, fixed.

Unfortunately, it is not possible because we cannot produce hashTableDeletedValue without using reinterpret_cast, which is not constexpr.

&gt;&gt;&gt; Source/JavaScriptCore/jit/JITThunks.h:98
&gt;&gt;&gt; +            unsigned hash = WTF::pairIntHash(hashPointer(function), hashPointer(constructor));
&gt;&gt; 
&gt;&gt; All this hashing things that are already hashed seems unfortunate. I think it’s a better pattern to use Hasher the way we would use a StringBuilder. That’s what the computeHash function template is for. Something like this should work:
&gt;&gt; 
&gt;&gt;     return computeHash(function, constructor, name);
&gt;&gt; 
&gt;&gt; It it doesn’t work would be nice to fix it.
&gt; 
&gt; Checking, if it does not work, I’ll put FIXME for now.

Didn&apos;t work. putting FIXME here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619615</commentid>
    <comment_count>9</comment_count>
      <attachid>390908</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-17 02:56:56 -0800</bug_when>
    <thetext>Created attachment 390908
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619617</commentid>
    <comment_count>10</comment_count>
      <attachid>390910</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-17 02:59:59 -0800</bug_when>
    <thetext>Created attachment 390910
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619783</commentid>
    <comment_count>11</comment_count>
      <attachid>390858</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-17 12:18:55 -0800</bug_when>
    <thetext>Comment on attachment 390858
Patch

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

Thanks for your thoughtful consideration of all my comments.

&gt;&gt;&gt; Source/JavaScriptCore/jit/JITThunks.cpp:47
&gt;&gt;&gt; +inline unsigned JITThunks::WeakNativeExecutableHash::hash(const NativeExecutable* executable)
&gt;&gt; 
&gt;&gt; Seems unnecessary to say “inline” on this function (here or in the header). Whether it’s compile in line or not is likely unaffected by that.
&gt; 
&gt; I would like to put here since this can ensure that (1) it is inlined, and (2) it is ensured that this function in only called from this cpp file.

Sounds OK. Does writing &quot;inline&quot; ensure (1) and (2)? For (1), if it’s not inlined, how do we find out? I’m quite sure that writing &quot;inline&quot; does not guarantee something is inlined. For (2), I guess if it it’s called from outside the file, maybe we find out because of a linker error in release builds?

&gt;&gt;&gt; Source/JavaScriptCore/jit/JITThunks.cpp:227
&gt;&gt;&gt; +            {
&gt;&gt; 
&gt;&gt; I don’t think we need braces here.
&gt; 
&gt; It is just added to perform sanity check after cleaning up all iterators etc. OK for removing.

I don’t understand what you mean. Sanity check of what?

&gt;&gt;&gt; Source/JavaScriptCore/jit/JITThunks.cpp:234
&gt;&gt;&gt; +            {
&gt;&gt; 
&gt;&gt; I don’t think we need braces here.
&gt; 
&gt; Ditto.

I think these braces have no effect. I don’t understand what you mean.

&gt;&gt;&gt;&gt; Source/JavaScriptCore/jit/JITThunks.h:98
&gt;&gt;&gt;&gt; +            unsigned hash = WTF::pairIntHash(hashPointer(function), hashPointer(constructor));
&gt;&gt;&gt; 
&gt;&gt;&gt; All this hashing things that are already hashed seems unfortunate. I think it’s a better pattern to use Hasher the way we would use a StringBuilder. That’s what the computeHash function template is for. Something like this should work:
&gt;&gt;&gt; 
&gt;&gt;&gt;     return computeHash(function, constructor, name);
&gt;&gt;&gt; 
&gt;&gt;&gt; It it doesn’t work would be nice to fix it.
&gt;&gt; 
&gt;&gt; Checking, if it does not work, I’ll put FIXME for now.
&gt; 
&gt; Didn&apos;t work. putting FIXME here.

I’d love to fix Hasher so it can handle this case. Glad you added the FIXME.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619786</commentid>
    <comment_count>12</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-02-17 12:22:47 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #11)
&gt; Comment on attachment 390858 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=390858&amp;action=review
&gt; 
&gt; Thanks for your thoughtful consideration of all my comments.
&gt; 
&gt; &gt;&gt;&gt; Source/JavaScriptCore/jit/JITThunks.cpp:47
&gt; &gt;&gt;&gt; +inline unsigned JITThunks::WeakNativeExecutableHash::hash(const NativeExecutable* executable)
&gt; &gt;&gt; 
&gt; &gt;&gt; Seems unnecessary to say “inline” on this function (here or in the header). Whether it’s compile in line or not is likely unaffected by that.
&gt; &gt; 
&gt; &gt; I would like to put here since this can ensure that (1) it is inlined, and (2) it is ensured that this function in only called from this cpp file.
&gt; 
&gt; Sounds OK. Does writing &quot;inline&quot; ensure (1) and (2)? For (1), if it’s not
&gt; inlined, how do we find out? I’m quite sure that writing &quot;inline&quot; does not
&gt; guarantee something is inlined. For (2), I guess if it it’s called from
&gt; outside the file, maybe we find out because of a linker error in release
&gt; builds?

With the inline modifier, if the inline implementation is not present in the current compilation unit, we&apos;ll get a compile time error.  Without the inline modifier, we&apos;ll have to wait till link time to find out, and only on a non-debug build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619790</commentid>
    <comment_count>13</comment_count>
      <attachid>390910</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-17 12:24:18 -0800</bug_when>
    <thetext>Comment on attachment 390910
Patch

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

&gt; Source/JavaScriptCore/jit/JITThunks.cpp:69
&gt; +    if (&amp;a == &amp;b)
&gt; +        return true;

Is this an important optimization?

&gt; Source/JavaScriptCore/jit/JITThunks.cpp:91
&gt; +    auto* aImpl = a.unsafeImpl();
&gt; +    ASSERT(aImpl);
&gt; +    ASSERT(aImpl-&gt;state() != WeakImpl::State::Deallocated);
&gt; +    return equal(*static_cast&lt;NativeExecutable*&gt;(aImpl-&gt;jsValue().asCell()), *bExecutable);

I think that this sequence should be a helper function. Going from a Weak&lt;NativeExecutable&gt; to a NativeExecutable&amp; with all the assertions. Instead it’s repeated three times. Twice above and once here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619794</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-17 12:26:29 -0800</bug_when>
    <thetext>(In reply to Mark Lam from comment #12)
&gt; With the inline modifier, if the inline implementation is not present in the
&gt; current compilation unit, we&apos;ll get a compile time error.  Without the
&gt; inline modifier, we&apos;ll have to wait till link time to find out, and only on
&gt; a non-debug build.

You are talking about the inline modifier inside the class definition. That’s a good point for cases like this. Ones where we intentionally have the inline in the .cpp file and want to make sure no one accidentally uses it outside the .cpp file. That’s one case where I could imagine using it the class definition.

Here we were discussing the use of the inline modifier in front of the function definition in the .cpp file, which is a different topic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619808</commentid>
    <comment_count>15</comment_count>
      <attachid>390858</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-17 12:42:41 -0800</bug_when>
    <thetext>Comment on attachment 390858
Patch

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

&gt;&gt;&gt;&gt; Source/JavaScriptCore/jit/JITThunks.cpp:227
&gt;&gt;&gt;&gt; +            {
&gt;&gt;&gt; 
&gt;&gt;&gt; I don’t think we need braces here.
&gt;&gt; 
&gt;&gt; It is just added to perform sanity check after cleaning up all iterators etc. OK for removing.
&gt; 
&gt; I don’t understand what you mean. Sanity check of what?

The code rounded by `#if ASSERT_ENABLED` is sanity-checking code. My original intention was, I would like to perform this sanity-checking code after cleaning up all the use of this hashset including iterators.
That&apos;s why I had braces here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619814</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-17 12:48:38 -0800</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #15)
&gt; The code rounded by `#if ASSERT_ENABLED` is sanity-checking code. My
&gt; original intention was, I would like to perform this sanity-checking code
&gt; after cleaning up all the use of this hashset including iterators.
&gt; That&apos;s why I had braces here.

What’s an example of an iterator that needs to be cleaned up? Is there one in a local variable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619816</commentid>
    <comment_count>17</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-02-17 12:51:22 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #14)
&gt; (In reply to Mark Lam from comment #12)
&gt; &gt; With the inline modifier, if the inline implementation is not present in the
&gt; &gt; current compilation unit, we&apos;ll get a compile time error.  Without the
&gt; &gt; inline modifier, we&apos;ll have to wait till link time to find out, and only on
&gt; &gt; a non-debug build.
&gt; 
&gt; You are talking about the inline modifier inside the class definition.
&gt; That’s a good point for cases like this. Ones where we intentionally have
&gt; the inline in the .cpp file and want to make sure no one accidentally uses
&gt; it outside the .cpp file. That’s one case where I could imagine using it the
&gt; class definition.
&gt; 
&gt; Here we were discussing the use of the inline modifier in front of the
&gt; function definition in the .cpp file, which is a different topic.

Oops, you&apos;re right.  Sorry for the noise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619817</commentid>
    <comment_count>18</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-17 12:52:36 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #16)
&gt; (In reply to Yusuke Suzuki from comment #15)
&gt; &gt; The code rounded by `#if ASSERT_ENABLED` is sanity-checking code. My
&gt; &gt; original intention was, I would like to perform this sanity-checking code
&gt; &gt; after cleaning up all the use of this hashset including iterators.
&gt; &gt; That&apos;s why I had braces here.
&gt; 
&gt; What’s an example of an iterator that needs to be cleaned up? Is there one
&gt; in a local variable?

The iterator can affect on HashSet&apos;s invalidated-iterator tracking code.
In this code&apos;s use case, this does not matter. But when performing sanity-checking code, I personally like to perform it in an isolated way, which cleans up all the related data to the sanity-checked data-structure :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619835</commentid>
    <comment_count>19</comment_count>
      <attachid>390910</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-17 13:22:55 -0800</bug_when>
    <thetext>Comment on attachment 390910
Patch

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

&gt;&gt; Source/JavaScriptCore/jit/JITThunks.cpp:69
&gt;&gt; +        return true;
&gt; 
&gt; Is this an important optimization?

Yes, this is important. This path should be encouraged when rehashing happens in HashSet.

&gt;&gt; Source/JavaScriptCore/jit/JITThunks.cpp:91
&gt;&gt; +    return equal(*static_cast&lt;NativeExecutable*&gt;(aImpl-&gt;jsValue().asCell()), *bExecutable);
&gt; 
&gt; I think that this sequence should be a helper function. Going from a Weak&lt;NativeExecutable&gt; to a NativeExecutable&amp; with all the assertions. Instead it’s repeated three times. Twice above and once here.

OK, I see. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619844</commentid>
    <comment_count>20</comment_count>
      <attachid>390858</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-17 13:33:23 -0800</bug_when>
    <thetext>Comment on attachment 390858
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/JavaScriptCore/jit/JITThunks.cpp:47
&gt;&gt;&gt;&gt;&gt; +inline unsigned JITThunks::WeakNativeExecutableHash::hash(const NativeExecutable* executable)
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Seems unnecessary to say “inline” on this function (here or in the header). Whether it’s compile in line or not is likely unaffected by that.
&gt;&gt;&gt; 
&gt;&gt;&gt; I would like to put here since this can ensure that (1) it is inlined, and (2) it is ensured that this function in only called from this cpp file.
&gt;&gt; 
&gt;&gt; Sounds OK. Does writing &quot;inline&quot; ensure (1) and (2)? For (1), if it’s not inlined, how do we find out? I’m quite sure that writing &quot;inline&quot; does not guarantee something is inlined. For (2), I guess if it it’s called from outside the file, maybe we find out because of a linker error in release builds?
&gt; 
&gt; With the inline modifier, if the inline implementation is not present in the current compilation unit, we&apos;ll get a compile time error.  Without the inline modifier, we&apos;ll have to wait till link time to find out, and only on a non-debug build.

This inline case, I intend to enforce (2) thing by putting &quot;inline&quot; in cpp file side. Putting &quot;inline&quot; in function declarations in class / function definition in cpp file is the same. And I think we tend to put &quot;inline&quot; in definition instead of declaration :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1619912</commentid>
    <comment_count>21</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-17 14:58:55 -0800</bug_when>
    <thetext>Committed r256779: &lt;https://trac.webkit.org/changeset/256779&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1840823</commentid>
    <comment_count>22</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2022-02-12 19:52:15 -0800</bug_when>
    <thetext>*** Bug 186736 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390848</attachid>
            <date>2020-02-14 19:17:53 -0800</date>
            <delta_ts>2020-02-14 19:23:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207715-20200214191752.patch</filename>
            <type>text/plain</type>
            <size>20710</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2NjM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
NTgzY2M1MmNjYjU4Y2NiOWQwN2IxMjFhYzBhYzVlYjI2ZTcxZDJjLi5mNGJiOTM4NGVkYWFlMzAy
OGI1NTlmZDNmOWVlM2VlMDA4YzExOGZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MiBAQAorMjAyMC0wMi0xNCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIEpJVFRodW5rIHNob3VsZCBiZSBIYXNoU2V0PFdlYWs8TmF0aXZl
RXhlY3V0YWJsZT4+IHdpdGggYXBwcm9wcmlhdGUgR0Mgd2Vha25lc3MgaGFuZGxpbmcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzcxNQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVm
aW5lcyBKSVRUaHVua3MgR0MtYXdhcmUgV2VhayBoYXNoIG1hcCBmb3IgTmF0aXZlRXhlY3V0YWJs
ZS4gUHJldmlvdXNseSwgd2UgaGF2ZQorICAgICAgICBIYXNoTWFwPHN0ZDo6dHVwbGU8VGFnZ2Vk
TmF0aXZlRnVuY3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uLCBTdHJpbmc+LCBXZWFrPE5hdGl2
ZUV4ZWN1dGFibGU+PiB0YWJsZS4KKyAgICAgICAgQnV0IHRoaXMgaXMgbm90IGdvb2QgYmVjYXVz
ZSB0aGUgZmlyc3QgdHVwbGUncyBpbmZvcm1hdGlvbiBpcyBhbHJlYWR5IGluIE5hdGl2ZUV4ZWN1
dGFibGUuCisgICAgICAgIEJ1dCB3ZSB3ZXJlIHVzaW5nIHRoaXMgZGVzaWduIHNpbmNlIFdlYWs8
TmF0aXZlRXhlY3V0YWJsZT4gY2FuIGJlIG51bGxpZmllZCBiZWNhdXNlIG9mIFdlYWs8Pi4gSWYg
dGhpcworICAgICAgICBoYXBwZW5zLCB3ZSBjb3VsZCBoYXZlIGludmFsaWQgRW50cnkgaW4gSGFz
aE1hcCB3aGljaCBkb2VzIG5vdCBoYXZlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLiBUaGlzIHdpbGwK
KyAgICAgICAgY2F1c2UgY3Jhc2ggd2hlbiByZWhhc2luZyByZXF1aXJlcyBoYXNoIGNvZGUgZm9y
IHRoaXMgZW50cnkuCisKKyAgICAgICAgQnV0IHRoaXMgSGFzaE1hcCBpcyB2ZXJ5IGJhZCBpbiB0
ZXJtcyBvZiBtZW1vcnkgdXNhZ2UuIEVhY2ggZW50cnkgaGFzIDMyIGJ5dGVzLCBhbmQgdGhpcyB0
YWJsZSBnZXRzIGVub3VnaAorICAgICAgICBsYXJnZS4gV2UgaWRlbnRpZmllZCB0aGF0IHRoaXMg
dGFibGUgaXMgY29uc3VtaW5nIG11Y2ggbWVtb3J5IGluIE1lbWJ1c3Rlci4gU28gaXQgaXMgd29y
dGggZGVzaWduaW5nCisgICAgICAgIGNhcmVmdWxseSBjcmFmdGVkIGRhdGEgc3RydWN0dXJlIHdo
aWNoIG9ubHkgaG9sZHMgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiBieSBsZXZlcmFnaW5nIHRoZSBk
ZWVwIGludGVyYWN0aW9uCisgICAgICAgIHdpdGggb3VyIEdDIGltcGxlbWVudGF0aW9uLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBuZXcgZGVzaWduIG9mIEpJVFRodW5rcywgd2hp
Y2ggdXNlcyBIYXNoU2V0PFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4+IGFuZCBjYXJlZnVsbHkgY3Jh
ZnRlZAorICAgICAgICBIYXNoVHJhaXRzIC8gS2V5VHJhaXRzIHRvIGhhbmRsZSBXZWFrPD4gd2Vs
bC4KKworICAgICAgICAxLiBFYWNoIFdlYWsgc2hvdWxkIGhhdmUgZmluYWxpemVyLCBhbmQgdGhp
cyBmaW5hbGl6ZXIgc2hvdWxkIHJlbW92ZSBkZWFkIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4gZnJv
bSBIYXNoU2V0LgorCisgICAgICAgICAgICBUaGlzIGlzIGVuc3VyaW5nIHRoYXQgYWxsIHRoZSBr
ZXlzIGluIEhhc2hTZXQgaXMsIGV2ZW4gaWYgV2Vhazw+IGlzIHNheWluZyBpdCBpcyBEZWFkLCBp
dCBzdGlsbCBoYXMgYW4gd2F5CisgICAgICAgICAgICB0byBhY2Nlc3MgY29udGVudCBvZiBOYXRp
dmVFeGVjdXRhYmxlIGlmIHRoZSBjb250ZW50IGlzIG5vdCBhIEpTIG9iamVjdHMuIEZvciBleGFt
cGxlLCB3ZSBjYW4gZ2V0IGZ1bmN0aW9uCisgICAgICAgICAgICBwb2ludGVyIGZyb20gZGVhZCBX
ZWFrPE5hdGl2ZUV4ZWN1dGFibGU+IGlmIGl0IGlzIG5vdCB5ZXQgZmluYWxpemVkLiBTaW5jZSB3
ZSByZW1vdmUgYWxsIGZpbmFsaXplZCBXZWFrPD4KKyAgICAgICAgICAgIGZyb20gdGhlIHRhYmxl
LCB0aGlzIGZpbmFsaXplciBtZWNoYW5pc20gYWxsb3dzIHVzIHRvIGFjY2VzcyBmdW5jdGlvbiBw
b2ludGVycyBldGMuIGZyb20gV2VhazxOYXRpdmVFeGVjdXRhYmxlPgorICAgICAgICAgICAgc28g
bG9uZyBhcyBpdCBpcyBoZWxkIGluIHRoaXMgdGFibGUuCisKKyAgICAgICAgMi4gR2V0dGluZyBO
YXRpdmVFeGVjdXRhYmxlKiBmcm9tIEpJVFRodW5rcyBzaG91bGQgaGF2ZSBzcGVjaWFsIHByb3Rv
Y29sLgorCisgICAgICAgICAgICBXaGVuIGdldHRpbmcgTmF0aXZlRXhlY3V0YWJsZSogZnJvbSBK
SVRUaHVua3MsIHdlIGRvIHRoZSBmb2xsb3dpbmcsCisKKyAgICAgICAgICAgIDEuIEZpcnN0LCB3
ZSBjaGVjayB3ZSBoYXZlIGFuIEVudHJ5IGluIEpJVFRodW5rcy4gSWYgaXQgZG9lcyBub3QgZXhp
c3QsIHdlIHNob3VsZCBpbnNlcnQgaXQgYW55d2F5LgorICAgICAgICAgICAgICAgIDEuMS4gSWYg
aXQgZXhpc3RzLCB3ZSBzaG91bGQgY2hlY2sgd2hldGhlciB0aGlzIFdlYWs8TmF0aXZlRXhlY3V0
YWJsZT4gaXMgZGVhZCBvciBub3QuIEl0IGlzIHBvc3NpYmxlIHRoYXQKKyAgICAgICAgICAgICAg
ICAgICAgIGRlYWQgb25lIGlzIHN0aWxsIGluIHRoZSB0YWJsZSBiZWNhdXNlICJkZWFkIiBkb2Vz
IG5vdCBtZWFuIHRoYXQgaXQgaXMgImZpbmFsaXplZCIuIFVudGlsIGZpbmFsaXppbmcgaGFwcGVu
cyAoYW5kCisgICAgICAgICAgICAgICAgICAgICBpdCBjYW4gYmUgZGVsYXllZCBieSBpbmNyZW1l
bnRhbC1zd2VlcGVyKSwgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiBjYW4gYmUgZGVhZCBidXQgc3Rp
bGwgYWNjZXNzaWJsZS4gU28gdGhlIHRhYmxlCisgICAgICAgICAgICAgICAgICAgICBpcyBzdGls
bCBob2xkaW5nIGRlYWQgb25lLiBJZiB3ZSBnZXQgZGVhZCBvbmUsIHdlIHNob3VsZCBpbnNlcnQg
YSBuZXcgb25lLgorICAgICAgICAgICAgICAgIDEuMi4gSWYgaXQgaXMgbm90IGRlYWQsIHdlIHJl
dHVybiBpdC4KKyAgICAgICAgICAgIDIuIFNlY29uZCwgd2UgY3JlYXRlIGEgbmV3IE5hdGl2ZUV4
ZWN1dGFibGUgYW5kIGluc2VydCBpdC4gSW4gdGhhdCBjYXNlLCBpdCBpcyBwb3NzaWJsZSB0aGF0
IHRoZSB0YWJsZSBhbHJlYWR5IGhhcyBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+LAorICAgICAgICAg
ICAgICAgYnV0IGl0IGlzIGRlYWQuIEluIHRoYXQgY2FzZSwgd2UgbmVlZCB0byBleHBsaWNpdGx5
IHJlcGxhY2UgaXQgd2l0aCBuZXdseSBjcmVhdGVkIG9uZSBzaW5jZSBvbGQgb25lIGlzIGhvbGRp
bmcgb2xkIGNvbnRlbnQuIElmIHdlCisgICAgICAgICAgICAgICByZXBsYWNlZCwgZmluYWxpemVy
IG9mIFdlYWs8PiB3aWxsIG5vdCBiZSBpbnZva2VkIHNpbmNlIGl0IGltbWVkaWF0ZWx5IGRlYWxs
b2NhdGVzIFdlYWs8Pi4gU28sIGl0IGRvZXMgbm90IGhhcHBlbiB0aGF0IHRoaXMgbmV3bHkKKyAg
ICAgICAgICAgICAgIGluc2VydGVkIE5hdGl2ZUV4ZWN1dGFibGUqIGlzIHJlbW92ZWQgYnkgdGhl
IGZpbmFsaXplciByZWdpc3RlcmVkIGJ5IHRoZSBvbGQgV2Vhazw+LgorCisgICAgICAgICogaGVh
cC9XZWFrLmNwcDoKKyAgICAgICAgKEpTQzo6d2Vha0NsZWFyU2xvd0Nhc2UpOgorICAgICAgICAq
IGhlYXAvV2Vhay5oOgorICAgICAgICAoSlNDOjpXZWFrOjpXZWFrKToKKyAgICAgICAgKEpTQzo6
V2Vhazo6dW5zYWZlSW1wbCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUcmFpdHM8SlNDOjpX
ZWFrPFQ+Pjo6aXNFbXB0eVZhbHVlKToKKyAgICAgICAgKiBoZWFwL1dlYWtJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OldlYWs8VD46OmlzSGFzaFRhYmxlRW1wdHlWYWx1ZSBjb25zdCk6CisgICAg
ICAgIChKU0M6OldlYWs8VD46OldlYWspOgorICAgICAgICAqIGppdC9KSVRUaHVua3MuY3BwOgor
ICAgICAgICAoSlNDOjpKSVRUaHVua3M6OkpJVFRodW5rcyk6CisgICAgICAgIChKU0M6OkpJVFRo
dW5rczo6V2Vha05hdGl2ZUV4ZWN1dGFibGVIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6SklU
VGh1bmtzOjpXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g6OmVxdWFsKToKKyAgICAgICAgKEpTQzo6
SklUVGh1bmtzOjpIb3N0S2V5U2VhcmNoZXI6Omhhc2gpOgorICAgICAgICAoSlNDOjpKSVRUaHVu
a3M6Okhvc3RLZXlTZWFyY2hlcjo6ZXF1YWwpOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6Ok5h
dGl2ZUV4ZWN1dGFibGVUcmFuc2xhdG9yOjpoYXNoKToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtz
OjpOYXRpdmVFeGVjdXRhYmxlVHJhbnNsYXRvcjo6ZXF1YWwpOgorICAgICAgICAoSlNDOjpKSVRU
aHVua3M6Ok5hdGl2ZUV4ZWN1dGFibGVUcmFuc2xhdG9yOjp0cmFuc2xhdGUpOgorICAgICAgICAo
SlNDOjpKSVRUaHVua3M6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpob3N0
RnVuY3Rpb25TdHViKToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjbGVhckhvc3RGdW5jdGlv
blN0dWJzKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUVGh1bmtzLmg6CisgICAgICAgICog
cnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmg6CisKIDIwMjAtMDItMTMgIFN0ZXBoYW4gU3phYm8g
IDxzdGVwaGFuLnN6YWJvQHNvbnkuY29tPgogCiAgICAgICAgIFtQbGF5U3RhdGlvbl0gTWFrZSBz
cGVjaWFsIHVkaXM4NiBDIGZpbGUgaGFuZGxpbmcgb25seSBoYXBwZW4gZm9yIFZpc3VhbCBTdHVk
aW8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWsuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vhay5jcHAKaW5kZXggYTMwYjdjMDg1NTM4NGRkMTZm
MzMzODkxOWUzYjFjNTU3MzBmNDI5MS4uNzgxYTg2ZDM4NzgwYjljMDA3YmE2MDczYjQ1MzVhNWJl
NjQ2N2RmYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vhay5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vhay5jcHAKQEAgLTM2LDcgKzM2LDcg
QEAgdm9pZCB3ZWFrQ2xlYXJTbG93Q2FzZShXZWFrSW1wbComIGltcGwpCiAgICAgQVNTRVJUKGlt
cGwpOwogCiAgICAgV2Vha1NldDo6ZGVhbGxvY2F0ZShpbXBsKTsKLSAgICBpbXBsID0gMDsKKyAg
ICBpbXBsID0gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9XZWFrLmgKaW5kZXggMDdmY2QyNDUzNTYyMGVjM2YxODdlMWM5YWJlZTA5ZWM5ZTAzNWZl
Yy4uZGRmMmZlOGE5YzE0NjRmMDUyOWQ0NjYwOTNlNDYyMDE4ODllNTI5ZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vhay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1dlYWsuaApAQCAtNDIsMjEgKzQyLDE4IEBAIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgd2Vha0NsZWFyU2xvd0Nhc2UoV2Vha0ltcGwqJik7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
bGFzcyBXZWFrIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWFrKTsKIHB1YmxpYzoKLSAg
ICBXZWFrKCkKLSAgICAgICAgOiBtX2ltcGwoMCkKLSAgICB7Ci0gICAgfQorICAgIFdlYWsoKSA9
IGRlZmF1bHQ7CiAKLSAgICBXZWFrKHN0ZDo6bnVsbHB0cl90KQotICAgICAgICA6IG1faW1wbCgw
KQorICAgIGNvbnN0ZXhwciBXZWFrKHN0ZDo6bnVsbHB0cl90KQorICAgICAgICA6IFdlYWsoKQog
ICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgV2VhayhUKiwgV2Vha0hhbmRsZU93bmVyKiA9IDAs
IHZvaWQqIGNvbnRleHQgPSAwKTsKKyAgICBpbmxpbmUgV2VhayhUKiwgV2Vha0hhbmRsZU93bmVy
KiA9IG51bGxwdHIsIHZvaWQqIGNvbnRleHQgPSBudWxscHRyKTsKIAotICAgIGVudW0gSGFzaFRh
YmxlRGVsZXRlZFZhbHVlVGFnIHsgSGFzaFRhYmxlRGVsZXRlZFZhbHVlIH07CiAgICAgaW5saW5l
IGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdDsKLSAgICBpbmxpbmUgV2VhayhI
YXNoVGFibGVEZWxldGVkVmFsdWVUYWcpOworICAgIGlubGluZSBXZWFrKFdURjo6SGFzaFRhYmxl
RGVsZXRlZFZhbHVlVHlwZSk7CisgICAgaW5saW5lIGJvb2wgaXNIYXNoVGFibGVFbXB0eVZhbHVl
KCkgY29uc3Q7CiAKICAgICBpbmxpbmUgV2VhayhXZWFrJiYpOwogCkBAIC03OSw2ICs3Niw3IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWsgewogICAgIGlubGluZSBleHBsaWNpdCBv
cGVyYXRvciBib29sKCkgY29uc3Q7CiAKICAgICBpbmxpbmUgV2Vha0ltcGwqIGxlYWtJbXBsKCkg
V0FSTl9VTlVTRURfUkVUVVJOOworICAgIGlubGluZSBXZWFrSW1wbCogdW5zYWZlSW1wbCgpIGNv
bnN0IHsgcmV0dXJuIG1faW1wbDsgfQogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKICAgICAgICAg
aWYgKCFtX2ltcGwpCkBAIC04OSw3ICs4Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNz
IFdlYWsgewogcHJpdmF0ZToKICAgICBzdGF0aWMgaW5saW5lIFdlYWtJbXBsKiBoYXNoVGFibGVE
ZWxldGVkVmFsdWUoKTsKIAotICAgIFdlYWtJbXBsKiBtX2ltcGw7CisgICAgV2Vha0ltcGwqIG1f
aW1wbCB7IG51bGxwdHIgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpAQCAtMTA2LDYgKzEw
NCw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6V2VhazxU
Pj4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDCiAgICAgdHlwZWRlZiBzdGQ6Om51bGxwdHJf
dCBFbXB0eVZhbHVlVHlwZTsKICAgICBzdGF0aWMgRW1wdHlWYWx1ZVR5cGUgZW1wdHlWYWx1ZSgp
IHsgcmV0dXJuIG51bGxwdHI7IH0KIAorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNJc0Vt
cHR5VmFsdWVGdW5jdGlvbiA9IHRydWU7CisgICAgc3RhdGljIGJvb2wgaXNFbXB0eVZhbHVlKGNv
bnN0IEpTQzo6V2VhazxUPiYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlLmlzSGFzaFRhYmxlRW1wdHlW
YWx1ZSgpOyB9CisKICAgICB0eXBlZGVmIFQqIFBlZWtUeXBlOwogICAgIHN0YXRpYyBQZWVrVHlw
ZSBwZWVrKGNvbnN0IFN0b3JhZ2VUeXBlJiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUuZ2V0KCk7IH0K
ICAgICBzdGF0aWMgUGVla1R5cGUgcGVlayhFbXB0eVZhbHVlVHlwZSkgeyByZXR1cm4gUGVla1R5
cGUoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0lubGlu
ZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbmxpbmVzLmgKaW5kZXggMGY3
ZDU2MGIzYzlmZDdhNDc5MmRhZjk5MzEzODYxOGU5M2E3NjE5Ni4uMDExYTIyNzJiYjJlNTQyY2M0
NDkyNmFhZmNlNTRhNzVmZTk4NjIwOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvV2Vha0lubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFr
SW5saW5lcy5oCkBAIC00MSw3ICs0MSwxMiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
Ym9vbCBXZWFrPFQ+Ojppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CiAgICAgcmV0dXJu
IG1faW1wbCA9PSBoYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIFdlYWs8VD46OldlYWsodHlwZW5hbWUgV2VhazxUPjo6SGFzaFRhYmxlRGVs
ZXRlZFZhbHVlVGFnKQordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGJvb2wgV2VhazxUPjo6
aXNIYXNoVGFibGVFbXB0eVZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1faW1wbDsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFdlYWs8VD46OldlYWsoV1RGOjpIYXNoVGFi
bGVEZWxldGVkVmFsdWVUeXBlKQogICAgIDogbV9pbXBsKGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
KQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3Mu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCmluZGV4IDdmYjk4
ODQwNDFiNTA2OTBmOTNjNGQyNWZkZTQ0MTczYWU4N2EwMzYuLjFiNzkyMTI1MzM5MmViNDM2MDI2
ZmEzMGZkNmRjYTNkZWVmMWYxNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUVGh1bmtzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5r
cy5jcHAKQEAgLTM3LDcgKzM3LDYgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBKSVRUaHVua3M6OkpJ
VFRodW5rcygpCi0gICAgOiBtX2hvc3RGdW5jdGlvblN0dWJNYXAobWFrZVVuaXF1ZTxIb3N0RnVu
Y3Rpb25TdHViTWFwPigpKQogewogfQogCkBAIC00NSw2ICs0NCw2MyBAQCBKSVRUaHVua3M6On5K
SVRUaHVua3MoKQogewogfQogCitpbmxpbmUgdW5zaWduZWQgSklUVGh1bmtzOjpXZWFrTmF0aXZl
RXhlY3V0YWJsZUhhc2g6Omhhc2goY29uc3QgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSkK
K3sKKyAgICByZXR1cm4gaGFzaChleGVjdXRhYmxlLT5mdW5jdGlvbigpLCBleGVjdXRhYmxlLT5j
b25zdHJ1Y3RvcigpLCBleGVjdXRhYmxlLT5uYW1lKCkpOworfQorCitpbmxpbmUgdW5zaWduZWQg
SklUVGh1bmtzOjpXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g6Omhhc2goY29uc3QgV2VhazxOYXRp
dmVFeGVjdXRhYmxlPiYga2V5KQoreworICAgIC8vIFRoaXMgbmV2ZXIgZ2V0cyBEZWxldGVkIC8g
RW1wdHkgc2xvdHMuCisgICAgV2Vha0ltcGwqIGltcGwgPSBrZXkudW5zYWZlSW1wbCgpOworICAg
IEFTU0VSVChpbXBsKTsKKyAgICAvLyBXZSBoYXZlIGEgY2FsbGJhY2sgcmVtb3ZpbmcgZW50cnkg
d2hlbiBmaW5hbGl6aW5nLiBUaGlzIG1lYW5zIHRoYXQgd2UgbmV2ZXIgaG9sZCBEZWFsbG9jYXRl
ZCBlbnRyeSBpbiBIYXNoU2V0LgorICAgIEFTU0VSVChpbXBsLT5zdGF0ZSgpICE9IFdlYWtJbXBs
OjpTdGF0ZTo6RGVhbGxvY2F0ZWQpOworICAgIC8vIE5ldmVyIHVzZSBqc0Nhc3QgaGVyZS4gVGhp
cyBpcyBwb3NzaWJsZSB0aGF0IHRoaXMgdmFsdWUgaXMgIkRlYWQiIGJ1dCBub3QgIkZpbmFsaXpl
ZCIgeWV0LiBJbiB0aGlzIGNhc2UsCisgICAgLy8gd2UgY2FuIHN0aWxsIGFjY2VzcyB0byBub24t
SlMgZGF0YSwgYXMgd2UgYXJlIGRvaW5nIGluIGEgZmluYWxpemUgY2FsbGJhY2suCisgICAgYXV0
byogZXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihpbXBsLT5qc1Zh
bHVlKCkuYXNDZWxsKCkpOworICAgIEFTU0VSVChleGVjdXRhYmxlKTsKKyAgICByZXR1cm4gaGFz
aChleGVjdXRhYmxlKTsKK30KKworaW5saW5lIGJvb2wgSklUVGh1bmtzOjpXZWFrTmF0aXZlRXhl
Y3V0YWJsZUhhc2g6OmVxdWFsKGNvbnN0IFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4mIGEsIGNvbnN0
IFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4mIGIpCit7CisgICAgLy8gVGhpcyBuZXZlciBnZXRzIERl
bGV0ZWQgLyBFbXB0eSBzbG90cy4gQW5kIHdlIG5ldmVyIGdldCBEZWFsbG9jYXRlZCBXZWFrIGVu
dHJ5IHRvby4KKyAgICBhdXRvKiBhSW1wbCA9IGEudW5zYWZlSW1wbCgpOworICAgIGF1dG8qIGJJ
bXBsID0gYi51bnNhZmVJbXBsKCk7CisgICAgQVNTRVJUKGFJbXBsKTsKKyAgICBBU1NFUlQoYUlt
cGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OlN0YXRlOjpEZWFsbG9jYXRlZCk7CisgICAgQVNTRVJU
KGJJbXBsKTsKKyAgICBBU1NFUlQoYkltcGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OlN0YXRlOjpE
ZWFsbG9jYXRlZCk7CisgICAgYXV0byogYUV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxOYXRpdmVF
eGVjdXRhYmxlKj4oYUltcGwtPmpzVmFsdWUoKS5hc0NlbGwoKSk7CisgICAgYXV0byogYkV4ZWN1
dGFibGUgPSBzdGF0aWNfY2FzdDxOYXRpdmVFeGVjdXRhYmxlKj4oYkltcGwtPmpzVmFsdWUoKS5h
c0NlbGwoKSk7CisgICAgaWYgKGFFeGVjdXRhYmxlID09IGJFeGVjdXRhYmxlKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gYUV4ZWN1dGFibGUtPmZ1bmN0aW9uKCkgPT0gYkV4ZWN1
dGFibGUtPmZ1bmN0aW9uKCkgJiYgYUV4ZWN1dGFibGUtPmNvbnN0cnVjdG9yKCkgPT0gYkV4ZWN1
dGFibGUtPmNvbnN0cnVjdG9yKCkgJiYgYUV4ZWN1dGFibGUtPm5hbWUoKSA9PSBiRXhlY3V0YWJs
ZS0+bmFtZSgpOworfQorCitpbmxpbmUgYm9vbCBKSVRUaHVua3M6OldlYWtOYXRpdmVFeGVjdXRh
YmxlSGFzaDo6ZXF1YWwoY29uc3QgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiYgYSwgY29uc3QgTmF0
aXZlRXhlY3V0YWJsZSogYkV4ZWN1dGFibGUpCit7CisgICAgLy8gVGhpcyBuZXZlciBnZXRzIERl
bGV0ZWQgLyBFbXB0eSBzbG90cy4gQW5kIHdlIG5ldmVyIGdldCBEZWFsbG9jYXRlZCBXZWFrIGVu
dHJ5IHRvby4KKyAgICBhdXRvKiBhSW1wbCA9IGEudW5zYWZlSW1wbCgpOworICAgIEFTU0VSVChh
SW1wbCk7CisgICAgQVNTRVJUKGFJbXBsLT5zdGF0ZSgpICE9IFdlYWtJbXBsOjpTdGF0ZTo6RGVh
bGxvY2F0ZWQpOworICAgIGF1dG8qIGFFeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8TmF0aXZlRXhl
Y3V0YWJsZSo+KGFJbXBsLT5qc1ZhbHVlKCkuYXNDZWxsKCkpOworICAgIGlmIChhRXhlY3V0YWJs
ZSA9PSBiRXhlY3V0YWJsZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGFFeGVj
dXRhYmxlLT5mdW5jdGlvbigpID09IGJFeGVjdXRhYmxlLT5mdW5jdGlvbigpICYmIGFFeGVjdXRh
YmxlLT5jb25zdHJ1Y3RvcigpID09IGJFeGVjdXRhYmxlLT5jb25zdHJ1Y3RvcigpICYmIGFFeGVj
dXRhYmxlLT5uYW1lKCkgPT0gYkV4ZWN1dGFibGUtPm5hbWUoKTsKK30KKworaW5saW5lIGJvb2wg
SklUVGh1bmtzOjpXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g6OmVxdWFsKGNvbnN0IFdlYWs8TmF0
aXZlRXhlY3V0YWJsZT4mIGEsIGNvbnN0IEhvc3RGdW5jdGlvbktleSYgYikKK3sKKyAgICAvLyBU
aGlzIG5ldmVyIGdldHMgRGVsZXRlZCAvIEVtcHR5IHNsb3RzLiBBbmQgd2UgbmV2ZXIgZ2V0IERl
YWxsb2NhdGVkIFdlYWsgZW50cnkgdG9vLgorICAgIGF1dG8qIGFJbXBsID0gYS51bnNhZmVJbXBs
KCk7CisgICAgQVNTRVJUKGFJbXBsKTsKKyAgICBBU1NFUlQoYUltcGwtPnN0YXRlKCkgIT0gV2Vh
a0ltcGw6OlN0YXRlOjpEZWFsbG9jYXRlZCk7CisgICAgYXV0byogYUV4ZWN1dGFibGUgPSBzdGF0
aWNfY2FzdDxOYXRpdmVFeGVjdXRhYmxlKj4oYUltcGwtPmpzVmFsdWUoKS5hc0NlbGwoKSk7Cisg
ICAgcmV0dXJuIGFFeGVjdXRhYmxlLT5mdW5jdGlvbigpID09IHN0ZDo6Z2V0PDA+KGIpICYmIGFF
eGVjdXRhYmxlLT5jb25zdHJ1Y3RvcigpID09IHN0ZDo6Z2V0PDE+KGIpICYmIGFFeGVjdXRhYmxl
LT5uYW1lKCkgPT0gc3RkOjpnZXQ8Mj4oYik7Cit9CisKIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
SVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlOYXRpdmVDYWxsKFZNJiB2bSkKIHsKICAgICBB
U1NFUlQoVk06OmNhblVzZUpJVCgpKTsKQEAgLTEwMiwxMCArMTU4LDMxIEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpleGlzdGluZ0NUSVN0dWIoVGh1
bmtHZW5lcmF0b3IKICAgICByZXR1cm4gZW50cnktPnZhbHVlOwogfQogCitzdHJ1Y3QgSklUVGh1
bmtzOjpIb3N0S2V5U2VhcmNoZXIgeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEhv
c3RGdW5jdGlvbktleSYga2V5KSB7IHJldHVybiBXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g6Omhh
c2goa2V5KTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFdlYWs8TmF0aXZlRXhlY3V0
YWJsZT4mIGEsIGNvbnN0IEhvc3RGdW5jdGlvbktleSYgYikgeyByZXR1cm4gV2Vha05hdGl2ZUV4
ZWN1dGFibGVIYXNoOjplcXVhbChhLCBiKTsgfQorfTsKKworc3RydWN0IEpJVFRodW5rczo6TmF0
aXZlRXhlY3V0YWJsZVRyYW5zbGF0b3IgeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IE5hdGl2ZUV4ZWN1dGFibGUqIGtleSkgeyByZXR1cm4gV2Vha05hdGl2ZUV4ZWN1dGFibGVIYXNo
OjpoYXNoKGtleSk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBXZWFrPE5hdGl2ZUV4
ZWN1dGFibGU+JiBhLCBjb25zdCBOYXRpdmVFeGVjdXRhYmxlKiBiKSB7IHJldHVybiBXZWFrTmF0
aXZlRXhlY3V0YWJsZUhhc2g6OmVxdWFsKGEsIGIpOyB9CisgICAgc3RhdGljIHZvaWQgdHJhbnNs
YXRlKFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4mIGxvY2F0aW9uLCBOYXRpdmVFeGVjdXRhYmxlKiBl
eGVjdXRhYmxlLCB1bnNpZ25lZCkKKyAgICB7CisgICAgICAgIGxvY2F0aW9uID0gV2VhazxOYXRp
dmVFeGVjdXRhYmxlPihleGVjdXRhYmxlLCBleGVjdXRhYmxlLT52bSgpLmppdFN0dWJzLmdldCgp
KTsKKyAgICB9Cit9OworCiB2b2lkIEpJVFRodW5rczo6ZmluYWxpemUoSGFuZGxlPFVua25vd24+
IGhhbmRsZSwgdm9pZCopCiB7CiAgICAgYXV0byogbmF0aXZlRXhlY3V0YWJsZSA9IHN0YXRpY19j
YXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOwotICAgIHdlYWtS
ZW1vdmUoKm1faG9zdEZ1bmN0aW9uU3R1Yk1hcCwgc3RkOjptYWtlX3R1cGxlKG5hdGl2ZUV4ZWN1
dGFibGUtPmZ1bmN0aW9uKCksIG5hdGl2ZUV4ZWN1dGFibGUtPmNvbnN0cnVjdG9yKCksIG5hdGl2
ZUV4ZWN1dGFibGUtPm5hbWUoKSksIG5hdGl2ZUV4ZWN1dGFibGUpOworICAgIGF1dG8gaG9zdEZ1
bmN0aW9uS2V5ID0gc3RkOjptYWtlX3R1cGxlKG5hdGl2ZUV4ZWN1dGFibGUtPmZ1bmN0aW9uKCks
IG5hdGl2ZUV4ZWN1dGFibGUtPmNvbnN0cnVjdG9yKCksIG5hdGl2ZUV4ZWN1dGFibGUtPm5hbWUo
KSk7CisgICAgeworICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7CisgICAgICAgIGF1dG8g
aXRlcmF0b3IgPSBtX25hdGl2ZUV4ZWN1dGFibGVTZXQuZmluZDxIb3N0S2V5U2VhcmNoZXI+KGhv
c3RGdW5jdGlvbktleSk7CisgICAgICAgIC8vIEJlY2F1c2UgdGhpcyBmaW5hbGl6ZXIgaXMgY2Fs
bGVkLCB0aGlzIG1lYW5zIHRoYXQgd2Ugc3RpbGwgaGF2ZSBkZWFkIFdlYWs8PiBpbiBtX25hdGl2
ZUV4ZWN1dGFibGVTZXQuCisgICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX25hdGl2ZUV4ZWN1
dGFibGVTZXQuZW5kKCkpOworICAgICAgICBtX25hdGl2ZUV4ZWN1dGFibGVTZXQucmVtb3ZlKGl0
ZXJhdG9yKTsKKyAgICB9CiB9CiAKIE5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1
bmN0aW9uU3R1YihWTSYgdm0sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBUYWdnZWRO
YXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvciwgY29uc3QgU3RyaW5nJiBuYW1lKQpAQCAtMTE4LDgg
KzE5NSwxNyBAQCBOYXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIo
Vk0mIHZtLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBmdW5jdAogICAgIEFTU0VSVCghaXNDb21waWxh
dGlvblRocmVhZCgpKTsgICAgCiAgICAgQVNTRVJUKFZNOjpjYW5Vc2VKSVQoKSk7CiAKLSAgICBp
ZiAoTmF0aXZlRXhlY3V0YWJsZSogbmF0aXZlRXhlY3V0YWJsZSA9IG1faG9zdEZ1bmN0aW9uU3R1
Yk1hcC0+Z2V0KHN0ZDo6bWFrZV90dXBsZShmdW5jdGlvbiwgY29uc3RydWN0b3IsIG5hbWUpKSkK
LSAgICAgICAgcmV0dXJuIG5hdGl2ZUV4ZWN1dGFibGU7CisgICAgYXV0byBob3N0RnVuY3Rpb25L
ZXkgPSBzdGQ6Om1ha2VfdHVwbGUoZnVuY3Rpb24sIGNvbnN0cnVjdG9yLCBuYW1lKTsKKyAgICB7
CisgICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9
IG1fbmF0aXZlRXhlY3V0YWJsZVNldC5maW5kPEhvc3RLZXlTZWFyY2hlcj4oaG9zdEZ1bmN0aW9u
S2V5KTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yICE9IG1fbmF0aXZlRXhlY3V0YWJsZVNldC5lbmQo
KSkgeworICAgICAgICAgICAgLy8gSXQgaXMgcG9zc2libGUgdGhhdCB0aGlzIHJldHVybnMgV2Vh
azw+IHdoaWNoIGlzIERlYWQsIGJ1dCBub3QgZmluYWxpemVkLgorICAgICAgICAgICAgLy8gV2Ug
c2hvdWxkIG5vdCB1c2UgdGhpcyByZWZlcmVuY2UgdG8gc3RvcmUgdmFsdWUgY3JlYXRlZCBpbiB0
aGUgc3Vic2VxdWVudCBzZXF1ZW5jZSwgc2luY2UgYWxsb2NhdGluZyBOYXRpdmVFeGVjdXRhYmxl
IGNhbiBjYXVzZSBHQywgd2hpY2ggY2hhbmdlcyB0aGlzIFNldC4KKyAgICAgICAgICAgIGlmIChh
dXRvKiBleGVjdXRhYmxlID0gaXRlcmF0b3ItPmdldCgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBleGVjdXRhYmxlOworICAgICAgICB9CisgICAgfQogCiAgICAgUmVmUHRyPEpJVENvZGU+IGZv
ckNhbGw7CiAgICAgaWYgKGdlbmVyYXRvcikgewpAQCAtMTMzLDcgKzIxOSwxNSBAQCBOYXRpdmVF
eGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIoVk0mIHZtLCBUYWdnZWROYXRp
dmVGdW5jdGlvbiBmdW5jdAogICAgIFJlZjxKSVRDb2RlPiBmb3JDb25zdHJ1Y3QgPSBhZG9wdFJl
ZigqbmV3IE5hdGl2ZUpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29uc3RydWN0KHZtKS5yZXRhZ2dl
ZDxKU0VudHJ5UHRyVGFnPigpKSwgSklUVHlwZTo6SG9zdENhbGxUaHVuaywgTm9JbnRyaW5zaWMp
KTsKICAgICAKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBuYXRpdmVFeGVjdXRhYmxlID0gTmF0aXZl
RXhlY3V0YWJsZTo6Y3JlYXRlKHZtLCBmb3JDYWxsLnJlbGVhc2VOb25OdWxsKCksIGZ1bmN0aW9u
LCBXVEZNb3ZlKGZvckNvbnN0cnVjdCksIGNvbnN0cnVjdG9yLCBuYW1lKTsKLSAgICB3ZWFrQWRk
KCptX2hvc3RGdW5jdGlvblN0dWJNYXAsIHN0ZDo6bWFrZV90dXBsZShmdW5jdGlvbiwgY29uc3Ry
dWN0b3IsIG5hbWUpLCBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+KG5hdGl2ZUV4ZWN1dGFibGUsIHRo
aXMpKTsKKyAgICB7CisgICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKKyAgICAgICAgYXV0
byBhZGRSZXN1bHQgPSBtX25hdGl2ZUV4ZWN1dGFibGVTZXQuYWRkPE5hdGl2ZUV4ZWN1dGFibGVU
cmFuc2xhdG9yPihuYXRpdmVFeGVjdXRhYmxlKTsKKyAgICAgICAgaWYgKCFhZGRSZXN1bHQuaXNO
ZXdFbnRyeSkgeworICAgICAgICAgICAgLy8gT3ZlcnJpZGUgdGhlIGV4aXN0aW5nIFdlYWs8TmF0
aXZlRXhlY3V0YWJsZT4gd2l0aCB0aGUgbmV3IG9uZSBzaW5jZSBpdCBpcyBkZWFkLgorICAgICAg
ICAgICAgQVNTRVJUKCphZGRSZXN1bHQuaXRlcmF0b3IpOworICAgICAgICAgICAgKmFkZFJlc3Vs
dC5pdGVyYXRvciA9IFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4obmF0aXZlRXhlY3V0YWJsZSwgdGhp
cyk7CisgICAgICAgIH0KKyAgICB9CiAgICAgcmV0dXJuIG5hdGl2ZUV4ZWN1dGFibGU7CiB9CiAK
QEAgLTE0MiwxMSArMjM2LDYgQEAgTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVu
Y3Rpb25TdHViKFZNJiB2bSwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3QKICAgICByZXR1cm4g
aG9zdEZ1bmN0aW9uU3R1Yih2bSwgZnVuY3Rpb24sIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVj
dG9yLCBnZW5lcmF0b3IsIGludHJpbnNpYywgbnVsbHB0ciwgbmFtZSk7CiB9CiAKLXZvaWQgSklU
VGh1bmtzOjpjbGVhckhvc3RGdW5jdGlvblN0dWJzKCkKLXsKLSAgICBtX2hvc3RGdW5jdGlvblN0
dWJNYXAgPSBudWxscHRyOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVO
QUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5r
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaAppbmRleCA0OGMyMGUz
MzdkYzE0MmM4MzQzZTk2NTFlNjliZWI1ZjYzYjM5YTcyLi4yMWJlYmZmYmIyYTYwNjE5MTJmMmJl
NjYyMWNjNjBkOTQ5MTdiZGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFRodW5rcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgK
QEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJXZWFrSGFuZGxlT3duZXIuaCIKICNpbmNsdWRl
IDx0dXBsZT4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCiBuYW1lc3BhY2UgSlNDIHsK
QEAgLTY1LDQ3ICs2Niw0NiBAQCBjbGFzcyBKSVRUaHVua3MgZmluYWwgOiBwcml2YXRlIFdlYWtI
YW5kbGVPd25lciB7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihWTSYs
IFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3Rvciwg
VGh1bmtHZW5lcmF0b3IsIEludHJpbnNpYywgY29uc3QgRE9NSklUOjpTaWduYXR1cmUqLCBjb25z
dCBTdHJpbmcmIG5hbWUpOwogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGhvc3RGdW5jdGlvblN0dWIo
Vk0mLCBUYWdnZWROYXRpdmVGdW5jdGlvbiwgVGh1bmtHZW5lcmF0b3IsIEludHJpbnNpYywgY29u
c3QgU3RyaW5nJiBuYW1lKTsKIAotICAgIHZvaWQgY2xlYXJIb3N0RnVuY3Rpb25TdHVicygpOwot
CiBwcml2YXRlOgogICAgIHZvaWQgZmluYWxpemUoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250
ZXh0KSBvdmVycmlkZTsKICAgICAKICAgICB0eXBlZGVmIEhhc2hNYXA8VGh1bmtHZW5lcmF0b3Is
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4+IENUSVN0dWJNYXA7CiAgICAg
Q1RJU3R1Yk1hcCBtX2N0aVN0dWJNYXA7CiAKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8VGFnZ2Vk
TmF0aXZlRnVuY3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uLCBTdHJpbmc+IEhvc3RGdW5jdGlv
bktleTsKKyAgICB1c2luZyBIb3N0RnVuY3Rpb25LZXkgPSBzdGQ6OnR1cGxlPFRhZ2dlZE5hdGl2
ZUZ1bmN0aW9uLCBUYWdnZWROYXRpdmVGdW5jdGlvbiwgU3RyaW5nPjsKIAotICAgIHN0cnVjdCBI
b3N0RnVuY3Rpb25IYXNoIHsKKyAgICBzdHJ1Y3QgV2Vha05hdGl2ZUV4ZWN1dGFibGVIYXNoIHsK
KyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgV2VhazxOYXRpdmVFeGVjdXRhYmxl
PiYpOworICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBOYXRpdmVFeGVjdXRhYmxl
Kik7CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEhvc3RGdW5jdGlvbktleSYg
a2V5KQogICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBoYXNoID0gV1RGOjpwYWlySW50
SGFzaChoYXNoUG9pbnRlcihzdGQ6OmdldDwwPihrZXkpKSwgaGFzaFBvaW50ZXIoc3RkOjpnZXQ8
MT4oa2V5KSkpOwotICAgICAgICAgICAgaWYgKCFzdGQ6OmdldDwyPihrZXkpLmlzTnVsbCgpKQot
ICAgICAgICAgICAgICAgIGhhc2ggPSBXVEY6OnBhaXJJbnRIYXNoKGhhc2gsIERlZmF1bHRIYXNo
PFN0cmluZz46Okhhc2g6Omhhc2goc3RkOjpnZXQ8Mj4oa2V5KSkpOwotICAgICAgICAgICAgcmV0
dXJuIGhhc2g7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgSG9z
dEZ1bmN0aW9uS2V5JiBhLCBjb25zdCBIb3N0RnVuY3Rpb25LZXkmIGIpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiAoc3RkOjpnZXQ8MD4oYSkgPT0gc3RkOjpnZXQ8MD4oYikpICYmIChz
dGQ6OmdldDwxPihhKSA9PSBzdGQ6OmdldDwxPihiKSkgJiYgKHN0ZDo6Z2V0PDI+KGEpID09IHN0
ZDo6Z2V0PDI+KGIpKTsKKyAgICAgICAgICAgIHJldHVybiBoYXNoKHN0ZDo6Z2V0PDA+KGtleSks
IHN0ZDo6Z2V0PDE+KGtleSksIHN0ZDo6Z2V0PDI+KGtleSkpOwogICAgICAgICB9Ci0gICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRy
dWU7CisKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgV2VhazxOYXRpdmVFeGVjdXRh
YmxlPiYgYSwgY29uc3QgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiYgYik7CisgICAgICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4mIGEsIGNvbnN0IEhvc3RG
dW5jdGlvbktleSYgYik7CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFdlYWs8TmF0
aXZlRXhlY3V0YWJsZT4mIGEsIGNvbnN0IE5hdGl2ZUV4ZWN1dGFibGUqIGIpOworICAgICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxz
ZTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaGFzaFBv
aW50ZXIoVGFnZ2VkTmF0aXZlRnVuY3Rpb24gcCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0
dXJuIERlZmF1bHRIYXNoPFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uPjo6SGFzaDo6aGFzaChwKTsKICAg
ICAgICAgfQotICAgIH07CiAKLSAgICBzdHJ1Y3QgSG9zdEZ1bmN0aW9uSGFzaFRyYWl0IDogV1RG
OjpHZW5lcmljSGFzaFRyYWl0czxIb3N0RnVuY3Rpb25LZXk+IHsKLSAgICAgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOwotICAgICAgICBzdGF0aWMgRW1w
dHlWYWx1ZVR5cGUgZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIHN0ZDo6bWFrZV90dXBsZShudWxscHRy
LCBudWxscHRyLCBTdHJpbmcoKSk7IH0KLQotICAgICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3RE
ZWxldGVkVmFsdWUoSG9zdEZ1bmN0aW9uS2V5JiBzbG90KSB7IHN0ZDo6Z2V0PDA+KHNsb3QpID0g
VGFnZ2VkTmF0aXZlRnVuY3Rpb24oLTEpOyB9Ci0gICAgICAgIHN0YXRpYyBib29sIGlzRGVsZXRl
ZFZhbHVlKGNvbnN0IEhvc3RGdW5jdGlvbktleSYgdmFsdWUpIHsgcmV0dXJuIHN0ZDo6Z2V0PDA+
KHZhbHVlKSA9PSBUYWdnZWROYXRpdmVGdW5jdGlvbigtMSk7IH0KKyAgICAgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1
bmN0aW9uIGNvbnN0cnVjdG9yLCBjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGhhc2ggPSBXVEY6OnBhaXJJbnRIYXNoKGhhc2hQb2ludGVyKGZ1bmN0
aW9uKSwgaGFzaFBvaW50ZXIoY29uc3RydWN0b3IpKTsKKyAgICAgICAgICAgIGlmICghbmFtZS5p
c051bGwoKSkKKyAgICAgICAgICAgICAgICBoYXNoID0gV1RGOjpwYWlySW50SGFzaChoYXNoLCBE
ZWZhdWx0SGFzaDxTdHJpbmc+OjpIYXNoOjpoYXNoKG5hbWUpKTsKKyAgICAgICAgICAgIHJldHVy
biBoYXNoOworICAgICAgICB9CiAgICAgfTsKLSAgICAKLSAgICB0eXBlZGVmIEhhc2hNYXA8SG9z
dEZ1bmN0aW9uS2V5LCBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+LCBIb3N0RnVuY3Rpb25IYXNoLCBI
b3N0RnVuY3Rpb25IYXNoVHJhaXQ+IEhvc3RGdW5jdGlvblN0dWJNYXA7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPEhvc3RGdW5jdGlvblN0dWJNYXA+IG1faG9zdEZ1bmN0aW9uU3R1Yk1hcDsKKyAgICBz
dHJ1Y3QgSG9zdEtleVNlYXJjaGVyOworICAgIHN0cnVjdCBOYXRpdmVFeGVjdXRhYmxlVHJhbnNs
YXRvcjsKKworICAgIHVzaW5nIFdlYWtOYXRpdmVFeGVjdXRhYmxlU2V0ID0gSGFzaFNldDxXZWFr
PE5hdGl2ZUV4ZWN1dGFibGU+LCBXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g+OworICAgIFdlYWtO
YXRpdmVFeGVjdXRhYmxlU2V0IG1fbmF0aXZlRXhlY3V0YWJsZVNldDsKICAgICBMb2NrIG1fbG9j
azsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2
ZUV4ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1
dGFibGUuaAppbmRleCAyZTNmNTQyM2YyNWQ0NDAwOTM0NWQ3YWY5ZGUzNjEwMjhhYTA2OTU0Li45
ZjA0M2ZhZDJlNjNhYWJlNGJiNjJiNWFkNzQ4ZmViZDZmZjRlNTJmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5oCkBAIC00OCw4ICs0OCw4
IEBAIGNsYXNzIE5hdGl2ZUV4ZWN1dGFibGUgZmluYWwgOiBwdWJsaWMgRXhlY3V0YWJsZUJhc2Ug
ewogCiAgICAgQ29kZUJsb2NrSGFzaCBoYXNoRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpIGNv
bnN0OwogCi0gICAgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24oKSB7IHJldHVybiBtX2Z1
bmN0aW9uOyB9Ci0gICAgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IoKSB7IHJldHVy
biBtX2NvbnN0cnVjdG9yOyB9CisgICAgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24oKSBj
b25zdCB7IHJldHVybiBtX2Z1bmN0aW9uOyB9CisgICAgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gY29u
c3RydWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0cnVjdG9yOyB9CiAgICAgICAgIAogICAg
IFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uRm9yKENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCkKICAgICB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390849</attachid>
            <date>2020-02-14 19:23:36 -0800</date>
            <delta_ts>2020-02-14 20:05:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207715-20200214192335.patch</filename>
            <type>text/plain</type>
            <size>21220</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2NjM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
NTgzY2M1MmNjYjU4Y2NiOWQwN2IxMjFhYzBhYzVlYjI2ZTcxZDJjLi5lZDNjOThiYTU3ZTBlNTk1
MzA4ZDBhZmFjNTUzOTY4ZTBjZTkwMmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NCBAQAorMjAyMC0wMi0xNCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIEpJVFRodW5rIHNob3VsZCBiZSBIYXNoU2V0PFdlYWs8TmF0aXZl
RXhlY3V0YWJsZT4+IHdpdGggYXBwcm9wcmlhdGUgR0Mgd2Vha25lc3MgaGFuZGxpbmcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzcxNQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVm
aW5lcyBKSVRUaHVua3MgR0MtYXdhcmUgV2VhayBoYXNoIG1hcCBmb3IgTmF0aXZlRXhlY3V0YWJs
ZS4gUHJldmlvdXNseSwgd2UgaGF2ZQorICAgICAgICBIYXNoTWFwPHN0ZDo6dHVwbGU8VGFnZ2Vk
TmF0aXZlRnVuY3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uLCBTdHJpbmc+LCBXZWFrPE5hdGl2
ZUV4ZWN1dGFibGU+PiB0YWJsZS4KKyAgICAgICAgQnV0IHRoaXMgaXMgbm90IGdvb2QgYmVjYXVz
ZSB0aGUgZmlyc3QgdHVwbGUncyBpbmZvcm1hdGlvbiBpcyBhbHJlYWR5IGluIE5hdGl2ZUV4ZWN1
dGFibGUuCisgICAgICAgIEJ1dCB3ZSB3ZXJlIHVzaW5nIHRoaXMgZGVzaWduIHNpbmNlIFdlYWs8
TmF0aXZlRXhlY3V0YWJsZT4gY2FuIGJlIG51bGxpZmllZCBiZWNhdXNlIG9mIFdlYWs8Pi4gSWYg
dGhpcworICAgICAgICBoYXBwZW5zLCB3ZSBjb3VsZCBoYXZlIGludmFsaWQgRW50cnkgaW4gSGFz
aE1hcCB3aGljaCBkb2VzIG5vdCBoYXZlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLiBUaGlzIHdpbGwK
KyAgICAgICAgY2F1c2UgY3Jhc2ggd2hlbiByZWhhc2luZyByZXF1aXJlcyBoYXNoIGNvZGUgZm9y
IHRoaXMgZW50cnkuCisKKyAgICAgICAgQnV0IHRoaXMgSGFzaE1hcCBpcyB2ZXJ5IGJhZCBpbiB0
ZXJtcyBvZiBtZW1vcnkgdXNhZ2UuIEVhY2ggZW50cnkgaGFzIDMyIGJ5dGVzLCBhbmQgdGhpcyB0
YWJsZSBnZXRzIGVub3VnaAorICAgICAgICBsYXJnZS4gV2UgaWRlbnRpZmllZCB0aGF0IHRoaXMg
dGFibGUgaXMgY29uc3VtaW5nIG11Y2ggbWVtb3J5IGluIE1lbWJ1c3Rlci4gU28gaXQgaXMgd29y
dGggZGVzaWduaW5nCisgICAgICAgIGNhcmVmdWxseSBjcmFmdGVkIGRhdGEgc3RydWN0dXJlIHdo
aWNoIG9ubHkgaG9sZHMgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiBieSBsZXZlcmFnaW5nIHRoZSBk
ZWVwIGludGVyYWN0aW9uCisgICAgICAgIHdpdGggb3VyIEdDIGltcGxlbWVudGF0aW9uLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBuZXcgZGVzaWduIG9mIEpJVFRodW5rcywgd2hp
Y2ggdXNlcyBIYXNoU2V0PFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4+IGFuZCBjYXJlZnVsbHkgY3Jh
ZnRlZAorICAgICAgICBIYXNoVHJhaXRzIC8gS2V5VHJhaXRzIHRvIGhhbmRsZSBXZWFrPD4gd2Vs
bC4KKworICAgICAgICAxLiBFYWNoIFdlYWsgc2hvdWxkIGhhdmUgZmluYWxpemVyLCBhbmQgdGhp
cyBmaW5hbGl6ZXIgc2hvdWxkIHJlbW92ZSBkZWFkIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4gZnJv
bSBIYXNoU2V0LgorCisgICAgICAgICAgICBUaGlzIGlzIGVuc3VyaW5nIHRoYXQgYWxsIHRoZSBr
ZXlzIGluIEhhc2hTZXQgaXMsIGV2ZW4gaWYgV2Vhazw+IGlzIHNheWluZyBpdCBpcyBEZWFkLCBp
dCBzdGlsbCBoYXMgYW4gd2F5CisgICAgICAgICAgICB0byBhY2Nlc3MgY29udGVudCBvZiBOYXRp
dmVFeGVjdXRhYmxlIGlmIHRoZSBjb250ZW50IGlzIG5vdCBhIEpTIG9iamVjdHMuIEZvciBleGFt
cGxlLCB3ZSBjYW4gZ2V0IGZ1bmN0aW9uCisgICAgICAgICAgICBwb2ludGVyIGZyb20gZGVhZCBX
ZWFrPE5hdGl2ZUV4ZWN1dGFibGU+IGlmIGl0IGlzIG5vdCB5ZXQgZmluYWxpemVkLiBTaW5jZSB3
ZSByZW1vdmUgYWxsIGZpbmFsaXplZCBXZWFrPD4KKyAgICAgICAgICAgIGZyb20gdGhlIHRhYmxl
LCB0aGlzIGZpbmFsaXplciBtZWNoYW5pc20gYWxsb3dzIHVzIHRvIGFjY2VzcyBmdW5jdGlvbiBw
b2ludGVycyBldGMuIGZyb20gV2VhazxOYXRpdmVFeGVjdXRhYmxlPgorICAgICAgICAgICAgc28g
bG9uZyBhcyBpdCBpcyBoZWxkIGluIHRoaXMgdGFibGUuCisKKyAgICAgICAgMi4gR2V0dGluZyBO
YXRpdmVFeGVjdXRhYmxlKiBmcm9tIEpJVFRodW5rcyBzaG91bGQgaGF2ZSBzcGVjaWFsIHByb3Rv
Y29sLgorCisgICAgICAgICAgICBXaGVuIGdldHRpbmcgTmF0aXZlRXhlY3V0YWJsZSogZnJvbSBK
SVRUaHVua3MsIHdlIGRvIHRoZSBmb2xsb3dpbmcsCisKKyAgICAgICAgICAgIDEuIEZpcnN0LCB3
ZSBjaGVjayB3ZSBoYXZlIGFuIEVudHJ5IGluIEpJVFRodW5rcy4gSWYgaXQgZG9lcyBub3QgZXhp
c3QsIHdlIHNob3VsZCBpbnNlcnQgaXQgYW55d2F5LgorICAgICAgICAgICAgICAgIDEuMS4gSWYg
aXQgZXhpc3RzLCB3ZSBzaG91bGQgY2hlY2sgd2hldGhlciB0aGlzIFdlYWs8TmF0aXZlRXhlY3V0
YWJsZT4gaXMgZGVhZCBvciBub3QuIEl0IGlzIHBvc3NpYmxlIHRoYXQKKyAgICAgICAgICAgICAg
ICAgICAgIGRlYWQgb25lIGlzIHN0aWxsIGluIHRoZSB0YWJsZSBiZWNhdXNlICJkZWFkIiBkb2Vz
IG5vdCBtZWFuIHRoYXQgaXQgaXMgImZpbmFsaXplZCIuIFVudGlsIGZpbmFsaXppbmcgaGFwcGVu
cyAoYW5kCisgICAgICAgICAgICAgICAgICAgICBpdCBjYW4gYmUgZGVsYXllZCBieSBpbmNyZW1l
bnRhbC1zd2VlcGVyKSwgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiBjYW4gYmUgZGVhZCBidXQgc3Rp
bGwgYWNjZXNzaWJsZS4gU28gdGhlIHRhYmxlCisgICAgICAgICAgICAgICAgICAgICBpcyBzdGls
bCBob2xkaW5nIGRlYWQgb25lLiBJZiB3ZSBnZXQgZGVhZCBvbmUsIHdlIHNob3VsZCBpbnNlcnQg
YSBuZXcgb25lLgorICAgICAgICAgICAgICAgIDEuMi4gSWYgaXQgaXMgbm90IGRlYWQsIHdlIHJl
dHVybiBpdC4KKyAgICAgICAgICAgIDIuIFNlY29uZCwgd2UgY3JlYXRlIGEgbmV3IE5hdGl2ZUV4
ZWN1dGFibGUgYW5kIGluc2VydCBpdC4gSW4gdGhhdCBjYXNlLCBpdCBpcyBwb3NzaWJsZSB0aGF0
IHRoZSB0YWJsZSBhbHJlYWR5IGhhcyBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+LAorICAgICAgICAg
ICAgICAgYnV0IGl0IGlzIGRlYWQuIEluIHRoYXQgY2FzZSwgd2UgbmVlZCB0byBleHBsaWNpdGx5
IHJlcGxhY2UgaXQgd2l0aCBuZXdseSBjcmVhdGVkIG9uZSBzaW5jZSBvbGQgb25lIGlzIGhvbGRp
bmcgb2xkIGNvbnRlbnQuIElmIHdlCisgICAgICAgICAgICAgICByZXBsYWNlZCwgZmluYWxpemVy
IG9mIFdlYWs8PiB3aWxsIG5vdCBiZSBpbnZva2VkIHNpbmNlIGl0IGltbWVkaWF0ZWx5IGRlYWxs
b2NhdGVzIFdlYWs8Pi4gU28sIGl0IGRvZXMgbm90IGhhcHBlbiB0aGF0IHRoaXMgbmV3bHkKKyAg
ICAgICAgICAgICAgIGluc2VydGVkIE5hdGl2ZUV4ZWN1dGFibGUqIGlzIHJlbW92ZWQgYnkgdGhl
IGZpbmFsaXplciByZWdpc3RlcmVkIGJ5IHRoZSBvbGQgV2Vhazw+LgorCisgICAgICAgIFRoaXMg
Y2hhbmdlIG1ha2VzIG1lbW9yeSB1c2FnZSBvZiBKSVRUaHVua3MgdGFibGUgMS80LgorCisgICAg
ICAgICogaGVhcC9XZWFrLmNwcDoKKyAgICAgICAgKEpTQzo6d2Vha0NsZWFyU2xvd0Nhc2UpOgor
ICAgICAgICAqIGhlYXAvV2Vhay5oOgorICAgICAgICAoSlNDOjpXZWFrOjpXZWFrKToKKyAgICAg
ICAgKEpTQzo6V2Vhazo6dW5zYWZlSW1wbCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUcmFp
dHM8SlNDOjpXZWFrPFQ+Pjo6aXNFbXB0eVZhbHVlKToKKyAgICAgICAgKiBoZWFwL1dlYWtJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6OldlYWs8VD46OmlzSGFzaFRhYmxlRW1wdHlWYWx1ZSBjb25z
dCk6CisgICAgICAgIChKU0M6OldlYWs8VD46OldlYWspOgorICAgICAgICAqIGppdC9KSVRUaHVu
a3MuY3BwOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OkpJVFRodW5rcyk6CisgICAgICAgIChK
U0M6OkpJVFRodW5rczo6V2Vha05hdGl2ZUV4ZWN1dGFibGVIYXNoOjpoYXNoKToKKyAgICAgICAg
KEpTQzo6SklUVGh1bmtzOjpXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g6OmVxdWFsKToKKyAgICAg
ICAgKEpTQzo6SklUVGh1bmtzOjpIb3N0S2V5U2VhcmNoZXI6Omhhc2gpOgorICAgICAgICAoSlND
OjpKSVRUaHVua3M6Okhvc3RLZXlTZWFyY2hlcjo6ZXF1YWwpOgorICAgICAgICAoSlNDOjpKSVRU
aHVua3M6Ok5hdGl2ZUV4ZWN1dGFibGVUcmFuc2xhdG9yOjpoYXNoKToKKyAgICAgICAgKEpTQzo6
SklUVGh1bmtzOjpOYXRpdmVFeGVjdXRhYmxlVHJhbnNsYXRvcjo6ZXF1YWwpOgorICAgICAgICAo
SlNDOjpKSVRUaHVua3M6Ok5hdGl2ZUV4ZWN1dGFibGVUcmFuc2xhdG9yOjp0cmFuc2xhdGUpOgor
ICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6SklUVGh1
bmtzOjpob3N0RnVuY3Rpb25TdHViKToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjbGVhckhv
c3RGdW5jdGlvblN0dWJzKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUVGh1bmtzLmg6Cisg
ICAgICAgICogcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmg6CisKIDIwMjAtMDItMTMgIFN0ZXBo
YW4gU3phYm8gIDxzdGVwaGFuLnN6YWJvQHNvbnkuY29tPgogCiAgICAgICAgIFtQbGF5U3RhdGlv
bl0gTWFrZSBzcGVjaWFsIHVkaXM4NiBDIGZpbGUgaGFuZGxpbmcgb25seSBoYXBwZW4gZm9yIFZp
c3VhbCBTdHVkaW8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWsu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vhay5jcHAKaW5kZXggYTMwYjdjMDg1
NTM4NGRkMTZmMzMzODkxOWUzYjFjNTU3MzBmNDI5MS4uNzgxYTg2ZDM4NzgwYjljMDA3YmE2MDcz
YjQ1MzVhNWJlNjQ2N2RmYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
V2Vhay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vhay5jcHAKQEAgLTM2
LDcgKzM2LDcgQEAgdm9pZCB3ZWFrQ2xlYXJTbG93Q2FzZShXZWFrSW1wbComIGltcGwpCiAgICAg
QVNTRVJUKGltcGwpOwogCiAgICAgV2Vha1NldDo6ZGVhbGxvY2F0ZShpbXBsKTsKLSAgICBpbXBs
ID0gMDsKKyAgICBpbXBsID0gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9XZWFrLmgKaW5kZXggMDdmY2QyNDUzNTYyMGVjM2YxODdlMWM5YWJlZTA5
ZWM5ZTAzNWZlYy4uZGRmMmZlOGE5YzE0NjRmMDUyOWQ0NjYwOTNlNDYyMDE4ODllNTI5ZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vhay5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1dlYWsuaApAQCAtNDIsMjEgKzQyLDE4IEBAIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgd2Vha0NsZWFyU2xvd0Nhc2UoV2Vha0ltcGwqJik7CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBjbGFzcyBXZWFrIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWFrKTsKIHB1
YmxpYzoKLSAgICBXZWFrKCkKLSAgICAgICAgOiBtX2ltcGwoMCkKLSAgICB7Ci0gICAgfQorICAg
IFdlYWsoKSA9IGRlZmF1bHQ7CiAKLSAgICBXZWFrKHN0ZDo6bnVsbHB0cl90KQotICAgICAgICA6
IG1faW1wbCgwKQorICAgIGNvbnN0ZXhwciBXZWFrKHN0ZDo6bnVsbHB0cl90KQorICAgICAgICA6
IFdlYWsoKQogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgV2VhayhUKiwgV2Vha0hhbmRsZU93
bmVyKiA9IDAsIHZvaWQqIGNvbnRleHQgPSAwKTsKKyAgICBpbmxpbmUgV2VhayhUKiwgV2Vha0hh
bmRsZU93bmVyKiA9IG51bGxwdHIsIHZvaWQqIGNvbnRleHQgPSBudWxscHRyKTsKIAotICAgIGVu
dW0gSGFzaFRhYmxlRGVsZXRlZFZhbHVlVGFnIHsgSGFzaFRhYmxlRGVsZXRlZFZhbHVlIH07CiAg
ICAgaW5saW5lIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdDsKLSAgICBpbmxp
bmUgV2VhayhIYXNoVGFibGVEZWxldGVkVmFsdWVUYWcpOworICAgIGlubGluZSBXZWFrKFdURjo6
SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSk7CisgICAgaW5saW5lIGJvb2wgaXNIYXNoVGFibGVF
bXB0eVZhbHVlKCkgY29uc3Q7CiAKICAgICBpbmxpbmUgV2VhayhXZWFrJiYpOwogCkBAIC03OSw2
ICs3Niw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWsgewogICAgIGlubGluZSBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Q7CiAKICAgICBpbmxpbmUgV2Vha0ltcGwqIGxl
YWtJbXBsKCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIGlubGluZSBXZWFrSW1wbCogdW5zYWZl
SW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbDsgfQogICAgIHZvaWQgY2xlYXIoKQogICAgIHsK
ICAgICAgICAgaWYgKCFtX2ltcGwpCkBAIC04OSw3ICs4Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGNsYXNzIFdlYWsgewogcHJpdmF0ZToKICAgICBzdGF0aWMgaW5saW5lIFdlYWtJbXBsKiBo
YXNoVGFibGVEZWxldGVkVmFsdWUoKTsKIAotICAgIFdlYWtJbXBsKiBtX2ltcGw7CisgICAgV2Vh
a0ltcGwqIG1faW1wbCB7IG51bGxwdHIgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpAQCAt
MTA2LDYgKzEwNCw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzPEpT
Qzo6V2VhazxUPj4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDCiAgICAgdHlwZWRlZiBzdGQ6
Om51bGxwdHJfdCBFbXB0eVZhbHVlVHlwZTsKICAgICBzdGF0aWMgRW1wdHlWYWx1ZVR5cGUgZW1w
dHlWYWx1ZSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KIAorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBoYXNJc0VtcHR5VmFsdWVGdW5jdGlvbiA9IHRydWU7CisgICAgc3RhdGljIGJvb2wgaXNFbXB0
eVZhbHVlKGNvbnN0IEpTQzo6V2VhazxUPiYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlLmlzSGFzaFRh
YmxlRW1wdHlWYWx1ZSgpOyB9CisKICAgICB0eXBlZGVmIFQqIFBlZWtUeXBlOwogICAgIHN0YXRp
YyBQZWVrVHlwZSBwZWVrKGNvbnN0IFN0b3JhZ2VUeXBlJiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUu
Z2V0KCk7IH0KICAgICBzdGF0aWMgUGVla1R5cGUgcGVlayhFbXB0eVZhbHVlVHlwZSkgeyByZXR1
cm4gUGVla1R5cGUoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
V2Vha0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbmxpbmVzLmgK
aW5kZXggMGY3ZDU2MGIzYzlmZDdhNDc5MmRhZjk5MzEzODYxOGU5M2E3NjE5Ni4uMDExYTIyNzJi
YjJlNTQyY2M0NDkyNmFhZmNlNTRhNzVmZTk4NjIwOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvV2Vha0lubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9XZWFrSW5saW5lcy5oCkBAIC00MSw3ICs0MSwxMiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgYm9vbCBXZWFrPFQ+Ojppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CiAg
ICAgcmV0dXJuIG1faW1wbCA9PSBoYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIFdlYWs8VD46OldlYWsodHlwZW5hbWUgV2VhazxUPjo6SGFz
aFRhYmxlRGVsZXRlZFZhbHVlVGFnKQordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGJvb2wg
V2VhazxUPjo6aXNIYXNoVGFibGVFbXB0eVZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1f
aW1wbDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFdlYWs8VD46OldlYWsoV1RG
OjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQogICAgIDogbV9pbXBsKGhhc2hUYWJsZURlbGV0
ZWRWYWx1ZSgpKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCmlu
ZGV4IDdmYjk4ODQwNDFiNTA2OTBmOTNjNGQyNWZkZTQ0MTczYWU4N2EwMzYuLmNkMjg4ZGY1ZWVk
NWM1NWM4OTcyOTYzNGEzNGY0NDdlZTA3ZmFmNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFRodW5rcy5jcHAKQEAgLTM3LDcgKzM3LDYgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBKSVRU
aHVua3M6OkpJVFRodW5rcygpCi0gICAgOiBtX2hvc3RGdW5jdGlvblN0dWJNYXAobWFrZVVuaXF1
ZTxIb3N0RnVuY3Rpb25TdHViTWFwPigpKQogewogfQogCkBAIC00NSw2ICs0NCw2MyBAQCBKSVRU
aHVua3M6On5KSVRUaHVua3MoKQogewogfQogCitpbmxpbmUgdW5zaWduZWQgSklUVGh1bmtzOjpX
ZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g6Omhhc2goY29uc3QgTmF0aXZlRXhlY3V0YWJsZSogZXhl
Y3V0YWJsZSkKK3sKKyAgICByZXR1cm4gaGFzaChleGVjdXRhYmxlLT5mdW5jdGlvbigpLCBleGVj
dXRhYmxlLT5jb25zdHJ1Y3RvcigpLCBleGVjdXRhYmxlLT5uYW1lKCkpOworfQorCitpbmxpbmUg
dW5zaWduZWQgSklUVGh1bmtzOjpXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g6Omhhc2goY29uc3Qg
V2VhazxOYXRpdmVFeGVjdXRhYmxlPiYga2V5KQoreworICAgIC8vIFRoaXMgbmV2ZXIgZ2V0cyBE
ZWxldGVkIC8gRW1wdHkgc2xvdHMuCisgICAgV2Vha0ltcGwqIGltcGwgPSBrZXkudW5zYWZlSW1w
bCgpOworICAgIEFTU0VSVChpbXBsKTsKKyAgICAvLyBXZSBoYXZlIGEgY2FsbGJhY2sgcmVtb3Zp
bmcgZW50cnkgd2hlbiBmaW5hbGl6aW5nLiBUaGlzIG1lYW5zIHRoYXQgd2UgbmV2ZXIgaG9sZCBE
ZWFsbG9jYXRlZCBlbnRyeSBpbiBIYXNoU2V0LgorICAgIEFTU0VSVChpbXBsLT5zdGF0ZSgpICE9
IFdlYWtJbXBsOjpTdGF0ZTo6RGVhbGxvY2F0ZWQpOworICAgIC8vIE5ldmVyIHVzZSBqc0Nhc3Qg
aGVyZS4gVGhpcyBpcyBwb3NzaWJsZSB0aGF0IHRoaXMgdmFsdWUgaXMgIkRlYWQiIGJ1dCBub3Qg
IkZpbmFsaXplZCIgeWV0LiBJbiB0aGlzIGNhc2UsCisgICAgLy8gd2UgY2FuIHN0aWxsIGFjY2Vz
cyB0byBub24tSlMgZGF0YSwgYXMgd2UgYXJlIGRvaW5nIGluIGEgZmluYWxpemUgY2FsbGJhY2su
CisgICAgYXV0byogZXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihp
bXBsLT5qc1ZhbHVlKCkuYXNDZWxsKCkpOworICAgIEFTU0VSVChleGVjdXRhYmxlKTsKKyAgICBy
ZXR1cm4gaGFzaChleGVjdXRhYmxlKTsKK30KKworaW5saW5lIGJvb2wgSklUVGh1bmtzOjpXZWFr
TmF0aXZlRXhlY3V0YWJsZUhhc2g6OmVxdWFsKGNvbnN0IFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4m
IGEsIGNvbnN0IFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4mIGIpCit7CisgICAgLy8gVGhpcyBuZXZl
ciBnZXRzIERlbGV0ZWQgLyBFbXB0eSBzbG90cy4gQW5kIHdlIG5ldmVyIGdldCBEZWFsbG9jYXRl
ZCBXZWFrIGVudHJ5IHRvby4KKyAgICBhdXRvKiBhSW1wbCA9IGEudW5zYWZlSW1wbCgpOworICAg
IGF1dG8qIGJJbXBsID0gYi51bnNhZmVJbXBsKCk7CisgICAgQVNTRVJUKGFJbXBsKTsKKyAgICBB
U1NFUlQoYUltcGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OlN0YXRlOjpEZWFsbG9jYXRlZCk7Cisg
ICAgQVNTRVJUKGJJbXBsKTsKKyAgICBBU1NFUlQoYkltcGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6
OlN0YXRlOjpEZWFsbG9jYXRlZCk7CisgICAgYXV0byogYUV4ZWN1dGFibGUgPSBzdGF0aWNfY2Fz
dDxOYXRpdmVFeGVjdXRhYmxlKj4oYUltcGwtPmpzVmFsdWUoKS5hc0NlbGwoKSk7CisgICAgYXV0
byogYkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxOYXRpdmVFeGVjdXRhYmxlKj4oYkltcGwtPmpz
VmFsdWUoKS5hc0NlbGwoKSk7CisgICAgaWYgKGFFeGVjdXRhYmxlID09IGJFeGVjdXRhYmxlKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gYUV4ZWN1dGFibGUtPmZ1bmN0aW9uKCkg
PT0gYkV4ZWN1dGFibGUtPmZ1bmN0aW9uKCkgJiYgYUV4ZWN1dGFibGUtPmNvbnN0cnVjdG9yKCkg
PT0gYkV4ZWN1dGFibGUtPmNvbnN0cnVjdG9yKCkgJiYgYUV4ZWN1dGFibGUtPm5hbWUoKSA9PSBi
RXhlY3V0YWJsZS0+bmFtZSgpOworfQorCitpbmxpbmUgYm9vbCBKSVRUaHVua3M6OldlYWtOYXRp
dmVFeGVjdXRhYmxlSGFzaDo6ZXF1YWwoY29uc3QgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiYgYSwg
Y29uc3QgTmF0aXZlRXhlY3V0YWJsZSogYkV4ZWN1dGFibGUpCit7CisgICAgLy8gVGhpcyBuZXZl
ciBnZXRzIERlbGV0ZWQgLyBFbXB0eSBzbG90cy4gQW5kIHdlIG5ldmVyIGdldCBEZWFsbG9jYXRl
ZCBXZWFrIGVudHJ5IHRvby4KKyAgICBhdXRvKiBhSW1wbCA9IGEudW5zYWZlSW1wbCgpOworICAg
IEFTU0VSVChhSW1wbCk7CisgICAgQVNTRVJUKGFJbXBsLT5zdGF0ZSgpICE9IFdlYWtJbXBsOjpT
dGF0ZTo6RGVhbGxvY2F0ZWQpOworICAgIGF1dG8qIGFFeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8
TmF0aXZlRXhlY3V0YWJsZSo+KGFJbXBsLT5qc1ZhbHVlKCkuYXNDZWxsKCkpOworICAgIGlmIChh
RXhlY3V0YWJsZSA9PSBiRXhlY3V0YWJsZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIGFFeGVjdXRhYmxlLT5mdW5jdGlvbigpID09IGJFeGVjdXRhYmxlLT5mdW5jdGlvbigpICYm
IGFFeGVjdXRhYmxlLT5jb25zdHJ1Y3RvcigpID09IGJFeGVjdXRhYmxlLT5jb25zdHJ1Y3Rvcigp
ICYmIGFFeGVjdXRhYmxlLT5uYW1lKCkgPT0gYkV4ZWN1dGFibGUtPm5hbWUoKTsKK30KKworaW5s
aW5lIGJvb2wgSklUVGh1bmtzOjpXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g6OmVxdWFsKGNvbnN0
IFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4mIGEsIGNvbnN0IEhvc3RGdW5jdGlvbktleSYgYikKK3sK
KyAgICAvLyBUaGlzIG5ldmVyIGdldHMgRGVsZXRlZCAvIEVtcHR5IHNsb3RzLiBBbmQgd2UgbmV2
ZXIgZ2V0IERlYWxsb2NhdGVkIFdlYWsgZW50cnkgdG9vLgorICAgIGF1dG8qIGFJbXBsID0gYS51
bnNhZmVJbXBsKCk7CisgICAgQVNTRVJUKGFJbXBsKTsKKyAgICBBU1NFUlQoYUltcGwtPnN0YXRl
KCkgIT0gV2Vha0ltcGw6OlN0YXRlOjpEZWFsbG9jYXRlZCk7CisgICAgYXV0byogYUV4ZWN1dGFi
bGUgPSBzdGF0aWNfY2FzdDxOYXRpdmVFeGVjdXRhYmxlKj4oYUltcGwtPmpzVmFsdWUoKS5hc0Nl
bGwoKSk7CisgICAgcmV0dXJuIGFFeGVjdXRhYmxlLT5mdW5jdGlvbigpID09IHN0ZDo6Z2V0PDA+
KGIpICYmIGFFeGVjdXRhYmxlLT5jb25zdHJ1Y3RvcigpID09IHN0ZDo6Z2V0PDE+KGIpICYmIGFF
eGVjdXRhYmxlLT5uYW1lKCkgPT0gc3RkOjpnZXQ8Mj4oYik7Cit9CisKIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpjdGlOYXRpdmVDYWxsKFZNJiB2bSkK
IHsKICAgICBBU1NFUlQoVk06OmNhblVzZUpJVCgpKTsKQEAgLTEwMiwxMCArMTU4LDMyIEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtzOjpleGlzdGluZ0NU
SVN0dWIoVGh1bmtHZW5lcmF0b3IKICAgICByZXR1cm4gZW50cnktPnZhbHVlOwogfQogCitzdHJ1
Y3QgSklUVGh1bmtzOjpIb3N0S2V5U2VhcmNoZXIgeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNo
KGNvbnN0IEhvc3RGdW5jdGlvbktleSYga2V5KSB7IHJldHVybiBXZWFrTmF0aXZlRXhlY3V0YWJs
ZUhhc2g6Omhhc2goa2V5KTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFdlYWs8TmF0
aXZlRXhlY3V0YWJsZT4mIGEsIGNvbnN0IEhvc3RGdW5jdGlvbktleSYgYikgeyByZXR1cm4gV2Vh
a05hdGl2ZUV4ZWN1dGFibGVIYXNoOjplcXVhbChhLCBiKTsgfQorfTsKKworc3RydWN0IEpJVFRo
dW5rczo6TmF0aXZlRXhlY3V0YWJsZVRyYW5zbGF0b3IgeworICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IE5hdGl2ZUV4ZWN1dGFibGUqIGtleSkgeyByZXR1cm4gV2Vha05hdGl2ZUV4ZWN1
dGFibGVIYXNoOjpoYXNoKGtleSk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBXZWFr
PE5hdGl2ZUV4ZWN1dGFibGU+JiBhLCBjb25zdCBOYXRpdmVFeGVjdXRhYmxlKiBiKSB7IHJldHVy
biBXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g6OmVxdWFsKGEsIGIpOyB9CisgICAgc3RhdGljIHZv
aWQgdHJhbnNsYXRlKFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4mIGxvY2F0aW9uLCBOYXRpdmVFeGVj
dXRhYmxlKiBleGVjdXRhYmxlLCB1bnNpZ25lZCkKKyAgICB7CisgICAgICAgIGxvY2F0aW9uID0g
V2VhazxOYXRpdmVFeGVjdXRhYmxlPihleGVjdXRhYmxlLCBleGVjdXRhYmxlLT52bSgpLmppdFN0
dWJzLmdldCgpKTsKKyAgICB9Cit9OworCiB2b2lkIEpJVFRodW5rczo6ZmluYWxpemUoSGFuZGxl
PFVua25vd24+IGhhbmRsZSwgdm9pZCopCiB7CiAgICAgYXV0byogbmF0aXZlRXhlY3V0YWJsZSA9
IHN0YXRpY19jYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOwot
ICAgIHdlYWtSZW1vdmUoKm1faG9zdEZ1bmN0aW9uU3R1Yk1hcCwgc3RkOjptYWtlX3R1cGxlKG5h
dGl2ZUV4ZWN1dGFibGUtPmZ1bmN0aW9uKCksIG5hdGl2ZUV4ZWN1dGFibGUtPmNvbnN0cnVjdG9y
KCksIG5hdGl2ZUV4ZWN1dGFibGUtPm5hbWUoKSksIG5hdGl2ZUV4ZWN1dGFibGUpOworICAgIGF1
dG8gaG9zdEZ1bmN0aW9uS2V5ID0gc3RkOjptYWtlX3R1cGxlKG5hdGl2ZUV4ZWN1dGFibGUtPmZ1
bmN0aW9uKCksIG5hdGl2ZUV4ZWN1dGFibGUtPmNvbnN0cnVjdG9yKCksIG5hdGl2ZUV4ZWN1dGFi
bGUtPm5hbWUoKSk7CisgICAgeworICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7CisgICAg
ICAgIGF1dG8gaXRlcmF0b3IgPSBtX25hdGl2ZUV4ZWN1dGFibGVTZXQuZmluZDxIb3N0S2V5U2Vh
cmNoZXI+KGhvc3RGdW5jdGlvbktleSk7CisgICAgICAgIC8vIEJlY2F1c2UgdGhpcyBmaW5hbGl6
ZXIgaXMgY2FsbGVkLCB0aGlzIG1lYW5zIHRoYXQgd2Ugc3RpbGwgaGF2ZSBkZWFkIFdlYWs8PiBp
biBtX25hdGl2ZUV4ZWN1dGFibGVTZXQuCisgICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX25h
dGl2ZUV4ZWN1dGFibGVTZXQuZW5kKCkpOworICAgICAgICBBU1NFUlQoaXRlcmF0b3ItPnVuc2Fm
ZUltcGwoKS0+c3RhdGUoKSA9PSBXZWFrSW1wbDo6U3RhdGU6OkZpbmFsaXplZCk7CisgICAgICAg
IG1fbmF0aXZlRXhlY3V0YWJsZVNldC5yZW1vdmUoaXRlcmF0b3IpOworICAgIH0KIH0KIAogTmF0
aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKFZNJiB2bSwgVGFnZ2Vk
TmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9y
LCBjb25zdCBTdHJpbmcmIG5hbWUpCkBAIC0xMTgsOCArMTk2LDE3IEBAIE5hdGl2ZUV4ZWN1dGFi
bGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1YihWTSYgdm0sIFRhZ2dlZE5hdGl2ZUZ1bmN0
aW9uIGZ1bmN0CiAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOyAgICAKICAgICBB
U1NFUlQoVk06OmNhblVzZUpJVCgpKTsKIAotICAgIGlmIChOYXRpdmVFeGVjdXRhYmxlKiBuYXRp
dmVFeGVjdXRhYmxlID0gbV9ob3N0RnVuY3Rpb25TdHViTWFwLT5nZXQoc3RkOjptYWtlX3R1cGxl
KGZ1bmN0aW9uLCBjb25zdHJ1Y3RvciwgbmFtZSkpKQotICAgICAgICByZXR1cm4gbmF0aXZlRXhl
Y3V0YWJsZTsKKyAgICBhdXRvIGhvc3RGdW5jdGlvbktleSA9IHN0ZDo6bWFrZV90dXBsZShmdW5j
dGlvbiwgY29uc3RydWN0b3IsIG5hbWUpOworICAgIHsKKyAgICAgICAgRGlzYWxsb3dHQyBkaXNh
bGxvd0dDOworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9uYXRpdmVFeGVjdXRhYmxlU2V0LmZp
bmQ8SG9zdEtleVNlYXJjaGVyPihob3N0RnVuY3Rpb25LZXkpOworICAgICAgICBpZiAoaXRlcmF0
b3IgIT0gbV9uYXRpdmVFeGVjdXRhYmxlU2V0LmVuZCgpKSB7CisgICAgICAgICAgICAvLyBJdCBp
cyBwb3NzaWJsZSB0aGF0IHRoaXMgcmV0dXJucyBXZWFrPD4gd2hpY2ggaXMgRGVhZCwgYnV0IG5v
dCBmaW5hbGl6ZWQuCisgICAgICAgICAgICAvLyBXZSBzaG91bGQgbm90IHVzZSB0aGlzIHJlZmVy
ZW5jZSB0byBzdG9yZSB2YWx1ZSBjcmVhdGVkIGluIHRoZSBzdWJzZXF1ZW50IHNlcXVlbmNlLCBz
aW5jZSBhbGxvY2F0aW5nIE5hdGl2ZUV4ZWN1dGFibGUgY2FuIGNhdXNlIEdDLCB3aGljaCBjaGFu
Z2VzIHRoaXMgU2V0LgorICAgICAgICAgICAgaWYgKGF1dG8qIGV4ZWN1dGFibGUgPSBpdGVyYXRv
ci0+Z2V0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CisgICAgICAgIH0K
KyAgICB9CiAKICAgICBSZWZQdHI8SklUQ29kZT4gZm9yQ2FsbDsKICAgICBpZiAoZ2VuZXJhdG9y
KSB7CkBAIC0xMzMsNyArMjIwLDIzIEBAIE5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9z
dEZ1bmN0aW9uU3R1YihWTSYgdm0sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0CiAgICAgUmVm
PEpJVENvZGU+IGZvckNvbnN0cnVjdCA9IGFkb3B0UmVmKCpuZXcgTmF0aXZlSklUQ29kZShNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJl
ZihjdGlOYXRpdmVDb25zdHJ1Y3Qodm0pLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCkpLCBKSVRU
eXBlOjpIb3N0Q2FsbFRodW5rLCBOb0ludHJpbnNpYykpOwogICAgIAogICAgIE5hdGl2ZUV4ZWN1
dGFibGUqIG5hdGl2ZUV4ZWN1dGFibGUgPSBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUodm0sIGZv
ckNhbGwucmVsZWFzZU5vbk51bGwoKSwgZnVuY3Rpb24sIFdURk1vdmUoZm9yQ29uc3RydWN0KSwg
Y29uc3RydWN0b3IsIG5hbWUpOwotICAgIHdlYWtBZGQoKm1faG9zdEZ1bmN0aW9uU3R1Yk1hcCwg
c3RkOjptYWtlX3R1cGxlKGZ1bmN0aW9uLCBjb25zdHJ1Y3RvciwgbmFtZSksIFdlYWs8TmF0aXZl
RXhlY3V0YWJsZT4obmF0aXZlRXhlY3V0YWJsZSwgdGhpcykpOworICAgIHsKKyAgICAgICAgRGlz
YWxsb3dHQyBkaXNhbGxvd0dDOworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbmF0aXZlRXhl
Y3V0YWJsZVNldC5hZGQ8TmF0aXZlRXhlY3V0YWJsZVRyYW5zbGF0b3I+KG5hdGl2ZUV4ZWN1dGFi
bGUpOworICAgICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICAv
LyBPdmVycmlkZSB0aGUgZXhpc3RpbmcgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiB3aXRoIHRoZSBu
ZXcgb25lIHNpbmNlIGl0IGlzIGRlYWQuCisgICAgICAgICAgICBBU1NFUlQoKmFkZFJlc3VsdC5p
dGVyYXRvcik7CisgICAgICAgICAgICAqYWRkUmVzdWx0Lml0ZXJhdG9yID0gV2VhazxOYXRpdmVF
eGVjdXRhYmxlPihuYXRpdmVFeGVjdXRhYmxlLCB0aGlzKTsKKyNpZiBBU1NFUlRfRU5BQkxFRAor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX25hdGl2ZUV4
ZWN1dGFibGVTZXQuZmluZDxIb3N0S2V5U2VhcmNoZXI+KGhvc3RGdW5jdGlvbktleSk7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fbmF0aXZlRXhlY3V0YWJsZVNldC5lbmQo
KSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGl0ZXJhdG9yLT5nZXQoKSA9PSBuYXRpdmVFeGVj
dXRhYmxlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXRlcmF0b3ItPnVuc2FmZUltcGwoKS0+
c3RhdGUoKSA9PSBXZWFrSW1wbDo6U3RhdGU6OkxpdmUpOworICAgICAgICAgICAgfQorI2VuZGlm
CisgICAgICAgIH0KKyAgICB9CiAgICAgcmV0dXJuIG5hdGl2ZUV4ZWN1dGFibGU7CiB9CiAKQEAg
LTE0MiwxMSArMjQ1LDYgQEAgTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rp
b25TdHViKFZNJiB2bSwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3QKICAgICByZXR1cm4gaG9z
dEZ1bmN0aW9uU3R1Yih2bSwgZnVuY3Rpb24sIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9y
LCBnZW5lcmF0b3IsIGludHJpbnNpYywgbnVsbHB0ciwgbmFtZSk7CiB9CiAKLXZvaWQgSklUVGh1
bmtzOjpjbGVhckhvc3RGdW5jdGlvblN0dWJzKCkKLXsKLSAgICBtX2hvc3RGdW5jdGlvblN0dWJN
YXAgPSBudWxscHRyOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJM
RShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaAppbmRleCA0OGMyMGUzMzdk
YzE0MmM4MzQzZTk2NTFlNjliZWI1ZjYzYjM5YTcyLi4yMWJlYmZmYmIyYTYwNjE5MTJmMmJlNjYy
MWNjNjBkOTQ5MTdiZGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFRodW5rcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgKQEAg
LTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJXZWFrSGFuZGxlT3duZXIuaCIKICNpbmNsdWRlIDx0
dXBsZT4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAg
LTY1LDQ3ICs2Niw0NiBAQCBjbGFzcyBKSVRUaHVua3MgZmluYWwgOiBwcml2YXRlIFdlYWtIYW5k
bGVPd25lciB7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihWTSYsIFRh
Z2dlZE5hdGl2ZUZ1bmN0aW9uLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvciwgVGh1
bmtHZW5lcmF0b3IsIEludHJpbnNpYywgY29uc3QgRE9NSklUOjpTaWduYXR1cmUqLCBjb25zdCBT
dHJpbmcmIG5hbWUpOwogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGhvc3RGdW5jdGlvblN0dWIoVk0m
LCBUYWdnZWROYXRpdmVGdW5jdGlvbiwgVGh1bmtHZW5lcmF0b3IsIEludHJpbnNpYywgY29uc3Qg
U3RyaW5nJiBuYW1lKTsKIAotICAgIHZvaWQgY2xlYXJIb3N0RnVuY3Rpb25TdHVicygpOwotCiBw
cml2YXRlOgogICAgIHZvaWQgZmluYWxpemUoSGFuZGxlPFVua25vd24+LCB2b2lkKiBjb250ZXh0
KSBvdmVycmlkZTsKICAgICAKICAgICB0eXBlZGVmIEhhc2hNYXA8VGh1bmtHZW5lcmF0b3IsIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4+IENUSVN0dWJNYXA7CiAgICAgQ1RJ
U3R1Yk1hcCBtX2N0aVN0dWJNYXA7CiAKLSAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8VGFnZ2VkTmF0
aXZlRnVuY3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uLCBTdHJpbmc+IEhvc3RGdW5jdGlvbktl
eTsKKyAgICB1c2luZyBIb3N0RnVuY3Rpb25LZXkgPSBzdGQ6OnR1cGxlPFRhZ2dlZE5hdGl2ZUZ1
bmN0aW9uLCBUYWdnZWROYXRpdmVGdW5jdGlvbiwgU3RyaW5nPjsKIAotICAgIHN0cnVjdCBIb3N0
RnVuY3Rpb25IYXNoIHsKKyAgICBzdHJ1Y3QgV2Vha05hdGl2ZUV4ZWN1dGFibGVIYXNoIHsKKyAg
ICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiYp
OworICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBOYXRpdmVFeGVjdXRhYmxlKik7
CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEhvc3RGdW5jdGlvbktleSYga2V5
KQogICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBoYXNoID0gV1RGOjpwYWlySW50SGFz
aChoYXNoUG9pbnRlcihzdGQ6OmdldDwwPihrZXkpKSwgaGFzaFBvaW50ZXIoc3RkOjpnZXQ8MT4o
a2V5KSkpOwotICAgICAgICAgICAgaWYgKCFzdGQ6OmdldDwyPihrZXkpLmlzTnVsbCgpKQotICAg
ICAgICAgICAgICAgIGhhc2ggPSBXVEY6OnBhaXJJbnRIYXNoKGhhc2gsIERlZmF1bHRIYXNoPFN0
cmluZz46Okhhc2g6Omhhc2goc3RkOjpnZXQ8Mj4oa2V5KSkpOwotICAgICAgICAgICAgcmV0dXJu
IGhhc2g7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgSG9zdEZ1
bmN0aW9uS2V5JiBhLCBjb25zdCBIb3N0RnVuY3Rpb25LZXkmIGIpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiAoc3RkOjpnZXQ8MD4oYSkgPT0gc3RkOjpnZXQ8MD4oYikpICYmIChzdGQ6
OmdldDwxPihhKSA9PSBzdGQ6OmdldDwxPihiKSkgJiYgKHN0ZDo6Z2V0PDI+KGEpID09IHN0ZDo6
Z2V0PDI+KGIpKTsKKyAgICAgICAgICAgIHJldHVybiBoYXNoKHN0ZDo6Z2V0PDA+KGtleSksIHN0
ZDo6Z2V0PDE+KGtleSksIHN0ZDo6Z2V0PDI+KGtleSkpOwogICAgICAgICB9Ci0gICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7
CisKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgV2VhazxOYXRpdmVFeGVjdXRhYmxl
PiYgYSwgY29uc3QgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiYgYik7CisgICAgICAgIHN0YXRpYyBi
b29sIGVxdWFsKGNvbnN0IFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4mIGEsIGNvbnN0IEhvc3RGdW5j
dGlvbktleSYgYik7CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFdlYWs8TmF0aXZl
RXhlY3V0YWJsZT4mIGEsIGNvbnN0IE5hdGl2ZUV4ZWN1dGFibGUqIGIpOworICAgICAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsK
IAogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaGFzaFBvaW50
ZXIoVGFnZ2VkTmF0aXZlRnVuY3Rpb24gcCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IERlZmF1bHRIYXNoPFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uPjo6SGFzaDo6aGFzaChwKTsKICAgICAg
ICAgfQotICAgIH07CiAKLSAgICBzdHJ1Y3QgSG9zdEZ1bmN0aW9uSGFzaFRyYWl0IDogV1RGOjpH
ZW5lcmljSGFzaFRyYWl0czxIb3N0RnVuY3Rpb25LZXk+IHsKLSAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOwotICAgICAgICBzdGF0aWMgRW1wdHlW
YWx1ZVR5cGUgZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIHN0ZDo6bWFrZV90dXBsZShudWxscHRyLCBu
dWxscHRyLCBTdHJpbmcoKSk7IH0KLQotICAgICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxl
dGVkVmFsdWUoSG9zdEZ1bmN0aW9uS2V5JiBzbG90KSB7IHN0ZDo6Z2V0PDA+KHNsb3QpID0gVGFn
Z2VkTmF0aXZlRnVuY3Rpb24oLTEpOyB9Ci0gICAgICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZh
bHVlKGNvbnN0IEhvc3RGdW5jdGlvbktleSYgdmFsdWUpIHsgcmV0dXJuIHN0ZDo6Z2V0PDA+KHZh
bHVlKSA9PSBUYWdnZWROYXRpdmVGdW5jdGlvbigtMSk7IH0KKyAgICAgICAgc3RhdGljIHVuc2ln
bmVkIGhhc2goVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1bmN0
aW9uIGNvbnN0cnVjdG9yLCBjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGhhc2ggPSBXVEY6OnBhaXJJbnRIYXNoKGhhc2hQb2ludGVyKGZ1bmN0aW9u
KSwgaGFzaFBvaW50ZXIoY29uc3RydWN0b3IpKTsKKyAgICAgICAgICAgIGlmICghbmFtZS5pc051
bGwoKSkKKyAgICAgICAgICAgICAgICBoYXNoID0gV1RGOjpwYWlySW50SGFzaChoYXNoLCBEZWZh
dWx0SGFzaDxTdHJpbmc+OjpIYXNoOjpoYXNoKG5hbWUpKTsKKyAgICAgICAgICAgIHJldHVybiBo
YXNoOworICAgICAgICB9CiAgICAgfTsKLSAgICAKLSAgICB0eXBlZGVmIEhhc2hNYXA8SG9zdEZ1
bmN0aW9uS2V5LCBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+LCBIb3N0RnVuY3Rpb25IYXNoLCBIb3N0
RnVuY3Rpb25IYXNoVHJhaXQ+IEhvc3RGdW5jdGlvblN0dWJNYXA7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPEhvc3RGdW5jdGlvblN0dWJNYXA+IG1faG9zdEZ1bmN0aW9uU3R1Yk1hcDsKKyAgICBzdHJ1
Y3QgSG9zdEtleVNlYXJjaGVyOworICAgIHN0cnVjdCBOYXRpdmVFeGVjdXRhYmxlVHJhbnNsYXRv
cjsKKworICAgIHVzaW5nIFdlYWtOYXRpdmVFeGVjdXRhYmxlU2V0ID0gSGFzaFNldDxXZWFrPE5h
dGl2ZUV4ZWN1dGFibGU+LCBXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g+OworICAgIFdlYWtOYXRp
dmVFeGVjdXRhYmxlU2V0IG1fbmF0aXZlRXhlY3V0YWJsZVNldDsKICAgICBMb2NrIG1fbG9jazsK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4
ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFi
bGUuaAppbmRleCAyZTNmNTQyM2YyNWQ0NDAwOTM0NWQ3YWY5ZGUzNjEwMjhhYTA2OTU0Li45ZjA0
M2ZhZDJlNjNhYWJlNGJiNjJiNWFkNzQ4ZmViZDZmZjRlNTJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5oCkBAIC00OCw4ICs0OCw4IEBA
IGNsYXNzIE5hdGl2ZUV4ZWN1dGFibGUgZmluYWwgOiBwdWJsaWMgRXhlY3V0YWJsZUJhc2Ugewog
CiAgICAgQ29kZUJsb2NrSGFzaCBoYXNoRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpIGNvbnN0
OwogCi0gICAgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24oKSB7IHJldHVybiBtX2Z1bmN0
aW9uOyB9Ci0gICAgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IoKSB7IHJldHVybiBt
X2NvbnN0cnVjdG9yOyB9CisgICAgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24oKSBjb25z
dCB7IHJldHVybiBtX2Z1bmN0aW9uOyB9CisgICAgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gY29uc3Ry
dWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0cnVjdG9yOyB9CiAgICAgICAgIAogICAgIFRh
Z2dlZE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uRm9yKENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKICAgICB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390852</attachid>
            <date>2020-02-14 20:05:26 -0800</date>
            <delta_ts>2020-02-14 23:31:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207715-20200214200525.patch</filename>
            <type>text/plain</type>
            <size>21347</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2Njk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
MDg5ZDRjODE0ZDEwMTRlOGZlZTdlN2U1M2RiZWEyNDUyNTRiMzE1Li42NmRmZDk1OWZlMmZiMzA0
NWQyOGNhY2VhOTBhOWFlZjFkODY2YzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NCBAQAorMjAyMC0wMi0xNCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIEpJVFRodW5rIHNob3VsZCBiZSBIYXNoU2V0PFdlYWs8TmF0aXZl
RXhlY3V0YWJsZT4+IHdpdGggYXBwcm9wcmlhdGUgR0Mgd2Vha25lc3MgaGFuZGxpbmcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzcxNQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVm
aW5lcyBKSVRUaHVua3MgR0MtYXdhcmUgV2VhayBoYXNoIG1hcCBmb3IgTmF0aXZlRXhlY3V0YWJs
ZS4gUHJldmlvdXNseSwgd2UgaGF2ZQorICAgICAgICBIYXNoTWFwPHN0ZDo6dHVwbGU8VGFnZ2Vk
TmF0aXZlRnVuY3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uLCBTdHJpbmc+LCBXZWFrPE5hdGl2
ZUV4ZWN1dGFibGU+PiB0YWJsZS4KKyAgICAgICAgQnV0IHRoaXMgaXMgbm90IGdvb2QgYmVjYXVz
ZSB0aGUgZmlyc3QgdHVwbGUncyBpbmZvcm1hdGlvbiBpcyBhbHJlYWR5IGluIE5hdGl2ZUV4ZWN1
dGFibGUuCisgICAgICAgIEJ1dCB3ZSB3ZXJlIHVzaW5nIHRoaXMgZGVzaWduIHNpbmNlIFdlYWs8
TmF0aXZlRXhlY3V0YWJsZT4gY2FuIGJlIG51bGxpZmllZCBiZWNhdXNlIG9mIFdlYWs8Pi4gSWYg
dGhpcworICAgICAgICBoYXBwZW5zLCB3ZSBjb3VsZCBoYXZlIGludmFsaWQgRW50cnkgaW4gSGFz
aE1hcCB3aGljaCBkb2VzIG5vdCBoYXZlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLiBUaGlzIHdpbGwK
KyAgICAgICAgY2F1c2UgY3Jhc2ggd2hlbiByZWhhc2luZyByZXF1aXJlcyBoYXNoIGNvZGUgZm9y
IHRoaXMgZW50cnkuCisKKyAgICAgICAgQnV0IHRoaXMgSGFzaE1hcCBpcyB2ZXJ5IGJhZCBpbiB0
ZXJtcyBvZiBtZW1vcnkgdXNhZ2UuIEVhY2ggZW50cnkgaGFzIDMyIGJ5dGVzLCBhbmQgdGhpcyB0
YWJsZSBnZXRzIGVub3VnaAorICAgICAgICBsYXJnZS4gV2UgaWRlbnRpZmllZCB0aGF0IHRoaXMg
dGFibGUgaXMgY29uc3VtaW5nIG11Y2ggbWVtb3J5IGluIE1lbWJ1c3Rlci4gU28gaXQgaXMgd29y
dGggZGVzaWduaW5nCisgICAgICAgIGNhcmVmdWxseSBjcmFmdGVkIGRhdGEgc3RydWN0dXJlIHdo
aWNoIG9ubHkgaG9sZHMgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiBieSBsZXZlcmFnaW5nIHRoZSBk
ZWVwIGludGVyYWN0aW9uCisgICAgICAgIHdpdGggb3VyIEdDIGltcGxlbWVudGF0aW9uLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBuZXcgZGVzaWduIG9mIEpJVFRodW5rcywgd2hp
Y2ggdXNlcyBIYXNoU2V0PFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4+IGFuZCBjYXJlZnVsbHkgY3Jh
ZnRlZAorICAgICAgICBIYXNoVHJhaXRzIC8gS2V5VHJhaXRzIHRvIGhhbmRsZSBXZWFrPD4gd2Vs
bC4KKworICAgICAgICAxLiBFYWNoIFdlYWsgc2hvdWxkIGhhdmUgZmluYWxpemVyLCBhbmQgdGhp
cyBmaW5hbGl6ZXIgc2hvdWxkIHJlbW92ZSBkZWFkIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4gZnJv
bSBIYXNoU2V0LgorCisgICAgICAgICAgICBUaGlzIGlzIGVuc3VyaW5nIHRoYXQgYWxsIHRoZSBr
ZXlzIGluIEhhc2hTZXQgaXMsIGV2ZW4gaWYgV2Vhazw+IGlzIHNheWluZyBpdCBpcyBEZWFkLCBp
dCBzdGlsbCBoYXMgYW4gd2F5CisgICAgICAgICAgICB0byBhY2Nlc3MgY29udGVudCBvZiBOYXRp
dmVFeGVjdXRhYmxlIGlmIHRoZSBjb250ZW50IGlzIG5vdCBhIEpTIG9iamVjdHMuIEZvciBleGFt
cGxlLCB3ZSBjYW4gZ2V0IGZ1bmN0aW9uCisgICAgICAgICAgICBwb2ludGVyIGZyb20gZGVhZCBX
ZWFrPE5hdGl2ZUV4ZWN1dGFibGU+IGlmIGl0IGlzIG5vdCB5ZXQgZmluYWxpemVkLiBTaW5jZSB3
ZSByZW1vdmUgYWxsIGZpbmFsaXplZCBXZWFrPD4KKyAgICAgICAgICAgIGZyb20gdGhlIHRhYmxl
LCB0aGlzIGZpbmFsaXplciBtZWNoYW5pc20gYWxsb3dzIHVzIHRvIGFjY2VzcyBmdW5jdGlvbiBw
b2ludGVycyBldGMuIGZyb20gV2VhazxOYXRpdmVFeGVjdXRhYmxlPgorICAgICAgICAgICAgc28g
bG9uZyBhcyBpdCBpcyBoZWxkIGluIHRoaXMgdGFibGUuCisKKyAgICAgICAgMi4gR2V0dGluZyBO
YXRpdmVFeGVjdXRhYmxlKiBmcm9tIEpJVFRodW5rcyBzaG91bGQgaGF2ZSBzcGVjaWFsIHByb3Rv
Y29sLgorCisgICAgICAgICAgICBXaGVuIGdldHRpbmcgTmF0aXZlRXhlY3V0YWJsZSogZnJvbSBK
SVRUaHVua3MsIHdlIGRvIHRoZSBmb2xsb3dpbmcsCisKKyAgICAgICAgICAgIDEuIEZpcnN0LCB3
ZSBjaGVjayB3ZSBoYXZlIGFuIEVudHJ5IGluIEpJVFRodW5rcy4gSWYgaXQgZG9lcyBub3QgZXhp
c3QsIHdlIHNob3VsZCBpbnNlcnQgaXQgYW55d2F5LgorICAgICAgICAgICAgICAgIDEuMS4gSWYg
aXQgZXhpc3RzLCB3ZSBzaG91bGQgY2hlY2sgd2hldGhlciB0aGlzIFdlYWs8TmF0aXZlRXhlY3V0
YWJsZT4gaXMgZGVhZCBvciBub3QuIEl0IGlzIHBvc3NpYmxlIHRoYXQKKyAgICAgICAgICAgICAg
ICAgICAgIGRlYWQgb25lIGlzIHN0aWxsIGluIHRoZSB0YWJsZSBiZWNhdXNlICJkZWFkIiBkb2Vz
IG5vdCBtZWFuIHRoYXQgaXQgaXMgImZpbmFsaXplZCIuIFVudGlsIGZpbmFsaXppbmcgaGFwcGVu
cyAoYW5kCisgICAgICAgICAgICAgICAgICAgICBpdCBjYW4gYmUgZGVsYXllZCBieSBpbmNyZW1l
bnRhbC1zd2VlcGVyKSwgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiBjYW4gYmUgZGVhZCBidXQgc3Rp
bGwgYWNjZXNzaWJsZS4gU28gdGhlIHRhYmxlCisgICAgICAgICAgICAgICAgICAgICBpcyBzdGls
bCBob2xkaW5nIGRlYWQgb25lLiBJZiB3ZSBnZXQgZGVhZCBvbmUsIHdlIHNob3VsZCBpbnNlcnQg
YSBuZXcgb25lLgorICAgICAgICAgICAgICAgIDEuMi4gSWYgaXQgaXMgbm90IGRlYWQsIHdlIHJl
dHVybiBpdC4KKyAgICAgICAgICAgIDIuIFNlY29uZCwgd2UgY3JlYXRlIGEgbmV3IE5hdGl2ZUV4
ZWN1dGFibGUgYW5kIGluc2VydCBpdC4gSW4gdGhhdCBjYXNlLCBpdCBpcyBwb3NzaWJsZSB0aGF0
IHRoZSB0YWJsZSBhbHJlYWR5IGhhcyBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+LAorICAgICAgICAg
ICAgICAgYnV0IGl0IGlzIGRlYWQuIEluIHRoYXQgY2FzZSwgd2UgbmVlZCB0byBleHBsaWNpdGx5
IHJlcGxhY2UgaXQgd2l0aCBuZXdseSBjcmVhdGVkIG9uZSBzaW5jZSBvbGQgb25lIGlzIGhvbGRp
bmcgb2xkIGNvbnRlbnQuIElmIHdlCisgICAgICAgICAgICAgICByZXBsYWNlZCwgZmluYWxpemVy
IG9mIFdlYWs8PiB3aWxsIG5vdCBiZSBpbnZva2VkIHNpbmNlIGl0IGltbWVkaWF0ZWx5IGRlYWxs
b2NhdGVzIFdlYWs8Pi4gU28sIGl0IGRvZXMgbm90IGhhcHBlbiB0aGF0IHRoaXMgbmV3bHkKKyAg
ICAgICAgICAgICAgIGluc2VydGVkIE5hdGl2ZUV4ZWN1dGFibGUqIGlzIHJlbW92ZWQgYnkgdGhl
IGZpbmFsaXplciByZWdpc3RlcmVkIGJ5IHRoZSBvbGQgV2Vhazw+LgorCisgICAgICAgIFRoaXMg
Y2hhbmdlIG1ha2VzIG1lbW9yeSB1c2FnZSBvZiBKSVRUaHVua3MgdGFibGUgMS80LgorCisgICAg
ICAgICogaGVhcC9XZWFrLmNwcDoKKyAgICAgICAgKEpTQzo6d2Vha0NsZWFyU2xvd0Nhc2UpOgor
ICAgICAgICAqIGhlYXAvV2Vhay5oOgorICAgICAgICAoSlNDOjpXZWFrOjpXZWFrKToKKyAgICAg
ICAgKEpTQzo6V2Vhazo6dW5zYWZlSW1wbCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUcmFp
dHM8SlNDOjpXZWFrPFQ+Pjo6aXNFbXB0eVZhbHVlKToKKyAgICAgICAgKiBoZWFwL1dlYWtJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6OldlYWs8VD46OmlzSGFzaFRhYmxlRW1wdHlWYWx1ZSBjb25z
dCk6CisgICAgICAgIChKU0M6OldlYWs8VD46OldlYWspOgorICAgICAgICAqIGppdC9KSVRUaHVu
a3MuY3BwOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OkpJVFRodW5rcyk6CisgICAgICAgIChK
U0M6OkpJVFRodW5rczo6V2Vha05hdGl2ZUV4ZWN1dGFibGVIYXNoOjpoYXNoKToKKyAgICAgICAg
KEpTQzo6SklUVGh1bmtzOjpXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g6OmVxdWFsKToKKyAgICAg
ICAgKEpTQzo6SklUVGh1bmtzOjpIb3N0S2V5U2VhcmNoZXI6Omhhc2gpOgorICAgICAgICAoSlND
OjpKSVRUaHVua3M6Okhvc3RLZXlTZWFyY2hlcjo6ZXF1YWwpOgorICAgICAgICAoSlNDOjpKSVRU
aHVua3M6Ok5hdGl2ZUV4ZWN1dGFibGVUcmFuc2xhdG9yOjpoYXNoKToKKyAgICAgICAgKEpTQzo6
SklUVGh1bmtzOjpOYXRpdmVFeGVjdXRhYmxlVHJhbnNsYXRvcjo6ZXF1YWwpOgorICAgICAgICAo
SlNDOjpKSVRUaHVua3M6Ok5hdGl2ZUV4ZWN1dGFibGVUcmFuc2xhdG9yOjp0cmFuc2xhdGUpOgor
ICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6SklUVGh1
bmtzOjpob3N0RnVuY3Rpb25TdHViKToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjbGVhckhv
c3RGdW5jdGlvblN0dWJzKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUVGh1bmtzLmg6Cisg
ICAgICAgICogcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmg6CisKIDIwMjAtMDItMTQgIFRhZGV1
IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5jb20+IGFuZCBNaWNoYWVsIFNhYm9mZiAgPG1zYWJv
ZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFtXQVNNXSBXYXNtIGludGVycHJldGVyJ3MgY2FsbGlu
ZyBjb252ZW50aW9uIGRvZXNuJ3QgbWF0Y2ggV2FzbSBKSVQncyBjb252ZW50aW9uLgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vhay5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9XZWFrLmNwcAppbmRleCBhMzBiN2MwODU1Mzg0ZGQxNmYzMzM4OTE5ZTNi
MWM1NTczMGY0MjkxLi43ODFhODZkMzg3ODBiOWMwMDdiYTYwNzNiNDUzNWE1YmU2NDY3ZGZhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmNwcApAQCAtMzYsNyArMzYsNyBAQCB2b2lkIHdl
YWtDbGVhclNsb3dDYXNlKFdlYWtJbXBsKiYgaW1wbCkKICAgICBBU1NFUlQoaW1wbCk7CiAKICAg
ICBXZWFrU2V0OjpkZWFsbG9jYXRlKGltcGwpOwotICAgIGltcGwgPSAwOworICAgIGltcGwgPSBu
dWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1dlYWsuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWsu
aAppbmRleCAwN2ZjZDI0NTM1NjIwZWMzZjE4N2UxYzlhYmVlMDllYzllMDM1ZmVjLi5kZGYyZmU4
YTljMTQ2NGYwNTI5ZDQ2NjA5M2U0NjIwMTg4OWU1MjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9XZWFrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
V2Vhay5oCkBAIC00MiwyMSArNDIsMTggQEAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3ZWFrQ2xl
YXJTbG93Q2FzZShXZWFrSW1wbComKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWsg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYWspOwogcHVibGljOgotICAgIFdlYWsoKQot
ICAgICAgICA6IG1faW1wbCgwKQotICAgIHsKLSAgICB9CisgICAgV2VhaygpID0gZGVmYXVsdDsK
IAotICAgIFdlYWsoc3RkOjpudWxscHRyX3QpCi0gICAgICAgIDogbV9pbXBsKDApCisgICAgY29u
c3RleHByIFdlYWsoc3RkOjpudWxscHRyX3QpCisgICAgICAgIDogV2VhaygpCiAgICAgewogICAg
IH0KIAotICAgIGlubGluZSBXZWFrKFQqLCBXZWFrSGFuZGxlT3duZXIqID0gMCwgdm9pZCogY29u
dGV4dCA9IDApOworICAgIGlubGluZSBXZWFrKFQqLCBXZWFrSGFuZGxlT3duZXIqID0gbnVsbHB0
ciwgdm9pZCogY29udGV4dCA9IG51bGxwdHIpOwogCi0gICAgZW51bSBIYXNoVGFibGVEZWxldGVk
VmFsdWVUYWcgeyBIYXNoVGFibGVEZWxldGVkVmFsdWUgfTsKICAgICBpbmxpbmUgYm9vbCBpc0hh
c2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0OwotICAgIGlubGluZSBXZWFrKEhhc2hUYWJsZURl
bGV0ZWRWYWx1ZVRhZyk7CisgICAgaW5saW5lIFdlYWsoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFs
dWVUeXBlKTsKKyAgICBpbmxpbmUgYm9vbCBpc0hhc2hUYWJsZUVtcHR5VmFsdWUoKSBjb25zdDsK
IAogICAgIGlubGluZSBXZWFrKFdlYWsmJik7CiAKQEAgLTc5LDYgKzc2LDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gY2xhc3MgV2VhayB7CiAgICAgaW5saW5lIGV4cGxpY2l0IG9wZXJhdG9yIGJv
b2woKSBjb25zdDsKIAogICAgIGlubGluZSBXZWFrSW1wbCogbGVha0ltcGwoKSBXQVJOX1VOVVNF
RF9SRVRVUk47CisgICAgaW5saW5lIFdlYWtJbXBsKiB1bnNhZmVJbXBsKCkgY29uc3QgeyByZXR1
cm4gbV9pbXBsOyB9CiAgICAgdm9pZCBjbGVhcigpCiAgICAgewogICAgICAgICBpZiAoIW1faW1w
bCkKQEAgLTg5LDcgKzg3LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2VhayB7CiBw
cml2YXRlOgogICAgIHN0YXRpYyBpbmxpbmUgV2Vha0ltcGwqIGhhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpOwogCi0gICAgV2Vha0ltcGwqIG1faW1wbDsKKyAgICBXZWFrSW1wbCogbV9pbXBsIHsgbnVs
bHB0ciB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkBAIC0xMDYsNiArMTA0LDkgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpXZWFrPFQ+PiA6IFNpbXBs
ZUNsYXNzSGFzaFRyYWl0czxKU0MKICAgICB0eXBlZGVmIHN0ZDo6bnVsbHB0cl90IEVtcHR5VmFs
dWVUeXBlOwogICAgIHN0YXRpYyBFbXB0eVZhbHVlVHlwZSBlbXB0eVZhbHVlKCkgeyByZXR1cm4g
bnVsbHB0cjsgfQogCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0lzRW1wdHlWYWx1ZUZ1
bmN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgYm9vbCBpc0VtcHR5VmFsdWUoY29uc3QgSlNDOjpX
ZWFrPFQ+JiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUuaXNIYXNoVGFibGVFbXB0eVZhbHVlKCk7IH0K
KwogICAgIHR5cGVkZWYgVCogUGVla1R5cGU7CiAgICAgc3RhdGljIFBlZWtUeXBlIHBlZWsoY29u
c3QgU3RvcmFnZVR5cGUmIHZhbHVlKSB7IHJldHVybiB2YWx1ZS5nZXQoKTsgfQogICAgIHN0YXRp
YyBQZWVrVHlwZSBwZWVrKEVtcHR5VmFsdWVUeXBlKSB7IHJldHVybiBQZWVrVHlwZSgpOyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSW5saW5lcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0lubGluZXMuaAppbmRleCAwZjdkNTYwYjNjOWZk
N2E0NzkyZGFmOTkzMTM4NjE4ZTkzYTc2MTk2Li4wMTFhMjI3MmJiMmU1NDJjYzQ0OTI2YWFmY2U1
NGE3NWZlOTg2MjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFr
SW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbmxpbmVzLmgK
QEAgLTQxLDcgKzQxLDEyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBib29sIFdlYWs8
VD46OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKICAgICByZXR1cm4gbV9pbXBsID09
IGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxp
bmUgV2VhazxUPjo6V2Vhayh0eXBlbmFtZSBXZWFrPFQ+OjpIYXNoVGFibGVEZWxldGVkVmFsdWVU
YWcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBXZWFrPFQ+Ojppc0hhc2hUYWJs
ZUVtcHR5VmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiAhbV9pbXBsOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgV2VhazxUPjo6V2VhayhXVEY6Okhhc2hUYWJsZURlbGV0ZWRW
YWx1ZVR5cGUpCiAgICAgOiBtX2ltcGwoaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpCiB7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAKaW5kZXggN2ZiOTg4NDA0MWI1MDY5
MGY5M2M0ZDI1ZmRlNDQxNzNhZTg3YTAzNi4uZjEwNTBjM2Y5YzdmYWMxNWIzNzE3Nzk1NmQxODhl
NzE1ZDhhNDY5OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVu
a3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcApAQCAt
MzcsNyArMzcsNiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIEpJVFRodW5rczo6SklUVGh1bmtzKCkK
LSAgICA6IG1faG9zdEZ1bmN0aW9uU3R1Yk1hcChtYWtlVW5pcXVlPEhvc3RGdW5jdGlvblN0dWJN
YXA+KCkpCiB7CiB9CiAKQEAgLTQ1LDYgKzQ0LDYzIEBAIEpJVFRodW5rczo6fkpJVFRodW5rcygp
CiB7CiB9CiAKK2lubGluZSB1bnNpZ25lZCBKSVRUaHVua3M6OldlYWtOYXRpdmVFeGVjdXRhYmxl
SGFzaDo6aGFzaChjb25zdCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlKQoreworICAgIHJl
dHVybiBoYXNoKGV4ZWN1dGFibGUtPmZ1bmN0aW9uKCksIGV4ZWN1dGFibGUtPmNvbnN0cnVjdG9y
KCksIGV4ZWN1dGFibGUtPm5hbWUoKSk7Cit9CisKK2lubGluZSB1bnNpZ25lZCBKSVRUaHVua3M6
OldlYWtOYXRpdmVFeGVjdXRhYmxlSGFzaDo6aGFzaChjb25zdCBXZWFrPE5hdGl2ZUV4ZWN1dGFi
bGU+JiBrZXkpCit7CisgICAgLy8gVGhpcyBuZXZlciBnZXRzIERlbGV0ZWQgLyBFbXB0eSBzbG90
cy4KKyAgICBXZWFrSW1wbCogaW1wbCA9IGtleS51bnNhZmVJbXBsKCk7CisgICAgQVNTRVJUKGlt
cGwpOworICAgIC8vIFdlIGhhdmUgYSBjYWxsYmFjayByZW1vdmluZyBlbnRyeSB3aGVuIGZpbmFs
aXppbmcuIFRoaXMgbWVhbnMgdGhhdCB3ZSBuZXZlciBob2xkIERlYWxsb2NhdGVkIGVudHJ5IGlu
IEhhc2hTZXQuCisgICAgQVNTRVJUKGltcGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OlN0YXRlOjpE
ZWFsbG9jYXRlZCk7CisgICAgLy8gTmV2ZXIgdXNlIGpzQ2FzdCBoZXJlLiBUaGlzIGlzIHBvc3Np
YmxlIHRoYXQgdGhpcyB2YWx1ZSBpcyAiRGVhZCIgYnV0IG5vdCAiRmluYWxpemVkIiB5ZXQuIElu
IHRoaXMgY2FzZSwKKyAgICAvLyB3ZSBjYW4gc3RpbGwgYWNjZXNzIHRvIG5vbi1KUyBkYXRhLCBh
cyB3ZSBhcmUgZG9pbmcgaW4gYSBmaW5hbGl6ZSBjYWxsYmFjay4KKyAgICBhdXRvKiBleGVjdXRh
YmxlID0gc3RhdGljX2Nhc3Q8TmF0aXZlRXhlY3V0YWJsZSo+KGltcGwtPmpzVmFsdWUoKS5hc0Nl
bGwoKSk7CisgICAgQVNTRVJUKGV4ZWN1dGFibGUpOworICAgIHJldHVybiBoYXNoKGV4ZWN1dGFi
bGUpOworfQorCitpbmxpbmUgYm9vbCBKSVRUaHVua3M6OldlYWtOYXRpdmVFeGVjdXRhYmxlSGFz
aDo6ZXF1YWwoY29uc3QgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiYgYSwgY29uc3QgV2VhazxOYXRp
dmVFeGVjdXRhYmxlPiYgYikKK3sKKyAgICAvLyBUaGlzIG5ldmVyIGdldHMgRGVsZXRlZCAvIEVt
cHR5IHNsb3RzLiBBbmQgd2UgbmV2ZXIgZ2V0IERlYWxsb2NhdGVkIFdlYWsgZW50cnkgdG9vLgor
ICAgIGF1dG8qIGFJbXBsID0gYS51bnNhZmVJbXBsKCk7CisgICAgYXV0byogYkltcGwgPSBiLnVu
c2FmZUltcGwoKTsKKyAgICBBU1NFUlQoYUltcGwpOworICAgIEFTU0VSVChhSW1wbC0+c3RhdGUo
KSAhPSBXZWFrSW1wbDo6U3RhdGU6OkRlYWxsb2NhdGVkKTsKKyAgICBBU1NFUlQoYkltcGwpOwor
ICAgIEFTU0VSVChiSW1wbC0+c3RhdGUoKSAhPSBXZWFrSW1wbDo6U3RhdGU6OkRlYWxsb2NhdGVk
KTsKKyAgICBhdXRvKiBhRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PE5hdGl2ZUV4ZWN1dGFibGUq
PihhSW1wbC0+anNWYWx1ZSgpLmFzQ2VsbCgpKTsKKyAgICBhdXRvKiBiRXhlY3V0YWJsZSA9IHN0
YXRpY19jYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihiSW1wbC0+anNWYWx1ZSgpLmFzQ2VsbCgpKTsK
KyAgICBpZiAoYUV4ZWN1dGFibGUgPT0gYkV4ZWN1dGFibGUpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiBhRXhlY3V0YWJsZS0+ZnVuY3Rpb24oKSA9PSBiRXhlY3V0YWJsZS0+ZnVu
Y3Rpb24oKSAmJiBhRXhlY3V0YWJsZS0+Y29uc3RydWN0b3IoKSA9PSBiRXhlY3V0YWJsZS0+Y29u
c3RydWN0b3IoKSAmJiBhRXhlY3V0YWJsZS0+bmFtZSgpID09IGJFeGVjdXRhYmxlLT5uYW1lKCk7
Cit9CisKK2lubGluZSBib29sIEpJVFRodW5rczo6V2Vha05hdGl2ZUV4ZWN1dGFibGVIYXNoOjpl
cXVhbChjb25zdCBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+JiBhLCBjb25zdCBOYXRpdmVFeGVjdXRh
YmxlKiBiRXhlY3V0YWJsZSkKK3sKKyAgICAvLyBUaGlzIG5ldmVyIGdldHMgRGVsZXRlZCAvIEVt
cHR5IHNsb3RzLiBBbmQgd2UgbmV2ZXIgZ2V0IERlYWxsb2NhdGVkIFdlYWsgZW50cnkgdG9vLgor
ICAgIGF1dG8qIGFJbXBsID0gYS51bnNhZmVJbXBsKCk7CisgICAgQVNTRVJUKGFJbXBsKTsKKyAg
ICBBU1NFUlQoYUltcGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OlN0YXRlOjpEZWFsbG9jYXRlZCk7
CisgICAgYXV0byogYUV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxOYXRpdmVFeGVjdXRhYmxlKj4o
YUltcGwtPmpzVmFsdWUoKS5hc0NlbGwoKSk7CisgICAgaWYgKGFFeGVjdXRhYmxlID09IGJFeGVj
dXRhYmxlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gYUV4ZWN1dGFibGUtPmZ1
bmN0aW9uKCkgPT0gYkV4ZWN1dGFibGUtPmZ1bmN0aW9uKCkgJiYgYUV4ZWN1dGFibGUtPmNvbnN0
cnVjdG9yKCkgPT0gYkV4ZWN1dGFibGUtPmNvbnN0cnVjdG9yKCkgJiYgYUV4ZWN1dGFibGUtPm5h
bWUoKSA9PSBiRXhlY3V0YWJsZS0+bmFtZSgpOworfQorCitpbmxpbmUgYm9vbCBKSVRUaHVua3M6
OldlYWtOYXRpdmVFeGVjdXRhYmxlSGFzaDo6ZXF1YWwoY29uc3QgV2VhazxOYXRpdmVFeGVjdXRh
YmxlPiYgYSwgY29uc3QgSG9zdEZ1bmN0aW9uS2V5JiBiKQoreworICAgIC8vIFRoaXMgbmV2ZXIg
Z2V0cyBEZWxldGVkIC8gRW1wdHkgc2xvdHMuIEFuZCB3ZSBuZXZlciBnZXQgRGVhbGxvY2F0ZWQg
V2VhayBlbnRyeSB0b28uCisgICAgYXV0byogYUltcGwgPSBhLnVuc2FmZUltcGwoKTsKKyAgICBB
U1NFUlQoYUltcGwpOworICAgIEFTU0VSVChhSW1wbC0+c3RhdGUoKSAhPSBXZWFrSW1wbDo6U3Rh
dGU6OkRlYWxsb2NhdGVkKTsKKyAgICBhdXRvKiBhRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PE5h
dGl2ZUV4ZWN1dGFibGUqPihhSW1wbC0+anNWYWx1ZSgpLmFzQ2VsbCgpKTsKKyAgICByZXR1cm4g
YUV4ZWN1dGFibGUtPmZ1bmN0aW9uKCkgPT0gc3RkOjpnZXQ8MD4oYikgJiYgYUV4ZWN1dGFibGUt
PmNvbnN0cnVjdG9yKCkgPT0gc3RkOjpnZXQ8MT4oYikgJiYgYUV4ZWN1dGFibGUtPm5hbWUoKSA9
PSBzdGQ6OmdldDwyPihiKTsKK30KKwogTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRy
VGFnPiBKSVRUaHVua3M6OmN0aU5hdGl2ZUNhbGwoVk0mIHZtKQogewogICAgIEFTU0VSVChWTTo6
Y2FuVXNlSklUKCkpOwpAQCAtMTAyLDEwICsxNTgsMzIgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmV4aXN0aW5nQ1RJU3R1YihUaHVua0dlbmVyYXRv
cgogICAgIHJldHVybiBlbnRyeS0+dmFsdWU7CiB9CiAKK3N0cnVjdCBKSVRUaHVua3M6Okhvc3RL
ZXlTZWFyY2hlciB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgSG9zdEZ1bmN0aW9u
S2V5JiBrZXkpIHsgcmV0dXJuIFdlYWtOYXRpdmVFeGVjdXRhYmxlSGFzaDo6aGFzaChrZXkpOyB9
CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiYgYSwg
Y29uc3QgSG9zdEZ1bmN0aW9uS2V5JiBiKSB7IHJldHVybiBXZWFrTmF0aXZlRXhlY3V0YWJsZUhh
c2g6OmVxdWFsKGEsIGIpOyB9Cit9OworCitzdHJ1Y3QgSklUVGh1bmtzOjpOYXRpdmVFeGVjdXRh
YmxlVHJhbnNsYXRvciB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgTmF0aXZlRXhl
Y3V0YWJsZSoga2V5KSB7IHJldHVybiBXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g6Omhhc2goa2V5
KTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4m
IGEsIGNvbnN0IE5hdGl2ZUV4ZWN1dGFibGUqIGIpIHsgcmV0dXJuIFdlYWtOYXRpdmVFeGVjdXRh
YmxlSGFzaDo6ZXF1YWwoYSwgYik7IH0KKyAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoV2VhazxO
YXRpdmVFeGVjdXRhYmxlPiYgbG9jYXRpb24sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUs
IHVuc2lnbmVkKQorICAgIHsKKyAgICAgICAgbG9jYXRpb24gPSBXZWFrPE5hdGl2ZUV4ZWN1dGFi
bGU+KGV4ZWN1dGFibGUsIGV4ZWN1dGFibGUtPnZtKCkuaml0U3R1YnMuZ2V0KCkpOworICAgIH0K
K307CisKIHZvaWQgSklUVGh1bmtzOjpmaW5hbGl6ZShIYW5kbGU8VW5rbm93bj4gaGFuZGxlLCB2
b2lkKikKIHsKICAgICBhdXRvKiBuYXRpdmVFeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8TmF0aXZl
RXhlY3V0YWJsZSo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7Ci0gICAgd2Vha1JlbW92ZSgqbV9o
b3N0RnVuY3Rpb25TdHViTWFwLCBzdGQ6Om1ha2VfdHVwbGUobmF0aXZlRXhlY3V0YWJsZS0+ZnVu
Y3Rpb24oKSwgbmF0aXZlRXhlY3V0YWJsZS0+Y29uc3RydWN0b3IoKSwgbmF0aXZlRXhlY3V0YWJs
ZS0+bmFtZSgpKSwgbmF0aXZlRXhlY3V0YWJsZSk7CisgICAgYXV0byBob3N0RnVuY3Rpb25LZXkg
PSBzdGQ6Om1ha2VfdHVwbGUobmF0aXZlRXhlY3V0YWJsZS0+ZnVuY3Rpb24oKSwgbmF0aXZlRXhl
Y3V0YWJsZS0+Y29uc3RydWN0b3IoKSwgbmF0aXZlRXhlY3V0YWJsZS0+bmFtZSgpKTsKKyAgICB7
CisgICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9
IG1fbmF0aXZlRXhlY3V0YWJsZVNldC5maW5kPEhvc3RLZXlTZWFyY2hlcj4oaG9zdEZ1bmN0aW9u
S2V5KTsKKyAgICAgICAgLy8gQmVjYXVzZSB0aGlzIGZpbmFsaXplciBpcyBjYWxsZWQsIHRoaXMg
bWVhbnMgdGhhdCB3ZSBzdGlsbCBoYXZlIGRlYWQgV2Vhazw+IGluIG1fbmF0aXZlRXhlY3V0YWJs
ZVNldC4KKyAgICAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fbmF0aXZlRXhlY3V0YWJsZVNldC5l
bmQoKSk7CisgICAgICAgIEFTU0VSVChpdGVyYXRvci0+dW5zYWZlSW1wbCgpLT5zdGF0ZSgpID09
IFdlYWtJbXBsOjpTdGF0ZTo6RmluYWxpemVkKTsKKyAgICAgICAgbV9uYXRpdmVFeGVjdXRhYmxl
U2V0LnJlbW92ZShpdGVyYXRvcik7CisgICAgfQogfQogCiBOYXRpdmVFeGVjdXRhYmxlKiBKSVRU
aHVua3M6Omhvc3RGdW5jdGlvblN0dWIoVk0mIHZtLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBmdW5j
dGlvbiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIGNvbnN0IFN0cmluZyYgbmFt
ZSkKQEAgLTExOCw4ICsxOTYsMTcgQEAgTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0
RnVuY3Rpb25TdHViKFZNJiB2bSwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3QKICAgICBBU1NF
UlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7ICAgIAogICAgIEFTU0VSVChWTTo6Y2FuVXNlSklU
KCkpOwogCi0gICAgaWYgKE5hdGl2ZUV4ZWN1dGFibGUqIG5hdGl2ZUV4ZWN1dGFibGUgPSBtX2hv
c3RGdW5jdGlvblN0dWJNYXAtPmdldChzdGQ6Om1ha2VfdHVwbGUoZnVuY3Rpb24sIGNvbnN0cnVj
dG9yLCBuYW1lKSkpCi0gICAgICAgIHJldHVybiBuYXRpdmVFeGVjdXRhYmxlOworICAgIGF1dG8g
aG9zdEZ1bmN0aW9uS2V5ID0gc3RkOjptYWtlX3R1cGxlKGZ1bmN0aW9uLCBjb25zdHJ1Y3Rvciwg
bmFtZSk7CisgICAgeworICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7CisgICAgICAgIGF1
dG8gaXRlcmF0b3IgPSBtX25hdGl2ZUV4ZWN1dGFibGVTZXQuZmluZDxIb3N0S2V5U2VhcmNoZXI+
KGhvc3RGdW5jdGlvbktleSk7CisgICAgICAgIGlmIChpdGVyYXRvciAhPSBtX25hdGl2ZUV4ZWN1
dGFibGVTZXQuZW5kKCkpIHsKKyAgICAgICAgICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhp
cyByZXR1cm5zIFdlYWs8PiB3aGljaCBpcyBEZWFkLCBidXQgbm90IGZpbmFsaXplZC4KKyAgICAg
ICAgICAgIC8vIFdlIHNob3VsZCBub3QgdXNlIHRoaXMgcmVmZXJlbmNlIHRvIHN0b3JlIHZhbHVl
IGNyZWF0ZWQgaW4gdGhlIHN1YnNlcXVlbnQgc2VxdWVuY2UsIHNpbmNlIGFsbG9jYXRpbmcgTmF0
aXZlRXhlY3V0YWJsZSBjYW4gY2F1c2UgR0MsIHdoaWNoIGNoYW5nZXMgdGhpcyBTZXQuCisgICAg
ICAgICAgICBpZiAoYXV0byogZXhlY3V0YWJsZSA9IGl0ZXJhdG9yLT5nZXQoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIFJlZlB0
cjxKSVRDb2RlPiBmb3JDYWxsOwogICAgIGlmIChnZW5lcmF0b3IpIHsKQEAgLTEzMyw3ICsyMjAs
MjYgQEAgTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKFZNJiB2
bSwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3QKICAgICBSZWY8SklUQ29kZT4gZm9yQ29uc3Ry
dWN0ID0gYWRvcHRSZWYoKm5ldyBOYXRpdmVKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
U0VudHJ5UHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGN0aU5hdGl2ZUNvbnN0cnVj
dCh2bSkucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKSksIEpJVFR5cGU6Okhvc3RDYWxsVGh1bmss
IE5vSW50cmluc2ljKSk7CiAgICAgCiAgICAgTmF0aXZlRXhlY3V0YWJsZSogbmF0aXZlRXhlY3V0
YWJsZSA9IE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSh2bSwgZm9yQ2FsbC5yZWxlYXNlTm9uTnVs
bCgpLCBmdW5jdGlvbiwgV1RGTW92ZShmb3JDb25zdHJ1Y3QpLCBjb25zdHJ1Y3RvciwgbmFtZSk7
Ci0gICAgd2Vha0FkZCgqbV9ob3N0RnVuY3Rpb25TdHViTWFwLCBzdGQ6Om1ha2VfdHVwbGUoZnVu
Y3Rpb24sIGNvbnN0cnVjdG9yLCBuYW1lKSwgV2VhazxOYXRpdmVFeGVjdXRhYmxlPihuYXRpdmVF
eGVjdXRhYmxlLCB0aGlzKSk7CisgICAgeworICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7
CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uYXRpdmVFeGVjdXRhYmxlU2V0LmFkZDxOYXRp
dmVFeGVjdXRhYmxlVHJhbnNsYXRvcj4obmF0aXZlRXhlY3V0YWJsZSk7CisgICAgICAgIGlmICgh
YWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAv
LyBPdmVycmlkZSB0aGUgZXhpc3RpbmcgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiB3aXRoIHRoZSBu
ZXcgb25lIHNpbmNlIGl0IGlzIGRlYWQuCisgICAgICAgICAgICAgICAgQVNTRVJUKCEqYWRkUmVz
dWx0Lml0ZXJhdG9yKTsKKyAgICAgICAgICAgICAgICAqYWRkUmVzdWx0Lml0ZXJhdG9yID0gV2Vh
azxOYXRpdmVFeGVjdXRhYmxlPihuYXRpdmVFeGVjdXRhYmxlLCB0aGlzKTsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoKmFkZFJlc3VsdC5pdGVyYXRvcik7CisgICAgICAgICAgICB9CisjaWYgQVNT
RVJUX0VOQUJMRUQKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvIGl0ZXJhdG9y
ID0gbV9uYXRpdmVFeGVjdXRhYmxlU2V0LmZpbmQ8SG9zdEtleVNlYXJjaGVyPihob3N0RnVuY3Rp
b25LZXkpOworICAgICAgICAgICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX25hdGl2ZUV4ZWN1
dGFibGVTZXQuZW5kKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChpdGVyYXRvci0+Z2V0KCkg
PT0gbmF0aXZlRXhlY3V0YWJsZSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGl0ZXJhdG9yLT51
bnNhZmVJbXBsKCktPnN0YXRlKCkgPT0gV2Vha0ltcGw6OlN0YXRlOjpMaXZlKTsKKyAgICAgICAg
ICAgIH0KKyNlbmRpZgorICAgICAgICB9CisgICAgfQogICAgIHJldHVybiBuYXRpdmVFeGVjdXRh
YmxlOwogfQogCkBAIC0xNDIsMTEgKzI0OCw2IEBAIE5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5r
czo6aG9zdEZ1bmN0aW9uU3R1YihWTSYgdm0sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0CiAg
ICAgcmV0dXJuIGhvc3RGdW5jdGlvblN0dWIodm0sIGZ1bmN0aW9uLCBjYWxsSG9zdEZ1bmN0aW9u
QXNDb25zdHJ1Y3RvciwgZ2VuZXJhdG9yLCBpbnRyaW5zaWMsIG51bGxwdHIsIG5hbWUpOwogfQog
Ci12b2lkIEpJVFRodW5rczo6Y2xlYXJIb3N0RnVuY3Rpb25TdHVicygpCi17Ci0gICAgbV9ob3N0
RnVuY3Rpb25TdHViTWFwID0gbnVsbHB0cjsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRUaHVua3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmgKaW5k
ZXggNDhjMjBlMzM3ZGMxNDJjODM0M2U5NjUxZTY5YmViNWY2M2IzOWE3Mi4uMjFiZWJmZmJiMmE2
MDYxOTEyZjJiZTY2MjFjYzYwZDk0OTE3YmRjYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRUaHVua3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFRodW5rcy5oCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiV2Vha0hhbmRsZU93bmVyLmgi
CiAjaW5jbHVkZSA8dHVwbGU+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC02NSw0NyArNjYsNDYgQEAgY2xhc3MgSklUVGh1bmtzIGZpbmFsIDogcHJp
dmF0ZSBXZWFrSGFuZGxlT3duZXIgewogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGhvc3RGdW5jdGlv
blN0dWIoVk0mLCBUYWdnZWROYXRpdmVGdW5jdGlvbiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gY29u
c3RydWN0b3IsIFRodW5rR2VuZXJhdG9yLCBJbnRyaW5zaWMsIGNvbnN0IERPTUpJVDo6U2lnbmF0
dXJlKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBob3N0RnVu
Y3Rpb25TdHViKFZNJiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24sIFRodW5rR2VuZXJhdG9yLCBJbnRy
aW5zaWMsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKLSAgICB2b2lkIGNsZWFySG9zdEZ1bmN0aW9u
U3R1YnMoKTsKLQogcHJpdmF0ZToKICAgICB2b2lkIGZpbmFsaXplKEhhbmRsZTxVbmtub3duPiwg
dm9pZCogY29udGV4dCkgb3ZlcnJpZGU7CiAgICAgCiAgICAgdHlwZWRlZiBIYXNoTWFwPFRodW5r
R2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+PiBDVElTdHVi
TWFwOwogICAgIENUSVN0dWJNYXAgbV9jdGlTdHViTWFwOwogCi0gICAgdHlwZWRlZiBzdGQ6OnR1
cGxlPFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uLCBUYWdnZWROYXRpdmVGdW5jdGlvbiwgU3RyaW5nPiBI
b3N0RnVuY3Rpb25LZXk7CisgICAgdXNpbmcgSG9zdEZ1bmN0aW9uS2V5ID0gc3RkOjp0dXBsZTxU
YWdnZWROYXRpdmVGdW5jdGlvbiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24sIFN0cmluZz47CiAKLSAg
ICBzdHJ1Y3QgSG9zdEZ1bmN0aW9uSGFzaCB7CisgICAgc3RydWN0IFdlYWtOYXRpdmVFeGVjdXRh
YmxlSGFzaCB7CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFdlYWs8TmF0aXZl
RXhlY3V0YWJsZT4mKTsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgTmF0aXZl
RXhlY3V0YWJsZSopOwogICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBIb3N0RnVu
Y3Rpb25LZXkmIGtleSkKICAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaGFzaCA9IFdU
Rjo6cGFpckludEhhc2goaGFzaFBvaW50ZXIoc3RkOjpnZXQ8MD4oa2V5KSksIGhhc2hQb2ludGVy
KHN0ZDo6Z2V0PDE+KGtleSkpKTsKLSAgICAgICAgICAgIGlmICghc3RkOjpnZXQ8Mj4oa2V5KS5p
c051bGwoKSkKLSAgICAgICAgICAgICAgICBoYXNoID0gV1RGOjpwYWlySW50SGFzaChoYXNoLCBE
ZWZhdWx0SGFzaDxTdHJpbmc+OjpIYXNoOjpoYXNoKHN0ZDo6Z2V0PDI+KGtleSkpKTsKLSAgICAg
ICAgICAgIHJldHVybiBoYXNoOwotICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBib29sIGVxdWFs
KGNvbnN0IEhvc3RGdW5jdGlvbktleSYgYSwgY29uc3QgSG9zdEZ1bmN0aW9uS2V5JiBiKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKHN0ZDo6Z2V0PDA+KGEpID09IHN0ZDo6Z2V0PDA+
KGIpKSAmJiAoc3RkOjpnZXQ8MT4oYSkgPT0gc3RkOjpnZXQ8MT4oYikpICYmIChzdGQ6OmdldDwy
PihhKSA9PSBzdGQ6OmdldDwyPihiKSk7CisgICAgICAgICAgICByZXR1cm4gaGFzaChzdGQ6Omdl
dDwwPihrZXkpLCBzdGQ6OmdldDwxPihrZXkpLCBzdGQ6OmdldDwyPihrZXkpKTsKICAgICAgICAg
fQotICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRl
bGV0ZWQgPSB0cnVlOworCisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFdlYWs8TmF0
aXZlRXhlY3V0YWJsZT4mIGEsIGNvbnN0IFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4mIGIpOworICAg
ICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+JiBhLCBj
b25zdCBIb3N0RnVuY3Rpb25LZXkmIGIpOworICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+JiBhLCBjb25zdCBOYXRpdmVFeGVjdXRhYmxlKiBiKTsK
KyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxl
dGVkID0gZmFsc2U7CiAKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMgaW5saW5lIHVuc2ln
bmVkIGhhc2hQb2ludGVyKFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIHApCiAgICAgICAgIHsKICAgICAg
ICAgICAgIHJldHVybiBEZWZhdWx0SGFzaDxUYWdnZWROYXRpdmVGdW5jdGlvbj46Okhhc2g6Omhh
c2gocCk7CiAgICAgICAgIH0KLSAgICB9OwogCi0gICAgc3RydWN0IEhvc3RGdW5jdGlvbkhhc2hU
cmFpdCA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8SG9zdEZ1bmN0aW9uS2V5PiB7Ci0gICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsKLSAgICAgICAg
c3RhdGljIEVtcHR5VmFsdWVUeXBlIGVtcHR5VmFsdWUoKSB7IHJldHVybiBzdGQ6Om1ha2VfdHVw
bGUobnVsbHB0ciwgbnVsbHB0ciwgU3RyaW5nKCkpOyB9Ci0KLSAgICAgICAgc3RhdGljIHZvaWQg
Y29uc3RydWN0RGVsZXRlZFZhbHVlKEhvc3RGdW5jdGlvbktleSYgc2xvdCkgeyBzdGQ6OmdldDww
PihzbG90KSA9IFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uKC0xKTsgfQotICAgICAgICBzdGF0aWMgYm9v
bCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBIb3N0RnVuY3Rpb25LZXkmIHZhbHVlKSB7IHJldHVybiBz
dGQ6OmdldDwwPih2YWx1ZSkgPT0gVGFnZ2VkTmF0aXZlRnVuY3Rpb24oLTEpOyB9CisgICAgICAg
IHN0YXRpYyB1bnNpZ25lZCBoYXNoKFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBUYWdn
ZWROYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvciwgY29uc3QgU3RyaW5nJiBuYW1lKQorICAgICAg
ICB7CisgICAgICAgICAgICB1bnNpZ25lZCBoYXNoID0gV1RGOjpwYWlySW50SGFzaChoYXNoUG9p
bnRlcihmdW5jdGlvbiksIGhhc2hQb2ludGVyKGNvbnN0cnVjdG9yKSk7CisgICAgICAgICAgICBp
ZiAoIW5hbWUuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgaGFzaCA9IFdURjo6cGFpckludEhh
c2goaGFzaCwgRGVmYXVsdEhhc2g8U3RyaW5nPjo6SGFzaDo6aGFzaChuYW1lKSk7CisgICAgICAg
ICAgICByZXR1cm4gaGFzaDsKKyAgICAgICAgfQogICAgIH07Ci0gICAgCi0gICAgdHlwZWRlZiBI
YXNoTWFwPEhvc3RGdW5jdGlvbktleSwgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiwgSG9zdEZ1bmN0
aW9uSGFzaCwgSG9zdEZ1bmN0aW9uSGFzaFRyYWl0PiBIb3N0RnVuY3Rpb25TdHViTWFwOwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxIb3N0RnVuY3Rpb25TdHViTWFwPiBtX2hvc3RGdW5jdGlvblN0dWJN
YXA7CisgICAgc3RydWN0IEhvc3RLZXlTZWFyY2hlcjsKKyAgICBzdHJ1Y3QgTmF0aXZlRXhlY3V0
YWJsZVRyYW5zbGF0b3I7CisKKyAgICB1c2luZyBXZWFrTmF0aXZlRXhlY3V0YWJsZVNldCA9IEhh
c2hTZXQ8V2VhazxOYXRpdmVFeGVjdXRhYmxlPiwgV2Vha05hdGl2ZUV4ZWN1dGFibGVIYXNoPjsK
KyAgICBXZWFrTmF0aXZlRXhlY3V0YWJsZVNldCBtX25hdGl2ZUV4ZWN1dGFibGVTZXQ7CiAgICAg
TG9jayBtX2xvY2s7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9OYXRpdmVFeGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9O
YXRpdmVFeGVjdXRhYmxlLmgKaW5kZXggMmUzZjU0MjNmMjVkNDQwMDkzNDVkN2FmOWRlMzYxMDI4
YWEwNjk1NC4uOWYwNDNmYWQyZTYzYWFiZTRiYjYyYjVhZDc0OGZlYmQ2ZmY0ZTUyZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuaApAQCAt
NDgsOCArNDgsOCBAQCBjbGFzcyBOYXRpdmVFeGVjdXRhYmxlIGZpbmFsIDogcHVibGljIEV4ZWN1
dGFibGVCYXNlIHsKIAogICAgIENvZGVCbG9ja0hhc2ggaGFzaEZvcihDb2RlU3BlY2lhbGl6YXRp
b25LaW5kKSBjb25zdDsKIAotICAgIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gbV9mdW5jdGlvbjsgfQotICAgIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9y
KCkgeyByZXR1cm4gbV9jb25zdHJ1Y3RvcjsgfQorICAgIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGZ1
bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbjsgfQorICAgIFRhZ2dlZE5hdGl2ZUZ1
bmN0aW9uIGNvbnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdHJ1Y3RvcjsgfQogICAg
ICAgICAKICAgICBUYWdnZWROYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlvbkZvcihDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQpCiAgICAgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390858</attachid>
            <date>2020-02-14 23:31:28 -0800</date>
            <delta_ts>2020-02-17 02:56:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207715-20200214233127.patch</filename>
            <type>text/plain</type>
            <size>26274</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2Njk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
MDg5ZDRjODE0ZDEwMTRlOGZlZTdlN2U1M2RiZWEyNDUyNTRiMzE1Li4xYTZkNjAyNDZlZTUzZDE4
YWExMjUzYjA2MzViMDFmYzhhNGJmNmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3OCBAQAorMjAyMC0wMi0xNCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIEpJVFRodW5rIHNob3VsZCBiZSBIYXNoU2V0PFdlYWs8TmF0aXZl
RXhlY3V0YWJsZT4+IHdpdGggYXBwcm9wcmlhdGUgR0Mgd2Vha25lc3MgaGFuZGxpbmcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzcxNQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVm
aW5lcyBKSVRUaHVua3MgR0MtYXdhcmUgV2VhayBoYXNoIG1hcCBmb3IgTmF0aXZlRXhlY3V0YWJs
ZS4gUHJldmlvdXNseSwgd2UgaGF2ZQorICAgICAgICBIYXNoTWFwPHN0ZDo6dHVwbGU8VGFnZ2Vk
TmF0aXZlRnVuY3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uLCBTdHJpbmc+LCBXZWFrPE5hdGl2
ZUV4ZWN1dGFibGU+PiB0YWJsZS4KKyAgICAgICAgQnV0IHRoaXMgaXMgbm90IGdvb2QgYmVjYXVz
ZSB0aGUgZmlyc3QgdHVwbGUncyBpbmZvcm1hdGlvbiBpcyBhbHJlYWR5IGluIE5hdGl2ZUV4ZWN1
dGFibGUuCisgICAgICAgIEJ1dCB3ZSB3ZXJlIHVzaW5nIHRoaXMgZGVzaWduIHNpbmNlIFdlYWs8
TmF0aXZlRXhlY3V0YWJsZT4gY2FuIGJlIG51bGxpZmllZCBiZWNhdXNlIG9mIFdlYWs8Pi4gSWYg
dGhpcworICAgICAgICBoYXBwZW5zLCB3ZSBjb3VsZCBoYXZlIGludmFsaWQgRW50cnkgaW4gSGFz
aE1hcCB3aGljaCBkb2VzIG5vdCBoYXZlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLiBUaGlzIHdpbGwK
KyAgICAgICAgY2F1c2UgY3Jhc2ggd2hlbiByZWhhc2luZyByZXF1aXJlcyBoYXNoIGNvZGUgZm9y
IHRoaXMgZW50cnkuCisKKyAgICAgICAgQnV0IHRoaXMgSGFzaE1hcCBpcyB2ZXJ5IGJhZCBpbiB0
ZXJtcyBvZiBtZW1vcnkgdXNhZ2UuIEVhY2ggZW50cnkgaGFzIDMyIGJ5dGVzLCBhbmQgdGhpcyB0
YWJsZSBnZXRzIGVub3VnaAorICAgICAgICBsYXJnZS4gV2UgaWRlbnRpZmllZCB0aGF0IHRoaXMg
dGFibGUgaXMgY29uc3VtaW5nIG11Y2ggbWVtb3J5IGluIE1lbWJ1c3Rlci4gU28gaXQgaXMgd29y
dGggZGVzaWduaW5nCisgICAgICAgIGNhcmVmdWxseSBjcmFmdGVkIGRhdGEgc3RydWN0dXJlIHdo
aWNoIG9ubHkgaG9sZHMgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiBieSBsZXZlcmFnaW5nIHRoZSBk
ZWVwIGludGVyYWN0aW9uCisgICAgICAgIHdpdGggb3VyIEdDIGltcGxlbWVudGF0aW9uLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBuZXcgZGVzaWduIG9mIEpJVFRodW5rcywgd2hp
Y2ggdXNlcyBIYXNoU2V0PFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4+IGFuZCBjYXJlZnVsbHkgY3Jh
ZnRlZAorICAgICAgICBIYXNoVHJhaXRzIC8gS2V5VHJhaXRzIHRvIGhhbmRsZSBXZWFrPD4gd2Vs
bC4KKworICAgICAgICAxLiBFYWNoIFdlYWsgc2hvdWxkIGhhdmUgZmluYWxpemVyLCBhbmQgdGhp
cyBmaW5hbGl6ZXIgc2hvdWxkIHJlbW92ZSBkZWFkIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4gZnJv
bSBIYXNoU2V0LgorCisgICAgICAgICAgICBUaGlzIGlzIGVuc3VyaW5nIHRoYXQgYWxsIHRoZSBr
ZXlzIGluIEhhc2hTZXQgaXMsIGV2ZW4gaWYgV2Vhazw+IGlzIHNheWluZyBpdCBpcyBEZWFkLCBp
dCBzdGlsbCBoYXMgYW4gd2F5CisgICAgICAgICAgICB0byBhY2Nlc3MgY29udGVudCBvZiBOYXRp
dmVFeGVjdXRhYmxlIGlmIHRoZSBjb250ZW50IGlzIG5vdCBhIEpTIG9iamVjdHMuIEZvciBleGFt
cGxlLCB3ZSBjYW4gZ2V0IGZ1bmN0aW9uCisgICAgICAgICAgICBwb2ludGVyIGZyb20gZGVhZCBX
ZWFrPE5hdGl2ZUV4ZWN1dGFibGU+IGlmIGl0IGlzIG5vdCB5ZXQgZmluYWxpemVkLiBTaW5jZSB3
ZSByZW1vdmUgYWxsIGZpbmFsaXplZCBXZWFrPD4KKyAgICAgICAgICAgIGZyb20gdGhlIHRhYmxl
LCB0aGlzIGZpbmFsaXplciBtZWNoYW5pc20gYWxsb3dzIHVzIHRvIGFjY2VzcyBmdW5jdGlvbiBw
b2ludGVycyBldGMuIGZyb20gV2VhazxOYXRpdmVFeGVjdXRhYmxlPgorICAgICAgICAgICAgc28g
bG9uZyBhcyBpdCBpcyBoZWxkIGluIHRoaXMgdGFibGUuCisKKyAgICAgICAgMi4gR2V0dGluZyBO
YXRpdmVFeGVjdXRhYmxlKiBmcm9tIEpJVFRodW5rcyBzaG91bGQgaGF2ZSBzcGVjaWFsIHByb3Rv
Y29sLgorCisgICAgICAgICAgICBXaGVuIGdldHRpbmcgTmF0aXZlRXhlY3V0YWJsZSogZnJvbSBK
SVRUaHVua3MsIHdlIGRvIHRoZSBmb2xsb3dpbmcsCisKKyAgICAgICAgICAgIDEuIEZpcnN0LCB3
ZSBjaGVjayB3ZSBoYXZlIGFuIEVudHJ5IGluIEpJVFRodW5rcy4gSWYgaXQgZG9lcyBub3QgZXhp
c3QsIHdlIHNob3VsZCBpbnNlcnQgaXQgYW55d2F5LgorICAgICAgICAgICAgICAgIDEuMS4gSWYg
aXQgZXhpc3RzLCB3ZSBzaG91bGQgY2hlY2sgd2hldGhlciB0aGlzIFdlYWs8TmF0aXZlRXhlY3V0
YWJsZT4gaXMgZGVhZCBvciBub3QuIEl0IGlzIHBvc3NpYmxlIHRoYXQKKyAgICAgICAgICAgICAg
ICAgICAgIGRlYWQgb25lIGlzIHN0aWxsIGluIHRoZSB0YWJsZSBiZWNhdXNlICJkZWFkIiBkb2Vz
IG5vdCBtZWFuIHRoYXQgaXQgaXMgImZpbmFsaXplZCIuIFVudGlsIGZpbmFsaXppbmcgaGFwcGVu
cyAoYW5kCisgICAgICAgICAgICAgICAgICAgICBpdCBjYW4gYmUgZGVsYXllZCBieSBpbmNyZW1l
bnRhbC1zd2VlcGVyKSwgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiBjYW4gYmUgZGVhZCBidXQgc3Rp
bGwgYWNjZXNzaWJsZS4gU28gdGhlIHRhYmxlCisgICAgICAgICAgICAgICAgICAgICBpcyBzdGls
bCBob2xkaW5nIGRlYWQgb25lLiBJZiB3ZSBnZXQgZGVhZCBvbmUsIHdlIHNob3VsZCBpbnNlcnQg
YSBuZXcgb25lLgorICAgICAgICAgICAgICAgIDEuMi4gSWYgaXQgaXMgbm90IGRlYWQsIHdlIHJl
dHVybiBpdC4KKyAgICAgICAgICAgIDIuIFNlY29uZCwgd2UgY3JlYXRlIGEgbmV3IE5hdGl2ZUV4
ZWN1dGFibGUgYW5kIGluc2VydCBpdC4gSW4gdGhhdCBjYXNlLCBpdCBpcyBwb3NzaWJsZSB0aGF0
IHRoZSB0YWJsZSBhbHJlYWR5IGhhcyBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+LAorICAgICAgICAg
ICAgICAgYnV0IGl0IGlzIGRlYWQuIEluIHRoYXQgY2FzZSwgd2UgbmVlZCB0byBleHBsaWNpdGx5
IHJlcGxhY2UgaXQgd2l0aCBuZXdseSBjcmVhdGVkIG9uZSBzaW5jZSBvbGQgb25lIGlzIGhvbGRp
bmcgb2xkIGNvbnRlbnQuIElmIHdlCisgICAgICAgICAgICAgICByZXBsYWNlZCwgZmluYWxpemVy
IG9mIFdlYWs8PiB3aWxsIG5vdCBiZSBpbnZva2VkIHNpbmNlIGl0IGltbWVkaWF0ZWx5IGRlYWxs
b2NhdGVzIFdlYWs8Pi4gU28sIGl0IGRvZXMgbm90IGhhcHBlbiB0aGF0IHRoaXMgbmV3bHkKKyAg
ICAgICAgICAgICAgIGluc2VydGVkIE5hdGl2ZUV4ZWN1dGFibGUqIGlzIHJlbW92ZWQgYnkgdGhl
IGZpbmFsaXplciByZWdpc3RlcmVkIGJ5IHRoZSBvbGQgV2Vhazw+LgorCisgICAgICAgIFRoaXMg
Y2hhbmdlIG1ha2VzIG1lbW9yeSB1c2FnZSBvZiBKSVRUaHVua3MgdGFibGUgMS80LgorCisgICAg
ICAgICogaGVhcC9XZWFrLmNwcDoKKyAgICAgICAgKEpTQzo6d2Vha0NsZWFyU2xvd0Nhc2UpOgor
ICAgICAgICAqIGhlYXAvV2Vhay5oOgorICAgICAgICAoSlNDOjpXZWFrOjpXZWFrKToKKyAgICAg
ICAgKEpTQzo6V2Vhazo6dW5zYWZlSW1wbCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUcmFp
dHM8SlNDOjpXZWFrPFQ+Pjo6aXNFbXB0eVZhbHVlKToKKyAgICAgICAgKiBoZWFwL1dlYWtJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6OldlYWs8VD46OmlzSGFzaFRhYmxlRW1wdHlWYWx1ZSBjb25z
dCk6CisgICAgICAgIChKU0M6OldlYWs8VD46OldlYWspOgorICAgICAgICAqIGppdC9KSVRUaHVu
a3MuY3BwOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OkpJVFRodW5rcyk6CisgICAgICAgIChK
U0M6OkpJVFRodW5rczo6V2Vha05hdGl2ZUV4ZWN1dGFibGVIYXNoOjpoYXNoKToKKyAgICAgICAg
KEpTQzo6SklUVGh1bmtzOjpXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g6OmVxdWFsKToKKyAgICAg
ICAgKEpTQzo6SklUVGh1bmtzOjpIb3N0S2V5U2VhcmNoZXI6Omhhc2gpOgorICAgICAgICAoSlND
OjpKSVRUaHVua3M6Okhvc3RLZXlTZWFyY2hlcjo6ZXF1YWwpOgorICAgICAgICAoSlNDOjpKSVRU
aHVua3M6Ok5hdGl2ZUV4ZWN1dGFibGVUcmFuc2xhdG9yOjpoYXNoKToKKyAgICAgICAgKEpTQzo6
SklUVGh1bmtzOjpOYXRpdmVFeGVjdXRhYmxlVHJhbnNsYXRvcjo6ZXF1YWwpOgorICAgICAgICAo
SlNDOjpKSVRUaHVua3M6Ok5hdGl2ZUV4ZWN1dGFibGVUcmFuc2xhdG9yOjp0cmFuc2xhdGUpOgor
ICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6SklUVGh1
bmtzOjpob3N0RnVuY3Rpb25TdHViKToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjbGVhckhv
c3RGdW5jdGlvblN0dWJzKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUVGh1bmtzLmg6Cisg
ICAgICAgICogcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmg6CisgICAgICAgICogdG9vbHMvSlNE
b2xsYXJWTS5jcHA6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uR0NTd2VlcEFzeW5jaHJvbm91c2x5
KToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25DcmVhdGVFbXB0eUZ1bmN0aW9uV2l0aE5hbWUpOgor
ICAgICAgICAoSlNDOjpKU0RvbGxhclZNOjpmaW5pc2hDcmVhdGlvbik6CisKIDIwMjAtMDItMTQg
IFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5jb20+IGFuZCBNaWNoYWVsIFNhYm9mZiAg
PG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFtXQVNNXSBXYXNtIGludGVycHJldGVyJ3Mg
Y2FsbGluZyBjb252ZW50aW9uIGRvZXNuJ3QgbWF0Y2ggV2FzbSBKSVQncyBjb252ZW50aW9uLgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vhay5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmNwcAppbmRleCBhMzBiN2MwODU1Mzg0ZGQxNmYzMzM4
OTE5ZTNiMWM1NTczMGY0MjkxLi43ODFhODZkMzg3ODBiOWMwMDdiYTYwNzNiNDUzNWE1YmU2NDY3
ZGZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmNwcApAQCAtMzYsNyArMzYsNyBAQCB2
b2lkIHdlYWtDbGVhclNsb3dDYXNlKFdlYWtJbXBsKiYgaW1wbCkKICAgICBBU1NFUlQoaW1wbCk7
CiAKICAgICBXZWFrU2V0OjpkZWFsbG9jYXRlKGltcGwpOwotICAgIGltcGwgPSAwOworICAgIGlt
cGwgPSBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWsuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1dlYWsuaAppbmRleCAwN2ZjZDI0NTM1NjIwZWMzZjE4N2UxYzlhYmVlMDllYzllMDM1ZmVjLi5k
ZGYyZmU4YTljMTQ2NGYwNTI5ZDQ2NjA5M2U0NjIwMTg4OWU1MjlkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvV2Vhay5oCkBAIC00MiwyMSArNDIsMTggQEAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3
ZWFrQ2xlYXJTbG93Q2FzZShXZWFrSW1wbComKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNz
IFdlYWsgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYWspOwogcHVibGljOgotICAgIFdl
YWsoKQotICAgICAgICA6IG1faW1wbCgwKQotICAgIHsKLSAgICB9CisgICAgV2VhaygpID0gZGVm
YXVsdDsKIAotICAgIFdlYWsoc3RkOjpudWxscHRyX3QpCi0gICAgICAgIDogbV9pbXBsKDApCisg
ICAgY29uc3RleHByIFdlYWsoc3RkOjpudWxscHRyX3QpCisgICAgICAgIDogV2VhaygpCiAgICAg
ewogICAgIH0KIAotICAgIGlubGluZSBXZWFrKFQqLCBXZWFrSGFuZGxlT3duZXIqID0gMCwgdm9p
ZCogY29udGV4dCA9IDApOworICAgIGlubGluZSBXZWFrKFQqLCBXZWFrSGFuZGxlT3duZXIqID0g
bnVsbHB0ciwgdm9pZCogY29udGV4dCA9IG51bGxwdHIpOwogCi0gICAgZW51bSBIYXNoVGFibGVE
ZWxldGVkVmFsdWVUYWcgeyBIYXNoVGFibGVEZWxldGVkVmFsdWUgfTsKICAgICBpbmxpbmUgYm9v
bCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0OwotICAgIGlubGluZSBXZWFrKEhhc2hU
YWJsZURlbGV0ZWRWYWx1ZVRhZyk7CisgICAgaW5saW5lIFdlYWsoV1RGOjpIYXNoVGFibGVEZWxl
dGVkVmFsdWVUeXBlKTsKKyAgICBpbmxpbmUgYm9vbCBpc0hhc2hUYWJsZUVtcHR5VmFsdWUoKSBj
b25zdDsKIAogICAgIGlubGluZSBXZWFrKFdlYWsmJik7CiAKQEAgLTc5LDYgKzc2LDcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2VhayB7CiAgICAgaW5saW5lIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdDsKIAogICAgIGlubGluZSBXZWFrSW1wbCogbGVha0ltcGwoKSBXQVJO
X1VOVVNFRF9SRVRVUk47CisgICAgaW5saW5lIFdlYWtJbXBsKiB1bnNhZmVJbXBsKCkgY29uc3Qg
eyByZXR1cm4gbV9pbXBsOyB9CiAgICAgdm9pZCBjbGVhcigpCiAgICAgewogICAgICAgICBpZiAo
IW1faW1wbCkKQEAgLTg5LDcgKzg3LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2Vh
ayB7CiBwcml2YXRlOgogICAgIHN0YXRpYyBpbmxpbmUgV2Vha0ltcGwqIGhhc2hUYWJsZURlbGV0
ZWRWYWx1ZSgpOwogCi0gICAgV2Vha0ltcGwqIG1faW1wbDsKKyAgICBXZWFrSW1wbCogbV9pbXBs
IHsgbnVsbHB0ciB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkBAIC0xMDYsNiArMTA0LDkg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpXZWFrPFQ+PiA6
IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0MKICAgICB0eXBlZGVmIHN0ZDo6bnVsbHB0cl90IEVt
cHR5VmFsdWVUeXBlOwogICAgIHN0YXRpYyBFbXB0eVZhbHVlVHlwZSBlbXB0eVZhbHVlKCkgeyBy
ZXR1cm4gbnVsbHB0cjsgfQogCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0lzRW1wdHlW
YWx1ZUZ1bmN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgYm9vbCBpc0VtcHR5VmFsdWUoY29uc3Qg
SlNDOjpXZWFrPFQ+JiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUuaXNIYXNoVGFibGVFbXB0eVZhbHVl
KCk7IH0KKwogICAgIHR5cGVkZWYgVCogUGVla1R5cGU7CiAgICAgc3RhdGljIFBlZWtUeXBlIHBl
ZWsoY29uc3QgU3RvcmFnZVR5cGUmIHZhbHVlKSB7IHJldHVybiB2YWx1ZS5nZXQoKTsgfQogICAg
IHN0YXRpYyBQZWVrVHlwZSBwZWVrKEVtcHR5VmFsdWVUeXBlKSB7IHJldHVybiBQZWVrVHlwZSgp
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSW5saW5lcy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha0lubGluZXMuaAppbmRleCAwZjdkNTYw
YjNjOWZkN2E0NzkyZGFmOTkzMTM4NjE4ZTkzYTc2MTk2Li4wMTFhMjI3MmJiMmU1NDJjYzQ0OTI2
YWFmY2U1NGE3NWZlOTg2MjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9XZWFrSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbmxp
bmVzLmgKQEAgLTQxLDcgKzQxLDEyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBib29s
IFdlYWs8VD46OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKICAgICByZXR1cm4gbV9p
bXBsID09IGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgV2VhazxUPjo6V2Vhayh0eXBlbmFtZSBXZWFrPFQ+OjpIYXNoVGFibGVEZWxldGVk
VmFsdWVUYWcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBXZWFrPFQ+Ojppc0hh
c2hUYWJsZUVtcHR5VmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiAhbV9pbXBsOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgV2VhazxUPjo6V2VhayhXVEY6Okhhc2hUYWJsZURl
bGV0ZWRWYWx1ZVR5cGUpCiAgICAgOiBtX2ltcGwoaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpCiB7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAKaW5kZXggN2ZiOTg4NDA0
MWI1MDY5MGY5M2M0ZDI1ZmRlNDQxNzNhZTg3YTAzNi4uZjEwNTBjM2Y5YzdmYWMxNWIzNzE3Nzk1
NmQxODhlNzE1ZDhhNDY5OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRUaHVua3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNw
cApAQCAtMzcsNyArMzcsNiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIEpJVFRodW5rczo6SklUVGh1
bmtzKCkKLSAgICA6IG1faG9zdEZ1bmN0aW9uU3R1Yk1hcChtYWtlVW5pcXVlPEhvc3RGdW5jdGlv
blN0dWJNYXA+KCkpCiB7CiB9CiAKQEAgLTQ1LDYgKzQ0LDYzIEBAIEpJVFRodW5rczo6fkpJVFRo
dW5rcygpCiB7CiB9CiAKK2lubGluZSB1bnNpZ25lZCBKSVRUaHVua3M6OldlYWtOYXRpdmVFeGVj
dXRhYmxlSGFzaDo6aGFzaChjb25zdCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlKQorewor
ICAgIHJldHVybiBoYXNoKGV4ZWN1dGFibGUtPmZ1bmN0aW9uKCksIGV4ZWN1dGFibGUtPmNvbnN0
cnVjdG9yKCksIGV4ZWN1dGFibGUtPm5hbWUoKSk7Cit9CisKK2lubGluZSB1bnNpZ25lZCBKSVRU
aHVua3M6OldlYWtOYXRpdmVFeGVjdXRhYmxlSGFzaDo6aGFzaChjb25zdCBXZWFrPE5hdGl2ZUV4
ZWN1dGFibGU+JiBrZXkpCit7CisgICAgLy8gVGhpcyBuZXZlciBnZXRzIERlbGV0ZWQgLyBFbXB0
eSBzbG90cy4KKyAgICBXZWFrSW1wbCogaW1wbCA9IGtleS51bnNhZmVJbXBsKCk7CisgICAgQVNT
RVJUKGltcGwpOworICAgIC8vIFdlIGhhdmUgYSBjYWxsYmFjayByZW1vdmluZyBlbnRyeSB3aGVu
IGZpbmFsaXppbmcuIFRoaXMgbWVhbnMgdGhhdCB3ZSBuZXZlciBob2xkIERlYWxsb2NhdGVkIGVu
dHJ5IGluIEhhc2hTZXQuCisgICAgQVNTRVJUKGltcGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OlN0
YXRlOjpEZWFsbG9jYXRlZCk7CisgICAgLy8gTmV2ZXIgdXNlIGpzQ2FzdCBoZXJlLiBUaGlzIGlz
IHBvc3NpYmxlIHRoYXQgdGhpcyB2YWx1ZSBpcyAiRGVhZCIgYnV0IG5vdCAiRmluYWxpemVkIiB5
ZXQuIEluIHRoaXMgY2FzZSwKKyAgICAvLyB3ZSBjYW4gc3RpbGwgYWNjZXNzIHRvIG5vbi1KUyBk
YXRhLCBhcyB3ZSBhcmUgZG9pbmcgaW4gYSBmaW5hbGl6ZSBjYWxsYmFjay4KKyAgICBhdXRvKiBl
eGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8TmF0aXZlRXhlY3V0YWJsZSo+KGltcGwtPmpzVmFsdWUo
KS5hc0NlbGwoKSk7CisgICAgQVNTRVJUKGV4ZWN1dGFibGUpOworICAgIHJldHVybiBoYXNoKGV4
ZWN1dGFibGUpOworfQorCitpbmxpbmUgYm9vbCBKSVRUaHVua3M6OldlYWtOYXRpdmVFeGVjdXRh
YmxlSGFzaDo6ZXF1YWwoY29uc3QgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiYgYSwgY29uc3QgV2Vh
azxOYXRpdmVFeGVjdXRhYmxlPiYgYikKK3sKKyAgICAvLyBUaGlzIG5ldmVyIGdldHMgRGVsZXRl
ZCAvIEVtcHR5IHNsb3RzLiBBbmQgd2UgbmV2ZXIgZ2V0IERlYWxsb2NhdGVkIFdlYWsgZW50cnkg
dG9vLgorICAgIGF1dG8qIGFJbXBsID0gYS51bnNhZmVJbXBsKCk7CisgICAgYXV0byogYkltcGwg
PSBiLnVuc2FmZUltcGwoKTsKKyAgICBBU1NFUlQoYUltcGwpOworICAgIEFTU0VSVChhSW1wbC0+
c3RhdGUoKSAhPSBXZWFrSW1wbDo6U3RhdGU6OkRlYWxsb2NhdGVkKTsKKyAgICBBU1NFUlQoYklt
cGwpOworICAgIEFTU0VSVChiSW1wbC0+c3RhdGUoKSAhPSBXZWFrSW1wbDo6U3RhdGU6OkRlYWxs
b2NhdGVkKTsKKyAgICBhdXRvKiBhRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PE5hdGl2ZUV4ZWN1
dGFibGUqPihhSW1wbC0+anNWYWx1ZSgpLmFzQ2VsbCgpKTsKKyAgICBhdXRvKiBiRXhlY3V0YWJs
ZSA9IHN0YXRpY19jYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihiSW1wbC0+anNWYWx1ZSgpLmFzQ2Vs
bCgpKTsKKyAgICBpZiAoYUV4ZWN1dGFibGUgPT0gYkV4ZWN1dGFibGUpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBhRXhlY3V0YWJsZS0+ZnVuY3Rpb24oKSA9PSBiRXhlY3V0YWJs
ZS0+ZnVuY3Rpb24oKSAmJiBhRXhlY3V0YWJsZS0+Y29uc3RydWN0b3IoKSA9PSBiRXhlY3V0YWJs
ZS0+Y29uc3RydWN0b3IoKSAmJiBhRXhlY3V0YWJsZS0+bmFtZSgpID09IGJFeGVjdXRhYmxlLT5u
YW1lKCk7Cit9CisKK2lubGluZSBib29sIEpJVFRodW5rczo6V2Vha05hdGl2ZUV4ZWN1dGFibGVI
YXNoOjplcXVhbChjb25zdCBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+JiBhLCBjb25zdCBOYXRpdmVF
eGVjdXRhYmxlKiBiRXhlY3V0YWJsZSkKK3sKKyAgICAvLyBUaGlzIG5ldmVyIGdldHMgRGVsZXRl
ZCAvIEVtcHR5IHNsb3RzLiBBbmQgd2UgbmV2ZXIgZ2V0IERlYWxsb2NhdGVkIFdlYWsgZW50cnkg
dG9vLgorICAgIGF1dG8qIGFJbXBsID0gYS51bnNhZmVJbXBsKCk7CisgICAgQVNTRVJUKGFJbXBs
KTsKKyAgICBBU1NFUlQoYUltcGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OlN0YXRlOjpEZWFsbG9j
YXRlZCk7CisgICAgYXV0byogYUV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxOYXRpdmVFeGVjdXRh
YmxlKj4oYUltcGwtPmpzVmFsdWUoKS5hc0NlbGwoKSk7CisgICAgaWYgKGFFeGVjdXRhYmxlID09
IGJFeGVjdXRhYmxlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gYUV4ZWN1dGFi
bGUtPmZ1bmN0aW9uKCkgPT0gYkV4ZWN1dGFibGUtPmZ1bmN0aW9uKCkgJiYgYUV4ZWN1dGFibGUt
PmNvbnN0cnVjdG9yKCkgPT0gYkV4ZWN1dGFibGUtPmNvbnN0cnVjdG9yKCkgJiYgYUV4ZWN1dGFi
bGUtPm5hbWUoKSA9PSBiRXhlY3V0YWJsZS0+bmFtZSgpOworfQorCitpbmxpbmUgYm9vbCBKSVRU
aHVua3M6OldlYWtOYXRpdmVFeGVjdXRhYmxlSGFzaDo6ZXF1YWwoY29uc3QgV2VhazxOYXRpdmVF
eGVjdXRhYmxlPiYgYSwgY29uc3QgSG9zdEZ1bmN0aW9uS2V5JiBiKQoreworICAgIC8vIFRoaXMg
bmV2ZXIgZ2V0cyBEZWxldGVkIC8gRW1wdHkgc2xvdHMuIEFuZCB3ZSBuZXZlciBnZXQgRGVhbGxv
Y2F0ZWQgV2VhayBlbnRyeSB0b28uCisgICAgYXV0byogYUltcGwgPSBhLnVuc2FmZUltcGwoKTsK
KyAgICBBU1NFUlQoYUltcGwpOworICAgIEFTU0VSVChhSW1wbC0+c3RhdGUoKSAhPSBXZWFrSW1w
bDo6U3RhdGU6OkRlYWxsb2NhdGVkKTsKKyAgICBhdXRvKiBhRXhlY3V0YWJsZSA9IHN0YXRpY19j
YXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihhSW1wbC0+anNWYWx1ZSgpLmFzQ2VsbCgpKTsKKyAgICBy
ZXR1cm4gYUV4ZWN1dGFibGUtPmZ1bmN0aW9uKCkgPT0gc3RkOjpnZXQ8MD4oYikgJiYgYUV4ZWN1
dGFibGUtPmNvbnN0cnVjdG9yKCkgPT0gc3RkOjpnZXQ8MT4oYikgJiYgYUV4ZWN1dGFibGUtPm5h
bWUoKSA9PSBzdGQ6OmdldDwyPihiKTsKK30KKwogTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRo
dW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aU5hdGl2ZUNhbGwoVk0mIHZtKQogewogICAgIEFTU0VS
VChWTTo6Y2FuVXNlSklUKCkpOwpAQCAtMTAyLDEwICsxNTgsMzIgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmV4aXN0aW5nQ1RJU3R1YihUaHVua0dl
bmVyYXRvcgogICAgIHJldHVybiBlbnRyeS0+dmFsdWU7CiB9CiAKK3N0cnVjdCBKSVRUaHVua3M6
Okhvc3RLZXlTZWFyY2hlciB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgSG9zdEZ1
bmN0aW9uS2V5JiBrZXkpIHsgcmV0dXJuIFdlYWtOYXRpdmVFeGVjdXRhYmxlSGFzaDo6aGFzaChr
ZXkpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgV2VhazxOYXRpdmVFeGVjdXRhYmxl
PiYgYSwgY29uc3QgSG9zdEZ1bmN0aW9uS2V5JiBiKSB7IHJldHVybiBXZWFrTmF0aXZlRXhlY3V0
YWJsZUhhc2g6OmVxdWFsKGEsIGIpOyB9Cit9OworCitzdHJ1Y3QgSklUVGh1bmtzOjpOYXRpdmVF
eGVjdXRhYmxlVHJhbnNsYXRvciB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgTmF0
aXZlRXhlY3V0YWJsZSoga2V5KSB7IHJldHVybiBXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g6Omhh
c2goa2V5KTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFdlYWs8TmF0aXZlRXhlY3V0
YWJsZT4mIGEsIGNvbnN0IE5hdGl2ZUV4ZWN1dGFibGUqIGIpIHsgcmV0dXJuIFdlYWtOYXRpdmVF
eGVjdXRhYmxlSGFzaDo6ZXF1YWwoYSwgYik7IH0KKyAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUo
V2VhazxOYXRpdmVFeGVjdXRhYmxlPiYgbG9jYXRpb24sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1
dGFibGUsIHVuc2lnbmVkKQorICAgIHsKKyAgICAgICAgbG9jYXRpb24gPSBXZWFrPE5hdGl2ZUV4
ZWN1dGFibGU+KGV4ZWN1dGFibGUsIGV4ZWN1dGFibGUtPnZtKCkuaml0U3R1YnMuZ2V0KCkpOwor
ICAgIH0KK307CisKIHZvaWQgSklUVGh1bmtzOjpmaW5hbGl6ZShIYW5kbGU8VW5rbm93bj4gaGFu
ZGxlLCB2b2lkKikKIHsKICAgICBhdXRvKiBuYXRpdmVFeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8
TmF0aXZlRXhlY3V0YWJsZSo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7Ci0gICAgd2Vha1JlbW92
ZSgqbV9ob3N0RnVuY3Rpb25TdHViTWFwLCBzdGQ6Om1ha2VfdHVwbGUobmF0aXZlRXhlY3V0YWJs
ZS0+ZnVuY3Rpb24oKSwgbmF0aXZlRXhlY3V0YWJsZS0+Y29uc3RydWN0b3IoKSwgbmF0aXZlRXhl
Y3V0YWJsZS0+bmFtZSgpKSwgbmF0aXZlRXhlY3V0YWJsZSk7CisgICAgYXV0byBob3N0RnVuY3Rp
b25LZXkgPSBzdGQ6Om1ha2VfdHVwbGUobmF0aXZlRXhlY3V0YWJsZS0+ZnVuY3Rpb24oKSwgbmF0
aXZlRXhlY3V0YWJsZS0+Y29uc3RydWN0b3IoKSwgbmF0aXZlRXhlY3V0YWJsZS0+bmFtZSgpKTsK
KyAgICB7CisgICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKKyAgICAgICAgYXV0byBpdGVy
YXRvciA9IG1fbmF0aXZlRXhlY3V0YWJsZVNldC5maW5kPEhvc3RLZXlTZWFyY2hlcj4oaG9zdEZ1
bmN0aW9uS2V5KTsKKyAgICAgICAgLy8gQmVjYXVzZSB0aGlzIGZpbmFsaXplciBpcyBjYWxsZWQs
IHRoaXMgbWVhbnMgdGhhdCB3ZSBzdGlsbCBoYXZlIGRlYWQgV2Vhazw+IGluIG1fbmF0aXZlRXhl
Y3V0YWJsZVNldC4KKyAgICAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fbmF0aXZlRXhlY3V0YWJs
ZVNldC5lbmQoKSk7CisgICAgICAgIEFTU0VSVChpdGVyYXRvci0+dW5zYWZlSW1wbCgpLT5zdGF0
ZSgpID09IFdlYWtJbXBsOjpTdGF0ZTo6RmluYWxpemVkKTsKKyAgICAgICAgbV9uYXRpdmVFeGVj
dXRhYmxlU2V0LnJlbW92ZShpdGVyYXRvcik7CisgICAgfQogfQogCiBOYXRpdmVFeGVjdXRhYmxl
KiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIoVk0mIHZtLCBUYWdnZWROYXRpdmVGdW5jdGlv
biBmdW5jdGlvbiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIGNvbnN0IFN0cmlu
ZyYgbmFtZSkKQEAgLTExOCw4ICsxOTYsMTcgQEAgTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtz
Ojpob3N0RnVuY3Rpb25TdHViKFZNJiB2bSwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3QKICAg
ICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7ICAgIAogICAgIEFTU0VSVChWTTo6Y2Fu
VXNlSklUKCkpOwogCi0gICAgaWYgKE5hdGl2ZUV4ZWN1dGFibGUqIG5hdGl2ZUV4ZWN1dGFibGUg
PSBtX2hvc3RGdW5jdGlvblN0dWJNYXAtPmdldChzdGQ6Om1ha2VfdHVwbGUoZnVuY3Rpb24sIGNv
bnN0cnVjdG9yLCBuYW1lKSkpCi0gICAgICAgIHJldHVybiBuYXRpdmVFeGVjdXRhYmxlOworICAg
IGF1dG8gaG9zdEZ1bmN0aW9uS2V5ID0gc3RkOjptYWtlX3R1cGxlKGZ1bmN0aW9uLCBjb25zdHJ1
Y3RvciwgbmFtZSk7CisgICAgeworICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7CisgICAg
ICAgIGF1dG8gaXRlcmF0b3IgPSBtX25hdGl2ZUV4ZWN1dGFibGVTZXQuZmluZDxIb3N0S2V5U2Vh
cmNoZXI+KGhvc3RGdW5jdGlvbktleSk7CisgICAgICAgIGlmIChpdGVyYXRvciAhPSBtX25hdGl2
ZUV4ZWN1dGFibGVTZXQuZW5kKCkpIHsKKyAgICAgICAgICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRo
YXQgdGhpcyByZXR1cm5zIFdlYWs8PiB3aGljaCBpcyBEZWFkLCBidXQgbm90IGZpbmFsaXplZC4K
KyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBub3QgdXNlIHRoaXMgcmVmZXJlbmNlIHRvIHN0b3Jl
IHZhbHVlIGNyZWF0ZWQgaW4gdGhlIHN1YnNlcXVlbnQgc2VxdWVuY2UsIHNpbmNlIGFsbG9jYXRp
bmcgTmF0aXZlRXhlY3V0YWJsZSBjYW4gY2F1c2UgR0MsIHdoaWNoIGNoYW5nZXMgdGhpcyBTZXQu
CisgICAgICAgICAgICBpZiAoYXV0byogZXhlY3V0YWJsZSA9IGl0ZXJhdG9yLT5nZXQoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTsKKyAgICAgICAgfQorICAgIH0KIAogICAg
IFJlZlB0cjxKSVRDb2RlPiBmb3JDYWxsOwogICAgIGlmIChnZW5lcmF0b3IpIHsKQEAgLTEzMyw3
ICsyMjAsMjYgQEAgTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHVi
KFZNJiB2bSwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3QKICAgICBSZWY8SklUQ29kZT4gZm9y
Q29uc3RydWN0ID0gYWRvcHRSZWYoKm5ldyBOYXRpdmVKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKU0VudHJ5UHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGN0aU5hdGl2ZUNv
bnN0cnVjdCh2bSkucmV0YWdnZWQ8SlNFbnRyeVB0clRhZz4oKSksIEpJVFR5cGU6Okhvc3RDYWxs
VGh1bmssIE5vSW50cmluc2ljKSk7CiAgICAgCiAgICAgTmF0aXZlRXhlY3V0YWJsZSogbmF0aXZl
RXhlY3V0YWJsZSA9IE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSh2bSwgZm9yQ2FsbC5yZWxlYXNl
Tm9uTnVsbCgpLCBmdW5jdGlvbiwgV1RGTW92ZShmb3JDb25zdHJ1Y3QpLCBjb25zdHJ1Y3Rvciwg
bmFtZSk7Ci0gICAgd2Vha0FkZCgqbV9ob3N0RnVuY3Rpb25TdHViTWFwLCBzdGQ6Om1ha2VfdHVw
bGUoZnVuY3Rpb24sIGNvbnN0cnVjdG9yLCBuYW1lKSwgV2VhazxOYXRpdmVFeGVjdXRhYmxlPihu
YXRpdmVFeGVjdXRhYmxlLCB0aGlzKSk7CisgICAgeworICAgICAgICBEaXNhbGxvd0dDIGRpc2Fs
bG93R0M7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uYXRpdmVFeGVjdXRhYmxlU2V0LmFk
ZDxOYXRpdmVFeGVjdXRhYmxlVHJhbnNsYXRvcj4obmF0aXZlRXhlY3V0YWJsZSk7CisgICAgICAg
IGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAvLyBPdmVycmlkZSB0aGUgZXhpc3RpbmcgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiB3aXRo
IHRoZSBuZXcgb25lIHNpbmNlIGl0IGlzIGRlYWQuCisgICAgICAgICAgICAgICAgQVNTRVJUKCEq
YWRkUmVzdWx0Lml0ZXJhdG9yKTsKKyAgICAgICAgICAgICAgICAqYWRkUmVzdWx0Lml0ZXJhdG9y
ID0gV2VhazxOYXRpdmVFeGVjdXRhYmxlPihuYXRpdmVFeGVjdXRhYmxlLCB0aGlzKTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoKmFkZFJlc3VsdC5pdGVyYXRvcik7CisgICAgICAgICAgICB9Cisj
aWYgQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvIGl0
ZXJhdG9yID0gbV9uYXRpdmVFeGVjdXRhYmxlU2V0LmZpbmQ8SG9zdEtleVNlYXJjaGVyPihob3N0
RnVuY3Rpb25LZXkpOworICAgICAgICAgICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX25hdGl2
ZUV4ZWN1dGFibGVTZXQuZW5kKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChpdGVyYXRvci0+
Z2V0KCkgPT0gbmF0aXZlRXhlY3V0YWJsZSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGl0ZXJh
dG9yLT51bnNhZmVJbXBsKCktPnN0YXRlKCkgPT0gV2Vha0ltcGw6OlN0YXRlOjpMaXZlKTsKKyAg
ICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICB9CisgICAgfQogICAgIHJldHVybiBuYXRpdmVF
eGVjdXRhYmxlOwogfQogCkBAIC0xNDIsMTEgKzI0OCw2IEBAIE5hdGl2ZUV4ZWN1dGFibGUqIEpJ
VFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1YihWTSYgdm0sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGZ1
bmN0CiAgICAgcmV0dXJuIGhvc3RGdW5jdGlvblN0dWIodm0sIGZ1bmN0aW9uLCBjYWxsSG9zdEZ1
bmN0aW9uQXNDb25zdHJ1Y3RvciwgZ2VuZXJhdG9yLCBpbnRyaW5zaWMsIG51bGxwdHIsIG5hbWUp
OwogfQogCi12b2lkIEpJVFRodW5rczo6Y2xlYXJIb3N0RnVuY3Rpb25TdHVicygpCi17Ci0gICAg
bV9ob3N0RnVuY3Rpb25TdHViTWFwID0gbnVsbHB0cjsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlND
CiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRUaHVua3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtz
LmgKaW5kZXggNDhjMjBlMzM3ZGMxNDJjODM0M2U5NjUxZTY5YmViNWY2M2IzOWE3Mi4uNDFiMTVm
NTMxZWE4MTllNWIwZDNjMTc0ZDBjMDAzN2JmNmFkOThhYyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFRodW5rcy5oCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiV2Vha0hhbmRsZU93
bmVyLmgiCiAjaW5jbHVkZSA8dHVwbGU+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAog
bmFtZXNwYWNlIEpTQyB7CkBAIC02NSw0NyArNjYsNDYgQEAgY2xhc3MgSklUVGh1bmtzIGZpbmFs
IDogcHJpdmF0ZSBXZWFrSGFuZGxlT3duZXIgewogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGhvc3RG
dW5jdGlvblN0dWIoVk0mLCBUYWdnZWROYXRpdmVGdW5jdGlvbiwgVGFnZ2VkTmF0aXZlRnVuY3Rp
b24gY29uc3RydWN0b3IsIFRodW5rR2VuZXJhdG9yLCBJbnRyaW5zaWMsIGNvbnN0IERPTUpJVDo6
U2lnbmF0dXJlKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBo
b3N0RnVuY3Rpb25TdHViKFZNJiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24sIFRodW5rR2VuZXJhdG9y
LCBJbnRyaW5zaWMsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKLSAgICB2b2lkIGNsZWFySG9zdEZ1
bmN0aW9uU3R1YnMoKTsKLQogcHJpdmF0ZToKICAgICB2b2lkIGZpbmFsaXplKEhhbmRsZTxVbmtu
b3duPiwgdm9pZCogY29udGV4dCkgb3ZlcnJpZGU7CiAgICAgCiAgICAgdHlwZWRlZiBIYXNoTWFw
PFRodW5rR2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+PiBD
VElTdHViTWFwOwogICAgIENUSVN0dWJNYXAgbV9jdGlTdHViTWFwOwogCi0gICAgdHlwZWRlZiBz
dGQ6OnR1cGxlPFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uLCBUYWdnZWROYXRpdmVGdW5jdGlvbiwgU3Ry
aW5nPiBIb3N0RnVuY3Rpb25LZXk7CisgICAgdXNpbmcgSG9zdEZ1bmN0aW9uS2V5ID0gc3RkOjp0
dXBsZTxUYWdnZWROYXRpdmVGdW5jdGlvbiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24sIFN0cmluZz47
CiAKLSAgICBzdHJ1Y3QgSG9zdEZ1bmN0aW9uSGFzaCB7CisgICAgc3RydWN0IFdlYWtOYXRpdmVF
eGVjdXRhYmxlSGFzaCB7CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFdlYWs8
TmF0aXZlRXhlY3V0YWJsZT4mKTsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qg
TmF0aXZlRXhlY3V0YWJsZSopOwogICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBI
b3N0RnVuY3Rpb25LZXkmIGtleSkKICAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaGFz
aCA9IFdURjo6cGFpckludEhhc2goaGFzaFBvaW50ZXIoc3RkOjpnZXQ8MD4oa2V5KSksIGhhc2hQ
b2ludGVyKHN0ZDo6Z2V0PDE+KGtleSkpKTsKLSAgICAgICAgICAgIGlmICghc3RkOjpnZXQ8Mj4o
a2V5KS5pc051bGwoKSkKLSAgICAgICAgICAgICAgICBoYXNoID0gV1RGOjpwYWlySW50SGFzaCho
YXNoLCBEZWZhdWx0SGFzaDxTdHJpbmc+OjpIYXNoOjpoYXNoKHN0ZDo6Z2V0PDI+KGtleSkpKTsK
LSAgICAgICAgICAgIHJldHVybiBoYXNoOwotICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IEhvc3RGdW5jdGlvbktleSYgYSwgY29uc3QgSG9zdEZ1bmN0aW9uS2V5JiBi
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKHN0ZDo6Z2V0PDA+KGEpID09IHN0ZDo6
Z2V0PDA+KGIpKSAmJiAoc3RkOjpnZXQ8MT4oYSkgPT0gc3RkOjpnZXQ8MT4oYikpICYmIChzdGQ6
OmdldDwyPihhKSA9PSBzdGQ6OmdldDwyPihiKSk7CisgICAgICAgICAgICByZXR1cm4gaGFzaChz
dGQ6OmdldDwwPihrZXkpLCBzdGQ6OmdldDwxPihrZXkpLCBzdGQ6OmdldDwyPihrZXkpKTsKICAg
ICAgICAgfQotICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSB0cnVlOworCisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFdl
YWs8TmF0aXZlRXhlY3V0YWJsZT4mLCBjb25zdCBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+Jik7Cisg
ICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4mLCBj
b25zdCBIb3N0RnVuY3Rpb25LZXkmKTsKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3Qg
V2VhazxOYXRpdmVFeGVjdXRhYmxlPiYsIGNvbnN0IE5hdGl2ZUV4ZWN1dGFibGUqKTsKKyAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0g
ZmFsc2U7CiAKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGhh
c2hQb2ludGVyKFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIHApCiAgICAgICAgIHsKICAgICAgICAgICAg
IHJldHVybiBEZWZhdWx0SGFzaDxUYWdnZWROYXRpdmVGdW5jdGlvbj46Okhhc2g6Omhhc2gocCk7
CiAgICAgICAgIH0KLSAgICB9OwogCi0gICAgc3RydWN0IEhvc3RGdW5jdGlvbkhhc2hUcmFpdCA6
IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8SG9zdEZ1bmN0aW9uS2V5PiB7Ci0gICAgICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsKLSAgICAgICAgc3RhdGlj
IEVtcHR5VmFsdWVUeXBlIGVtcHR5VmFsdWUoKSB7IHJldHVybiBzdGQ6Om1ha2VfdHVwbGUobnVs
bHB0ciwgbnVsbHB0ciwgU3RyaW5nKCkpOyB9Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgY29uc3Ry
dWN0RGVsZXRlZFZhbHVlKEhvc3RGdW5jdGlvbktleSYgc2xvdCkgeyBzdGQ6OmdldDwwPihzbG90
KSA9IFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uKC0xKTsgfQotICAgICAgICBzdGF0aWMgYm9vbCBpc0Rl
bGV0ZWRWYWx1ZShjb25zdCBIb3N0RnVuY3Rpb25LZXkmIHZhbHVlKSB7IHJldHVybiBzdGQ6Omdl
dDwwPih2YWx1ZSkgPT0gVGFnZ2VkTmF0aXZlRnVuY3Rpb24oLTEpOyB9CisgICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBUYWdnZWROYXRp
dmVGdW5jdGlvbiBjb25zdHJ1Y3RvciwgY29uc3QgU3RyaW5nJiBuYW1lKQorICAgICAgICB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBoYXNoID0gV1RGOjpwYWlySW50SGFzaChoYXNoUG9pbnRlcihm
dW5jdGlvbiksIGhhc2hQb2ludGVyKGNvbnN0cnVjdG9yKSk7CisgICAgICAgICAgICBpZiAoIW5h
bWUuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgaGFzaCA9IFdURjo6cGFpckludEhhc2goaGFz
aCwgRGVmYXVsdEhhc2g8U3RyaW5nPjo6SGFzaDo6aGFzaChuYW1lKSk7CisgICAgICAgICAgICBy
ZXR1cm4gaGFzaDsKKyAgICAgICAgfQogICAgIH07Ci0gICAgCi0gICAgdHlwZWRlZiBIYXNoTWFw
PEhvc3RGdW5jdGlvbktleSwgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiwgSG9zdEZ1bmN0aW9uSGFz
aCwgSG9zdEZ1bmN0aW9uSGFzaFRyYWl0PiBIb3N0RnVuY3Rpb25TdHViTWFwOwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxIb3N0RnVuY3Rpb25TdHViTWFwPiBtX2hvc3RGdW5jdGlvblN0dWJNYXA7Cisg
ICAgc3RydWN0IEhvc3RLZXlTZWFyY2hlcjsKKyAgICBzdHJ1Y3QgTmF0aXZlRXhlY3V0YWJsZVRy
YW5zbGF0b3I7CisKKyAgICB1c2luZyBXZWFrTmF0aXZlRXhlY3V0YWJsZVNldCA9IEhhc2hTZXQ8
V2VhazxOYXRpdmVFeGVjdXRhYmxlPiwgV2Vha05hdGl2ZUV4ZWN1dGFibGVIYXNoPjsKKyAgICBX
ZWFrTmF0aXZlRXhlY3V0YWJsZVNldCBtX25hdGl2ZUV4ZWN1dGFibGVTZXQ7CiAgICAgTG9jayBt
X2xvY2s7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9O
YXRpdmVFeGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVF
eGVjdXRhYmxlLmgKaW5kZXggMmUzZjU0MjNmMjVkNDQwMDkzNDVkN2FmOWRlMzYxMDI4YWEwNjk1
NC4uOWYwNDNmYWQyZTYzYWFiZTRiYjYyYjVhZDc0OGZlYmQ2ZmY0ZTUyZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuaApAQCAtNDgsOCAr
NDgsOCBAQCBjbGFzcyBOYXRpdmVFeGVjdXRhYmxlIGZpbmFsIDogcHVibGljIEV4ZWN1dGFibGVC
YXNlIHsKIAogICAgIENvZGVCbG9ja0hhc2ggaGFzaEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5k
KSBjb25zdDsKIAotICAgIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uKCkgeyByZXR1cm4g
bV9mdW5jdGlvbjsgfQotICAgIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKCkgeyBy
ZXR1cm4gbV9jb25zdHJ1Y3RvcjsgfQorICAgIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbjsgfQorICAgIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9u
IGNvbnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdHJ1Y3RvcjsgfQogICAgICAgICAK
ICAgICBUYWdnZWROYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlvbkZvcihDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL0pTRG9sbGFyVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9s
bGFyVk0uY3BwCmluZGV4IGRmZjFkZjE5YWM4NGE5ZWQzNjRiNTk3ZDVkZDlkMDQxYmVjNDc4YjMu
LjlhN2Y0OWExNDA1M2EwODI3ZGJhZTM1MmQyOGY1MDM2MDdmZjZjZDcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKQEAgLTE2OTksNiArMTY5OSwxNSBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkVkZW5HQyhKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiB9CiAKKy8vIFJ1bnMgYSBmdWxsIEdDLCBidXQgc3dlZXAgYXN5bmNocm9ub3Vz
bHkuCisvLyBVc2FnZTogJHZtLmdjU3dlZXBBc3luY2hyb25vdXNseSgpCitzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdDU3dlZXBBc3luY2hyb25vdXNseShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqKQoreworICAgIERvbGxhclZNQXNz
ZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXAuY29sbGVj
dE5vdyhBc3luYywgQ29sbGVjdGlvblNjb3BlOjpGdWxsKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCiAvLyBEdW1wcyB0aGUgaGFzaGVzIG9mIGFsbCBz
dWJzcGFjZXMgY3VycmVudGx5IHJlZ2lzdGVyZWQgd2l0aCB0aGUgVk0uCiAvLyBVc2FnZTogJHZt
LmR1bXBTdWJzcGFjZUhhc2hlcygpCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkR1bXBTdWJzcGFjZUhhc2hlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqKQpAQCAtMjMwNyw2ICsyMzE2LDE5IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlT2JqZWN0RG9pbmdTaWRlRWZmZWN0UHV0V2l0
aG91CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZUVtcHR5RnVuY3Rpb25XaXRo
TmFtZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
K3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgY29uc3QgU3RyaW5nIG5hbWUg
PSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisKKyAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShKU0Z1bmN0aW9uOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgMSwgbmFtZSwgZnVuY3Rpb25DcmVhdGVFbXB0eUZ1bmN0aW9uV2l0
aE5hbWUpKSk7Cit9CisKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uU2V0SW1wdXJlR2V0dGVyRGVsZWdhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRT
Y29wZTsKQEAgLTI4NjMsNiArMjg4NSw3IEBAIHZvaWQgSlNEb2xsYXJWTTo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtKQogICAgIGFkZEZ1bmN0aW9uKHZtLCAibm9JbmxpbmUiLCBmdW5jdGlvbk5vSW5s
aW5lLCAxKTsKIAogICAgIGFkZEZ1bmN0aW9uKHZtLCAiZ2MiLCBmdW5jdGlvbkdDLCAwKTsKKyAg
ICBhZGRGdW5jdGlvbih2bSwgImdjU3dlZXBBc3luY2hyb25vdXNseSIsIGZ1bmN0aW9uR0NTd2Vl
cEFzeW5jaHJvbm91c2x5LCAwKTsKICAgICBhZGRGdW5jdGlvbih2bSwgImVkZW5HQyIsIGZ1bmN0
aW9uRWRlbkdDLCAwKTsKICAgICBhZGRGdW5jdGlvbih2bSwgImR1bXBTdWJzcGFjZUhhc2hlcyIs
IGZ1bmN0aW9uRHVtcFN1YnNwYWNlSGFzaGVzLCAwKTsKIApAQCAtMjkwOSw2ICsyOTMyLDcgQEAg
dm9pZCBKU0RvbGxhclZNOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAjZW5kaWYKICAgICBhZGRG
dW5jdGlvbih2bSwgImNyZWF0ZVN0YXRpY0N1c3RvbUFjY2Vzc29yIiwgZnVuY3Rpb25DcmVhdGVT
dGF0aWNDdXN0b21BY2Nlc3NvciwgMCk7CiAgICAgYWRkRnVuY3Rpb24odm0sICJjcmVhdGVPYmpl
Y3REb2luZ1NpZGVFZmZlY3RQdXRXaXRob3V0Q29ycmVjdFNsb3RTdGF0dXMiLCBmdW5jdGlvbkNy
ZWF0ZU9iamVjdERvaW5nU2lkZUVmZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1cywgMCk7
CisgICAgYWRkRnVuY3Rpb24odm0sICJjcmVhdGVFbXB0eUZ1bmN0aW9uV2l0aE5hbWUiLCBmdW5j
dGlvbkNyZWF0ZUVtcHR5RnVuY3Rpb25XaXRoTmFtZSwgMSk7CiAgICAgYWRkRnVuY3Rpb24odm0s
ICJnZXRQcml2YXRlUHJvcGVydHkiLCBmdW5jdGlvbkdldFByaXZhdGVQcm9wZXJ0eSwgMik7CiAg
ICAgYWRkRnVuY3Rpb24odm0sICJzZXRJbXB1cmVHZXR0ZXJEZWxlZ2F0ZSIsIGZ1bmN0aW9uU2V0
SW1wdXJlR2V0dGVyRGVsZWdhdGUsIDIpOwogCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxv
ZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDY1MjEyZmZhMWQ3NWE5NDE2NjFmMzc2YzlkMmVj
MDU5NTJmM2I4NjguLmM1MzlkN2IwMWRlMjg4MDEwNjMyYWFmOGJiNDA0YzAwMGIyMmMxOTggMTAw
NjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMjAtMDItMTQgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBKSVRUaHVuayBzaG91bGQgYmUgSGFzaFNldDxXZWFrPE5hdGl2
ZUV4ZWN1dGFibGU+PiB3aXRoIGFwcHJvcHJpYXRlIEdDIHdlYWtuZXNzIGhhbmRsaW5nCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc3MTUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9zdHJl
c3Mtaml0dGh1bmtzLmpzOiBBZGRlZC4KKyAgICAgICAgKGxldC5zZXQgbmV3R2xvYmFsKToKKyAg
ICAgICAgKHNldCBjYXRjaCk6CisKIDIwMjAtMDItMTQgIFRhZGV1IFphZ2FsbG8gIDx0emFnYWxs
b0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZDogZml4IGJyb2tlbiB0ZXN0cyBhZGRl
ZCBpbiByMjU2NjY1CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9zdHJlc3Mtaml0dGh1bmtz
LmpzIGIvSlNUZXN0cy9zdHJlc3Mvc3RyZXNzLWppdHRodW5rcy5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MjNm
ZjNjOWRjZDNlYzgzZWRhNmI4NzY1YzM2NDE1MWFlNzkzZmViCi0tLSAvZGV2L251bGwKKysrIGIv
SlNUZXN0cy9zdHJlc3Mvc3RyZXNzLWppdHRodW5rcy5qcwpAQCAtMCwwICsxLDIwIEBACit7Cisg
ICAgbGV0IGZ1bmN0aW9ucyA9IFtdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU1OyArK2kp
CisgICAgICAgIGZ1bmN0aW9ucy5wdXNoKCR2bS5jcmVhdGVFbXB0eUZ1bmN0aW9uV2l0aE5hbWUo
aSkpOworICAgIGxldCBuZXdHbG9iYWwgPSAkdm0uY3JlYXRlR2xvYmFsT2JqZWN0KCk7CisgICAg
bmV3R2xvYmFsLldlYWtNYXAucHJvdG90eXBlLnNldDsKKyAgICBuZXdHbG9iYWwuV2Vha01hcC5w
cm90b3R5cGUuc2V0ID0gbnVsbDsgLy8gUmVtb3ZlIHJlZmVyZW5jZSEKKyAgICAkdm0uZ2NTd2Vl
cEFzeW5jaHJvbm91c2x5KCk7IC8vIE1hcmsgV2Vha01hcCNzZXQgZGVhZCwgYnV0IHNpbmNlIHdl
IGhhdmUgc28gbWFueSBOYXRpdmVFeGVjdXRhYmxlcywgaXQgaXMgZGVhZCwgYnV0IHN0aWxsIGlu
IEpJVFRodW5rcy4KKyAgICBuZXdHbG9iYWwgPSAkdm0uY3JlYXRlR2xvYmFsT2JqZWN0KCk7Cisg
ICAgbGV0IHNldCA9IG5ld0dsb2JhbC5XZWFrTWFwLnByb3RvdHlwZS5zZXQ7IC8vIEFjY2Vzc2lu
ZyB0byBIYXNoVGFibGUsIHdoaWNoIGZvdW5kIGEgZGVhZCBwcmV2aW91cyBOYXRpdmVFeGVjdXRh
YmxlLCBhbmQgcmVwbGFjZSBpdCB3aXRoIG5ldyBvbmUuCisgICAgJHZtLmdjKCk7IC8vIFRoaXMg
ZG9lcyBub3QgaW52b2tlIGZpbmFsaXplciBmb3IgV2Vha01hcCNzZXQgc2luY2Ugd2UgYWxyZWFk
eSByZXBsYWNlZCBpdC4gQW5kIHByZXZpb3VzIG9uZSBpcyBmaW5hbGx5IGRlc3Ryb3llZC4KKyAg
ICB0cnkgeworICAgICAgICBzZXQoKTsgLy8gT2YgY291cnNlLCBpdCB3b3Jrcy4gSXQgaXMgdXNp
bmcgYSBuZXcgTmF0aXZlRXhlY3V0YWJsZSBmb3IgV2Vha01hcCNzZXQsIG5vdCB1c2luZyBkZWFk
IG9uZS4KKyAgICB9IGNhdGNoIHsgfTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlMzsgKytp
KQorICAgICAgICBmdW5jdGlvbnMucHVzaCgkdm0uY3JlYXRlRW1wdHlGdW5jdGlvbldpdGhOYW1l
KGkpKTsKKyAgICB0cnkgeworICAgICAgICBzZXQoKTsKKyAgICB9IGNhdGNoIHsgfTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390908</attachid>
            <date>2020-02-17 02:56:56 -0800</date>
            <delta_ts>2020-02-17 02:59:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207715-20200217025655.patch</filename>
            <type>text/plain</type>
            <size>24138</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2NzI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
ZDc5NzZiMmM5NDRiNDA5OWU1NWViZWU5ZjA5NzBkNWM2MDVhODQ0Li5kYzczYjhhYjMzN2JhY2Qz
MTA4ZjUyZTAwMzEyYTkzNWZmNDU5ZjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3OCBAQAorMjAyMC0wMi0xNyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIEpJVFRodW5rIHNob3VsZCBiZSBIYXNoU2V0PFdlYWs8TmF0aXZl
RXhlY3V0YWJsZT4+IHdpdGggYXBwcm9wcmlhdGUgR0Mgd2Vha25lc3MgaGFuZGxpbmcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzcxNQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVm
aW5lcyBKSVRUaHVua3MgR0MtYXdhcmUgV2VhayBoYXNoIG1hcCBmb3IgTmF0aXZlRXhlY3V0YWJs
ZS4gUHJldmlvdXNseSwgd2UgaGF2ZQorICAgICAgICBIYXNoTWFwPHN0ZDo6dHVwbGU8VGFnZ2Vk
TmF0aXZlRnVuY3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uLCBTdHJpbmc+LCBXZWFrPE5hdGl2
ZUV4ZWN1dGFibGU+PiB0YWJsZS4KKyAgICAgICAgQnV0IHRoaXMgaXMgbm90IGdvb2QgYmVjYXVz
ZSB0aGUgZmlyc3QgdHVwbGUncyBpbmZvcm1hdGlvbiBpcyBhbHJlYWR5IGluIE5hdGl2ZUV4ZWN1
dGFibGUuCisgICAgICAgIEJ1dCB3ZSB3ZXJlIHVzaW5nIHRoaXMgZGVzaWduIHNpbmNlIFdlYWs8
TmF0aXZlRXhlY3V0YWJsZT4gY2FuIGJlIG51bGxpZmllZCBiZWNhdXNlIG9mIFdlYWs8Pi4gSWYg
dGhpcworICAgICAgICBoYXBwZW5zLCB3ZSBjb3VsZCBoYXZlIGludmFsaWQgRW50cnkgaW4gSGFz
aE1hcCB3aGljaCBkb2VzIG5vdCBoYXZlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLiBUaGlzIHdpbGwK
KyAgICAgICAgY2F1c2UgY3Jhc2ggd2hlbiByZWhhc2luZyByZXF1aXJlcyBoYXNoIGNvZGUgZm9y
IHRoaXMgZW50cnkuCisKKyAgICAgICAgQnV0IHRoaXMgSGFzaE1hcCBpcyB2ZXJ5IGJhZCBpbiB0
ZXJtcyBvZiBtZW1vcnkgdXNhZ2UuIEVhY2ggZW50cnkgaGFzIDMyIGJ5dGVzLCBhbmQgdGhpcyB0
YWJsZSBnZXRzIGVub3VnaAorICAgICAgICBsYXJnZS4gV2UgaWRlbnRpZmllZCB0aGF0IHRoaXMg
dGFibGUgaXMgY29uc3VtaW5nIG11Y2ggbWVtb3J5IGluIE1lbWJ1c3Rlci4gU28gaXQgaXMgd29y
dGggZGVzaWduaW5nCisgICAgICAgIGNhcmVmdWxseSBjcmFmdGVkIGRhdGEgc3RydWN0dXJlIHdo
aWNoIG9ubHkgaG9sZHMgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiBieSBsZXZlcmFnaW5nIHRoZSBk
ZWVwIGludGVyYWN0aW9uCisgICAgICAgIHdpdGggb3VyIEdDIGltcGxlbWVudGF0aW9uLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBuZXcgZGVzaWduIG9mIEpJVFRodW5rcywgd2hp
Y2ggdXNlcyBIYXNoU2V0PFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4+IGFuZCBjYXJlZnVsbHkgY3Jh
ZnRlZAorICAgICAgICBIYXNoVHJhaXRzIC8gS2V5VHJhaXRzIHRvIGhhbmRsZSBXZWFrPD4gd2Vs
bC4KKworICAgICAgICAxLiBFYWNoIFdlYWsgc2hvdWxkIGhhdmUgZmluYWxpemVyLCBhbmQgdGhp
cyBmaW5hbGl6ZXIgc2hvdWxkIHJlbW92ZSBkZWFkIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4gZnJv
bSBIYXNoU2V0LgorCisgICAgICAgICAgICBUaGlzIGlzIGVuc3VyaW5nIHRoYXQgYWxsIHRoZSBr
ZXlzIGluIEhhc2hTZXQgaXMsIGV2ZW4gaWYgV2Vhazw+IGlzIHNheWluZyBpdCBpcyBEZWFkLCBp
dCBzdGlsbCBoYXMgYW4gd2F5CisgICAgICAgICAgICB0byBhY2Nlc3MgY29udGVudCBvZiBOYXRp
dmVFeGVjdXRhYmxlIGlmIHRoZSBjb250ZW50IGlzIG5vdCBhIEpTIG9iamVjdHMuIEZvciBleGFt
cGxlLCB3ZSBjYW4gZ2V0IGZ1bmN0aW9uCisgICAgICAgICAgICBwb2ludGVyIGZyb20gZGVhZCBX
ZWFrPE5hdGl2ZUV4ZWN1dGFibGU+IGlmIGl0IGlzIG5vdCB5ZXQgZmluYWxpemVkLiBTaW5jZSB3
ZSByZW1vdmUgYWxsIGZpbmFsaXplZCBXZWFrPD4KKyAgICAgICAgICAgIGZyb20gdGhlIHRhYmxl
LCB0aGlzIGZpbmFsaXplciBtZWNoYW5pc20gYWxsb3dzIHVzIHRvIGFjY2VzcyBmdW5jdGlvbiBw
b2ludGVycyBldGMuIGZyb20gV2VhazxOYXRpdmVFeGVjdXRhYmxlPgorICAgICAgICAgICAgc28g
bG9uZyBhcyBpdCBpcyBoZWxkIGluIHRoaXMgdGFibGUuCisKKyAgICAgICAgMi4gR2V0dGluZyBO
YXRpdmVFeGVjdXRhYmxlKiBmcm9tIEpJVFRodW5rcyBzaG91bGQgaGF2ZSBzcGVjaWFsIHByb3Rv
Y29sLgorCisgICAgICAgICAgICBXaGVuIGdldHRpbmcgTmF0aXZlRXhlY3V0YWJsZSogZnJvbSBK
SVRUaHVua3MsIHdlIGRvIHRoZSBmb2xsb3dpbmcsCisKKyAgICAgICAgICAgIDEuIEZpcnN0LCB3
ZSBjaGVjayB3ZSBoYXZlIGFuIEVudHJ5IGluIEpJVFRodW5rcy4gSWYgaXQgZG9lcyBub3QgZXhp
c3QsIHdlIHNob3VsZCBpbnNlcnQgaXQgYW55d2F5LgorICAgICAgICAgICAgICAgIDEuMS4gSWYg
aXQgZXhpc3RzLCB3ZSBzaG91bGQgY2hlY2sgd2hldGhlciB0aGlzIFdlYWs8TmF0aXZlRXhlY3V0
YWJsZT4gaXMgZGVhZCBvciBub3QuIEl0IGlzIHBvc3NpYmxlIHRoYXQKKyAgICAgICAgICAgICAg
ICAgICAgIGRlYWQgb25lIGlzIHN0aWxsIGluIHRoZSB0YWJsZSBiZWNhdXNlICJkZWFkIiBkb2Vz
IG5vdCBtZWFuIHRoYXQgaXQgaXMgImZpbmFsaXplZCIuIFVudGlsIGZpbmFsaXppbmcgaGFwcGVu
cyAoYW5kCisgICAgICAgICAgICAgICAgICAgICBpdCBjYW4gYmUgZGVsYXllZCBieSBpbmNyZW1l
bnRhbC1zd2VlcGVyKSwgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiBjYW4gYmUgZGVhZCBidXQgc3Rp
bGwgYWNjZXNzaWJsZS4gU28gdGhlIHRhYmxlCisgICAgICAgICAgICAgICAgICAgICBpcyBzdGls
bCBob2xkaW5nIGRlYWQgb25lLiBJZiB3ZSBnZXQgZGVhZCBvbmUsIHdlIHNob3VsZCBpbnNlcnQg
YSBuZXcgb25lLgorICAgICAgICAgICAgICAgIDEuMi4gSWYgaXQgaXMgbm90IGRlYWQsIHdlIHJl
dHVybiBpdC4KKyAgICAgICAgICAgIDIuIFNlY29uZCwgd2UgY3JlYXRlIGEgbmV3IE5hdGl2ZUV4
ZWN1dGFibGUgYW5kIGluc2VydCBpdC4gSW4gdGhhdCBjYXNlLCBpdCBpcyBwb3NzaWJsZSB0aGF0
IHRoZSB0YWJsZSBhbHJlYWR5IGhhcyBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+LAorICAgICAgICAg
ICAgICAgYnV0IGl0IGlzIGRlYWQuIEluIHRoYXQgY2FzZSwgd2UgbmVlZCB0byBleHBsaWNpdGx5
IHJlcGxhY2UgaXQgd2l0aCBuZXdseSBjcmVhdGVkIG9uZSBzaW5jZSBvbGQgb25lIGlzIGhvbGRp
bmcgb2xkIGNvbnRlbnQuIElmIHdlCisgICAgICAgICAgICAgICByZXBsYWNlZCwgZmluYWxpemVy
IG9mIFdlYWs8PiB3aWxsIG5vdCBiZSBpbnZva2VkIHNpbmNlIGl0IGltbWVkaWF0ZWx5IGRlYWxs
b2NhdGVzIFdlYWs8Pi4gU28sIGl0IGRvZXMgbm90IGhhcHBlbiB0aGF0IHRoaXMgbmV3bHkKKyAg
ICAgICAgICAgICAgIGluc2VydGVkIE5hdGl2ZUV4ZWN1dGFibGUqIGlzIHJlbW92ZWQgYnkgdGhl
IGZpbmFsaXplciByZWdpc3RlcmVkIGJ5IHRoZSBvbGQgV2Vhazw+LgorCisgICAgICAgIFRoaXMg
Y2hhbmdlIG1ha2VzIG1lbW9yeSB1c2FnZSBvZiBKSVRUaHVua3MgdGFibGUgMS80LgorCisgICAg
ICAgICogaGVhcC9XZWFrLmNwcDoKKyAgICAgICAgKEpTQzo6d2Vha0NsZWFyU2xvd0Nhc2UpOgor
ICAgICAgICAqIGhlYXAvV2Vhay5oOgorICAgICAgICAoSlNDOjpXZWFrOjpXZWFrKToKKyAgICAg
ICAgKEpTQzo6V2Vhazo6aXNIYXNoVGFibGVFbXB0eVZhbHVlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2Vhazo6dW5zYWZlSW1wbCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUcmFpdHM8SlND
OjpXZWFrPFQ+Pjo6aXNFbXB0eVZhbHVlKToKKyAgICAgICAgKiBoZWFwL1dlYWtJbmxpbmVzLmg6
CisgICAgICAgIChKU0M6OldlYWs8VD46OldlYWspOgorICAgICAgICAqIGppdC9KSVRUaHVua3Mu
Y3BwOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OkpJVFRodW5rcyk6CisgICAgICAgIChKU0M6
OkpJVFRodW5rczo6V2Vha05hdGl2ZUV4ZWN1dGFibGVIYXNoOjpoYXNoKToKKyAgICAgICAgKEpT
Qzo6SklUVGh1bmtzOjpXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g6OmVxdWFsKToKKyAgICAgICAg
KEpTQzo6SklUVGh1bmtzOjpIb3N0S2V5U2VhcmNoZXI6Omhhc2gpOgorICAgICAgICAoSlNDOjpK
SVRUaHVua3M6Okhvc3RLZXlTZWFyY2hlcjo6ZXF1YWwpOgorICAgICAgICAoSlNDOjpKSVRUaHVu
a3M6Ok5hdGl2ZUV4ZWN1dGFibGVUcmFuc2xhdG9yOjpoYXNoKToKKyAgICAgICAgKEpTQzo6SklU
VGh1bmtzOjpOYXRpdmVFeGVjdXRhYmxlVHJhbnNsYXRvcjo6ZXF1YWwpOgorICAgICAgICAoSlND
OjpKSVRUaHVua3M6Ok5hdGl2ZUV4ZWN1dGFibGVUcmFuc2xhdG9yOjp0cmFuc2xhdGUpOgorICAg
ICAgICAoSlNDOjpKSVRUaHVua3M6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtz
Ojpob3N0RnVuY3Rpb25TdHViKToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjbGVhckhvc3RG
dW5jdGlvblN0dWJzKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUVGh1bmtzLmg6CisgICAg
ICAgICogcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmg6CisgICAgICAgICogdG9vbHMvSlNEb2xs
YXJWTS5jcHA6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uR0NTd2VlcEFzeW5jaHJvbm91c2x5KToK
KyAgICAgICAgKEpTQzo6ZnVuY3Rpb25DcmVhdGVFbXB0eUZ1bmN0aW9uV2l0aE5hbWUpOgorICAg
ICAgICAoSlNDOjpKU0RvbGxhclZNOjpmaW5pc2hDcmVhdGlvbik6CisKIDIwMjAtMDItMTYgIEZ1
amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgUmVtb3Zl
IHJlbWFpbmluZyBXVEZfRVhQT1JUIGFuZCBXVEZfSU1QT1JUIGJ5IHJlcGxhY2luZyB0aGVtIHdp
dGggV1RGX0VYUE9SVF9ERUNMQVJBVElPTiBhbmQgV1RGX0lNUE9SVF9ERUNMQVJBVElPTgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vhay5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9XZWFrLmNwcAppbmRleCBhMzBiN2MwODU1Mzg0ZGQxNmYzMzM4OTE5
ZTNiMWM1NTczMGY0MjkxLi43ODFhODZkMzg3ODBiOWMwMDdiYTYwNzNiNDUzNWE1YmU2NDY3ZGZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmNwcApAQCAtMzYsNyArMzYsNyBAQCB2b2lk
IHdlYWtDbGVhclNsb3dDYXNlKFdlYWtJbXBsKiYgaW1wbCkKICAgICBBU1NFUlQoaW1wbCk7CiAK
ICAgICBXZWFrU2V0OjpkZWFsbG9jYXRlKGltcGwpOwotICAgIGltcGwgPSAwOworICAgIGltcGwg
PSBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1dlYWsuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dl
YWsuaAppbmRleCAwN2ZjZDI0NTM1NjIwZWMzZjE4N2UxYzlhYmVlMDllYzllMDM1ZmVjLi44MDQx
NTZkOTM5YTM1ZjE2OWY3OGU1ZTU2ZGJjYTY4MTYyMmQxOTdkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvV2Vhay5oCkBAIC00MiwyMyArNDIsMjAgQEAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3ZWFr
Q2xlYXJTbG93Q2FzZShXZWFrSW1wbComKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFdl
YWsgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYWspOwogcHVibGljOgotICAgIFdlYWso
KQotICAgICAgICA6IG1faW1wbCgwKQotICAgIHsKLSAgICB9CisgICAgV2VhaygpID0gZGVmYXVs
dDsKIAotICAgIFdlYWsoc3RkOjpudWxscHRyX3QpCi0gICAgICAgIDogbV9pbXBsKDApCisgICAg
Y29uc3RleHByIFdlYWsoc3RkOjpudWxscHRyX3QpCisgICAgICAgIDogV2VhaygpCiAgICAgewog
ICAgIH0KIAotICAgIGlubGluZSBXZWFrKFQqLCBXZWFrSGFuZGxlT3duZXIqID0gMCwgdm9pZCog
Y29udGV4dCA9IDApOworICAgIFdlYWsoVCosIFdlYWtIYW5kbGVPd25lciogPSBudWxscHRyLCB2
b2lkKiBjb250ZXh0ID0gbnVsbHB0cik7CiAKLSAgICBlbnVtIEhhc2hUYWJsZURlbGV0ZWRWYWx1
ZVRhZyB7IEhhc2hUYWJsZURlbGV0ZWRWYWx1ZSB9OwotICAgIGlubGluZSBib29sIGlzSGFzaFRh
YmxlRGVsZXRlZFZhbHVlKCkgY29uc3Q7Ci0gICAgaW5saW5lIFdlYWsoSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlVGFnKTsKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3Q7Cisg
ICAgV2VhayhXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpOworICAgIGNvbnN0ZXhwciBi
b29sIGlzSGFzaFRhYmxlRW1wdHlWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICFtX2ltcGw7IH0KIAot
ICAgIGlubGluZSBXZWFrKFdlYWsmJik7CisgICAgV2VhayhXZWFrJiYpOwogCiAgICAgfldlYWso
KQogICAgIHsKQEAgLTc5LDYgKzc2LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2Vh
ayB7CiAgICAgaW5saW5lIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdDsKIAogICAgIGlu
bGluZSBXZWFrSW1wbCogbGVha0ltcGwoKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgV2Vha0lt
cGwqIHVuc2FmZUltcGwoKSBjb25zdCB7IHJldHVybiBtX2ltcGw7IH0KICAgICB2b2lkIGNsZWFy
KCkKICAgICB7CiAgICAgICAgIGlmICghbV9pbXBsKQpAQCAtODksNyArODcsNyBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrIHsKIHByaXZhdGU6CiAgICAgc3RhdGljIGlubGluZSBX
ZWFrSW1wbCogaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7CiAKLSAgICBXZWFrSW1wbCogbV9pbXBs
OworICAgIFdlYWtJbXBsKiBtX2ltcGwgeyBudWxscHRyIH07CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKQEAgLTEwNiw2ICsxMDQsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFz
aFRyYWl0czxKU0M6OldlYWs8VD4+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQwogICAgIHR5
cGVkZWYgc3RkOjpudWxscHRyX3QgRW1wdHlWYWx1ZVR5cGU7CiAgICAgc3RhdGljIEVtcHR5VmFs
dWVUeXBlIGVtcHR5VmFsdWUoKSB7IHJldHVybiBudWxscHRyOyB9CiAKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaGFzSXNFbXB0eVZhbHVlRnVuY3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyBi
b29sIGlzRW1wdHlWYWx1ZShjb25zdCBKU0M6OldlYWs8VD4mIHZhbHVlKSB7IHJldHVybiB2YWx1
ZS5pc0hhc2hUYWJsZUVtcHR5VmFsdWUoKTsgfQorCiAgICAgdHlwZWRlZiBUKiBQZWVrVHlwZTsK
ICAgICBzdGF0aWMgUGVla1R5cGUgcGVlayhjb25zdCBTdG9yYWdlVHlwZSYgdmFsdWUpIHsgcmV0
dXJuIHZhbHVlLmdldCgpOyB9CiAgICAgc3RhdGljIFBlZWtUeXBlIHBlZWsoRW1wdHlWYWx1ZVR5
cGUpIHsgcmV0dXJuIFBlZWtUeXBlKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1dlYWtJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFr
SW5saW5lcy5oCmluZGV4IDBmN2Q1NjBiM2M5ZmQ3YTQ3OTJkYWY5OTMxMzg2MThlOTNhNzYxOTYu
LmNmNzk5NzE5NDA5YjUwM2RkOTNmYWQ3YTJlNjk3MTZmOTMwZjEyN2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvV2Vha0lubGluZXMuaApAQCAtNDEsNyArNDEsNyBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBXZWFrPFQ+Ojppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
IGNvbnN0CiAgICAgcmV0dXJuIG1faW1wbCA9PSBoYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFdlYWs8VD46OldlYWsodHlwZW5hbWUgV2Vh
azxUPjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVGFnKQordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIFdlYWs8VD46OldlYWsoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQogICAgIDog
bV9pbXBsKGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRUaHVua3MuY3BwCmluZGV4IDdmYjk4ODQwNDFiNTA2OTBmOTNjNGQyNWZkZTQ0MTcz
YWU4N2EwMzYuLmU1MjZhYTI5MzI5ODcyNDZlMTg3ZmNjNWQ2MjA5MDNkMzE0MDJmZTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAKQEAgLTM3LDcgKzM3LDYgQEAKIG5h
bWVzcGFjZSBKU0MgewogCiBKSVRUaHVua3M6OkpJVFRodW5rcygpCi0gICAgOiBtX2hvc3RGdW5j
dGlvblN0dWJNYXAobWFrZVVuaXF1ZTxIb3N0RnVuY3Rpb25TdHViTWFwPigpKQogewogfQogCkBA
IC00NSw2ICs0NCw2MyBAQCBKSVRUaHVua3M6On5KSVRUaHVua3MoKQogewogfQogCitpbmxpbmUg
dW5zaWduZWQgSklUVGh1bmtzOjpXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g6Omhhc2goY29uc3Qg
TmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSkKK3sKKyAgICByZXR1cm4gaGFzaChleGVjdXRh
YmxlLT5mdW5jdGlvbigpLCBleGVjdXRhYmxlLT5jb25zdHJ1Y3RvcigpLCBleGVjdXRhYmxlLT5u
YW1lKCkpOworfQorCitpbmxpbmUgdW5zaWduZWQgSklUVGh1bmtzOjpXZWFrTmF0aXZlRXhlY3V0
YWJsZUhhc2g6Omhhc2goY29uc3QgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiYga2V5KQoreworICAg
IC8vIFRoaXMgbmV2ZXIgZ2V0cyBEZWxldGVkIC8gRW1wdHkgc2xvdHMuCisgICAgV2Vha0ltcGwq
IGltcGwgPSBrZXkudW5zYWZlSW1wbCgpOworICAgIEFTU0VSVChpbXBsKTsKKyAgICAvLyBXZSBo
YXZlIGEgY2FsbGJhY2sgcmVtb3ZpbmcgZW50cnkgd2hlbiBmaW5hbGl6aW5nLiBUaGlzIG1lYW5z
IHRoYXQgd2UgbmV2ZXIgaG9sZCBEZWFsbG9jYXRlZCBlbnRyeSBpbiBIYXNoU2V0LgorICAgIEFT
U0VSVChpbXBsLT5zdGF0ZSgpICE9IFdlYWtJbXBsOjpTdGF0ZTo6RGVhbGxvY2F0ZWQpOworICAg
IC8vIE5ldmVyIHVzZSBqc0Nhc3QgaGVyZS4gVGhpcyBpcyBwb3NzaWJsZSB0aGF0IHRoaXMgdmFs
dWUgaXMgIkRlYWQiIGJ1dCBub3QgIkZpbmFsaXplZCIgeWV0LiBJbiB0aGlzIGNhc2UsCisgICAg
Ly8gd2UgY2FuIHN0aWxsIGFjY2VzcyB0byBub24tSlMgZGF0YSwgYXMgd2UgYXJlIGRvaW5nIGlu
IGEgZmluYWxpemUgY2FsbGJhY2suCisgICAgYXV0byogZXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0
PE5hdGl2ZUV4ZWN1dGFibGUqPihpbXBsLT5qc1ZhbHVlKCkuYXNDZWxsKCkpOworICAgIEFTU0VS
VChleGVjdXRhYmxlKTsKKyAgICByZXR1cm4gaGFzaChleGVjdXRhYmxlKTsKK30KKworaW5saW5l
IGJvb2wgSklUVGh1bmtzOjpXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g6OmVxdWFsKE5hdGl2ZUV4
ZWN1dGFibGUmIGEsIE5hdGl2ZUV4ZWN1dGFibGUmIGIpCit7CisgICAgaWYgKCZhID09ICZiKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gYS5mdW5jdGlvbigpID09IGIuZnVuY3Rp
b24oKSAmJiBhLmNvbnN0cnVjdG9yKCkgPT0gYi5jb25zdHJ1Y3RvcigpICYmIGEubmFtZSgpID09
IGIubmFtZSgpOworfQorCitpbmxpbmUgYm9vbCBKSVRUaHVua3M6OldlYWtOYXRpdmVFeGVjdXRh
YmxlSGFzaDo6ZXF1YWwoY29uc3QgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiYgYSwgY29uc3QgV2Vh
azxOYXRpdmVFeGVjdXRhYmxlPiYgYikKK3sKKyAgICAvLyBUaGlzIG5ldmVyIGdldHMgRGVsZXRl
ZCAvIEVtcHR5IHNsb3RzLiBBbmQgd2UgbmV2ZXIgZ2V0IERlYWxsb2NhdGVkIFdlYWsgZW50cnkg
dG9vLgorICAgIFdlYWtJbXBsKiBhSW1wbCA9IGEudW5zYWZlSW1wbCgpOworICAgIFdlYWtJbXBs
KiBiSW1wbCA9IGIudW5zYWZlSW1wbCgpOworICAgIEFTU0VSVChhSW1wbCk7CisgICAgQVNTRVJU
KGFJbXBsLT5zdGF0ZSgpICE9IFdlYWtJbXBsOjpTdGF0ZTo6RGVhbGxvY2F0ZWQpOworICAgIEFT
U0VSVChiSW1wbCk7CisgICAgQVNTRVJUKGJJbXBsLT5zdGF0ZSgpICE9IFdlYWtJbXBsOjpTdGF0
ZTo6RGVhbGxvY2F0ZWQpOworICAgIHJldHVybiBlcXVhbCgqc3RhdGljX2Nhc3Q8TmF0aXZlRXhl
Y3V0YWJsZSo+KGFJbXBsLT5qc1ZhbHVlKCkuYXNDZWxsKCkpLCAqc3RhdGljX2Nhc3Q8TmF0aXZl
RXhlY3V0YWJsZSo+KGJJbXBsLT5qc1ZhbHVlKCkuYXNDZWxsKCkpKTsKK30KKworaW5saW5lIGJv
b2wgSklUVGh1bmtzOjpXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g6OmVxdWFsKGNvbnN0IFdlYWs8
TmF0aXZlRXhlY3V0YWJsZT4mIGEsIE5hdGl2ZUV4ZWN1dGFibGUqIGJFeGVjdXRhYmxlKQorewor
ICAgIC8vIFRoaXMgbmV2ZXIgZ2V0cyBEZWxldGVkIC8gRW1wdHkgc2xvdHMuIEFuZCB3ZSBuZXZl
ciBnZXQgRGVhbGxvY2F0ZWQgV2VhayBlbnRyeSB0b28uCisgICAgYXV0byogYUltcGwgPSBhLnVu
c2FmZUltcGwoKTsKKyAgICBBU1NFUlQoYUltcGwpOworICAgIEFTU0VSVChhSW1wbC0+c3RhdGUo
KSAhPSBXZWFrSW1wbDo6U3RhdGU6OkRlYWxsb2NhdGVkKTsKKyAgICByZXR1cm4gZXF1YWwoKnN0
YXRpY19jYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihhSW1wbC0+anNWYWx1ZSgpLmFzQ2VsbCgpKSwg
KmJFeGVjdXRhYmxlKTsKK30KKworaW5saW5lIGJvb2wgSklUVGh1bmtzOjpXZWFrTmF0aXZlRXhl
Y3V0YWJsZUhhc2g6OmVxdWFsKGNvbnN0IFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4mIGEsIGNvbnN0
IEhvc3RGdW5jdGlvbktleSYgYikKK3sKKyAgICAvLyBUaGlzIG5ldmVyIGdldHMgRGVsZXRlZCAv
IEVtcHR5IHNsb3RzLiBBbmQgd2UgbmV2ZXIgZ2V0IERlYWxsb2NhdGVkIFdlYWsgZW50cnkgdG9v
LgorICAgIGF1dG8qIGFJbXBsID0gYS51bnNhZmVJbXBsKCk7CisgICAgQVNTRVJUKGFJbXBsKTsK
KyAgICBBU1NFUlQoYUltcGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OlN0YXRlOjpEZWFsbG9jYXRl
ZCk7CisgICAgYXV0byogYUV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxOYXRpdmVFeGVjdXRhYmxl
Kj4oYUltcGwtPmpzVmFsdWUoKS5hc0NlbGwoKSk7CisgICAgcmV0dXJuIGFFeGVjdXRhYmxlLT5m
dW5jdGlvbigpID09IHN0ZDo6Z2V0PDA+KGIpICYmIGFFeGVjdXRhYmxlLT5jb25zdHJ1Y3Rvcigp
ID09IHN0ZDo6Z2V0PDE+KGIpICYmIGFFeGVjdXRhYmxlLT5uYW1lKCkgPT0gc3RkOjpnZXQ8Mj4o
Yik7Cit9CisKIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtz
OjpjdGlOYXRpdmVDYWxsKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoVk06OmNhblVzZUpJVCgpKTsK
QEAgLTEwMiwxMCArMTU4LDMyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUVGh1bmtzOjpleGlzdGluZ0NUSVN0dWIoVGh1bmtHZW5lcmF0b3IKICAgICByZXR1cm4g
ZW50cnktPnZhbHVlOwogfQogCitzdHJ1Y3QgSklUVGh1bmtzOjpIb3N0S2V5U2VhcmNoZXIgewor
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEhvc3RGdW5jdGlvbktleSYga2V5KSB7IHJl
dHVybiBXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g6Omhhc2goa2V5KTsgfQorICAgIHN0YXRpYyBi
b29sIGVxdWFsKGNvbnN0IFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4mIGEsIGNvbnN0IEhvc3RGdW5j
dGlvbktleSYgYikgeyByZXR1cm4gV2Vha05hdGl2ZUV4ZWN1dGFibGVIYXNoOjplcXVhbChhLCBi
KTsgfQorfTsKKworc3RydWN0IEpJVFRodW5rczo6TmF0aXZlRXhlY3V0YWJsZVRyYW5zbGF0b3Ig
eworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IE5hdGl2ZUV4ZWN1dGFibGUqIGtleSkg
eyByZXR1cm4gV2Vha05hdGl2ZUV4ZWN1dGFibGVIYXNoOjpoYXNoKGtleSk7IH0KKyAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+JiBhLCBjb25zdCBOYXRp
dmVFeGVjdXRhYmxlKiBiKSB7IHJldHVybiBXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g6OmVxdWFs
KGEsIGIpOyB9CisgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFdlYWs8TmF0aXZlRXhlY3V0YWJs
ZT4mIGxvY2F0aW9uLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCB1bnNpZ25lZCkKKyAg
ICB7CisgICAgICAgIGxvY2F0aW9uID0gV2VhazxOYXRpdmVFeGVjdXRhYmxlPihleGVjdXRhYmxl
LCBleGVjdXRhYmxlLT52bSgpLmppdFN0dWJzLmdldCgpKTsKKyAgICB9Cit9OworCiB2b2lkIEpJ
VFRodW5rczo6ZmluYWxpemUoSGFuZGxlPFVua25vd24+IGhhbmRsZSwgdm9pZCopCiB7CiAgICAg
YXV0byogbmF0aXZlRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPiho
YW5kbGUuZ2V0KCkuYXNDZWxsKCkpOwotICAgIHdlYWtSZW1vdmUoKm1faG9zdEZ1bmN0aW9uU3R1
Yk1hcCwgc3RkOjptYWtlX3R1cGxlKG5hdGl2ZUV4ZWN1dGFibGUtPmZ1bmN0aW9uKCksIG5hdGl2
ZUV4ZWN1dGFibGUtPmNvbnN0cnVjdG9yKCksIG5hdGl2ZUV4ZWN1dGFibGUtPm5hbWUoKSksIG5h
dGl2ZUV4ZWN1dGFibGUpOworICAgIGF1dG8gaG9zdEZ1bmN0aW9uS2V5ID0gc3RkOjptYWtlX3R1
cGxlKG5hdGl2ZUV4ZWN1dGFibGUtPmZ1bmN0aW9uKCksIG5hdGl2ZUV4ZWN1dGFibGUtPmNvbnN0
cnVjdG9yKCksIG5hdGl2ZUV4ZWN1dGFibGUtPm5hbWUoKSk7CisgICAgeworICAgICAgICBEaXNh
bGxvd0dDIGRpc2FsbG93R0M7CisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX25hdGl2ZUV4ZWN1
dGFibGVTZXQuZmluZDxIb3N0S2V5U2VhcmNoZXI+KGhvc3RGdW5jdGlvbktleSk7CisgICAgICAg
IC8vIEJlY2F1c2UgdGhpcyBmaW5hbGl6ZXIgaXMgY2FsbGVkLCB0aGlzIG1lYW5zIHRoYXQgd2Ug
c3RpbGwgaGF2ZSBkZWFkIFdlYWs8PiBpbiBtX25hdGl2ZUV4ZWN1dGFibGVTZXQuCisgICAgICAg
IEFTU0VSVChpdGVyYXRvciAhPSBtX25hdGl2ZUV4ZWN1dGFibGVTZXQuZW5kKCkpOworICAgICAg
ICBBU1NFUlQoaXRlcmF0b3ItPnVuc2FmZUltcGwoKS0+c3RhdGUoKSA9PSBXZWFrSW1wbDo6U3Rh
dGU6OkZpbmFsaXplZCk7CisgICAgICAgIG1fbmF0aXZlRXhlY3V0YWJsZVNldC5yZW1vdmUoaXRl
cmF0b3IpOworICAgIH0KIH0KIAogTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVu
Y3Rpb25TdHViKFZNJiB2bSwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRhZ2dlZE5h
dGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBjb25zdCBTdHJpbmcmIG5hbWUpCkBAIC0xMTgsOCAr
MTk2LDE3IEBAIE5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1YihW
TSYgdm0sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0CiAgICAgQVNTRVJUKCFpc0NvbXBpbGF0
aW9uVGhyZWFkKCkpOyAgICAKICAgICBBU1NFUlQoVk06OmNhblVzZUpJVCgpKTsKIAotICAgIGlm
IChOYXRpdmVFeGVjdXRhYmxlKiBuYXRpdmVFeGVjdXRhYmxlID0gbV9ob3N0RnVuY3Rpb25TdHVi
TWFwLT5nZXQoc3RkOjptYWtlX3R1cGxlKGZ1bmN0aW9uLCBjb25zdHJ1Y3RvciwgbmFtZSkpKQot
ICAgICAgICByZXR1cm4gbmF0aXZlRXhlY3V0YWJsZTsKKyAgICBhdXRvIGhvc3RGdW5jdGlvbktl
eSA9IHN0ZDo6bWFrZV90dXBsZShmdW5jdGlvbiwgY29uc3RydWN0b3IsIG5hbWUpOworICAgIHsK
KyAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOworICAgICAgICBhdXRvIGl0ZXJhdG9yID0g
bV9uYXRpdmVFeGVjdXRhYmxlU2V0LmZpbmQ8SG9zdEtleVNlYXJjaGVyPihob3N0RnVuY3Rpb25L
ZXkpOworICAgICAgICBpZiAoaXRlcmF0b3IgIT0gbV9uYXRpdmVFeGVjdXRhYmxlU2V0LmVuZCgp
KSB7CisgICAgICAgICAgICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoaXMgcmV0dXJucyBXZWFr
PD4gd2hpY2ggaXMgRGVhZCwgYnV0IG5vdCBmaW5hbGl6ZWQuCisgICAgICAgICAgICAvLyBXZSBz
aG91bGQgbm90IHVzZSB0aGlzIHJlZmVyZW5jZSB0byBzdG9yZSB2YWx1ZSBjcmVhdGVkIGluIHRo
ZSBzdWJzZXF1ZW50IHNlcXVlbmNlLCBzaW5jZSBhbGxvY2F0aW5nIE5hdGl2ZUV4ZWN1dGFibGUg
Y2FuIGNhdXNlIEdDLCB3aGljaCBjaGFuZ2VzIHRoaXMgU2V0LgorICAgICAgICAgICAgaWYgKGF1
dG8qIGV4ZWN1dGFibGUgPSBpdGVyYXRvci0+Z2V0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGV4ZWN1dGFibGU7CisgICAgICAgIH0KKyAgICB9CiAKICAgICBSZWZQdHI8SklUQ29kZT4gZm9y
Q2FsbDsKICAgICBpZiAoZ2VuZXJhdG9yKSB7CkBAIC0xMzMsNyArMjIwLDIyIEBAIE5hdGl2ZUV4
ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1YihWTSYgdm0sIFRhZ2dlZE5hdGl2
ZUZ1bmN0aW9uIGZ1bmN0CiAgICAgUmVmPEpJVENvZGU+IGZvckNvbnN0cnVjdCA9IGFkb3B0UmVm
KCpuZXcgTmF0aXZlSklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz46
OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRpdmVDb25zdHJ1Y3Qodm0pLnJldGFnZ2Vk
PEpTRW50cnlQdHJUYWc+KCkpLCBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rLCBOb0ludHJpbnNpYykp
OwogICAgIAogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIG5hdGl2ZUV4ZWN1dGFibGUgPSBOYXRpdmVF
eGVjdXRhYmxlOjpjcmVhdGUodm0sIGZvckNhbGwucmVsZWFzZU5vbk51bGwoKSwgZnVuY3Rpb24s
IFdURk1vdmUoZm9yQ29uc3RydWN0KSwgY29uc3RydWN0b3IsIG5hbWUpOwotICAgIHdlYWtBZGQo
Km1faG9zdEZ1bmN0aW9uU3R1Yk1hcCwgc3RkOjptYWtlX3R1cGxlKGZ1bmN0aW9uLCBjb25zdHJ1
Y3RvciwgbmFtZSksIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4obmF0aXZlRXhlY3V0YWJsZSwgdGhp
cykpOworICAgIHsKKyAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOworICAgICAgICBhdXRv
IGFkZFJlc3VsdCA9IG1fbmF0aXZlRXhlY3V0YWJsZVNldC5hZGQ8TmF0aXZlRXhlY3V0YWJsZVRy
YW5zbGF0b3I+KG5hdGl2ZUV4ZWN1dGFibGUpOworICAgICAgICBpZiAoIWFkZFJlc3VsdC5pc05l
d0VudHJ5KSB7CisgICAgICAgICAgICAvLyBPdmVycmlkZSB0aGUgZXhpc3RpbmcgV2VhazxOYXRp
dmVFeGVjdXRhYmxlPiB3aXRoIHRoZSBuZXcgb25lIHNpbmNlIGl0IGlzIGRlYWQuCisgICAgICAg
ICAgICBBU1NFUlQoISphZGRSZXN1bHQuaXRlcmF0b3IpOworICAgICAgICAgICAgKmFkZFJlc3Vs
dC5pdGVyYXRvciA9IFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4obmF0aXZlRXhlY3V0YWJsZSwgdGhp
cyk7CisgICAgICAgICAgICBBU1NFUlQoKmFkZFJlc3VsdC5pdGVyYXRvcik7CisjaWYgQVNTRVJU
X0VOQUJMRUQKKyAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX25hdGl2ZUV4ZWN1dGFibGVT
ZXQuZmluZDxIb3N0S2V5U2VhcmNoZXI+KGhvc3RGdW5jdGlvbktleSk7CisgICAgICAgICAgICBB
U1NFUlQoaXRlcmF0b3IgIT0gbV9uYXRpdmVFeGVjdXRhYmxlU2V0LmVuZCgpKTsKKyAgICAgICAg
ICAgIEFTU0VSVChpdGVyYXRvci0+Z2V0KCkgPT0gbmF0aXZlRXhlY3V0YWJsZSk7CisgICAgICAg
ICAgICBBU1NFUlQoaXRlcmF0b3ItPnVuc2FmZUltcGwoKS0+c3RhdGUoKSA9PSBXZWFrSW1wbDo6
U3RhdGU6OkxpdmUpOworI2VuZGlmCisgICAgICAgIH0KKyAgICB9CiAgICAgcmV0dXJuIG5hdGl2
ZUV4ZWN1dGFibGU7CiB9CiAKQEAgLTE0MiwxMSArMjQ0LDYgQEAgTmF0aXZlRXhlY3V0YWJsZSog
SklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKFZNJiB2bSwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24g
ZnVuY3QKICAgICByZXR1cm4gaG9zdEZ1bmN0aW9uU3R1Yih2bSwgZnVuY3Rpb24sIGNhbGxIb3N0
RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBnZW5lcmF0b3IsIGludHJpbnNpYywgbnVsbHB0ciwgbmFt
ZSk7CiB9CiAKLXZvaWQgSklUVGh1bmtzOjpjbGVhckhvc3RGdW5jdGlvblN0dWJzKCkKLXsKLSAg
ICBtX2hvc3RGdW5jdGlvblN0dWJNYXAgPSBudWxscHRyOwotfQotCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFRodW5rcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVu
a3MuaAppbmRleCA0OGMyMGUzMzdkYzE0MmM4MzQzZTk2NTFlNjliZWI1ZjYzYjM5YTcyLi4wMjkw
MjdlOWQwZDVkZjFiZmQzZWUxNWZkNzEwNDBiNGI1ODkwY2YyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUVGh1bmtzLmgKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJXZWFrSGFuZGxl
T3duZXIuaCIKICNpbmNsdWRlIDx0dXBsZT4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgog
CiBuYW1lc3BhY2UgSlNDIHsKQEAgLTY1LDQ3ICs2Niw0OSBAQCBjbGFzcyBKSVRUaHVua3MgZmlu
YWwgOiBwcml2YXRlIFdlYWtIYW5kbGVPd25lciB7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogaG9z
dEZ1bmN0aW9uU3R1YihWTSYsIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uLCBUYWdnZWROYXRpdmVGdW5j
dGlvbiBjb25zdHJ1Y3RvciwgVGh1bmtHZW5lcmF0b3IsIEludHJpbnNpYywgY29uc3QgRE9NSklU
OjpTaWduYXR1cmUqLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIE5hdGl2ZUV4ZWN1dGFibGUq
IGhvc3RGdW5jdGlvblN0dWIoVk0mLCBUYWdnZWROYXRpdmVGdW5jdGlvbiwgVGh1bmtHZW5lcmF0
b3IsIEludHJpbnNpYywgY29uc3QgU3RyaW5nJiBuYW1lKTsKIAotICAgIHZvaWQgY2xlYXJIb3N0
RnVuY3Rpb25TdHVicygpOwotCiBwcml2YXRlOgogICAgIHZvaWQgZmluYWxpemUoSGFuZGxlPFVu
a25vd24+LCB2b2lkKiBjb250ZXh0KSBvdmVycmlkZTsKICAgICAKICAgICB0eXBlZGVmIEhhc2hN
YXA8VGh1bmtHZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4+
IENUSVN0dWJNYXA7CiAgICAgQ1RJU3R1Yk1hcCBtX2N0aVN0dWJNYXA7CiAKLSAgICB0eXBlZGVm
IHN0ZDo6dHVwbGU8VGFnZ2VkTmF0aXZlRnVuY3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uLCBT
dHJpbmc+IEhvc3RGdW5jdGlvbktleTsKKyAgICB1c2luZyBIb3N0RnVuY3Rpb25LZXkgPSBzdGQ6
OnR1cGxlPFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uLCBUYWdnZWROYXRpdmVGdW5jdGlvbiwgU3RyaW5n
PjsKIAotICAgIHN0cnVjdCBIb3N0RnVuY3Rpb25IYXNoIHsKKyAgICBzdHJ1Y3QgV2Vha05hdGl2
ZUV4ZWN1dGFibGVIYXNoIHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgV2Vh
azxOYXRpdmVFeGVjdXRhYmxlPiYpOworICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25z
dCBOYXRpdmVFeGVjdXRhYmxlKik7CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IEhvc3RGdW5jdGlvbktleSYga2V5KQogICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBo
YXNoID0gV1RGOjpwYWlySW50SGFzaChoYXNoUG9pbnRlcihzdGQ6OmdldDwwPihrZXkpKSwgaGFz
aFBvaW50ZXIoc3RkOjpnZXQ8MT4oa2V5KSkpOwotICAgICAgICAgICAgaWYgKCFzdGQ6OmdldDwy
PihrZXkpLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIGhhc2ggPSBXVEY6OnBhaXJJbnRIYXNo
KGhhc2gsIERlZmF1bHRIYXNoPFN0cmluZz46Okhhc2g6Omhhc2goc3RkOjpnZXQ8Mj4oa2V5KSkp
OwotICAgICAgICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3QgSG9zdEZ1bmN0aW9uS2V5JiBhLCBjb25zdCBIb3N0RnVuY3Rpb25LZXkm
IGIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAoc3RkOjpnZXQ8MD4oYSkgPT0gc3Rk
OjpnZXQ8MD4oYikpICYmIChzdGQ6OmdldDwxPihhKSA9PSBzdGQ6OmdldDwxPihiKSkgJiYgKHN0
ZDo6Z2V0PDI+KGEpID09IHN0ZDo6Z2V0PDI+KGIpKTsKKyAgICAgICAgICAgIHJldHVybiBoYXNo
KHN0ZDo6Z2V0PDA+KGtleSksIHN0ZDo6Z2V0PDE+KGtleSksIHN0ZDo6Z2V0PDI+KGtleSkpOwog
ICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9F
bXB0eU9yRGVsZXRlZCA9IHRydWU7CisKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3Qg
V2VhazxOYXRpdmVFeGVjdXRhYmxlPiYsIGNvbnN0IFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4mKTsK
KyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiYs
IGNvbnN0IEhvc3RGdW5jdGlvbktleSYpOworICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+JiwgTmF0aXZlRXhlY3V0YWJsZSopOworICAgICAgICBz
dGF0aWMgYm9vbCBlcXVhbChOYXRpdmVFeGVjdXRhYmxlJiwgTmF0aXZlRXhlY3V0YWJsZSYpOwor
ICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0
ZWQgPSBmYWxzZTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBpbmxpbmUgdW5zaWdu
ZWQgaGFzaFBvaW50ZXIoVGFnZ2VkTmF0aXZlRnVuY3Rpb24gcCkKICAgICAgICAgewogICAgICAg
ICAgICAgcmV0dXJuIERlZmF1bHRIYXNoPFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uPjo6SGFzaDo6aGFz
aChwKTsKICAgICAgICAgfQotICAgIH07CiAKLSAgICBzdHJ1Y3QgSG9zdEZ1bmN0aW9uSGFzaFRy
YWl0IDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxIb3N0RnVuY3Rpb25LZXk+IHsKLSAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOwotICAgICAgICBz
dGF0aWMgRW1wdHlWYWx1ZVR5cGUgZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIHN0ZDo6bWFrZV90dXBs
ZShudWxscHRyLCBudWxscHRyLCBTdHJpbmcoKSk7IH0KLQotICAgICAgICBzdGF0aWMgdm9pZCBj
b25zdHJ1Y3REZWxldGVkVmFsdWUoSG9zdEZ1bmN0aW9uS2V5JiBzbG90KSB7IHN0ZDo6Z2V0PDA+
KHNsb3QpID0gVGFnZ2VkTmF0aXZlRnVuY3Rpb24oLTEpOyB9Ci0gICAgICAgIHN0YXRpYyBib29s
IGlzRGVsZXRlZFZhbHVlKGNvbnN0IEhvc3RGdW5jdGlvbktleSYgdmFsdWUpIHsgcmV0dXJuIHN0
ZDo6Z2V0PDA+KHZhbHVlKSA9PSBUYWdnZWROYXRpdmVGdW5jdGlvbigtMSk7IH0KKyAgICAgICAg
c3RhdGljIHVuc2lnbmVkIGhhc2goVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRhZ2dl
ZE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBVc2UgV1RGOjpjb21wdXRlSGFzaC4KKyAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc4MzUKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGhhc2ggPSBXVEY6OnBhaXJJbnRIYXNoKGhhc2hQb2ludGVyKGZ1
bmN0aW9uKSwgaGFzaFBvaW50ZXIoY29uc3RydWN0b3IpKTsKKyAgICAgICAgICAgIGlmICghbmFt
ZS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICBoYXNoID0gV1RGOjpwYWlySW50SGFzaChoYXNo
LCBEZWZhdWx0SGFzaDxTdHJpbmc+OjpIYXNoOjpoYXNoKG5hbWUpKTsKKyAgICAgICAgICAgIHJl
dHVybiBoYXNoOworICAgICAgICB9CiAgICAgfTsKLSAgICAKLSAgICB0eXBlZGVmIEhhc2hNYXA8
SG9zdEZ1bmN0aW9uS2V5LCBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+LCBIb3N0RnVuY3Rpb25IYXNo
LCBIb3N0RnVuY3Rpb25IYXNoVHJhaXQ+IEhvc3RGdW5jdGlvblN0dWJNYXA7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPEhvc3RGdW5jdGlvblN0dWJNYXA+IG1faG9zdEZ1bmN0aW9uU3R1Yk1hcDsKKyAg
ICBzdHJ1Y3QgSG9zdEtleVNlYXJjaGVyOworICAgIHN0cnVjdCBOYXRpdmVFeGVjdXRhYmxlVHJh
bnNsYXRvcjsKKworICAgIHVzaW5nIFdlYWtOYXRpdmVFeGVjdXRhYmxlU2V0ID0gSGFzaFNldDxX
ZWFrPE5hdGl2ZUV4ZWN1dGFibGU+LCBXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g+OworICAgIFdl
YWtOYXRpdmVFeGVjdXRhYmxlU2V0IG1fbmF0aXZlRXhlY3V0YWJsZVNldDsKICAgICBMb2NrIG1f
bG9jazsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05h
dGl2ZUV4ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4
ZWN1dGFibGUuaAppbmRleCAyZTNmNTQyM2YyNWQ0NDAwOTM0NWQ3YWY5ZGUzNjEwMjhhYTA2OTU0
Li45ZjA0M2ZhZDJlNjNhYWJlNGJiNjJiNWFkNzQ4ZmViZDZmZjRlNTJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5oCkBAIC00OCw4ICs0
OCw4IEBAIGNsYXNzIE5hdGl2ZUV4ZWN1dGFibGUgZmluYWwgOiBwdWJsaWMgRXhlY3V0YWJsZUJh
c2UgewogCiAgICAgQ29kZUJsb2NrSGFzaCBoYXNoRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQp
IGNvbnN0OwogCi0gICAgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24oKSB7IHJldHVybiBt
X2Z1bmN0aW9uOyB9Ci0gICAgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IoKSB7IHJl
dHVybiBtX2NvbnN0cnVjdG9yOyB9CisgICAgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24o
KSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uOyB9CisgICAgVGFnZ2VkTmF0aXZlRnVuY3Rpb24g
Y29uc3RydWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0cnVjdG9yOyB9CiAgICAgICAgIAog
ICAgIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uRm9yKENvZGVTcGVjaWFsaXph
dGlvbktpbmQga2luZCkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
dG9vbHMvSlNEb2xsYXJWTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xs
YXJWTS5jcHAKaW5kZXggZGZmMWRmMTlhYzg0YTllZDM2NGI1OTdkNWRkOWQwNDFiZWM0NzhiMy4u
OWE3ZjQ5YTE0MDUzYTA4MjdkYmFlMzUyZDI4ZjUwMzYwN2ZmNmNkNyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcApAQCAtMTY5OSw2ICsxNjk5LDE1IEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRWRlbkdDKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIH0KIAorLy8gUnVucyBhIGZ1bGwgR0MsIGJ1dCBzd2VlcCBhc3luY2hyb25vdXNs
eS4KKy8vIFVzYWdlOiAkdm0uZ2NTd2VlcEFzeW5jaHJvbm91c2x5KCkKK3N0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR0NTd2VlcEFzeW5jaHJvbm91c2x5KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSopCit7CisgICAgRG9sbGFyVk1Bc3Nl
cnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBnbG9iYWxPYmplY3QtPnZtKCkuaGVhcC5jb2xsZWN0
Tm93KEFzeW5jLCBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKIC8vIER1bXBzIHRoZSBoYXNoZXMgb2YgYWxsIHN1
YnNwYWNlcyBjdXJyZW50bHkgcmVnaXN0ZXJlZCB3aXRoIHRoZSBWTS4KIC8vIFVzYWdlOiAkdm0u
ZHVtcFN1YnNwYWNlSGFzaGVzKCkKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uRHVtcFN1YnNwYWNlSGFzaGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSopCkBAIC0yMzA3LDYgKzIzMTYsMTkgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVPYmplY3REb2luZ1NpZGVFZmZlY3RQdXRXaXRo
b3UKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKK3N0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRW1wdHlGdW5jdGlvbldpdGhO
YW1lKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQor
eworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBjb25zdCBTdHJpbmcgbmFtZSA9
IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKworICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKEpTRnVuY3Rpb246OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCAxLCBuYW1lLCBmdW5jdGlvbkNyZWF0ZUVtcHR5RnVuY3Rpb25XaXRo
TmFtZSkpKTsKK30KKwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25TZXRJbXB1cmVHZXR0ZXJEZWxlZ2F0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNj
b3BlOwpAQCAtMjg2Myw2ICsyODg1LDcgQEAgdm9pZCBKU0RvbGxhclZNOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0pCiAgICAgYWRkRnVuY3Rpb24odm0sICJub0lubGluZSIsIGZ1bmN0aW9uTm9Jbmxp
bmUsIDEpOwogCiAgICAgYWRkRnVuY3Rpb24odm0sICJnYyIsIGZ1bmN0aW9uR0MsIDApOworICAg
IGFkZEZ1bmN0aW9uKHZtLCAiZ2NTd2VlcEFzeW5jaHJvbm91c2x5IiwgZnVuY3Rpb25HQ1N3ZWVw
QXN5bmNocm9ub3VzbHksIDApOwogICAgIGFkZEZ1bmN0aW9uKHZtLCAiZWRlbkdDIiwgZnVuY3Rp
b25FZGVuR0MsIDApOwogICAgIGFkZEZ1bmN0aW9uKHZtLCAiZHVtcFN1YnNwYWNlSGFzaGVzIiwg
ZnVuY3Rpb25EdW1wU3Vic3BhY2VIYXNoZXMsIDApOwogCkBAIC0yOTA5LDYgKzI5MzIsNyBAQCB2
b2lkIEpTRG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICNlbmRpZgogICAgIGFkZEZ1
bmN0aW9uKHZtLCAiY3JlYXRlU3RhdGljQ3VzdG9tQWNjZXNzb3IiLCBmdW5jdGlvbkNyZWF0ZVN0
YXRpY0N1c3RvbUFjY2Vzc29yLCAwKTsKICAgICBhZGRGdW5jdGlvbih2bSwgImNyZWF0ZU9iamVj
dERvaW5nU2lkZUVmZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1cyIsIGZ1bmN0aW9uQ3Jl
YXRlT2JqZWN0RG9pbmdTaWRlRWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzLCAwKTsK
KyAgICBhZGRGdW5jdGlvbih2bSwgImNyZWF0ZUVtcHR5RnVuY3Rpb25XaXRoTmFtZSIsIGZ1bmN0
aW9uQ3JlYXRlRW1wdHlGdW5jdGlvbldpdGhOYW1lLCAxKTsKICAgICBhZGRGdW5jdGlvbih2bSwg
ImdldFByaXZhdGVQcm9wZXJ0eSIsIGZ1bmN0aW9uR2V0UHJpdmF0ZVByb3BlcnR5LCAyKTsKICAg
ICBhZGRGdW5jdGlvbih2bSwgInNldEltcHVyZUdldHRlckRlbGVnYXRlIiwgZnVuY3Rpb25TZXRJ
bXB1cmVHZXR0ZXJEZWxlZ2F0ZSwgMik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390910</attachid>
            <date>2020-02-17 02:59:59 -0800</date>
            <delta_ts>2020-02-17 12:24:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207715-20200217025959.patch</filename>
            <type>text/plain</type>
            <size>26096</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2NzI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
ZDc5NzZiMmM5NDRiNDA5OWU1NWViZWU5ZjA5NzBkNWM2MDVhODQ0Li5kYzczYjhhYjMzN2JhY2Qz
MTA4ZjUyZTAwMzEyYTkzNWZmNDU5ZjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3OCBAQAorMjAyMC0wMi0xNyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIEpJVFRodW5rIHNob3VsZCBiZSBIYXNoU2V0PFdlYWs8TmF0aXZl
RXhlY3V0YWJsZT4+IHdpdGggYXBwcm9wcmlhdGUgR0Mgd2Vha25lc3MgaGFuZGxpbmcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzcxNQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVm
aW5lcyBKSVRUaHVua3MgR0MtYXdhcmUgV2VhayBoYXNoIG1hcCBmb3IgTmF0aXZlRXhlY3V0YWJs
ZS4gUHJldmlvdXNseSwgd2UgaGF2ZQorICAgICAgICBIYXNoTWFwPHN0ZDo6dHVwbGU8VGFnZ2Vk
TmF0aXZlRnVuY3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uLCBTdHJpbmc+LCBXZWFrPE5hdGl2
ZUV4ZWN1dGFibGU+PiB0YWJsZS4KKyAgICAgICAgQnV0IHRoaXMgaXMgbm90IGdvb2QgYmVjYXVz
ZSB0aGUgZmlyc3QgdHVwbGUncyBpbmZvcm1hdGlvbiBpcyBhbHJlYWR5IGluIE5hdGl2ZUV4ZWN1
dGFibGUuCisgICAgICAgIEJ1dCB3ZSB3ZXJlIHVzaW5nIHRoaXMgZGVzaWduIHNpbmNlIFdlYWs8
TmF0aXZlRXhlY3V0YWJsZT4gY2FuIGJlIG51bGxpZmllZCBiZWNhdXNlIG9mIFdlYWs8Pi4gSWYg
dGhpcworICAgICAgICBoYXBwZW5zLCB3ZSBjb3VsZCBoYXZlIGludmFsaWQgRW50cnkgaW4gSGFz
aE1hcCB3aGljaCBkb2VzIG5vdCBoYXZlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLiBUaGlzIHdpbGwK
KyAgICAgICAgY2F1c2UgY3Jhc2ggd2hlbiByZWhhc2luZyByZXF1aXJlcyBoYXNoIGNvZGUgZm9y
IHRoaXMgZW50cnkuCisKKyAgICAgICAgQnV0IHRoaXMgSGFzaE1hcCBpcyB2ZXJ5IGJhZCBpbiB0
ZXJtcyBvZiBtZW1vcnkgdXNhZ2UuIEVhY2ggZW50cnkgaGFzIDMyIGJ5dGVzLCBhbmQgdGhpcyB0
YWJsZSBnZXRzIGVub3VnaAorICAgICAgICBsYXJnZS4gV2UgaWRlbnRpZmllZCB0aGF0IHRoaXMg
dGFibGUgaXMgY29uc3VtaW5nIG11Y2ggbWVtb3J5IGluIE1lbWJ1c3Rlci4gU28gaXQgaXMgd29y
dGggZGVzaWduaW5nCisgICAgICAgIGNhcmVmdWxseSBjcmFmdGVkIGRhdGEgc3RydWN0dXJlIHdo
aWNoIG9ubHkgaG9sZHMgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiBieSBsZXZlcmFnaW5nIHRoZSBk
ZWVwIGludGVyYWN0aW9uCisgICAgICAgIHdpdGggb3VyIEdDIGltcGxlbWVudGF0aW9uLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBuZXcgZGVzaWduIG9mIEpJVFRodW5rcywgd2hp
Y2ggdXNlcyBIYXNoU2V0PFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4+IGFuZCBjYXJlZnVsbHkgY3Jh
ZnRlZAorICAgICAgICBIYXNoVHJhaXRzIC8gS2V5VHJhaXRzIHRvIGhhbmRsZSBXZWFrPD4gd2Vs
bC4KKworICAgICAgICAxLiBFYWNoIFdlYWsgc2hvdWxkIGhhdmUgZmluYWxpemVyLCBhbmQgdGhp
cyBmaW5hbGl6ZXIgc2hvdWxkIHJlbW92ZSBkZWFkIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4gZnJv
bSBIYXNoU2V0LgorCisgICAgICAgICAgICBUaGlzIGlzIGVuc3VyaW5nIHRoYXQgYWxsIHRoZSBr
ZXlzIGluIEhhc2hTZXQgaXMsIGV2ZW4gaWYgV2Vhazw+IGlzIHNheWluZyBpdCBpcyBEZWFkLCBp
dCBzdGlsbCBoYXMgYW4gd2F5CisgICAgICAgICAgICB0byBhY2Nlc3MgY29udGVudCBvZiBOYXRp
dmVFeGVjdXRhYmxlIGlmIHRoZSBjb250ZW50IGlzIG5vdCBhIEpTIG9iamVjdHMuIEZvciBleGFt
cGxlLCB3ZSBjYW4gZ2V0IGZ1bmN0aW9uCisgICAgICAgICAgICBwb2ludGVyIGZyb20gZGVhZCBX
ZWFrPE5hdGl2ZUV4ZWN1dGFibGU+IGlmIGl0IGlzIG5vdCB5ZXQgZmluYWxpemVkLiBTaW5jZSB3
ZSByZW1vdmUgYWxsIGZpbmFsaXplZCBXZWFrPD4KKyAgICAgICAgICAgIGZyb20gdGhlIHRhYmxl
LCB0aGlzIGZpbmFsaXplciBtZWNoYW5pc20gYWxsb3dzIHVzIHRvIGFjY2VzcyBmdW5jdGlvbiBw
b2ludGVycyBldGMuIGZyb20gV2VhazxOYXRpdmVFeGVjdXRhYmxlPgorICAgICAgICAgICAgc28g
bG9uZyBhcyBpdCBpcyBoZWxkIGluIHRoaXMgdGFibGUuCisKKyAgICAgICAgMi4gR2V0dGluZyBO
YXRpdmVFeGVjdXRhYmxlKiBmcm9tIEpJVFRodW5rcyBzaG91bGQgaGF2ZSBzcGVjaWFsIHByb3Rv
Y29sLgorCisgICAgICAgICAgICBXaGVuIGdldHRpbmcgTmF0aXZlRXhlY3V0YWJsZSogZnJvbSBK
SVRUaHVua3MsIHdlIGRvIHRoZSBmb2xsb3dpbmcsCisKKyAgICAgICAgICAgIDEuIEZpcnN0LCB3
ZSBjaGVjayB3ZSBoYXZlIGFuIEVudHJ5IGluIEpJVFRodW5rcy4gSWYgaXQgZG9lcyBub3QgZXhp
c3QsIHdlIHNob3VsZCBpbnNlcnQgaXQgYW55d2F5LgorICAgICAgICAgICAgICAgIDEuMS4gSWYg
aXQgZXhpc3RzLCB3ZSBzaG91bGQgY2hlY2sgd2hldGhlciB0aGlzIFdlYWs8TmF0aXZlRXhlY3V0
YWJsZT4gaXMgZGVhZCBvciBub3QuIEl0IGlzIHBvc3NpYmxlIHRoYXQKKyAgICAgICAgICAgICAg
ICAgICAgIGRlYWQgb25lIGlzIHN0aWxsIGluIHRoZSB0YWJsZSBiZWNhdXNlICJkZWFkIiBkb2Vz
IG5vdCBtZWFuIHRoYXQgaXQgaXMgImZpbmFsaXplZCIuIFVudGlsIGZpbmFsaXppbmcgaGFwcGVu
cyAoYW5kCisgICAgICAgICAgICAgICAgICAgICBpdCBjYW4gYmUgZGVsYXllZCBieSBpbmNyZW1l
bnRhbC1zd2VlcGVyKSwgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiBjYW4gYmUgZGVhZCBidXQgc3Rp
bGwgYWNjZXNzaWJsZS4gU28gdGhlIHRhYmxlCisgICAgICAgICAgICAgICAgICAgICBpcyBzdGls
bCBob2xkaW5nIGRlYWQgb25lLiBJZiB3ZSBnZXQgZGVhZCBvbmUsIHdlIHNob3VsZCBpbnNlcnQg
YSBuZXcgb25lLgorICAgICAgICAgICAgICAgIDEuMi4gSWYgaXQgaXMgbm90IGRlYWQsIHdlIHJl
dHVybiBpdC4KKyAgICAgICAgICAgIDIuIFNlY29uZCwgd2UgY3JlYXRlIGEgbmV3IE5hdGl2ZUV4
ZWN1dGFibGUgYW5kIGluc2VydCBpdC4gSW4gdGhhdCBjYXNlLCBpdCBpcyBwb3NzaWJsZSB0aGF0
IHRoZSB0YWJsZSBhbHJlYWR5IGhhcyBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+LAorICAgICAgICAg
ICAgICAgYnV0IGl0IGlzIGRlYWQuIEluIHRoYXQgY2FzZSwgd2UgbmVlZCB0byBleHBsaWNpdGx5
IHJlcGxhY2UgaXQgd2l0aCBuZXdseSBjcmVhdGVkIG9uZSBzaW5jZSBvbGQgb25lIGlzIGhvbGRp
bmcgb2xkIGNvbnRlbnQuIElmIHdlCisgICAgICAgICAgICAgICByZXBsYWNlZCwgZmluYWxpemVy
IG9mIFdlYWs8PiB3aWxsIG5vdCBiZSBpbnZva2VkIHNpbmNlIGl0IGltbWVkaWF0ZWx5IGRlYWxs
b2NhdGVzIFdlYWs8Pi4gU28sIGl0IGRvZXMgbm90IGhhcHBlbiB0aGF0IHRoaXMgbmV3bHkKKyAg
ICAgICAgICAgICAgIGluc2VydGVkIE5hdGl2ZUV4ZWN1dGFibGUqIGlzIHJlbW92ZWQgYnkgdGhl
IGZpbmFsaXplciByZWdpc3RlcmVkIGJ5IHRoZSBvbGQgV2Vhazw+LgorCisgICAgICAgIFRoaXMg
Y2hhbmdlIG1ha2VzIG1lbW9yeSB1c2FnZSBvZiBKSVRUaHVua3MgdGFibGUgMS80LgorCisgICAg
ICAgICogaGVhcC9XZWFrLmNwcDoKKyAgICAgICAgKEpTQzo6d2Vha0NsZWFyU2xvd0Nhc2UpOgor
ICAgICAgICAqIGhlYXAvV2Vhay5oOgorICAgICAgICAoSlNDOjpXZWFrOjpXZWFrKToKKyAgICAg
ICAgKEpTQzo6V2Vhazo6aXNIYXNoVGFibGVFbXB0eVZhbHVlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6V2Vhazo6dW5zYWZlSW1wbCBjb25zdCk6CisgICAgICAgIChXVEY6Okhhc2hUcmFpdHM8SlND
OjpXZWFrPFQ+Pjo6aXNFbXB0eVZhbHVlKToKKyAgICAgICAgKiBoZWFwL1dlYWtJbmxpbmVzLmg6
CisgICAgICAgIChKU0M6OldlYWs8VD46OldlYWspOgorICAgICAgICAqIGppdC9KSVRUaHVua3Mu
Y3BwOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OkpJVFRodW5rcyk6CisgICAgICAgIChKU0M6
OkpJVFRodW5rczo6V2Vha05hdGl2ZUV4ZWN1dGFibGVIYXNoOjpoYXNoKToKKyAgICAgICAgKEpT
Qzo6SklUVGh1bmtzOjpXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g6OmVxdWFsKToKKyAgICAgICAg
KEpTQzo6SklUVGh1bmtzOjpIb3N0S2V5U2VhcmNoZXI6Omhhc2gpOgorICAgICAgICAoSlNDOjpK
SVRUaHVua3M6Okhvc3RLZXlTZWFyY2hlcjo6ZXF1YWwpOgorICAgICAgICAoSlNDOjpKSVRUaHVu
a3M6Ok5hdGl2ZUV4ZWN1dGFibGVUcmFuc2xhdG9yOjpoYXNoKToKKyAgICAgICAgKEpTQzo6SklU
VGh1bmtzOjpOYXRpdmVFeGVjdXRhYmxlVHJhbnNsYXRvcjo6ZXF1YWwpOgorICAgICAgICAoSlND
OjpKSVRUaHVua3M6Ok5hdGl2ZUV4ZWN1dGFibGVUcmFuc2xhdG9yOjp0cmFuc2xhdGUpOgorICAg
ICAgICAoSlNDOjpKSVRUaHVua3M6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtz
Ojpob3N0RnVuY3Rpb25TdHViKToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjbGVhckhvc3RG
dW5jdGlvblN0dWJzKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUVGh1bmtzLmg6CisgICAg
ICAgICogcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmg6CisgICAgICAgICogdG9vbHMvSlNEb2xs
YXJWTS5jcHA6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uR0NTd2VlcEFzeW5jaHJvbm91c2x5KToK
KyAgICAgICAgKEpTQzo6ZnVuY3Rpb25DcmVhdGVFbXB0eUZ1bmN0aW9uV2l0aE5hbWUpOgorICAg
ICAgICAoSlNDOjpKU0RvbGxhclZNOjpmaW5pc2hDcmVhdGlvbik6CisKIDIwMjAtMDItMTYgIEZ1
amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgUmVtb3Zl
IHJlbWFpbmluZyBXVEZfRVhQT1JUIGFuZCBXVEZfSU1QT1JUIGJ5IHJlcGxhY2luZyB0aGVtIHdp
dGggV1RGX0VYUE9SVF9ERUNMQVJBVElPTiBhbmQgV1RGX0lNUE9SVF9ERUNMQVJBVElPTgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vhay5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9XZWFrLmNwcAppbmRleCBhMzBiN2MwODU1Mzg0ZGQxNmYzMzM4OTE5
ZTNiMWM1NTczMGY0MjkxLi43ODFhODZkMzg3ODBiOWMwMDdiYTYwNzNiNDUzNWE1YmU2NDY3ZGZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmNwcApAQCAtMzYsNyArMzYsNyBAQCB2b2lk
IHdlYWtDbGVhclNsb3dDYXNlKFdlYWtJbXBsKiYgaW1wbCkKICAgICBBU1NFUlQoaW1wbCk7CiAK
ICAgICBXZWFrU2V0OjpkZWFsbG9jYXRlKGltcGwpOwotICAgIGltcGwgPSAwOworICAgIGltcGwg
PSBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1dlYWsuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dl
YWsuaAppbmRleCAwN2ZjZDI0NTM1NjIwZWMzZjE4N2UxYzlhYmVlMDllYzllMDM1ZmVjLi44MDQx
NTZkOTM5YTM1ZjE2OWY3OGU1ZTU2ZGJjYTY4MTYyMmQxOTdkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvV2Vhay5oCkBAIC00MiwyMyArNDIsMjAgQEAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3ZWFr
Q2xlYXJTbG93Q2FzZShXZWFrSW1wbComKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFdl
YWsgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYWspOwogcHVibGljOgotICAgIFdlYWso
KQotICAgICAgICA6IG1faW1wbCgwKQotICAgIHsKLSAgICB9CisgICAgV2VhaygpID0gZGVmYXVs
dDsKIAotICAgIFdlYWsoc3RkOjpudWxscHRyX3QpCi0gICAgICAgIDogbV9pbXBsKDApCisgICAg
Y29uc3RleHByIFdlYWsoc3RkOjpudWxscHRyX3QpCisgICAgICAgIDogV2VhaygpCiAgICAgewog
ICAgIH0KIAotICAgIGlubGluZSBXZWFrKFQqLCBXZWFrSGFuZGxlT3duZXIqID0gMCwgdm9pZCog
Y29udGV4dCA9IDApOworICAgIFdlYWsoVCosIFdlYWtIYW5kbGVPd25lciogPSBudWxscHRyLCB2
b2lkKiBjb250ZXh0ID0gbnVsbHB0cik7CiAKLSAgICBlbnVtIEhhc2hUYWJsZURlbGV0ZWRWYWx1
ZVRhZyB7IEhhc2hUYWJsZURlbGV0ZWRWYWx1ZSB9OwotICAgIGlubGluZSBib29sIGlzSGFzaFRh
YmxlRGVsZXRlZFZhbHVlKCkgY29uc3Q7Ci0gICAgaW5saW5lIFdlYWsoSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlVGFnKTsKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3Q7Cisg
ICAgV2VhayhXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpOworICAgIGNvbnN0ZXhwciBi
b29sIGlzSGFzaFRhYmxlRW1wdHlWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICFtX2ltcGw7IH0KIAot
ICAgIGlubGluZSBXZWFrKFdlYWsmJik7CisgICAgV2VhayhXZWFrJiYpOwogCiAgICAgfldlYWso
KQogICAgIHsKQEAgLTc5LDYgKzc2LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2Vh
ayB7CiAgICAgaW5saW5lIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdDsKIAogICAgIGlu
bGluZSBXZWFrSW1wbCogbGVha0ltcGwoKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgV2Vha0lt
cGwqIHVuc2FmZUltcGwoKSBjb25zdCB7IHJldHVybiBtX2ltcGw7IH0KICAgICB2b2lkIGNsZWFy
KCkKICAgICB7CiAgICAgICAgIGlmICghbV9pbXBsKQpAQCAtODksNyArODcsNyBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrIHsKIHByaXZhdGU6CiAgICAgc3RhdGljIGlubGluZSBX
ZWFrSW1wbCogaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7CiAKLSAgICBXZWFrSW1wbCogbV9pbXBs
OworICAgIFdlYWtJbXBsKiBtX2ltcGwgeyBudWxscHRyIH07CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKQEAgLTEwNiw2ICsxMDQsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFz
aFRyYWl0czxKU0M6OldlYWs8VD4+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQwogICAgIHR5
cGVkZWYgc3RkOjpudWxscHRyX3QgRW1wdHlWYWx1ZVR5cGU7CiAgICAgc3RhdGljIEVtcHR5VmFs
dWVUeXBlIGVtcHR5VmFsdWUoKSB7IHJldHVybiBudWxscHRyOyB9CiAKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaGFzSXNFbXB0eVZhbHVlRnVuY3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyBi
b29sIGlzRW1wdHlWYWx1ZShjb25zdCBKU0M6OldlYWs8VD4mIHZhbHVlKSB7IHJldHVybiB2YWx1
ZS5pc0hhc2hUYWJsZUVtcHR5VmFsdWUoKTsgfQorCiAgICAgdHlwZWRlZiBUKiBQZWVrVHlwZTsK
ICAgICBzdGF0aWMgUGVla1R5cGUgcGVlayhjb25zdCBTdG9yYWdlVHlwZSYgdmFsdWUpIHsgcmV0
dXJuIHZhbHVlLmdldCgpOyB9CiAgICAgc3RhdGljIFBlZWtUeXBlIHBlZWsoRW1wdHlWYWx1ZVR5
cGUpIHsgcmV0dXJuIFBlZWtUeXBlKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1dlYWtJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFr
SW5saW5lcy5oCmluZGV4IDBmN2Q1NjBiM2M5ZmQ3YTQ3OTJkYWY5OTMxMzg2MThlOTNhNzYxOTYu
LmNmNzk5NzE5NDA5YjUwM2RkOTNmYWQ3YTJlNjk3MTZmOTMwZjEyN2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvV2Vha0lubGluZXMuaApAQCAtNDEsNyArNDEsNyBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBXZWFrPFQ+Ojppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
IGNvbnN0CiAgICAgcmV0dXJuIG1faW1wbCA9PSBoYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFdlYWs8VD46OldlYWsodHlwZW5hbWUgV2Vh
azxUPjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVGFnKQordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIFdlYWs8VD46OldlYWsoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQogICAgIDog
bV9pbXBsKGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRUaHVua3MuY3BwCmluZGV4IDdmYjk4ODQwNDFiNTA2OTBmOTNjNGQyNWZkZTQ0MTcz
YWU4N2EwMzYuLjFkMTgzNzhkOTQyZmE3NTY1NTVhNGI1Y2I2NjczN2ExODBjOGQ0NzYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAKQEAgLTM3LDcgKzM3LDYgQEAKIG5h
bWVzcGFjZSBKU0MgewogCiBKSVRUaHVua3M6OkpJVFRodW5rcygpCi0gICAgOiBtX2hvc3RGdW5j
dGlvblN0dWJNYXAobWFrZVVuaXF1ZTxIb3N0RnVuY3Rpb25TdHViTWFwPigpKQogewogfQogCkBA
IC00NSw2ICs0NCw2MyBAQCBKSVRUaHVua3M6On5KSVRUaHVua3MoKQogewogfQogCitpbmxpbmUg
dW5zaWduZWQgSklUVGh1bmtzOjpXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g6Omhhc2goY29uc3Qg
TmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSkKK3sKKyAgICByZXR1cm4gaGFzaChleGVjdXRh
YmxlLT5mdW5jdGlvbigpLCBleGVjdXRhYmxlLT5jb25zdHJ1Y3RvcigpLCBleGVjdXRhYmxlLT5u
YW1lKCkpOworfQorCitpbmxpbmUgdW5zaWduZWQgSklUVGh1bmtzOjpXZWFrTmF0aXZlRXhlY3V0
YWJsZUhhc2g6Omhhc2goY29uc3QgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiYga2V5KQoreworICAg
IC8vIFRoaXMgbmV2ZXIgZ2V0cyBEZWxldGVkIC8gRW1wdHkgc2xvdHMuCisgICAgV2Vha0ltcGwq
IGltcGwgPSBrZXkudW5zYWZlSW1wbCgpOworICAgIEFTU0VSVChpbXBsKTsKKyAgICAvLyBXZSBo
YXZlIGEgY2FsbGJhY2sgcmVtb3ZpbmcgZW50cnkgd2hlbiBmaW5hbGl6aW5nLiBUaGlzIG1lYW5z
IHRoYXQgd2UgbmV2ZXIgaG9sZCBEZWFsbG9jYXRlZCBlbnRyeSBpbiBIYXNoU2V0LgorICAgIEFT
U0VSVChpbXBsLT5zdGF0ZSgpICE9IFdlYWtJbXBsOjpTdGF0ZTo6RGVhbGxvY2F0ZWQpOworICAg
IC8vIE5ldmVyIHVzZSBqc0Nhc3QgaGVyZS4gVGhpcyBpcyBwb3NzaWJsZSB0aGF0IHRoaXMgdmFs
dWUgaXMgIkRlYWQiIGJ1dCBub3QgIkZpbmFsaXplZCIgeWV0LiBJbiB0aGlzIGNhc2UsCisgICAg
Ly8gd2UgY2FuIHN0aWxsIGFjY2VzcyB0byBub24tSlMgZGF0YSwgYXMgd2UgYXJlIGRvaW5nIGlu
IGEgZmluYWxpemUgY2FsbGJhY2suCisgICAgYXV0byogZXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0
PE5hdGl2ZUV4ZWN1dGFibGUqPihpbXBsLT5qc1ZhbHVlKCkuYXNDZWxsKCkpOworICAgIEFTU0VS
VChleGVjdXRhYmxlKTsKKyAgICByZXR1cm4gaGFzaChleGVjdXRhYmxlKTsKK30KKworaW5saW5l
IGJvb2wgSklUVGh1bmtzOjpXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g6OmVxdWFsKE5hdGl2ZUV4
ZWN1dGFibGUmIGEsIE5hdGl2ZUV4ZWN1dGFibGUmIGIpCit7CisgICAgaWYgKCZhID09ICZiKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gYS5mdW5jdGlvbigpID09IGIuZnVuY3Rp
b24oKSAmJiBhLmNvbnN0cnVjdG9yKCkgPT0gYi5jb25zdHJ1Y3RvcigpICYmIGEubmFtZSgpID09
IGIubmFtZSgpOworfQorCitpbmxpbmUgYm9vbCBKSVRUaHVua3M6OldlYWtOYXRpdmVFeGVjdXRh
YmxlSGFzaDo6ZXF1YWwoY29uc3QgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiYgYSwgY29uc3QgV2Vh
azxOYXRpdmVFeGVjdXRhYmxlPiYgYikKK3sKKyAgICAvLyBUaGlzIG5ldmVyIGdldHMgRGVsZXRl
ZCAvIEVtcHR5IHNsb3RzLiBBbmQgd2UgbmV2ZXIgZ2V0IERlYWxsb2NhdGVkIFdlYWsgZW50cnkg
dG9vLgorICAgIFdlYWtJbXBsKiBhSW1wbCA9IGEudW5zYWZlSW1wbCgpOworICAgIFdlYWtJbXBs
KiBiSW1wbCA9IGIudW5zYWZlSW1wbCgpOworICAgIEFTU0VSVChhSW1wbCk7CisgICAgQVNTRVJU
KGFJbXBsLT5zdGF0ZSgpICE9IFdlYWtJbXBsOjpTdGF0ZTo6RGVhbGxvY2F0ZWQpOworICAgIEFT
U0VSVChiSW1wbCk7CisgICAgQVNTRVJUKGJJbXBsLT5zdGF0ZSgpICE9IFdlYWtJbXBsOjpTdGF0
ZTo6RGVhbGxvY2F0ZWQpOworICAgIHJldHVybiBlcXVhbCgqc3RhdGljX2Nhc3Q8TmF0aXZlRXhl
Y3V0YWJsZSo+KGFJbXBsLT5qc1ZhbHVlKCkuYXNDZWxsKCkpLCAqc3RhdGljX2Nhc3Q8TmF0aXZl
RXhlY3V0YWJsZSo+KGJJbXBsLT5qc1ZhbHVlKCkuYXNDZWxsKCkpKTsKK30KKworaW5saW5lIGJv
b2wgSklUVGh1bmtzOjpXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g6OmVxdWFsKGNvbnN0IFdlYWs8
TmF0aXZlRXhlY3V0YWJsZT4mIGEsIE5hdGl2ZUV4ZWN1dGFibGUqIGJFeGVjdXRhYmxlKQorewor
ICAgIC8vIFRoaXMgbmV2ZXIgZ2V0cyBEZWxldGVkIC8gRW1wdHkgc2xvdHMuIEFuZCB3ZSBuZXZl
ciBnZXQgRGVhbGxvY2F0ZWQgV2VhayBlbnRyeSB0b28uCisgICAgYXV0byogYUltcGwgPSBhLnVu
c2FmZUltcGwoKTsKKyAgICBBU1NFUlQoYUltcGwpOworICAgIEFTU0VSVChhSW1wbC0+c3RhdGUo
KSAhPSBXZWFrSW1wbDo6U3RhdGU6OkRlYWxsb2NhdGVkKTsKKyAgICByZXR1cm4gZXF1YWwoKnN0
YXRpY19jYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihhSW1wbC0+anNWYWx1ZSgpLmFzQ2VsbCgpKSwg
KmJFeGVjdXRhYmxlKTsKK30KKworaW5saW5lIGJvb2wgSklUVGh1bmtzOjpXZWFrTmF0aXZlRXhl
Y3V0YWJsZUhhc2g6OmVxdWFsKGNvbnN0IFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4mIGEsIGNvbnN0
IEhvc3RGdW5jdGlvbktleSYgYikKK3sKKyAgICAvLyBUaGlzIG5ldmVyIGdldHMgRGVsZXRlZCAv
IEVtcHR5IHNsb3RzLiBBbmQgd2UgbmV2ZXIgZ2V0IERlYWxsb2NhdGVkIFdlYWsgZW50cnkgdG9v
LgorICAgIGF1dG8qIGFJbXBsID0gYS51bnNhZmVJbXBsKCk7CisgICAgQVNTRVJUKGFJbXBsKTsK
KyAgICBBU1NFUlQoYUltcGwtPnN0YXRlKCkgIT0gV2Vha0ltcGw6OlN0YXRlOjpEZWFsbG9jYXRl
ZCk7CisgICAgYXV0byogYUV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxOYXRpdmVFeGVjdXRhYmxl
Kj4oYUltcGwtPmpzVmFsdWUoKS5hc0NlbGwoKSk7CisgICAgcmV0dXJuIGFFeGVjdXRhYmxlLT5m
dW5jdGlvbigpID09IHN0ZDo6Z2V0PDA+KGIpICYmIGFFeGVjdXRhYmxlLT5jb25zdHJ1Y3Rvcigp
ID09IHN0ZDo6Z2V0PDE+KGIpICYmIGFFeGVjdXRhYmxlLT5uYW1lKCkgPT0gc3RkOjpnZXQ8Mj4o
Yik7Cit9CisKIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gSklUVGh1bmtz
OjpjdGlOYXRpdmVDYWxsKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoVk06OmNhblVzZUpJVCgpKTsK
QEAgLTEwMiwxMCArMTU4LDMyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUVGh1bmtzOjpleGlzdGluZ0NUSVN0dWIoVGh1bmtHZW5lcmF0b3IKICAgICByZXR1cm4g
ZW50cnktPnZhbHVlOwogfQogCitzdHJ1Y3QgSklUVGh1bmtzOjpIb3N0S2V5U2VhcmNoZXIgewor
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEhvc3RGdW5jdGlvbktleSYga2V5KSB7IHJl
dHVybiBXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g6Omhhc2goa2V5KTsgfQorICAgIHN0YXRpYyBi
b29sIGVxdWFsKGNvbnN0IFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4mIGEsIGNvbnN0IEhvc3RGdW5j
dGlvbktleSYgYikgeyByZXR1cm4gV2Vha05hdGl2ZUV4ZWN1dGFibGVIYXNoOjplcXVhbChhLCBi
KTsgfQorfTsKKworc3RydWN0IEpJVFRodW5rczo6TmF0aXZlRXhlY3V0YWJsZVRyYW5zbGF0b3Ig
eworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IE5hdGl2ZUV4ZWN1dGFibGUqIGtleSkg
eyByZXR1cm4gV2Vha05hdGl2ZUV4ZWN1dGFibGVIYXNoOjpoYXNoKGtleSk7IH0KKyAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+JiBhLCBOYXRpdmVFeGVj
dXRhYmxlKiBiKSB7IHJldHVybiBXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g6OmVxdWFsKGEsIGIp
OyB9CisgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4mIGxv
Y2F0aW9uLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCB1bnNpZ25lZCkKKyAgICB7Cisg
ICAgICAgIGxvY2F0aW9uID0gV2VhazxOYXRpdmVFeGVjdXRhYmxlPihleGVjdXRhYmxlLCBleGVj
dXRhYmxlLT52bSgpLmppdFN0dWJzLmdldCgpKTsKKyAgICB9Cit9OworCiB2b2lkIEpJVFRodW5r
czo6ZmluYWxpemUoSGFuZGxlPFVua25vd24+IGhhbmRsZSwgdm9pZCopCiB7CiAgICAgYXV0byog
bmF0aXZlRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihoYW5kbGUu
Z2V0KCkuYXNDZWxsKCkpOwotICAgIHdlYWtSZW1vdmUoKm1faG9zdEZ1bmN0aW9uU3R1Yk1hcCwg
c3RkOjptYWtlX3R1cGxlKG5hdGl2ZUV4ZWN1dGFibGUtPmZ1bmN0aW9uKCksIG5hdGl2ZUV4ZWN1
dGFibGUtPmNvbnN0cnVjdG9yKCksIG5hdGl2ZUV4ZWN1dGFibGUtPm5hbWUoKSksIG5hdGl2ZUV4
ZWN1dGFibGUpOworICAgIGF1dG8gaG9zdEZ1bmN0aW9uS2V5ID0gc3RkOjptYWtlX3R1cGxlKG5h
dGl2ZUV4ZWN1dGFibGUtPmZ1bmN0aW9uKCksIG5hdGl2ZUV4ZWN1dGFibGUtPmNvbnN0cnVjdG9y
KCksIG5hdGl2ZUV4ZWN1dGFibGUtPm5hbWUoKSk7CisgICAgeworICAgICAgICBEaXNhbGxvd0dD
IGRpc2FsbG93R0M7CisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX25hdGl2ZUV4ZWN1dGFibGVT
ZXQuZmluZDxIb3N0S2V5U2VhcmNoZXI+KGhvc3RGdW5jdGlvbktleSk7CisgICAgICAgIC8vIEJl
Y2F1c2UgdGhpcyBmaW5hbGl6ZXIgaXMgY2FsbGVkLCB0aGlzIG1lYW5zIHRoYXQgd2Ugc3RpbGwg
aGF2ZSBkZWFkIFdlYWs8PiBpbiBtX25hdGl2ZUV4ZWN1dGFibGVTZXQuCisgICAgICAgIEFTU0VS
VChpdGVyYXRvciAhPSBtX25hdGl2ZUV4ZWN1dGFibGVTZXQuZW5kKCkpOworICAgICAgICBBU1NF
UlQoaXRlcmF0b3ItPnVuc2FmZUltcGwoKS0+c3RhdGUoKSA9PSBXZWFrSW1wbDo6U3RhdGU6OkZp
bmFsaXplZCk7CisgICAgICAgIG1fbmF0aXZlRXhlY3V0YWJsZVNldC5yZW1vdmUoaXRlcmF0b3Ip
OworICAgIH0KIH0KIAogTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpb25T
dHViKFZNJiB2bSwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1
bmN0aW9uIGNvbnN0cnVjdG9yLCBjb25zdCBTdHJpbmcmIG5hbWUpCkBAIC0xMTgsOCArMTk2LDE3
IEBAIE5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1YihWTSYgdm0s
IFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0CiAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhy
ZWFkKCkpOyAgICAKICAgICBBU1NFUlQoVk06OmNhblVzZUpJVCgpKTsKIAotICAgIGlmIChOYXRp
dmVFeGVjdXRhYmxlKiBuYXRpdmVFeGVjdXRhYmxlID0gbV9ob3N0RnVuY3Rpb25TdHViTWFwLT5n
ZXQoc3RkOjptYWtlX3R1cGxlKGZ1bmN0aW9uLCBjb25zdHJ1Y3RvciwgbmFtZSkpKQotICAgICAg
ICByZXR1cm4gbmF0aXZlRXhlY3V0YWJsZTsKKyAgICBhdXRvIGhvc3RGdW5jdGlvbktleSA9IHN0
ZDo6bWFrZV90dXBsZShmdW5jdGlvbiwgY29uc3RydWN0b3IsIG5hbWUpOworICAgIHsKKyAgICAg
ICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9uYXRp
dmVFeGVjdXRhYmxlU2V0LmZpbmQ8SG9zdEtleVNlYXJjaGVyPihob3N0RnVuY3Rpb25LZXkpOwor
ICAgICAgICBpZiAoaXRlcmF0b3IgIT0gbV9uYXRpdmVFeGVjdXRhYmxlU2V0LmVuZCgpKSB7Cisg
ICAgICAgICAgICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoaXMgcmV0dXJucyBXZWFrPD4gd2hp
Y2ggaXMgRGVhZCwgYnV0IG5vdCBmaW5hbGl6ZWQuCisgICAgICAgICAgICAvLyBXZSBzaG91bGQg
bm90IHVzZSB0aGlzIHJlZmVyZW5jZSB0byBzdG9yZSB2YWx1ZSBjcmVhdGVkIGluIHRoZSBzdWJz
ZXF1ZW50IHNlcXVlbmNlLCBzaW5jZSBhbGxvY2F0aW5nIE5hdGl2ZUV4ZWN1dGFibGUgY2FuIGNh
dXNlIEdDLCB3aGljaCBjaGFuZ2VzIHRoaXMgU2V0LgorICAgICAgICAgICAgaWYgKGF1dG8qIGV4
ZWN1dGFibGUgPSBpdGVyYXRvci0+Z2V0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGV4ZWN1
dGFibGU7CisgICAgICAgIH0KKyAgICB9CiAKICAgICBSZWZQdHI8SklUQ29kZT4gZm9yQ2FsbDsK
ICAgICBpZiAoZ2VuZXJhdG9yKSB7CkBAIC0xMzMsNyArMjIwLDIyIEBAIE5hdGl2ZUV4ZWN1dGFi
bGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW9uU3R1YihWTSYgdm0sIFRhZ2dlZE5hdGl2ZUZ1bmN0
aW9uIGZ1bmN0CiAgICAgUmVmPEpJVENvZGU+IGZvckNvbnN0cnVjdCA9IGFkb3B0UmVmKCpuZXcg
TmF0aXZlSklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz46OmNyZWF0
ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRpdmVDb25zdHJ1Y3Qodm0pLnJldGFnZ2VkPEpTRW50
cnlQdHJUYWc+KCkpLCBKSVRUeXBlOjpIb3N0Q2FsbFRodW5rLCBOb0ludHJpbnNpYykpOwogICAg
IAogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIG5hdGl2ZUV4ZWN1dGFibGUgPSBOYXRpdmVFeGVjdXRh
YmxlOjpjcmVhdGUodm0sIGZvckNhbGwucmVsZWFzZU5vbk51bGwoKSwgZnVuY3Rpb24sIFdURk1v
dmUoZm9yQ29uc3RydWN0KSwgY29uc3RydWN0b3IsIG5hbWUpOwotICAgIHdlYWtBZGQoKm1faG9z
dEZ1bmN0aW9uU3R1Yk1hcCwgc3RkOjptYWtlX3R1cGxlKGZ1bmN0aW9uLCBjb25zdHJ1Y3Rvciwg
bmFtZSksIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4obmF0aXZlRXhlY3V0YWJsZSwgdGhpcykpOwor
ICAgIHsKKyAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOworICAgICAgICBhdXRvIGFkZFJl
c3VsdCA9IG1fbmF0aXZlRXhlY3V0YWJsZVNldC5hZGQ8TmF0aXZlRXhlY3V0YWJsZVRyYW5zbGF0
b3I+KG5hdGl2ZUV4ZWN1dGFibGUpOworICAgICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5
KSB7CisgICAgICAgICAgICAvLyBPdmVycmlkZSB0aGUgZXhpc3RpbmcgV2VhazxOYXRpdmVFeGVj
dXRhYmxlPiB3aXRoIHRoZSBuZXcgb25lIHNpbmNlIGl0IGlzIGRlYWQuCisgICAgICAgICAgICBB
U1NFUlQoISphZGRSZXN1bHQuaXRlcmF0b3IpOworICAgICAgICAgICAgKmFkZFJlc3VsdC5pdGVy
YXRvciA9IFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4obmF0aXZlRXhlY3V0YWJsZSwgdGhpcyk7Cisg
ICAgICAgICAgICBBU1NFUlQoKmFkZFJlc3VsdC5pdGVyYXRvcik7CisjaWYgQVNTRVJUX0VOQUJM
RUQKKyAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX25hdGl2ZUV4ZWN1dGFibGVTZXQuZmlu
ZDxIb3N0S2V5U2VhcmNoZXI+KGhvc3RGdW5jdGlvbktleSk7CisgICAgICAgICAgICBBU1NFUlQo
aXRlcmF0b3IgIT0gbV9uYXRpdmVFeGVjdXRhYmxlU2V0LmVuZCgpKTsKKyAgICAgICAgICAgIEFT
U0VSVChpdGVyYXRvci0+Z2V0KCkgPT0gbmF0aXZlRXhlY3V0YWJsZSk7CisgICAgICAgICAgICBB
U1NFUlQoaXRlcmF0b3ItPnVuc2FmZUltcGwoKS0+c3RhdGUoKSA9PSBXZWFrSW1wbDo6U3RhdGU6
OkxpdmUpOworI2VuZGlmCisgICAgICAgIH0KKyAgICB9CiAgICAgcmV0dXJuIG5hdGl2ZUV4ZWN1
dGFibGU7CiB9CiAKQEAgLTE0MiwxMSArMjQ0LDYgQEAgTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1
bmtzOjpob3N0RnVuY3Rpb25TdHViKFZNJiB2bSwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3QK
ICAgICByZXR1cm4gaG9zdEZ1bmN0aW9uU3R1Yih2bSwgZnVuY3Rpb24sIGNhbGxIb3N0RnVuY3Rp
b25Bc0NvbnN0cnVjdG9yLCBnZW5lcmF0b3IsIGludHJpbnNpYywgbnVsbHB0ciwgbmFtZSk7CiB9
CiAKLXZvaWQgSklUVGh1bmtzOjpjbGVhckhvc3RGdW5jdGlvblN0dWJzKCkKLXsKLSAgICBtX2hv
c3RGdW5jdGlvblN0dWJNYXAgPSBudWxscHRyOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
I2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFRodW5rcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaApp
bmRleCA0OGMyMGUzMzdkYzE0MmM4MzQzZTk2NTFlNjliZWI1ZjYzYjM5YTcyLi4wMjkwMjdlOWQw
ZDVkZjFiZmQzZWUxNWZkNzEwNDBiNGI1ODkwY2YyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFRodW5rcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUVGh1bmtzLmgKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJXZWFrSGFuZGxlT3duZXIu
aCIKICNpbmNsdWRlIDx0dXBsZT4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCiBuYW1l
c3BhY2UgSlNDIHsKQEAgLTY1LDQ3ICs2Niw0OSBAQCBjbGFzcyBKSVRUaHVua3MgZmluYWwgOiBw
cml2YXRlIFdlYWtIYW5kbGVPd25lciB7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogaG9zdEZ1bmN0
aW9uU3R1YihWTSYsIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBj
b25zdHJ1Y3RvciwgVGh1bmtHZW5lcmF0b3IsIEludHJpbnNpYywgY29uc3QgRE9NSklUOjpTaWdu
YXR1cmUqLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGhvc3RG
dW5jdGlvblN0dWIoVk0mLCBUYWdnZWROYXRpdmVGdW5jdGlvbiwgVGh1bmtHZW5lcmF0b3IsIElu
dHJpbnNpYywgY29uc3QgU3RyaW5nJiBuYW1lKTsKIAotICAgIHZvaWQgY2xlYXJIb3N0RnVuY3Rp
b25TdHVicygpOwotCiBwcml2YXRlOgogICAgIHZvaWQgZmluYWxpemUoSGFuZGxlPFVua25vd24+
LCB2b2lkKiBjb250ZXh0KSBvdmVycmlkZTsKICAgICAKICAgICB0eXBlZGVmIEhhc2hNYXA8VGh1
bmtHZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4+IENUSVN0
dWJNYXA7CiAgICAgQ1RJU3R1Yk1hcCBtX2N0aVN0dWJNYXA7CiAKLSAgICB0eXBlZGVmIHN0ZDo6
dHVwbGU8VGFnZ2VkTmF0aXZlRnVuY3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uLCBTdHJpbmc+
IEhvc3RGdW5jdGlvbktleTsKKyAgICB1c2luZyBIb3N0RnVuY3Rpb25LZXkgPSBzdGQ6OnR1cGxl
PFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uLCBUYWdnZWROYXRpdmVGdW5jdGlvbiwgU3RyaW5nPjsKIAot
ICAgIHN0cnVjdCBIb3N0RnVuY3Rpb25IYXNoIHsKKyAgICBzdHJ1Y3QgV2Vha05hdGl2ZUV4ZWN1
dGFibGVIYXNoIHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgV2VhazxOYXRp
dmVFeGVjdXRhYmxlPiYpOworICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBOYXRp
dmVFeGVjdXRhYmxlKik7CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEhvc3RG
dW5jdGlvbktleSYga2V5KQogICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBoYXNoID0g
V1RGOjpwYWlySW50SGFzaChoYXNoUG9pbnRlcihzdGQ6OmdldDwwPihrZXkpKSwgaGFzaFBvaW50
ZXIoc3RkOjpnZXQ8MT4oa2V5KSkpOwotICAgICAgICAgICAgaWYgKCFzdGQ6OmdldDwyPihrZXkp
LmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIGhhc2ggPSBXVEY6OnBhaXJJbnRIYXNoKGhhc2gs
IERlZmF1bHRIYXNoPFN0cmluZz46Okhhc2g6Omhhc2goc3RkOjpnZXQ8Mj4oa2V5KSkpOwotICAg
ICAgICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGljIGJvb2wgZXF1
YWwoY29uc3QgSG9zdEZ1bmN0aW9uS2V5JiBhLCBjb25zdCBIb3N0RnVuY3Rpb25LZXkmIGIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAoc3RkOjpnZXQ8MD4oYSkgPT0gc3RkOjpnZXQ8
MD4oYikpICYmIChzdGQ6OmdldDwxPihhKSA9PSBzdGQ6OmdldDwxPihiKSkgJiYgKHN0ZDo6Z2V0
PDI+KGEpID09IHN0ZDo6Z2V0PDI+KGIpKTsKKyAgICAgICAgICAgIHJldHVybiBoYXNoKHN0ZDo6
Z2V0PDA+KGtleSksIHN0ZDo6Z2V0PDE+KGtleSksIHN0ZDo6Z2V0PDI+KGtleSkpOwogICAgICAg
ICB9Ci0gICAgICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9y
RGVsZXRlZCA9IHRydWU7CisKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgV2VhazxO
YXRpdmVFeGVjdXRhYmxlPiYsIGNvbnN0IFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4mKTsKKyAgICAg
ICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiYsIGNvbnN0
IEhvc3RGdW5jdGlvbktleSYpOworICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBXZWFr
PE5hdGl2ZUV4ZWN1dGFibGU+JiwgTmF0aXZlRXhlY3V0YWJsZSopOworICAgICAgICBzdGF0aWMg
Ym9vbCBlcXVhbChOYXRpdmVFeGVjdXRhYmxlJiwgTmF0aXZlRXhlY3V0YWJsZSYpOworICAgICAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBm
YWxzZTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaGFz
aFBvaW50ZXIoVGFnZ2VkTmF0aXZlRnVuY3Rpb24gcCkKICAgICAgICAgewogICAgICAgICAgICAg
cmV0dXJuIERlZmF1bHRIYXNoPFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uPjo6SGFzaDo6aGFzaChwKTsK
ICAgICAgICAgfQotICAgIH07CiAKLSAgICBzdHJ1Y3QgSG9zdEZ1bmN0aW9uSGFzaFRyYWl0IDog
V1RGOjpHZW5lcmljSGFzaFRyYWl0czxIb3N0RnVuY3Rpb25LZXk+IHsKLSAgICAgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOwotICAgICAgICBzdGF0aWMg
RW1wdHlWYWx1ZVR5cGUgZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIHN0ZDo6bWFrZV90dXBsZShudWxs
cHRyLCBudWxscHRyLCBTdHJpbmcoKSk7IH0KLQotICAgICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1
Y3REZWxldGVkVmFsdWUoSG9zdEZ1bmN0aW9uS2V5JiBzbG90KSB7IHN0ZDo6Z2V0PDA+KHNsb3Qp
ID0gVGFnZ2VkTmF0aXZlRnVuY3Rpb24oLTEpOyB9Ci0gICAgICAgIHN0YXRpYyBib29sIGlzRGVs
ZXRlZFZhbHVlKGNvbnN0IEhvc3RGdW5jdGlvbktleSYgdmFsdWUpIHsgcmV0dXJuIHN0ZDo6Z2V0
PDA+KHZhbHVlKSA9PSBUYWdnZWROYXRpdmVGdW5jdGlvbigtMSk7IH0KKyAgICAgICAgc3RhdGlj
IHVuc2lnbmVkIGhhc2goVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRhZ2dlZE5hdGl2
ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBVc2UgV1RGOjpjb21wdXRlSGFzaC4KKyAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc4MzUKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGhhc2ggPSBXVEY6OnBhaXJJbnRIYXNoKGhhc2hQb2ludGVyKGZ1bmN0aW9u
KSwgaGFzaFBvaW50ZXIoY29uc3RydWN0b3IpKTsKKyAgICAgICAgICAgIGlmICghbmFtZS5pc051
bGwoKSkKKyAgICAgICAgICAgICAgICBoYXNoID0gV1RGOjpwYWlySW50SGFzaChoYXNoLCBEZWZh
dWx0SGFzaDxTdHJpbmc+OjpIYXNoOjpoYXNoKG5hbWUpKTsKKyAgICAgICAgICAgIHJldHVybiBo
YXNoOworICAgICAgICB9CiAgICAgfTsKLSAgICAKLSAgICB0eXBlZGVmIEhhc2hNYXA8SG9zdEZ1
bmN0aW9uS2V5LCBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+LCBIb3N0RnVuY3Rpb25IYXNoLCBIb3N0
RnVuY3Rpb25IYXNoVHJhaXQ+IEhvc3RGdW5jdGlvblN0dWJNYXA7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPEhvc3RGdW5jdGlvblN0dWJNYXA+IG1faG9zdEZ1bmN0aW9uU3R1Yk1hcDsKKyAgICBzdHJ1
Y3QgSG9zdEtleVNlYXJjaGVyOworICAgIHN0cnVjdCBOYXRpdmVFeGVjdXRhYmxlVHJhbnNsYXRv
cjsKKworICAgIHVzaW5nIFdlYWtOYXRpdmVFeGVjdXRhYmxlU2V0ID0gSGFzaFNldDxXZWFrPE5h
dGl2ZUV4ZWN1dGFibGU+LCBXZWFrTmF0aXZlRXhlY3V0YWJsZUhhc2g+OworICAgIFdlYWtOYXRp
dmVFeGVjdXRhYmxlU2V0IG1fbmF0aXZlRXhlY3V0YWJsZVNldDsKICAgICBMb2NrIG1fbG9jazsK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4
ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFi
bGUuaAppbmRleCAyZTNmNTQyM2YyNWQ0NDAwOTM0NWQ3YWY5ZGUzNjEwMjhhYTA2OTU0Li45ZjA0
M2ZhZDJlNjNhYWJlNGJiNjJiNWFkNzQ4ZmViZDZmZjRlNTJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5oCkBAIC00OCw4ICs0OCw4IEBA
IGNsYXNzIE5hdGl2ZUV4ZWN1dGFibGUgZmluYWwgOiBwdWJsaWMgRXhlY3V0YWJsZUJhc2Ugewog
CiAgICAgQ29kZUJsb2NrSGFzaCBoYXNoRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpIGNvbnN0
OwogCi0gICAgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24oKSB7IHJldHVybiBtX2Z1bmN0
aW9uOyB9Ci0gICAgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IoKSB7IHJldHVybiBt
X2NvbnN0cnVjdG9yOyB9CisgICAgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24oKSBjb25z
dCB7IHJldHVybiBtX2Z1bmN0aW9uOyB9CisgICAgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gY29uc3Ry
dWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0cnVjdG9yOyB9CiAgICAgICAgIAogICAgIFRh
Z2dlZE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uRm9yKENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
SlNEb2xsYXJWTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5j
cHAKaW5kZXggZGZmMWRmMTlhYzg0YTllZDM2NGI1OTdkNWRkOWQwNDFiZWM0NzhiMy4uOWE3ZjQ5
YTE0MDUzYTA4MjdkYmFlMzUyZDI4ZjUwMzYwN2ZmNmNkNyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9KU0RvbGxhclZNLmNwcApAQCAtMTY5OSw2ICsxNjk5LDE1IEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRWRlbkdDKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIH0KIAorLy8gUnVucyBhIGZ1bGwgR0MsIGJ1dCBzd2VlcCBhc3luY2hyb25vdXNseS4KKy8v
IFVzYWdlOiAkdm0uZ2NTd2VlcEFzeW5jaHJvbm91c2x5KCkKK3N0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR0NTd2VlcEFzeW5jaHJvbm91c2x5KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSopCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29w
ZSBhc3NlcnRTY29wZTsKKyAgICBnbG9iYWxPYmplY3QtPnZtKCkuaGVhcC5jb2xsZWN0Tm93KEFz
eW5jLCBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Cit9CisKIC8vIER1bXBzIHRoZSBoYXNoZXMgb2YgYWxsIHN1YnNwYWNl
cyBjdXJyZW50bHkgcmVnaXN0ZXJlZCB3aXRoIHRoZSBWTS4KIC8vIFVzYWdlOiAkdm0uZHVtcFN1
YnNwYWNlSGFzaGVzKCkKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uRHVtcFN1YnNwYWNlSGFzaGVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSopCkBAIC0yMzA3LDYgKzIzMTYsMTkgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVPYmplY3REb2luZ1NpZGVFZmZlY3RQdXRXaXRob3UKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKK3N0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRW1wdHlGdW5jdGlvbldpdGhOYW1lKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAg
IERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBjb25zdCBTdHJpbmcgbmFtZSA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKworICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCAxLCBuYW1lLCBmdW5jdGlvbkNyZWF0ZUVtcHR5RnVuY3Rpb25XaXRoTmFtZSkp
KTsKK30KKwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRJ
bXB1cmVHZXR0ZXJEZWxlZ2F0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKIHsKICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwpA
QCAtMjg2Myw2ICsyODg1LDcgQEAgdm9pZCBKU0RvbGxhclZNOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0pCiAgICAgYWRkRnVuY3Rpb24odm0sICJub0lubGluZSIsIGZ1bmN0aW9uTm9JbmxpbmUsIDEp
OwogCiAgICAgYWRkRnVuY3Rpb24odm0sICJnYyIsIGZ1bmN0aW9uR0MsIDApOworICAgIGFkZEZ1
bmN0aW9uKHZtLCAiZ2NTd2VlcEFzeW5jaHJvbm91c2x5IiwgZnVuY3Rpb25HQ1N3ZWVwQXN5bmNo
cm9ub3VzbHksIDApOwogICAgIGFkZEZ1bmN0aW9uKHZtLCAiZWRlbkdDIiwgZnVuY3Rpb25FZGVu
R0MsIDApOwogICAgIGFkZEZ1bmN0aW9uKHZtLCAiZHVtcFN1YnNwYWNlSGFzaGVzIiwgZnVuY3Rp
b25EdW1wU3Vic3BhY2VIYXNoZXMsIDApOwogCkBAIC0yOTA5LDYgKzI5MzIsNyBAQCB2b2lkIEpT
RG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICNlbmRpZgogICAgIGFkZEZ1bmN0aW9u
KHZtLCAiY3JlYXRlU3RhdGljQ3VzdG9tQWNjZXNzb3IiLCBmdW5jdGlvbkNyZWF0ZVN0YXRpY0N1
c3RvbUFjY2Vzc29yLCAwKTsKICAgICBhZGRGdW5jdGlvbih2bSwgImNyZWF0ZU9iamVjdERvaW5n
U2lkZUVmZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1cyIsIGZ1bmN0aW9uQ3JlYXRlT2Jq
ZWN0RG9pbmdTaWRlRWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzLCAwKTsKKyAgICBh
ZGRGdW5jdGlvbih2bSwgImNyZWF0ZUVtcHR5RnVuY3Rpb25XaXRoTmFtZSIsIGZ1bmN0aW9uQ3Jl
YXRlRW1wdHlGdW5jdGlvbldpdGhOYW1lLCAxKTsKICAgICBhZGRGdW5jdGlvbih2bSwgImdldFBy
aXZhdGVQcm9wZXJ0eSIsIGZ1bmN0aW9uR2V0UHJpdmF0ZVByb3BlcnR5LCAyKTsKICAgICBhZGRG
dW5jdGlvbih2bSwgInNldEltcHVyZUdldHRlckRlbGVnYXRlIiwgZnVuY3Rpb25TZXRJbXB1cmVH
ZXR0ZXJEZWxlZ2F0ZSwgMik7CiAKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNU
ZXN0cy9DaGFuZ2VMb2cKaW5kZXggNjUyMTJmZmExZDc1YTk0MTY2MWYzNzZjOWQyZWMwNTk1MmYz
Yjg2OC4uMmE4MjFkMTE0ZWZlMmMwMzU1Mjk4MDYwYWE2NDc1ZjkxZDkyZjY0OSAxMDA2NDQKLS0t
IGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NCBAQAorMjAyMC0wMi0xNyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisg
ICAgICAgIFtKU0NdIEpJVFRodW5rIHNob3VsZCBiZSBIYXNoU2V0PFdlYWs8TmF0aXZlRXhlY3V0
YWJsZT4+IHdpdGggYXBwcm9wcmlhdGUgR0Mgd2Vha25lc3MgaGFuZGxpbmcKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzcxNQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL3N0cmVzcy1qaXR0
aHVua3MuanM6IEFkZGVkLgorICAgICAgICAobGV0LnNldCBuZXdHbG9iYWwpOgorICAgICAgICAo
c2V0IGNhdGNoKToKKwogMjAyMC0wMi0xNCAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxl
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkOiBmaXggYnJva2VuIHRlc3RzIGFkZGVkIGluIHIy
NTY2NjUKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3N0cmVzcy1qaXR0aHVua3MuanMgYi9K
U1Rlc3RzL3N0cmVzcy9zdHJlc3Mtaml0dGh1bmtzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgyM2ZmM2M5ZGNk
M2VjODNlZGE2Yjg3NjVjMzY0MTUxYWU3OTNmZWIKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3Rz
L3N0cmVzcy9zdHJlc3Mtaml0dGh1bmtzLmpzCkBAIC0wLDAgKzEsMjAgQEAKK3sKKyAgICBsZXQg
ZnVuY3Rpb25zID0gW107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAgICAg
ICAgZnVuY3Rpb25zLnB1c2goJHZtLmNyZWF0ZUVtcHR5RnVuY3Rpb25XaXRoTmFtZShpKSk7Cisg
ICAgbGV0IG5ld0dsb2JhbCA9ICR2bS5jcmVhdGVHbG9iYWxPYmplY3QoKTsKKyAgICBuZXdHbG9i
YWwuV2Vha01hcC5wcm90b3R5cGUuc2V0OworICAgIG5ld0dsb2JhbC5XZWFrTWFwLnByb3RvdHlw
ZS5zZXQgPSBudWxsOyAvLyBSZW1vdmUgcmVmZXJlbmNlIQorICAgICR2bS5nY1N3ZWVwQXN5bmNo
cm9ub3VzbHkoKTsgLy8gTWFyayBXZWFrTWFwI3NldCBkZWFkLCBidXQgc2luY2Ugd2UgaGF2ZSBz
byBtYW55IE5hdGl2ZUV4ZWN1dGFibGVzLCBpdCBpcyBkZWFkLCBidXQgc3RpbGwgaW4gSklUVGh1
bmtzLgorICAgIG5ld0dsb2JhbCA9ICR2bS5jcmVhdGVHbG9iYWxPYmplY3QoKTsKKyAgICBsZXQg
c2V0ID0gbmV3R2xvYmFsLldlYWtNYXAucHJvdG90eXBlLnNldDsgLy8gQWNjZXNzaW5nIHRvIEhh
c2hUYWJsZSwgd2hpY2ggZm91bmQgYSBkZWFkIHByZXZpb3VzIE5hdGl2ZUV4ZWN1dGFibGUsIGFu
ZCByZXBsYWNlIGl0IHdpdGggbmV3IG9uZS4KKyAgICAkdm0uZ2MoKTsgLy8gVGhpcyBkb2VzIG5v
dCBpbnZva2UgZmluYWxpemVyIGZvciBXZWFrTWFwI3NldCBzaW5jZSB3ZSBhbHJlYWR5IHJlcGxh
Y2VkIGl0LiBBbmQgcHJldmlvdXMgb25lIGlzIGZpbmFsbHkgZGVzdHJveWVkLgorICAgIHRyeSB7
CisgICAgICAgIHNldCgpOyAvLyBPZiBjb3Vyc2UsIGl0IHdvcmtzLiBJdCBpcyB1c2luZyBhIG5l
dyBOYXRpdmVFeGVjdXRhYmxlIGZvciBXZWFrTWFwI3NldCwgbm90IHVzaW5nIGRlYWQgb25lLgor
ICAgIH0gY2F0Y2ggeyB9OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWUzOyArK2kpCisgICAg
ICAgIGZ1bmN0aW9ucy5wdXNoKCR2bS5jcmVhdGVFbXB0eUZ1bmN0aW9uV2l0aE5hbWUoaSkpOwor
ICAgIHRyeSB7CisgICAgICAgIHNldCgpOworICAgIH0gY2F0Y2ggeyB9OworfQo=
</data>
<flag name="review"
          id="406495"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>