<?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>134420</bug_id>
          
          <creation_ts>2014-06-27 16:01:16 -0700</creation_ts>
          <short_desc>[ftlopt] DebuggerCallFrame::scope() should return a DebuggerScope</short_desc>
          <delta_ts>2020-04-07 11:44:06 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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=200560</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1019139</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-06-27 16:01:16 -0700</bug_when>
    <thetext>Previously, DebuggerCallFrame::scope() returns a JSActivation (and relevant peers) which the WebInspector will use to introspect CallFrame variables.  Instead, we should be returning a DebuggerScope as an abstraction layer that provides the introspection functionality that the WebInspector needs.  This is the first step towards not forcing every frame to have a JSActivation object just because the debugger is enabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019165</commentid>
    <comment_count>1</comment_count>
      <attachid>234038</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-06-27 18:34:36 -0700</bug_when>
    <thetext>Created attachment 234038
the patch.

This patch has passed the layout tests and a smoke test setting and stepping thru some breakpoints in the WebInspector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019690</commentid>
    <comment_count>2</comment_count>
      <attachid>234038</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-07-01 11:53:35 -0700</bug_when>
    <thetext>Comment on attachment 234038
the patch.

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

&gt; Source/JavaScriptCore/debugger/Debugger.cpp:183
&gt; +    globalObject-&gt;ensureDebuggerScopeStructureIsInitialized();

I don&apos;t think that saving 32 bytes is worth this complexity (unless you measured otherwise).

&gt; Source/JavaScriptCore/debugger/DebuggerCallFrame.h:88
&gt; +    Strong&lt;DebuggerScope&gt; m_scope;

What prevents this from being a reference cycle? Any time you add a Strong&lt;&gt; as a data member, you should include a comment explaining what prevents it from being a reference cycle.

I suspect that this is a reference cycle. One way to solve that problem is to use a Weak&lt;&gt; instead.

&gt; Source/JavaScriptCore/debugger/DebuggerScope.cpp:51
&gt; +    if (!scope) {

This isn&apos;t right. Every function has a scope, so a null check is not the right way to find out if the function has allocated an activation object.

&gt; Source/JavaScriptCore/debugger/DebuggerScope.cpp:138
&gt; +void DebuggerScope::invalidateChain()

Why do we need to do this? I don&apos;t think we should do this.

&gt; Source/JavaScriptCore/debugger/DebuggerScope.cpp:171
&gt; +JSObject* DebuggerScope::objectAtScope() const
&gt; +{
&gt; +    ASSERT(isValid());
&gt; +    return JSScope::objectAtScope(m_scope.get());
&gt;  }

I think this helper function just obfuscates things. It would be better to write this one line of code at the call site.

&gt; Source/JavaScriptCore/debugger/DebuggerScope.h:95
&gt; +    JSScope* toJSScope() { return m_scope.get(); }

We use the &quot;to&quot; prefix to indicate a conversion -- usually, a type case. In this case, you&apos;re just returning a data member, so you should use normal accessor naming: The data member should be named &quot;m_jsScope&quot; and the accessor should be named &quot;jsScope()&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019760</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-07-01 14:20:15 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 234038 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=234038&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/debugger/Debugger.cpp:183
&gt; &gt; +    globalObject-&gt;ensureDebuggerScopeStructureIsInitialized();
&gt; 
&gt; I don&apos;t think that saving 32 bytes is worth this complexity (unless you measured otherwise).

120 bytes (for sizeof Structure) + time to initialize the structure per global.  But I agree that it&apos;s probably not worth it.  I&apos;ll fix.

&gt; &gt; Source/JavaScriptCore/debugger/DebuggerCallFrame.h:88
&gt; &gt; +    Strong&lt;DebuggerScope&gt; m_scope;
&gt; 
&gt; What prevents this from being a reference cycle? Any time you add a Strong&lt;&gt; as a data member, you should include a comment explaining what prevents it from being a reference cycle.
&gt; 
&gt; I suspect that this is a reference cycle. One way to solve that problem is to use a Weak&lt;&gt; instead.

There&apos;s no reference cycle here.  Here&apos;s why:

The DebuggerCallFrame is designed to be &quot;valid&quot; only during a debugging session (while the debugger is broken) through the use of a DebuggerCallFrameScope in Debugger::pauseIfNeeded().  Once the debugger resumes from the break, the DebuggerCallFrameScope destructs, and the DebuggerCallFrame will be invalidated.  We can&apos;t guarantee (from this code alone) that the Inspector code isn&apos;t still holding a ref to the DebuggerCallFrame (though they shouldn&apos;t), but by contract, the frame will be invalidated, and any attempt to query it will return null values.

Now, we&apos;re adding the DebuggerScope into the picture.  While a single debugger pause session is in progress, the Inspector may request the scope from the DebuggerCallFrame.  While the DebuggerCallFrame is still valid, we want DebuggerCallFrame::scope() to always return the same DebuggerScope object.  This is why we hold on to it with a strong ref.

If we use a weak ref instead, the following cooky behavior can manifest:
1. The Inspector calls Debugger::scope() to get the top scope.
2. The Inspector iterates down the scope chain and is now only holding a reference to a parent scope.  It is no longer referencing the top scope.
3. A GC occurs, and the DebuggerCallFrame&apos;s weak m_scope ref to the top scope gets cleared.
4. The Inspector calls DebuggerCallFrame::scope() to get the top scope again but gets a different DebuggerScope instance.
5. The Inspector iterates down the scope chain but never sees the parent scope instance that retained a ref to in step 2 above.  This is because when iterating this new DebuggerScope instance (which has no knowledge of the previous parent DebuggerScope instance), a new DebuggerScope instance will get created for the same parent scope. 

Since the DebuggerScope is a JSObject, it&apos;s liveness is determined by its reachability.  However, it&apos;s &quot;validity&quot; is determined by the life-cycle of its owner DebuggerCallFrame.  When the owner DebuggerCallFrame gets invalidated, its debugger scope chain (if instantiated) will also get invalidated.  This is why we need the DebuggerScope::invalidateChain() method.  The Inspector should not be using the DebuggerScope instance after its owner DebuggerCallFrame is invalidated.

Previously, I only added assertions of validity in the DebuggerScope methods.  I&apos;ve now also added explicit checks to do nothing if the scope has been invalidated.  I&apos;ve also added these comments to the ChangeLog.

&gt; &gt; Source/JavaScriptCore/debugger/DebuggerScope.cpp:51
&gt; &gt; +    if (!scope) {
&gt; 
&gt; This isn&apos;t right. Every function has a scope, so a null check is not the right way to find out if the function has allocated an activation object.

The scope in this case is an optional value passed in from DebuggerScope::create().  I&apos;m using it to mean 2 things here:
1. If unspecified (i.e. null), we&apos;ll initialize the DebuggerScope instance with the scope of the DebuggerCallFrame&apos;s underlying CallFrame.
2. If specified (i.e. not null), we&apos;ll initialize the DebuggerScope instance with the specified scope.  We need this when we are creating DebuggerScope instances for &quot;parent&quot; scopes in the scope chain of the same DebuggerCallFrame.  We instantiate these in DebuggerScope::next().

I&apos;ll add this detail to the ChangeLog since it looks like it&apos;s not obvious from the code.

&gt; &gt; Source/JavaScriptCore/debugger/DebuggerScope.cpp:138
&gt; &gt; +void DebuggerScope::invalidateChain()
&gt; 
&gt; Why do we need to do this? I don&apos;t think we should do this.

As stated above, this is to keep the DebuggerScope&apos;s validity state consistent with its owner DebuggerCallFrame.  It&apos;s also part of its life cycle management so that we can release DebuggerScope instances as soon as they become invalid and unreachable.

&gt; &gt; Source/JavaScriptCore/debugger/DebuggerScope.cpp:171
&gt; &gt; +JSObject* DebuggerScope::objectAtScope() const
&gt; &gt; +{
&gt; &gt; +    ASSERT(isValid());
&gt; &gt; +    return JSScope::objectAtScope(m_scope.get());
&gt; &gt;  }
&gt; 
&gt; I think this helper function just obfuscates things. It would be better to write this one line of code at the call site.

Fixed.

&gt; &gt; Source/JavaScriptCore/debugger/DebuggerScope.h:95
&gt; &gt; +    JSScope* toJSScope() { return m_scope.get(); }
&gt; 
&gt; We use the &quot;to&quot; prefix to indicate a conversion -- usually, a type case. In this case, you&apos;re just returning a data member, so you should use normal accessor naming: The data member should be named &quot;m_jsScope&quot; and the accessor should be named &quot;jsScope()&quot;.

Fixed.

New patch coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019764</commentid>
    <comment_count>4</comment_count>
      <attachid>234198</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-07-01 14:31:32 -0700</bug_when>
    <thetext>Created attachment 234198
patch 2: revised.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019782</commentid>
    <comment_count>5</comment_count>
      <attachid>234198</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-07-01 15:16:15 -0700</bug_when>
    <thetext>Comment on attachment 234198
patch 2: revised.

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

&gt; Source/JavaScriptCore/debugger/DebuggerScope.h:99
&gt; +    DebuggerCallFrame* m_debuggerCallFrame;

We don&apos;t want an m_debuggerCallFrame data member. It doesn&apos;t make sense for our caller to point to our callFrame. Also, we only use m_debuggerCallFrame to allocate an activation, which our caller can do for us.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019785</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-07-01 15:19:05 -0700</bug_when>
    <thetext>&gt; We don&apos;t want an m_debuggerCallFrame data member. It doesn&apos;t make sense for our caller to point to our callFrame. Also, we only use m_debuggerCallFrame to allocate an activation, which our caller can do for us.

s/caller/lexical parent/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019836</commentid>
    <comment_count>7</comment_count>
      <attachid>234219</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-07-01 16:58:48 -0700</bug_when>
    <thetext>Created attachment 234219
patch 3: revert to letting DebuggerCallFrame instantiate the JSActivation object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019842</commentid>
    <comment_count>8</comment_count>
      <attachid>234219</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-07-01 17:02:57 -0700</bug_when>
    <thetext>Comment on attachment 234219
patch 3: revert to letting DebuggerCallFrame instantiate the JSActivation object.

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

r=me

&gt; Source/JavaScriptCore/debugger/DebuggerCallFrame.h:85
&gt; +    Strong&lt;DebuggerScope&gt; m_scope;

Comment please.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019848</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-07-01 17:13:35 -0700</bug_when>
    <thetext>Thanks.  The requested comment about the strong ref for DebuggerCallFrame::m_scope has been added.

Landed in r170680: &lt;http://trac.webkit.org/r170680&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028048</commentid>
    <comment_count>10</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-08-08 23:53:43 -0700</bug_when>
    <thetext>This patch was rolled out in r172372: &lt;http://trac.webkit.org/r172372&gt; due to &lt;https://webkit.org/b/135656&gt;.  Re-opening to fix the implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031561</commentid>
    <comment_count>11</comment_count>
      <attachid>237195</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-08-26 20:33:35 -0700</bug_when>
    <thetext>Created attachment 237195
patch 4: with fix for https://webkit.org/b/135656</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031562</commentid>
    <comment_count>12</comment_count>
      <attachid>237196</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-08-26 20:34:31 -0700</bug_when>
    <thetext>Created attachment 237196
Summary diff between patch 3 and 4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031694</commentid>
    <comment_count>13</comment_count>
      <attachid>237195</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-08-27 11:01:11 -0700</bug_when>
    <thetext>Comment on attachment 237195
patch 4: with fix for https://webkit.org/b/135656

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

r=me, with some fixes below:

&gt; Source/JavaScriptCore/ChangeLog:52
&gt; +           Since the DebuggerScope is a JSObject, it&apos;s liveness is determined by its reachability.

Should be &quot;its&quot;.

&gt; Source/JavaScriptCore/ChangeLog:53
&gt; +           However, it&apos;s &quot;validity&quot; is determined by the life-cycle of its owner DebuggerCallFrame.

Ditto.

&gt; Source/JavaScriptCore/debugger/DebuggerScope.cpp:160
&gt; +bool DebuggerScope::isFunctionScope() const
&gt; +{
&gt; +    // In the current debugger implementation, every function will create an
&gt; +    // activation object. Hence, an activation object implies a function scope.
&gt; +    return m_scope-&gt;isActivationObject();
&gt;  }

This seems wrong. If you eval(), the eval code will run in the scope of its containing function, and it will have an activation object as its scope.

&gt; Source/JavaScriptCore/debugger/DebuggerScope.h:81
&gt; +    Iterator begin();
&gt; +    Iterator end();

&quot;Iterator&quot; should be lower case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031768</commentid>
    <comment_count>14</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-08-27 14:06:44 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; &gt; Source/JavaScriptCore/debugger/DebuggerScope.cpp:160
&gt; &gt; +bool DebuggerScope::isFunctionScope() const
&gt; &gt; +{
&gt; &gt; +    // In the current debugger implementation, every function will create an
&gt; &gt; +    // activation object. Hence, an activation object implies a function scope.
&gt; &gt; +    return m_scope-&gt;isActivationObject();
&gt; &gt;  }
&gt; 
&gt; This seems wrong. If you eval(), the eval code will run in the scope of its containing function, and it will have an activation object as its scope.

I&apos;ve fixed the rest and am looking into this.  While testing for this, I&apos;m seeing some difference in behavior in the Inspector with this change vs the baseline and Chrome.  Note: the baseline and Chrome are in agreement.  I&apos;m investigating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031770</commentid>
    <comment_count>15</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-08-27 14:08:27 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; I&apos;ve fixed the rest and am looking into this.  While testing for this, I&apos;m seeing some difference in behavior in the Inspector with this change vs the baseline and Chrome.  Note: the baseline and Chrome are in agreement.  I&apos;m investigating.

To clarify, the difference I saw is with a WithScope, not an eval.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032040</commentid>
    <comment_count>16</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-08-28 11:44:54 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; I&apos;ve fixed the rest and am looking into this.  While testing for this, I&apos;m seeing some difference in behavior in the Inspector with this change vs the baseline and Chrome.  Note: the baseline and Chrome are in agreement.  I&apos;m investigating.
&gt; 
&gt; To clarify, the difference I saw is with a WithScope, not an eval.

The issue with WithScopes not correctly showing the values of some of its properties (e.g. __defineGetter__) is due to the fact that we can only override getOwnPropertySlot() but not getPropertySlot().  The values being read incorrectly comes from the with object&apos;s prototype chain.  JSObject::getPropertySlot() ends up reading the prototype chain of the DebuggerScope instead of the with object.

Some solutions:
1. Change JSObject::getPropertySlot() to be overridable.
    This is risky and can result in performance penalties.

2. Create a different Structure for each DebuggerScope instance so that it can embedded a different prototype object based on the scope object it is wrapping.
    This uses more memory (even if it&apos;s only by the debugger) and can be tricky e.g. do we use the prototype of the WithScope or the with object within the WithScope?  For correctness, we currently need the prototype of the with object.
    This approach also limits the DebuggerScope to only wrapping the tip object, and not any of its prototype chain.

3. Let the DebuggerScope&apos;s getOwnPropertySlot() be responsible for the wrapped object&apos;s getPropertySlot(), and present them all as properties of the DebuggerScope.
    The downside of this approach is that we lose information about whether properties are in the tip wrapped scope object or in its prototypes.
    Another complication is: do we want to expose all the properties in the JSScope&apos;s prototype chain?

Of all these, I think option 3 is the safest and least intrusive into the system.  As for whether to expose the properties in the JSScope&apos;s prototype chain or not, the DebuggerScope could always exercise that discretion e.g. only iterate the prototype chain for with objects.  I will give this approach a try and see if any unforeseen issues manifest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032041</commentid>
    <comment_count>17</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-08-28 11:57:31 -0700</bug_when>
    <thetext>Since the global object can be in scope, and has a prototype, you probably need to iterate prototype properties for it, too.

Whether it&apos;s better to show these properties as &quot;own&quot; properties of the debugger scope (your #3), or as prototype properties of the debugger scope (your #2) just depends on how the inspector uses DebuggerScope. If the Inspector doesn&apos;t care about &quot;own&quot; vs prototype properties when displaying what&apos;s in scope, then I think you&apos;re right that it&apos;s best just to show these properties as &quot;own&quot; properties.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032087</commentid>
    <comment_count>18</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-08-28 16:06:09 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; &gt; Source/JavaScriptCore/debugger/DebuggerScope.cpp:160
&gt; &gt; +bool DebuggerScope::isFunctionScope() const
&gt; &gt; +{
&gt; &gt; +    // In the current debugger implementation, every function will create an
&gt; &gt; +    // activation object. Hence, an activation object implies a function scope.
&gt; &gt; +    return m_scope-&gt;isActivationObject();
&gt; &gt;  }
&gt; 
&gt; This seems wrong. If you eval(), the eval code will run in the scope of its containing function, and it will have an activation object as its scope.

For now, it appears that the DebuggerScope does not need to distinguish between functions and evals.  So, I renamed this to isFunctionOrEvalScope() for now.  We can further distinguish the 2 later is a need arises.

Also, solution 3 (having DebuggerScope::getOwnPropertySlot() call JSObject::getPropertySlot() on its wrapped scope) seems to work fine for the WebInspector&apos;s needs.

Updated patch coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032088</commentid>
    <comment_count>19</comment_count>
      <attachid>237328</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-08-28 16:09:10 -0700</bug_when>
    <thetext>Created attachment 237328
patch 5: with getPropertySlot() fix for With and Global scopes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032090</commentid>
    <comment_count>20</comment_count>
      <attachid>237328</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-08-28 16:23:25 -0700</bug_when>
    <thetext>Comment on attachment 237328
patch 5: with getPropertySlot() fix for With and Global scopes.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032110</commentid>
    <comment_count>21</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-08-28 17:50:19 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r173100: &lt;http://trac.webkit.org/r173100&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234038</attachid>
            <date>2014-06-27 18:34:36 -0700</date>
            <delta_ts>2014-07-01 14:31:32 -0700</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-134420.patch</filename>
            <type>text/plain</type>
            <size>30799</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwNTYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg0IEBA
CisyMDE0LTA2LTI3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBb
ZnRsb3B0XSBEZWJ1Z2dlckNhbGxGcmFtZTo6c2NvcGUoKSBzaG91bGQgcmV0dXJuIGEgRGVidWdn
ZXJTY29wZS4KKyAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEzNDQyMD4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmV2aW91c2x5LCBEZWJ1
Z2dlckNhbGxGcmFtZTo6c2NvcGUoKSByZXR1cm5zIGEgSlNBY3RpdmF0aW9uIChhbmQgcmVsZXZh
bnQKKyAgICAgICAgcGVlcnMpIHdoaWNoIHRoZSBXZWJJbnNwZWN0b3Igd2lsbCB1c2UgdG8gaW50
cm9zcGVjdCBDYWxsRnJhbWUgdmFyaWFibGVzLgorICAgICAgICBJbnN0ZWFkLCB3ZSBzaG91bGQg
YmUgcmV0dXJuaW5nIGEgRGVidWdnZXJTY29wZSBhcyBhbiBhYnN0cmFjdGlvbiBsYXllciB0aGF0
CisgICAgICAgIHByb3ZpZGVzIHRoZSBpbnRyb3NwZWN0aW9uIGZ1bmN0aW9uYWxpdHkgdGhhdCB0
aGUgV2ViSW5zcGVjdG9yIG5lZWRzLiAgVGhpcworICAgICAgICBpcyB0aGUgZmlyc3Qgc3RlcCB0
b3dhcmRzIG5vdCBmb3JjaW5nIGV2ZXJ5IGZyYW1lIHRvIGhhdmUgYSBKU0FjdGl2YXRpb24KKyAg
ICAgICAgb2JqZWN0IGp1c3QgYmVjYXVzZSB0aGUgZGVidWdnZXIgaXMgZW5hYmxlZC4KKworICAg
ICAgICAxLiBJbnN0YW50aWF0ZSB0aGUgZGVidWdnZXJTY29wZVN0cnVjdHVyZSBhcyBhIG1lbWJl
ciBvZiB0aGUgSlNHbG9iYWxPYmplY3QKKyAgICAgICAgICAgaW5zdGVhZCBvZiB0aGUgVk0uICBU
aGlzIGFsbG93cyBKU09iamVjdDo6Z2xvYmFsT2JqZWN0KCkgdG8gYmUgYWJsZSB0bworICAgICAg
ICAgICByZXR1cm4gdGhlIGdsb2JhbCBvYmplY3QgZm9yIHRoZSBEZWJ1Z2dlclNjb3BlLgorCisg
ICAgICAgICAgIEluc3RlYWQgb2YgaW5pdGlhbGl6aW5nIHRoZSBkZWJ1Z2dlclNjb3BlU3RydWN0
dXJlIHVuY29uZGl0aW9uYWxseSwKKyAgICAgICAgICAgSSBsYXppbHkgaW5pdGlhbGl6ZSBpdCBv
bmx5IHdoZW4gYSBkZWJ1Z2dlciBpcyBhdHRhY2hlZC4gCisKKyAgICAgICAgMi4gVGhlIERlYnVn
Z2VyU2NvcGUgbm93IHRha2VzIGNhcmUgb2YgaW5zdGFudGlhdGluZyB0aGUgSlNBY3RpdmF0aW9u
IG9iamVjdAorICAgICAgICAgICBmb3IgdGhlIHNjb3BlIGluc3RlYWQgb2YgZXhwbGljaXRseSBk
b2luZyBpdCBpbiBEZWJ1Z2dlckNhbGxGcmFtZTo6c2NvcGUoKS4KKyAgICAgICAgICAgVGhpcyBh
bGxvd3MgdGhlIERlYnVnZ2VyU2NvcGUgdG8gaGlkZSBob3cgdGhlIGluc3BlY3RvciBnZXRzIGlu
dHJvc3BlY3Rpb24KKyAgICAgICAgICAgaW5mb3JtYXRpb24gYWJvdXQgc2NvcGVzIG9mIENhbGxG
cmFtZXMgb24gdGhlIHN0YWNrLgorCisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuY3BwOgor
ICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6YXR0YWNoKToKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1
Z2dlci5oOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcDoKKyAgICAg
ICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6OnNjb3BlKToKKyAgICAgICAgKEpTQzo6RGVidWdn
ZXJDYWxsRnJhbWU6OmV2YWx1YXRlKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6
OmludmFsaWRhdGUpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZTo6dm0pOgorICAg
ICAgICAoSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZTo6bGV4aWNhbEdsb2JhbE9iamVjdCk6CisgICAg
ICAgICogZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaDoKKyAgICAgICAgKiBkZWJ1Z2dlci9E
ZWJ1Z2dlclNjb3BlLmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6RGVidWdnZXJT
Y29wZSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6
OkRlYnVnZ2VyU2NvcGU6OmNsYXNzTmFtZSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6
OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OnB1dCk6
CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6RGVidWdnZXJTY29wZTo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6
OkRlYnVnZ2VyU2NvcGU6OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6RGVidWdn
ZXJTY29wZTo6bmV4dCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OmludmFsaWRhdGVD
aGFpbik6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OmlzV2l0aFNjb3BlKToKKyAgICAg
ICAgKEpTQzo6RGVidWdnZXJTY29wZTo6aXNHbG9iYWxTY29wZSk6CisgICAgICAgIChKU0M6OkRl
YnVnZ2VyU2NvcGU6OmlzRnVuY3Rpb25TY29wZSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2Nv
cGU6Om9iamVjdEF0U2NvcGUpOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaDoK
KyAgICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RGVi
dWdnZXJTY29wZTo6SXRlcmF0b3I6Okl0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJT
Y29wZTo6SXRlcmF0b3I6OmdldCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6Okl0ZXJh
dG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6SXRlcmF0b3I6
Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjpJdGVyYXRvcjo6b3Bl
cmF0b3IhPSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OmlzVmFsaWQpOgorICAgICAg
ICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjp0b0pTU2NvcGUpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dl
clNjb3BlOjpiZWdpbik6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OmVuZCk6CisgICAg
ICAgICogaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHA6CisgICAgICAgIChJbnNw
ZWN0b3I6OkpTSmF2YVNjcmlwdENhbGxGcmFtZTo6c2NvcGVUeXBlKToKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6SlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzY29wZUNoYWluKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5oOgorICAgICAgICAoSW5zcGVjdG9yOjpKYXZhU2Ny
aXB0Q2FsbEZyYW1lOjpzY29wZUNoYWluKToKKyAgICAgICAgKiBpbnNwZWN0b3IvU2NyaXB0RGVi
dWdTZXJ2ZXIuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAg
ICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6
OkpTR2xvYmFsT2JqZWN0OjplbnN1cmVEZWJ1Z2dlclNjb3BlU3RydWN0dXJlSXNJbml0aWFsaXpl
ZCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAoSlNDOjpK
U0dsb2JhbE9iamVjdDo6ZGVidWdnZXJTY29wZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGlt
ZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aXNXaXRoU2NvcGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNTY29wZS5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAg
ICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxNC0wNi0y
NyAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmll
d2VkIGJ1aWxkIGZpeCBhZnRlciByMTY5Nzk1LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCShyZXZpc2lvbiAxNzA1MDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzks
NiArMTc5LDggQEAgdm9pZCBEZWJ1Z2dlcjo6YXR0YWNoKEpTR2xvYmFsT2JqZWN0KiBnbAogICAg
ICAgICBBU1NFUlQobV92bSA9PSAmZ2xvYmFsT2JqZWN0LT52bSgpKTsKICAgICBnbG9iYWxPYmpl
Y3QtPnNldERlYnVnZ2VyKHRoaXMpOwogICAgIG1fZ2xvYmFsT2JqZWN0cy5hZGQoZ2xvYmFsT2Jq
ZWN0KTsKKworICAgIGdsb2JhbE9iamVjdC0+ZW5zdXJlRGVidWdnZXJTY29wZVN0cnVjdHVyZUlz
SW5pdGlhbGl6ZWQoKTsKIH0KIAogdm9pZCBEZWJ1Z2dlcjo6ZGV0YWNoKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFJlYXNvbkZvckRldGFjaCByZWFzb24pCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAkocmV2aXNpb24gMTcwNTA0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDYgKzM0LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIENvZGVCbG9jazsKIGNs
YXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3MgU291cmNlUHJvdmlk
ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJh
bWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1
Z2dlckNhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDE3MDUwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDEyICszMCwxNCBAQAogI2luY2x1ZGUgIkRlYnVnZ2VyQ2FsbEZyYW1lLmgiCiAKICNpbmNsdWRl
ICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJEZWJ1Z2dlclNjb3BlLmgiCiAjaW5jbHVkZSAiSW50
ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKICNpbmNsdWRlICJKU0Z1bmN0
aW9uLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlBhcnNlci5oIgogI2lu
Y2x1ZGUgIlN0YWNrVmlzaXRvci5oIgorI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKQEAgLTEwNiwyMCArMTA4LDE3IEBAIFN0cmluZyBEZWJ1Z2dlckNhbGxG
cmFtZTo6ZnVuY3Rpb25OYW1lKCkKICAgICByZXR1cm4gZ2V0Q2FsY3VsYXRlZERpc3BsYXlOYW1l
KG1fY2FsbEZyYW1lLCBmdW5jdGlvbik7CiB9CiAKLUpTU2NvcGUqIERlYnVnZ2VyQ2FsbEZyYW1l
OjpzY29wZSgpIGNvbnN0CitEZWJ1Z2dlclNjb3BlKiBEZWJ1Z2dlckNhbGxGcmFtZTo6c2NvcGUo
KQogewogICAgIEFTU0VSVChpc1ZhbGlkKCkpOwogICAgIGlmICghaXNWYWxpZCgpKQogICAgICAg
ICByZXR1cm4gMDsKIAotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jYWxsRnJhbWUtPmNv
ZGVCbG9jaygpOwotICAgIGlmIChjb2RlQmxvY2sgJiYgY29kZUJsb2NrLT5uZWVkc0FjdGl2YXRp
b24oKSAmJiAhbV9jYWxsRnJhbWUtPmhhc0FjdGl2YXRpb24oKSkgewotICAgICAgICBKU0FjdGl2
YXRpb24qIGFjdGl2YXRpb24gPSBKU0FjdGl2YXRpb246OmNyZWF0ZSgqY29kZUJsb2NrLT52bSgp
LCBtX2NhbGxGcmFtZSwgY29kZUJsb2NrKTsKLSAgICAgICAgbV9jYWxsRnJhbWUtPnNldEFjdGl2
YXRpb24oYWN0aXZhdGlvbik7Ci0gICAgICAgIG1fY2FsbEZyYW1lLT5zZXRTY29wZShhY3RpdmF0
aW9uKTsKKyAgICBpZiAoIW1fc2NvcGUpIHsKKyAgICAgICAgVk0mIHZtID0gbV9jYWxsRnJhbWUt
PnZtKCk7CisgICAgICAgIG1fc2NvcGUuc2V0KHZtLCBEZWJ1Z2dlclNjb3BlOjpjcmVhdGUodm0s
IHRoaXMpKTsKICAgICB9Ci0KLSAgICByZXR1cm4gbV9jYWxsRnJhbWUtPnNjb3BlKCk7CisgICAg
cmV0dXJuIG1fc2NvcGUuZ2V0KCk7CiB9CiAKIERlYnVnZ2VyQ2FsbEZyYW1lOjpUeXBlIERlYnVn
Z2VyQ2FsbEZyYW1lOjp0eXBlKCkgY29uc3QKQEAgLTE2Miw3ICsxNjEsNyBAQCBKU1ZhbHVlIERl
YnVnZ2VyQ2FsbEZyYW1lOjpldmFsdWF0ZShjb25zCiAgICAgfQogCiAgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSB0aGlzVmFsdWVGb3JDYWxsRnJhbWUoY2FsbEZyYW1lKTsKLSAgICBKU1ZhbHVlIHJl
c3VsdCA9IHZtLmludGVycHJldGVyLT5leGVjdXRlKGV2YWwsIGNhbGxGcmFtZSwgdGhpc1ZhbHVl
LCBzY29wZSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHZtLmludGVycHJldGVyLT5leGVjdXRl
KGV2YWwsIGNhbGxGcmFtZSwgdGhpc1ZhbHVlLCBzY29wZSgpLT50b0pTU2NvcGUoKSk7CiAgICAg
aWYgKHZtLmV4Y2VwdGlvbigpKSB7CiAgICAgICAgIGV4Y2VwdGlvbiA9IHZtLmV4Y2VwdGlvbigp
OwogICAgICAgICB2bS5jbGVhckV4Y2VwdGlvbigpOwpAQCAtMTc0LDYgKzE3MywxMCBAQCBKU1Zh
bHVlIERlYnVnZ2VyQ2FsbEZyYW1lOjpldmFsdWF0ZShjb25zCiB2b2lkIERlYnVnZ2VyQ2FsbEZy
YW1lOjppbnZhbGlkYXRlKCkKIHsKICAgICBtX2NhbGxGcmFtZSA9IG51bGxwdHI7CisgICAgaWYg
KG1fc2NvcGUpIHsKKyAgICAgICAgbV9zY29wZS0+aW52YWxpZGF0ZUNoYWluKCk7CisgICAgICAg
IG1fc2NvcGUuY2xlYXIoKTsKKyAgICB9CiAgICAgUmVmUHRyPERlYnVnZ2VyQ2FsbEZyYW1lPiBm
cmFtZSA9IG1fY2FsbGVyLnJlbGVhc2UoKTsKICAgICB3aGlsZSAoZnJhbWUpIHsKICAgICAgICAg
ZnJhbWUtPm1fY2FsbEZyYW1lID0gbnVsbHB0cjsKQEAgLTIxMyw0ICsyMTYsMTQgQEAgSlNWYWx1
ZSBEZWJ1Z2dlckNhbGxGcmFtZTo6dGhpc1ZhbHVlRm9yQwogICAgIHJldHVybiB0aGlzVmFsdWU7
CiB9CiAKK1ZNJiBEZWJ1Z2dlckNhbGxGcmFtZTo6dm0oKSBjb25zdAoreworICAgIHJldHVybiBt
X2NhbGxGcmFtZS0+dm0oKTsKK30KKworSlNHbG9iYWxPYmplY3QqIERlYnVnZ2VyQ2FsbEZyYW1l
OjpsZXhpY2FsR2xvYmFsT2JqZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jYWxsRnJhbWUt
PmxleGljYWxHbG9iYWxPYmplY3QoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUu
aAkocmV2aXNpb24gMTcwNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDE0ICsyOSwxOCBAQAogI2lm
bmRlZiBEZWJ1Z2dlckNhbGxGcmFtZV9oCiAjZGVmaW5lIERlYnVnZ2VyQ2FsbEZyYW1lX2gKIAot
I2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyUHJpbWl0aXZlcy5oIgor
I2luY2x1ZGUgIlN0cm9uZy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0UG9zaXRpb24uaD4K
IAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIERlYnVnZ2VyU2NvcGU7CitjbGFzcyBFeGVjU3Rh
dGU7Cit0eXBlZGVmIEV4ZWNTdGF0ZSBDYWxsRnJhbWU7CisKIGNsYXNzIERlYnVnZ2VyQ2FsbEZy
YW1lIDogcHVibGljIFJlZkNvdW50ZWQ8RGVidWdnZXJDYWxsRnJhbWU+IHsKIHB1YmxpYzoKICAg
ICBlbnVtIFR5cGUgeyBQcm9ncmFtVHlwZSwgRnVuY3Rpb25UeXBlIH07CkBAIC01OCw3ICs2Miw3
IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBjb25zdCBUZXh0UG9zaXRpb24mIHBv
c2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQogCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgSlNHbG9iYWxPYmplY3QqIHZtRW50cnlHbG9iYWxPYmplY3QoKSBjb25zdDsKLSAgICBK
U19FWFBPUlRfUFJJVkFURSBKU1Njb3BlKiBzY29wZSgpIGNvbnN0OworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIERlYnVnZ2VyU2NvcGUqIHNjb3BlKCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3Ry
aW5nIGZ1bmN0aW9uTmFtZSgpIGNvbnN0OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIFR5cGUgdHlw
ZSgpIGNvbnN0OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgdGhpc1ZhbHVlKCkgY29u
c3Q7CkBAIC03NCwxMCArNzgsMTYgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBTb3VyY2VJRCBzb3VyY2VJREZvckNhbGxGcmFtZShDYWxsRnJhbWUqKTsKICAgICBzdGF0
aWMgSlNWYWx1ZSB0aGlzVmFsdWVGb3JDYWxsRnJhbWUoQ2FsbEZyYW1lKik7CiAKKyAgICBWTSYg
dm0oKSBjb25zdDsKKyAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCgpIGNv
bnN0OworCiBwcml2YXRlOgogICAgIENhbGxGcmFtZSogbV9jYWxsRnJhbWU7CiAgICAgUmVmUHRy
PERlYnVnZ2VyQ2FsbEZyYW1lPiBtX2NhbGxlcjsKICAgICBUZXh0UG9zaXRpb24gbV9wb3NpdGlv
bjsKKyAgICBTdHJvbmc8RGVidWdnZXJTY29wZT4gbV9zY29wZTsKKworICAgIGZyaWVuZCBjbGFz
cyBEZWJ1Z2dlclNjb3BlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwCShyZXZpc2lv
biAxNzA1MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29w
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiRGVidWdnZXJTY29wZS5oIgogCisjaW5jbHVkZSAiRGVidWdnZXJDYWxs
RnJhbWUuaCIKICNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM1
LDE3ICszNywzMSBAQCBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoCiAK
IGNvbnN0IENsYXNzSW5mbyBEZWJ1Z2dlclNjb3BlOjpzX2luZm8gPSB7ICJEZWJ1Z2dlclNjb3Bl
IiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShEZWJ1Z2dlclNjb3Bl
KSB9OwogCi1EZWJ1Z2dlclNjb3BlOjpEZWJ1Z2dlclNjb3BlKFZNJiB2bSkKLSAgICA6IEpTTm9u
RmluYWxPYmplY3Qodm0sIHZtLmRlYnVnZ2VyU2NvcGVTdHJ1Y3R1cmUuZ2V0KCkpCitEZWJ1Z2dl
clNjb3BlOjpEZWJ1Z2dlclNjb3BlKFZNJiB2bSwgRGVidWdnZXJDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKKyAgICA6IEpTTm9uRmluYWxPYmplY3Qodm0sIGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5kZWJ1Z2dlclNjb3BlU3RydWN0dXJlKCkpCisgICAgLCBtX2RlYnVnZ2VyQ2FsbEZy
YW1lKGNhbGxGcmFtZSkKIHsKKyAgICBBU1NFUlQoY2FsbEZyYW1lLT5pc1ZhbGlkKCkpOwogfQog
Ci12b2lkIERlYnVnZ2VyU2NvcGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNPYmplY3QqIGFj
dGl2YXRpb24pCit2b2lkIERlYnVnZ2VyU2NvcGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNT
Y29wZSogc2NvcGUpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIEFTU0VS
VChhY3RpdmF0aW9uKTsKLSAgICBBU1NFUlQoYWN0aXZhdGlvbi0+aXNBY3RpdmF0aW9uT2JqZWN0
KCkpOwotICAgIG1fYWN0aXZhdGlvbi5zZXQodm0sIHRoaXMsIGpzQ2FzdDxKU0FjdGl2YXRpb24q
PihhY3RpdmF0aW9uKSk7CisKKyAgICBpZiAoIXNjb3BlKSB7CisgICAgICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gbV9kZWJ1Z2dlckNhbGxGcmFtZS0+bV9jYWxsRnJhbWU7CisgICAgICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICAgICAgaWYg
KGNvZGVCbG9jayAmJiBjb2RlQmxvY2stPm5lZWRzQWN0aXZhdGlvbigpICYmICFjYWxsRnJhbWUt
Pmhhc0FjdGl2YXRpb24oKSkgeworICAgICAgICAgICAgQVNTRVJUKCFjYWxsRnJhbWUtPnNjb3Bl
KCktPmlzV2l0aFNjb3BlKCkpOworICAgICAgICAgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9u
ID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUodm0sIGNhbGxGcmFtZSwgY29kZUJsb2NrKTsKKyAgICAg
ICAgICAgIGNhbGxGcmFtZS0+c2V0QWN0aXZhdGlvbihhY3RpdmF0aW9uKTsKKyAgICAgICAgICAg
IGNhbGxGcmFtZS0+c2V0U2NvcGUoYWN0aXZhdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgc2Nv
cGUgPSBjYWxsRnJhbWUtPnNjb3BlKCk7CisgICAgfQorCisgICAgQVNTRVJUKHNjb3BlKTsKKyAg
ICBtX3Njb3BlLnNldCh2bSwgdGhpcywgc2NvcGUpOwogfQogCiB2b2lkIERlYnVnZ2VyU2NvcGU6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTU2
LDQzICs3MiwxMDIgQEAgdm9pZCBEZWJ1Z2dlclNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbAog
ICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNW
aXNpdENoaWxkcmVuKCkpOwogCiAgICAgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVj
dCwgdmlzaXRvcik7Ci0gICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fYWN0aXZhdGlv
bik7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc2NvcGUpOworICAgIHZpc2l0
b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX25leHQpOwogfQogCiBTdHJpbmcgRGVidWdnZXJTY29w
ZTo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgY29uc3QgRGVidWdn
ZXJTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxjb25zdCBEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0
KTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+bV9hY3RpdmF0aW9uLT5tZXRob2RUYWJsZSgpLT5j
bGFzc05hbWUodGhpc09iamVjdC0+bV9hY3RpdmF0aW9uLmdldCgpKTsKKyAgICBjb25zdCBEZWJ1
Z2dlclNjb3BlKiBzY29wZSA9IGpzQ2FzdDxjb25zdCBEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsK
KyAgICBBU1NFUlQoc2NvcGUtPmlzVmFsaWQoKSk7CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3Qg
PSBzY29wZS0+b2JqZWN0QXRTY29wZSgpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RU
YWJsZSgpLT5jbGFzc05hbWUodGhpc09iamVjdCk7CiB9CiAKIGJvb2wgRGVidWdnZXJTY29wZTo6
Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewotICAgIERlYnVn
Z2VyU2NvcGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RGVidWdnZXJTY29wZSo+KG9iamVjdCk7Ci0g
ICAgcmV0dXJuIHRoaXNPYmplY3QtPm1fYWN0aXZhdGlvbi0+bWV0aG9kVGFibGUoKS0+Z2V0T3du
UHJvcGVydHlTbG90KHRoaXNPYmplY3QtPm1fYWN0aXZhdGlvbi5nZXQoKSwgZXhlYywgcHJvcGVy
dHlOYW1lLCBzbG90KTsKKyAgICBEZWJ1Z2dlclNjb3BlKiBzY29wZSA9IGpzQ2FzdDxEZWJ1Z2dl
clNjb3BlKj4ob2JqZWN0KTsKKyAgICBBU1NFUlQoc2NvcGUtPmlzVmFsaWQoKSk7CisgICAgSlNP
YmplY3QqIHRoaXNPYmplY3QgPSBzY29wZS0+b2JqZWN0QXRTY29wZSgpOworICAgIHJldHVybiB0
aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAogdm9pZCBEZWJ1Z2dlclNjb3BlOjpwdXQo
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBEZWJ1Z2dlclNj
b3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0PERlYnVnZ2VyU2NvcGUqPihjZWxsKTsKLSAgICB0aGlz
T2JqZWN0LT5tX2FjdGl2YXRpb24tPm1ldGhvZFRhYmxlKCktPnB1dCh0aGlzT2JqZWN0LT5tX2Fj
dGl2YXRpb24uZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIERl
YnVnZ2VyU2NvcGUqIHNjb3BlID0ganNDYXN0PERlYnVnZ2VyU2NvcGUqPihjZWxsKTsKKyAgICBB
U1NFUlQoc2NvcGUtPmlzVmFsaWQoKSk7CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBzY29w
ZS0+b2JqZWN0QXRTY29wZSgpOworICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dCh0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAogYm9vbCBE
ZWJ1Z2dlclNjb3BlOjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAgICBEZWJ1Z2dlclNjb3BlKiB0aGlz
T2JqZWN0ID0ganNDYXN0PERlYnVnZ2VyU2NvcGUqPihjZWxsKTsKLSAgICByZXR1cm4gdGhpc09i
amVjdC0+bV9hY3RpdmF0aW9uLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2Jq
ZWN0LT5tX2FjdGl2YXRpb24uZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgRGVidWdn
ZXJTY29wZSogc2NvcGUgPSBqc0Nhc3Q8RGVidWdnZXJTY29wZSo+KGNlbGwpOworICAgIEFTU0VS
VChzY29wZS0+aXNWYWxpZCgpKTsKKyAgICBKU09iamVjdCogdGhpc09iamVjdCA9IHNjb3BlLT5v
YmplY3RBdFNjb3BlKCk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRl
bGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKIHZvaWQg
RGVidWdnZXJTY29wZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlv
bk1vZGUgbW9kZSkKIHsKLSAgICBEZWJ1Z2dlclNjb3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0PERl
YnVnZ2VyU2NvcGUqPihvYmplY3QpOwotICAgIHRoaXNPYmplY3QtPm1fYWN0aXZhdGlvbi0+bWV0
aG9kVGFibGUoKS0+Z2V0UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LT5tX2FjdGl2YXRpb24uZ2V0
KCksIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIERlYnVnZ2VyU2NvcGUqIHNjb3Bl
ID0ganNDYXN0PERlYnVnZ2VyU2NvcGUqPihvYmplY3QpOworICAgIEFTU0VSVChzY29wZS0+aXNW
YWxpZCgpKTsKKyAgICBKU09iamVjdCogdGhpc09iamVjdCA9IHNjb3BlLT5vYmplY3RBdFNjb3Bl
KCk7CisgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0UHJvcGVydHlOYW1lcyh0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogYm9vbCBEZWJ1Z2dlclNj
b3BlOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKIHsKLSAgICBEZWJ1Z2dlclNjb3BlKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PERlYnVnZ2VyU2NvcGUqPihvYmplY3QpOwotICAgIHJldHVybiB0aGlzT2Jq
ZWN0LT5tX2FjdGl2YXRpb24tPm1ldGhvZFRhYmxlKCktPmRlZmluZU93blByb3BlcnR5KHRoaXNP
YmplY3QtPm1fYWN0aXZhdGlvbi5nZXQoKSwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
LCBzaG91bGRUaHJvdyk7CisgICAgRGVidWdnZXJTY29wZSogc2NvcGUgPSBqc0Nhc3Q8RGVidWdn
ZXJTY29wZSo+KG9iamVjdCk7CisgICAgQVNTRVJUKHNjb3BlLT5pc1ZhbGlkKCkpOworICAgIEpT
T2JqZWN0KiB0aGlzT2JqZWN0ID0gc2NvcGUtPm9iamVjdEF0U2NvcGUoKTsKKyAgICByZXR1cm4g
dGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK0RlYnVn
Z2VyU2NvcGUqIERlYnVnZ2VyU2NvcGU6Om5leHQoKQoreworICAgIEFTU0VSVChpc1ZhbGlkKCkp
OworICAgIGlmICghbV9uZXh0ICYmIG1fc2NvcGUtPm5leHQoKSkgeworICAgICAgICBWTSYgdm0g
PSAqbV9zY29wZS0+dm0oKTsKKyAgICAgICAgRGVidWdnZXJTY29wZSogbmV4dFNjb3BlID0gY3Jl
YXRlKHZtLCBtX2RlYnVnZ2VyQ2FsbEZyYW1lLCBtX3Njb3BlLT5uZXh0KCkpOworICAgICAgICBt
X25leHQuc2V0KHZtLCB0aGlzLCBuZXh0U2NvcGUpOworICAgIH0KKyAgICByZXR1cm4gbV9uZXh0
LmdldCgpOworfQorCit2b2lkIERlYnVnZ2VyU2NvcGU6OmludmFsaWRhdGVDaGFpbigpCit7Cisg
ICAgRGVidWdnZXJTY29wZSogc2NvcGUgPSB0aGlzOworICAgIHdoaWxlIChzY29wZSkgeworICAg
ICAgICBBU1NFUlQoc2NvcGUtPmlzVmFsaWQoKSk7CisgICAgICAgIERlYnVnZ2VyU2NvcGUqIG5l
eHRTY29wZSA9IHNjb3BlLT5tX25leHQuZ2V0KCk7CisgICAgICAgIHNjb3BlLT5tX25leHQuY2xl
YXIoKTsKKyAgICAgICAgc2NvcGUtPm1fc2NvcGUuY2xlYXIoKTsKKyAgICAgICAgc2NvcGUgPSBu
ZXh0U2NvcGU7CisgICAgfQorfQorCitib29sIERlYnVnZ2VyU2NvcGU6OmlzV2l0aFNjb3BlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9zY29wZS0+aXNXaXRoU2NvcGUoKTsKK30KKworYm9vbCBE
ZWJ1Z2dlclNjb3BlOjppc0dsb2JhbFNjb3BlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zY29w
ZS0+aXNHbG9iYWxPYmplY3QoKTsKK30KKworYm9vbCBEZWJ1Z2dlclNjb3BlOjppc0Z1bmN0aW9u
U2NvcGUoKSBjb25zdAoreworICAgIC8vIEluIHRoZSBjdXJyZW50IGRlYnVnZ2VyIGltcGxlbWVu
dGF0aW9uLCBldmVyeSBmdW5jdGlvbiB3aWxsIGNyZWF0ZSBhbgorICAgIC8vIGFjdGl2YXRpb24g
b2JqZWN0LiBIZW5jZSwgYW4gYWN0aXZhdGlvbiBvYmplY3QgaW1wbGllcyBhIGZ1bmN0aW9uIHNj
b3BlLgorICAgIHJldHVybiBtX3Njb3BlLT5pc0FjdGl2YXRpb25PYmplY3QoKTsKK30KKworSlNP
YmplY3QqIERlYnVnZ2VyU2NvcGU6Om9iamVjdEF0U2NvcGUoKSBjb25zdAoreworICAgIEFTU0VS
VChpc1ZhbGlkKCkpOworICAgIHJldHVybiBKU1Njb3BlOjpvYmplY3RBdFNjb3BlKG1fc2NvcGUu
Z2V0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkocmV2aXNpb24gMTcwNTA0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsMTkgKzI2LDIyIEBACiAjaWZuZGVmIERlYnVnZ2VyU2NvcGVfaAogI2RlZmlu
ZSBEZWJ1Z2dlclNjb3BlX2gKIAorI2luY2x1ZGUgIkRlYnVnZ2VyQ2FsbEZyYW1lLmgiCiAjaW5j
bHVkZSAiSlNPYmplY3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEpTU2NvcGU7CisK
IGNsYXNzIERlYnVnZ2VyU2NvcGUgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6
CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0aWMgRGVidWdn
ZXJTY29wZSogY3JlYXRlKFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCkKKyAgICBzdGF0aWMgRGVi
dWdnZXJTY29wZSogY3JlYXRlKFZNJiB2bSwgRGVidWdnZXJDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
SlNTY29wZSogc2NvcGUgPSAwKQogICAgIHsKLSAgICAgICAgRGVidWdnZXJTY29wZSogYWN0aXZh
dGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPERlYnVnZ2VyU2NvcGU+KHZtLmhlYXAp
KSBEZWJ1Z2dlclNjb3BlKHZtKTsKLSAgICAgICAgYWN0aXZhdGlvbi0+ZmluaXNoQ3JlYXRpb24o
dm0sIG9iamVjdCk7Ci0gICAgICAgIHJldHVybiBhY3RpdmF0aW9uOworICAgICAgICBEZWJ1Z2dl
clNjb3BlKiBkZWJ1Z2dlclNjb3BlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RGVidWdn
ZXJTY29wZT4odm0uaGVhcCkpIERlYnVnZ2VyU2NvcGUodm0sIGNhbGxGcmFtZSk7CisgICAgICAg
IGRlYnVnZ2VyU2NvcGUtPmZpbmlzaENyZWF0aW9uKHZtLCBzY29wZSk7CisgICAgICAgIHJldHVy
biBkZWJ1Z2dlclNjb3BlOwogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKQEAgLTU2LDE2ICs1OSw2MSBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsgCiAgICAgfQog
Ci1wcm90ZWN0ZWQ6CisgICAgY2xhc3MgSXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAg
SXRlcmF0b3IoRGVidWdnZXJTY29wZSogbm9kZSkKKyAgICAgICAgICAgIDogbV9ub2RlKG5vZGUp
CisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIERlYnVnZ2VyU2NvcGUqIGdldCgpIHsg
cmV0dXJuIG1fbm9kZTsgfQorICAgICAgICBJdGVyYXRvciYgb3BlcmF0b3IrKygpIHsgbV9ub2Rl
ID0gbV9ub2RlLT5uZXh0KCk7IHJldHVybiAqdGhpczsgfQorICAgICAgICAvLyBwb3N0Zml4ICsr
IGludGVudGlvbmFsbHkgb21pdHRlZAorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJ
dGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZSA9PSBvdGhlci5tX25vZGU7IH0K
KyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyBy
ZXR1cm4gbV9ub2RlICE9IG90aGVyLm1fbm9kZTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAg
RGVidWdnZXJTY29wZSogbV9ub2RlOworICAgIH07CisKKyAgICBJdGVyYXRvciBiZWdpbigpOwor
ICAgIEl0ZXJhdG9yIGVuZCgpOworICAgIERlYnVnZ2VyU2NvcGUqIG5leHQoKTsKKworICAgIHZv
aWQgaW52YWxpZGF0ZUNoYWluKCk7CisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4g
ISFtX3Njb3BlOyB9CisKKyAgICBib29sIGlzV2l0aFNjb3BlKCkgY29uc3Q7CisgICAgYm9vbCBp
c0dsb2JhbFNjb3BlKCkgY29uc3Q7CisgICAgYm9vbCBpc0Z1bmN0aW9uU2NvcGUoKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICBKU19FWFBPUlRfUFJJVkFURSBEZWJ1Z2dlclNjb3BlKFZNJiwgRGVi
dWdnZXJDYWxsRnJhbWUqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiwgSlNTY29wZSopOworCisgICAgSlNTY29wZSogdG9KU1Njb3BlKCkgeyByZXR1cm4g
bV9zY29wZS5nZXQoKTsgfQorICAgIEpTT2JqZWN0KiBvYmplY3RBdFNjb3BlKCkgY29uc3Q7CisK
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgSlNPYmplY3Q6OlN0cnVj
dHVyZUZsYWdzOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYsIEpTT2JqZWN0KiBhY3RpdmF0aW9uKTsKKyAgICBEZWJ1Z2dlckNhbGxGcmFtZSogbV9kZWJ1
Z2dlckNhbGxGcmFtZTsKKyAgICBXcml0ZUJhcnJpZXI8SlNTY29wZT4gbV9zY29wZTsKKyAgICBX
cml0ZUJhcnJpZXI8RGVidWdnZXJTY29wZT4gbV9uZXh0OwogCi1wcml2YXRlOgotICAgIEpTX0VY
UE9SVF9QUklWQVRFIERlYnVnZ2VyU2NvcGUoVk0mKTsKLSAgICBXcml0ZUJhcnJpZXI8SlNBY3Rp
dmF0aW9uPiBtX2FjdGl2YXRpb247CisgICAgZnJpZW5kIGNsYXNzIERlYnVnZ2VyQ2FsbEZyYW1l
OwogfTsKIAoraW5saW5lIERlYnVnZ2VyU2NvcGU6Okl0ZXJhdG9yIERlYnVnZ2VyU2NvcGU6OmJl
Z2luKCkKK3sKKyAgICByZXR1cm4gSXRlcmF0b3IodGhpcyk7IAorfQorCitpbmxpbmUgRGVidWdn
ZXJTY29wZTo6SXRlcmF0b3IgRGVidWdnZXJTY29wZTo6ZW5kKCkKK3sgCisgICAgcmV0dXJuIEl0
ZXJhdG9yKDApOyAKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBEZWJ1Z2dl
clNjb3BlX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2Ny
aXB0Q2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDE3MDUwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikK
IAorI2luY2x1ZGUgIkRlYnVnZ2VyU2NvcGUuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1
ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCkBAIC05NSwyOSAr
OTYsMzAgQEAgSlNWYWx1ZSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OnNjb3BlVHlwZQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpbnQgaW5kZXggPSBleGVjLT5hcmd1bWVudCgw
KS5hc0ludDMyKCk7CiAKLSAgICBKU1Njb3BlKiBzY29wZUNoYWluID0gaW1wbCgpLnNjb3BlQ2hh
aW4oKTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gc2NvcGVDaGFpbi0+ZW5kKCk7Ci0K
LSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGlkZW50aWZ5aW5nIGFuZCByZXR1cm5pbmcgQ0FU
Q0hfU0NPUEUgYXBwcm9wcmlhdGVseS4KKyAgICBEZWJ1Z2dlclNjb3BlKiBzY29wZUNoYWluID0g
aW1wbCgpLnNjb3BlQ2hhaW4oKTsKKyAgICBEZWJ1Z2dlclNjb3BlOjpJdGVyYXRvciBlbmQgPSBz
Y29wZUNoYWluLT5lbmQoKTsKIAogICAgIGJvb2wgZm91bmRMb2NhbFNjb3BlID0gZmFsc2U7Ci0g
ICAgZm9yIChTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IHNjb3BlQ2hhaW4tPmJlZ2luKCk7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgSlNPYmplY3QqIHNjb3BlID0gaXRlci5nZXQo
KTsKLSAgICAgICAgaWYgKHNjb3BlLT5pc0FjdGl2YXRpb25PYmplY3QoKSkgewotICAgICAgICAg
ICAgaWYgKCFmb3VuZExvY2FsU2NvcGUpIHsKLSAgICAgICAgICAgICAgICAvLyBGaXJzdCBhY3Rp
dmF0aW9uIG9iamVjdCBpcyBsb2NhbCBzY29wZSwgZWFjaCBzdWNjZXNzaXZlIGFjdGl2YXRpb24g
b2JqZWN0IGlzIGNsb3N1cmUuCi0gICAgICAgICAgICAgICAgaWYgKCFpbmRleCkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6TE9DQUxf
U0NPUEUpOwotICAgICAgICAgICAgICAgIGZvdW5kTG9jYWxTY29wZSA9IHRydWU7Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKCFpbmRleCkKLSAgICAgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIo
SlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpDTE9TVVJFX1NDT1BFKTsKKyAgICBmb3IgKERlYnVnZ2Vy
U2NvcGU6Okl0ZXJhdG9yIGl0ZXIgPSBzY29wZUNoYWluLT5iZWdpbigpOyBpdGVyICE9IGVuZDsg
KytpdGVyKSB7CisgICAgICAgIERlYnVnZ2VyU2NvcGUqIHNjb3BlID0gaXRlci5nZXQoKTsKKwor
ICAgICAgICBpZiAoIWZvdW5kTG9jYWxTY29wZSAmJiBzY29wZS0+aXNGdW5jdGlvblNjb3BlKCkp
IHsKKyAgICAgICAgICAgIC8vIEZpcnN0IGZ1bmN0aW9uIHNjb3BlIGlzIHRoZSBsb2NhbCBzY29w
ZSwgZWFjaCBzdWNjZXNzaXZlIG9uZSBpcyBhIGNsb3N1cmUuCisgICAgICAgICAgICBpZiAoIWlu
ZGV4KQorICAgICAgICAgICAgICAgIHJldHVybiBqc051bWJlcihKU0phdmFTY3JpcHRDYWxsRnJh
bWU6OkxPQ0FMX1NDT1BFKTsKKyAgICAgICAgICAgIGZvdW5kTG9jYWxTY29wZSA9IHRydWU7CiAg
ICAgICAgIH0KIAogICAgICAgICBpZiAoIWluZGV4KSB7Ci0gICAgICAgICAgICAvLyBMYXN0IGlu
IHRoZSBjaGFpbiBpcyBnbG9iYWwgc2NvcGUuCi0gICAgICAgICAgICBpZiAoKytpdGVyID09IGVu
ZCkKKyAgICAgICAgICAgIGlmIChzY29wZS0+aXNXaXRoU2NvcGUoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4ganNOdW1iZXIoSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpXSVRIX1NDT1BFKTsKKyAg
ICAgICAgICAgIGlmIChzY29wZS0+aXNHbG9iYWxTY29wZSgpKSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKCsraXRlciA9PSBlbmQpOwogICAgICAgICAgICAgICAgIHJldHVybiBqc051bWJlcihK
U0phdmFTY3JpcHRDYWxsRnJhbWU6OkdMT0JBTF9TQ09QRSk7Ci0gICAgICAgICAgICByZXR1cm4g
anNOdW1iZXIoSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpXSVRIX1NDT1BFKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgaWRlbnRpZnlpbmcgYW5kIHJl
dHVybmluZyBDQVRDSF9TQ09QRSBhcHByb3ByaWF0ZWx5LgorICAgICAgICAgICAgQVNTRVJUKHNj
b3BlLT5pc0Z1bmN0aW9uU2NvcGUoKSk7CisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoSlNK
YXZhU2NyaXB0Q2FsbEZyYW1lOjpDTE9TVVJFX1NDT1BFKTsKICAgICAgICAgfQogCiAgICAgICAg
IC0taW5kZXg7CkBAIC0xNTcsOSArMTU5LDkgQEAgSlNWYWx1ZSBKU0phdmFTY3JpcHRDYWxsRnJh
bWU6OnNjb3BlQ2hhaQogICAgIGlmICghaW1wbCgpLnNjb3BlQ2hhaW4oKSkKICAgICAgICAgcmV0
dXJuIGpzTnVsbCgpOwogCi0gICAgSlNTY29wZSogc2NvcGVDaGFpbiA9IGltcGwoKS5zY29wZUNo
YWluKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBzY29wZUNoYWluLT5iZWdpbigp
OwotICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBlbmQgPSBzY29wZUNoYWluLT5lbmQoKTsKKyAgICBE
ZWJ1Z2dlclNjb3BlKiBzY29wZUNoYWluID0gaW1wbCgpLnNjb3BlQ2hhaW4oKTsKKyAgICBEZWJ1
Z2dlclNjb3BlOjpJdGVyYXRvciBpdGVyID0gc2NvcGVDaGFpbi0+YmVnaW4oKTsKKyAgICBEZWJ1
Z2dlclNjb3BlOjpJdGVyYXRvciBlbmQgPSBzY29wZUNoYWluLT5lbmQoKTsKIAogICAgIC8vIFdl
IG11c3QgYWx3YXlzIGhhdmUgc29tZXRoaW5nIGluIHRoZSBzY29wZSBjaGFpbi4KICAgICBBU1NF
UlQoaXRlciAhPSBlbmQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9K
YXZhU2NyaXB0Q2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9KYXZhU2NyaXB0Q2FsbEZyYW1lLmgJKHJldmlzaW9uIDE3MDUwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAx
MyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMTMtMjAxNCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5n
IGZ1bmN0aW9uTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUtPmZ1bmN0
aW9uTmFtZSgpOyB9CiAgICAgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZTo6VHlwZSB0eXBlKCkgY29u
c3QgeyByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS0+dHlwZSgpOyB9Ci0gICAgSlNDOjpKU1Nj
b3BlKiBzY29wZUNoYWluKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS0+c2Nv
cGUoKTsgfQorICAgIEpTQzo6RGVidWdnZXJTY29wZSogc2NvcGVDaGFpbigpIGNvbnN0IHsgcmV0
dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUtPnNjb3BlKCk7IH0KICAgICBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiB2bUVudHJ5R2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlckNhbGxG
cmFtZS0+dm1FbnRyeUdsb2JhbE9iamVjdCgpOyB9CiAKICAgICBKU0M6OkpTVmFsdWUgdGhpc1Zh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7IH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdTZXJ2ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0
RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiAxNzA1MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnU2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
NiArMzQsNyBAQAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKICNpbmNsdWRlICJEZWJ1Z2dlckNh
bGxGcmFtZS5oIgorI2luY2x1ZGUgIkRlYnVnZ2VyU2NvcGUuaCIKICNpbmNsdWRlICJKU0phdmFT
Y3JpcHRDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKYXZhU2Ny
aXB0Q2FsbEZyYW1lLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAxNzA1MDQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJEYXRlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJEYXRl
UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKKyNpbmNsdWRlICJEZWJ1Z2dlclNj
b3BlLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFcnJvckNvbnN0cnVjdG9yLmgi
CiAjaW5jbHVkZSAiRXJyb3JQcm90b3R5cGUuaCIKQEAgLTY2MSw2ICs2NjIsNyBAQCB2b2lkIEpT
R2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgdmlzaXRvci5hcHBlbmQoJnRo
aXNPYmplY3QtPm1fcHJvbWlzZVByb3RvdHlwZSk7CiAjZW5kaWYKIAorICAgIHZpc2l0b3IuYXBw
ZW5kKCZ0aGlzT2JqZWN0LT5tX2RlYnVnZ2VyU2NvcGVTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3dpdGhTY29wZVN0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1fc3RyaWN0RXZhbEFjdGl2YXRpb25TdHJ1Y3R1cmUpOwogICAg
IHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2FjdGl2YXRpb25TdHJ1Y3R1cmUpOwpAQCAt
ODQ0LDQgKzg0NiwxMCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpxdWV1ZU1pY3JvdGFzayhQYXNz
CiAgICAgICAgIFdURkxvZ0Fsd2F5cygiRVJST1I6IEV2ZW50IGxvb3Agbm90IHN1cHBvcnRlZC4i
KTsKIH0KIAordm9pZCBKU0dsb2JhbE9iamVjdDo6ZW5zdXJlRGVidWdnZXJTY29wZVN0cnVjdHVy
ZUlzSW5pdGlhbGl6ZWQoKQoreworICAgIGlmICghbV9kZWJ1Z2dlclNjb3BlU3RydWN0dXJlKQor
ICAgICAgICBtX2RlYnVnZ2VyU2NvcGVTdHJ1Y3R1cmUuc2V0KG1fdm0sIHRoaXMsIERlYnVnZ2Vy
U2NvcGU6OmNyZWF0ZVN0cnVjdHVyZShtX3ZtLCB0aGlzLCBqc051bGwoKSkpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMTcwNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4
Myw3IEBAIHByb3RlY3RlZDoKICAgICBXcml0ZUJhcnJpZXI8SlNQcm9taXNlUHJvdG90eXBlPiBt
X3Byb21pc2VQcm90b3R5cGU7CiAjZW5kaWYKIAorICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IG1fZGVidWdnZXJTY29wZVN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBt
X3dpdGhTY29wZVN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cmlj
dEV2YWxBY3RpdmF0aW9uU3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1f
YWN0aXZhdGlvblN0cnVjdHVyZTsKQEAgLTM4OCw2ICszODksOSBAQCBwdWJsaWM6CiAgICAgSlNQ
cm9taXNlUHJvdG90eXBlKiBwcm9taXNlUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gbV9wcm9t
aXNlUHJvdG90eXBlLmdldCgpOyB9CiAjZW5kaWYKIAorICAgIHZvaWQgZW5zdXJlRGVidWdnZXJT
Y29wZVN0cnVjdHVyZUlzSW5pdGlhbGl6ZWQoKTsKKyAgICBTdHJ1Y3R1cmUqIGRlYnVnZ2VyU2Nv
cGVTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyU2NvcGVTdHJ1Y3R1cmUuZ2V0
KCk7IH0KKwogICAgIFN0cnVjdHVyZSogd2l0aFNjb3BlU3RydWN0dXJlKCkgY29uc3QgeyByZXR1
cm4gbV93aXRoU2NvcGVTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUqIHN0cmljdEV2
YWxBY3RpdmF0aW9uU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpY3RFdmFsQWN0aXZh
dGlvblN0cnVjdHVyZS5nZXQoKTsgfQogICAgIFN0cnVjdHVyZSogYWN0aXZhdGlvblN0cnVjdHVy
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZhdGlvblN0cnVjdHVyZS5nZXQoKTsgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxNzA1MDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01OTksNiArNTk5LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNOYW1lU2NvcGVPYmpl
Y3QoKSBjb25zdDsKICAgICBib29sIGlzQWN0aXZhdGlvbk9iamVjdCgpIGNvbnN0OwogICAgIGJv
b2wgaXNFcnJvckluc3RhbmNlKCkgY29uc3Q7CisgICAgYm9vbCBpc1dpdGhTY29wZSgpIGNvbnN0
OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZWFsKFZNJik7CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBmcmVlemUoVk0mKTsKQEAgLTExNDcsNiArMTE0OCwxMSBAQCBpbmxpbmUg
Ym9vbCBKU09iamVjdDo6aXNFcnJvckluc3RhbmNlKCkgCiAgICAgcmV0dXJuIHR5cGUoKSA9PSBF
cnJvckluc3RhbmNlVHlwZTsKIH0KIAoraW5saW5lIGJvb2wgSlNPYmplY3Q6OmlzV2l0aFNjb3Bl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHlwZSgpID09IFdpdGhTY29wZVR5cGU7Cit9CisKIGlu
bGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiB7CiAgICAgQVNTRVJUKHN0
cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5oCShy
ZXZpc2lvbiAxNzA1MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3Bl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw3ICsxNTAsNyBAQCBwdWJsaWM6CiAgICAgZnJpZW5k
IGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9m
TmV4dCgpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTT2JqZWN0KiBvYmplY3RB
dFNjb3BlKEpTU2NvcGUqKTsKKyAgICBzdGF0aWMgSlNPYmplY3QqIG9iamVjdEF0U2NvcGUoSlNT
Y29wZSopOwogCiAgICAgc3RhdGljIEpTVmFsdWUgcmVzb2x2ZShFeGVjU3RhdGUqLCBKU1Njb3Bl
KiwgY29uc3QgSWRlbnRpZmllciYpOwogICAgIHN0YXRpYyBSZXNvbHZlT3AgYWJzdHJhY3RSZXNv
bHZlKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBjb25zdCBJZGVudGlmaWVyJiwgR2V0T3JQdXQsIFJl
c29sdmVUeXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlz
aW9uIDE3MDUwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5o
IgogI2luY2x1ZGUgIkRGR0xvbmdMaXZlZFN0YXRlLmgiCiAjaW5jbHVkZSAiREZHV29ya2xpc3Qu
aCIKLSNpbmNsdWRlICJEZWJ1Z2dlclNjb3BlLmgiCiAjaW5jbHVkZSAiRXJyb3JJbnN0YW5jZS5o
IgogI2luY2x1ZGUgIkZUTFRodW5rcy5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uQ29uc3RydWN0b3Iu
aCIKQEAgLTI1NSw3ICsyNTQsNiBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVh
cFR5cGUpCiAgICAgcHJvcGVydHlOYW1lcyA9IG5ldyBDb21tb25JZGVudGlmaWVycyh0aGlzKTsK
ICAgICBzdHJ1Y3R1cmVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTdHJ1Y3R1cmU6OmNyZWF0ZVN0cnVj
dHVyZSgqdGhpcykpOwogICAgIHN0cnVjdHVyZVJhcmVEYXRhU3RydWN0dXJlLnNldCgqdGhpcywg
U3RydWN0dXJlUmFyZURhdGE6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
LSAgICBkZWJ1Z2dlclNjb3BlU3RydWN0dXJlLnNldCgqdGhpcywgRGVidWdnZXJTY29wZTo6Y3Jl
YXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHRlcm1pbmF0ZWRFeGVjdXRp
b25FcnJvclN0cnVjdHVyZS5zZXQoKnRoaXMsIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcjo6Y3Jl
YXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHN0cmluZ1N0cnVjdHVyZS5z
ZXQoKnRoaXMsIEpTU3RyaW5nOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7
CiAgICAgbm90QW5PYmplY3RTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU05vdEFuT2JqZWN0OjpjcmVh
dGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmgJKHJldmlzaW9uIDE3MDUwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2Miw3ICsyNjIsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJ1Y3R1cmVTdHJ1Y3R1cmU7CiAg
ICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cnVjdHVyZVJhcmVEYXRhU3RydWN0dXJlOwotICAg
ICAgICBTdHJvbmc8U3RydWN0dXJlPiBkZWJ1Z2dlclNjb3BlU3RydWN0dXJlOwogICAgICAgICBT
dHJvbmc8U3RydWN0dXJlPiB0ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmU7CiAgICAg
ICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cmluZ1N0cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0
cnVjdHVyZT4gbm90QW5PYmplY3RTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAx
NzA1NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxOCBAQAorMjAxNC0wNi0yNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisK
KyAgICAgICAgW2Z0bG9wdF0gRGVidWdnZXJDYWxsRnJhbWU6OnNjb3BlKCkgc2hvdWxkIHJldHVy
biBhIERlYnVnZ2VyU2NvcGUuCisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8xMzQ0MjA+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzLgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvZGVidWdnZXIvRGVidWdnZXJD
YWxsRnJhbWUuaDogUmVtb3ZlZC4KKyAgICAgICAgLSBUaGlzIGlzIG5vdCBpbiB1c2UuICBIZW5j
ZSwgd2UgY2FuIHJlbW92ZSBpdC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9s
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmF0dGFjaERlYnVn
Z2VyKToKKyAgICAgICAgLSBXZSBzaG91bGQgYWNxdWlyZSB0aGUgSlNMb2NrIGJlZm9yZSBtb2Rp
ZnlpbmcgYSBKUyBnbG9iYWwgb2JqZWN0LgorCiAyMDE0LTA2LTI0ICBNYXJrIExhbSAgPG1hcmsu
bGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbZnRsb3B0XSBSZW5hbWVkIERlYnVnZ2VyQWN0aXZh
dGlvbiB0byBEZWJ1Z2dlclNjb3BlLgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hl
YWRlcnMvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oCShy
ZXZpc2lvbiAxNzA1MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9kZWJ1
Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzAsMCBAQAot
I2lmbmRlZiBXZWJDb3JlX0ZXRF9EZWJ1Z2dlckNhbGxGcmFtZV9oCi0jZGVmaW5lIFdlYkNvcmVf
RldEX0RlYnVnZ2VyQ2FsbEZyYW1lX2gKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9EZWJ1Z2dl
ckNhbGxGcmFtZS5oPgotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTcwNTA0KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5NSw2ICsyOTUsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmF0dGFjaERlYnVnZ2VyKEpT
CiAgICAgICAgIHJldHVybjsKIAogICAgIEpTRE9NV2luZG93KiBnbG9iYWxPYmplY3QgPSBzaGVs
bC0+d2luZG93KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0LT52bSgpKTsK
ICAgICBpZiAoZGVidWdnZXIpCiAgICAgICAgIGRlYnVnZ2VyLT5hdHRhY2goZ2xvYmFsT2JqZWN0
KTsKICAgICBlbHNlIGlmIChKU0M6OkRlYnVnZ2VyKiBjdXJyZW50RGVidWdnZXIgPSBnbG9iYWxP
YmplY3QtPmRlYnVnZ2VyKCkpCg==
</data>
<flag name="review"
          id="258570"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234198</attachid>
            <date>2014-07-01 14:31:32 -0700</date>
            <delta_ts>2014-07-01 16:58:48 -0700</delta_ts>
            <desc>patch 2: revised.</desc>
            <filename>bug-134420.patch</filename>
            <type>text/plain</type>
            <size>34000</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwNTYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNyBA
QAorMjAxNC0wNi0yNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
W2Z0bG9wdF0gRGVidWdnZXJDYWxsRnJhbWU6OnNjb3BlKCkgc2hvdWxkIHJldHVybiBhIERlYnVn
Z2VyU2NvcGUuCisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8xMzQ0MjA+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJldmlvdXNseSwgRGVi
dWdnZXJDYWxsRnJhbWU6OnNjb3BlKCkgcmV0dXJucyBhIEpTQWN0aXZhdGlvbiAoYW5kIHJlbGV2
YW50CisgICAgICAgIHBlZXJzKSB3aGljaCB0aGUgV2ViSW5zcGVjdG9yIHdpbGwgdXNlIHRvIGlu
dHJvc3BlY3QgQ2FsbEZyYW1lIHZhcmlhYmxlcy4KKyAgICAgICAgSW5zdGVhZCwgd2Ugc2hvdWxk
IGJlIHJldHVybmluZyBhIERlYnVnZ2VyU2NvcGUgYXMgYW4gYWJzdHJhY3Rpb24gbGF5ZXIgdGhh
dAorICAgICAgICBwcm92aWRlcyB0aGUgaW50cm9zcGVjdGlvbiBmdW5jdGlvbmFsaXR5IHRoYXQg
dGhlIFdlYkluc3BlY3RvciBuZWVkcy4gIFRoaXMKKyAgICAgICAgaXMgdGhlIGZpcnN0IHN0ZXAg
dG93YXJkcyBub3QgZm9yY2luZyBldmVyeSBmcmFtZSB0byBoYXZlIGEgSlNBY3RpdmF0aW9uCisg
ICAgICAgIG9iamVjdCBqdXN0IGJlY2F1c2UgdGhlIGRlYnVnZ2VyIGlzIGVuYWJsZWQuCisKKyAg
ICAgICAgMS4gSW5zdGFudGlhdGUgdGhlIGRlYnVnZ2VyU2NvcGVTdHJ1Y3R1cmUgYXMgYSBtZW1i
ZXIgb2YgdGhlIEpTR2xvYmFsT2JqZWN0CisgICAgICAgICAgIGluc3RlYWQgb2YgdGhlIFZNLiAg
VGhpcyBhbGxvd3MgSlNPYmplY3Q6Omdsb2JhbE9iamVjdCgpIHRvIGJlIGFibGUgdG8KKyAgICAg
ICAgICAgcmV0dXJuIHRoZSBnbG9iYWwgb2JqZWN0IGZvciB0aGUgRGVidWdnZXJTY29wZS4KKwor
ICAgICAgICAyLiBUaGUgRGVidWdnZXJTY29wZSBub3cgdGFrZXMgY2FyZSBvZiBpbnN0YW50aWF0
aW5nIHRoZSBKU0FjdGl2YXRpb24gb2JqZWN0CisgICAgICAgICAgIGZvciB0aGUgc2NvcGUgaW5z
dGVhZCBvZiBleHBsaWNpdGx5IGRvaW5nIGl0IGluIERlYnVnZ2VyQ2FsbEZyYW1lOjpzY29wZSgp
LgorICAgICAgICAgICBUaGlzIGFsbG93cyB0aGUgRGVidWdnZXJTY29wZSB0byBoaWRlIGhvdyB0
aGUgaW5zcGVjdG9yIGdldHMgaW50cm9zcGVjdGlvbgorICAgICAgICAgICBpbmZvcm1hdGlvbiBh
Ym91dCBzY29wZXMgb2YgQ2FsbEZyYW1lcyBvbiB0aGUgc3RhY2suCisKKyAgICAgICAgMy4gRGVi
dWdnZXJTY29wZTo6Y3JlYXRlKCkgdGFrZXMgYW4gb3B0aW9uYWwgc2NvcGUgcGFyYW1ldGVyIHRo
YXQgZGVmYXVsdHMgdG8KKyAgICAgICAgICAgbnVsbC4gIFRoZSBzY29wZSBwYXJhbWV0ZXIgbWVh
bnMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgIDEuIElmIHVuc3BlY2lmaWVkIChp
LmUuIG51bGwpLCB3ZSdsbCBpbml0aWFsaXplIHRoZSBEZWJ1Z2dlclNjb3BlIGluc3RhbmNlCisg
ICAgICAgICAgICAgIHdpdGggdGhlIHNjb3BlIG9mIHRoZSBEZWJ1Z2dlckNhbGxGcmFtZSdzIHVu
ZGVybHlpbmcgQ2FsbEZyYW1lLiAgVGhpcworICAgICAgICAgICAgICBpcyB1c2VkIGluIERlYnVn
Z2VyQ2FsbEZyYW1lOjpzY29wZSgpIHdoZXJlIHdlIGluc3RhbnRpYXRlIHRoZSB0b3AKKyAgICAg
ICAgICAgICAgRGVidWdnZXJTY29wZSBmb3IgdGhhdCBmcmFtZS4KKyAgICAgICAgICAgMi4gSWYg
c3BlY2lmaWVkIChpLmUuIG5vdCBudWxsKSwgd2UnbGwgaW5pdGlhbGl6ZSB0aGUgRGVidWdnZXJT
Y29wZSBpbnN0YW5jZQorICAgICAgICAgICAgICB3aXRoIHRoZSBzcGVjaWZpZWQgc2NvcGUuICBX
ZSBuZWVkIHRoaXMgd2hlbiB3ZSBhcmUgY3JlYXRpbmcgRGVidWdnZXJTY29wZQorICAgICAgICAg
ICAgICBpbnN0YW5jZXMgZm9yICJwYXJlbnQiIHNjb3BlcyBpbiB0aGUgc2NvcGUgY2hhaW4gb2Yg
dGhlIHNhbWUgRGVidWdnZXJDYWxsRnJhbWUuCisgICAgICAgICAgICAgIFdlIGluc3RhbnRpYXRl
IHRoZXNlIGluIERlYnVnZ2VyU2NvcGU6Om5leHQoKS4KKworICAgICAgICA0LiBPbiB0aGUgRGVi
dWdnZXJTY29wZSdzIGxpZmUtY3ljbGUgbWFuYWdlbWVudDoKKworICAgICAgICAgICBUaGUgRGVi
dWdnZXJDYWxsRnJhbWUgaXMgZGVzaWduZWQgdG8gYmUgInZhbGlkIiBvbmx5IGR1cmluZyBhIGRl
YnVnZ2luZyBzZXNzaW9uCisgICAgICAgICAgICh3aGlsZSB0aGUgZGVidWdnZXIgaXMgYnJva2Vu
KSB0aHJvdWdoIHRoZSB1c2Ugb2YgYSBEZWJ1Z2dlckNhbGxGcmFtZVNjb3BlIGluCisgICAgICAg
ICAgIERlYnVnZ2VyOjpwYXVzZUlmTmVlZGVkKCkuICBPbmNlIHRoZSBkZWJ1Z2dlciByZXN1bWVz
IGZyb20gdGhlIGJyZWFrLCB0aGUKKyAgICAgICAgICAgRGVidWdnZXJDYWxsRnJhbWVTY29wZSBk
ZXN0cnVjdHMsIGFuZCB0aGUgRGVidWdnZXJDYWxsRnJhbWUgd2lsbCBiZSBpbnZhbGlkYXRlZC4K
KyAgICAgICAgICAgV2UgY2FuJ3QgZ3VhcmFudGVlIChmcm9tIHRoaXMgY29kZSBhbG9uZSkgdGhh
dCB0aGUgSW5zcGVjdG9yIGNvZGUgaXNuJ3Qgc3RpbGwKKyAgICAgICAgICAgaG9sZGluZyBhIHJl
ZiB0byB0aGUgRGVidWdnZXJDYWxsRnJhbWUgKHRob3VnaCB0aGV5IHNob3VsZG4ndCksIGJ1dCBi
eSBjb250cmFjdCwKKyAgICAgICAgICAgdGhlIGZyYW1lIHdpbGwgYmUgaW52YWxpZGF0ZWQsIGFu
ZCBhbnkgYXR0ZW1wdCB0byBxdWVyeSBpdCB3aWxsIHJldHVybiBudWxsIHZhbHVlcy4KKyAgICAg
ICAgICAgVGhpcyBpcyBwcmUtZXhpc3RpbmcgYmVoYXZpb3IuCisKKyAgICAgICAgICAgTm93LCB3
ZSdyZSBhZGRpbmcgdGhlIERlYnVnZ2VyU2NvcGUgaW50byB0aGUgcGljdHVyZS4gIFdoaWxlIGEg
c2luZ2xlIGRlYnVnZ2VyCisgICAgICAgICAgIHBhdXNlIHNlc3Npb24gaXMgaW4gcHJvZ3Jlc3Ms
IHRoZSBJbnNwZWN0b3IgbWF5IHJlcXVlc3QgdGhlIHNjb3BlIGZyb20gdGhlCisgICAgICAgICAg
IERlYnVnZ2VyQ2FsbEZyYW1lLiAgV2hpbGUgdGhlIERlYnVnZ2VyQ2FsbEZyYW1lIGlzIHN0aWxs
IHZhbGlkLCB3ZSB3YW50CisgICAgICAgICAgIERlYnVnZ2VyQ2FsbEZyYW1lOjpzY29wZSgpIHRv
IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgRGVidWdnZXJTY29wZSBvYmplY3QuCisgICAgICAgICAg
IFRoaXMgaXMgd2h5IHdlIGhvbGQgb24gdG8gdGhlIERlYnVnZ2VyU2NvcGUgd2l0aCBhIHN0cm9u
ZyByZWYuCisKKyAgICAgICAgICAgSWYgd2UgdXNlIGEgd2VhayByZWYgaW5zdGVhZCwgdGhlIGZv
bGxvd2luZyBjb29reSBiZWhhdmlvciBjYW4gbWFuaWZlc3Q6CisgICAgICAgICAgIDEuIFRoZSBJ
bnNwZWN0b3IgY2FsbHMgRGVidWdnZXI6OnNjb3BlKCkgdG8gZ2V0IHRoZSB0b3Agc2NvcGUuCisg
ICAgICAgICAgIDIuIFRoZSBJbnNwZWN0b3IgaXRlcmF0ZXMgZG93biB0aGUgc2NvcGUgY2hhaW4g
YW5kIGlzIG5vdyBvbmx5IGhvbGRpbmcgYQorICAgICAgICAgICAgICByZWZlcmVuY2UgdG8gYSBw
YXJlbnQgc2NvcGUuICBJdCBpcyBubyBsb25nZXIgcmVmZXJlbmNpbmcgdGhlIHRvcCBzY29wZS4K
KyAgICAgICAgICAgMy4gQSBHQyBvY2N1cnMsIGFuZCB0aGUgRGVidWdnZXJDYWxsRnJhbWUncyB3
ZWFrIG1fc2NvcGUgcmVmIHRvIHRoZSB0b3Agc2NvcGUKKyAgICAgICAgICAgICAgZ2V0cyBjbGVh
cmVkLgorICAgICAgICAgICA0LiBUaGUgSW5zcGVjdG9yIGNhbGxzIERlYnVnZ2VyQ2FsbEZyYW1l
OjpzY29wZSgpIHRvIGdldCB0aGUgdG9wIHNjb3BlIGFnYWluIGJ1dCBnZXRzCisgICAgICAgICAg
ICAgIGEgZGlmZmVyZW50IERlYnVnZ2VyU2NvcGUgaW5zdGFuY2UuCisgICAgICAgICAgIDUuIFRo
ZSBJbnNwZWN0b3IgaXRlcmF0ZXMgZG93biB0aGUgc2NvcGUgY2hhaW4gYnV0IG5ldmVyIHNlZXMg
dGhlIHBhcmVudCBzY29wZQorICAgICAgICAgICAgICBpbnN0YW5jZSB0aGF0IHJldGFpbmVkIGEg
cmVmIHRvIGluIHN0ZXAgMiBhYm92ZS4gIFRoaXMgaXMgYmVjYXVzZSB3aGVuIGl0ZXJhdGluZwor
ICAgICAgICAgICAgICB0aGlzIG5ldyBEZWJ1Z2dlclNjb3BlIGluc3RhbmNlICh3aGljaCBoYXMg
bm8ga25vd2xlZGdlIG9mIHRoZSBwcmV2aW91cyBwYXJlbnQKKyAgICAgICAgICAgICAgRGVidWdn
ZXJTY29wZSBpbnN0YW5jZSksIGEgbmV3IERlYnVnZ2VyU2NvcGUgaW5zdGFuY2Ugd2lsbCBnZXQg
Y3JlYXRlZCBmb3IgdGhlCisgICAgICAgICAgICAgIHNhbWUgcGFyZW50IHNjb3BlLiAKKworICAg
ICAgICAgICBTaW5jZSB0aGUgRGVidWdnZXJTY29wZSBpcyBhIEpTT2JqZWN0LCBpdCdzIGxpdmVu
ZXNzIGlzIGRldGVybWluZWQgYnkgaXRzIHJlYWNoYWJpbGl0eS4KKyAgICAgICAgICAgSG93ZXZl
ciwgaXQncyAidmFsaWRpdHkiIGlzIGRldGVybWluZWQgYnkgdGhlIGxpZmUtY3ljbGUgb2YgaXRz
IG93bmVyIERlYnVnZ2VyQ2FsbEZyYW1lLgorICAgICAgICAgICBXaGVuIHRoZSBvd25lciBEZWJ1
Z2dlckNhbGxGcmFtZSBnZXRzIGludmFsaWRhdGVkLCBpdHMgZGVidWdnZXIgc2NvcGUgY2hhaW4g
KGlmCisgICAgICAgICAgIGluc3RhbnRpYXRlZCkgd2lsbCBhbHNvIGdldCBpbnZhbGlkYXRlZC4g
IFRoaXMgaXMgd2h5IHdlIG5lZWQgdGhlCisgICAgICAgICAgIERlYnVnZ2VyU2NvcGU6OmludmFs
aWRhdGVDaGFpbigpIG1ldGhvZC4gIFRoZSBJbnNwZWN0b3Igc2hvdWxkIG5vdCBiZSB1c2luZyB0
aGUKKyAgICAgICAgICAgRGVidWdnZXJTY29wZSBpbnN0YW5jZSBhZnRlciBpdHMgb3duZXIgRGVi
dWdnZXJDYWxsRnJhbWUgaXMgaW52YWxpZGF0ZWQuICBJZiBpdCBkb2VzLAorICAgICAgICAgICB0
aG9zZSBtZXRob2RzIHdpbGwgZG8gbm90aGluZyBvciByZXR1cm5lZCBhIGZhaWxlZCBzdGF0dXMu
CisKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5oOgorICAgICAgICAqIGRlYnVnZ2VyL0Rl
YnVnZ2VyQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6OnNj
b3BlKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6OmV2YWx1YXRlKToKKyAgICAg
ICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6OmludmFsaWRhdGUpOgorICAgICAgICAoSlNDOjpE
ZWJ1Z2dlckNhbGxGcmFtZTo6dm0pOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZTo6
bGV4aWNhbEdsb2JhbE9iamVjdCk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJDYWxsRnJh
bWUuaDoKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcDoKKyAgICAgICAgKEpT
Qzo6RGVidWdnZXJTY29wZTo6RGVidWdnZXJTY29wZSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2Vy
U2NvcGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6dmlz
aXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OmNsYXNzTmFtZSk6Cisg
ICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAg
IChKU0M6OkRlYnVnZ2VyU2NvcGU6OnB1dCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6
OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6Z2V0T3duUHJv
cGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OmRlZmluZU93blByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6bmV4dCk6CisgICAgICAgIChKU0M6
OkRlYnVnZ2VyU2NvcGU6OmludmFsaWRhdGVDaGFpbik6CisgICAgICAgIChKU0M6OkRlYnVnZ2Vy
U2NvcGU6OmlzV2l0aFNjb3BlKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6aXNHbG9i
YWxTY29wZSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OmlzRnVuY3Rpb25TY29wZSk6
CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJTY29wZS5oOgorICAgICAgICAoSlNDOjpEZWJ1
Z2dlclNjb3BlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjpJdGVyYXRv
cjo6SXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjpJdGVyYXRvcjo6Z2V0
KToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6SXRlcmF0b3I6Om9wZXJhdG9yKyspOgor
ICAgICAgICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjpJdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAg
ICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6Okl0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAg
KEpTQzo6RGVidWdnZXJTY29wZTo6aXNWYWxpZCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2Nv
cGU6OnRvSlNTY29wZSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OmJlZ2luKToKKyAg
ICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6ZW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSlNK
YXZhU2NyaXB0Q2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNKYXZhU2NyaXB0
Q2FsbEZyYW1lOjpzY29wZVR5cGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0phdmFTY3JpcHRD
YWxsRnJhbWU6OnNjb3BlQ2hhaW4pOgorICAgICAgICAqIGluc3BlY3Rvci9KYXZhU2NyaXB0Q2Fs
bEZyYW1lLmg6CisgICAgICAgIChJbnNwZWN0b3I6OkphdmFTY3JpcHRDYWxsRnJhbWU6OnNjb3Bl
Q2hhaW4pOgorICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAg
ICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0
Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpkZWJ1Z2dlclNjb3BlU3RydWN0dXJl
KToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
Ojppc1dpdGhTY29wZSk6CisgICAgICAgICogcnVudGltZS9KU1Njb3BlLmg6CisgICAgICAgICog
cnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgICogcnVudGlt
ZS9WTS5oOgorCiAyMDE0LTA2LTI3ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29t
PgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4IGFmdGVyIHIxNjk3OTUuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAkocmV2aXNpb24gMTcwNTA0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIENvZGVC
bG9jazsKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3MgU291
cmNlUHJvdmlkZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXJDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1
Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDE3MDUwNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDEyICszMCwxNCBAQAogI2luY2x1ZGUgIkRlYnVnZ2VyQ2FsbEZyYW1lLmgiCiAK
ICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJEZWJ1Z2dlclNjb3BlLmgiCiAjaW5j
bHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKICNpbmNsdWRl
ICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlBhcnNl
ci5oIgogI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgorI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTEwNiwyMCArMTA4LDE3IEBAIFN0cmluZyBEZWJ1
Z2dlckNhbGxGcmFtZTo6ZnVuY3Rpb25OYW1lKCkKICAgICByZXR1cm4gZ2V0Q2FsY3VsYXRlZERp
c3BsYXlOYW1lKG1fY2FsbEZyYW1lLCBmdW5jdGlvbik7CiB9CiAKLUpTU2NvcGUqIERlYnVnZ2Vy
Q2FsbEZyYW1lOjpzY29wZSgpIGNvbnN0CitEZWJ1Z2dlclNjb3BlKiBEZWJ1Z2dlckNhbGxGcmFt
ZTo6c2NvcGUoKQogewogICAgIEFTU0VSVChpc1ZhbGlkKCkpOwogICAgIGlmICghaXNWYWxpZCgp
KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jYWxs
RnJhbWUtPmNvZGVCbG9jaygpOwotICAgIGlmIChjb2RlQmxvY2sgJiYgY29kZUJsb2NrLT5uZWVk
c0FjdGl2YXRpb24oKSAmJiAhbV9jYWxsRnJhbWUtPmhhc0FjdGl2YXRpb24oKSkgewotICAgICAg
ICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBKU0FjdGl2YXRpb246OmNyZWF0ZSgqY29kZUJs
b2NrLT52bSgpLCBtX2NhbGxGcmFtZSwgY29kZUJsb2NrKTsKLSAgICAgICAgbV9jYWxsRnJhbWUt
PnNldEFjdGl2YXRpb24oYWN0aXZhdGlvbik7Ci0gICAgICAgIG1fY2FsbEZyYW1lLT5zZXRTY29w
ZShhY3RpdmF0aW9uKTsKKyAgICBpZiAoIW1fc2NvcGUpIHsKKyAgICAgICAgVk0mIHZtID0gbV9j
YWxsRnJhbWUtPnZtKCk7CisgICAgICAgIG1fc2NvcGUuc2V0KHZtLCBEZWJ1Z2dlclNjb3BlOjpj
cmVhdGUodm0sIHRoaXMpKTsKICAgICB9Ci0KLSAgICByZXR1cm4gbV9jYWxsRnJhbWUtPnNjb3Bl
KCk7CisgICAgcmV0dXJuIG1fc2NvcGUuZ2V0KCk7CiB9CiAKIERlYnVnZ2VyQ2FsbEZyYW1lOjpU
eXBlIERlYnVnZ2VyQ2FsbEZyYW1lOjp0eXBlKCkgY29uc3QKQEAgLTE2Miw3ICsxNjEsNyBAQCBK
U1ZhbHVlIERlYnVnZ2VyQ2FsbEZyYW1lOjpldmFsdWF0ZShjb25zCiAgICAgfQogCiAgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSB0aGlzVmFsdWVGb3JDYWxsRnJhbWUoY2FsbEZyYW1lKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IHZtLmludGVycHJldGVyLT5leGVjdXRlKGV2YWwsIGNhbGxGcmFtZSwg
dGhpc1ZhbHVlLCBzY29wZSgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHZtLmludGVycHJldGVy
LT5leGVjdXRlKGV2YWwsIGNhbGxGcmFtZSwgdGhpc1ZhbHVlLCBzY29wZSgpLT5qc1Njb3BlKCkp
OwogICAgIGlmICh2bS5leGNlcHRpb24oKSkgewogICAgICAgICBleGNlcHRpb24gPSB2bS5leGNl
cHRpb24oKTsKICAgICAgICAgdm0uY2xlYXJFeGNlcHRpb24oKTsKQEAgLTE3NCw2ICsxNzMsMTAg
QEAgSlNWYWx1ZSBEZWJ1Z2dlckNhbGxGcmFtZTo6ZXZhbHVhdGUoY29ucwogdm9pZCBEZWJ1Z2dl
ckNhbGxGcmFtZTo6aW52YWxpZGF0ZSgpCiB7CiAgICAgbV9jYWxsRnJhbWUgPSBudWxscHRyOwor
ICAgIGlmIChtX3Njb3BlKSB7CisgICAgICAgIG1fc2NvcGUtPmludmFsaWRhdGVDaGFpbigpOwor
ICAgICAgICBtX3Njb3BlLmNsZWFyKCk7CisgICAgfQogICAgIFJlZlB0cjxEZWJ1Z2dlckNhbGxG
cmFtZT4gZnJhbWUgPSBtX2NhbGxlci5yZWxlYXNlKCk7CiAgICAgd2hpbGUgKGZyYW1lKSB7CiAg
ICAgICAgIGZyYW1lLT5tX2NhbGxGcmFtZSA9IG51bGxwdHI7CkBAIC0yMTMsNCArMjE2LDE0IEBA
IEpTVmFsdWUgRGVidWdnZXJDYWxsRnJhbWU6OnRoaXNWYWx1ZUZvckMKICAgICByZXR1cm4gdGhp
c1ZhbHVlOwogfQogCitWTSYgRGVidWdnZXJDYWxsRnJhbWU6OnZtKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9jYWxsRnJhbWUtPnZtKCk7Cit9CisKK0pTR2xvYmFsT2JqZWN0KiBEZWJ1Z2dlckNh
bGxGcmFtZTo6bGV4aWNhbEdsb2JhbE9iamVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2Fs
bEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2Fs
bEZyYW1lLmgJKHJldmlzaW9uIDE3MDUwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1
Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxNCArMjksMTgg
QEAKICNpZm5kZWYgRGVidWdnZXJDYWxsRnJhbWVfaAogI2RlZmluZSBEZWJ1Z2dlckNhbGxGcmFt
ZV9oCiAKLSNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJEZWJ1Z2dlclByaW1pdGl2
ZXMuaCIKKyNpbmNsdWRlICJTdHJvbmcuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0
aW9uLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBEZWJ1Z2dlclNjb3BlOworY2xhc3Mg
RXhlY1N0YXRlOwordHlwZWRlZiBFeGVjU3RhdGUgQ2FsbEZyYW1lOworCiBjbGFzcyBEZWJ1Z2dl
ckNhbGxGcmFtZSA6IHB1YmxpYyBSZWZDb3VudGVkPERlYnVnZ2VyQ2FsbEZyYW1lPiB7CiBwdWJs
aWM6CiAgICAgZW51bSBUeXBlIHsgUHJvZ3JhbVR5cGUsIEZ1bmN0aW9uVHlwZSB9OwpAQCAtNTgs
NyArNjIsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgVGV4dFBvc2l0
aW9uJiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KIAogICAgIEpTX0VY
UE9SVF9QUklWQVRFIEpTR2xvYmFsT2JqZWN0KiB2bUVudHJ5R2xvYmFsT2JqZWN0KCkgY29uc3Q7
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTY29wZSogc2NvcGUoKSBjb25zdDsKKyAgICBKU19F
WFBPUlRfUFJJVkFURSBEZWJ1Z2dlclNjb3BlKiBzY29wZSgpOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIFN0cmluZyBmdW5jdGlvbk5hbWUoKSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBU
eXBlIHR5cGUoKSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIHRoaXNWYWx1
ZSgpIGNvbnN0OwpAQCAtNzQsMTAgKzc4LDE2IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgU291cmNlSUQgc291cmNlSURGb3JDYWxsRnJhbWUoQ2FsbEZyYW1lKik7CiAg
ICAgc3RhdGljIEpTVmFsdWUgdGhpc1ZhbHVlRm9yQ2FsbEZyYW1lKENhbGxGcmFtZSopOwogCisg
ICAgVk0mIHZtKCkgY29uc3Q7CisgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBDYWxsRnJhbWUqIG1fY2FsbEZyYW1lOwogICAg
IFJlZlB0cjxEZWJ1Z2dlckNhbGxGcmFtZT4gbV9jYWxsZXI7CiAgICAgVGV4dFBvc2l0aW9uIG1f
cG9zaXRpb247CisgICAgU3Ryb25nPERlYnVnZ2VyU2NvcGU+IG1fc2NvcGU7CisKKyAgICBmcmll
bmQgY2xhc3MgRGVidWdnZXJTY29wZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAko
cmV2aXNpb24gMTcwNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVn
Z2VyU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiwxMCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyU2NvcGUuaCIKIAorI2luY2x1ZGUgIkRlYnVn
Z2VyQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAKIG5hbWVzcGFjZSBKU0Mgewog
CkBAIC0zNSwxNyArMzcsMzEgQEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJ
QkxFKAogCiBjb25zdCBDbGFzc0luZm8gRGVidWdnZXJTY29wZTo6c19pbmZvID0geyAiRGVidWdn
ZXJTY29wZSIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoRGVidWdn
ZXJTY29wZSkgfTsKIAotRGVidWdnZXJTY29wZTo6RGVidWdnZXJTY29wZShWTSYgdm0pCi0gICAg
OiBKU05vbkZpbmFsT2JqZWN0KHZtLCB2bS5kZWJ1Z2dlclNjb3BlU3RydWN0dXJlLmdldCgpKQor
RGVidWdnZXJTY29wZTo6RGVidWdnZXJTY29wZShWTSYgdm0sIERlYnVnZ2VyQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCisgICAgOiBKU05vbkZpbmFsT2JqZWN0KHZtLCBjYWxsRnJhbWUtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+ZGVidWdnZXJTY29wZVN0cnVjdHVyZSgpKQorICAgICwgbV9kZWJ1Z2dl
ckNhbGxGcmFtZShjYWxsRnJhbWUpCiB7CisgICAgQVNTRVJUKGNhbGxGcmFtZS0+aXNWYWxpZCgp
KTsKIH0KIAotdm9pZCBEZWJ1Z2dlclNjb3BlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTT2Jq
ZWN0KiBhY3RpdmF0aW9uKQordm9pZCBEZWJ1Z2dlclNjb3BlOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIEpTU2NvcGUqIHNjb3BlKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAg
ICBBU1NFUlQoYWN0aXZhdGlvbik7Ci0gICAgQVNTRVJUKGFjdGl2YXRpb24tPmlzQWN0aXZhdGlv
bk9iamVjdCgpKTsKLSAgICBtX2FjdGl2YXRpb24uc2V0KHZtLCB0aGlzLCBqc0Nhc3Q8SlNBY3Rp
dmF0aW9uKj4oYWN0aXZhdGlvbikpOworCisgICAgaWYgKCFzY29wZSkgeworICAgICAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IG1fZGVidWdnZXJDYWxsRnJhbWUtPm1fY2FsbEZyYW1lOworICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAg
ICAgIGlmIChjb2RlQmxvY2sgJiYgY29kZUJsb2NrLT5uZWVkc0FjdGl2YXRpb24oKSAmJiAhY2Fs
bEZyYW1lLT5oYXNBY3RpdmF0aW9uKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghY2FsbEZyYW1l
LT5zY29wZSgpLT5pc1dpdGhTY29wZSgpKTsKKyAgICAgICAgICAgIEpTQWN0aXZhdGlvbiogYWN0
aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKHZtLCBjYWxsRnJhbWUsIGNvZGVCbG9jayk7
CisgICAgICAgICAgICBjYWxsRnJhbWUtPnNldEFjdGl2YXRpb24oYWN0aXZhdGlvbik7CisgICAg
ICAgICAgICBjYWxsRnJhbWUtPnNldFNjb3BlKGFjdGl2YXRpb24pOworICAgICAgICB9CisgICAg
ICAgIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgpOworICAgIH0KKworICAgIEFTU0VSVChzY29w
ZSk7CisgICAgbV9zY29wZS5zZXQodm0sIHRoaXMsIHNjb3BlKTsKIH0KIAogdm9pZCBEZWJ1Z2dl
clNjb3BlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CkBAIC01Niw0MyArNzIsMTA4IEBAIHZvaWQgRGVidWdnZXJTY29wZTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwKICAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3Zl
cnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKIAogICAgIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKHRo
aXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2Fj
dGl2YXRpb24pOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3Njb3BlKTsKKyAg
ICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9uZXh0KTsKIH0KIAogU3RyaW5nIERlYnVn
Z2VyU2NvcGU6OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCogb2JqZWN0KQogewotICAgIGNvbnN0
IERlYnVnZ2VyU2NvcGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Y29uc3QgRGVidWdnZXJTY29wZSo+
KG9iamVjdCk7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPm1fYWN0aXZhdGlvbi0+bWV0aG9kVGFi
bGUoKS0+Y2xhc3NOYW1lKHRoaXNPYmplY3QtPm1fYWN0aXZhdGlvbi5nZXQoKSk7CisgICAgY29u
c3QgRGVidWdnZXJTY29wZSogc2NvcGUgPSBqc0Nhc3Q8Y29uc3QgRGVidWdnZXJTY29wZSo+KG9i
amVjdCk7CisgICAgQVNTRVJUKHNjb3BlLT5pc1ZhbGlkKCkpOworICAgIGlmICghc2NvcGUtPmlz
VmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIEpTT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0gSlNTY29wZTo6b2JqZWN0QXRTY29wZShzY29wZS0+anNTY29wZSgpKTsKKyAgICByZXR1
cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Y2xhc3NOYW1lKHRoaXNPYmplY3QpOwogfQog
CiBib29sIERlYnVnZ2VyU2NvcGU6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYgc2xvdCkKIHsKLSAgICBEZWJ1Z2dlclNjb3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0PERlYnVn
Z2VyU2NvcGUqPihvYmplY3QpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tX2FjdGl2YXRpb24t
Pm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LT5tX2FjdGl2YXRp
b24uZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgRGVidWdnZXJTY29wZSog
c2NvcGUgPSBqc0Nhc3Q8RGVidWdnZXJTY29wZSo+KG9iamVjdCk7CisgICAgQVNTRVJUKHNjb3Bl
LT5pc1ZhbGlkKCkpOworICAgIGlmICghc2NvcGUtPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gSlNTY29wZTo6b2JqZWN0QXRTY29w
ZShzY29wZS0+anNTY29wZSgpKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUo
KS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xv
dCk7CiB9CiAKIHZvaWQgRGVidWdnZXJTY29wZTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9w
ZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgRGVidWdnZXJTY29wZSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxEZWJ1Z2dlclNjb3BlKj4oY2VsbCk7Ci0gICAgdGhpc09iamVjdC0+bV9hY3RpdmF0aW9uLT5t
ZXRob2RUYWJsZSgpLT5wdXQodGhpc09iamVjdC0+bV9hY3RpdmF0aW9uLmdldCgpLCBleGVjLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICBEZWJ1Z2dlclNjb3BlKiBzY29wZSA9IGpz
Q2FzdDxEZWJ1Z2dlclNjb3BlKj4oY2VsbCk7CisgICAgQVNTRVJUKHNjb3BlLT5pc1ZhbGlkKCkp
OworICAgIGlmICghc2NvcGUtPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEpTT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0gSlNTY29wZTo6b2JqZWN0QXRTY29wZShzY29wZS0+anNTY29wZSgp
KTsKKyAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKIGJvb2wgRGVidWdnZXJTY29wZTo6ZGVs
ZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUpCiB7Ci0gICAgRGVidWdnZXJTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxE
ZWJ1Z2dlclNjb3BlKj4oY2VsbCk7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPm1fYWN0aXZhdGlv
bi0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdC0+bV9hY3RpdmF0aW9u
LmdldCgpLCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIERlYnVnZ2VyU2NvcGUqIHNjb3BlID0g
anNDYXN0PERlYnVnZ2VyU2NvcGUqPihjZWxsKTsKKyAgICBBU1NFUlQoc2NvcGUtPmlzVmFsaWQo
KSk7CisgICAgaWYgKCFzY29wZS0+aXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBKU1Njb3BlOjpvYmplY3RBdFNjb3BlKHNjb3BlLT5q
c1Njb3BlKCkpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQ
cm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCiB2b2lkIERlYnVn
Z2VyU2NvcGU6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2Rl
IG1vZGUpCiB7Ci0gICAgRGVidWdnZXJTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxEZWJ1Z2dl
clNjb3BlKj4ob2JqZWN0KTsKLSAgICB0aGlzT2JqZWN0LT5tX2FjdGl2YXRpb24tPm1ldGhvZFRh
YmxlKCktPmdldFByb3BlcnR5TmFtZXModGhpc09iamVjdC0+bV9hY3RpdmF0aW9uLmdldCgpLCBl
eGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBEZWJ1Z2dlclNjb3BlKiBzY29wZSA9IGpz
Q2FzdDxEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsKKyAgICBBU1NFUlQoc2NvcGUtPmlzVmFsaWQo
KSk7CisgICAgaWYgKCFzY29wZS0+aXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisgICAgSlNP
YmplY3QqIHRoaXNPYmplY3QgPSBKU1Njb3BlOjpvYmplY3RBdFNjb3BlKHNjb3BlLT5qc1Njb3Bl
KCkpOworICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldFByb3BlcnR5TmFtZXModGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIGJvb2wgRGVidWdnZXJT
Y29wZTo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCiB7Ci0gICAgRGVidWdnZXJTY29wZSogdGhpc09i
amVjdCA9IGpzQ2FzdDxEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsKLSAgICByZXR1cm4gdGhpc09i
amVjdC0+bV9hY3RpdmF0aW9uLT5tZXRob2RUYWJsZSgpLT5kZWZpbmVPd25Qcm9wZXJ0eSh0aGlz
T2JqZWN0LT5tX2FjdGl2YXRpb24uZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRv
ciwgc2hvdWxkVGhyb3cpOworICAgIERlYnVnZ2VyU2NvcGUqIHNjb3BlID0ganNDYXN0PERlYnVn
Z2VyU2NvcGUqPihvYmplY3QpOworICAgIEFTU0VSVChzY29wZS0+aXNWYWxpZCgpKTsKKyAgICBp
ZiAoIXNjb3BlLT5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBKU09iamVj
dCogdGhpc09iamVjdCA9IEpTU2NvcGU6Om9iamVjdEF0U2NvcGUoc2NvcGUtPmpzU2NvcGUoKSk7
CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlZmluZU93blByb3BlcnR5
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cp
OworfQorCitEZWJ1Z2dlclNjb3BlKiBEZWJ1Z2dlclNjb3BlOjpuZXh0KCkKK3sKKyAgICBBU1NF
UlQoaXNWYWxpZCgpKTsKKyAgICBpZiAoIW1fbmV4dCAmJiBtX3Njb3BlLT5uZXh0KCkpIHsKKyAg
ICAgICAgVk0mIHZtID0gKm1fc2NvcGUtPnZtKCk7CisgICAgICAgIERlYnVnZ2VyU2NvcGUqIG5l
eHRTY29wZSA9IGNyZWF0ZSh2bSwgbV9kZWJ1Z2dlckNhbGxGcmFtZSwgbV9zY29wZS0+bmV4dCgp
KTsKKyAgICAgICAgbV9uZXh0LnNldCh2bSwgdGhpcywgbmV4dFNjb3BlKTsKKyAgICB9CisgICAg
cmV0dXJuIG1fbmV4dC5nZXQoKTsKK30KKwordm9pZCBEZWJ1Z2dlclNjb3BlOjppbnZhbGlkYXRl
Q2hhaW4oKQoreworICAgIERlYnVnZ2VyU2NvcGUqIHNjb3BlID0gdGhpczsKKyAgICB3aGlsZSAo
c2NvcGUpIHsKKyAgICAgICAgQVNTRVJUKHNjb3BlLT5pc1ZhbGlkKCkpOworICAgICAgICBEZWJ1
Z2dlclNjb3BlKiBuZXh0U2NvcGUgPSBzY29wZS0+bV9uZXh0LmdldCgpOworICAgICAgICBzY29w
ZS0+bV9uZXh0LmNsZWFyKCk7CisgICAgICAgIHNjb3BlLT5tX3Njb3BlLmNsZWFyKCk7CisgICAg
ICAgIHNjb3BlID0gbmV4dFNjb3BlOworICAgIH0KK30KKworYm9vbCBEZWJ1Z2dlclNjb3BlOjpp
c1dpdGhTY29wZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2NvcGUtPmlzV2l0aFNjb3BlKCk7
Cit9CisKK2Jvb2wgRGVidWdnZXJTY29wZTo6aXNHbG9iYWxTY29wZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fc2NvcGUtPmlzR2xvYmFsT2JqZWN0KCk7Cit9CisKK2Jvb2wgRGVidWdnZXJTY29w
ZTo6aXNGdW5jdGlvblNjb3BlKCkgY29uc3QKK3sKKyAgICAvLyBJbiB0aGUgY3VycmVudCBkZWJ1
Z2dlciBpbXBsZW1lbnRhdGlvbiwgZXZlcnkgZnVuY3Rpb24gd2lsbCBjcmVhdGUgYW4KKyAgICAv
LyBhY3RpdmF0aW9uIG9iamVjdC4gSGVuY2UsIGFuIGFjdGl2YXRpb24gb2JqZWN0IGltcGxpZXMg
YSBmdW5jdGlvbiBzY29wZS4KKyAgICByZXR1cm4gbV9zY29wZS0+aXNBY3RpdmF0aW9uT2JqZWN0
KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5oCShyZXZpc2lvbiAxNzA1MDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiwxOSArMjYsMjIgQEAKICNpZm5kZWYgRGVidWdnZXJTY29wZV9oCiAjZGVmaW5lIERl
YnVnZ2VyU2NvcGVfaAogCisjaW5jbHVkZSAiRGVidWdnZXJDYWxsRnJhbWUuaCIKICNpbmNsdWRl
ICJKU09iamVjdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgSlNTY29wZTsKKwogY2xh
c3MgRGVidWdnZXJTY29wZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAg
ICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKIAotICAgIHN0YXRpYyBEZWJ1Z2dlclNj
b3BlKiBjcmVhdGUoVk0mIHZtLCBKU09iamVjdCogb2JqZWN0KQorICAgIHN0YXRpYyBEZWJ1Z2dl
clNjb3BlKiBjcmVhdGUoVk0mIHZtLCBEZWJ1Z2dlckNhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1Nj
b3BlKiBzY29wZSA9IDApCiAgICAgewotICAgICAgICBEZWJ1Z2dlclNjb3BlKiBhY3RpdmF0aW9u
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RGVidWdnZXJTY29wZT4odm0uaGVhcCkpIERl
YnVnZ2VyU2NvcGUodm0pOwotICAgICAgICBhY3RpdmF0aW9uLT5maW5pc2hDcmVhdGlvbih2bSwg
b2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIGFjdGl2YXRpb247CisgICAgICAgIERlYnVnZ2VyU2Nv
cGUqIGRlYnVnZ2VyU2NvcGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxEZWJ1Z2dlclNj
b3BlPih2bS5oZWFwKSkgRGVidWdnZXJTY29wZSh2bSwgY2FsbEZyYW1lKTsKKyAgICAgICAgZGVi
dWdnZXJTY29wZS0+ZmluaXNoQ3JlYXRpb24odm0sIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIGRl
YnVnZ2VyU2NvcGU7CiAgICAgfQogCiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOwpAQCAtNTYsMTYgKzU5LDYwIEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOyAKICAgICB9CiAKLXBy
b3RlY3RlZDoKKyAgICBjbGFzcyBJdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBJdGVy
YXRvcihEZWJ1Z2dlclNjb3BlKiBub2RlKQorICAgICAgICAgICAgOiBtX25vZGUobm9kZSkKKyAg
ICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgRGVidWdnZXJTY29wZSogZ2V0KCkgeyByZXR1
cm4gbV9ub2RlOyB9CisgICAgICAgIEl0ZXJhdG9yJiBvcGVyYXRvcisrKCkgeyBtX25vZGUgPSBt
X25vZGUtPm5leHQoKTsgcmV0dXJuICp0aGlzOyB9CisgICAgICAgIC8vIHBvc3RmaXggKysgaW50
ZW50aW9uYWxseSBvbWl0dGVkCisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEl0ZXJh
dG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9ub2RlID09IG90aGVyLm1fbm9kZTsgfQorICAg
ICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVy
biBtX25vZGUgIT0gb3RoZXIubV9ub2RlOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBEZWJ1
Z2dlclNjb3BlKiBtX25vZGU7CisgICAgfTsKKworICAgIEl0ZXJhdG9yIGJlZ2luKCk7CisgICAg
SXRlcmF0b3IgZW5kKCk7CisgICAgRGVidWdnZXJTY29wZSogbmV4dCgpOworCisgICAgdm9pZCBp
bnZhbGlkYXRlQ2hhaW4oKTsKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAhIW1f
c2NvcGU7IH0KKworICAgIGJvb2wgaXNXaXRoU2NvcGUoKSBjb25zdDsKKyAgICBib29sIGlzR2xv
YmFsU2NvcGUoKSBjb25zdDsKKyAgICBib29sIGlzRnVuY3Rpb25TY29wZSgpIGNvbnN0OworCitw
cml2YXRlOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIERlYnVnZ2VyU2NvcGUoVk0mLCBEZWJ1Z2dl
ckNhbGxGcmFtZSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mLCBKU1Njb3BlKik7CisKKyAgICBKU1Njb3BlKiBqc1Njb3BlKCkgY29uc3QgeyByZXR1cm4g
bV9zY29wZS5nZXQoKTsgfQorCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJl
biB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU09iamVjdCogYWN0aXZhdGlvbik7CisgICAgRGVidWdn
ZXJDYWxsRnJhbWUqIG1fZGVidWdnZXJDYWxsRnJhbWU7CisgICAgV3JpdGVCYXJyaWVyPEpTU2Nv
cGU+IG1fc2NvcGU7CisgICAgV3JpdGVCYXJyaWVyPERlYnVnZ2VyU2NvcGU+IG1fbmV4dDsKIAot
cHJpdmF0ZToKLSAgICBKU19FWFBPUlRfUFJJVkFURSBEZWJ1Z2dlclNjb3BlKFZNJik7Ci0gICAg
V3JpdGVCYXJyaWVyPEpTQWN0aXZhdGlvbj4gbV9hY3RpdmF0aW9uOworICAgIGZyaWVuZCBjbGFz
cyBEZWJ1Z2dlckNhbGxGcmFtZTsKIH07CiAKK2lubGluZSBEZWJ1Z2dlclNjb3BlOjpJdGVyYXRv
ciBEZWJ1Z2dlclNjb3BlOjpiZWdpbigpCit7CisgICAgcmV0dXJuIEl0ZXJhdG9yKHRoaXMpOyAK
K30KKworaW5saW5lIERlYnVnZ2VyU2NvcGU6Okl0ZXJhdG9yIERlYnVnZ2VyU2NvcGU6OmVuZCgp
Cit7IAorICAgIHJldHVybiBJdGVyYXRvcigwKTsgCit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CiAjZW5kaWYgLy8gRGVidWdnZXJTY29wZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCShyZXZp
c2lvbiAxNzA1MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNj
cmlwdENhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lm
IEVOQUJMRShJTlNQRUNUT1IpCiAKKyNpbmNsdWRlICJEZWJ1Z2dlclNjb3BlLmgiCiAjaW5jbHVk
ZSAiRXJyb3IuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5s
aW5lcy5oIgpAQCAtOTUsMjkgKzk2LDMwIEBAIEpTVmFsdWUgSlNKYXZhU2NyaXB0Q2FsbEZyYW1l
OjpzY29wZVR5cGUKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaW50IGluZGV4
ID0gZXhlYy0+YXJndW1lbnQoMCkuYXNJbnQzMigpOwogCi0gICAgSlNTY29wZSogc2NvcGVDaGFp
biA9IGltcGwoKS5zY29wZUNoYWluKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVuZCA9IHNj
b3BlQ2hhaW4tPmVuZCgpOwotCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBpZGVudGlmeWlu
ZyBhbmQgcmV0dXJuaW5nIENBVENIX1NDT1BFIGFwcHJvcHJpYXRlbHkuCisgICAgRGVidWdnZXJT
Y29wZSogc2NvcGVDaGFpbiA9IGltcGwoKS5zY29wZUNoYWluKCk7CisgICAgRGVidWdnZXJTY29w
ZTo6SXRlcmF0b3IgZW5kID0gc2NvcGVDaGFpbi0+ZW5kKCk7CiAKICAgICBib29sIGZvdW5kTG9j
YWxTY29wZSA9IGZhbHNlOwotICAgIGZvciAoU2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBzY29w
ZUNoYWluLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIEpTT2JqZWN0
KiBzY29wZSA9IGl0ZXIuZ2V0KCk7Ci0gICAgICAgIGlmIChzY29wZS0+aXNBY3RpdmF0aW9uT2Jq
ZWN0KCkpIHsKLSAgICAgICAgICAgIGlmICghZm91bmRMb2NhbFNjb3BlKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gRmlyc3QgYWN0aXZhdGlvbiBvYmplY3QgaXMgbG9jYWwgc2NvcGUsIGVhY2ggc3Vj
Y2Vzc2l2ZSBhY3RpdmF0aW9uIG9iamVjdCBpcyBjbG9zdXJlLgotICAgICAgICAgICAgICAgIGlm
ICghaW5kZXgpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBqc051bWJlcihKU0phdmFTY3Jp
cHRDYWxsRnJhbWU6OkxPQ0FMX1NDT1BFKTsKLSAgICAgICAgICAgICAgICBmb3VuZExvY2FsU2Nv
cGUgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIGlmICghaW5kZXgpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGpzTnVtYmVyKEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6Q0xPU1VSRV9TQ09QRSk7
CisgICAgZm9yIChEZWJ1Z2dlclNjb3BlOjpJdGVyYXRvciBpdGVyID0gc2NvcGVDaGFpbi0+YmVn
aW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBEZWJ1Z2dlclNjb3BlKiBzY29w
ZSA9IGl0ZXIuZ2V0KCk7CisKKyAgICAgICAgaWYgKCFmb3VuZExvY2FsU2NvcGUgJiYgc2NvcGUt
PmlzRnVuY3Rpb25TY29wZSgpKSB7CisgICAgICAgICAgICAvLyBGaXJzdCBmdW5jdGlvbiBzY29w
ZSBpcyB0aGUgbG9jYWwgc2NvcGUsIGVhY2ggc3VjY2Vzc2l2ZSBvbmUgaXMgYSBjbG9zdXJlLgor
ICAgICAgICAgICAgaWYgKCFpbmRleCkKKyAgICAgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIo
SlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpMT0NBTF9TQ09QRSk7CisgICAgICAgICAgICBmb3VuZExv
Y2FsU2NvcGUgPSB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFpbmRleCkgewotICAg
ICAgICAgICAgLy8gTGFzdCBpbiB0aGUgY2hhaW4gaXMgZ2xvYmFsIHNjb3BlLgotICAgICAgICAg
ICAgaWYgKCsraXRlciA9PSBlbmQpCisgICAgICAgICAgICBpZiAoc2NvcGUtPmlzV2l0aFNjb3Bl
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKEpTSmF2YVNjcmlwdENhbGxGcmFt
ZTo6V0lUSF9TQ09QRSk7CisgICAgICAgICAgICBpZiAoc2NvcGUtPmlzR2xvYmFsU2NvcGUoKSkg
eworICAgICAgICAgICAgICAgIEFTU0VSVCgrK2l0ZXIgPT0gZW5kKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4ganNOdW1iZXIoSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpHTE9CQUxfU0NPUEUpOwot
ICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6V0lUSF9T
Q09QRSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJl
IGlkZW50aWZ5aW5nIGFuZCByZXR1cm5pbmcgQ0FUQ0hfU0NPUEUgYXBwcm9wcmlhdGVseS4KKyAg
ICAgICAgICAgIEFTU0VSVChzY29wZS0+aXNGdW5jdGlvblNjb3BlKCkpOworICAgICAgICAgICAg
cmV0dXJuIGpzTnVtYmVyKEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6Q0xPU1VSRV9TQ09QRSk7CiAg
ICAgICAgIH0KIAogICAgICAgICAtLWluZGV4OwpAQCAtMTU3LDkgKzE1OSw5IEBAIEpTVmFsdWUg
SlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzY29wZUNoYWkKICAgICBpZiAoIWltcGwoKS5zY29wZUNo
YWluKCkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEpTU2NvcGUqIHNjb3BlQ2hh
aW4gPSBpbXBsKCkuc2NvcGVDaGFpbigpOwotICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0g
c2NvcGVDaGFpbi0+YmVnaW4oKTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gc2NvcGVD
aGFpbi0+ZW5kKCk7CisgICAgRGVidWdnZXJTY29wZSogc2NvcGVDaGFpbiA9IGltcGwoKS5zY29w
ZUNoYWluKCk7CisgICAgRGVidWdnZXJTY29wZTo6SXRlcmF0b3IgaXRlciA9IHNjb3BlQ2hhaW4t
PmJlZ2luKCk7CisgICAgRGVidWdnZXJTY29wZTo6SXRlcmF0b3IgZW5kID0gc2NvcGVDaGFpbi0+
ZW5kKCk7CiAKICAgICAvLyBXZSBtdXN0IGFsd2F5cyBoYXZlIHNvbWV0aGluZyBpbiB0aGUgc2Nv
cGUgY2hhaW4uCiAgICAgQVNTRVJUKGl0ZXIgIT0gZW5kKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5oCShyZXZp
c2lvbiAxNzA1MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0phdmFTY3Jp
cHRDYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMTMgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDEzLTIwMTQgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Myw3ICs1Myw3IEBAIHB1
YmxpYzoKIAogICAgIFN0cmluZyBmdW5jdGlvbk5hbWUoKSBjb25zdCB7IHJldHVybiBtX2RlYnVn
Z2VyQ2FsbEZyYW1lLT5mdW5jdGlvbk5hbWUoKTsgfQogICAgIEpTQzo6RGVidWdnZXJDYWxsRnJh
bWU6OlR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUtPnR5cGUo
KTsgfQotICAgIEpTQzo6SlNTY29wZSogc2NvcGVDaGFpbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVi
dWdnZXJDYWxsRnJhbWUtPnNjb3BlKCk7IH0KKyAgICBKU0M6OkRlYnVnZ2VyU2NvcGUqIHNjb3Bl
Q2hhaW4oKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZyYW1lLT5zY29wZSgpOyB9CiAg
ICAgSlNDOjpKU0dsb2JhbE9iamVjdCogdm1FbnRyeUdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUtPnZtRW50cnlHbG9iYWxPYmplY3QoKTsgfQogCiAgICAg
SlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXJDYWxsRnJh
bWUtPnRoaXNWYWx1ZSgpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L1NjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnU2VydmVyLmNwcAkocmV2aXNpb24gMTcwNTA0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogCiAj
aW5jbHVkZSAiRGVidWdnZXJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJEZWJ1Z2dlclNjb3BlLmgi
CiAjaW5jbHVkZSAiSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgi
CiAjaW5jbHVkZSAiSmF2YVNjcmlwdENhbGxGcmFtZS5oIgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTcwNTA0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiRGF0ZUNvbnN0cnVjdG9y
LmgiCiAjaW5jbHVkZSAiRGF0ZVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCisj
aW5jbHVkZSAiRGVidWdnZXJTY29wZS5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAi
RXJyb3JDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkVycm9yUHJvdG90eXBlLmgiCkBAIC0zMjAs
NiArMzIxLDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogICAg
IG1fbmFtZVNjb3BlU3RydWN0dXJlLnNldCh2bSwgdGhpcywgSlNOYW1lU2NvcGU6OmNyZWF0ZVN0
cnVjdHVyZSh2bSwgdGhpcywganNOdWxsKCkpKTsKICAgICBtX2FjdGl2YXRpb25TdHJ1Y3R1cmUu
c2V0KHZtLCB0aGlzLCBKU0FjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywganNO
dWxsKCkpKTsKICAgICBtX3N0cmljdEV2YWxBY3RpdmF0aW9uU3RydWN0dXJlLnNldCh2bSwgdGhp
cywgU3RyaWN0RXZhbEFjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywganNOdWxs
KCkpKTsKKyAgICBtX2RlYnVnZ2VyU2NvcGVTdHJ1Y3R1cmUuc2V0KG1fdm0sIHRoaXMsIERlYnVn
Z2VyU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZShtX3ZtLCB0aGlzLCBqc051bGwoKSkpOwogICAgIG1f
d2l0aFNjb3BlU3RydWN0dXJlLnNldCh2bSwgdGhpcywgSlNXaXRoU2NvcGU6OmNyZWF0ZVN0cnVj
dHVyZSh2bSwgdGhpcywganNOdWxsKCkpKTsKIAogICAgIG1fbnVsbFByb3RvdHlwZU9iamVjdFN0
cnVjdHVyZS5zZXQodm0sIHRoaXMsIEpTRmluYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSh2bSwg
dGhpcywganNOdWxsKCksIEpTRmluYWxPYmplY3Q6OmRlZmF1bHRJbmxpbmVDYXBhY2l0eSgpKSk7
CkBAIC02NjEsNiArNjYzLDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihK
U0NlbAogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3Byb21pc2VQcm90b3R5cGUp
OwogI2VuZGlmCiAKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9kZWJ1Z2dlclNj
b3BlU3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV93aXRoU2Nv
cGVTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3N0cmljdEV2
YWxBY3RpdmF0aW9uU3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+
bV9hY3RpdmF0aW9uU3RydWN0dXJlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMTcwNTA0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MTgzLDYgKzE4Myw3IEBAIHByb3RlY3RlZDoKICAgICBXcml0ZUJhcnJpZXI8SlNQcm9taXNlUHJv
dG90eXBlPiBtX3Byb21pc2VQcm90b3R5cGU7CiAjZW5kaWYKIAorICAgIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmU+IG1fZGVidWdnZXJTY29wZVN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiBtX3dpdGhTY29wZVN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
PiBtX3N0cmljdEV2YWxBY3RpdmF0aW9uU3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmU+IG1fYWN0aXZhdGlvblN0cnVjdHVyZTsKQEAgLTM4OCw2ICszODksNyBAQCBwdWJsaWM6
CiAgICAgSlNQcm9taXNlUHJvdG90eXBlKiBwcm9taXNlUHJvdG90eXBlKCkgY29uc3QgeyByZXR1
cm4gbV9wcm9taXNlUHJvdG90eXBlLmdldCgpOyB9CiAjZW5kaWYKIAorICAgIFN0cnVjdHVyZSog
ZGVidWdnZXJTY29wZVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXJTY29wZVN0
cnVjdHVyZS5nZXQoKTsgfQogICAgIFN0cnVjdHVyZSogd2l0aFNjb3BlU3RydWN0dXJlKCkgY29u
c3QgeyByZXR1cm4gbV93aXRoU2NvcGVTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUq
IHN0cmljdEV2YWxBY3RpdmF0aW9uU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpY3RF
dmFsQWN0aXZhdGlvblN0cnVjdHVyZS5nZXQoKTsgfQogICAgIFN0cnVjdHVyZSogYWN0aXZhdGlv
blN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZhdGlvblN0cnVjdHVyZS5nZXQoKTsg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lv
biAxNzA1MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC01OTksNiArNTk5LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNOYW1l
U2NvcGVPYmplY3QoKSBjb25zdDsKICAgICBib29sIGlzQWN0aXZhdGlvbk9iamVjdCgpIGNvbnN0
OwogICAgIGJvb2wgaXNFcnJvckluc3RhbmNlKCkgY29uc3Q7CisgICAgYm9vbCBpc1dpdGhTY29w
ZSgpIGNvbnN0OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZWFsKFZNJik7CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmcmVlemUoVk0mKTsKQEAgLTExNDcsNiArMTE0OCwxMSBA
QCBpbmxpbmUgYm9vbCBKU09iamVjdDo6aXNFcnJvckluc3RhbmNlKCkgCiAgICAgcmV0dXJuIHR5
cGUoKSA9PSBFcnJvckluc3RhbmNlVHlwZTsKIH0KIAoraW5saW5lIGJvb2wgSlNPYmplY3Q6Omlz
V2l0aFNjb3BlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHlwZSgpID09IFdpdGhTY29wZVR5cGU7
Cit9CisKIGlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiB7CiAgICAg
QVNTRVJUKHN0cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Njb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
Y29wZS5oCShyZXZpc2lvbiAxNzA1MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Njb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw3ICsxNTAsNyBAQCBwdWJsaWM6CiAg
ICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICBzdGF0aWMgc2l6ZV90
IG9mZnNldE9mTmV4dCgpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTT2JqZWN0
KiBvYmplY3RBdFNjb3BlKEpTU2NvcGUqKTsKKyAgICBzdGF0aWMgSlNPYmplY3QqIG9iamVjdEF0
U2NvcGUoSlNTY29wZSopOwogCiAgICAgc3RhdGljIEpTVmFsdWUgcmVzb2x2ZShFeGVjU3RhdGUq
LCBKU1Njb3BlKiwgY29uc3QgSWRlbnRpZmllciYpOwogICAgIHN0YXRpYyBSZXNvbHZlT3AgYWJz
dHJhY3RSZXNvbHZlKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBjb25zdCBJZGVudGlmaWVyJiwgR2V0
T3JQdXQsIFJlc29sdmVUeXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5j
cHAJKHJldmlzaW9uIDE3MDUwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgIkNvbW1vblNs
b3dQYXRocy5oIgogI2luY2x1ZGUgIkRGR0xvbmdMaXZlZFN0YXRlLmgiCiAjaW5jbHVkZSAiREZH
V29ya2xpc3QuaCIKLSNpbmNsdWRlICJEZWJ1Z2dlclNjb3BlLmgiCiAjaW5jbHVkZSAiRXJyb3JJ
bnN0YW5jZS5oIgogI2luY2x1ZGUgIkZUTFRodW5rcy5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uQ29u
c3RydWN0b3IuaCIKQEAgLTI1NSw3ICsyNTQsNiBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVh
cFR5cGUgaGVhcFR5cGUpCiAgICAgcHJvcGVydHlOYW1lcyA9IG5ldyBDb21tb25JZGVudGlmaWVy
cyh0aGlzKTsKICAgICBzdHJ1Y3R1cmVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTdHJ1Y3R1cmU6OmNy
ZWF0ZVN0cnVjdHVyZSgqdGhpcykpOwogICAgIHN0cnVjdHVyZVJhcmVEYXRhU3RydWN0dXJlLnNl
dCgqdGhpcywgU3RydWN0dXJlUmFyZURhdGE6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKLSAgICBkZWJ1Z2dlclNjb3BlU3RydWN0dXJlLnNldCgqdGhpcywgRGVidWdnZXJT
Y29wZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHRlcm1pbmF0
ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZS5zZXQoKnRoaXMsIFRlcm1pbmF0ZWRFeGVjdXRpb25F
cnJvcjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHN0cmluZ1N0
cnVjdHVyZS5zZXQoKnRoaXMsIEpTU3RyaW5nOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpKSk7CiAgICAgbm90QW5PYmplY3RTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU05vdEFuT2Jq
ZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE3MDUwNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2Miw3ICsyNjIsNiBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJ1Y3R1cmVTdHJ1
Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cnVjdHVyZVJhcmVEYXRhU3RydWN0
dXJlOwotICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBkZWJ1Z2dlclNjb3BlU3RydWN0dXJlOwog
ICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiB0ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1
cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cmluZ1N0cnVjdHVyZTsKICAgICAgICAg
U3Ryb25nPFN0cnVjdHVyZT4gbm90QW5PYmplY3RTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxNzA1NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxOCBAQAorMjAxNC0wNi0yNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBs
ZS5jb20+CisKKyAgICAgICAgW2Z0bG9wdF0gRGVidWdnZXJDYWxsRnJhbWU6OnNjb3BlKCkgc2hv
dWxkIHJldHVybiBhIERlYnVnZ2VyU2NvcGUuCisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcv
Yi8xMzQ0MjA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvZGVidWdnZXIv
RGVidWdnZXJDYWxsRnJhbWUuaDogUmVtb3ZlZC4KKyAgICAgICAgLSBUaGlzIGlzIG5vdCBpbiB1
c2UuICBIZW5jZSwgd2UgY2FuIHJlbW92ZSBpdC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3Jp
cHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmF0
dGFjaERlYnVnZ2VyKToKKyAgICAgICAgLSBXZSBzaG91bGQgYWNxdWlyZSB0aGUgSlNMb2NrIGJl
Zm9yZSBtb2RpZnlpbmcgYSBKUyBnbG9iYWwgb2JqZWN0LgorCiAyMDE0LTA2LTI0ICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbZnRsb3B0XSBSZW5hbWVkIERlYnVn
Z2VyQWN0aXZhdGlvbiB0byBEZWJ1Z2dlclNjb3BlLgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxG
cmFtZS5oCShyZXZpc2lvbiAxNzA1MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVh
ZGVycy9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQg
KzAsMCBAQAotI2lmbmRlZiBXZWJDb3JlX0ZXRF9EZWJ1Z2dlckNhbGxGcmFtZV9oCi0jZGVmaW5l
IFdlYkNvcmVfRldEX0RlYnVnZ2VyQ2FsbEZyYW1lX2gKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9EZWJ1Z2dlckNhbGxGcmFtZS5oPgotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTcwNTA0KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5NSw2ICsyOTUsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmF0dGFjaERl
YnVnZ2VyKEpTCiAgICAgICAgIHJldHVybjsKIAogICAgIEpTRE9NV2luZG93KiBnbG9iYWxPYmpl
Y3QgPSBzaGVsbC0+d2luZG93KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0
LT52bSgpKTsKICAgICBpZiAoZGVidWdnZXIpCiAgICAgICAgIGRlYnVnZ2VyLT5hdHRhY2goZ2xv
YmFsT2JqZWN0KTsKICAgICBlbHNlIGlmIChKU0M6OkRlYnVnZ2VyKiBjdXJyZW50RGVidWdnZXIg
PSBnbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234219</attachid>
            <date>2014-07-01 16:58:48 -0700</date>
            <delta_ts>2014-08-26 20:33:35 -0700</delta_ts>
            <desc>patch 3: revert to letting DebuggerCallFrame instantiate the JSActivation object.</desc>
            <filename>bug-134420.patch</filename>
            <type>text/plain</type>
            <size>32056</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwNjc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMiBA
QAorMjAxNC0wNy0wMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
W2Z0bG9wdF0gRGVidWdnZXJDYWxsRnJhbWU6OnNjb3BlKCkgc2hvdWxkIHJldHVybiBhIERlYnVn
Z2VyU2NvcGUuCisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8xMzQ0MjA+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJldmlvdXNseSwgRGVi
dWdnZXJDYWxsRnJhbWU6OnNjb3BlKCkgcmV0dXJucyBhIEpTQWN0aXZhdGlvbiAoYW5kIHJlbGV2
YW50CisgICAgICAgIHBlZXJzKSB3aGljaCB0aGUgV2ViSW5zcGVjdG9yIHdpbGwgdXNlIHRvIGlu
dHJvc3BlY3QgQ2FsbEZyYW1lIHZhcmlhYmxlcy4KKyAgICAgICAgSW5zdGVhZCwgd2Ugc2hvdWxk
IGJlIHJldHVybmluZyBhIERlYnVnZ2VyU2NvcGUgYXMgYW4gYWJzdHJhY3Rpb24gbGF5ZXIgdGhh
dAorICAgICAgICBwcm92aWRlcyB0aGUgaW50cm9zcGVjdGlvbiBmdW5jdGlvbmFsaXR5IHRoYXQg
dGhlIFdlYkluc3BlY3RvciBuZWVkcy4gIFRoaXMKKyAgICAgICAgaXMgdGhlIGZpcnN0IHN0ZXAg
dG93YXJkcyBub3QgZm9yY2luZyBldmVyeSBmcmFtZSB0byBoYXZlIGEgSlNBY3RpdmF0aW9uCisg
ICAgICAgIG9iamVjdCBqdXN0IGJlY2F1c2UgdGhlIGRlYnVnZ2VyIGlzIGVuYWJsZWQuCisKKyAg
ICAgICAgMS4gSW5zdGFudGlhdGUgdGhlIGRlYnVnZ2VyU2NvcGVTdHJ1Y3R1cmUgYXMgYSBtZW1i
ZXIgb2YgdGhlIEpTR2xvYmFsT2JqZWN0CisgICAgICAgICAgIGluc3RlYWQgb2YgdGhlIFZNLiAg
VGhpcyBhbGxvd3MgSlNPYmplY3Q6Omdsb2JhbE9iamVjdCgpIHRvIGJlIGFibGUgdG8KKyAgICAg
ICAgICAgcmV0dXJuIHRoZSBnbG9iYWwgb2JqZWN0IGZvciB0aGUgRGVidWdnZXJTY29wZS4KKwor
ICAgICAgICAyLiBPbiB0aGUgRGVidWdnZXJTY29wZSdzIGxpZmUtY3ljbGUgbWFuYWdlbWVudDoK
KworICAgICAgICAgICBUaGUgRGVidWdnZXJDYWxsRnJhbWUgaXMgZGVzaWduZWQgdG8gYmUgInZh
bGlkIiBvbmx5IGR1cmluZyBhIGRlYnVnZ2luZyBzZXNzaW9uCisgICAgICAgICAgICh3aGlsZSB0
aGUgZGVidWdnZXIgaXMgYnJva2VuKSB0aHJvdWdoIHRoZSB1c2Ugb2YgYSBEZWJ1Z2dlckNhbGxG
cmFtZVNjb3BlIGluCisgICAgICAgICAgIERlYnVnZ2VyOjpwYXVzZUlmTmVlZGVkKCkuICBPbmNl
IHRoZSBkZWJ1Z2dlciByZXN1bWVzIGZyb20gdGhlIGJyZWFrLCB0aGUKKyAgICAgICAgICAgRGVi
dWdnZXJDYWxsRnJhbWVTY29wZSBkZXN0cnVjdHMsIGFuZCB0aGUgRGVidWdnZXJDYWxsRnJhbWUg
d2lsbCBiZSBpbnZhbGlkYXRlZC4KKyAgICAgICAgICAgV2UgY2FuJ3QgZ3VhcmFudGVlIChmcm9t
IHRoaXMgY29kZSBhbG9uZSkgdGhhdCB0aGUgSW5zcGVjdG9yIGNvZGUgaXNuJ3Qgc3RpbGwKKyAg
ICAgICAgICAgaG9sZGluZyBhIHJlZiB0byB0aGUgRGVidWdnZXJDYWxsRnJhbWUgKHRob3VnaCB0
aGV5IHNob3VsZG4ndCksIGJ1dCBieSBjb250cmFjdCwKKyAgICAgICAgICAgdGhlIGZyYW1lIHdp
bGwgYmUgaW52YWxpZGF0ZWQsIGFuZCBhbnkgYXR0ZW1wdCB0byBxdWVyeSBpdCB3aWxsIHJldHVy
biBudWxsIHZhbHVlcy4KKyAgICAgICAgICAgVGhpcyBpcyBwcmUtZXhpc3RpbmcgYmVoYXZpb3Iu
CisKKyAgICAgICAgICAgTm93LCB3ZSdyZSBhZGRpbmcgdGhlIERlYnVnZ2VyU2NvcGUgaW50byB0
aGUgcGljdHVyZS4gIFdoaWxlIGEgc2luZ2xlIGRlYnVnZ2VyCisgICAgICAgICAgIHBhdXNlIHNl
c3Npb24gaXMgaW4gcHJvZ3Jlc3MsIHRoZSBJbnNwZWN0b3IgbWF5IHJlcXVlc3QgdGhlIHNjb3Bl
IGZyb20gdGhlCisgICAgICAgICAgIERlYnVnZ2VyQ2FsbEZyYW1lLiAgV2hpbGUgdGhlIERlYnVn
Z2VyQ2FsbEZyYW1lIGlzIHN0aWxsIHZhbGlkLCB3ZSB3YW50CisgICAgICAgICAgIERlYnVnZ2Vy
Q2FsbEZyYW1lOjpzY29wZSgpIHRvIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgRGVidWdnZXJTY29w
ZSBvYmplY3QuCisgICAgICAgICAgIFRoaXMgaXMgd2h5IHdlIGhvbGQgb24gdG8gdGhlIERlYnVn
Z2VyU2NvcGUgd2l0aCBhIHN0cm9uZyByZWYuCisKKyAgICAgICAgICAgSWYgd2UgdXNlIGEgd2Vh
ayByZWYgaW5zdGVhZCwgdGhlIGZvbGxvd2luZyBjb29reSBiZWhhdmlvciBjYW4gbWFuaWZlc3Q6
CisgICAgICAgICAgIDEuIFRoZSBJbnNwZWN0b3IgY2FsbHMgRGVidWdnZXI6OnNjb3BlKCkgdG8g
Z2V0IHRoZSB0b3Agc2NvcGUuCisgICAgICAgICAgIDIuIFRoZSBJbnNwZWN0b3IgaXRlcmF0ZXMg
ZG93biB0aGUgc2NvcGUgY2hhaW4gYW5kIGlzIG5vdyBvbmx5IGhvbGRpbmcgYQorICAgICAgICAg
ICAgICByZWZlcmVuY2UgdG8gYSBwYXJlbnQgc2NvcGUuICBJdCBpcyBubyBsb25nZXIgcmVmZXJl
bmNpbmcgdGhlIHRvcCBzY29wZS4KKyAgICAgICAgICAgMy4gQSBHQyBvY2N1cnMsIGFuZCB0aGUg
RGVidWdnZXJDYWxsRnJhbWUncyB3ZWFrIG1fc2NvcGUgcmVmIHRvIHRoZSB0b3Agc2NvcGUKKyAg
ICAgICAgICAgICAgZ2V0cyBjbGVhcmVkLgorICAgICAgICAgICA0LiBUaGUgSW5zcGVjdG9yIGNh
bGxzIERlYnVnZ2VyQ2FsbEZyYW1lOjpzY29wZSgpIHRvIGdldCB0aGUgdG9wIHNjb3BlIGFnYWlu
IGJ1dCBnZXRzCisgICAgICAgICAgICAgIGEgZGlmZmVyZW50IERlYnVnZ2VyU2NvcGUgaW5zdGFu
Y2UuCisgICAgICAgICAgIDUuIFRoZSBJbnNwZWN0b3IgaXRlcmF0ZXMgZG93biB0aGUgc2NvcGUg
Y2hhaW4gYnV0IG5ldmVyIHNlZXMgdGhlIHBhcmVudCBzY29wZQorICAgICAgICAgICAgICBpbnN0
YW5jZSB0aGF0IHJldGFpbmVkIGEgcmVmIHRvIGluIHN0ZXAgMiBhYm92ZS4gIFRoaXMgaXMgYmVj
YXVzZSB3aGVuIGl0ZXJhdGluZworICAgICAgICAgICAgICB0aGlzIG5ldyBEZWJ1Z2dlclNjb3Bl
IGluc3RhbmNlICh3aGljaCBoYXMgbm8ga25vd2xlZGdlIG9mIHRoZSBwcmV2aW91cyBwYXJlbnQK
KyAgICAgICAgICAgICAgRGVidWdnZXJTY29wZSBpbnN0YW5jZSksIGEgbmV3IERlYnVnZ2VyU2Nv
cGUgaW5zdGFuY2Ugd2lsbCBnZXQgY3JlYXRlZCBmb3IgdGhlCisgICAgICAgICAgICAgIHNhbWUg
cGFyZW50IHNjb3BlLiAKKworICAgICAgICAgICBTaW5jZSB0aGUgRGVidWdnZXJTY29wZSBpcyBh
IEpTT2JqZWN0LCBpdCdzIGxpdmVuZXNzIGlzIGRldGVybWluZWQgYnkgaXRzIHJlYWNoYWJpbGl0
eS4KKyAgICAgICAgICAgSG93ZXZlciwgaXQncyAidmFsaWRpdHkiIGlzIGRldGVybWluZWQgYnkg
dGhlIGxpZmUtY3ljbGUgb2YgaXRzIG93bmVyIERlYnVnZ2VyQ2FsbEZyYW1lLgorICAgICAgICAg
ICBXaGVuIHRoZSBvd25lciBEZWJ1Z2dlckNhbGxGcmFtZSBnZXRzIGludmFsaWRhdGVkLCBpdHMg
ZGVidWdnZXIgc2NvcGUgY2hhaW4gKGlmCisgICAgICAgICAgIGluc3RhbnRpYXRlZCkgd2lsbCBh
bHNvIGdldCBpbnZhbGlkYXRlZC4gIFRoaXMgaXMgd2h5IHdlIG5lZWQgdGhlCisgICAgICAgICAg
IERlYnVnZ2VyU2NvcGU6OmludmFsaWRhdGVDaGFpbigpIG1ldGhvZC4gIFRoZSBJbnNwZWN0b3Ig
c2hvdWxkIG5vdCBiZSB1c2luZyB0aGUKKyAgICAgICAgICAgRGVidWdnZXJTY29wZSBpbnN0YW5j
ZSBhZnRlciBpdHMgb3duZXIgRGVidWdnZXJDYWxsRnJhbWUgaXMgaW52YWxpZGF0ZWQuICBJZiBp
dCBkb2VzLAorICAgICAgICAgICB0aG9zZSBtZXRob2RzIHdpbGwgZG8gbm90aGluZyBvciByZXR1
cm5lZCBhIGZhaWxlZCBzdGF0dXMuCisKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5oOgor
ICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6
RGVidWdnZXJDYWxsRnJhbWU6OnNjb3BlKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJh
bWU6OmV2YWx1YXRlKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6OmludmFsaWRh
dGUpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZTo6dm0pOgorICAgICAgICAoSlND
OjpEZWJ1Z2dlckNhbGxGcmFtZTo6bGV4aWNhbEdsb2JhbE9iamVjdCk6CisgICAgICAgICogZGVi
dWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaDoKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlclNj
b3BlLmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6RGVidWdnZXJTY29wZSk6Cisg
ICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpT
Qzo6RGVidWdnZXJTY29wZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkRlYnVnZ2Vy
U2NvcGU6OmNsYXNzTmFtZSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OmdldE93blBy
b3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OnB1dCk6CisgICAgICAg
IChKU0M6OkRlYnVnZ2VyU2NvcGU6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6RGVi
dWdnZXJTY29wZTo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkRlYnVnZ2Vy
U2NvcGU6OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6
bmV4dCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OmludmFsaWRhdGVDaGFpbik6Cisg
ICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OmlzV2l0aFNjb3BlKToKKyAgICAgICAgKEpTQzo6
RGVidWdnZXJTY29wZTo6aXNHbG9iYWxTY29wZSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2Nv
cGU6OmlzRnVuY3Rpb25TY29wZSk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJTY29wZS5o
OgorICAgICAgICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpE
ZWJ1Z2dlclNjb3BlOjpJdGVyYXRvcjo6SXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dl
clNjb3BlOjpJdGVyYXRvcjo6Z2V0KToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6SXRl
cmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjpJdGVyYXRv
cjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6Okl0ZXJhdG9yOjpv
cGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6aXNWYWxpZCk6CisgICAg
ICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OmpzU2NvcGUpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dl
clNjb3BlOjpiZWdpbik6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OmVuZCk6CisgICAg
ICAgICogaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHA6CisgICAgICAgIChJbnNw
ZWN0b3I6OkpTSmF2YVNjcmlwdENhbGxGcmFtZTo6c2NvcGVUeXBlKToKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6SlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzY29wZUNoYWluKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5oOgorICAgICAgICAoSW5zcGVjdG9yOjpKYXZhU2Ny
aXB0Q2FsbEZyYW1lOjpzY29wZUNoYWluKToKKyAgICAgICAgKiBpbnNwZWN0b3IvU2NyaXB0RGVi
dWdTZXJ2ZXIuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAg
ICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6ZGVidWdnZXJTY29wZVN0cnVjdHVy
ZSk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6aXNXaXRoU2NvcGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTY29wZS5oOgorICAgICAgICAq
IHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRp
bWUvVk0uaDoKKwogMjAxNC0wNy0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgog
CiAgICAgICAgIFtmdGxvcHRdIERGRyBieXRlY29kZSBwYXJzZXIgc2hvdWxkIHR1cm4gUHV0QnlJ
ZCB3aXRoIG5vdGhpbmcgYnV0IGEgU2V0dGVyIHN0dWIgYXMgc3R1ZmYraGFuZGxlQ2FsbCwgYW5k
IGhhbmRsZUNhbGwgc2hvdWxkIGJlIGFsbG93ZWQgdG8gaW5saW5lIGlmIGl0IHdhbnRzIHRvCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAkocmV2aXNpb24g
MTcwNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNz
IENvZGVCbG9jazsKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogY2xh
c3MgU291cmNlUHJvdmlkZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXJDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDE3MDUwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDEyICszMCwxNCBAQAogI2luY2x1ZGUgIkRlYnVnZ2VyQ2FsbEZyYW1l
LmgiCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJEZWJ1Z2dlclNjb3BlLmgi
CiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKICNp
bmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUg
IlBhcnNlci5oIgogI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgorI2luY2x1ZGUgIlN0cm9uZ0lu
bGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTEwNiwyMCArMTA4LDI1IEBAIFN0cmlu
ZyBEZWJ1Z2dlckNhbGxGcmFtZTo6ZnVuY3Rpb25OYW1lKCkKICAgICByZXR1cm4gZ2V0Q2FsY3Vs
YXRlZERpc3BsYXlOYW1lKG1fY2FsbEZyYW1lLCBmdW5jdGlvbik7CiB9CiAKLUpTU2NvcGUqIERl
YnVnZ2VyQ2FsbEZyYW1lOjpzY29wZSgpIGNvbnN0CitEZWJ1Z2dlclNjb3BlKiBEZWJ1Z2dlckNh
bGxGcmFtZTo6c2NvcGUoKQogewogICAgIEFTU0VSVChpc1ZhbGlkKCkpOwogICAgIGlmICghaXNW
YWxpZCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
bV9jYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIGlmIChjb2RlQmxvY2sgJiYgY29kZUJsb2Nr
LT5uZWVkc0FjdGl2YXRpb24oKSAmJiAhbV9jYWxsRnJhbWUtPmhhc0FjdGl2YXRpb24oKSkgewot
ICAgICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBKU0FjdGl2YXRpb246OmNyZWF0ZSgq
Y29kZUJsb2NrLT52bSgpLCBtX2NhbGxGcmFtZSwgY29kZUJsb2NrKTsKLSAgICAgICAgbV9jYWxs
RnJhbWUtPnNldEFjdGl2YXRpb24oYWN0aXZhdGlvbik7Ci0gICAgICAgIG1fY2FsbEZyYW1lLT5z
ZXRTY29wZShhY3RpdmF0aW9uKTsKLSAgICB9CisgICAgaWYgKCFtX3Njb3BlKSB7CisgICAgICAg
IFZNJiB2bSA9IG1fY2FsbEZyYW1lLT52bSgpOworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IG1fY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICAgICAgaWYgKGNvZGVCbG9jayAmJiBj
b2RlQmxvY2stPm5lZWRzQWN0aXZhdGlvbigpICYmICFtX2NhbGxGcmFtZS0+aGFzQWN0aXZhdGlv
bigpKSB7CisgICAgICAgICAgICBBU1NFUlQoIW1fY2FsbEZyYW1lLT5zY29wZSgpLT5pc1dpdGhT
Y29wZSgpKTsKKyAgICAgICAgICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IEpTQWN0aXZh
dGlvbjo6Y3JlYXRlKHZtLCBtX2NhbGxGcmFtZSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIG1f
Y2FsbEZyYW1lLT5zZXRBY3RpdmF0aW9uKGFjdGl2YXRpb24pOworICAgICAgICAgICAgbV9jYWxs
RnJhbWUtPnNldFNjb3BlKGFjdGl2YXRpb24pOworICAgICAgICB9CiAKLSAgICByZXR1cm4gbV9j
YWxsRnJhbWUtPnNjb3BlKCk7CisgICAgICAgIG1fc2NvcGUuc2V0KHZtLCBEZWJ1Z2dlclNjb3Bl
OjpjcmVhdGUodm0sIG1fY2FsbEZyYW1lLT5zY29wZSgpKSk7CisgICAgfQorICAgIHJldHVybiBt
X3Njb3BlLmdldCgpOwogfQogCiBEZWJ1Z2dlckNhbGxGcmFtZTo6VHlwZSBEZWJ1Z2dlckNhbGxG
cmFtZTo6dHlwZSgpIGNvbnN0CkBAIC0xNjIsNyArMTY5LDcgQEAgSlNWYWx1ZSBEZWJ1Z2dlckNh
bGxGcmFtZTo6ZXZhbHVhdGUoY29ucwogICAgIH0KIAogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
dGhpc1ZhbHVlRm9yQ2FsbEZyYW1lKGNhbGxGcmFtZSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB2
bS5pbnRlcnByZXRlci0+ZXhlY3V0ZShldmFsLCBjYWxsRnJhbWUsIHRoaXNWYWx1ZSwgc2NvcGUo
KSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB2bS5pbnRlcnByZXRlci0+ZXhlY3V0ZShldmFsLCBj
YWxsRnJhbWUsIHRoaXNWYWx1ZSwgc2NvcGUoKS0+anNTY29wZSgpKTsKICAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpIHsKICAgICAgICAgZXhjZXB0aW9uID0gdm0uZXhjZXB0aW9uKCk7CiAgICAgICAg
IHZtLmNsZWFyRXhjZXB0aW9uKCk7CkBAIC0xNzQsNiArMTgxLDEwIEBAIEpTVmFsdWUgRGVidWdn
ZXJDYWxsRnJhbWU6OmV2YWx1YXRlKGNvbnMKIHZvaWQgRGVidWdnZXJDYWxsRnJhbWU6OmludmFs
aWRhdGUoKQogewogICAgIG1fY2FsbEZyYW1lID0gbnVsbHB0cjsKKyAgICBpZiAobV9zY29wZSkg
eworICAgICAgICBtX3Njb3BlLT5pbnZhbGlkYXRlQ2hhaW4oKTsKKyAgICAgICAgbV9zY29wZS5j
bGVhcigpOworICAgIH0KICAgICBSZWZQdHI8RGVidWdnZXJDYWxsRnJhbWU+IGZyYW1lID0gbV9j
YWxsZXIucmVsZWFzZSgpOwogICAgIHdoaWxlIChmcmFtZSkgewogICAgICAgICBmcmFtZS0+bV9j
YWxsRnJhbWUgPSBudWxscHRyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2Vy
L0RlYnVnZ2VyQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDE3MDUwNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSwxNCArMjksMTggQEAKICNpZm5kZWYgRGVidWdnZXJDYWxsRnJhbWVfaAogI2Rl
ZmluZSBEZWJ1Z2dlckNhbGxGcmFtZV9oCiAKLSNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNs
dWRlICJEZWJ1Z2dlclByaW1pdGl2ZXMuaCIKKyNpbmNsdWRlICJTdHJvbmcuaCIKICNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBE
ZWJ1Z2dlclNjb3BlOworY2xhc3MgRXhlY1N0YXRlOwordHlwZWRlZiBFeGVjU3RhdGUgQ2FsbEZy
YW1lOworCiBjbGFzcyBEZWJ1Z2dlckNhbGxGcmFtZSA6IHB1YmxpYyBSZWZDb3VudGVkPERlYnVn
Z2VyQ2FsbEZyYW1lPiB7CiBwdWJsaWM6CiAgICAgZW51bSBUeXBlIHsgUHJvZ3JhbVR5cGUsIEZ1
bmN0aW9uVHlwZSB9OwpAQCAtNTgsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgY29uc3QgVGV4dFBvc2l0aW9uJiBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9z
aXRpb247IH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTR2xvYmFsT2JqZWN0KiB2bUVudHJ5
R2xvYmFsT2JqZWN0KCkgY29uc3Q7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNTY29wZSogc2Nv
cGUoKSBjb25zdDsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBEZWJ1Z2dlclNjb3BlKiBzY29wZSgp
OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBmdW5jdGlvbk5hbWUoKSBjb25zdDsKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBUeXBlIHR5cGUoKSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBKU1ZhbHVlIHRoaXNWYWx1ZSgpIGNvbnN0OwpAQCAtNzgsNiArODIsNyBAQCBwcml2YXRl
OgogICAgIENhbGxGcmFtZSogbV9jYWxsRnJhbWU7CiAgICAgUmVmUHRyPERlYnVnZ2VyQ2FsbEZy
YW1lPiBtX2NhbGxlcjsKICAgICBUZXh0UG9zaXRpb24gbV9wb3NpdGlvbjsKKyAgICBTdHJvbmc8
RGVidWdnZXJTY29wZT4gbV9zY29wZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAko
cmV2aXNpb24gMTcwNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVn
Z2VyU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRl
ICJKU0FjdGl2YXRpb24uaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNX
aXRoU2NvcGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM1LDE3ICszNiwxNiBAQCBTVEFU
SUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoCiAKIGNvbnN0IENsYXNzSW5mbyBE
ZWJ1Z2dlclNjb3BlOjpzX2luZm8gPSB7ICJEZWJ1Z2dlclNjb3BlIiwgJkJhc2U6OnNfaW5mbywg
MCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShEZWJ1Z2dlclNjb3BlKSB9OwogCi1EZWJ1Z2dlclNj
b3BlOjpEZWJ1Z2dlclNjb3BlKFZNJiB2bSkKLSAgICA6IEpTTm9uRmluYWxPYmplY3Qodm0sIHZt
LmRlYnVnZ2VyU2NvcGVTdHJ1Y3R1cmUuZ2V0KCkpCitEZWJ1Z2dlclNjb3BlOjpEZWJ1Z2dlclNj
b3BlKFZNJiB2bSwgSlNTY29wZSogc2NvcGUpCisgICAgOiBKU05vbkZpbmFsT2JqZWN0KHZtLCBz
Y29wZS0+Z2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyU2NvcGVTdHJ1Y3R1cmUoKSkKIHsKKyAgICBB
U1NFUlQoc2NvcGUpOworICAgIG1fc2NvcGUuc2V0KHZtLCB0aGlzLCBzY29wZSk7CiB9CiAKLXZv
aWQgRGVidWdnZXJTY29wZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU09iamVjdCogYWN0aXZh
dGlvbikKK3ZvaWQgRGVidWdnZXJTY29wZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICBBU1NFUlQoYWN0aXZhdGlvbik7Ci0gICAg
QVNTRVJUKGFjdGl2YXRpb24tPmlzQWN0aXZhdGlvbk9iamVjdCgpKTsKLSAgICBtX2FjdGl2YXRp
b24uc2V0KHZtLCB0aGlzLCBqc0Nhc3Q8SlNBY3RpdmF0aW9uKj4oYWN0aXZhdGlvbikpOwogfQog
CiB2b2lkIERlYnVnZ2VyU2NvcGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKQEAgLTU2LDQzICs1NiwxMDggQEAgdm9pZCBEZWJ1Z2dlclNjb3BlOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbAogICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+
dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwogCiAgICAgSlNPYmplY3Q6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgdmlzaXRvci5hcHBlbmQoJnRo
aXNPYmplY3QtPm1fYWN0aXZhdGlvbik7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3Qt
Pm1fc2NvcGUpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX25leHQpOwogfQog
CiBTdHJpbmcgRGVidWdnZXJTY29wZTo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmplY3Qp
CiB7Ci0gICAgY29uc3QgRGVidWdnZXJTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxjb25zdCBE
ZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+bV9hY3RpdmF0
aW9uLT5tZXRob2RUYWJsZSgpLT5jbGFzc05hbWUodGhpc09iamVjdC0+bV9hY3RpdmF0aW9uLmdl
dCgpKTsKKyAgICBjb25zdCBEZWJ1Z2dlclNjb3BlKiBzY29wZSA9IGpzQ2FzdDxjb25zdCBEZWJ1
Z2dlclNjb3BlKj4ob2JqZWN0KTsKKyAgICBBU1NFUlQoc2NvcGUtPmlzVmFsaWQoKSk7CisgICAg
aWYgKCFzY29wZS0+aXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgSlNP
YmplY3QqIHRoaXNPYmplY3QgPSBKU1Njb3BlOjpvYmplY3RBdFNjb3BlKHNjb3BlLT5qc1Njb3Bl
KCkpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5jbGFzc05hbWUodGhp
c09iamVjdCk7CiB9CiAKIGJvb2wgRGVidWdnZXJTY29wZTo6Z2V0T3duUHJvcGVydHlTbG90KEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KQogewotICAgIERlYnVnZ2VyU2NvcGUqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8RGVidWdnZXJTY29wZSo+KG9iamVjdCk7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3Qt
Pm1fYWN0aXZhdGlvbi0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmpl
Y3QtPm1fYWN0aXZhdGlvbi5nZXQoKSwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICBE
ZWJ1Z2dlclNjb3BlKiBzY29wZSA9IGpzQ2FzdDxEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsKKyAg
ICBBU1NFUlQoc2NvcGUtPmlzVmFsaWQoKSk7CisgICAgaWYgKCFzY29wZS0+aXNWYWxpZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBKU1Njb3Bl
OjpvYmplY3RBdFNjb3BlKHNjb3BlLT5qc1Njb3BlKCkpOworICAgIHJldHVybiB0aGlzT2JqZWN0
LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCBzbG90KTsKIH0KIAogdm9pZCBEZWJ1Z2dlclNjb3BlOjpwdXQoSlNDZWxsKiBj
ZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBEZWJ1Z2dlclNjb3BlKiB0aGlz
T2JqZWN0ID0ganNDYXN0PERlYnVnZ2VyU2NvcGUqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5t
X2FjdGl2YXRpb24tPm1ldGhvZFRhYmxlKCktPnB1dCh0aGlzT2JqZWN0LT5tX2FjdGl2YXRpb24u
Z2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIERlYnVnZ2VyU2Nv
cGUqIHNjb3BlID0ganNDYXN0PERlYnVnZ2VyU2NvcGUqPihjZWxsKTsKKyAgICBBU1NFUlQoc2Nv
cGUtPmlzVmFsaWQoKSk7CisgICAgaWYgKCFzY29wZS0+aXNWYWxpZCgpKQorICAgICAgICByZXR1
cm47CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBKU1Njb3BlOjpvYmplY3RBdFNjb3BlKHNj
b3BlLT5qc1Njb3BlKCkpOworICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dCh0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAogYm9vbCBEZWJ1
Z2dlclNjb3BlOjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAgICBEZWJ1Z2dlclNjb3BlKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PERlYnVnZ2VyU2NvcGUqPihjZWxsKTsKLSAgICByZXR1cm4gdGhpc09iamVj
dC0+bV9hY3RpdmF0aW9uLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0
LT5tX2FjdGl2YXRpb24uZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgRGVidWdnZXJT
Y29wZSogc2NvcGUgPSBqc0Nhc3Q8RGVidWdnZXJTY29wZSo+KGNlbGwpOworICAgIEFTU0VSVChz
Y29wZS0+aXNWYWxpZCgpKTsKKyAgICBpZiAoIXNjb3BlLT5pc1ZhbGlkKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBKU09iamVjdCogdGhpc09iamVjdCA9IEpTU2NvcGU6Om9iamVjdEF0
U2NvcGUoc2NvcGUtPmpzU2NvcGUoKSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRh
YmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9
CiAKIHZvaWQgRGVidWdnZXJTY29wZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKLSAgICBEZWJ1Z2dlclNjb3BlKiB0aGlzT2JqZWN0ID0g
anNDYXN0PERlYnVnZ2VyU2NvcGUqPihvYmplY3QpOwotICAgIHRoaXNPYmplY3QtPm1fYWN0aXZh
dGlvbi0+bWV0aG9kVGFibGUoKS0+Z2V0UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LT5tX2FjdGl2
YXRpb24uZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIERlYnVnZ2VyU2Nv
cGUqIHNjb3BlID0ganNDYXN0PERlYnVnZ2VyU2NvcGUqPihvYmplY3QpOworICAgIEFTU0VSVChz
Y29wZS0+aXNWYWxpZCgpKTsKKyAgICBpZiAoIXNjb3BlLT5pc1ZhbGlkKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBKU09iamVjdCogdGhpc09iamVjdCA9IEpTU2NvcGU6Om9iamVjdEF0U2NvcGUo
c2NvcGUtPmpzU2NvcGUoKSk7CisgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0UHJv
cGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAog
Ym9vbCBEZWJ1Z2dlclNjb3BlOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKIHsKLSAgICBEZWJ1Z2dl
clNjb3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0PERlYnVnZ2VyU2NvcGUqPihvYmplY3QpOwotICAg
IHJldHVybiB0aGlzT2JqZWN0LT5tX2FjdGl2YXRpb24tPm1ldGhvZFRhYmxlKCktPmRlZmluZU93
blByb3BlcnR5KHRoaXNPYmplY3QtPm1fYWN0aXZhdGlvbi5nZXQoKSwgZXhlYywgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7CisgICAgRGVidWdnZXJTY29wZSogc2NvcGUg
PSBqc0Nhc3Q8RGVidWdnZXJTY29wZSo+KG9iamVjdCk7CisgICAgQVNTRVJUKHNjb3BlLT5pc1Zh
bGlkKCkpOworICAgIGlmICghc2NvcGUtPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gSlNTY29wZTo6b2JqZWN0QXRTY29wZShzY29w
ZS0+anNTY29wZSgpKTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVm
aW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
LCBzaG91bGRUaHJvdyk7Cit9CisKK0RlYnVnZ2VyU2NvcGUqIERlYnVnZ2VyU2NvcGU6Om5leHQo
KQoreworICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgIGlmICghbV9uZXh0ICYmIG1fc2NvcGUt
Pm5leHQoKSkgeworICAgICAgICBWTSYgdm0gPSAqbV9zY29wZS0+dm0oKTsKKyAgICAgICAgRGVi
dWdnZXJTY29wZSogbmV4dFNjb3BlID0gY3JlYXRlKHZtLCBtX3Njb3BlLT5uZXh0KCkpOworICAg
ICAgICBtX25leHQuc2V0KHZtLCB0aGlzLCBuZXh0U2NvcGUpOworICAgIH0KKyAgICByZXR1cm4g
bV9uZXh0LmdldCgpOworfQorCit2b2lkIERlYnVnZ2VyU2NvcGU6OmludmFsaWRhdGVDaGFpbigp
Cit7CisgICAgRGVidWdnZXJTY29wZSogc2NvcGUgPSB0aGlzOworICAgIHdoaWxlIChzY29wZSkg
eworICAgICAgICBBU1NFUlQoc2NvcGUtPmlzVmFsaWQoKSk7CisgICAgICAgIERlYnVnZ2VyU2Nv
cGUqIG5leHRTY29wZSA9IHNjb3BlLT5tX25leHQuZ2V0KCk7CisgICAgICAgIHNjb3BlLT5tX25l
eHQuY2xlYXIoKTsKKyAgICAgICAgc2NvcGUtPm1fc2NvcGUuY2xlYXIoKTsKKyAgICAgICAgc2Nv
cGUgPSBuZXh0U2NvcGU7CisgICAgfQorfQorCitib29sIERlYnVnZ2VyU2NvcGU6OmlzV2l0aFNj
b3BlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zY29wZS0+aXNXaXRoU2NvcGUoKTsKK30KKwor
Ym9vbCBEZWJ1Z2dlclNjb3BlOjppc0dsb2JhbFNjb3BlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9zY29wZS0+aXNHbG9iYWxPYmplY3QoKTsKK30KKworYm9vbCBEZWJ1Z2dlclNjb3BlOjppc0Z1
bmN0aW9uU2NvcGUoKSBjb25zdAoreworICAgIC8vIEluIHRoZSBjdXJyZW50IGRlYnVnZ2VyIGlt
cGxlbWVudGF0aW9uLCBldmVyeSBmdW5jdGlvbiB3aWxsIGNyZWF0ZSBhbgorICAgIC8vIGFjdGl2
YXRpb24gb2JqZWN0LiBIZW5jZSwgYW4gYWN0aXZhdGlvbiBvYmplY3QgaW1wbGllcyBhIGZ1bmN0
aW9uIHNjb3BlLgorICAgIHJldHVybiBtX3Njb3BlLT5pc0FjdGl2YXRpb25PYmplY3QoKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdn
ZXIvRGVidWdnZXJTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgJKHJldmlzaW9uIDE3MDUwNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDE1ICszMCwxOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgRGVidWdnZXJDYWxsRnJh
bWU7CitjbGFzcyBKU1Njb3BlOworCiBjbGFzcyBEZWJ1Z2dlclNjb3BlIDogcHVibGljIEpTTm9u
RmluYWxPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNl
OwogCi0gICAgc3RhdGljIERlYnVnZ2VyU2NvcGUqIGNyZWF0ZShWTSYgdm0sIEpTT2JqZWN0KiBv
YmplY3QpCisgICAgc3RhdGljIERlYnVnZ2VyU2NvcGUqIGNyZWF0ZShWTSYgdm0sIEpTU2NvcGUq
IHNjb3BlKQogICAgIHsKLSAgICAgICAgRGVidWdnZXJTY29wZSogYWN0aXZhdGlvbiA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPERlYnVnZ2VyU2NvcGU+KHZtLmhlYXApKSBEZWJ1Z2dlclNj
b3BlKHZtKTsKLSAgICAgICAgYWN0aXZhdGlvbi0+ZmluaXNoQ3JlYXRpb24odm0sIG9iamVjdCk7
Ci0gICAgICAgIHJldHVybiBhY3RpdmF0aW9uOworICAgICAgICBEZWJ1Z2dlclNjb3BlKiBkZWJ1
Z2dlclNjb3BlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RGVidWdnZXJTY29wZT4odm0u
aGVhcCkpIERlYnVnZ2VyU2NvcGUodm0sIHNjb3BlKTsKKyAgICAgICAgZGVidWdnZXJTY29wZS0+
ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gZGVidWdnZXJTY29wZTsKICAgICB9
CiAKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CkBAIC01NiwxNiArNTksNTkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7IAogICAgIH0KIAotcHJvdGVjdGVkOgorICAgIGNsYXNz
IEl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEl0ZXJhdG9yKERlYnVnZ2VyU2NvcGUq
IG5vZGUpCisgICAgICAgICAgICA6IG1fbm9kZShub2RlKQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBEZWJ1Z2dlclNjb3BlKiBnZXQoKSB7IHJldHVybiBtX25vZGU7IH0KKyAgICAg
ICAgSXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7IG1fbm9kZSA9IG1fbm9kZS0+bmV4dCgpOyByZXR1
cm4gKnRoaXM7IH0KKyAgICAgICAgLy8gcG9zdGZpeCArKyBpbnRlbnRpb25hbGx5IG9taXR0ZWQK
KworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdCB7
IHJldHVybiBtX25vZGUgPT0gb3RoZXIubV9ub2RlOyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZSAhPSBvdGhlci5t
X25vZGU7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIERlYnVnZ2VyU2NvcGUqIG1fbm9kZTsK
KyAgICB9OworCisgICAgSXRlcmF0b3IgYmVnaW4oKTsKKyAgICBJdGVyYXRvciBlbmQoKTsKKyAg
ICBEZWJ1Z2dlclNjb3BlKiBuZXh0KCk7CisKKyAgICB2b2lkIGludmFsaWRhdGVDaGFpbigpOwor
ICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuICEhbV9zY29wZTsgfQorCisgICAgYm9v
bCBpc1dpdGhTY29wZSgpIGNvbnN0OworICAgIGJvb2wgaXNHbG9iYWxTY29wZSgpIGNvbnN0Owor
ICAgIGJvb2wgaXNGdW5jdGlvblNjb3BlKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgRGVidWdnZXJTY29wZShWTSYsIEpTU2NvcGUqKTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CisKKyAgICBKU1Njb3BlKiBqc1Njb3Bl
KCkgY29uc3QgeyByZXR1cm4gbV9zY29wZS5nZXQoKTsgfQorCiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3Zl
cnJpZGVzVmlzaXRDaGlsZHJlbiB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKIAotICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU09iamVjdCogYWN0aXZh
dGlvbik7CisgICAgV3JpdGVCYXJyaWVyPEpTU2NvcGU+IG1fc2NvcGU7CisgICAgV3JpdGVCYXJy
aWVyPERlYnVnZ2VyU2NvcGU+IG1fbmV4dDsKIAotcHJpdmF0ZToKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBEZWJ1Z2dlclNjb3BlKFZNJik7Ci0gICAgV3JpdGVCYXJyaWVyPEpTQWN0aXZhdGlvbj4g
bV9hY3RpdmF0aW9uOworICAgIGZyaWVuZCBjbGFzcyBEZWJ1Z2dlckNhbGxGcmFtZTsKIH07CiAK
K2lubGluZSBEZWJ1Z2dlclNjb3BlOjpJdGVyYXRvciBEZWJ1Z2dlclNjb3BlOjpiZWdpbigpCit7
CisgICAgcmV0dXJuIEl0ZXJhdG9yKHRoaXMpOyAKK30KKworaW5saW5lIERlYnVnZ2VyU2NvcGU6
Okl0ZXJhdG9yIERlYnVnZ2VyU2NvcGU6OmVuZCgpCit7IAorICAgIHJldHVybiBJdGVyYXRvcigw
KTsgCit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRGVidWdnZXJTY29wZV9o
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxG
cmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9K
U0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAxNzA1MDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKKyNpbmNs
dWRlICJEZWJ1Z2dlclNjb3BlLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJKU0NK
U1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgpAQCAtOTUsMjkgKzk2LDMwIEBA
IEpTVmFsdWUgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzY29wZVR5cGUKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgaW50IGluZGV4ID0gZXhlYy0+YXJndW1lbnQoMCkuYXNJbnQz
MigpOwogCi0gICAgSlNTY29wZSogc2NvcGVDaGFpbiA9IGltcGwoKS5zY29wZUNoYWluKCk7Ci0g
ICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVuZCA9IHNjb3BlQ2hhaW4tPmVuZCgpOwotCi0gICAgLy8g
RklYTUU6IFdlIHNob3VsZCBiZSBpZGVudGlmeWluZyBhbmQgcmV0dXJuaW5nIENBVENIX1NDT1BF
IGFwcHJvcHJpYXRlbHkuCisgICAgRGVidWdnZXJTY29wZSogc2NvcGVDaGFpbiA9IGltcGwoKS5z
Y29wZUNoYWluKCk7CisgICAgRGVidWdnZXJTY29wZTo6SXRlcmF0b3IgZW5kID0gc2NvcGVDaGFp
bi0+ZW5kKCk7CiAKICAgICBib29sIGZvdW5kTG9jYWxTY29wZSA9IGZhbHNlOwotICAgIGZvciAo
U2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBzY29wZUNoYWluLT5iZWdpbigpOyBpdGVyICE9IGVu
ZDsgKytpdGVyKSB7Ci0gICAgICAgIEpTT2JqZWN0KiBzY29wZSA9IGl0ZXIuZ2V0KCk7Ci0gICAg
ICAgIGlmIChzY29wZS0+aXNBY3RpdmF0aW9uT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGlmICgh
Zm91bmRMb2NhbFNjb3BlKSB7Ci0gICAgICAgICAgICAgICAgLy8gRmlyc3QgYWN0aXZhdGlvbiBv
YmplY3QgaXMgbG9jYWwgc2NvcGUsIGVhY2ggc3VjY2Vzc2l2ZSBhY3RpdmF0aW9uIG9iamVjdCBp
cyBjbG9zdXJlLgotICAgICAgICAgICAgICAgIGlmICghaW5kZXgpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBqc051bWJlcihKU0phdmFTY3JpcHRDYWxsRnJhbWU6OkxPQ0FMX1NDT1BFKTsK
LSAgICAgICAgICAgICAgICBmb3VuZExvY2FsU2NvcGUgPSB0cnVlOwotICAgICAgICAgICAgfSBl
bHNlIGlmICghaW5kZXgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKEpTSmF2YVNj
cmlwdENhbGxGcmFtZTo6Q0xPU1VSRV9TQ09QRSk7CisgICAgZm9yIChEZWJ1Z2dlclNjb3BlOjpJ
dGVyYXRvciBpdGVyID0gc2NvcGVDaGFpbi0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikg
eworICAgICAgICBEZWJ1Z2dlclNjb3BlKiBzY29wZSA9IGl0ZXIuZ2V0KCk7CisKKyAgICAgICAg
aWYgKCFmb3VuZExvY2FsU2NvcGUgJiYgc2NvcGUtPmlzRnVuY3Rpb25TY29wZSgpKSB7CisgICAg
ICAgICAgICAvLyBGaXJzdCBmdW5jdGlvbiBzY29wZSBpcyB0aGUgbG9jYWwgc2NvcGUsIGVhY2gg
c3VjY2Vzc2l2ZSBvbmUgaXMgYSBjbG9zdXJlLgorICAgICAgICAgICAgaWYgKCFpbmRleCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpMT0NB
TF9TQ09QRSk7CisgICAgICAgICAgICBmb3VuZExvY2FsU2NvcGUgPSB0cnVlOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKCFpbmRleCkgewotICAgICAgICAgICAgLy8gTGFzdCBpbiB0aGUgY2hh
aW4gaXMgZ2xvYmFsIHNjb3BlLgotICAgICAgICAgICAgaWYgKCsraXRlciA9PSBlbmQpCisgICAg
ICAgICAgICBpZiAoc2NvcGUtPmlzV2l0aFNjb3BlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGpzTnVtYmVyKEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6V0lUSF9TQ09QRSk7CisgICAgICAgICAg
ICBpZiAoc2NvcGUtPmlzR2xvYmFsU2NvcGUoKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVCgr
K2l0ZXIgPT0gZW5kKTsKICAgICAgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoSlNKYXZhU2Ny
aXB0Q2FsbEZyYW1lOjpHTE9CQUxfU0NPUEUpOwotICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVy
KEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6V0lUSF9TQ09QRSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGlkZW50aWZ5aW5nIGFuZCByZXR1cm5pbmcg
Q0FUQ0hfU0NPUEUgYXBwcm9wcmlhdGVseS4KKyAgICAgICAgICAgIEFTU0VSVChzY29wZS0+aXNG
dW5jdGlvblNjb3BlKCkpOworICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKEpTSmF2YVNjcmlw
dENhbGxGcmFtZTo6Q0xPU1VSRV9TQ09QRSk7CiAgICAgICAgIH0KIAogICAgICAgICAtLWluZGV4
OwpAQCAtMTU3LDkgKzE1OSw5IEBAIEpTVmFsdWUgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpzY29w
ZUNoYWkKICAgICBpZiAoIWltcGwoKS5zY29wZUNoYWluKCkpCiAgICAgICAgIHJldHVybiBqc051
bGwoKTsKIAotICAgIEpTU2NvcGUqIHNjb3BlQ2hhaW4gPSBpbXBsKCkuc2NvcGVDaGFpbigpOwot
ICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gc2NvcGVDaGFpbi0+YmVnaW4oKTsKLSAgICBT
Y29wZUNoYWluSXRlcmF0b3IgZW5kID0gc2NvcGVDaGFpbi0+ZW5kKCk7CisgICAgRGVidWdnZXJT
Y29wZSogc2NvcGVDaGFpbiA9IGltcGwoKS5zY29wZUNoYWluKCk7CisgICAgRGVidWdnZXJTY29w
ZTo6SXRlcmF0b3IgaXRlciA9IHNjb3BlQ2hhaW4tPmJlZ2luKCk7CisgICAgRGVidWdnZXJTY29w
ZTo6SXRlcmF0b3IgZW5kID0gc2NvcGVDaGFpbi0+ZW5kKCk7CiAKICAgICAvLyBXZSBtdXN0IGFs
d2F5cyBoYXZlIHNvbWV0aGluZyBpbiB0aGUgc2NvcGUgY2hhaW4uCiAgICAgQVNTRVJUKGl0ZXIg
IT0gZW5kKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSmF2YVNjcmlw
dENhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5oCShyZXZpc2lvbiAxNzA1MDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJhbWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTMgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEzLTIw
MTQgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBmdW5jdGlv
bk5hbWUoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyQ2FsbEZyYW1lLT5mdW5jdGlvbk5hbWUo
KTsgfQogICAgIEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6OlR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUtPnR5cGUoKTsgfQotICAgIEpTQzo6SlNTY29wZSogc2Nv
cGVDaGFpbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUtPnNjb3BlKCk7IH0K
KyAgICBKU0M6OkRlYnVnZ2VyU2NvcGUqIHNjb3BlQ2hhaW4oKSBjb25zdCB7IHJldHVybiBtX2Rl
YnVnZ2VyQ2FsbEZyYW1lLT5zY29wZSgpOyB9CiAgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogdm1F
bnRyeUdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUtPnZt
RW50cnlHbG9iYWxPYmplY3QoKTsgfQogCiAgICAgSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOyB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnU2VydmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnU2Vy
dmVyLmNwcAkocmV2aXNpb24gMTcwNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9TY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcg
QEAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogCiAjaW5jbHVkZSAiRGVidWdnZXJDYWxsRnJhbWUu
aCIKKyNpbmNsdWRlICJEZWJ1Z2dlclNjb3BlLmgiCiAjaW5jbHVkZSAiSlNKYXZhU2NyaXB0Q2Fs
bEZyYW1lLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSmF2YVNjcmlwdENhbGxG
cmFtZS5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTcwNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3
IEBACiAjaW5jbHVkZSAiRGF0ZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiRGF0ZVByb3RvdHlw
ZS5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCisjaW5jbHVkZSAiRGVidWdnZXJTY29wZS5oIgog
I2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXJyb3JDb25zdHJ1Y3Rvci5oIgogI2luY2x1
ZGUgIkVycm9yUHJvdG90eXBlLmgiCkBAIC0zMjAsNiArMzIxLDcgQEAgdm9pZCBKU0dsb2JhbE9i
amVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogICAgIG1fbmFtZVNjb3BlU3RydWN0dXJlLnNldCh2
bSwgdGhpcywgSlNOYW1lU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywganNOdWxsKCkp
KTsKICAgICBtX2FjdGl2YXRpb25TdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBKU0FjdGl2YXRpb246
OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywganNOdWxsKCkpKTsKICAgICBtX3N0cmljdEV2YWxB
Y3RpdmF0aW9uU3RydWN0dXJlLnNldCh2bSwgdGhpcywgU3RyaWN0RXZhbEFjdGl2YXRpb246OmNy
ZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywganNOdWxsKCkpKTsKKyAgICBtX2RlYnVnZ2VyU2NvcGVT
dHJ1Y3R1cmUuc2V0KG1fdm0sIHRoaXMsIERlYnVnZ2VyU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZSht
X3ZtLCB0aGlzLCBqc051bGwoKSkpOwogICAgIG1fd2l0aFNjb3BlU3RydWN0dXJlLnNldCh2bSwg
dGhpcywgSlNXaXRoU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywganNOdWxsKCkpKTsK
IAogICAgIG1fbnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIEpTRmlu
YWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywganNOdWxsKCksIEpTRmluYWxPYmpl
Y3Q6OmRlZmF1bHRJbmxpbmVDYXBhY2l0eSgpKSk7CkBAIC02NjEsNiArNjYzLDcgQEAgdm9pZCBK
U0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIHZpc2l0b3IuYXBwZW5kKCZ0
aGlzT2JqZWN0LT5tX3Byb21pc2VQcm90b3R5cGUpOwogI2VuZGlmCiAKKyAgICB2aXNpdG9yLmFw
cGVuZCgmdGhpc09iamVjdC0+bV9kZWJ1Z2dlclNjb3BlU3RydWN0dXJlKTsKICAgICB2aXNpdG9y
LmFwcGVuZCgmdGhpc09iamVjdC0+bV93aXRoU2NvcGVTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3N0cmljdEV2YWxBY3RpdmF0aW9uU3RydWN0dXJlKTsKICAg
ICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hY3RpdmF0aW9uU3RydWN0dXJlKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAko
cmV2aXNpb24gMTcwNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4Myw3IEBAIHByb3RlY3RlZDoK
ICAgICBXcml0ZUJhcnJpZXI8SlNQcm9taXNlUHJvdG90eXBlPiBtX3Byb21pc2VQcm90b3R5cGU7
CiAjZW5kaWYKIAorICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fZGVidWdnZXJTY29wZVN0
cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3dpdGhTY29wZVN0cnVjdHVy
ZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cmljdEV2YWxBY3RpdmF0aW9uU3Ry
dWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fYWN0aXZhdGlvblN0cnVjdHVy
ZTsKQEAgLTM4OCw2ICszODksNyBAQCBwdWJsaWM6CiAgICAgSlNQcm9taXNlUHJvdG90eXBlKiBw
cm9taXNlUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gbV9wcm9taXNlUHJvdG90eXBlLmdldCgp
OyB9CiAjZW5kaWYKIAorICAgIFN0cnVjdHVyZSogZGVidWdnZXJTY29wZVN0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZGVidWdnZXJTY29wZVN0cnVjdHVyZS5nZXQoKTsgfQogICAgIFN0cnVj
dHVyZSogd2l0aFNjb3BlU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV93aXRoU2NvcGVTdHJ1
Y3R1cmUuZ2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUqIHN0cmljdEV2YWxBY3RpdmF0aW9uU3RydWN0
dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpY3RFdmFsQWN0aXZhdGlvblN0cnVjdHVyZS5nZXQo
KTsgfQogICAgIFN0cnVjdHVyZSogYWN0aXZhdGlvblN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYWN0aXZhdGlvblN0cnVjdHVyZS5nZXQoKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxNzA1MDQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OTksNiArNTk5
LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNOYW1lU2NvcGVPYmplY3QoKSBjb25zdDsKICAgICBi
b29sIGlzQWN0aXZhdGlvbk9iamVjdCgpIGNvbnN0OwogICAgIGJvb2wgaXNFcnJvckluc3RhbmNl
KCkgY29uc3Q7CisgICAgYm9vbCBpc1dpdGhTY29wZSgpIGNvbnN0OwogCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBzZWFsKFZNJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmcmVl
emUoVk0mKTsKQEAgLTExNDcsNiArMTE0OCwxMSBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6aXNF
cnJvckluc3RhbmNlKCkgCiAgICAgcmV0dXJuIHR5cGUoKSA9PSBFcnJvckluc3RhbmNlVHlwZTsK
IH0KIAoraW5saW5lIGJvb2wgSlNPYmplY3Q6OmlzV2l0aFNjb3BlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gdHlwZSgpID09IFdpdGhTY29wZVR5cGU7Cit9CisKIGlubGluZSB2b2lkIEpTT2JqZWN0
OjpzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
QnV0dGVyZmx5KiBidXR0ZXJmbHkpCiB7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5oCShyZXZpc2lvbiAxNzA1MDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE1MCw3ICsxNTAsNyBAQCBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0
c0V4dHJhY3RvcjsKICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mTmV4dCgpOwogCi0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTT2JqZWN0KiBvYmplY3RBdFNjb3BlKEpTU2NvcGUqKTsK
KyAgICBzdGF0aWMgSlNPYmplY3QqIG9iamVjdEF0U2NvcGUoSlNTY29wZSopOwogCiAgICAgc3Rh
dGljIEpTVmFsdWUgcmVzb2x2ZShFeGVjU3RhdGUqLCBKU1Njb3BlKiwgY29uc3QgSWRlbnRpZmll
ciYpOwogICAgIHN0YXRpYyBSZXNvbHZlT3AgYWJzdHJhY3RSZXNvbHZlKEV4ZWNTdGF0ZSosIEpT
U2NvcGUqLCBjb25zdCBJZGVudGlmaWVyJiwgR2V0T3JQdXQsIFJlc29sdmVUeXBlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE3MDUwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzks
NyArMzksNiBAQAogI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2luY2x1ZGUgIkRGR0xv
bmdMaXZlZFN0YXRlLmgiCiAjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKLSNpbmNsdWRlICJEZWJ1
Z2dlclNjb3BlLmgiCiAjaW5jbHVkZSAiRXJyb3JJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkZUTFRo
dW5rcy5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uQ29uc3RydWN0b3IuaCIKQEAgLTI1NSw3ICsyNTQs
NiBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgcHJvcGVy
dHlOYW1lcyA9IG5ldyBDb21tb25JZGVudGlmaWVycyh0aGlzKTsKICAgICBzdHJ1Y3R1cmVTdHJ1
Y3R1cmUuc2V0KCp0aGlzLCBTdHJ1Y3R1cmU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcykpOwogICAg
IHN0cnVjdHVyZVJhcmVEYXRhU3RydWN0dXJlLnNldCgqdGhpcywgU3RydWN0dXJlUmFyZURhdGE6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKLSAgICBkZWJ1Z2dlclNjb3Bl
U3RydWN0dXJlLnNldCgqdGhpcywgRGVidWdnZXJTY29wZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlz
LCAwLCBqc051bGwoKSkpOwogICAgIHRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZS5z
ZXQoKnRoaXMsIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlz
LCAwLCBqc051bGwoKSkpOwogICAgIHN0cmluZ1N0cnVjdHVyZS5zZXQoKnRoaXMsIEpTU3RyaW5n
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgbm90QW5PYmplY3RT
dHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU05vdEFuT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMs
IDAsIGpzTnVsbCgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlz
aW9uIDE3MDUwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI2Miw3ICsyNjIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBT
dHJvbmc8U3RydWN0dXJlPiBzdHJ1Y3R1cmVTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1
Y3R1cmU+IHN0cnVjdHVyZVJhcmVEYXRhU3RydWN0dXJlOwotICAgICAgICBTdHJvbmc8U3RydWN0
dXJlPiBkZWJ1Z2dlclNjb3BlU3RydWN0dXJlOwogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiB0
ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1
cmU+IHN0cmluZ1N0cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gbm90QW5PYmpl
Y3RTdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzA2NzcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxNC0w
Ny0wMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgW2Z0bG9wdF0g
RGVidWdnZXJDYWxsRnJhbWU6OnNjb3BlKCkgc2hvdWxkIHJldHVybiBhIERlYnVnZ2VyU2NvcGUu
CisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8xMzQ0MjA+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAg
ICogRm9yd2FyZGluZ0hlYWRlcnMvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaDogUmVtb3Zl
ZC4KKyAgICAgICAgLSBUaGlzIGlzIG5vdCBpbiB1c2UuICBIZW5jZSwgd2UgY2FuIHJlbW92ZSBp
dC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmF0dGFjaERlYnVnZ2VyKToKKyAgICAgICAgLSBX
ZSBzaG91bGQgYWNxdWlyZSB0aGUgSlNMb2NrIGJlZm9yZSBtb2RpZnlpbmcgYSBKUyBnbG9iYWwg
b2JqZWN0LgorCiAyMDE0LTA2LTI1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAK
ICAgICAgICAgW2Z0bG9wdF0gSWYgYSBDb2RlQmxvY2sgaXMgamV0dGlzb25lZCBkdWUgdG8gYSB3
YXRjaHBvaW50IHRoZW4gaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGZpZ3VyZSBvdXQgc29tZXRo
aW5nIGFib3V0IHRoYXQgd2F0Y2hwb2ludApJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGlu
Z0hlYWRlcnMvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5o
CShyZXZpc2lvbiAxNzA1MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9k
ZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzAsMCBA
QAotI2lmbmRlZiBXZWJDb3JlX0ZXRF9EZWJ1Z2dlckNhbGxGcmFtZV9oCi0jZGVmaW5lIFdlYkNv
cmVfRldEX0RlYnVnZ2VyQ2FsbEZyYW1lX2gKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9EZWJ1
Z2dlckNhbGxGcmFtZS5oPgotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTcwNTA0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5NSw2ICsyOTUsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmF0dGFjaERlYnVnZ2Vy
KEpTCiAgICAgICAgIHJldHVybjsKIAogICAgIEpTRE9NV2luZG93KiBnbG9iYWxPYmplY3QgPSBz
aGVsbC0+d2luZG93KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0LT52bSgp
KTsKICAgICBpZiAoZGVidWdnZXIpCiAgICAgICAgIGRlYnVnZ2VyLT5hdHRhY2goZ2xvYmFsT2Jq
ZWN0KTsKICAgICBlbHNlIGlmIChKU0M6OkRlYnVnZ2VyKiBjdXJyZW50RGVidWdnZXIgPSBnbG9i
YWxPYmplY3QtPmRlYnVnZ2VyKCkpCg==
</data>
<flag name="review"
          id="258760"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237195</attachid>
            <date>2014-08-26 20:33:35 -0700</date>
            <delta_ts>2014-08-28 16:09:10 -0700</delta_ts>
            <desc>patch 4: with fix for https://webkit.org/b/135656</desc>
            <filename>bug-134420.patch</filename>
            <type>text/plain</type>
            <size>33653</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcyOTkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMiBA
QAorMjAxNC0wOC0yNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
RGVidWdnZXJDYWxsRnJhbWU6OnNjb3BlKCkgc2hvdWxkIHJldHVybiBhIERlYnVnZ2VyU2NvcGUu
CisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8xMzQ0MjA+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUm9sbGluZyBiYWNrIGluIHIxNzA2ODAg
d2l0aCB0aGUgZml4IGZvciA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTM1NjU2Pi4KKworICAgICAg
ICBQcmV2aW91c2x5LCBEZWJ1Z2dlckNhbGxGcmFtZTo6c2NvcGUoKSByZXR1cm5zIGEgSlNBY3Rp
dmF0aW9uIChhbmQgcmVsZXZhbnQKKyAgICAgICAgcGVlcnMpIHdoaWNoIHRoZSBXZWJJbnNwZWN0
b3Igd2lsbCB1c2UgdG8gaW50cm9zcGVjdCBDYWxsRnJhbWUgdmFyaWFibGVzLgorICAgICAgICBJ
bnN0ZWFkLCB3ZSBzaG91bGQgYmUgcmV0dXJuaW5nIGEgRGVidWdnZXJTY29wZSBhcyBhbiBhYnN0
cmFjdGlvbiBsYXllciB0aGF0CisgICAgICAgIHByb3ZpZGVzIHRoZSBpbnRyb3NwZWN0aW9uIGZ1
bmN0aW9uYWxpdHkgdGhhdCB0aGUgV2ViSW5zcGVjdG9yIG5lZWRzLiAgVGhpcworICAgICAgICBp
cyB0aGUgZmlyc3Qgc3RlcCB0b3dhcmRzIG5vdCBmb3JjaW5nIGV2ZXJ5IGZyYW1lIHRvIGhhdmUg
YSBKU0FjdGl2YXRpb24KKyAgICAgICAgb2JqZWN0IGp1c3QgYmVjYXVzZSB0aGUgZGVidWdnZXIg
aXMgZW5hYmxlZC4KKworICAgICAgICAxLiBJbnN0YW50aWF0ZSB0aGUgZGVidWdnZXJTY29wZVN0
cnVjdHVyZSBhcyBhIG1lbWJlciBvZiB0aGUgSlNHbG9iYWxPYmplY3QKKyAgICAgICAgICAgaW5z
dGVhZCBvZiB0aGUgVk0uICBUaGlzIGFsbG93cyBKU09iamVjdDo6Z2xvYmFsT2JqZWN0KCkgdG8g
YmUgYWJsZSB0bworICAgICAgICAgICByZXR1cm4gdGhlIGdsb2JhbCBvYmplY3QgZm9yIHRoZSBE
ZWJ1Z2dlclNjb3BlLgorCisgICAgICAgIDIuIE9uIHRoZSBEZWJ1Z2dlclNjb3BlJ3MgbGlmZS1j
eWNsZSBtYW5hZ2VtZW50OgorCisgICAgICAgICAgIFRoZSBEZWJ1Z2dlckNhbGxGcmFtZSBpcyBk
ZXNpZ25lZCB0byBiZSAidmFsaWQiIG9ubHkgZHVyaW5nIGEgZGVidWdnaW5nIHNlc3Npb24KKyAg
ICAgICAgICAgKHdoaWxlIHRoZSBkZWJ1Z2dlciBpcyBicm9rZW4pIHRocm91Z2ggdGhlIHVzZSBv
ZiBhIERlYnVnZ2VyQ2FsbEZyYW1lU2NvcGUgaW4KKyAgICAgICAgICAgRGVidWdnZXI6OnBhdXNl
SWZOZWVkZWQoKS4gIE9uY2UgdGhlIGRlYnVnZ2VyIHJlc3VtZXMgZnJvbSB0aGUgYnJlYWssIHRo
ZQorICAgICAgICAgICBEZWJ1Z2dlckNhbGxGcmFtZVNjb3BlIGRlc3RydWN0cywgYW5kIHRoZSBE
ZWJ1Z2dlckNhbGxGcmFtZSB3aWxsIGJlIGludmFsaWRhdGVkLgorICAgICAgICAgICBXZSBjYW4n
dCBndWFyYW50ZWUgKGZyb20gdGhpcyBjb2RlIGFsb25lKSB0aGF0IHRoZSBJbnNwZWN0b3IgY29k
ZSBpc24ndCBzdGlsbAorICAgICAgICAgICBob2xkaW5nIGEgcmVmIHRvIHRoZSBEZWJ1Z2dlckNh
bGxGcmFtZSAodGhvdWdoIHRoZXkgc2hvdWxkbid0KSwgYnV0IGJ5IGNvbnRyYWN0LAorICAgICAg
ICAgICB0aGUgZnJhbWUgd2lsbCBiZSBpbnZhbGlkYXRlZCwgYW5kIGFueSBhdHRlbXB0IHRvIHF1
ZXJ5IGl0IHdpbGwgcmV0dXJuIG51bGwgdmFsdWVzLgorICAgICAgICAgICBUaGlzIGlzIHByZS1l
eGlzdGluZyBiZWhhdmlvci4KKworICAgICAgICAgICBOb3csIHdlJ3JlIGFkZGluZyB0aGUgRGVi
dWdnZXJTY29wZSBpbnRvIHRoZSBwaWN0dXJlLiAgV2hpbGUgYSBzaW5nbGUgZGVidWdnZXIKKyAg
ICAgICAgICAgcGF1c2Ugc2Vzc2lvbiBpcyBpbiBwcm9ncmVzcywgdGhlIEluc3BlY3RvciBtYXkg
cmVxdWVzdCB0aGUgc2NvcGUgZnJvbSB0aGUKKyAgICAgICAgICAgRGVidWdnZXJDYWxsRnJhbWUu
ICBXaGlsZSB0aGUgRGVidWdnZXJDYWxsRnJhbWUgaXMgc3RpbGwgdmFsaWQsIHdlIHdhbnQKKyAg
ICAgICAgICAgRGVidWdnZXJDYWxsRnJhbWU6OnNjb3BlKCkgdG8gYWx3YXlzIHJldHVybiB0aGUg
c2FtZSBEZWJ1Z2dlclNjb3BlIG9iamVjdC4KKyAgICAgICAgICAgVGhpcyBpcyB3aHkgd2UgaG9s
ZCBvbiB0byB0aGUgRGVidWdnZXJTY29wZSB3aXRoIGEgc3Ryb25nIHJlZi4KKworICAgICAgICAg
ICBJZiB3ZSB1c2UgYSB3ZWFrIHJlZiBpbnN0ZWFkLCB0aGUgZm9sbG93aW5nIGNvb2t5IGJlaGF2
aW9yIGNhbiBtYW5pZmVzdDoKKyAgICAgICAgICAgMS4gVGhlIEluc3BlY3RvciBjYWxscyBEZWJ1
Z2dlcjo6c2NvcGUoKSB0byBnZXQgdGhlIHRvcCBzY29wZS4KKyAgICAgICAgICAgMi4gVGhlIElu
c3BlY3RvciBpdGVyYXRlcyBkb3duIHRoZSBzY29wZSBjaGFpbiBhbmQgaXMgbm93IG9ubHkgaG9s
ZGluZyBhCisgICAgICAgICAgICAgIHJlZmVyZW5jZSB0byBhIHBhcmVudCBzY29wZS4gIEl0IGlz
IG5vIGxvbmdlciByZWZlcmVuY2luZyB0aGUgdG9wIHNjb3BlLgorICAgICAgICAgICAzLiBBIEdD
IG9jY3VycywgYW5kIHRoZSBEZWJ1Z2dlckNhbGxGcmFtZSdzIHdlYWsgbV9zY29wZSByZWYgdG8g
dGhlIHRvcCBzY29wZQorICAgICAgICAgICAgICBnZXRzIGNsZWFyZWQuCisgICAgICAgICAgIDQu
IFRoZSBJbnNwZWN0b3IgY2FsbHMgRGVidWdnZXJDYWxsRnJhbWU6OnNjb3BlKCkgdG8gZ2V0IHRo
ZSB0b3Agc2NvcGUgYWdhaW4gYnV0IGdldHMKKyAgICAgICAgICAgICAgYSBkaWZmZXJlbnQgRGVi
dWdnZXJTY29wZSBpbnN0YW5jZS4KKyAgICAgICAgICAgNS4gVGhlIEluc3BlY3RvciBpdGVyYXRl
cyBkb3duIHRoZSBzY29wZSBjaGFpbiBidXQgbmV2ZXIgc2VlcyB0aGUgcGFyZW50IHNjb3BlCisg
ICAgICAgICAgICAgIGluc3RhbmNlIHRoYXQgcmV0YWluZWQgYSByZWYgdG8gaW4gc3RlcCAyIGFi
b3ZlLiAgVGhpcyBpcyBiZWNhdXNlIHdoZW4gaXRlcmF0aW5nCisgICAgICAgICAgICAgIHRoaXMg
bmV3IERlYnVnZ2VyU2NvcGUgaW5zdGFuY2UgKHdoaWNoIGhhcyBubyBrbm93bGVkZ2Ugb2YgdGhl
IHByZXZpb3VzIHBhcmVudAorICAgICAgICAgICAgICBEZWJ1Z2dlclNjb3BlIGluc3RhbmNlKSwg
YSBuZXcgRGVidWdnZXJTY29wZSBpbnN0YW5jZSB3aWxsIGdldCBjcmVhdGVkIGZvciB0aGUKKyAg
ICAgICAgICAgICAgc2FtZSBwYXJlbnQgc2NvcGUuIAorCisgICAgICAgICAgIFNpbmNlIHRoZSBE
ZWJ1Z2dlclNjb3BlIGlzIGEgSlNPYmplY3QsIGl0J3MgbGl2ZW5lc3MgaXMgZGV0ZXJtaW5lZCBi
eSBpdHMgcmVhY2hhYmlsaXR5LgorICAgICAgICAgICBIb3dldmVyLCBpdCdzICJ2YWxpZGl0eSIg
aXMgZGV0ZXJtaW5lZCBieSB0aGUgbGlmZS1jeWNsZSBvZiBpdHMgb3duZXIgRGVidWdnZXJDYWxs
RnJhbWUuCisgICAgICAgICAgIFdoZW4gdGhlIG93bmVyIERlYnVnZ2VyQ2FsbEZyYW1lIGdldHMg
aW52YWxpZGF0ZWQsIGl0cyBkZWJ1Z2dlciBzY29wZSBjaGFpbiAoaWYKKyAgICAgICAgICAgaW5z
dGFudGlhdGVkKSB3aWxsIGFsc28gZ2V0IGludmFsaWRhdGVkLiAgVGhpcyBpcyB3aHkgd2UgbmVl
ZCB0aGUKKyAgICAgICAgICAgRGVidWdnZXJTY29wZTo6aW52YWxpZGF0ZUNoYWluKCkgbWV0aG9k
LiAgVGhlIEluc3BlY3RvciBzaG91bGQgbm90IGJlIHVzaW5nIHRoZQorICAgICAgICAgICBEZWJ1
Z2dlclNjb3BlIGluc3RhbmNlIGFmdGVyIGl0cyBvd25lciBEZWJ1Z2dlckNhbGxGcmFtZSBpcyBp
bnZhbGlkYXRlZC4gIElmIGl0IGRvZXMsCisgICAgICAgICAgIHRob3NlIG1ldGhvZHMgd2lsbCBk
byBub3RoaW5nIG9yIHJldHVybmVkIGEgZmFpbGVkIHN0YXR1cy4KKworICAgICAgICBGaXggZm9y
IDxodHRwczovL3dlYmtpdC5vcmcvYi8xMzU2NTY+OgorICAgICAgICAzLiBEZWJ1Z2dlclNjb3Bl
OjpnZXRPd25Qcm9wZXJ0eVNsb3QoKSBhbmQgRGVidWdnZXJTY29wZTo6cHV0KCkgbmVlZCB0byBz
ZXQKKyAgICAgICAgICAgbV90aGlzVmFsdWUgaW4gdGhlIHJldHVybmVkIHNsb3QgdG8gdGhlIHdy
YXBwZWQgc2NvcGUgb2JqZWN0LiAgUHJldmlvdXNseSwKKyAgICAgICAgICAgaXQgd2FzIHBvaW50
aW5nIHRvIHRoZSBEZWJ1Z2dlclNjb3BlIHRob3VnaCB0aGUgcmVzdCBvZiB0aGUgZmllbGRzIGlu
IHRoZQorICAgICAgICAgICByZXR1cm5lZCBzbG90IHdpbGwgYmUgc2V0IHRvIGRhdGEgcGVydGFp
bmluZyB0aGUgd3JhcHBlZCBzY29wZSBvYmplY3QuCisKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1
Z2dlci5oOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcDoKKyAgICAg
ICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6OnNjb3BlKToKKyAgICAgICAgKEpTQzo6RGVidWdn
ZXJDYWxsRnJhbWU6OmV2YWx1YXRlKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6
OmludmFsaWRhdGUpOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmg6Cisg
ICAgICAgICogZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHA6CisgICAgICAgIChKU0M6OkRlYnVn
Z2VyU2NvcGU6OkRlYnVnZ2VyU2NvcGUpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OnZpc2l0Q2hpbGRy
ZW4pOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjpjbGFzc05hbWUpOgorICAgICAgICAo
SlNDOjpEZWJ1Z2dlclNjb3BlOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpE
ZWJ1Z2dlclNjb3BlOjpwdXQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjpkZWxldGVQ
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OmdldE93blByb3BlcnR5TmFt
ZXMpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjpkZWZpbmVPd25Qcm9wZXJ0eSk6Cisg
ICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6Om5leHQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dl
clNjb3BlOjppbnZhbGlkYXRlQ2hhaW4pOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjpp
c1dpdGhTY29wZSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OmlzR2xvYmFsU2NvcGUp
OgorICAgICAgICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjppc0Z1bmN0aW9uU2NvcGUpOgorICAgICAg
ICAqIGRlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJTY29w
ZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6SXRlcmF0b3I6Okl0ZXJh
dG9yKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6SXRlcmF0b3I6OmdldCk6CisgICAg
ICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6Okl0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAg
KEpTQzo6RGVidWdnZXJTY29wZTo6SXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlND
OjpEZWJ1Z2dlclNjb3BlOjpJdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkRl
YnVnZ2VyU2NvcGU6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjpqc1Nj
b3BlKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6YmVnaW4pOgorICAgICAgICAoSlND
OjpEZWJ1Z2dlclNjb3BlOjplbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9KU0phdmFTY3JpcHRD
YWxsRnJhbWUuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0phdmFTY3JpcHRDYWxsRnJhbWU6
OnNjb3BlVHlwZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSmF2YVNjcmlwdENhbGxGcmFtZTo6
c2NvcGVDaGFpbik6CisgICAgICAgICogaW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJhbWUuaDoK
KyAgICAgICAgKEluc3BlY3Rvcjo6SmF2YVNjcmlwdENhbGxGcmFtZTo6c2NvcGVDaGFpbik6Cisg
ICAgICAgICogaW5zcGVjdG9yL1NjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKiBydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnJl
c2V0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxP
YmplY3Q6OmRlYnVnZ2VyU2NvcGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmpl
Y3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmlzV2l0aFNjb3BlKToKKyAgICAgICAgKiBy
dW50aW1lL0pTU2NvcGUuaDoKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5U2xvdC5oOgorICAg
ICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OnNldFRoaXNWYWx1ZSk6CisgICAgICAgICogcnVudGlt
ZS9QdXRQcm9wZXJ0eVNsb3QuaDoKKyAgICAgICAgKEpTQzo6UHV0UHJvcGVydHlTbG90OjpzZXRU
aGlzVmFsdWUpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6
Vk0pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxNC0wOC0yNiAgQnJpYW4gSi4gQnVy
ZyAgPGJ1cmdAY3Mud2FzaGluZ3Rvbi5lZHU+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogcHV0
IGZlYXR1cmUgZmxhZ3MgZm9yIEluc3BlY3RvciBkb21haW5zIGluIHRoZSBwcm90b2NvbCBzcGVj
aWZpY2F0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIu
aAkocmV2aXNpb24gMTcyOTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKK2NsYXNzIENvZGVCbG9jazsKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEpTR2xvYmFs
T2JqZWN0OwogY2xhc3MgU291cmNlUHJvdmlkZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDE3
Mjk3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFt
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEyICszMCwxNCBAQAogI2luY2x1ZGUgIkRlYnVn
Z2VyQ2FsbEZyYW1lLmgiCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJEZWJ1
Z2dlclNjb3BlLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0FjdGl2
YXRpb24uaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgogI2luY2x1ZGUgIlBhcnNlci5oIgogI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgorI2luY2x1
ZGUgIlN0cm9uZ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTEzMiwyMCArMTM0
LDI1IEBAIFN0cmluZyBEZWJ1Z2dlckNhbGxGcmFtZTo6ZnVuY3Rpb25OYW1lKCkKICAgICByZXR1
cm4gZ2V0Q2FsY3VsYXRlZERpc3BsYXlOYW1lKG1fY2FsbEZyYW1lLCBmdW5jdGlvbik7CiB9CiAK
LUpTU2NvcGUqIERlYnVnZ2VyQ2FsbEZyYW1lOjpzY29wZSgpIGNvbnN0CitEZWJ1Z2dlclNjb3Bl
KiBEZWJ1Z2dlckNhbGxGcmFtZTo6c2NvcGUoKQogewogICAgIEFTU0VSVChpc1ZhbGlkKCkpOwog
ICAgIGlmICghaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gbV9jYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAgIGlmIChjb2RlQmxvY2sg
JiYgY29kZUJsb2NrLT5uZWVkc0FjdGl2YXRpb24oKSAmJiAhbV9jYWxsRnJhbWUtPmhhc0FjdGl2
YXRpb24oKSkgewotICAgICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBKU0FjdGl2YXRp
b246OmNyZWF0ZSgqY29kZUJsb2NrLT52bSgpLCBtX2NhbGxGcmFtZSwgY29kZUJsb2NrKTsKLSAg
ICAgICAgbV9jYWxsRnJhbWUtPnNldEFjdGl2YXRpb24oYWN0aXZhdGlvbik7Ci0gICAgICAgIG1f
Y2FsbEZyYW1lLT5zZXRTY29wZShhY3RpdmF0aW9uKTsKLSAgICB9CisgICAgaWYgKCFtX3Njb3Bl
KSB7CisgICAgICAgIFZNJiB2bSA9IG1fY2FsbEZyYW1lLT52bSgpOworICAgICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IG1fY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICAgICAgaWYgKGNv
ZGVCbG9jayAmJiBjb2RlQmxvY2stPm5lZWRzQWN0aXZhdGlvbigpICYmICFtX2NhbGxGcmFtZS0+
aGFzQWN0aXZhdGlvbigpKSB7CisgICAgICAgICAgICBBU1NFUlQoIW1fY2FsbEZyYW1lLT5zY29w
ZSgpLT5pc1dpdGhTY29wZSgpKTsKKyAgICAgICAgICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlv
biA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKHZtLCBtX2NhbGxGcmFtZSwgY29kZUJsb2NrKTsKKyAg
ICAgICAgICAgIG1fY2FsbEZyYW1lLT5zZXRBY3RpdmF0aW9uKGFjdGl2YXRpb24pOworICAgICAg
ICAgICAgbV9jYWxsRnJhbWUtPnNldFNjb3BlKGFjdGl2YXRpb24pOworICAgICAgICB9CiAKLSAg
ICByZXR1cm4gbV9jYWxsRnJhbWUtPnNjb3BlKCk7CisgICAgICAgIG1fc2NvcGUuc2V0KHZtLCBE
ZWJ1Z2dlclNjb3BlOjpjcmVhdGUodm0sIG1fY2FsbEZyYW1lLT5zY29wZSgpKSk7CisgICAgfQor
ICAgIHJldHVybiBtX3Njb3BlLmdldCgpOwogfQogCiBEZWJ1Z2dlckNhbGxGcmFtZTo6VHlwZSBE
ZWJ1Z2dlckNhbGxGcmFtZTo6dHlwZSgpIGNvbnN0CkBAIC0xODgsNyArMTk1LDcgQEAgSlNWYWx1
ZSBEZWJ1Z2dlckNhbGxGcmFtZTo6ZXZhbHVhdGUoY29ucwogICAgIH0KIAogICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gdGhpc1ZhbHVlRm9yQ2FsbEZyYW1lKGNhbGxGcmFtZSk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSB2bS5pbnRlcnByZXRlci0+ZXhlY3V0ZShldmFsLCBjYWxsRnJhbWUsIHRoaXNW
YWx1ZSwgc2NvcGUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB2bS5pbnRlcnByZXRlci0+ZXhl
Y3V0ZShldmFsLCBjYWxsRnJhbWUsIHRoaXNWYWx1ZSwgc2NvcGUoKS0+anNTY29wZSgpKTsKICAg
ICBpZiAodm0uZXhjZXB0aW9uKCkpIHsKICAgICAgICAgZXhjZXB0aW9uID0gdm0uZXhjZXB0aW9u
KCk7CiAgICAgICAgIHZtLmNsZWFyRXhjZXB0aW9uKCk7CkBAIC0yMDAsNiArMjA3LDEwIEBAIEpT
VmFsdWUgRGVidWdnZXJDYWxsRnJhbWU6OmV2YWx1YXRlKGNvbnMKIHZvaWQgRGVidWdnZXJDYWxs
RnJhbWU6OmludmFsaWRhdGUoKQogewogICAgIG1fY2FsbEZyYW1lID0gbnVsbHB0cjsKKyAgICBp
ZiAobV9zY29wZSkgeworICAgICAgICBtX3Njb3BlLT5pbnZhbGlkYXRlQ2hhaW4oKTsKKyAgICAg
ICAgbV9zY29wZS5jbGVhcigpOworICAgIH0KICAgICBSZWZQdHI8RGVidWdnZXJDYWxsRnJhbWU+
IGZyYW1lID0gbV9jYWxsZXIucmVsZWFzZSgpOwogICAgIHdoaWxlIChmcmFtZSkgewogICAgICAg
ICBmcmFtZS0+bV9jYWxsRnJhbWUgPSBudWxscHRyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDE3Mjk3
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxNCArMjksMTggQEAKICNpZm5kZWYgRGVidWdnZXJDYWxs
RnJhbWVfaAogI2RlZmluZSBEZWJ1Z2dlckNhbGxGcmFtZV9oCiAKLSNpbmNsdWRlICJDYWxsRnJh
bWUuaCIKICNpbmNsdWRlICJEZWJ1Z2dlclByaW1pdGl2ZXMuaCIKKyNpbmNsdWRlICJTdHJvbmcu
aCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
ewogCitjbGFzcyBEZWJ1Z2dlclNjb3BlOworY2xhc3MgRXhlY1N0YXRlOwordHlwZWRlZiBFeGVj
U3RhdGUgQ2FsbEZyYW1lOworCiBjbGFzcyBEZWJ1Z2dlckNhbGxGcmFtZSA6IHB1YmxpYyBSZWZD
b3VudGVkPERlYnVnZ2VyQ2FsbEZyYW1lPiB7CiBwdWJsaWM6CiAgICAgZW51bSBUeXBlIHsgUHJv
Z3JhbVR5cGUsIEZ1bmN0aW9uVHlwZSB9OwpAQCAtNTgsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgVGV4dFBvc2l0aW9uJiBwb3NpdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fcG9zaXRpb247IH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTR2xvYmFsT2Jq
ZWN0KiB2bUVudHJ5R2xvYmFsT2JqZWN0KCkgY29uc3Q7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
SlNTY29wZSogc2NvcGUoKSBjb25zdDsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBEZWJ1Z2dlclNj
b3BlKiBzY29wZSgpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBmdW5jdGlvbk5hbWUo
KSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBUeXBlIHR5cGUoKSBjb25zdDsKICAgICBK
U19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIHRoaXNWYWx1ZSgpIGNvbnN0OwpAQCAtNzgsNiArODIs
OSBAQCBwcml2YXRlOgogICAgIENhbGxGcmFtZSogbV9jYWxsRnJhbWU7CiAgICAgUmVmUHRyPERl
YnVnZ2VyQ2FsbEZyYW1lPiBtX2NhbGxlcjsKICAgICBUZXh0UG9zaXRpb24gbV9wb3NpdGlvbjsK
KyAgICAvLyBUaGUgRGVidWdnZXJDYWxsRnJhbWVTY29wZSBpcyByZXNwb25zaWJsZSBmb3IgY2Fs
bGluZyBpbnZhbGlkYXRlKCkgd2hpY2gsCisgICAgLy8gaW4gdHVybiwgd2lsbCBjbGVhciB0aGlz
IHN0cm9uZyByZWYuCisgICAgU3Ryb25nPERlYnVnZ2VyU2NvcGU+IG1fc2NvcGU7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlclNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVi
dWdnZXIvRGVidWdnZXJTY29wZS5jcHAJKHJldmlzaW9uIDE3Mjk3MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAKIG5hbWVzcGFjZSBKU0Mgewog
CkBAIC0zNSwxNyArMzYsMTYgQEAgU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJ
QkxFKAogCiBjb25zdCBDbGFzc0luZm8gRGVidWdnZXJTY29wZTo6c19pbmZvID0geyAiRGVidWdn
ZXJTY29wZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoRGVidWdnZXJT
Y29wZSkgfTsKIAotRGVidWdnZXJTY29wZTo6RGVidWdnZXJTY29wZShWTSYgdm0pCi0gICAgOiBK
U05vbkZpbmFsT2JqZWN0KHZtLCB2bS5kZWJ1Z2dlclNjb3BlU3RydWN0dXJlLmdldCgpKQorRGVi
dWdnZXJTY29wZTo6RGVidWdnZXJTY29wZShWTSYgdm0sIEpTU2NvcGUqIHNjb3BlKQorICAgIDog
SlNOb25GaW5hbE9iamVjdCh2bSwgc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlclNjb3Bl
U3RydWN0dXJlKCkpCiB7CisgICAgQVNTRVJUKHNjb3BlKTsKKyAgICBtX3Njb3BlLnNldCh2bSwg
dGhpcywgc2NvcGUpOwogfQogCi12b2lkIERlYnVnZ2VyU2NvcGU6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgSlNPYmplY3QqIGFjdGl2YXRpb24pCit2b2lkIERlYnVnZ2VyU2NvcGU6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgQVNT
RVJUKGFjdGl2YXRpb24pOwotICAgIEFTU0VSVChhY3RpdmF0aW9uLT5pc0FjdGl2YXRpb25PYmpl
Y3QoKSk7Ci0gICAgbV9hY3RpdmF0aW9uLnNldCh2bSwgdGhpcywganNDYXN0PEpTQWN0aXZhdGlv
bio+KGFjdGl2YXRpb24pKTsKIH0KIAogdm9pZCBEZWJ1Z2dlclNjb3BlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC01Myw0MyArNTMsMTEwIEBA
IHZvaWQgRGVidWdnZXJTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICBEZWJ1Z2dlclNj
b3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0PERlYnVnZ2VyU2NvcGUqPihjZWxsKTsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgSlNPYmplY3Q6
OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1fYWN0aXZhdGlvbik7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmpl
Y3QtPm1fc2NvcGUpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX25leHQpOwog
fQogCiBTdHJpbmcgRGVidWdnZXJTY29wZTo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmpl
Y3QpCiB7Ci0gICAgY29uc3QgRGVidWdnZXJTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxjb25z
dCBEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+bV9hY3Rp
dmF0aW9uLT5tZXRob2RUYWJsZSgpLT5jbGFzc05hbWUodGhpc09iamVjdC0+bV9hY3RpdmF0aW9u
LmdldCgpKTsKKyAgICBjb25zdCBEZWJ1Z2dlclNjb3BlKiBzY29wZSA9IGpzQ2FzdDxjb25zdCBE
ZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsKKyAgICBBU1NFUlQoc2NvcGUtPmlzVmFsaWQoKSk7Cisg
ICAgaWYgKCFzY29wZS0+aXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAg
SlNPYmplY3QqIHRoaXNPYmplY3QgPSBKU1Njb3BlOjpvYmplY3RBdFNjb3BlKHNjb3BlLT5qc1Nj
b3BlKCkpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5jbGFzc05hbWUo
dGhpc09iamVjdCk7CiB9CiAKIGJvb2wgRGVidWdnZXJTY29wZTo6Z2V0T3duUHJvcGVydHlTbG90
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewotICAgIERlYnVnZ2VyU2NvcGUqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8RGVidWdnZXJTY29wZSo+KG9iamVjdCk7Ci0gICAgcmV0dXJuIHRoaXNPYmpl
Y3QtPm1fYWN0aXZhdGlvbi0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNP
YmplY3QtPm1fYWN0aXZhdGlvbi5nZXQoKSwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAg
ICBEZWJ1Z2dlclNjb3BlKiBzY29wZSA9IGpzQ2FzdDxEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsK
KyAgICBBU1NFUlQoc2NvcGUtPmlzVmFsaWQoKSk7CisgICAgaWYgKCFzY29wZS0+aXNWYWxpZCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBKU1Nj
b3BlOjpvYmplY3RBdFNjb3BlKHNjb3BlLT5qc1Njb3BlKCkpOworICAgIHNsb3Quc2V0VGhpc1Zh
bHVlKEpTVmFsdWUodGhpc09iamVjdCkpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RU
YWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCBzbG90KTsKIH0KIAogdm9pZCBEZWJ1Z2dlclNjb3BlOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBEZWJ1Z2dlclNjb3BlKiB0aGlzT2JqZWN0ID0g
anNDYXN0PERlYnVnZ2VyU2NvcGUqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5tX2FjdGl2YXRp
b24tPm1ldGhvZFRhYmxlKCktPnB1dCh0aGlzT2JqZWN0LT5tX2FjdGl2YXRpb24uZ2V0KCksIGV4
ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgIERlYnVnZ2VyU2NvcGUqIHNjb3Bl
ID0ganNDYXN0PERlYnVnZ2VyU2NvcGUqPihjZWxsKTsKKyAgICBBU1NFUlQoc2NvcGUtPmlzVmFs
aWQoKSk7CisgICAgaWYgKCFzY29wZS0+aXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisgICAg
SlNPYmplY3QqIHRoaXNPYmplY3QgPSBKU1Njb3BlOjpvYmplY3RBdFNjb3BlKHNjb3BlLT5qc1Nj
b3BlKCkpOworICAgIHNsb3Quc2V0VGhpc1ZhbHVlKEpTVmFsdWUodGhpc09iamVjdCkpOworICAg
IHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAogYm9vbCBEZWJ1Z2dlclNjb3BlOjpkZWxldGVQcm9w
ZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSkKIHsKLSAgICBEZWJ1Z2dlclNjb3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0PERlYnVnZ2Vy
U2NvcGUqPihjZWxsKTsKLSAgICByZXR1cm4gdGhpc09iamVjdC0+bV9hY3RpdmF0aW9uLT5tZXRo
b2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LT5tX2FjdGl2YXRpb24uZ2V0KCks
IGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgRGVidWdnZXJTY29wZSogc2NvcGUgPSBqc0Nhc3Q8
RGVidWdnZXJTY29wZSo+KGNlbGwpOworICAgIEFTU0VSVChzY29wZS0+aXNWYWxpZCgpKTsKKyAg
ICBpZiAoIXNjb3BlLT5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBKU09i
amVjdCogdGhpc09iamVjdCA9IEpTU2NvcGU6Om9iamVjdEF0U2NvcGUoc2NvcGUtPmpzU2NvcGUo
KSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKIHZvaWQgRGVidWdnZXJTY29w
ZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
IHsKLSAgICBEZWJ1Z2dlclNjb3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0PERlYnVnZ2VyU2NvcGUq
PihvYmplY3QpOwotICAgIHRoaXNPYmplY3QtPm1fYWN0aXZhdGlvbi0+bWV0aG9kVGFibGUoKS0+
Z2V0UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LT5tX2FjdGl2YXRpb24uZ2V0KCksIGV4ZWMsIHBy
b3BlcnR5TmFtZXMsIG1vZGUpOworICAgIERlYnVnZ2VyU2NvcGUqIHNjb3BlID0ganNDYXN0PERl
YnVnZ2VyU2NvcGUqPihvYmplY3QpOworICAgIEFTU0VSVChzY29wZS0+aXNWYWxpZCgpKTsKKyAg
ICBpZiAoIXNjb3BlLT5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBKU09iamVjdCog
dGhpc09iamVjdCA9IEpTU2NvcGU6Om9iamVjdEF0U2NvcGUoc2NvcGUtPmpzU2NvcGUoKSk7Cisg
ICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogYm9vbCBEZWJ1Z2dlclNjb3BlOjpk
ZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRv
ciwgYm9vbCBzaG91bGRUaHJvdykKIHsKLSAgICBEZWJ1Z2dlclNjb3BlKiB0aGlzT2JqZWN0ID0g
anNDYXN0PERlYnVnZ2VyU2NvcGUqPihvYmplY3QpOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5t
X2FjdGl2YXRpb24tPm1ldGhvZFRhYmxlKCktPmRlZmluZU93blByb3BlcnR5KHRoaXNPYmplY3Qt
Pm1fYWN0aXZhdGlvbi5nZXQoKSwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91
bGRUaHJvdyk7CisgICAgRGVidWdnZXJTY29wZSogc2NvcGUgPSBqc0Nhc3Q8RGVidWdnZXJTY29w
ZSo+KG9iamVjdCk7CisgICAgQVNTRVJUKHNjb3BlLT5pc1ZhbGlkKCkpOworICAgIGlmICghc2Nv
cGUtPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEpTT2JqZWN0KiB0aGlz
T2JqZWN0ID0gSlNTY29wZTo6b2JqZWN0QXRTY29wZShzY29wZS0+anNTY29wZSgpKTsKKyAgICBy
ZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVmaW5lT3duUHJvcGVydHkodGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisK
K0RlYnVnZ2VyU2NvcGUqIERlYnVnZ2VyU2NvcGU6Om5leHQoKQoreworICAgIEFTU0VSVChpc1Zh
bGlkKCkpOworICAgIGlmICghbV9uZXh0ICYmIG1fc2NvcGUtPm5leHQoKSkgeworICAgICAgICBW
TSYgdm0gPSAqbV9zY29wZS0+dm0oKTsKKyAgICAgICAgRGVidWdnZXJTY29wZSogbmV4dFNjb3Bl
ID0gY3JlYXRlKHZtLCBtX3Njb3BlLT5uZXh0KCkpOworICAgICAgICBtX25leHQuc2V0KHZtLCB0
aGlzLCBuZXh0U2NvcGUpOworICAgIH0KKyAgICByZXR1cm4gbV9uZXh0LmdldCgpOworfQorCit2
b2lkIERlYnVnZ2VyU2NvcGU6OmludmFsaWRhdGVDaGFpbigpCit7CisgICAgRGVidWdnZXJTY29w
ZSogc2NvcGUgPSB0aGlzOworICAgIHdoaWxlIChzY29wZSkgeworICAgICAgICBBU1NFUlQoc2Nv
cGUtPmlzVmFsaWQoKSk7CisgICAgICAgIERlYnVnZ2VyU2NvcGUqIG5leHRTY29wZSA9IHNjb3Bl
LT5tX25leHQuZ2V0KCk7CisgICAgICAgIHNjb3BlLT5tX25leHQuY2xlYXIoKTsKKyAgICAgICAg
c2NvcGUtPm1fc2NvcGUuY2xlYXIoKTsKKyAgICAgICAgc2NvcGUgPSBuZXh0U2NvcGU7CisgICAg
fQorfQorCitib29sIERlYnVnZ2VyU2NvcGU6OmlzV2l0aFNjb3BlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9zY29wZS0+aXNXaXRoU2NvcGUoKTsKK30KKworYm9vbCBEZWJ1Z2dlclNjb3BlOjpp
c0dsb2JhbFNjb3BlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zY29wZS0+aXNHbG9iYWxPYmpl
Y3QoKTsKK30KKworYm9vbCBEZWJ1Z2dlclNjb3BlOjppc0Z1bmN0aW9uU2NvcGUoKSBjb25zdAor
eworICAgIC8vIEluIHRoZSBjdXJyZW50IGRlYnVnZ2VyIGltcGxlbWVudGF0aW9uLCBldmVyeSBm
dW5jdGlvbiB3aWxsIGNyZWF0ZSBhbgorICAgIC8vIGFjdGl2YXRpb24gb2JqZWN0LiBIZW5jZSwg
YW4gYWN0aXZhdGlvbiBvYmplY3QgaW1wbGllcyBhIGZ1bmN0aW9uIHNjb3BlLgorICAgIHJldHVy
biBtX3Njb3BlLT5pc0FjdGl2YXRpb25PYmplY3QoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3Bl
LmgJKHJldmlzaW9uIDE3Mjk3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlclNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE1ICszMCwxOCBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAorY2xhc3MgRGVidWdnZXJDYWxsRnJhbWU7CitjbGFzcyBKU1Njb3BlOwor
CiBjbGFzcyBEZWJ1Z2dlclNjb3BlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGlj
OgogICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIERlYnVn
Z2VyU2NvcGUqIGNyZWF0ZShWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCisgICAgc3RhdGljIERl
YnVnZ2VyU2NvcGUqIGNyZWF0ZShWTSYgdm0sIEpTU2NvcGUqIHNjb3BlKQogICAgIHsKLSAgICAg
ICAgRGVidWdnZXJTY29wZSogYWN0aXZhdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PERlYnVnZ2VyU2NvcGU+KHZtLmhlYXApKSBEZWJ1Z2dlclNjb3BlKHZtKTsKLSAgICAgICAgYWN0
aXZhdGlvbi0+ZmluaXNoQ3JlYXRpb24odm0sIG9iamVjdCk7Ci0gICAgICAgIHJldHVybiBhY3Rp
dmF0aW9uOworICAgICAgICBEZWJ1Z2dlclNjb3BlKiBkZWJ1Z2dlclNjb3BlID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8RGVidWdnZXJTY29wZT4odm0uaGVhcCkpIERlYnVnZ2VyU2NvcGUo
dm0sIHNjb3BlKTsKKyAgICAgICAgZGVidWdnZXJTY29wZS0+ZmluaXNoQ3JlYXRpb24odm0pOwor
ICAgICAgICByZXR1cm4gZGVidWdnZXJTY29wZTsKICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CkBAIC01NiwxNiArNTksNTkgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7IAogICAgIH0KIAotcHJvdGVjdGVkOgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTT2JqZWN0OjpTdHJ1
Y3R1cmVGbGFnczsKLQotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mLCBKU09iamVjdCogYWN0aXZhdGlvbik7CisgICAgY2xhc3MgSXRlcmF0b3IgeworICAgIHB1
YmxpYzoKKyAgICAgICAgSXRlcmF0b3IoRGVidWdnZXJTY29wZSogbm9kZSkKKyAgICAgICAgICAg
IDogbV9ub2RlKG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIERlYnVnZ2Vy
U2NvcGUqIGdldCgpIHsgcmV0dXJuIG1fbm9kZTsgfQorICAgICAgICBJdGVyYXRvciYgb3BlcmF0
b3IrKygpIHsgbV9ub2RlID0gbV9ub2RlLT5uZXh0KCk7IHJldHVybiAqdGhpczsgfQorICAgICAg
ICAvLyBwb3N0Zml4ICsrIGludGVudGlvbmFsbHkgb21pdHRlZAorCisgICAgICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZSA9PSBv
dGhlci5tX25vZGU7IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJiBv
dGhlcikgY29uc3QgeyByZXR1cm4gbV9ub2RlICE9IG90aGVyLm1fbm9kZTsgfQorCisgICAgcHJp
dmF0ZToKKyAgICAgICAgRGVidWdnZXJTY29wZSogbV9ub2RlOworICAgIH07CisKKyAgICBJdGVy
YXRvciBiZWdpbigpOworICAgIEl0ZXJhdG9yIGVuZCgpOworICAgIERlYnVnZ2VyU2NvcGUqIG5l
eHQoKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZUNoYWluKCk7CisgICAgYm9vbCBpc1ZhbGlkKCkg
Y29uc3QgeyByZXR1cm4gISFtX3Njb3BlOyB9CisKKyAgICBib29sIGlzV2l0aFNjb3BlKCkgY29u
c3Q7CisgICAgYm9vbCBpc0dsb2JhbFNjb3BlKCkgY29uc3Q7CisgICAgYm9vbCBpc0Z1bmN0aW9u
U2NvcGUoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBKU19FWFBPUlRfUFJJVkFURSBEZWJ1Z2dl
clNjb3BlKFZNJik7Ci0gICAgV3JpdGVCYXJyaWVyPEpTQWN0aXZhdGlvbj4gbV9hY3RpdmF0aW9u
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIERlYnVnZ2VyU2NvcGUoVk0mLCBKU1Njb3BlKik7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworCisgICAgSlNT
Y29wZSoganNTY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGUuZ2V0KCk7IH0KKworICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVjdDo6U3RydWN0dXJl
RmxhZ3M7CisKKyAgICBXcml0ZUJhcnJpZXI8SlNTY29wZT4gbV9zY29wZTsKKyAgICBXcml0ZUJh
cnJpZXI8RGVidWdnZXJTY29wZT4gbV9uZXh0OworCisgICAgZnJpZW5kIGNsYXNzIERlYnVnZ2Vy
Q2FsbEZyYW1lOwogfTsKIAoraW5saW5lIERlYnVnZ2VyU2NvcGU6Okl0ZXJhdG9yIERlYnVnZ2Vy
U2NvcGU6OmJlZ2luKCkKK3sKKyAgICByZXR1cm4gSXRlcmF0b3IodGhpcyk7IAorfQorCitpbmxp
bmUgRGVidWdnZXJTY29wZTo6SXRlcmF0b3IgRGVidWdnZXJTY29wZTo6ZW5kKCkKK3sgCisgICAg
cmV0dXJuIEl0ZXJhdG9yKDApOyAKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAv
LyBEZWJ1Z2dlclNjb3BlX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDE3Mjk3
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZy
YW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUikKIAorI2luY2x1ZGUgIkRlYnVnZ2VyU2NvcGUuaCIKICNpbmNsdWRlICJFcnJvci5o
IgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCkBA
IC05NSwyOSArOTYsMzAgQEAgSlNWYWx1ZSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OnNjb3BlVHlw
ZQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpbnQgaW5kZXggPSBleGVjLT5h
cmd1bWVudCgwKS5hc0ludDMyKCk7CiAKLSAgICBKU1Njb3BlKiBzY29wZUNoYWluID0gaW1wbCgp
LnNjb3BlQ2hhaW4oKTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gc2NvcGVDaGFpbi0+
ZW5kKCk7Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGlkZW50aWZ5aW5nIGFuZCByZXR1
cm5pbmcgQ0FUQ0hfU0NPUEUgYXBwcm9wcmlhdGVseS4KKyAgICBEZWJ1Z2dlclNjb3BlKiBzY29w
ZUNoYWluID0gaW1wbCgpLnNjb3BlQ2hhaW4oKTsKKyAgICBEZWJ1Z2dlclNjb3BlOjpJdGVyYXRv
ciBlbmQgPSBzY29wZUNoYWluLT5lbmQoKTsKIAogICAgIGJvb2wgZm91bmRMb2NhbFNjb3BlID0g
ZmFsc2U7Ci0gICAgZm9yIChTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IHNjb3BlQ2hhaW4tPmJl
Z2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgSlNPYmplY3QqIHNjb3BlID0g
aXRlci5nZXQoKTsKLSAgICAgICAgaWYgKHNjb3BlLT5pc0FjdGl2YXRpb25PYmplY3QoKSkgewot
ICAgICAgICAgICAgaWYgKCFmb3VuZExvY2FsU2NvcGUpIHsKLSAgICAgICAgICAgICAgICAvLyBG
aXJzdCBhY3RpdmF0aW9uIG9iamVjdCBpcyBsb2NhbCBzY29wZSwgZWFjaCBzdWNjZXNzaXZlIGFj
dGl2YXRpb24gb2JqZWN0IGlzIGNsb3N1cmUuCi0gICAgICAgICAgICAgICAgaWYgKCFpbmRleCkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKEpTSmF2YVNjcmlwdENhbGxGcmFt
ZTo6TE9DQUxfU0NPUEUpOwotICAgICAgICAgICAgICAgIGZvdW5kTG9jYWxTY29wZSA9IHRydWU7
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCFpbmRleCkKLSAgICAgICAgICAgICAgICByZXR1cm4g
anNOdW1iZXIoSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpDTE9TVVJFX1NDT1BFKTsKKyAgICBmb3Ig
KERlYnVnZ2VyU2NvcGU6Okl0ZXJhdG9yIGl0ZXIgPSBzY29wZUNoYWluLT5iZWdpbigpOyBpdGVy
ICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIERlYnVnZ2VyU2NvcGUqIHNjb3BlID0gaXRlci5n
ZXQoKTsKKworICAgICAgICBpZiAoIWZvdW5kTG9jYWxTY29wZSAmJiBzY29wZS0+aXNGdW5jdGlv
blNjb3BlKCkpIHsKKyAgICAgICAgICAgIC8vIEZpcnN0IGZ1bmN0aW9uIHNjb3BlIGlzIHRoZSBs
b2NhbCBzY29wZSwgZWFjaCBzdWNjZXNzaXZlIG9uZSBpcyBhIGNsb3N1cmUuCisgICAgICAgICAg
ICBpZiAoIWluZGV4KQorICAgICAgICAgICAgICAgIHJldHVybiBqc051bWJlcihKU0phdmFTY3Jp
cHRDYWxsRnJhbWU6OkxPQ0FMX1NDT1BFKTsKKyAgICAgICAgICAgIGZvdW5kTG9jYWxTY29wZSA9
IHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWluZGV4KSB7Ci0gICAgICAgICAgICAv
LyBMYXN0IGluIHRoZSBjaGFpbiBpcyBnbG9iYWwgc2NvcGUuCi0gICAgICAgICAgICBpZiAoKytp
dGVyID09IGVuZCkKKyAgICAgICAgICAgIGlmIChzY29wZS0+aXNXaXRoU2NvcGUoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpXSVRIX1ND
T1BFKTsKKyAgICAgICAgICAgIGlmIChzY29wZS0+aXNHbG9iYWxTY29wZSgpKSB7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKCsraXRlciA9PSBlbmQpOwogICAgICAgICAgICAgICAgIHJldHVybiBq
c051bWJlcihKU0phdmFTY3JpcHRDYWxsRnJhbWU6OkdMT0JBTF9TQ09QRSk7Ci0gICAgICAgICAg
ICByZXR1cm4ganNOdW1iZXIoSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpXSVRIX1NDT1BFKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgaWRlbnRpZnlp
bmcgYW5kIHJldHVybmluZyBDQVRDSF9TQ09QRSBhcHByb3ByaWF0ZWx5LgorICAgICAgICAgICAg
QVNTRVJUKHNjb3BlLT5pc0Z1bmN0aW9uU2NvcGUoKSk7CisgICAgICAgICAgICByZXR1cm4ganNO
dW1iZXIoSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpDTE9TVVJFX1NDT1BFKTsKICAgICAgICAgfQog
CiAgICAgICAgIC0taW5kZXg7CkBAIC0xNTcsOSArMTU5LDkgQEAgSlNWYWx1ZSBKU0phdmFTY3Jp
cHRDYWxsRnJhbWU6OnNjb3BlQ2hhaQogICAgIGlmICghaW1wbCgpLnNjb3BlQ2hhaW4oKSkKICAg
ICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCi0gICAgSlNTY29wZSogc2NvcGVDaGFpbiA9IGltcGwo
KS5zY29wZUNoYWluKCk7Ci0gICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGl0ZXIgPSBzY29wZUNoYWlu
LT5iZWdpbigpOwotICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBlbmQgPSBzY29wZUNoYWluLT5lbmQo
KTsKKyAgICBEZWJ1Z2dlclNjb3BlKiBzY29wZUNoYWluID0gaW1wbCgpLnNjb3BlQ2hhaW4oKTsK
KyAgICBEZWJ1Z2dlclNjb3BlOjpJdGVyYXRvciBpdGVyID0gc2NvcGVDaGFpbi0+YmVnaW4oKTsK
KyAgICBEZWJ1Z2dlclNjb3BlOjpJdGVyYXRvciBlbmQgPSBzY29wZUNoYWluLT5lbmQoKTsKIAog
ICAgIC8vIFdlIG11c3QgYWx3YXlzIGhhdmUgc29tZXRoaW5nIGluIHRoZSBzY29wZSBjaGFpbi4K
ICAgICBBU1NFUlQoaXRlciAhPSBlbmQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9KYXZhU2NyaXB0Q2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0Q2FsbEZyYW1lLmgJKHJldmlzaW9uIDE3Mjk3
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFt
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxMyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMTMtMjAxNCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogCiAg
ICAgU3RyaW5nIGZ1bmN0aW9uTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXJDYWxsRnJh
bWUtPmZ1bmN0aW9uTmFtZSgpOyB9CiAgICAgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZTo6VHlwZSB0
eXBlKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS0+dHlwZSgpOyB9Ci0gICAg
SlNDOjpKU1Njb3BlKiBzY29wZUNoYWluKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlckNhbGxG
cmFtZS0+c2NvcGUoKTsgfQorICAgIEpTQzo6RGVidWdnZXJTY29wZSogc2NvcGVDaGFpbigpIGNv
bnN0IHsgcmV0dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUtPnNjb3BlKCk7IH0KICAgICBKU0M6OkpT
R2xvYmFsT2JqZWN0KiB2bUVudHJ5R2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1
Z2dlckNhbGxGcmFtZS0+dm1FbnRyeUdsb2JhbE9iamVjdCgpOyB9CiAKICAgICBKU0M6OkpTVmFs
dWUgdGhpc1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS0+dGhpc1Zh
bHVlKCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0RGVi
dWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiAxNzI5NzEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVnU2VydmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNiArMzQsNyBAQAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKICNpbmNsdWRlICJE
ZWJ1Z2dlckNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkRlYnVnZ2VyU2NvcGUuaCIKICNpbmNsdWRl
ICJKU0phdmFTY3JpcHRDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRl
ICJKYXZhU2NyaXB0Q2FsbEZyYW1lLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAxNzI5NzEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJEYXRlQ29uc3RydWN0b3IuaCIKICNpbmNs
dWRlICJEYXRlUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKKyNpbmNsdWRlICJE
ZWJ1Z2dlclNjb3BlLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFcnJvckNvbnN0
cnVjdG9yLmgiCiAjaW5jbHVkZSAiRXJyb3JQcm90b3R5cGUuaCIKQEAgLTMyMCw2ICszMjEsNyBA
QCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiAgICAgbV9uYW1lU2Nv
cGVTdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBKU05hbWVTY29wZTo6Y3JlYXRlU3RydWN0dXJlKHZt
LCB0aGlzLCBqc051bGwoKSkpOwogICAgIG1fYWN0aXZhdGlvblN0cnVjdHVyZS5zZXQodm0sIHRo
aXMsIEpTQWN0aXZhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBqc051bGwoKSkpOwog
ICAgIG1fc3RyaWN0RXZhbEFjdGl2YXRpb25TdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBTdHJpY3RF
dmFsQWN0aXZhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBqc051bGwoKSkpOworICAg
IG1fZGVidWdnZXJTY29wZVN0cnVjdHVyZS5zZXQobV92bSwgdGhpcywgRGVidWdnZXJTY29wZTo6
Y3JlYXRlU3RydWN0dXJlKG1fdm0sIHRoaXMsIGpzTnVsbCgpKSk7CiAgICAgbV93aXRoU2NvcGVT
dHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBKU1dpdGhTY29wZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0
aGlzLCBqc051bGwoKSkpOwogCiAgICAgbV9udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJlLnNl
dCh2bSwgdGhpcywgSlNGaW5hbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBqc051
bGwoKSwgSlNGaW5hbE9iamVjdDo6ZGVmYXVsdElubGluZUNhcGFjaXR5KCkpKTsKQEAgLTY2Miw2
ICs2NjQsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAg
dmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcHJvbWlzZVByb3RvdHlwZSk7CiAjZW5kaWYK
IAorICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2RlYnVnZ2VyU2NvcGVTdHJ1Y3R1
cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3dpdGhTY29wZVN0cnVjdHVy
ZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc3RyaWN0RXZhbEFjdGl2YXRp
b25TdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2FjdGl2YXRp
b25TdHJ1Y3R1cmUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAxNzI5NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNiArMTg2
LDcgQEAgcHJvdGVjdGVkOgogICAgIFdyaXRlQmFycmllcjxKU1Byb21pc2VQcm90b3R5cGU+IG1f
cHJvbWlzZVByb3RvdHlwZTsKICNlbmRpZgogCisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4g
bV9kZWJ1Z2dlclNjb3BlU3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1f
d2l0aFNjb3BlU3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RyaWN0
RXZhbEFjdGl2YXRpb25TdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9h
Y3RpdmF0aW9uU3RydWN0dXJlOwpAQCAtMzkxLDYgKzM5Miw3IEBAIHB1YmxpYzoKICAgICBKU1By
b21pc2VQcm90b3R5cGUqIHByb21pc2VQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX3Byb21p
c2VQcm90b3R5cGUuZ2V0KCk7IH0KICNlbmRpZgogCisgICAgU3RydWN0dXJlKiBkZWJ1Z2dlclNj
b3BlU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlclNjb3BlU3RydWN0dXJlLmdl
dCgpOyB9CiAgICAgU3RydWN0dXJlKiB3aXRoU2NvcGVTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVy
biBtX3dpdGhTY29wZVN0cnVjdHVyZS5nZXQoKTsgfQogICAgIFN0cnVjdHVyZSogc3RyaWN0RXZh
bEFjdGl2YXRpb25TdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cmljdEV2YWxBY3RpdmF0
aW9uU3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiBhY3RpdmF0aW9uU3RydWN0dXJl
KCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmF0aW9uU3RydWN0dXJlLmdldCgpOyB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDE3Mjk3MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU5NCw2ICs1OTQsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc05hbWVTY29wZU9iamVj
dCgpIGNvbnN0OwogICAgIGJvb2wgaXNBY3RpdmF0aW9uT2JqZWN0KCkgY29uc3Q7CiAgICAgYm9v
bCBpc0Vycm9ySW5zdGFuY2UoKSBjb25zdDsKKyAgICBib29sIGlzV2l0aFNjb3BlKCkgY29uc3Q7
CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNlYWwoVk0mKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGZyZWV6ZShWTSYpOwpAQCAtMTE1MCw2ICsxMTUxLDExIEBAIGlubGluZSBi
b29sIEpTT2JqZWN0Ojppc0Vycm9ySW5zdGFuY2UoKSAKICAgICByZXR1cm4gdHlwZSgpID09IEVy
cm9ySW5zdGFuY2VUeXBlOwogfQogCitpbmxpbmUgYm9vbCBKU09iamVjdDo6aXNXaXRoU2NvcGUo
KSBjb25zdAoreworICAgIHJldHVybiB0eXBlKCkgPT0gV2l0aFNjb3BlVHlwZTsKK30KKwogaW5s
aW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseShWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKIHsKICAgICBBU1NFUlQoc3Ry
dWN0dXJlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgJKHJl
dmlzaW9uIDE3Mjk3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDcgKzE1MCw3IEBAIHB1YmxpYzoKICAgICBmcmllbmQg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZO
ZXh0KCk7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNPYmplY3QqIG9iamVjdEF0
U2NvcGUoSlNTY29wZSopOworICAgIHN0YXRpYyBKU09iamVjdCogb2JqZWN0QXRTY29wZShKU1Nj
b3BlKik7CiAKICAgICBzdGF0aWMgSlNWYWx1ZSByZXNvbHZlKEV4ZWNTdGF0ZSosIEpTU2NvcGUq
LCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAgc3RhdGljIFJlc29sdmVPcCBhYnN0cmFjdFJlc29s
dmUoRXhlY1N0YXRlKiwgYm9vbCBoYXNUb3BBY3RpdmF0aW9uLCBKU1Njb3BlKiwgY29uc3QgSWRl
bnRpZmllciYsIEdldE9yUHV0LCBSZXNvbHZlVHlwZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuaAkocmV2aXNpb24gMTcyOTcxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmgJKHdvcmtpbmcgY29weSkK
QEAgLTIwNCw2ICsyMDQsMTEgQEAgcHVibGljOgogICAgICAgICBtX29mZnNldCA9IG9mZnNldDsK
ICAgICB9CiAKKyAgICB2b2lkIHNldFRoaXNWYWx1ZShKU1ZhbHVlIHRoaXNWYWx1ZSkKKyAgICB7
CisgICAgICAgIG1fdGhpc1ZhbHVlID0gdGhpc1ZhbHVlOworICAgIH0KKwogICAgIHZvaWQgc2V0
VW5kZWZpbmVkKCkKICAgICB7CiAgICAgICAgIG1fZGF0YS52YWx1ZSA9IEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKQEAgLTIzNSw3ICsyNDAsNyBAQCBwcml2YXRlOgogCiAgICAgUHJv
cGVydHlUeXBlIG1fcHJvcGVydHlUeXBlOwogICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0Owot
ICAgIGNvbnN0IEpTVmFsdWUgbV90aGlzVmFsdWU7CisgICAgSlNWYWx1ZSBtX3RoaXNWYWx1ZTsK
ICAgICBKU09iamVjdCogbV9zbG90QmFzZTsKICAgICBXYXRjaHBvaW50U2V0KiBtX3dhdGNocG9p
bnRTZXQ7CiAgICAgQ2FjaGVhYmlsaXR5VHlwZSBtX2NhY2hlYWJpbGl0eTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCShyZXZpc2lv
biAxNzI5NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXRQcm9wZXJ0eVNs
b3QuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICBtX29mZnNldCA9IG9mZnNldDsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQg
c2V0VGhpc1ZhbHVlKEpTVmFsdWUgdGhpc1ZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBt
X3RoaXNWYWx1ZSA9IHRoaXNWYWx1ZTsKKyAgICAgICAgfQorCiAgICAgICAgIFB1dFZhbHVlRnVu
YyBjdXN0b21TZXR0ZXIoKSBjb25zdCB7IHJldHVybiBtX3B1dEZ1bmN0aW9uOyB9CiAKICAgICAg
ICAgQ29udGV4dCBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29udGV4dD4o
bV9jb250ZXh0KTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2
aXNpb24gMTcyOTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSAiQ3VzdG9tR2V0dGVyU2V0
dGVyLmgiCiAjaW5jbHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKICNpbmNsdWRlICJERkdXb3Jr
bGlzdC5oIgotI2luY2x1ZGUgIkRlYnVnZ2VyU2NvcGUuaCIKICNpbmNsdWRlICJFcnJvckluc3Rh
bmNlLmgiCiAjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db25zdHJ1
Y3Rvci5oIgpAQCAtMjA5LDcgKzIwOCw2IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlw
ZSBoZWFwVHlwZSkKICAgICBwcm9wZXJ0eU5hbWVzID0gbmV3IENvbW1vbklkZW50aWZpZXJzKHRo
aXMpOwogICAgIHN0cnVjdHVyZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFN0cnVjdHVyZTo6Y3JlYXRl
U3RydWN0dXJlKCp0aGlzKSk7CiAgICAgc3RydWN0dXJlUmFyZURhdGFTdHJ1Y3R1cmUuc2V0KCp0
aGlzLCBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwo
KSkpOwotICAgIGRlYnVnZ2VyU2NvcGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBEZWJ1Z2dlclNjb3Bl
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgdGVybWluYXRlZEV4
ZWN1dGlvbkVycm9yU3RydWN0dXJlLnNldCgqdGhpcywgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9y
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgc3RyaW5nU3RydWN0
dXJlLnNldCgqdGhpcywgSlNTdHJpbmc6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxs
KCkpKTsKICAgICBub3RBbk9iamVjdFN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTTm90QW5PYmplY3Q6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTcyOTcxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMjQyLDcgKzI0Miw2IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cnVjdHVyZVN0cnVjdHVy
ZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3RydWN0dXJlUmFyZURhdGFTdHJ1Y3R1cmU7
Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGRlYnVnZ2VyU2NvcGVTdHJ1Y3R1cmU7CiAgICAg
ICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZTsK
ICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3RyaW5nU3RydWN0dXJlOwogICAgICAgICBTdHJv
bmc8U3RydWN0dXJlPiBub3RBbk9iamVjdFN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlz
aW9uIDE3Mjk5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE4IEBACisyMDE0LTA4LTI2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBEZWJ1Z2dlckNhbGxGcmFtZTo6c2NvcGUoKSBzaG91bGQgcmV0dXJuIGEg
RGVidWdnZXJTY29wZS4KKyAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEzNDQyMD4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVz
dHMuCisKKyAgICAgICAgUm9sbGluZyBiYWNrIGluIHIxNzA2ODAgd2l0aCB0aGUgZml4IGZvciA8
aHR0cHM6Ly93ZWJraXQub3JnL2IvMTM1NjU2Pi4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL1Nj
cmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6
YXR0YWNoRGVidWdnZXIpOgorICAgICAgICAtIFdlIHNob3VsZCBhY3F1aXJlIHRoZSBKU0xvY2sg
YmVmb3JlIG1vZGlmeWluZyBhIEpTIGdsb2JhbCBvYmplY3QuCisKIDIwMTQtMDgtMjYgIEJlbmph
bWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CiAKICAgICAgICAgTWlub3Igc3R5bGUg
dHdlYWsgb24gU3R5bGVSZXNvbHZlVHJlZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE3Mjk3MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMDcsNiArMzA3LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjphdHRhY2hEZWJ1Z2dl
cihKUwogICAgICAgICByZXR1cm47CiAKICAgICBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqZWN0ID0g
c2hlbGwtPndpbmRvdygpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbE9iamVjdC0+dm0o
KSk7CiAgICAgaWYgKGRlYnVnZ2VyKQogICAgICAgICBkZWJ1Z2dlci0+YXR0YWNoKGdsb2JhbE9i
amVjdCk7CiAgICAgZWxzZSBpZiAoSlNDOjpEZWJ1Z2dlciogY3VycmVudERlYnVnZ2VyID0gZ2xv
YmFsT2JqZWN0LT5kZWJ1Z2dlcigpKQo=
</data>
<flag name="review"
          id="261912"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237196</attachid>
            <date>2014-08-26 20:34:31 -0700</date>
            <delta_ts>2014-08-28 16:09:10 -0700</delta_ts>
            <desc>Summary diff between patch 3 and 4</desc>
            <filename>diff-diff.patch</filename>
            <type>text/plain</type>
            <size>1552</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">MTkzYTE5NAo+ICsgICAgc2xvdC5zZXRUaGlzVmFsdWUoSlNWYWx1ZSh0aGlzT2JqZWN0KSk7CjIw
NWEyMDcKPiArICAgIHNsb3Quc2V0VGhpc1ZhbHVlKEpTVmFsdWUodGhpc09iamVjdCkpOwo1Njhh
NTcxLDYxMQo+IEluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNs
b3QuaAo+ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KPiAtLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlTbG90LmgJKHJldmlzaW9uIDE3Mjk3MSkKPiArKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJvcGVydHlTbG90LmgJKHdvcmtpbmcgY29weSkKPiBAQCAtMjA0LDYgKzIwNCwx
MSBAQCBwdWJsaWM6Cj4gICAgICAgICAgbV9vZmZzZXQgPSBvZmZzZXQ7Cj4gICAgICB9Cj4gIAo+
ICsgICAgdm9pZCBzZXRUaGlzVmFsdWUoSlNWYWx1ZSB0aGlzVmFsdWUpCj4gKyAgICB7Cj4gKyAg
ICAgICAgbV90aGlzVmFsdWUgPSB0aGlzVmFsdWU7Cj4gKyAgICB9Cj4gKwo+ICAgICAgdm9pZCBz
ZXRVbmRlZmluZWQoKQo+ICAgICAgewo+ICAgICAgICAgIG1fZGF0YS52YWx1ZSA9IEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKPiBAQCAtMjM1LDcgKzI0MCw3IEBAIHByaXZhdGU6Cj4g
IAo+ICAgICAgUHJvcGVydHlUeXBlIG1fcHJvcGVydHlUeXBlOwo+ICAgICAgUHJvcGVydHlPZmZz
ZXQgbV9vZmZzZXQ7Cj4gLSAgICBjb25zdCBKU1ZhbHVlIG1fdGhpc1ZhbHVlOwo+ICsgICAgSlNW
YWx1ZSBtX3RoaXNWYWx1ZTsKPiAgICAgIEpTT2JqZWN0KiBtX3Nsb3RCYXNlOwo+ICAgICAgV2F0
Y2hwb2ludFNldCogbV93YXRjaHBvaW50U2V0Owo+ICAgICAgQ2FjaGVhYmlsaXR5VHlwZSBtX2Nh
Y2hlYWJpbGl0eTsKPiBJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0UHJv
cGVydHlTbG90LmgKPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Cj4gLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1B1dFByb3BlcnR5U2xvdC5oCShyZXZpc2lvbiAxNzI5NzEpCj4gKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCSh3b3JraW5nIGNvcHkpCj4gQEAg
LTgwLDYgKzgwLDExIEBAIG5hbWVzcGFjZSBKU0Mgewo+ICAgICAgICAgICAgICBtX29mZnNldCA9
IG9mZnNldDsKPiAgICAgICAgICB9Cj4gIAo+ICsgICAgICAgIHZvaWQgc2V0VGhpc1ZhbHVlKEpT
VmFsdWUgdGhpc1ZhbHVlKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgbV90aGlzVmFsdWUg
PSB0aGlzVmFsdWU7Cj4gKyAgICAgICAgfQo+ICsKPiAgICAgICAgICBQdXRWYWx1ZUZ1bmMgY3Vz
dG9tU2V0dGVyKCkgY29uc3QgeyByZXR1cm4gbV9wdXRGdW5jdGlvbjsgfQo+ICAKPiAgICAgICAg
ICBDb250ZXh0IGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb250ZXh0Piht
X2NvbnRleHQpOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237328</attachid>
            <date>2014-08-28 16:09:10 -0700</date>
            <delta_ts>2014-08-28 16:23:24 -0700</delta_ts>
            <desc>patch 5: with getPropertySlot() fix for With and Global scopes.</desc>
            <filename>bug-134420.patch</filename>
            <type>text/plain</type>
            <size>37277</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczMDkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MSBA
QAorMjAxNC0wOC0yOCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
RGVidWdnZXJDYWxsRnJhbWU6OnNjb3BlKCkgc2hvdWxkIHJldHVybiBhIERlYnVnZ2VyU2NvcGUu
CisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8xMzQ0MjA+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUm9sbGluZyBiYWNrIGluIHIxNzA2ODAg
d2l0aCB0aGUgZml4IGZvciA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTM1NjU2Pi4KKworICAgICAg
ICBQcmV2aW91c2x5LCBEZWJ1Z2dlckNhbGxGcmFtZTo6c2NvcGUoKSByZXR1cm5zIGEgSlNBY3Rp
dmF0aW9uIChhbmQgcmVsZXZhbnQKKyAgICAgICAgcGVlcnMpIHdoaWNoIHRoZSBXZWJJbnNwZWN0
b3Igd2lsbCB1c2UgdG8gaW50cm9zcGVjdCBDYWxsRnJhbWUgdmFyaWFibGVzLgorICAgICAgICBJ
bnN0ZWFkLCB3ZSBzaG91bGQgYmUgcmV0dXJuaW5nIGEgRGVidWdnZXJTY29wZSBhcyBhbiBhYnN0
cmFjdGlvbiBsYXllciB0aGF0CisgICAgICAgIHByb3ZpZGVzIHRoZSBpbnRyb3NwZWN0aW9uIGZ1
bmN0aW9uYWxpdHkgdGhhdCB0aGUgV2ViSW5zcGVjdG9yIG5lZWRzLiAgVGhpcworICAgICAgICBp
cyB0aGUgZmlyc3Qgc3RlcCB0b3dhcmRzIG5vdCBmb3JjaW5nIGV2ZXJ5IGZyYW1lIHRvIGhhdmUg
YSBKU0FjdGl2YXRpb24KKyAgICAgICAgb2JqZWN0IGp1c3QgYmVjYXVzZSB0aGUgZGVidWdnZXIg
aXMgZW5hYmxlZC4KKworICAgICAgICAxLiBJbnN0YW50aWF0ZSB0aGUgZGVidWdnZXJTY29wZVN0
cnVjdHVyZSBhcyBhIG1lbWJlciBvZiB0aGUgSlNHbG9iYWxPYmplY3QKKyAgICAgICAgICAgaW5z
dGVhZCBvZiB0aGUgVk0uICBUaGlzIGFsbG93cyBKU09iamVjdDo6Z2xvYmFsT2JqZWN0KCkgdG8g
YmUgYWJsZSB0bworICAgICAgICAgICByZXR1cm4gdGhlIGdsb2JhbCBvYmplY3QgZm9yIHRoZSBE
ZWJ1Z2dlclNjb3BlLgorCisgICAgICAgIDIuIE9uIHRoZSBEZWJ1Z2dlclNjb3BlJ3MgbGlmZS1j
eWNsZSBtYW5hZ2VtZW50OgorCisgICAgICAgICAgIFRoZSBEZWJ1Z2dlckNhbGxGcmFtZSBpcyBk
ZXNpZ25lZCB0byBiZSAidmFsaWQiIG9ubHkgZHVyaW5nIGEgZGVidWdnaW5nIHNlc3Npb24KKyAg
ICAgICAgICAgKHdoaWxlIHRoZSBkZWJ1Z2dlciBpcyBicm9rZW4pIHRocm91Z2ggdGhlIHVzZSBv
ZiBhIERlYnVnZ2VyQ2FsbEZyYW1lU2NvcGUgaW4KKyAgICAgICAgICAgRGVidWdnZXI6OnBhdXNl
SWZOZWVkZWQoKS4gIE9uY2UgdGhlIGRlYnVnZ2VyIHJlc3VtZXMgZnJvbSB0aGUgYnJlYWssIHRo
ZQorICAgICAgICAgICBEZWJ1Z2dlckNhbGxGcmFtZVNjb3BlIGRlc3RydWN0cywgYW5kIHRoZSBE
ZWJ1Z2dlckNhbGxGcmFtZSB3aWxsIGJlIGludmFsaWRhdGVkLgorICAgICAgICAgICBXZSBjYW4n
dCBndWFyYW50ZWUgKGZyb20gdGhpcyBjb2RlIGFsb25lKSB0aGF0IHRoZSBJbnNwZWN0b3IgY29k
ZSBpc24ndCBzdGlsbAorICAgICAgICAgICBob2xkaW5nIGEgcmVmIHRvIHRoZSBEZWJ1Z2dlckNh
bGxGcmFtZSAodGhvdWdoIHRoZXkgc2hvdWxkbid0KSwgYnV0IGJ5IGNvbnRyYWN0LAorICAgICAg
ICAgICB0aGUgZnJhbWUgd2lsbCBiZSBpbnZhbGlkYXRlZCwgYW5kIGFueSBhdHRlbXB0IHRvIHF1
ZXJ5IGl0IHdpbGwgcmV0dXJuIG51bGwgdmFsdWVzLgorICAgICAgICAgICBUaGlzIGlzIHByZS1l
eGlzdGluZyBiZWhhdmlvci4KKworICAgICAgICAgICBOb3csIHdlJ3JlIGFkZGluZyB0aGUgRGVi
dWdnZXJTY29wZSBpbnRvIHRoZSBwaWN0dXJlLiAgV2hpbGUgYSBzaW5nbGUgZGVidWdnZXIKKyAg
ICAgICAgICAgcGF1c2Ugc2Vzc2lvbiBpcyBpbiBwcm9ncmVzcywgdGhlIEluc3BlY3RvciBtYXkg
cmVxdWVzdCB0aGUgc2NvcGUgZnJvbSB0aGUKKyAgICAgICAgICAgRGVidWdnZXJDYWxsRnJhbWUu
ICBXaGlsZSB0aGUgRGVidWdnZXJDYWxsRnJhbWUgaXMgc3RpbGwgdmFsaWQsIHdlIHdhbnQKKyAg
ICAgICAgICAgRGVidWdnZXJDYWxsRnJhbWU6OnNjb3BlKCkgdG8gYWx3YXlzIHJldHVybiB0aGUg
c2FtZSBEZWJ1Z2dlclNjb3BlIG9iamVjdC4KKyAgICAgICAgICAgVGhpcyBpcyB3aHkgd2UgaG9s
ZCBvbiB0byB0aGUgRGVidWdnZXJTY29wZSB3aXRoIGEgc3Ryb25nIHJlZi4KKworICAgICAgICAg
ICBJZiB3ZSB1c2UgYSB3ZWFrIHJlZiBpbnN0ZWFkLCB0aGUgZm9sbG93aW5nIGNvb2t5IGJlaGF2
aW9yIGNhbiBtYW5pZmVzdDoKKyAgICAgICAgICAgMS4gVGhlIEluc3BlY3RvciBjYWxscyBEZWJ1
Z2dlcjo6c2NvcGUoKSB0byBnZXQgdGhlIHRvcCBzY29wZS4KKyAgICAgICAgICAgMi4gVGhlIElu
c3BlY3RvciBpdGVyYXRlcyBkb3duIHRoZSBzY29wZSBjaGFpbiBhbmQgaXMgbm93IG9ubHkgaG9s
ZGluZyBhCisgICAgICAgICAgICAgIHJlZmVyZW5jZSB0byBhIHBhcmVudCBzY29wZS4gIEl0IGlz
IG5vIGxvbmdlciByZWZlcmVuY2luZyB0aGUgdG9wIHNjb3BlLgorICAgICAgICAgICAzLiBBIEdD
IG9jY3VycywgYW5kIHRoZSBEZWJ1Z2dlckNhbGxGcmFtZSdzIHdlYWsgbV9zY29wZSByZWYgdG8g
dGhlIHRvcCBzY29wZQorICAgICAgICAgICAgICBnZXRzIGNsZWFyZWQuCisgICAgICAgICAgIDQu
IFRoZSBJbnNwZWN0b3IgY2FsbHMgRGVidWdnZXJDYWxsRnJhbWU6OnNjb3BlKCkgdG8gZ2V0IHRo
ZSB0b3Agc2NvcGUgYWdhaW4gYnV0IGdldHMKKyAgICAgICAgICAgICAgYSBkaWZmZXJlbnQgRGVi
dWdnZXJTY29wZSBpbnN0YW5jZS4KKyAgICAgICAgICAgNS4gVGhlIEluc3BlY3RvciBpdGVyYXRl
cyBkb3duIHRoZSBzY29wZSBjaGFpbiBidXQgbmV2ZXIgc2VlcyB0aGUgcGFyZW50IHNjb3BlCisg
ICAgICAgICAgICAgIGluc3RhbmNlIHRoYXQgcmV0YWluZWQgYSByZWYgdG8gaW4gc3RlcCAyIGFi
b3ZlLiAgVGhpcyBpcyBiZWNhdXNlIHdoZW4gaXRlcmF0aW5nCisgICAgICAgICAgICAgIHRoaXMg
bmV3IERlYnVnZ2VyU2NvcGUgaW5zdGFuY2UgKHdoaWNoIGhhcyBubyBrbm93bGVkZ2Ugb2YgdGhl
IHByZXZpb3VzIHBhcmVudAorICAgICAgICAgICAgICBEZWJ1Z2dlclNjb3BlIGluc3RhbmNlKSwg
YSBuZXcgRGVidWdnZXJTY29wZSBpbnN0YW5jZSB3aWxsIGdldCBjcmVhdGVkIGZvciB0aGUKKyAg
ICAgICAgICAgICAgc2FtZSBwYXJlbnQgc2NvcGUuIAorCisgICAgICAgICAgIFNpbmNlIHRoZSBE
ZWJ1Z2dlclNjb3BlIGlzIGEgSlNPYmplY3QsIGl0cyBsaXZlbmVzcyBpcyBkZXRlcm1pbmVkIGJ5
IGl0cyByZWFjaGFiaWxpdHkuCisgICAgICAgICAgIEhvd2V2ZXIsIGl0cyAidmFsaWRpdHkiIGlz
IGRldGVybWluZWQgYnkgdGhlIGxpZmUtY3ljbGUgb2YgaXRzIG93bmVyIERlYnVnZ2VyQ2FsbEZy
YW1lLgorICAgICAgICAgICBXaGVuIHRoZSBvd25lciBEZWJ1Z2dlckNhbGxGcmFtZSBnZXRzIGlu
dmFsaWRhdGVkLCBpdHMgZGVidWdnZXIgc2NvcGUgY2hhaW4gKGlmCisgICAgICAgICAgIGluc3Rh
bnRpYXRlZCkgd2lsbCBhbHNvIGdldCBpbnZhbGlkYXRlZC4gIFRoaXMgaXMgd2h5IHdlIG5lZWQg
dGhlCisgICAgICAgICAgIERlYnVnZ2VyU2NvcGU6OmludmFsaWRhdGVDaGFpbigpIG1ldGhvZC4g
IFRoZSBJbnNwZWN0b3Igc2hvdWxkIG5vdCBiZSB1c2luZyB0aGUKKyAgICAgICAgICAgRGVidWdn
ZXJTY29wZSBpbnN0YW5jZSBhZnRlciBpdHMgb3duZXIgRGVidWdnZXJDYWxsRnJhbWUgaXMgaW52
YWxpZGF0ZWQuICBJZiBpdCBkb2VzLAorICAgICAgICAgICB0aG9zZSBtZXRob2RzIHdpbGwgZG8g
bm90aGluZyBvciByZXR1cm5lZCBhIGZhaWxlZCBzdGF0dXMuCisKKyAgICAgICAgRml4IGZvciA8
aHR0cHM6Ly93ZWJraXQub3JnL2IvMTM1NjU2PjoKKyAgICAgICAgMy4gRGVidWdnZXJTY29wZTo6
Z2V0T3duUHJvcGVydHlTbG90KCkgYW5kIERlYnVnZ2VyU2NvcGU6OnB1dCgpIG5lZWQgdG8gc2V0
CisgICAgICAgICAgIG1fdGhpc1ZhbHVlIGluIHRoZSByZXR1cm5lZCBzbG90IHRvIHRoZSB3cmFw
cGVkIHNjb3BlIG9iamVjdC4gIFByZXZpb3VzbHksCisgICAgICAgICAgIGl0IHdhcyBwb2ludGlu
ZyB0byB0aGUgRGVidWdnZXJTY29wZSB0aG91Z2ggdGhlIHJlc3Qgb2YgdGhlIGZpZWxkcyBpbiB0
aGUKKyAgICAgICAgICAgcmV0dXJuZWQgc2xvdCB3aWxsIGJlIHNldCB0byBkYXRhIHBlcnRhaW5p
bmcgdGhlIHdyYXBwZWQgc2NvcGUgb2JqZWN0LgorCisgICAgICAgIDQuIERlYnVnZ2VyU2NvcGU6
OmdldE93blByb3BlcnR5U2xvdCgpIHdpbGwgaW52b2tlIGdldFByb3BlcnR5U2xvdCgpIG9uIGl0
cworICAgICAgICAgICB3cmFwcGVkIHNjb3BlLiAgVGhpcyBpcyBiZWNhdXNlIEpTT2JqZWN0Ojpn
ZXRQcm9wZXJ0eVNsb3QoKSBjYW5ub3QgYmUKKyAgICAgICAgICAgb3ZlcnJpZGRlbiwgYW5kIHdo
ZW4gY2FsbGVkIG9uIGEgRGVidWdnZXJTY29wZSwgd2lsbCBub3Qga25vdyB0byBsb29rIGluCisg
ICAgICAgICAgIHRoZSBwdG90b3R5cGUgY2hhaW4gb2YgdGhlIERlYnVnZ2VyU2NvcGUncyB3cmFw
cGVkIHNjb3BlLiAgSGVuY2UsIHdlJ2xsCisgICAgICAgICAgIHRyZWF0IGFsbCBwcm9wZXJ0aWVz
IGluIHRoZSB3cmFwcGVkIHNjb3BlIGFzIG93biBwcm9wZXJ0aWVzIGluIHRoZQorICAgICAgICAg
ICBEZWJ1Z2dlclNjb3BlLiAgVGhpcyBpcyBmaW5lIGJlY2F1c2UgdGhlIFdlYkluc3BlY3RvciBk
b2VzIG5vdCBwcmVzZW50bHkKKyAgICAgICAgICAgY2FyZSBhYm91dCB3aGVyZSBpbiB0aGUgcHJv
dG90eXBlIGNoYWluIHRoZSBzY29wZSBwcm9wZXJ0eSBjb21lcyBmcm9tLgorCisgICAgICAgICAg
IE5vdGUgdGhhdCB0aGUgRGVidWdnZXJTY29wZSBhbmQgdGhlIEpTQWN0aXZhdGlvbiBvYmplY3Rz
IHRoYXQgaXQgd3JhcHMgZG8KKyAgICAgICAgICAgbm90IGhhdmUgcHJvdG90eXBlcy4gIFRoZXkg
YXJlIGFsd2F5cyBqc051bGwoKS4gIFRoaXMgd29ya3MgcGVyZmVjdGx5IHdpdGgKKyAgICAgICAg
ICAgdGhlIGFib3ZlIGNoYW5nZSB0byB1c2UgZ2V0UHJvcGVydHlTbG90KCkgaW5zdGVhZCBvZiBn
ZXRPd25Qcm9wZXJ0eVNsb3QoKS4KKyAgICAgICAgICAgVG8gbWFrZSB0aGlzIGFuIGV4cGxpY2l0
IGludmFyaWFudCwgSSBhbHNvIGNoYW5nZWQgRGVidWdnZXJTY29wZTo6Y3JlYXRlU3RydWN0dXJl
KCkKKyAgICAgICAgICAgYW5kIEpTQWN0aXZhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKCkgdG8gbm90
IHRha2UgYSBwcm90b3R5cGUgYXJndW1lbnQsIGFuZAorICAgICAgICAgICB0byBhbHdheXMgdXNl
IGpzTnVsbCgpIGZvciB0aGVpciBwcm90b3R5cGUgdmFsdWUuCisKKyAgICAgICAgKiBkZWJ1Z2dl
ci9EZWJ1Z2dlci5oOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcDoK
KyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6OnNjb3BlKToKKyAgICAgICAgKEpTQzo6
RGVidWdnZXJDYWxsRnJhbWU6OmV2YWx1YXRlKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxs
RnJhbWU6OmludmFsaWRhdGUpOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1l
Lmg6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHA6CisgICAgICAgIChKU0M6
OkRlYnVnZ2VyU2NvcGU6OkRlYnVnZ2VyU2NvcGUpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlclNj
b3BlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OnZpc2l0
Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjpjbGFzc05hbWUpOgorICAg
ICAgICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAo
SlNDOjpEZWJ1Z2dlclNjb3BlOjpwdXQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjpk
ZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OmdldE93blByb3Bl
cnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjpkZWZpbmVPd25Qcm9wZXJ0
eSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6Om5leHQpOgorICAgICAgICAoSlNDOjpE
ZWJ1Z2dlclNjb3BlOjppbnZhbGlkYXRlQ2hhaW4pOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlclNj
b3BlOjppc1dpdGhTY29wZSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OmlzR2xvYmFs
U2NvcGUpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjppc0Z1bmN0aW9uT3JFdmFsU2Nv
cGUpOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaDoKKyAgICAgICAgKEpTQzo6
RGVidWdnZXJTY29wZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6Y3Jl
YXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6aXRlcmF0b3I6Oml0
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6aXRlcmF0b3I6OmdldCk6Cisg
ICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAg
ICAgKEpTQzo6RGVidWdnZXJTY29wZTo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAo
SlNDOjpEZWJ1Z2dlclNjb3BlOjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6
OkRlYnVnZ2VyU2NvcGU6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjpq
c1Njb3BlKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6YmVnaW4pOgorICAgICAgICAo
SlNDOjpEZWJ1Z2dlclNjb3BlOjplbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9KU0phdmFTY3Jp
cHRDYWxsRnJhbWUuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0phdmFTY3JpcHRDYWxsRnJh
bWU6OnNjb3BlVHlwZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSmF2YVNjcmlwdENhbGxGcmFt
ZTo6c2NvcGVDaGFpbik6CisgICAgICAgICogaW5zcGVjdG9yL0phdmFTY3JpcHRDYWxsRnJhbWUu
aDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SmF2YVNjcmlwdENhbGxGcmFtZTo6c2NvcGVDaGFpbik6
CisgICAgICAgICogaW5zcGVjdG9yL1NjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKiBy
dW50aW1lL0pTQWN0aXZhdGlvbi5oOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmNyZWF0
ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpyZXNldCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0
Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpkZWJ1Z2dlclNjb3BlU3RydWN0dXJl
KToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pT
T2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojppc1dpdGhTY29wZSk6CisgICAgICAg
ICogcnVudGltZS9KU1Njb3BlLmg6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eVNsb3QuaDoK
KyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpzZXRUaGlzVmFsdWUpOgorICAgICAgICAqIHJ1
bnRpbWUvUHV0UHJvcGVydHlTbG90Lmg6CisgICAgICAgIChKU0M6OlB1dFByb3BlcnR5U2xvdDo6
c2V0VGhpc1ZhbHVlKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6
Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisKIDIwMTQtMDgtMjggIEFuZHJlYXMg
S2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBKU1N0cmluZzo6dG9JZGVu
dGlmaWVyKCkgaW4gbW9yZSBwbGFjZXMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVi
dWdnZXIvRGVidWdnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVi
dWdnZXIvRGVidWdnZXIuaAkocmV2aXNpb24gMTczMDkxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIENvZGVCbG9jazsKIGNsYXNzIEV4ZWNTdGF0ZTsK
IGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3MgU291cmNlUHJvdmlkZXI7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5j
cHAJKHJldmlzaW9uIDE3MzA5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEyICszMCwxNCBAQAog
I2luY2x1ZGUgIkRlYnVnZ2VyQ2FsbEZyYW1lLmgiCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIK
KyNpbmNsdWRlICJEZWJ1Z2dlclNjb3BlLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNp
bmNsdWRlICJKU0FjdGl2YXRpb24uaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlBhcnNlci5oIgogI2luY2x1ZGUgIlN0YWNrVmlz
aXRvci5oIgorI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAK
QEAgLTEzMiwyMCArMTM0LDI1IEBAIFN0cmluZyBEZWJ1Z2dlckNhbGxGcmFtZTo6ZnVuY3Rpb25O
YW1lKCkKICAgICByZXR1cm4gZ2V0Q2FsY3VsYXRlZERpc3BsYXlOYW1lKG1fY2FsbEZyYW1lLCBm
dW5jdGlvbik7CiB9CiAKLUpTU2NvcGUqIERlYnVnZ2VyQ2FsbEZyYW1lOjpzY29wZSgpIGNvbnN0
CitEZWJ1Z2dlclNjb3BlKiBEZWJ1Z2dlckNhbGxGcmFtZTo6c2NvcGUoKQogewogICAgIEFTU0VS
VChpc1ZhbGlkKCkpOwogICAgIGlmICghaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gMDsKIAot
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9jYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAg
IGlmIChjb2RlQmxvY2sgJiYgY29kZUJsb2NrLT5uZWVkc0FjdGl2YXRpb24oKSAmJiAhbV9jYWxs
RnJhbWUtPmhhc0FjdGl2YXRpb24oKSkgewotICAgICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRp
b24gPSBKU0FjdGl2YXRpb246OmNyZWF0ZSgqY29kZUJsb2NrLT52bSgpLCBtX2NhbGxGcmFtZSwg
Y29kZUJsb2NrKTsKLSAgICAgICAgbV9jYWxsRnJhbWUtPnNldEFjdGl2YXRpb24oYWN0aXZhdGlv
bik7Ci0gICAgICAgIG1fY2FsbEZyYW1lLT5zZXRTY29wZShhY3RpdmF0aW9uKTsKLSAgICB9Cisg
ICAgaWYgKCFtX3Njb3BlKSB7CisgICAgICAgIFZNJiB2bSA9IG1fY2FsbEZyYW1lLT52bSgpOwor
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsK
KyAgICAgICAgaWYgKGNvZGVCbG9jayAmJiBjb2RlQmxvY2stPm5lZWRzQWN0aXZhdGlvbigpICYm
ICFtX2NhbGxGcmFtZS0+aGFzQWN0aXZhdGlvbigpKSB7CisgICAgICAgICAgICBBU1NFUlQoIW1f
Y2FsbEZyYW1lLT5zY29wZSgpLT5pc1dpdGhTY29wZSgpKTsKKyAgICAgICAgICAgIEpTQWN0aXZh
dGlvbiogYWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKHZtLCBtX2NhbGxGcmFtZSwg
Y29kZUJsb2NrKTsKKyAgICAgICAgICAgIG1fY2FsbEZyYW1lLT5zZXRBY3RpdmF0aW9uKGFjdGl2
YXRpb24pOworICAgICAgICAgICAgbV9jYWxsRnJhbWUtPnNldFNjb3BlKGFjdGl2YXRpb24pOwor
ICAgICAgICB9CiAKLSAgICByZXR1cm4gbV9jYWxsRnJhbWUtPnNjb3BlKCk7CisgICAgICAgIG1f
c2NvcGUuc2V0KHZtLCBEZWJ1Z2dlclNjb3BlOjpjcmVhdGUodm0sIG1fY2FsbEZyYW1lLT5zY29w
ZSgpKSk7CisgICAgfQorICAgIHJldHVybiBtX3Njb3BlLmdldCgpOwogfQogCiBEZWJ1Z2dlckNh
bGxGcmFtZTo6VHlwZSBEZWJ1Z2dlckNhbGxGcmFtZTo6dHlwZSgpIGNvbnN0CkBAIC0xODgsNyAr
MTk1LDcgQEAgSlNWYWx1ZSBEZWJ1Z2dlckNhbGxGcmFtZTo6ZXZhbHVhdGUoY29ucwogICAgIH0K
IAogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gdGhpc1ZhbHVlRm9yQ2FsbEZyYW1lKGNhbGxGcmFt
ZSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB2bS5pbnRlcnByZXRlci0+ZXhlY3V0ZShldmFsLCBj
YWxsRnJhbWUsIHRoaXNWYWx1ZSwgc2NvcGUoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB2bS5p
bnRlcnByZXRlci0+ZXhlY3V0ZShldmFsLCBjYWxsRnJhbWUsIHRoaXNWYWx1ZSwgc2NvcGUoKS0+
anNTY29wZSgpKTsKICAgICBpZiAodm0uZXhjZXB0aW9uKCkpIHsKICAgICAgICAgZXhjZXB0aW9u
ID0gdm0uZXhjZXB0aW9uKCk7CiAgICAgICAgIHZtLmNsZWFyRXhjZXB0aW9uKCk7CkBAIC0yMDAs
NiArMjA3LDEwIEBAIEpTVmFsdWUgRGVidWdnZXJDYWxsRnJhbWU6OmV2YWx1YXRlKGNvbnMKIHZv
aWQgRGVidWdnZXJDYWxsRnJhbWU6OmludmFsaWRhdGUoKQogewogICAgIG1fY2FsbEZyYW1lID0g
bnVsbHB0cjsKKyAgICBpZiAobV9zY29wZSkgeworICAgICAgICBtX3Njb3BlLT5pbnZhbGlkYXRl
Q2hhaW4oKTsKKyAgICAgICAgbV9zY29wZS5jbGVhcigpOworICAgIH0KICAgICBSZWZQdHI8RGVi
dWdnZXJDYWxsRnJhbWU+IGZyYW1lID0gbV9jYWxsZXIucmVsZWFzZSgpOwogICAgIHdoaWxlIChm
cmFtZSkgewogICAgICAgICBmcmFtZS0+bV9jYWxsRnJhbWUgPSBudWxscHRyOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmgJ
KHJldmlzaW9uIDE3MzA5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1
Z2dlckNhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxNCArMjksMTggQEAKICNpZm5k
ZWYgRGVidWdnZXJDYWxsRnJhbWVfaAogI2RlZmluZSBEZWJ1Z2dlckNhbGxGcmFtZV9oCiAKLSNp
bmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJEZWJ1Z2dlclByaW1pdGl2ZXMuaCIKKyNp
bmNsdWRlICJTdHJvbmcuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBEZWJ1Z2dlclNjb3BlOworY2xhc3MgRXhlY1N0YXRl
OwordHlwZWRlZiBFeGVjU3RhdGUgQ2FsbEZyYW1lOworCiBjbGFzcyBEZWJ1Z2dlckNhbGxGcmFt
ZSA6IHB1YmxpYyBSZWZDb3VudGVkPERlYnVnZ2VyQ2FsbEZyYW1lPiB7CiBwdWJsaWM6CiAgICAg
ZW51bSBUeXBlIHsgUHJvZ3JhbVR5cGUsIEZ1bmN0aW9uVHlwZSB9OwpAQCAtNTgsNyArNjIsNyBA
QCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgVGV4dFBvc2l0aW9uJiBwb3Np
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIEpTR2xvYmFsT2JqZWN0KiB2bUVudHJ5R2xvYmFsT2JqZWN0KCkgY29uc3Q7Ci0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgSlNTY29wZSogc2NvcGUoKSBjb25zdDsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBEZWJ1Z2dlclNjb3BlKiBzY29wZSgpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmlu
ZyBmdW5jdGlvbk5hbWUoKSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBUeXBlIHR5cGUo
KSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIHRoaXNWYWx1ZSgpIGNvbnN0
OwpAQCAtNzgsNiArODIsOSBAQCBwcml2YXRlOgogICAgIENhbGxGcmFtZSogbV9jYWxsRnJhbWU7
CiAgICAgUmVmUHRyPERlYnVnZ2VyQ2FsbEZyYW1lPiBtX2NhbGxlcjsKICAgICBUZXh0UG9zaXRp
b24gbV9wb3NpdGlvbjsKKyAgICAvLyBUaGUgRGVidWdnZXJDYWxsRnJhbWVTY29wZSBpcyByZXNw
b25zaWJsZSBmb3IgY2FsbGluZyBpbnZhbGlkYXRlKCkgd2hpY2gsCisgICAgLy8gaW4gdHVybiwg
d2lsbCBjbGVhciB0aGlzIHN0cm9uZyByZWYuCisgICAgU3Ryb25nPERlYnVnZ2VyU2NvcGU+IG1f
c2NvcGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAJKHJldmlzaW9uIDE3MzA5MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgi
CiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAKIG5h
bWVzcGFjZSBKU0MgewogCkBAIC0zNSwxNyArMzYsMTYgQEAgU1RBVElDX0FTU0VSVF9JU19UUklW
SUFMTFlfREVTVFJVQ1RJQkxFKAogCiBjb25zdCBDbGFzc0luZm8gRGVidWdnZXJTY29wZTo6c19p
bmZvID0geyAiRGVidWdnZXJTY29wZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoRGVidWdnZXJTY29wZSkgfTsKIAotRGVidWdnZXJTY29wZTo6RGVidWdnZXJTY29wZShW
TSYgdm0pCi0gICAgOiBKU05vbkZpbmFsT2JqZWN0KHZtLCB2bS5kZWJ1Z2dlclNjb3BlU3RydWN0
dXJlLmdldCgpKQorRGVidWdnZXJTY29wZTo6RGVidWdnZXJTY29wZShWTSYgdm0sIEpTU2NvcGUq
IHNjb3BlKQorICAgIDogSlNOb25GaW5hbE9iamVjdCh2bSwgc2NvcGUtPmdsb2JhbE9iamVjdCgp
LT5kZWJ1Z2dlclNjb3BlU3RydWN0dXJlKCkpCiB7CisgICAgQVNTRVJUKHNjb3BlKTsKKyAgICBt
X3Njb3BlLnNldCh2bSwgdGhpcywgc2NvcGUpOwogfQogCi12b2lkIERlYnVnZ2VyU2NvcGU6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSwgSlNPYmplY3QqIGFjdGl2YXRpb24pCit2b2lkIERlYnVnZ2Vy
U2NvcGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSk7Ci0gICAgQVNTRVJUKGFjdGl2YXRpb24pOwotICAgIEFTU0VSVChhY3RpdmF0aW9uLT5p
c0FjdGl2YXRpb25PYmplY3QoKSk7Ci0gICAgbV9hY3RpdmF0aW9uLnNldCh2bSwgdGhpcywganND
YXN0PEpTQWN0aXZhdGlvbio+KGFjdGl2YXRpb24pKTsKIH0KIAogdm9pZCBEZWJ1Z2dlclNjb3Bl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC01
Myw0MyArNTMsMTIwIEBAIHZvaWQgRGVidWdnZXJTY29wZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwK
ICAgICBEZWJ1Z2dlclNjb3BlKiB0aGlzT2JqZWN0ID0ganNDYXN0PERlYnVnZ2VyU2NvcGUqPihj
ZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CiAgICAgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAg
dmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fYWN0aXZhdGlvbik7CisgICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1fc2NvcGUpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX25leHQpOwogfQogCiBTdHJpbmcgRGVidWdnZXJTY29wZTo6Y2xhc3NOYW1lKGNvbnN0
IEpTT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgY29uc3QgRGVidWdnZXJTY29wZSogdGhpc09iamVj
dCA9IGpzQ2FzdDxjb25zdCBEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsKLSAgICByZXR1cm4gdGhp
c09iamVjdC0+bV9hY3RpdmF0aW9uLT5tZXRob2RUYWJsZSgpLT5jbGFzc05hbWUodGhpc09iamVj
dC0+bV9hY3RpdmF0aW9uLmdldCgpKTsKKyAgICBjb25zdCBEZWJ1Z2dlclNjb3BlKiBzY29wZSA9
IGpzQ2FzdDxjb25zdCBEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsKKyAgICBBU1NFUlQoc2NvcGUt
PmlzVmFsaWQoKSk7CisgICAgaWYgKCFzY29wZS0+aXNWYWxpZCgpKQorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBKU1Njb3BlOjpvYmplY3RBdFNj
b3BlKHNjb3BlLT5qc1Njb3BlKCkpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJs
ZSgpLT5jbGFzc05hbWUodGhpc09iamVjdCk7CiB9CiAKIGJvb2wgRGVidWdnZXJTY29wZTo6Z2V0
T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewotICAgIERlYnVnZ2Vy
U2NvcGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RGVidWdnZXJTY29wZSo+KG9iamVjdCk7Ci0gICAg
cmV0dXJuIHRoaXNPYmplY3QtPm1fYWN0aXZhdGlvbi0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJv
cGVydHlTbG90KHRoaXNPYmplY3QtPm1fYWN0aXZhdGlvbi5nZXQoKSwgZXhlYywgcHJvcGVydHlO
YW1lLCBzbG90KTsKKyAgICBEZWJ1Z2dlclNjb3BlKiBzY29wZSA9IGpzQ2FzdDxEZWJ1Z2dlclNj
b3BlKj4ob2JqZWN0KTsKKyAgICBBU1NFUlQoc2NvcGUtPmlzVmFsaWQoKSk7CisgICAgaWYgKCFz
Y29wZS0+aXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSlNPYmplY3QqIHRo
aXNPYmplY3QgPSBKU1Njb3BlOjpvYmplY3RBdFNjb3BlKHNjb3BlLT5qc1Njb3BlKCkpOworICAg
IHNsb3Quc2V0VGhpc1ZhbHVlKEpTVmFsdWUodGhpc09iamVjdCkpOworCisgICAgLy8gQnkgZGVm
YXVsdCwgSlNPYmplY3Q6OmdldFByb3BlcnR5U2xvdCgpIHdpbGwgbG9vayBpbiB0aGUgRGVidWdn
ZXJTY29wZSdzIHByb3RvdHlwZQorICAgIC8vIGNoYWluIGFuZCBub3QgdGhlIHdyYXBwZWQgc2Nv
cGUsIGFuZCBKU09iamVjdDo6Z2V0UHJvcGVydHlTbG90KCkgY2Fubm90IGJlIG92ZXJyaWRkZW4K
KyAgICAvLyB0byBiZWhhdmUgZGlmZmVyZW50bHkgZm9yIHRoZSBEZWJ1Z2dlclNjb3BlLgorICAg
IC8vCisgICAgLy8gSW5zdGVhZCwgd2UnbGwgdHJlYXQgYWxsIHByb3BlcnRpZXMgaW4gdGhlIHdy
YXBwZWQgc2NvcGUgYW5kIGl0cyBwcm90b3R5cGUgY2hhaW4gYXMKKyAgICAvLyB0aGUgb3duIHBy
b3BlcnRpZXMgb2YgdGhlIERlYnVnZ2VyU2NvcGUuIFRoaXMgaXMgZmluZSBiZWNhdXNlIHRoZSBX
ZWJJbnNwZWN0b3IKKyAgICAvLyBkb2VzIG5vdCBwcmVzZW50bHkgbmVlZCB0byBkaXN0aW5ndWlz
aCBiZXR3ZWVuIHdoYXQncyBvd25lZCBhdCBlYWNoIGxldmVsIGluIHRoZQorICAgIC8vIHByb3Rv
dHlwZSBjaGFpbi4gSGVuY2UsIHdlJ2xsIGludm9rZSBnZXRQcm9wZXJ0eVNsb3QoKSBvbiB0aGUg
d3JhcHBlZCBzY29wZSBoZXJlCisgICAgLy8gaW5zdGVhZCBvZiBnZXRPd25Qcm9wZXJ0eVNsb3Qo
KS4KKyAgICByZXR1cm4gdGhpc09iamVjdC0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5
TmFtZSwgc2xvdCk7CiB9CiAKIHZvaWQgRGVidWdnZXJTY29wZTo6cHV0KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgRGVidWdnZXJTY29wZSogdGhpc09iamVj
dCA9IGpzQ2FzdDxEZWJ1Z2dlclNjb3BlKj4oY2VsbCk7Ci0gICAgdGhpc09iamVjdC0+bV9hY3Rp
dmF0aW9uLT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iamVjdC0+bV9hY3RpdmF0aW9uLmdldCgp
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICBEZWJ1Z2dlclNjb3BlKiBz
Y29wZSA9IGpzQ2FzdDxEZWJ1Z2dlclNjb3BlKj4oY2VsbCk7CisgICAgQVNTRVJUKHNjb3BlLT5p
c1ZhbGlkKCkpOworICAgIGlmICghc2NvcGUtPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gSlNTY29wZTo6b2JqZWN0QXRTY29wZShzY29wZS0+
anNTY29wZSgpKTsKKyAgICBzbG90LnNldFRoaXNWYWx1ZShKU1ZhbHVlKHRoaXNPYmplY3QpKTsK
KyAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKIGJvb2wgRGVidWdnZXJTY29wZTo6ZGVsZXRl
UHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpCiB7Ci0gICAgRGVidWdnZXJTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxEZWJ1
Z2dlclNjb3BlKj4oY2VsbCk7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPm1fYWN0aXZhdGlvbi0+
bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdC0+bV9hY3RpdmF0aW9uLmdl
dCgpLCBleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIERlYnVnZ2VyU2NvcGUqIHNjb3BlID0ganND
YXN0PERlYnVnZ2VyU2NvcGUqPihjZWxsKTsKKyAgICBBU1NFUlQoc2NvcGUtPmlzVmFsaWQoKSk7
CisgICAgaWYgKCFzY29wZS0+aXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
SlNPYmplY3QqIHRoaXNPYmplY3QgPSBKU1Njb3BlOjpvYmplY3RBdFNjb3BlKHNjb3BlLT5qc1Nj
b3BlKCkpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9w
ZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCiB2b2lkIERlYnVnZ2Vy
U2NvcGU6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1v
ZGUpCiB7Ci0gICAgRGVidWdnZXJTY29wZSogdGhpc09iamVjdCA9IGpzQ2FzdDxEZWJ1Z2dlclNj
b3BlKj4ob2JqZWN0KTsKLSAgICB0aGlzT2JqZWN0LT5tX2FjdGl2YXRpb24tPm1ldGhvZFRhYmxl
KCktPmdldFByb3BlcnR5TmFtZXModGhpc09iamVjdC0+bV9hY3RpdmF0aW9uLmdldCgpLCBleGVj
LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBEZWJ1Z2dlclNjb3BlKiBzY29wZSA9IGpzQ2Fz
dDxEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsKKyAgICBBU1NFUlQoc2NvcGUtPmlzVmFsaWQoKSk7
CisgICAgaWYgKCFzY29wZS0+aXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisgICAgSlNPYmpl
Y3QqIHRoaXNPYmplY3QgPSBKU1Njb3BlOjpvYmplY3RBdFNjb3BlKHNjb3BlLT5qc1Njb3BlKCkp
OworICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldFByb3BlcnR5TmFtZXModGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIGJvb2wgRGVidWdnZXJTY29w
ZTo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCiB7Ci0gICAgRGVidWdnZXJTY29wZSogdGhpc09iamVj
dCA9IGpzQ2FzdDxEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsKLSAgICByZXR1cm4gdGhpc09iamVj
dC0+bV9hY3RpdmF0aW9uLT5tZXRob2RUYWJsZSgpLT5kZWZpbmVPd25Qcm9wZXJ0eSh0aGlzT2Jq
ZWN0LT5tX2FjdGl2YXRpb24uZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwg
c2hvdWxkVGhyb3cpOworICAgIERlYnVnZ2VyU2NvcGUqIHNjb3BlID0ganNDYXN0PERlYnVnZ2Vy
U2NvcGUqPihvYmplY3QpOworICAgIEFTU0VSVChzY29wZS0+aXNWYWxpZCgpKTsKKyAgICBpZiAo
IXNjb3BlLT5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBKU09iamVjdCog
dGhpc09iamVjdCA9IEpTU2NvcGU6Om9iamVjdEF0U2NvcGUoc2NvcGUtPmpzU2NvcGUoKSk7Cisg
ICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlZmluZU93blByb3BlcnR5KHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOwor
fQorCitEZWJ1Z2dlclNjb3BlKiBEZWJ1Z2dlclNjb3BlOjpuZXh0KCkKK3sKKyAgICBBU1NFUlQo
aXNWYWxpZCgpKTsKKyAgICBpZiAoIW1fbmV4dCAmJiBtX3Njb3BlLT5uZXh0KCkpIHsKKyAgICAg
ICAgVk0mIHZtID0gKm1fc2NvcGUtPnZtKCk7CisgICAgICAgIERlYnVnZ2VyU2NvcGUqIG5leHRT
Y29wZSA9IGNyZWF0ZSh2bSwgbV9zY29wZS0+bmV4dCgpKTsKKyAgICAgICAgbV9uZXh0LnNldCh2
bSwgdGhpcywgbmV4dFNjb3BlKTsKKyAgICB9CisgICAgcmV0dXJuIG1fbmV4dC5nZXQoKTsKK30K
Kwordm9pZCBEZWJ1Z2dlclNjb3BlOjppbnZhbGlkYXRlQ2hhaW4oKQoreworICAgIERlYnVnZ2Vy
U2NvcGUqIHNjb3BlID0gdGhpczsKKyAgICB3aGlsZSAoc2NvcGUpIHsKKyAgICAgICAgQVNTRVJU
KHNjb3BlLT5pc1ZhbGlkKCkpOworICAgICAgICBEZWJ1Z2dlclNjb3BlKiBuZXh0U2NvcGUgPSBz
Y29wZS0+bV9uZXh0LmdldCgpOworICAgICAgICBzY29wZS0+bV9uZXh0LmNsZWFyKCk7CisgICAg
ICAgIHNjb3BlLT5tX3Njb3BlLmNsZWFyKCk7CisgICAgICAgIHNjb3BlID0gbmV4dFNjb3BlOwor
ICAgIH0KK30KKworYm9vbCBEZWJ1Z2dlclNjb3BlOjppc1dpdGhTY29wZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fc2NvcGUtPmlzV2l0aFNjb3BlKCk7Cit9CisKK2Jvb2wgRGVidWdnZXJTY29w
ZTo6aXNHbG9iYWxTY29wZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2NvcGUtPmlzR2xvYmFs
T2JqZWN0KCk7Cit9CisKK2Jvb2wgRGVidWdnZXJTY29wZTo6aXNGdW5jdGlvbk9yRXZhbFNjb3Bl
KCkgY29uc3QKK3sKKyAgICAvLyBJbiB0aGUgY3VycmVudCBkZWJ1Z2dlciBpbXBsZW1lbnRhdGlv
biwgZXZlcnkgZnVuY3Rpb24gb3IgZXZhbCB3aWxsIGNyZWF0ZSBhbgorICAgIC8vIGFjdGl2YXRp
b24gb2JqZWN0LiBIZW5jZSwgYW4gYWN0aXZhdGlvbiBvYmplY3QgaW1wbGllcyBhIGZ1bmN0aW9u
IG9yIGV2YWwgc2NvcGUuCisgICAgcmV0dXJuIG1fc2NvcGUtPmlzQWN0aXZhdGlvbk9iamVjdCgp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkocmV2aXNpb24gMTczMDkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzAsMTUgKzMwLDE4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBEZWJ1Z2dlckNh
bGxGcmFtZTsKK2NsYXNzIEpTU2NvcGU7CisKIGNsYXNzIERlYnVnZ2VyU2NvcGUgOiBwdWJsaWMg
SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0
IEJhc2U7CiAKLSAgICBzdGF0aWMgRGVidWdnZXJTY29wZSogY3JlYXRlKFZNJiB2bSwgSlNPYmpl
Y3QqIG9iamVjdCkKKyAgICBzdGF0aWMgRGVidWdnZXJTY29wZSogY3JlYXRlKFZNJiB2bSwgSlNT
Y29wZSogc2NvcGUpCiAgICAgewotICAgICAgICBEZWJ1Z2dlclNjb3BlKiBhY3RpdmF0aW9uID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RGVidWdnZXJTY29wZT4odm0uaGVhcCkpIERlYnVn
Z2VyU2NvcGUodm0pOwotICAgICAgICBhY3RpdmF0aW9uLT5maW5pc2hDcmVhdGlvbih2bSwgb2Jq
ZWN0KTsKLSAgICAgICAgcmV0dXJuIGFjdGl2YXRpb247CisgICAgICAgIERlYnVnZ2VyU2NvcGUq
IGRlYnVnZ2VyU2NvcGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxEZWJ1Z2dlclNjb3Bl
Pih2bS5oZWFwKSkgRGVidWdnZXJTY29wZSh2bSwgc2NvcGUpOworICAgICAgICBkZWJ1Z2dlclNj
b3BlLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBkZWJ1Z2dlclNjb3BlOwog
ICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKQEAgLTUxLDIxICs1NCw2NCBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9J
TkZPOwogCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpIAorICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpIAogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOyAKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIGpzTnVsbCgpLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7IAogICAgIH0KIAotcHJvdGVjdGVkOgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTT2JqZWN0
OjpTdHJ1Y3R1cmVGbGFnczsKLQotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mLCBKU09iamVjdCogYWN0aXZhdGlvbik7CisgICAgY2xhc3MgaXRlcmF0b3Igewor
ICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoRGVidWdnZXJTY29wZSogbm9kZSkKKyAgICAg
ICAgICAgIDogbV9ub2RlKG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIERl
YnVnZ2VyU2NvcGUqIGdldCgpIHsgcmV0dXJuIG1fbm9kZTsgfQorICAgICAgICBpdGVyYXRvciYg
b3BlcmF0b3IrKygpIHsgbV9ub2RlID0gbV9ub2RlLT5uZXh0KCk7IHJldHVybiAqdGhpczsgfQor
ICAgICAgICAvLyBwb3N0Zml4ICsrIGludGVudGlvbmFsbHkgb21pdHRlZAorCisgICAgICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fbm9k
ZSA9PSBvdGhlci5tX25vZGU7IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJh
dG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9ub2RlICE9IG90aGVyLm1fbm9kZTsgfQorCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgRGVidWdnZXJTY29wZSogbV9ub2RlOworICAgIH07CisKKyAg
ICBpdGVyYXRvciBiZWdpbigpOworICAgIGl0ZXJhdG9yIGVuZCgpOworICAgIERlYnVnZ2VyU2Nv
cGUqIG5leHQoKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZUNoYWluKCk7CisgICAgYm9vbCBpc1Zh
bGlkKCkgY29uc3QgeyByZXR1cm4gISFtX3Njb3BlOyB9CisKKyAgICBib29sIGlzV2l0aFNjb3Bl
KCkgY29uc3Q7CisgICAgYm9vbCBpc0dsb2JhbFNjb3BlKCkgY29uc3Q7CisgICAgYm9vbCBpc0Z1
bmN0aW9uT3JFdmFsU2NvcGUoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBEZWJ1Z2dlclNjb3BlKFZNJik7Ci0gICAgV3JpdGVCYXJyaWVyPEpTQWN0aXZhdGlvbj4g
bV9hY3RpdmF0aW9uOworICAgIEpTX0VYUE9SVF9QUklWQVRFIERlYnVnZ2VyU2NvcGUoVk0mLCBK
U1Njb3BlKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYp
OworCisgICAgSlNTY29wZSoganNTY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGUuZ2V0KCk7
IH0KKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU09iamVj
dDo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICBXcml0ZUJhcnJpZXI8SlNTY29wZT4gbV9zY29wZTsK
KyAgICBXcml0ZUJhcnJpZXI8RGVidWdnZXJTY29wZT4gbV9uZXh0OworCisgICAgZnJpZW5kIGNs
YXNzIERlYnVnZ2VyQ2FsbEZyYW1lOwogfTsKIAoraW5saW5lIERlYnVnZ2VyU2NvcGU6Oml0ZXJh
dG9yIERlYnVnZ2VyU2NvcGU6OmJlZ2luKCkKK3sKKyAgICByZXR1cm4gaXRlcmF0b3IodGhpcyk7
IAorfQorCitpbmxpbmUgRGVidWdnZXJTY29wZTo6aXRlcmF0b3IgRGVidWdnZXJTY29wZTo6ZW5k
KCkKK3sgCisgICAgcmV0dXJuIGl0ZXJhdG9yKDApOyAKK30KKwogfSAvLyBuYW1lc3BhY2UgSlND
CiAKICNlbmRpZiAvLyBEZWJ1Z2dlclNjb3BlX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHJl
dmlzaW9uIDE3MzA5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZh
U2NyaXB0Q2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAj
aWYgRU5BQkxFKElOU1BFQ1RPUikKIAorI2luY2x1ZGUgIkRlYnVnZ2VyU2NvcGUuaCIKICNpbmNs
dWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJKU0NlbGxJ
bmxpbmVzLmgiCkBAIC05NSwyOSArOTYsMzAgQEAgSlNWYWx1ZSBKU0phdmFTY3JpcHRDYWxsRnJh
bWU6OnNjb3BlVHlwZQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpbnQgaW5k
ZXggPSBleGVjLT5hcmd1bWVudCgwKS5hc0ludDMyKCk7CiAKLSAgICBKU1Njb3BlKiBzY29wZUNo
YWluID0gaW1wbCgpLnNjb3BlQ2hhaW4oKTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0g
c2NvcGVDaGFpbi0+ZW5kKCk7Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGlkZW50aWZ5
aW5nIGFuZCByZXR1cm5pbmcgQ0FUQ0hfU0NPUEUgYXBwcm9wcmlhdGVseS4KKyAgICBEZWJ1Z2dl
clNjb3BlKiBzY29wZUNoYWluID0gaW1wbCgpLnNjb3BlQ2hhaW4oKTsKKyAgICBEZWJ1Z2dlclNj
b3BlOjppdGVyYXRvciBlbmQgPSBzY29wZUNoYWluLT5lbmQoKTsKIAogICAgIGJvb2wgZm91bmRM
b2NhbFNjb3BlID0gZmFsc2U7Ci0gICAgZm9yIChTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IHNj
b3BlQ2hhaW4tPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgSlNPYmpl
Y3QqIHNjb3BlID0gaXRlci5nZXQoKTsKLSAgICAgICAgaWYgKHNjb3BlLT5pc0FjdGl2YXRpb25P
YmplY3QoKSkgewotICAgICAgICAgICAgaWYgKCFmb3VuZExvY2FsU2NvcGUpIHsKLSAgICAgICAg
ICAgICAgICAvLyBGaXJzdCBhY3RpdmF0aW9uIG9iamVjdCBpcyBsb2NhbCBzY29wZSwgZWFjaCBz
dWNjZXNzaXZlIGFjdGl2YXRpb24gb2JqZWN0IGlzIGNsb3N1cmUuCi0gICAgICAgICAgICAgICAg
aWYgKCFpbmRleCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKEpTSmF2YVNj
cmlwdENhbGxGcmFtZTo6TE9DQUxfU0NPUEUpOwotICAgICAgICAgICAgICAgIGZvdW5kTG9jYWxT
Y29wZSA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCFpbmRleCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4ganNOdW1iZXIoSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpDTE9TVVJFX1NDT1BF
KTsKKyAgICBmb3IgKERlYnVnZ2VyU2NvcGU6Oml0ZXJhdG9yIGl0ZXIgPSBzY29wZUNoYWluLT5i
ZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIERlYnVnZ2VyU2NvcGUqIHNj
b3BlID0gaXRlci5nZXQoKTsKKworICAgICAgICBpZiAoIWZvdW5kTG9jYWxTY29wZSAmJiBzY29w
ZS0+aXNGdW5jdGlvbk9yRXZhbFNjb3BlKCkpIHsKKyAgICAgICAgICAgIC8vIEZpcnN0IGZ1bmN0
aW9uIHNjb3BlIGlzIHRoZSBsb2NhbCBzY29wZSwgZWFjaCBzdWNjZXNzaXZlIG9uZSBpcyBhIGNs
b3N1cmUuCisgICAgICAgICAgICBpZiAoIWluZGV4KQorICAgICAgICAgICAgICAgIHJldHVybiBq
c051bWJlcihKU0phdmFTY3JpcHRDYWxsRnJhbWU6OkxPQ0FMX1NDT1BFKTsKKyAgICAgICAgICAg
IGZvdW5kTG9jYWxTY29wZSA9IHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWluZGV4
KSB7Ci0gICAgICAgICAgICAvLyBMYXN0IGluIHRoZSBjaGFpbiBpcyBnbG9iYWwgc2NvcGUuCi0g
ICAgICAgICAgICBpZiAoKytpdGVyID09IGVuZCkKKyAgICAgICAgICAgIGlmIChzY29wZS0+aXNX
aXRoU2NvcGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoSlNKYXZhU2NyaXB0
Q2FsbEZyYW1lOjpXSVRIX1NDT1BFKTsKKyAgICAgICAgICAgIGlmIChzY29wZS0+aXNHbG9iYWxT
Y29wZSgpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCsraXRlciA9PSBlbmQpOwogICAgICAg
ICAgICAgICAgIHJldHVybiBqc051bWJlcihKU0phdmFTY3JpcHRDYWxsRnJhbWU6OkdMT0JBTF9T
Q09QRSk7Ci0gICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoSlNKYXZhU2NyaXB0Q2FsbEZyYW1l
OjpXSVRIX1NDT1BFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgYmUgaWRlbnRpZnlpbmcgYW5kIHJldHVybmluZyBDQVRDSF9TQ09QRSBhcHByb3ByaWF0
ZWx5LgorICAgICAgICAgICAgQVNTRVJUKHNjb3BlLT5pc0Z1bmN0aW9uT3JFdmFsU2NvcGUoKSk7
CisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpDTE9T
VVJFX1NDT1BFKTsKICAgICAgICAgfQogCiAgICAgICAgIC0taW5kZXg7CkBAIC0xNTcsOSArMTU5
LDkgQEAgSlNWYWx1ZSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OnNjb3BlQ2hhaQogICAgIGlmICgh
aW1wbCgpLnNjb3BlQ2hhaW4oKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCi0gICAgSlNT
Y29wZSogc2NvcGVDaGFpbiA9IGltcGwoKS5zY29wZUNoYWluKCk7Ci0gICAgU2NvcGVDaGFpbkl0
ZXJhdG9yIGl0ZXIgPSBzY29wZUNoYWluLT5iZWdpbigpOwotICAgIFNjb3BlQ2hhaW5JdGVyYXRv
ciBlbmQgPSBzY29wZUNoYWluLT5lbmQoKTsKKyAgICBEZWJ1Z2dlclNjb3BlKiBzY29wZUNoYWlu
ID0gaW1wbCgpLnNjb3BlQ2hhaW4oKTsKKyAgICBEZWJ1Z2dlclNjb3BlOjppdGVyYXRvciBpdGVy
ID0gc2NvcGVDaGFpbi0+YmVnaW4oKTsKKyAgICBEZWJ1Z2dlclNjb3BlOjppdGVyYXRvciBlbmQg
PSBzY29wZUNoYWluLT5lbmQoKTsKIAogICAgIC8vIFdlIG11c3QgYWx3YXlzIGhhdmUgc29tZXRo
aW5nIGluIHRoZSBzY29wZSBjaGFpbi4KICAgICBBU1NFUlQoaXRlciAhPSBlbmQpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0Q2FsbEZyYW1lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0Q2Fs
bEZyYW1lLmgJKHJldmlzaW9uIDE3MzA5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSmF2YVNjcmlwdENhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMyBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTMtMjAxNCBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUz
LDcgKzUzLDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGZ1bmN0aW9uTmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUtPmZ1bmN0aW9uTmFtZSgpOyB9CiAgICAgSlNDOjpE
ZWJ1Z2dlckNhbGxGcmFtZTo6VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlckNh
bGxGcmFtZS0+dHlwZSgpOyB9Ci0gICAgSlNDOjpKU1Njb3BlKiBzY29wZUNoYWluKCkgY29uc3Qg
eyByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS0+c2NvcGUoKTsgfQorICAgIEpTQzo6RGVidWdn
ZXJTY29wZSogc2NvcGVDaGFpbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXJDYWxsRnJhbWUt
PnNjb3BlKCk7IH0KICAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiB2bUVudHJ5R2xvYmFsT2JqZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlckNhbGxGcmFtZS0+dm1FbnRyeUdsb2JhbE9iamVj
dCgpOyB9CiAKICAgICBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9k
ZWJ1Z2dlckNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lv
biAxNzMwOTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdERlYnVn
U2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCiAKICNpbmNsdWRlICJEZWJ1Z2dlckNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkRl
YnVnZ2VyU2NvcGUuaCIKICNpbmNsdWRlICJKU0phdmFTY3JpcHRDYWxsRnJhbWUuaCIKICNpbmNs
dWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKYXZhU2NyaXB0Q2FsbEZyYW1lLmgiCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkocmV2aXNpb24g
MTczMDkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgcHVibGljOgogICAgICAgICAKICAgICBE
RUNMQVJFX0lORk87CiAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKSB7IHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oQWN0
aXZhdGlvbk9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsgfQorICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGpz
TnVsbCgpLCBUeXBlSW5mbyhBY3RpdmF0aW9uT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOyB9CiAKICAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+JiByZWdpc3RlckF0KGlu
dCkgY29uc3Q7CiAgICAgYm9vbCBpc1ZhbGlkSW5kZXgoaW50KSBjb25zdDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlz
aW9uIDE3MzA5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIkRhdGVD
b25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkRhdGVQcm90b3R5cGUuaCIKICNpbmNsdWRlICJEZWJ1
Z2dlci5oIgorI2luY2x1ZGUgIkRlYnVnZ2VyU2NvcGUuaCIKICNpbmNsdWRlICJFcnJvci5oIgog
I2luY2x1ZGUgIkVycm9yQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJFcnJvclByb3RvdHlwZS5o
IgpAQCAtMzE4LDggKzMxOSw5IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUg
cHJvdG8KICAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZURhdGFWaWV3KV0uc3RydWN0dXJl
LnNldCh2bSwgdGhpcywgSlNEYXRhVmlldzo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX3R5
cGVkQXJyYXlzW3RvSW5kZXgoVHlwZURhdGFWaWV3KV0ucHJvdG90eXBlLmdldCgpKSk7CiAKICAg
ICBtX25hbWVTY29wZVN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIEpTTmFtZVNjb3BlOjpjcmVhdGVT
dHJ1Y3R1cmUodm0sIHRoaXMsIGpzTnVsbCgpKSk7Ci0gICAgbV9hY3RpdmF0aW9uU3RydWN0dXJl
LnNldCh2bSwgdGhpcywgSlNBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIGpz
TnVsbCgpKSk7CisgICAgbV9hY3RpdmF0aW9uU3RydWN0dXJlLnNldCh2bSwgdGhpcywgSlNBY3Rp
dmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMpKTsKICAgICBtX3N0cmljdEV2YWxBY3Rp
dmF0aW9uU3RydWN0dXJlLnNldCh2bSwgdGhpcywgU3RyaWN0RXZhbEFjdGl2YXRpb246OmNyZWF0
ZVN0cnVjdHVyZSh2bSwgdGhpcywganNOdWxsKCkpKTsKKyAgICBtX2RlYnVnZ2VyU2NvcGVTdHJ1
Y3R1cmUuc2V0KG1fdm0sIHRoaXMsIERlYnVnZ2VyU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZShtX3Zt
LCB0aGlzKSk7CiAgICAgbV93aXRoU2NvcGVTdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBKU1dpdGhT
Y29wZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBqc051bGwoKSkpOwogCiAgICAgbV9udWxs
UHJvdG90eXBlT2JqZWN0U3RydWN0dXJlLnNldCh2bSwgdGhpcywgSlNGaW5hbE9iamVjdDo6Y3Jl
YXRlU3RydWN0dXJlKHZtLCB0aGlzLCBqc051bGwoKSwgSlNGaW5hbE9iamVjdDo6ZGVmYXVsdElu
bGluZUNhcGFjaXR5KCkpKTsKQEAgLTY2Miw2ICs2NjQsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1f
cHJvbWlzZVByb3RvdHlwZSk7CiAjZW5kaWYKIAorICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX2RlYnVnZ2VyU2NvcGVTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX3dpdGhTY29wZVN0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNP
YmplY3QtPm1fc3RyaWN0RXZhbEFjdGl2YXRpb25TdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBw
ZW5kKCZ0aGlzT2JqZWN0LT5tX2FjdGl2YXRpb25TdHJ1Y3R1cmUpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAxNzMw
OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xODYsNiArMTg2LDcgQEAgcHJvdGVjdGVkOgogICAgIFdyaXRlQmFy
cmllcjxKU1Byb21pc2VQcm90b3R5cGU+IG1fcHJvbWlzZVByb3RvdHlwZTsKICNlbmRpZgogCisg
ICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9kZWJ1Z2dlclNjb3BlU3RydWN0dXJlOwogICAg
IFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fd2l0aFNjb3BlU3RydWN0dXJlOwogICAgIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RyaWN0RXZhbEFjdGl2YXRpb25TdHJ1Y3R1cmU7CiAgICAg
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9hY3RpdmF0aW9uU3RydWN0dXJlOwpAQCAtMzkxLDYg
KzM5Miw3IEBAIHB1YmxpYzoKICAgICBKU1Byb21pc2VQcm90b3R5cGUqIHByb21pc2VQcm90b3R5
cGUoKSBjb25zdCB7IHJldHVybiBtX3Byb21pc2VQcm90b3R5cGUuZ2V0KCk7IH0KICNlbmRpZgog
CisgICAgU3RydWN0dXJlKiBkZWJ1Z2dlclNjb3BlU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4g
bV9kZWJ1Z2dlclNjb3BlU3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiB3aXRoU2Nv
cGVTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3dpdGhTY29wZVN0cnVjdHVyZS5nZXQoKTsg
fQogICAgIFN0cnVjdHVyZSogc3RyaWN0RXZhbEFjdGl2YXRpb25TdHJ1Y3R1cmUoKSBjb25zdCB7
IHJldHVybiBtX3N0cmljdEV2YWxBY3RpdmF0aW9uU3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3Ry
dWN0dXJlKiBhY3RpdmF0aW9uU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmF0aW9u
U3RydWN0dXJlLmdldCgpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuY3BwCShyZXZpc2lvbiAxNzMwOTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3ODIsNSArMjc4Miw0IEBA
IHZvaWQgSlNPYmplY3Q6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEoKICAgICB9CiB9CiAKLQog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmgJKHJldmlzaW9uIDE3MzA5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5NCw2ICs1OTQsNyBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc05hbWVTY29wZU9iamVjdCgpIGNvbnN0OwogICAgIGJvb2wgaXNBY3RpdmF0
aW9uT2JqZWN0KCkgY29uc3Q7CiAgICAgYm9vbCBpc0Vycm9ySW5zdGFuY2UoKSBjb25zdDsKKyAg
ICBib29sIGlzV2l0aFNjb3BlKCkgY29uc3Q7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IHNlYWwoVk0mKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZyZWV6ZShWTSYpOwpAQCAt
MTE1MCw2ICsxMTUxLDExIEBAIGlubGluZSBib29sIEpTT2JqZWN0Ojppc0Vycm9ySW5zdGFuY2Uo
KSAKICAgICByZXR1cm4gdHlwZSgpID09IEVycm9ySW5zdGFuY2VUeXBlOwogfQogCitpbmxpbmUg
Ym9vbCBKU09iamVjdDo6aXNXaXRoU2NvcGUoKSBjb25zdAoreworICAgIHJldHVybiB0eXBlKCkg
PT0gV2l0aFNjb3BlVHlwZTsKK30KKwogaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVy
ZUFuZEJ1dHRlcmZseShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSkKIHsKICAgICBBU1NFUlQoc3RydWN0dXJlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Njb3BlLmgJKHJldmlzaW9uIDE3MzA5MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDcgKzE1
MCw3IEBAIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwog
ICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZOZXh0KCk7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgSlNPYmplY3QqIG9iamVjdEF0U2NvcGUoSlNTY29wZSopOworICAgIHN0YXRpYyBK
U09iamVjdCogb2JqZWN0QXRTY29wZShKU1Njb3BlKik7CiAKICAgICBzdGF0aWMgSlNWYWx1ZSBy
ZXNvbHZlKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAgc3Rh
dGljIFJlc29sdmVPcCBhYnN0cmFjdFJlc29sdmUoRXhlY1N0YXRlKiwgYm9vbCBoYXNUb3BBY3Rp
dmF0aW9uLCBKU1Njb3BlKiwgY29uc3QgSWRlbnRpZmllciYsIEdldE9yUHV0LCBSZXNvbHZlVHlw
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3Qu
aAkocmV2aXNpb24gMTczMDkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlTbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwNCw2ICsyMDQsMTEgQEAgcHVibGljOgog
ICAgICAgICBtX29mZnNldCA9IG9mZnNldDsKICAgICB9CiAKKyAgICB2b2lkIHNldFRoaXNWYWx1
ZShKU1ZhbHVlIHRoaXNWYWx1ZSkKKyAgICB7CisgICAgICAgIG1fdGhpc1ZhbHVlID0gdGhpc1Zh
bHVlOworICAgIH0KKwogICAgIHZvaWQgc2V0VW5kZWZpbmVkKCkKICAgICB7CiAgICAgICAgIG1f
ZGF0YS52YWx1ZSA9IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTIzNSw3ICsy
NDAsNyBAQCBwcml2YXRlOgogCiAgICAgUHJvcGVydHlUeXBlIG1fcHJvcGVydHlUeXBlOwogICAg
IFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OwotICAgIGNvbnN0IEpTVmFsdWUgbV90aGlzVmFsdWU7
CisgICAgSlNWYWx1ZSBtX3RoaXNWYWx1ZTsKICAgICBKU09iamVjdCogbV9zbG90QmFzZTsKICAg
ICBXYXRjaHBvaW50U2V0KiBtX3dhdGNocG9pbnRTZXQ7CiAgICAgQ2FjaGVhYmlsaXR5VHlwZSBt
X2NhY2hlYWJpbGl0eTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dFBy
b3BlcnR5U2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1B1dFByb3BlcnR5U2xvdC5oCShyZXZpc2lvbiAxNzMwOTEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNiAr
ODAsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX29mZnNldCA9IG9mZnNldDsK
ICAgICAgICAgfQogCisgICAgICAgIHZvaWQgc2V0VGhpc1ZhbHVlKEpTVmFsdWUgdGhpc1ZhbHVl
KQorICAgICAgICB7CisgICAgICAgICAgICBtX3RoaXNWYWx1ZSA9IHRoaXNWYWx1ZTsKKyAgICAg
ICAgfQorCiAgICAgICAgIFB1dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIoKSBjb25zdCB7IHJldHVy
biBtX3B1dEZ1bmN0aW9uOyB9CiAKICAgICAgICAgQ29udGV4dCBjb250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q29udGV4dD4obV9jb250ZXh0KTsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMTczMDkxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBA
CiAjaW5jbHVkZSAiQ3VzdG9tR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiREZHTG9uZ0xpdmVk
U3RhdGUuaCIKICNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgotI2luY2x1ZGUgIkRlYnVnZ2VyU2Nv
cGUuaCIKICNpbmNsdWRlICJFcnJvckluc3RhbmNlLmgiCiAjaW5jbHVkZSAiRlRMVGh1bmtzLmgi
CiAjaW5jbHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgpAQCAtMjA5LDcgKzIwOCw2IEBAIFZN
OjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICBwcm9wZXJ0eU5hbWVz
ID0gbmV3IENvbW1vbklkZW50aWZpZXJzKHRoaXMpOwogICAgIHN0cnVjdHVyZVN0cnVjdHVyZS5z
ZXQoKnRoaXMsIFN0cnVjdHVyZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzKSk7CiAgICAgc3RydWN0
dXJlUmFyZURhdGFTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y3JlYXRl
U3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwotICAgIGRlYnVnZ2VyU2NvcGVTdHJ1Y3R1
cmUuc2V0KCp0aGlzLCBEZWJ1Z2dlclNjb3BlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpKSk7CiAgICAgdGVybWluYXRlZEV4ZWN1dGlvbkVycm9yU3RydWN0dXJlLnNldCgqdGhp
cywgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpKSk7CiAgICAgc3RyaW5nU3RydWN0dXJlLnNldCgqdGhpcywgSlNTdHJpbmc6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBub3RBbk9iamVjdFN0cnVjdHVy
ZS5zZXQoKnRoaXMsIEpTTm90QW5PYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTcz
MDkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5
KQpAQCAtMjQ2LDcgKzI0Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFN0cm9uZzxT
dHJ1Y3R1cmU+IHN0cnVjdHVyZVN0cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4g
c3RydWN0dXJlUmFyZURhdGFTdHJ1Y3R1cmU7Ci0gICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGRl
YnVnZ2VyU2NvcGVTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHRlcm1pbmF0
ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3Ry
aW5nU3RydWN0dXJlOwogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBub3RBbk9iamVjdFN0cnVj
dHVyZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MzA5MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDE0LTA4LTI4ICBN
YXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBEZWJ1Z2dlckNhbGxGcmFt
ZTo6c2NvcGUoKSBzaG91bGQgcmV0dXJuIGEgRGVidWdnZXJTY29wZS4KKyAgICAgICAgPGh0dHBz
Oi8vd2Via2l0Lm9yZy9iLzEzNDQyMD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgUm9sbGluZyBiYWNrIGlu
IHIxNzA2ODAgd2l0aCB0aGUgZml4IGZvciA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTM1NjU2Pi4K
KworICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6YXR0YWNoRGVidWdnZXIpOgorICAgICAgICAtIFdl
IHNob3VsZCBhY3F1aXJlIHRoZSBKU0xvY2sgYmVmb3JlIG1vZGlmeWluZyBhIEpTIGdsb2JhbCBv
YmplY3QuCisKIDIwMTQtMDgtMjggIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgog
CiAgICAgICAgIFtpT1NdIENsaWVudHMgdGhhdCBpbmNsdWRlIFdlYkNvcmVUaHJlYWQuaCBmYWls
IHRvIGJ1aWxkIGFmdGVyIDxodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xNzI4MTQv
PgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxl
ci5jcHAJKHJldmlzaW9uIDE3MzA5MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDcsNiArMzA3LDcgQEAgdm9p
ZCBTY3JpcHRDb250cm9sbGVyOjphdHRhY2hEZWJ1Z2dlcihKUwogICAgICAgICByZXR1cm47CiAK
ICAgICBKU0RPTVdpbmRvdyogZ2xvYmFsT2JqZWN0ID0gc2hlbGwtPndpbmRvdygpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKGdsb2JhbE9iamVjdC0+dm0oKSk7CiAgICAgaWYgKGRlYnVnZ2VyKQog
ICAgICAgICBkZWJ1Z2dlci0+YXR0YWNoKGdsb2JhbE9iamVjdCk7CiAgICAgZWxzZSBpZiAoSlND
OjpEZWJ1Z2dlciogY3VycmVudERlYnVnZ2VyID0gZ2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpKQo=
</data>
<flag name="review"
          id="262056"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>