<?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>182692</bug_id>
          
          <creation_ts>2018-02-12 05:13:14 -0800</creation_ts>
          <short_desc>[WebVR][OpenVR] Implement getVRDisplays()</short_desc>
          <delta_ts>2018-02-19 05:17:23 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sergio Villar Senin">svillar</reporter>
          <assigned_to name="Sergio Villar Senin">svillar</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1398341</commentid>
    <comment_count>0</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2018-02-12 05:13:14 -0800</bug_when>
    <thetext>[WebVR][OpenVR] Implement getVRDisplays()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1398342</commentid>
    <comment_count>1</comment_count>
      <attachid>333589</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2018-02-12 05:20:42 -0800</bug_when>
    <thetext>Created attachment 333589
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1398363</commentid>
    <comment_count>2</comment_count>
      <attachid>333598</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2018-02-12 09:23:24 -0800</bug_when>
    <thetext>Created attachment 333598
Patch

Build fixes for Mac/iOS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1398641</commentid>
    <comment_count>3</comment_count>
      <attachid>333598</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-02-13 04:20:59 -0800</bug_when>
    <thetext>Comment on attachment 333598
Patch

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

&gt; Source/WebCore/ChangeLog:11
&gt; +2018-02-12  Sergio Villar Senin  &lt;svillar@igalia.com&gt;
&gt; +
&gt; +        [WebVR][OpenVR] Implement getVRDisplays()
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=182692
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Added platform/vr/ files to the build system.
&gt; +
&gt; +        * WebCore.xcodeproj/project.pbxproj:
&gt; +

Additional ChangeLog entry.

&gt; Source/WebCore/Modules/webvr/NavigatorWebVR.cpp:44
&gt; +    VRManager::singleton().refreshVRDevices(WTFMove(promise), navigator.frame()-&gt;document());

I think navigator.frame() should be null-checked as well, rejecting the promise in that case.

&gt; Source/WebCore/Modules/webvr/NavigatorWebVR.cpp:55
&gt; -    return false;
&gt; +    return true;

Should this be a RuntimeEnabledFeature? IMO this should return false until then.

&gt; Source/WebCore/Modules/webvr/VRDisplay.cpp:37
&gt; +Ref&lt;VRDisplay&gt; VRDisplay::create(ScriptExecutionContext&amp; context, VRPlatformDisplay* platformDisplay)

I imagine the VRPlatformDisplay object will be used for different things in this class. For that purpose I think the ownership of VRPlatformDisplay objects has to be sorted out.

For instance, the VRPlatformManager class could own all the VRPlatformDisplay objects, but through getVRDisplays() it would serve out WeakPtrs. This allows VRPlatformManager to gracefully handle any failures that would require it to invalidate all the associated VRPlatformDisplay objects, without VRDisplay tripping into a crash when trying to use the associated VRPlatformDisplay.

&gt; Source/WebCore/WebCore.xcodeproj/project.pbxproj:4512
&gt; +		E188236C2032037400B42DF3 /* VRPlatformDisplayOpenVR.h in Headers */ = {isa = PBXBuildFile; fileRef = E188236B2032036800B42DF3 /* VRPlatformDisplayOpenVR.h */; settings = {ATTRIBUTES = (Private, ); }; };
&gt; +		E188236D2032038200B42DF3 /* VRPlatformManagerOpenVR.h in Headers */ = {isa = PBXBuildFile; fileRef = E18823692032036700B42DF3 /* VRPlatformManagerOpenVR.h */; settings = {ATTRIBUTES = (Private, ); }; };

Is it necessary to include these files for the Mac port? I think it shouldn&apos;t be since USE_OPENVR isn&apos;t enabled for them.

&gt; Source/WebCore/WebCore.xcodeproj/project.pbxproj:13864
&gt; +		E18823682032036600B42DF3 /* VRPlatformDisplayOpenVR.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VRPlatformDisplayOpenVR.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
&gt; +		E18823692032036700B42DF3 /* VRPlatformManagerOpenVR.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VRPlatformManagerOpenVR.h; sourceTree = &quot;&lt;group&gt;&quot;; };
&gt; +		E188236A2032036700B42DF3 /* VRPlatformManagerOpenVR.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VRPlatformManagerOpenVR.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
&gt; +		E188236B2032036800B42DF3 /* VRPlatformDisplayOpenVR.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VRPlatformDisplayOpenVR.h; sourceTree = &quot;&lt;group&gt;&quot;; };

Ditto.

&gt; Source/WebCore/platform/vr/VRManager.cpp:52
&gt; +VRManager&amp; VRManager::singleton()
&gt; +{
&gt; +    static NeverDestroyed&lt;VRManager&gt; instance;
&gt; +    return instance;
&gt; +}
&gt; +
&gt; +VRManager::VRManager()
&gt; +{
&gt; +#if USE(OPENVR)
&gt; +    m_platformManager = VRPlatformManagerOpenVR::create();
&gt; +#endif
&gt; +}
&gt; +
&gt; +VRManager::~VRManager()
&gt; +{
&gt; +    m_promiseTaskQueue.close();
&gt; +    m_platformManager = nullptr;
&gt; +}

Using the singleton approach is fine, as is the NeverDestroyed&lt;&gt; usage. But as such, the destructor is effectively unnecessary. One issue with that is that with this approach, the OpenVR system won&apos;t ever get shut down during the program lifetime. I don&apos;t think this is terribly important at this point, but it&apos;s something to consider later.

&gt; Source/WebCore/platform/vr/VRManager.cpp:74
&gt; +void VRManager::refreshVRDevices(GetVRDisplaysPromise&amp;&amp; promise, ScriptExecutionContext* context)
&gt; +{
&gt; +    if (!m_platformManager)
&gt; +        promise.reject(InvalidStateError);
&gt; +
&gt; +    m_getDisplaysPromises.append(WTFMove(promise));
&gt; +
&gt; +    if (m_promiseTaskQueue.hasPendingTasks())
&gt; +        return;
&gt; +
&gt; +    // FIXME: protect context???
&gt; +    m_promiseTaskQueue.enqueueTask([this, promises = WTFMove(m_getDisplaysPromises), context] () mutable {
&gt; +        Vector&lt;VRPlatformDisplay*&gt; platformDisplays = m_platformManager-&gt;getVRDisplays();
&gt; +        Vector&lt;Ref&lt;VRDisplay&gt;&gt; displays;
&gt; +        for (auto platformDisplay : platformDisplays)
&gt; +            displays.append(VRDisplay::create(*context, platformDisplay));
&gt; +        for (auto&amp; deferredPromise : promises)
&gt; +            deferredPromise.resolve(displays);
&gt; +        });
&gt; +
&gt; +}

Here we&apos;re effectively in the platform layer, which means rejecting/resolving the promise here, as well as using a task queue here is a layering violation. All this has to be reworked so that it&apos;s done in NavigatorWebVR. From NavigatorWebVR you should somehow be able to query through VRManager all the enumerated VRPlatformDisplay objects, and then create VRDisplay objects off of that info.

&gt; Source/WebCore/platform/vr/VRPlatformDisplay.h:37
&gt; +enum VRDisplayCapabilityFlags {
&gt; +    None = 0,
&gt; +    Position = 1 &lt;&lt; 1,
&gt; +    Orientation = 1 &lt;&lt; 2,
&gt; +    ExternalDisplay = 1 &lt;&lt; 3,
&gt; +    Present = 1 &lt;&lt; 4
&gt; +};

IMO this should be `enum class VRDisplayCapabilityFlag`, and then separately you&apos;d have `using VRDisplayCapabilityFlags = unsigned;`. There might be C++ oddities in the way though, making it hard to use enum class values for bitwise operations.

&gt; Source/WebCore/platform/vr/openvr/VRPlatformDisplayOpenVR.cpp:33
&gt; +    : m_system(VRSystem)
&gt; +    , m_chaperone(VRChaperone)
&gt; +    , m_compositor(VRCompositor)

VRSystem, VRChaperone and VRCompositor names should maybe be shortened to just &apos;system&apos; etc., or capitalized as &apos;vrSystem&apos; etc.

&gt; Source/WebCore/platform/vr/openvr/VRPlatformManagerOpenVR.cpp:33
&gt; +using namespace vr;

IMO it makes sense to explicitly list what&apos;s residing in the vr namespace, like in VRPlatformDisplayOpenVR.cpp.

&gt; Source/WebCore/platform/vr/openvr/VRPlatformManagerOpenVR.cpp:45
&gt; +VRPlatformManagerOpenVR::VRPlatformManagerOpenVR()
&gt; +{
&gt; +}

Use `= default`.

&gt; Source/WebCore/platform/vr/openvr/VRPlatformManagerOpenVR.cpp:54
&gt; +    HmdError error;

This should be initialied, I guess to VRInitError_None.

&gt; Source/WebCore/platform/vr/openvr/VRPlatformManagerOpenVR.cpp:76
&gt; +    HmdError error;

Should be initialized to VRInitError_None.

&gt; Source/WebCore/platform/vr/openvr/VRPlatformManagerOpenVR.cpp:87
&gt; +    Vector&lt;VRPlatformDisplay*&gt; displays;
&gt; +    displays.append(new VRPlatformDisplayOpenVR(m_system, chaperone, compositor));
&gt; +    return displays;

This leaks the VRPlatformDisplayOpenVR object. I think with OpenVR it&apos;s most optimal to just store a VRPlatformDisplayOpenVR instance in the VRPlatformManagerOpenVR class (manage it through std::unique_ptr&lt;&gt;, but initialize it in initOpenVR()).

Also, instead of passing pointer values in the Vector&lt;&gt; object, use Vector&lt;std::reference_wrapper&lt;VRPlatformDisplay&gt;&gt; instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1399452</commentid>
    <comment_count>4</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2018-02-15 07:07:29 -0800</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #3)
&gt; Comment on attachment 333598 [details]
&gt; Patch
&gt; 

Thanks for the great review.

&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=333598&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:11
&gt; &gt; +2018-02-12  Sergio Villar Senin  &lt;svillar@igalia.com&gt;
&gt; &gt; +
&gt; &gt; +        [WebVR][OpenVR] Implement getVRDisplays()
&gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=182692
&gt; &gt; +
&gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; &gt; +
&gt; &gt; +        Added platform/vr/ files to the build system.
&gt; &gt; +
&gt; &gt; +        * WebCore.xcodeproj/project.pbxproj:
&gt; &gt; +
&gt; 
&gt; Additional ChangeLog entry.
&gt; 
&gt; &gt; Source/WebCore/Modules/webvr/NavigatorWebVR.cpp:44
&gt; &gt; +    VRManager::singleton().refreshVRDevices(WTFMove(promise), navigator.frame()-&gt;document());
&gt; 
&gt; I think navigator.frame() should be null-checked as well, rejecting the
&gt; promise in that case.

Right.

&gt; &gt; Source/WebCore/Modules/webvr/NavigatorWebVR.cpp:55
&gt; &gt; -    return false;
&gt; &gt; +    return true;
&gt; 
&gt; Should this be a RuntimeEnabledFeature? IMO this should return false until
&gt; then.

Yeah we could convert it to a proper runtime feature indeed.

&gt; &gt; Source/WebCore/Modules/webvr/VRDisplay.cpp:37
&gt; &gt; +Ref&lt;VRDisplay&gt; VRDisplay::create(ScriptExecutionContext&amp; context, VRPlatformDisplay* platformDisplay)
&gt; 
&gt; I imagine the VRPlatformDisplay object will be used for different things in
&gt; this class. For that purpose I think the ownership of VRPlatformDisplay
&gt; objects has to be sorted out.
&gt; 
&gt; For instance, the VRPlatformManager class could own all the
&gt; VRPlatformDisplay objects, but through getVRDisplays() it would serve out
&gt; WeakPtrs. This allows VRPlatformManager to gracefully handle any failures
&gt; that would require it to invalidate all the associated VRPlatformDisplay
&gt; objects, without VRDisplay tripping into a crash when trying to use the
&gt; associated VRPlatformDisplay.

Yes that was my idea, the ownership should be in the manager. I&apos;ll add the WeakPtr bits.

&gt; &gt; Source/WebCore/WebCore.xcodeproj/project.pbxproj:4512
&gt; &gt; +		E188236C2032037400B42DF3 /* VRPlatformDisplayOpenVR.h in Headers */ = {isa = PBXBuildFile; fileRef = E188236B2032036800B42DF3 /* VRPlatformDisplayOpenVR.h */; settings = {ATTRIBUTES = (Private, ); }; };
&gt; &gt; +		E188236D2032038200B42DF3 /* VRPlatformManagerOpenVR.h in Headers */ = {isa = PBXBuildFile; fileRef = E18823692032036700B42DF3 /* VRPlatformManagerOpenVR.h */; settings = {ATTRIBUTES = (Private, ); }; };
&gt; 
&gt; Is it necessary to include these files for the Mac port? I think it
&gt; shouldn&apos;t be since USE_OPENVR isn&apos;t enabled for them.

Not strictly needed but is something that we could do now with very little effort.

&gt; &gt; Source/WebCore/platform/vr/VRManager.cpp:52
&gt; &gt; +VRManager&amp; VRManager::singleton()
&gt; &gt; +{
&gt; &gt; +    static NeverDestroyed&lt;VRManager&gt; instance;
&gt; &gt; +    return instance;
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +VRManager::VRManager()
&gt; &gt; +{
&gt; &gt; +#if USE(OPENVR)
&gt; &gt; +    m_platformManager = VRPlatformManagerOpenVR::create();
&gt; &gt; +#endif
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +VRManager::~VRManager()
&gt; &gt; +{
&gt; &gt; +    m_promiseTaskQueue.close();
&gt; &gt; +    m_platformManager = nullptr;
&gt; &gt; +}
&gt; 
&gt; Using the singleton approach is fine, as is the NeverDestroyed&lt;&gt; usage. But
&gt; as such, the destructor is effectively unnecessary. One issue with that is
&gt; that with this approach, the OpenVR system won&apos;t ever get shut down during
&gt; the program lifetime. I don&apos;t think this is terribly important at this
&gt; point, but it&apos;s something to consider later.

Sure. Perhaps we could eventually destroy the object when exiting VR mode.
 
&gt; &gt; Source/WebCore/platform/vr/VRManager.cpp:74
&gt; &gt; +void VRManager::refreshVRDevices(GetVRDisplaysPromise&amp;&amp; promise, ScriptExecutionContext* context)
&gt; &gt; +{
&gt; &gt; +    if (!m_platformManager)
&gt; &gt; +        promise.reject(InvalidStateError);
&gt; &gt; +
&gt; &gt; +    m_getDisplaysPromises.append(WTFMove(promise));
&gt; &gt; +
&gt; &gt; +    if (m_promiseTaskQueue.hasPendingTasks())
&gt; &gt; +        return;
&gt; &gt; +
&gt; &gt; +    // FIXME: protect context???
&gt; &gt; +    m_promiseTaskQueue.enqueueTask([this, promises = WTFMove(m_getDisplaysPromises), context] () mutable {
&gt; &gt; +        Vector&lt;VRPlatformDisplay*&gt; platformDisplays = m_platformManager-&gt;getVRDisplays();
&gt; &gt; +        Vector&lt;Ref&lt;VRDisplay&gt;&gt; displays;
&gt; &gt; +        for (auto platformDisplay : platformDisplays)
&gt; &gt; +            displays.append(VRDisplay::create(*context, platformDisplay));
&gt; &gt; +        for (auto&amp; deferredPromise : promises)
&gt; &gt; +            deferredPromise.resolve(displays);
&gt; &gt; +        });
&gt; &gt; +
&gt; &gt; +}
&gt; 
&gt; Here we&apos;re effectively in the platform layer, which means
&gt; rejecting/resolving the promise here, as well as using a task queue here is
&gt; a layering violation. All this has to be reworked so that it&apos;s done in
&gt; NavigatorWebVR. From NavigatorWebVR you should somehow be able to query
&gt; through VRManager all the enumerated VRPlatformDisplay objects, and then
&gt; create VRDisplay objects off of that info.

OK.

&gt; &gt; Source/WebCore/platform/vr/VRPlatformDisplay.h:37
&gt; &gt; +enum VRDisplayCapabilityFlags {
&gt; &gt; +    None = 0,
&gt; &gt; +    Position = 1 &lt;&lt; 1,
&gt; &gt; +    Orientation = 1 &lt;&lt; 2,
&gt; &gt; +    ExternalDisplay = 1 &lt;&lt; 3,
&gt; &gt; +    Present = 1 &lt;&lt; 4
&gt; &gt; +};
&gt; 
&gt; IMO this should be `enum class VRDisplayCapabilityFlag`, and then separately
&gt; you&apos;d have `using VRDisplayCapabilityFlags = unsigned;`. There might be C++
&gt; oddities in the way though, making it hard to use enum class values for
&gt; bitwise operations.

I think I tried that before but it was generating quite weird build errors when using the flags, I can give it another try.

&gt; &gt; Source/WebCore/platform/vr/openvr/VRPlatformDisplayOpenVR.cpp:33
&gt; &gt; +    : m_system(VRSystem)
&gt; &gt; +    , m_chaperone(VRChaperone)
&gt; &gt; +    , m_compositor(VRCompositor)
&gt; 
&gt; VRSystem, VRChaperone and VRCompositor names should maybe be shortened to
&gt; just &apos;system&apos; etc., or capitalized as &apos;vrSystem&apos; etc.

ack

&gt; &gt; Source/WebCore/platform/vr/openvr/VRPlatformManagerOpenVR.cpp:33
&gt; &gt; +using namespace vr;
&gt; 
&gt; IMO it makes sense to explicitly list what&apos;s residing in the vr namespace,
&gt; like in VRPlatformDisplayOpenVR.cpp.

ack

&gt; &gt; Source/WebCore/platform/vr/openvr/VRPlatformManagerOpenVR.cpp:45
&gt; &gt; +VRPlatformManagerOpenVR::VRPlatformManagerOpenVR()
&gt; &gt; +{
&gt; &gt; +}
&gt; 
&gt; Use `= default`.

Sure

&gt; &gt; Source/WebCore/platform/vr/openvr/VRPlatformManagerOpenVR.cpp:54
&gt; &gt; +    HmdError error;
&gt; 
&gt; This should be initialied, I guess to VRInitError_None.

ack

&gt; &gt; Source/WebCore/platform/vr/openvr/VRPlatformManagerOpenVR.cpp:76
&gt; &gt; +    HmdError error;
&gt; 
&gt; Should be initialized to VRInitError_None.

ack

&gt; &gt; Source/WebCore/platform/vr/openvr/VRPlatformManagerOpenVR.cpp:87
&gt; &gt; +    Vector&lt;VRPlatformDisplay*&gt; displays;
&gt; &gt; +    displays.append(new VRPlatformDisplayOpenVR(m_system, chaperone, compositor));
&gt; &gt; +    return displays;
&gt; 
&gt; This leaks the VRPlatformDisplayOpenVR object. I think with OpenVR it&apos;s most
&gt; optimal to just store a VRPlatformDisplayOpenVR instance in the
&gt; VRPlatformManagerOpenVR class (manage it through std::unique_ptr&lt;&gt;, but
&gt; initialize it in initOpenVR()).

Ok

&gt; Also, instead of passing pointer values in the Vector&lt;&gt; object, use
&gt; Vector&lt;std::reference_wrapper&lt;VRPlatformDisplay&gt;&gt; instead.

Sure</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1399479</commentid>
    <comment_count>5</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2018-02-15 09:03:30 -0800</bug_when>
    <thetext>(In reply to Sergio Villar Senin from comment #4)
&gt; (In reply to Zan Dobersek from comment #3)
&gt; &gt; Comment on attachment 333598 [details]
&gt; &gt; Patch
 
&gt; &gt; &gt; Source/WebCore/platform/vr/openvr/VRPlatformManagerOpenVR.cpp:54
&gt; &gt; &gt; +    HmdError error;
&gt; &gt; 
&gt; &gt; This should be initialied, I guess to VRInitError_None.
&gt; 
&gt; ack
&gt; 
&gt; &gt; &gt; Source/WebCore/platform/vr/openvr/VRPlatformManagerOpenVR.cpp:76
&gt; &gt; &gt; +    HmdError error;
&gt; &gt; 
&gt; &gt; Should be initialized to VRInitError_None.
&gt; 
&gt; ack

BTW these two do not need to be initialized because the following calls do always properly set an error code (None when nothing fails)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1399851</commentid>
    <comment_count>6</comment_count>
      <attachid>334028</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2018-02-16 02:19:32 -0800</bug_when>
    <thetext>Created attachment 334028
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400320</commentid>
    <comment_count>7</comment_count>
      <attachid>334028</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-02-19 04:08:05 -0800</bug_when>
    <thetext>Comment on attachment 334028
Patch

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

&gt; Source/WebCore/Modules/webvr/NavigatorWebVR.cpp:52
&gt; +        for (auto platformDisplay : platformDisplays.value())

auto&amp;, otherwise you&apos;re copying the WeakPtr object here. Nothing wrong with that in itself, but it&apos;s not efficient.

&gt; Source/WebCore/Modules/webvr/NavigatorWebVR.cpp:53
&gt; +            displays.append(VRDisplay::create(context, platformDisplay));

The WeakPtr object should be moved into the VRDisplay::create() call here.

&gt; Source/WebCore/Modules/webvr/NavigatorWebVR.cpp:55
&gt; +        });

This indentation is off.

&gt; Source/WebCore/Modules/webvr/VRDisplay.cpp:39
&gt; +    auto display = adoptRef(*new VRDisplay(context, platformDisplay));

platformDisplay should be moved ...

&gt; Source/WebCore/Modules/webvr/VRDisplay.cpp:44
&gt; +VRDisplay::VRDisplay(ScriptExecutionContext&amp; context, WeakPtr&lt;VRPlatformDisplay&gt; platformDisplay)

... into the WeakPtr&lt;VRPlatformDisplay&gt;&amp;&amp; parameter.

&gt; Source/WebCore/Modules/webvr/VRDisplay.cpp:57
&gt; -    return false;
&gt; +    return m_display-&gt;getDisplayInfo().isConnected;

This should check that m_display is still valid.

&gt; Source/WebCore/platform/vr/VRPlatformDisplay.h:34
&gt; +enum VRDisplayCapabilityFlags {
&gt; +    None = 0,
&gt; +    Position = 1 &lt;&lt; 1,
&gt; +    Orientation = 1 &lt;&lt; 2,
&gt; +    ExternalDisplay = 1 &lt;&lt; 3,
&gt; +    Present = 1 &lt;&lt; 4
&gt; +};

IMO the enum should be named `VRDisplayCapabilityFlag`, and a `VRDisplayCapabilityFlags` should be aliased to the `unsigned` type, but up to you.

You can take this up in a separate patch, perhaps moving the whole enum and type definition into a separate header so that the whole VRPlatformDisplay.h header isn&apos;t included in VRDisplayCapabilities.h.

&gt; Source/WebCore/platform/vr/VRPlatformDisplay.h:57
&gt; +    WeakPtr&lt;VRPlatformDisplay&gt; createWeakPtr() { return m_weakPtrFactory.createWeakPtr(*this); }
&gt; +private:
&gt; +
&gt; +    WeakPtrFactory&lt;VRPlatformDisplay&gt; m_weakPtrFactory;

Space oddity.

&gt; Source/WebCore/platform/vr/openvr/VRPlatformDisplayOpenVR.h:40
&gt; +    vr::IVRSystem *m_system;
&gt; +    vr::IVRChaperone *m_chaperone;
&gt; +    vr::IVRCompositor *m_compositor;

Should be using WebKit pointer variable style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400325</commentid>
    <comment_count>8</comment_count>
      <attachid>334151</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2018-02-19 04:21:51 -0800</bug_when>
    <thetext>Created attachment 334151
Patch

Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400331</commentid>
    <comment_count>9</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2018-02-19 05:16:21 -0800</bug_when>
    <thetext>Committed r228662: &lt;https://trac.webkit.org/changeset/228662&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400332</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-02-19 05:17:23 -0800</bug_when>
    <thetext>&lt;rdar://problem/37667900&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>333589</attachid>
            <date>2018-02-12 05:20:42 -0800</date>
            <delta_ts>2018-02-12 09:23:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-182692-20180212142040.patch</filename>
            <type>text/plain</type>
            <size>29050</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI3Nzg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTY1ODVmMmUyNTAyMTQ0
Yjk4NmNhYzI5OTdhYTFiNzM1ZDhjZWU4Yy4uOTVhZTY1OTNlZmM3Mjk1ZjVlNjY4NGZiYmFhMzdh
NDQ4ZGEzMmE2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDE4LTAyLTEyICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtXZWJWUl1b
T3BlblZSXSBJbXBsZW1lbnQgZ2V0VlJEaXNwbGF5cygpCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODI2OTIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHByb3ZpZGVzIGFuIGltcGxlbWVudGF0aW9u
IG9mIE5hdmlnYXRvcidzIGdldFZSRGlzcGxheXMoKQorICAgICAgICBtZXRob2QgdXNpbmcgT3Bl
blZSIGFzIGJhY2tlbmQuIEl0IHF1ZXVlcyBzZXZlcmFsIHByb21pc2VzIGluCisgICAgICAgIGEg
cXVldWUgYW5kIHJlc29sdmVzIHRoZW0gYWxsIGp1c3Qgb25jZS4gVGhlIGluZm9ybWF0aW9uIHJl
dHJpZXZlZAorICAgICAgICBpcyB2ZXJ5IG1pbmltYWwgZm9yIHRoZSB0aW1lIGJlaW5nLCBidXQg
dGhpcyBjaGFuZ2UgbGF5cyB0aGUgZ3JvdW5kCisgICAgICAgIGZvciBhbGwgdGhlIGNoYW5nZXMg
dGhhdCBhcmUgYWJvdXQgdG8gbGFuZC4KKworICAgICAgICBUaGUgVlIgY29kZSB1c2VzIGEgVlJN
YW5hZ2VyIHdoaWNoIGlzIHRoZSBpbnRlcmZhY2Ugd2l0aCB0aGUKKyAgICAgICAgcGxhdGZvcm0g
Y29kZSBhbmQgdGhlIHJlc3BvbnNpYmxlIGZvciBpbnN0YW50aWF0aW5nIHRoZSByaWdodAorICAg
ICAgICBwbGF0Zm9ybSBjb2RlLiBUaGlzIHBsYXRmb3JtIGNvZGUgaXMgY3VycmVudGx5IGJlaW5n
IGltcGxlbWVudGVkCisgICAgICAgIHVzaW5nIE9wZW5WUiBidXQgY291bGQgd2UgYWxzbyBwb3J0
ZWQgaW4gdGhlIGZ1dHVyZSB0byBPcGVuWFIgb3IgYW55CisgICAgICAgIG90aGVyIFZSIFNESy4K
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIE1vZHVsZXMvd2VidnIvTmF2
aWdhdG9yV2ViVlIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yV2ViVlI6OmdldFZS
RGlzcGxheXMpOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yV2ViVlI6OnZyRW5hYmxlZCk6
CisgICAgICAgICogTW9kdWxlcy93ZWJ2ci9OYXZpZ2F0b3JXZWJWUi5oOgorICAgICAgICAqIE1v
ZHVsZXMvd2VidnIvVlJEaXNwbGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheTo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheTo6VlJEaXNwbGF5KToKKyAgICAg
ICAgKFdlYkNvcmU6OlZSRGlzcGxheTo6aXNDb25uZWN0ZWQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6VlJEaXNwbGF5OjpkaXNwbGF5TmFtZSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93
ZWJ2ci9WUkRpc3BsYXkuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYnZyL1ZSRGlzcGxheUNhcGFi
aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWUkRpc3BsYXlDYXBhYmlsaXRpZXM6OlZS
RGlzcGxheUNhcGFiaWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpWUkRpc3BsYXlDYXBhYmls
aXRpZXM6Omhhc1Bvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheUNh
cGFiaWxpdGllczo6aGFzT3JpZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJE
aXNwbGF5Q2FwYWJpbGl0aWVzOjpoYXNFeHRlcm5hbERpc3BsYXkgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6VlJEaXNwbGF5Q2FwYWJpbGl0aWVzOjpjYW5QcmVzZW50IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlZSRGlzcGxheUNhcGFiaWxpdGllczo6bWF4TGF5ZXIgY29uc3QpOgorICAg
ICAgICAqIE1vZHVsZXMvd2VidnIvVlJEaXNwbGF5Q2FwYWJpbGl0aWVzLmg6CisgICAgICAgIChX
ZWJDb3JlOjpWUkRpc3BsYXlDYXBhYmlsaXRpZXM6OmNyZWF0ZSk6CisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogcGxhdGZvcm0vdnIvVlJNYW5hZ2VyLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpWUk1hbmFnZXI6OnNpbmdsZXRvbik6CisgICAgICAgIChXZWJDb3JlOjpW
Uk1hbmFnZXI6OlZSTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpWUk1hbmFnZXI6On5WUk1h
bmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6VlJNYW5hZ2VyOjpyZWZyZXNoVlJEZXZpY2VzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS92ci9WUk1hbmFnZXIuaDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vdnIvVlJQbGF0Zm9ybURpc3BsYXkuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
dnIvVlJQbGF0Zm9ybU1hbmFnZXIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vdnIvb3Bl
bnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpWUlBsYXRmb3JtRGlzcGxheU9wZW5WUjo6VlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIpOgorICAg
ICAgICAqIHBsYXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5WUi5oOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybU1hbmFnZXJPcGVuVlIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlZSUGxhdGZvcm1NYW5hZ2VyT3BlblZSOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VlJQbGF0Zm9ybU1hbmFnZXJPcGVuVlI6OlZSUGxh
dGZvcm1NYW5hZ2VyT3BlblZSKToKKyAgICAgICAgKFdlYkNvcmU6OlZSUGxhdGZvcm1NYW5hZ2Vy
T3BlblZSOjp+VlJQbGF0Zm9ybU1hbmFnZXJPcGVuVlIpOgorICAgICAgICAoV2ViQ29yZTo6VlJQ
bGF0Zm9ybU1hbmFnZXJPcGVuVlI6OmluaXRPcGVuVlIpOgorICAgICAgICAqIHBsYXRmb3JtL3Zy
L29wZW52ci9WUlBsYXRmb3JtTWFuYWdlck9wZW5WUi5oOiBBZGRlZC4KKwogMjAxOC0wMS0zMCAg
QW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQXZvaWQgdHJhdmVy
c2luZyB0b28gbXVjaCB3aGVuIGRvaW5nIGNsYXNzIGNoYW5nZSBpbnZhbGlkYXRpb24KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKaW5kZXggNDk3YjRkZDJhNDhhMzYwYzRiNWQ5MTMxMjhjZWRiNzM4ZWFhNWZi
ZC4uZTc2ZjAwNmI3NzhjOTM3ZDMxNTIxZDQ5NGVlMGZhNDEzMjdlYzM1MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKQEAgLTExOCw2ICsxMTgsNyBAQCBzZXQoV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9S
SUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3NxbCIKICAgICAiJHtXRUJDT1JFX0RJ
Un0vcGxhdGZvcm0vdGV4dCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vdGV4dC9pY3Ui
CisgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3ZyIgogICAgICIke1dFQkNPUkVfRElSfS9w
bHVnaW5zIgogICAgICIke1dFQkNPUkVfRElSfS9yZW5kZXJpbmciCiAgICAgIiR7V0VCQ09SRV9E
SVJ9L3JlbmRlcmluZy9saW5lIgpAQCAtMTUyNyw2ICsxNTI4LDcgQEAgZW5kaWYgKCkKIAogaWYg
KFVTRV9PUEVOVlIpCiAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUyAi
JHtUSElSRFBBUlRZX0RJUn0vb3BlbnZyL2hlYWRlcnMiKQorICBsaXN0KEFQUEVORCBXZWJDb3Jl
X0lOQ0xVREVfRElSRUNUT1JJRVMgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3ZyL29wZW52ciIp
CiAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTIG9wZW52cl9hcGkpCiBlbmRpZiAoKQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL05hdmlnYXRvcldlYlZS
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvTmF2aWdhdG9yV2ViVlIuY3BwCmlu
ZGV4IGVjYjU0MTE5MjI1NzQ0ZjJiYTlkNDQ2YjU4YzczZTAxNzk1MDRhZjQuLjU4NTAzMTMxNzMz
MmFkNjM3ZGU4NGI0NTg5ZTlmNzM2ODkxMDg5YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2VidnIvTmF2aWdhdG9yV2ViVlIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2VidnIvTmF2aWdhdG9yV2ViVlIuY3BwCkBAIC0yNiwxMiArMjYsMjIgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJOYXZpZ2F0b3JXZWJWUi5oIgogCisjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIk5hdmlnYXRvci5oIgog
I2luY2x1ZGUgIlZSRGlzcGxheS5oIgorI2luY2x1ZGUgIlZSTWFuYWdlci5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXZvaWQgTmF2aWdhdG9yV2ViVlI6OmdldFZSRGlzcGxheXMoTmF2aWdh
dG9yJiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJikKK3ZvaWQgTmF2aWdhdG9yV2ViVlI6OmdldFZS
RGlzcGxheXMoTmF2aWdhdG9yJiBuYXZpZ2F0b3IsIEdldFZSRGlzcGxheXNQcm9taXNlJiYgcHJv
bWlzZSkKIHsKKyAgICBpZiAoIXZyRW5hYmxlZChuYXZpZ2F0b3IpKSB7CisgICAgICAgIHByb21p
c2UucmVqZWN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWUk1hbmFnZXI6OnNp
bmdsZXRvbigpLnJlZnJlc2hWUkRldmljZXMoV1RGTW92ZShwcm9taXNlKSwgbmF2aWdhdG9yLmZy
YW1lKCktPmRvY3VtZW50KCkpOwogfQogCiBjb25zdCBWZWN0b3I8UmVmUHRyPFZSRGlzcGxheT4+
JiBOYXZpZ2F0b3JXZWJWUjo6YWN0aXZlVlJEaXNwbGF5cyhOYXZpZ2F0b3ImKQpAQCAtNDIsNyAr
NTIsNyBAQCBjb25zdCBWZWN0b3I8UmVmUHRyPFZSRGlzcGxheT4+JiBOYXZpZ2F0b3JXZWJWUjo6
YWN0aXZlVlJEaXNwbGF5cyhOYXZpZ2F0b3ImKQogCiBib29sIE5hdmlnYXRvcldlYlZSOjp2ckVu
YWJsZWQoTmF2aWdhdG9yJikKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2VidnIvTmF2aWdhdG9yV2ViVlIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2VidnIvTmF2aWdhdG9yV2ViVlIuaAppbmRleCBmZTE1NzY5Nzc0NWUwZGZhOTdhNTBhMWMwZDRk
ZDhhNTE4YmNjMDQ4Li43MDk3ODkxMjlmYTExMTRhNzk4YjMyZDBjYjU2OTVkZWMyMDRmYzY4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL05hdmlnYXRvcldlYlZSLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9OYXZpZ2F0b3JXZWJWUi5oCkBAIC0z
Nyw3ICszNyw5IEBAIGNsYXNzIFZSRGlzcGxheTsKIAogY2xhc3MgTmF2aWdhdG9yV2ViVlIgZmlu
YWwgOiBwdWJsaWMgU3VwcGxlbWVudDxQYWdlPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQg
Z2V0VlJEaXNwbGF5cyhOYXZpZ2F0b3ImLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKKyAgICB1
c2luZyBHZXRWUkRpc3BsYXlzUHJvbWlzZSA9IERPTVByb21pc2VEZWZlcnJlZDxJRExTZXF1ZW5j
ZTxJRExJbnRlcmZhY2U8VlJEaXNwbGF5Pj4+OworCisgICAgc3RhdGljIHZvaWQgZ2V0VlJEaXNw
bGF5cyhOYXZpZ2F0b3ImLCBHZXRWUkRpc3BsYXlzUHJvbWlzZSYmKTsKICAgICBzdGF0aWMgY29u
c3QgVmVjdG9yPFJlZlB0cjxWUkRpc3BsYXk+PiYgYWN0aXZlVlJEaXNwbGF5cyhOYXZpZ2F0b3Im
KTsKICAgICBzdGF0aWMgYm9vbCB2ckVuYWJsZWQoTmF2aWdhdG9yJik7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXkuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXkuY3BwCmluZGV4IDNhNTI3MGE5ZjU4NzVhZWM2
NzgzNGMwYjM3M2FjYmM1Nzc5ZjBkYjIuLjNiZTk2ZmRjN2MyZmM1NzU1NDIzMWVkYWMwNzU5YzQ0
MjM5ZDlkMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJEaXNw
bGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxheS5jcHAK
QEAgLTI5LDIxICsyOSwyNCBAQAogI2luY2x1ZGUgIlZSRGlzcGxheUNhcGFiaWxpdGllcy5oIgog
I2luY2x1ZGUgIlZSRXllUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIlZSTGF5ZXJJbml0LmgiCisj
aW5jbHVkZSAiVlJQbGF0Zm9ybURpc3BsYXkuaCIKICNpbmNsdWRlICJWUlBvc2UuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8VlJEaXNwbGF5PiBWUkRpc3BsYXk6OmNyZWF0ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KQorUmVmPFZSRGlzcGxheT4gVlJEaXNwbGF5Ojpj
cmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgVlJQbGF0Zm9ybURpc3BsYXkq
IHBsYXRmb3JtRGlzcGxheSkKIHsKLSAgICBhdXRvIGRpc3BsYXkgPSBhZG9wdFJlZigqbmV3IFZS
RGlzcGxheShjb250ZXh0KSk7CisgICAgYXV0byBkaXNwbGF5ID0gYWRvcHRSZWYoKm5ldyBWUkRp
c3BsYXkoY29udGV4dCwgcGxhdGZvcm1EaXNwbGF5KSk7CiAgICAgZGlzcGxheS0+c3VzcGVuZElm
TmVlZGVkKCk7CiAgICAgcmV0dXJuIGRpc3BsYXk7CiB9CiAKLVZSRGlzcGxheTo6VlJEaXNwbGF5
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCitWUkRpc3BsYXk6OlZSRGlzcGxheShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBWUlBsYXRmb3JtRGlzcGxheSogcGxhdGZv
cm1EaXNwbGF5KQogICAgIDogQWN0aXZlRE9NT2JqZWN0KCZjb250ZXh0KQotICAgICwgbV9jYXBh
YmlsaXRpZXMoVlJEaXNwbGF5Q2FwYWJpbGl0aWVzOjpjcmVhdGUoKSkKKyAgICAsIG1fY2FwYWJp
bGl0aWVzKFZSRGlzcGxheUNhcGFiaWxpdGllczo6Y3JlYXRlKHBsYXRmb3JtRGlzcGxheS0+Z2V0
RGlzcGxheUluZm8oKS5jYXBhYmlsaXR5RmxhZ3MpKQogICAgICwgbV9leWVQYXJhbWV0ZXJzKFZS
RXllUGFyYW1ldGVyczo6Y3JlYXRlKCkpCisgICAgLCBtX2Rpc3BsYXkocGxhdGZvcm1EaXNwbGF5
KQorICAgICwgbV9kaXNwbGF5TmFtZShwbGF0Zm9ybURpc3BsYXktPmdldERpc3BsYXlJbmZvKCku
ZGlzcGxheU5hbWUpCiB7CiB9CiAKQEAgLTUxLDcgKzU0LDcgQEAgVlJEaXNwbGF5Ojp+VlJEaXNw
bGF5KCkgPSBkZWZhdWx0OwogCiBib29sIFZSRGlzcGxheTo6aXNDb25uZWN0ZWQoKSBjb25zdAog
ewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9kaXNwbGF5LT5nZXREaXNwbGF5SW5m
bygpLmlzQ29ubmVjdGVkOwogfQogCiBib29sIFZSRGlzcGxheTo6aXNQcmVzZW50aW5nKCkgY29u
c3QKQEAgLTgxLDcgKzg0LDcgQEAgdW5zaWduZWQgVlJEaXNwbGF5OjpkaXNwbGF5SWQoKSBjb25z
dAogCiBjb25zdCBTdHJpbmcmIFZSRGlzcGxheTo6ZGlzcGxheU5hbWUoKSBjb25zdAogewotICAg
IHJldHVybiBlbXB0eVN0cmluZygpOworICAgIHJldHVybiBtX2Rpc3BsYXlOYW1lOwogfQogCiBi
b29sIFZSRGlzcGxheTo6Z2V0RnJhbWVEYXRhKFZSRnJhbWVEYXRhJikgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJEaXNwbGF5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxheS5oCmluZGV4IGE4NTI5Yzc4YzI4NmRjN2ViYzEy
NjFjMmQ0NmFlOWJiZjgwNjBjYjMuLmM2MzJkNzAxYWNhZGQwYWEzZDFiNWM5NTZkNWQzMzNmOGVi
MWJlOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJEaXNwbGF5
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXkuaApAQCAtMzcs
MTMgKzM3LDE0IEBAIGNsYXNzIFJlcXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrOwogY2xhc3Mg
VlJEaXNwbGF5Q2FwYWJpbGl0aWVzOwogY2xhc3MgVlJFeWVQYXJhbWV0ZXJzOwogY2xhc3MgVlJG
cmFtZURhdGE7CitjbGFzcyBWUlBsYXRmb3JtRGlzcGxheTsKIGNsYXNzIFZSUG9zZTsKIGNsYXNz
IFZSU3RhZ2VQYXJhbWV0ZXJzOwogc3RydWN0IFZSTGF5ZXJJbml0OwogCiBjbGFzcyBWUkRpc3Bs
YXkgOiBwdWJsaWMgUmVmQ291bnRlZDxWUkRpc3BsYXk+LCBwdWJsaWMgRXZlbnRUYXJnZXRXaXRo
SW5saW5lRGF0YSwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxWUkRpc3BsYXk+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Jik7CisgICAgc3Rh
dGljIFJlZjxWUkRpc3BsYXk+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgVlJQbGF0
Zm9ybURpc3BsYXkqKTsKIAogICAgIHZpcnR1YWwgflZSRGlzcGxheSgpOwogCkBAIC04Miw3ICs4
Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHN1Ym1pdEZyYW1lKCk7CiAKIHByaXZhdGU6Ci0gICAg
VlJEaXNwbGF5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsKKyAgICBWUkRpc3BsYXkoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIFZSUGxhdGZvcm1EaXNwbGF5Kik7CiAKICAgICAvLyBFdmVudFRh
cmdldAogICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gVlJEaXNwbGF5RXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOyB9
CkBAIC05OCw2ICs5OSwxMCBAQCBwcml2YXRlOgogCiAgICAgUmVmPFZSRGlzcGxheUNhcGFiaWxp
dGllcz4gbV9jYXBhYmlsaXRpZXM7CiAgICAgUmVmPFZSRXllUGFyYW1ldGVycz4gbV9leWVQYXJh
bWV0ZXJzOworCisgICAgVlJQbGF0Zm9ybURpc3BsYXkqIG1fZGlzcGxheTsKKworICAgIGNvbnN0
IFN0cmluZyBtX2Rpc3BsYXlOYW1lOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXlDYXBhYmlsaXRp
ZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXlDYXBhYmlsaXRp
ZXMuY3BwCmluZGV4IDQ4ODQ3Yzg3NmZkM2M2ZDZmNmM3ZjI3ODk3ZDczMTEyZTUzODVkMjguLjU3
NjU0NzhlNjVkNTRkZTU1NDMxMzY5OGIxMjVmZmM3YzNiZDJkZDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJEaXNwbGF5Q2FwYWJpbGl0aWVzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxheUNhcGFiaWxpdGllcy5jcHAKQEAg
LTI4LDMxICsyOCwzNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVZSRGlzcGxheUNhcGFi
aWxpdGllczo6VlJEaXNwbGF5Q2FwYWJpbGl0aWVzKCkgPSBkZWZhdWx0OworVlJEaXNwbGF5Q2Fw
YWJpbGl0aWVzOjpWUkRpc3BsYXlDYXBhYmlsaXRpZXModW5zaWduZWQgY2FwYWJpbGl0eUZsYWdz
KQoreworICAgIG1fZmxhZ3MgPSBjYXBhYmlsaXR5RmxhZ3M7Cit9CiAKIGJvb2wgVlJEaXNwbGF5
Q2FwYWJpbGl0aWVzOjpoYXNQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJldHVybiBtX2ZsYWdzICYgVlJEaXNwbGF5Q2FwYWJpbGl0eUZsYWdzOjpQb3NpdGlvbjsK
IH0KIAogYm9vbCBWUkRpc3BsYXlDYXBhYmlsaXRpZXM6Omhhc09yaWVudGF0aW9uKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fZmxhZ3MgJiBWUkRpc3BsYXlDYXBh
YmlsaXR5RmxhZ3M6Ok9yaWVudGF0aW9uOwogfQogCiBib29sIFZSRGlzcGxheUNhcGFiaWxpdGll
czo6aGFzRXh0ZXJuYWxEaXNwbGF5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIG1fZmxhZ3MgJiBWUkRpc3BsYXlDYXBhYmlsaXR5RmxhZ3M6OkV4dGVybmFsRGlzcGxh
eTsKIH0KIAogYm9vbCBWUkRpc3BsYXlDYXBhYmlsaXRpZXM6OmNhblByZXNlbnQoKSBjb25zdAog
ewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9mbGFncyAmIFZSRGlzcGxheUNhcGFi
aWxpdHlGbGFnczo6UHJlc2VudDsKIH0KIAogdW5zaWduZWQgVlJEaXNwbGF5Q2FwYWJpbGl0aWVz
OjptYXhMYXllcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNhblByZXNl
bnQoKSA/IDEgOiAwOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxheUNhcGFiaWxpdGllcy5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXlDYXBhYmlsaXRpZXMuaAppbmRleCA1
ODM4MTQ5OTk0OWQzMGFlYmQ4NGJiM2VjMzI0NDc3ZWI3MWI0OGUyLi41ZTQyMjYwZGJmNDM4YTdi
YzEyMGJhNDM3ODE4OGI4NTI5ZTM0NzcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnZyL1ZSRGlzcGxheUNhcGFiaWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2VidnIvVlJEaXNwbGF5Q2FwYWJpbGl0aWVzLmgKQEAgLTMyLDkgKzMyLDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBWUkRpc3BsYXlDYXBhYmlsaXRpZXMgOiBwdWJsaWMg
UmVmQ291bnRlZDxWUkRpc3BsYXlDYXBhYmlsaXRpZXM+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPFZSRGlzcGxheUNhcGFiaWxpdGllcz4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUmVmPFZSRGlz
cGxheUNhcGFiaWxpdGllcz4gY3JlYXRlKHVuc2lnbmVkIGNhcGFiaWxpdHlGbGFncykKICAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZSRGlzcGxheUNhcGFiaWxpdGllcyk7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZSRGlzcGxheUNhcGFiaWxpdGllcyhjYXBhYmls
aXR5RmxhZ3MpKTsKICAgICB9CiAKICAgICBib29sIGhhc1Bvc2l0aW9uKCkgY29uc3Q7CkBAIC00
NCw3ICs0NCw5IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBtYXhMYXllcigpIGNvbnN0OwogCiBw
cml2YXRlOgotICAgIFZSRGlzcGxheUNhcGFiaWxpdGllcygpOworICAgIFZSRGlzcGxheUNhcGFi
aWxpdGllcyh1bnNpZ25lZCBjYXBhYmlsaXR5RmxhZ3MpOworCisgICAgdW5zaWduZWQgbV9mbGFn
czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNWY2NTNm
ZGE4MDNjNDAxZmM4YjlkOTc1ZDJiN2ExNWI4OTM4NTI3Yy4uYmE4M2Q5MDQzOThkYWRkOTk2NDNh
YmEyN2QwYmJjZDkwYmVjZDU5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE3NDksNiArMTc0OSwxMCBA
QCBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHAKIHBsYXRmb3JtL3RleHQvVGV4dEVuY29k
aW5nRGV0ZWN0b3JJQ1UuY3BwCiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNw
cAogCitwbGF0Zm9ybS92ci9WUk1hbmFnZXIuY3BwCitwbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0
Zm9ybURpc3BsYXlPcGVuVlIuY3BwCitwbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybU1hbmFn
ZXJPcGVuVlIuY3BwCisKIHBsdWdpbnMvRE9NTWltZVR5cGUuY3BwCiBwbHVnaW5zL0RPTU1pbWVU
eXBlQXJyYXkuY3BwCiBwbHVnaW5zL0RPTVBsdWdpbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3ZyL1ZSTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS92ci9WUk1hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIzMzczNGQwODk4Y2JjZmUwZjMzZmE2ZWNl
NGJkNjlkZTk3MDBiYzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS92ci9WUk1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgSWdhbGlhLCBTLkwuIEFsbCByaWdodCByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJWUk1hbmFnZXIuaCIKKworI2luY2x1ZGUgIkpTVlJEaXNwbGF5Lmgi
CisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlZSUGxhdGZv
cm1EaXNwbGF5LmgiCisjaW5jbHVkZSAiVlJQbGF0Zm9ybU1hbmFnZXIuaCIKKworI2lmIFVTRShP
UEVOVlIpCisjaW5jbHVkZSAiVlJQbGF0Zm9ybU1hbmFnZXJPcGVuVlIuaCIKKyNlbmRpZgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1ZSTWFuYWdlciYgVlJNYW5hZ2VyOjpzaW5nbGV0b24oKQor
eworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxWUk1hbmFnZXI+IGluc3RhbmNlOworICAgIHJl
dHVybiBpbnN0YW5jZTsKK30KKworVlJNYW5hZ2VyOjpWUk1hbmFnZXIoKQoreworI2lmIFVTRShP
UEVOVlIpCisgICAgbV9wbGF0Zm9ybU1hbmFnZXIgPSBWUlBsYXRmb3JtTWFuYWdlck9wZW5WUjo6
Y3JlYXRlKCk7CisjZW5kaWYKK30KKworVlJNYW5hZ2VyOjp+VlJNYW5hZ2VyKCkKK3sKKyAgICBt
X3Byb21pc2VUYXNrUXVldWUuY2xvc2UoKTsKKyAgICBtX3BsYXRmb3JtTWFuYWdlciA9IG51bGxw
dHI7Cit9CisKK3ZvaWQgVlJNYW5hZ2VyOjpyZWZyZXNoVlJEZXZpY2VzKEdldFZSRGlzcGxheXNQ
cm9taXNlJiYgcHJvbWlzZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKK3sKKyAg
ICBpZiAoIW1fcGxhdGZvcm1NYW5hZ2VyKQorICAgICAgICBwcm9taXNlLnJlamVjdChJbnZhbGlk
U3RhdGVFcnJvcik7CisKKyAgICBtX2dldERpc3BsYXlzUHJvbWlzZXMuYXBwZW5kKFdURk1vdmUo
cHJvbWlzZSkpOworCisgICAgaWYgKG1fcHJvbWlzZVRhc2tRdWV1ZS5oYXNQZW5kaW5nVGFza3Mo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IHByb3RlY3QgY29udGV4dD8/Pwor
ICAgIG1fcHJvbWlzZVRhc2tRdWV1ZS5lbnF1ZXVlVGFzayhbdGhpcywgcHJvbWlzZXMgPSBXVEZN
b3ZlKG1fZ2V0RGlzcGxheXNQcm9taXNlcyksIGNvbnRleHRdICgpIG11dGFibGUgeworICAgICAg
ICBWZWN0b3I8VlJQbGF0Zm9ybURpc3BsYXkqPiBwbGF0Zm9ybURpc3BsYXlzID0gbV9wbGF0Zm9y
bU1hbmFnZXItPmdldFZSRGlzcGxheXMoKTsKKyAgICAgICAgVmVjdG9yPFJlZjxWUkRpc3BsYXk+
PiBkaXNwbGF5czsKKyAgICAgICAgZm9yIChhdXRvIHBsYXRmb3JtRGlzcGxheSA6IHBsYXRmb3Jt
RGlzcGxheXMpCisgICAgICAgICAgICBkaXNwbGF5cy5hcHBlbmQoVlJEaXNwbGF5OjpjcmVhdGUo
KmNvbnRleHQsIHBsYXRmb3JtRGlzcGxheSkpOworICAgICAgICBmb3IgKGF1dG8mIGRlZmVycmVk
UHJvbWlzZSA6IHByb21pc2VzKQorICAgICAgICAgICAgZGVmZXJyZWRQcm9taXNlLnJlc29sdmUo
ZGlzcGxheXMpOworICAgICAgICB9KTsKKworfQorCit9OyAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdnIvVlJNYW5hZ2VyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9WUk1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iOTY3ZjIxMDMx
MWQ5MTgxYTc1MTNkNjg3OWRkZTI0ZDUzZmEyMjgxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdnIvVlJNYW5hZ2VyLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEsIFMuTC4gQWxsIHJpZ2h0IHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJHZW5lcmljVGFza1F1ZXVlLmgiCisjaW5jbHVkZSAi
SlNET01Qcm9taXNlRGVmZXJyZWQuaCIKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFZSRGlzcGxheTsKK2NsYXNzIFZSUGxhdGZvcm1NYW5h
Z2VyOworCitjbGFzcyBWUk1hbmFnZXIgZmluYWwgeworICAgIGZyaWVuZCBjbGFzcyBXVEY6Ok5l
dmVyRGVzdHJveWVkPFZSTWFuYWdlcj47CitwdWJsaWM6CisgICAgdXNpbmcgR2V0VlJEaXNwbGF5
c1Byb21pc2UgPSBET01Qcm9taXNlRGVmZXJyZWQ8SURMU2VxdWVuY2U8SURMSW50ZXJmYWNlPFZS
RGlzcGxheT4+PjsKKworICAgIH5WUk1hbmFnZXIoKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBWUk1hbmFnZXImIHNpbmdsZXRvbigpOworCisgICAgdm9pZCByZWZyZXNoVlJEZXZpY2Vz
KEdldFZSRGlzcGxheXNQcm9taXNlJiYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKworcHJp
dmF0ZToKKyAgICBWUk1hbmFnZXIoKTsKKworICAgIFZlY3RvcjxHZXRWUkRpc3BsYXlzUHJvbWlz
ZSwgMT4gbV9nZXREaXNwbGF5c1Byb21pc2VzOworICAgIEdlbmVyaWNUYXNrUXVldWU8VGltZXI+
IG1fcHJvbWlzZVRhc2tRdWV1ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VlJQbGF0Zm9ybU1hbmFn
ZXI+IG1fcGxhdGZvcm1NYW5hZ2VyOworfTsKKworfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL1ZSUGxhdGZvcm1EaXNwbGF5Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9WUlBsYXRmb3JtRGlzcGxheS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmU1YmI2ZWUzY2NiZmEzYjZjOTg2YTkxOGU0YzFhMTYwMjFjZDU2MjkKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9WUlBsYXRmb3JtRGlzcGxheS5oCkBA
IC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggSWdhbGlhLCBTLkwuIEFs
bCByaWdodCByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmxvYXRQb2lu
dDNELmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlJlY3RFZGdlcy5oIgorCisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
ZW51bSBWUkRpc3BsYXlDYXBhYmlsaXR5RmxhZ3MgeworICAgIE5vbmUgPSAwLAorICAgIFBvc2l0
aW9uID0gMSA8PCAxLAorICAgIE9yaWVudGF0aW9uID0gMSA8PCAyLAorICAgIEV4dGVybmFsRGlz
cGxheSA9IDEgPDwgMywKKyAgICBQcmVzZW50ID0gMSA8PCA0Cit9OworCisvKiBUaGUgcHVycG9z
ZSBvZiB0aGlzIGNsYXNzIGlzIHRvIGVuY2Fwc3VsYXRlIGFsbCB0aGUgaW5mbyBhYm91dCB0aGUg
ZGlzcGxheSBpbiBhIHNpbmdsZSBjbGFzcy9kYXRhCisgKiBzdHJ1Y3R1cmUuIFRoaXMgd2F5IHdl
IHdvdWxkbid0IGhhdmUgdG8gcmVwbGljYXRlIGFsbCB0aGUgQVBJIGNhbGxzIG9mIFZSRGlzcGxh
eSBpbgorICogVlJQbGF0Zm9ybURpc3BsYXkuIEFsc28gdGhlIGNsaWVudCBvZiB0aGlzIEFQSSB3
b3VsZCBvbmx5IGhhdmUgdG8gaXNzdWUgYSBzaW5nbGUgY2FsbCB0byBnZXQgYWxsCisgKiB0aGUg
aW5mbyBmcm9tIHRoZSBkaXNwbGF5LiBOb3RlIHRoYXQgaXQncyBmYWlybHkgdW5saWtlbHkgdGhh
dCBhIFZSIGFwcGxpY2F0aW9uIHdvdWxkIG9ubHkKKyAqIHJlcXVpcmUganVzdCBhIGZldyBwaWVj
ZXMgb2YgaW5mb3JtYXRpb24gZnJvbSB0aGUgZGV2aWNlLgorKi8KK3N0cnVjdCBWUlBsYXRmb3Jt
RGlzcGxheUluZm8geworICAgIFN0cmluZyBkaXNwbGF5TmFtZTsKKyAgICBib29sIGlzQ29ubmVj
dGVkOworICAgIGJvb2wgaXNNb3VudGVkOworICAgIHVuc2lnbmVkIGNhcGFiaWxpdHlGbGFnczsK
K307CisKK2NsYXNzIFZSUGxhdGZvcm1EaXNwbGF5IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIFZS
UGxhdGZvcm1EaXNwbGF5SW5mbyBnZXREaXNwbGF5SW5mbygpID0gMDsKKworcHJpdmF0ZToKK307
CisKK307IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS92ci9WUlBsYXRmb3JtTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dnIvVlJQbGF0Zm9ybU1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZDEyOGYxZDkwNjMyOTZhNGNmOGRi
YzRiOTc2ZjFkMmQyNWEyM2VkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdnIvVlJQbGF0Zm9ybU1hbmFnZXIuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IElnYWxpYSwgUy5MLiBBbGwgcmlnaHQgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkpTRE9NUHJvbWlzZURlZmVycmVkLmgiCisjaW5jbHVkZSAi
VlJQbGF0Zm9ybURpc3BsYXkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBWUkRp
c3BsYXk7CisKK2NsYXNzIFZSUGxhdGZvcm1NYW5hZ2VyIHsKK3B1YmxpYzoKKyAgICB1c2luZyBH
ZXRWUkRldmljZXNQcm9taXNlID0gRE9NUHJvbWlzZURlZmVycmVkPElETFNlcXVlbmNlPElETElu
dGVyZmFjZTxWUkRpc3BsYXk+Pj47CisKKyAgICB2aXJ0dWFsIFZlY3RvcjxWUlBsYXRmb3JtRGlz
cGxheSo+IGdldFZSRGlzcGxheXMoKSA9IDA7Cit9OworCit9OyAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZv
cm1EaXNwbGF5T3BlblZSLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL29wZW52ci9W
UlBsYXRmb3JtRGlzcGxheU9wZW5WUi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzNhZjdhMjI5YTkwNTgwZTRk
NTAzZTZjMGE5NWJhZjEyZjIwZGQxZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5WUi5jcHAKQEAgLTAsMCAr
MSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEsIFMuTC4gQWxsIHJpZ2h0
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlZSUGxhdGZvcm1E
aXNwbGF5T3BlblZSLmgiCisKKyNpZiBVU0UoT1BFTlZSKQorCisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1ZSUGxhdGZvcm1EaXNw
bGF5T3BlblZSOjpWUlBsYXRmb3JtRGlzcGxheU9wZW5WUih2cjo6SVZSU3lzdGVtKiBWUlN5c3Rl
bSwgdnI6OklWUkNoYXBlcm9uZSogVlJDaGFwZXJvbmUsIHZyOjpJVlJDb21wb3NpdG9yKiBWUkNv
bXBvc2l0b3IpCisgICAgOiBtX3N5c3RlbShWUlN5c3RlbSkKKyAgICAsIG1fY2hhcGVyb25lKFZS
Q2hhcGVyb25lKQorICAgICwgbV9jb21wb3NpdG9yKFZSQ29tcG9zaXRvcikKK3sKKyAgICBtX2Rp
c3BsYXlJbmZvLmlzQ29ubmVjdGVkID0gbV9zeXN0ZW0tPklzVHJhY2tlZERldmljZUNvbm5lY3Rl
ZCh2cjo6a191blRyYWNrZWREZXZpY2VJbmRleF9IbWQpOworCisgICAgU3RyaW5nQnVpbGRlciBz
dHJpbmdCdWlsZGVyOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiT3BlblZSIEhN
RCIpOworICAgIGNoYXIgSE1ETmFtZVsxMjhdOworICAgIGlmIChhdXRvIGxlbmd0aCA9IG1fc3lz
dGVtLT5HZXRTdHJpbmdUcmFja2VkRGV2aWNlUHJvcGVydHkodnI6OmtfdW5UcmFja2VkRGV2aWNl
SW5kZXhfSG1kLCB2cjo6UHJvcF9NYW51ZmFjdHVyZXJOYW1lX1N0cmluZywgSE1ETmFtZSwgMTI4
KSkgeworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICgiKTsKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoSE1ETmFtZSwgbGVuZ3RoKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoJyknKTsKKyAgICB9CisgICAgbV9kaXNwbGF5SW5mby5kaXNwbGF5TmFtZSA9IHN0cmlu
Z0J1aWxkZXIudG9TdHJpbmcoKTsKKworICAgIG1fZGlzcGxheUluZm8uaXNNb3VudGVkID0gZmFs
c2U7CisgICAgLy8gRklYTUU6IFdlJ3JlIGFzc3VtaW5nIGFuIEhUQyBWaXZlIEhNRCBoZXJlLiBH
ZXQgdGhpcyBpbmZvIGZyb20gT3BlblZSPy4KKyAgICBtX2Rpc3BsYXlJbmZvLmNhcGFiaWxpdHlG
bGFncyA9IFZSRGlzcGxheUNhcGFiaWxpdHlGbGFnczo6Tm9uZSB8CisgICAgICAgIFZSRGlzcGxh
eUNhcGFiaWxpdHlGbGFnczo6UG9zaXRpb24gfAorICAgICAgICBWUkRpc3BsYXlDYXBhYmlsaXR5
RmxhZ3M6Ok9yaWVudGF0aW9uIHwKKyAgICAgICAgVlJEaXNwbGF5Q2FwYWJpbGl0eUZsYWdzOjpF
eHRlcm5hbERpc3BsYXkgfAorICAgICAgICBWUkRpc3BsYXlDYXBhYmlsaXR5RmxhZ3M6OlByZXNl
bnQ7Cit9CisKK307IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoT1BFTlZS
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZv
cm1EaXNwbGF5T3BlblZSLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9vcGVudnIvVlJQ
bGF0Zm9ybURpc3BsYXlPcGVuVlIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYzA4NWQ5ZGU3NGFjMDM0YWZlZDJm
YmQxOTBmZjk5MjY5ZGQ1NTQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmgKQEAgLTAsMCArMSw0OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEsIFMuTC4gQWxsIHJpZ2h0IHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoT1BFTlZSKQorCisjaW5jbHVkZSAiVlJQ
bGF0Zm9ybURpc3BsYXkuaCIKKworI2luY2x1ZGUgPG9wZW52ci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFZSUGxhdGZvcm1EaXNwbGF5T3BlblZSIDogcHVibGljIFZSUGxhdGZv
cm1EaXNwbGF5IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBWUlBsYXRmb3JtRGlzcGxheU9wZW5W
Uih2cjo6SVZSU3lzdGVtKiwgdnI6OklWUkNoYXBlcm9uZSosIHZyOjpJVlJDb21wb3NpdG9yKik7
CisKKyAgICB+VlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIoKTsKKworICAgIFZSUGxhdGZvcm1EaXNw
bGF5SW5mbyBnZXREaXNwbGF5SW5mbygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fZGlzcGxheUluZm87
IH0KKworcHJpdmF0ZToKKyAgICB2cjo6SVZSU3lzdGVtICptX3N5c3RlbTsKKyAgICB2cjo6SVZS
Q2hhcGVyb25lICptX2NoYXBlcm9uZTsKKyAgICB2cjo6SVZSQ29tcG9zaXRvciAqbV9jb21wb3Np
dG9yOworCisgICAgVlJQbGF0Zm9ybURpc3BsYXlJbmZvIG1fZGlzcGxheUluZm87Cit9OworCit9
OyAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKE9QRU5WUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtTWFuYWdlck9w
ZW5WUi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybU1h
bmFnZXJPcGVuVlIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFhNTY1NTYwYTdmNmYyMTcxNzYwMWMyYzk4MmYy
MTliMDExNTQ2NzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92
ci9vcGVudnIvVlJQbGF0Zm9ybU1hbmFnZXJPcGVuVlIuY3BwCkBAIC0wLDAgKzEsOTIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhLCBTLkwuIEFsbCByaWdodCByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWUlBsYXRmb3JtTWFuYWdlck9wZW5W
Ui5oIgorCisjaW5jbHVkZSAiVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIuaCIKKworI2lmIFVTRShP
UEVOVlIpCisKKyNpbmNsdWRlICJKU1ZSRGlzcGxheS5oIgorI2luY2x1ZGUgIlZSRGlzcGxheS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSB2cjsKKworc3RkOjp1
bmlxdWVfcHRyPFZSUGxhdGZvcm1NYW5hZ2VyT3BlblZSPiBWUlBsYXRmb3JtTWFuYWdlck9wZW5W
Ujo6Y3JlYXRlKCkKK3sKKyAgICBpZiAoIVZSX0lzUnVudGltZUluc3RhbGxlZCgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFZSUGxhdGZv
cm1NYW5hZ2VyT3BlblZSPigpOworfQorCitWUlBsYXRmb3JtTWFuYWdlck9wZW5WUjo6VlJQbGF0
Zm9ybU1hbmFnZXJPcGVuVlIoKQoreworfQorCitWUlBsYXRmb3JtTWFuYWdlck9wZW5WUjo6flZS
UGxhdGZvcm1NYW5hZ2VyT3BlblZSKCkKK3sKKyAgICBWUl9TaHV0ZG93bigpOworfQorCitib29s
IFZSUGxhdGZvcm1NYW5hZ2VyT3BlblZSOjppbml0T3BlblZSKCkKK3sKKyAgICBIbWRFcnJvciBl
cnJvcjsKKyAgICBtX3N5c3RlbSA9IFZSX0luaXQoJmVycm9yLCBWUkFwcGxpY2F0aW9uX1NjZW5l
KTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0
cnVlOworfQorCitWZWN0b3I8VlJQbGF0Zm9ybURpc3BsYXkqPiBWUlBsYXRmb3JtTWFuYWdlck9w
ZW5WUjo6Z2V0VlJEaXNwbGF5cygpCit7CisgICAgLy8gUXVpY2tseSBjaGVjayBmb3IgSE1Ecy4g
TXVjaCBmYXN0ZXIgdGhhbiBpbml0aWFsaXppbmcgdGhlIHdob2xlIE9wZW5WUiBBUEkuCisgICAg
aWYgKCFWUl9Jc0htZFByZXNlbnQoKSkgeworICAgICAgICBtX3N5c3RlbSA9IG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgaWYgKCFtX3N5c3RlbSAmJiAhaW5pdE9w
ZW5WUigpKSB7CisgICAgICAgIG1fc3lzdGVtID0gbnVsbHB0cjsKKyAgICAgICAgVlJfU2h1dGRv
d24oKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBIbWRFcnJvciBlcnJvcjsK
KyAgICBJVlJDaGFwZXJvbmUqIGNoYXBlcm9uZSA9IHN0YXRpY19jYXN0PElWUkNoYXBlcm9uZSo+
KFZSX0dldEdlbmVyaWNJbnRlcmZhY2UoSVZSQ2hhcGVyb25lX1ZlcnNpb24sICZlcnJvcikpOwor
ICAgIGlmIChlcnJvciB8fCAhY2hhcGVyb25lKQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
SVZSQ29tcG9zaXRvciogY29tcG9zaXRvciA9IHN0YXRpY19jYXN0PElWUkNvbXBvc2l0b3IqPihW
Ul9HZXRHZW5lcmljSW50ZXJmYWNlKElWUkNvbXBvc2l0b3JfVmVyc2lvbiwgJmVycm9yKSk7Cisg
ICAgaWYgKGVycm9yIHx8ICFjb21wb3NpdG9yKQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
VmVjdG9yPFZSUGxhdGZvcm1EaXNwbGF5Kj4gZGlzcGxheXM7CisgICAgZGlzcGxheXMuYXBwZW5k
KG5ldyBWUlBsYXRmb3JtRGlzcGxheU9wZW5WUihtX3N5c3RlbSwgY2hhcGVyb25lLCBjb21wb3Np
dG9yKSk7CisgICAgcmV0dXJuIGRpc3BsYXlzOworfQorCit9OyAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gVVNFKE9QRU5WUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtTWFuYWdlck9wZW5WUi5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1NYW5hZ2VyT3BlblZSLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOTk5YzViZDhiZDEzNTZmODg0ZmMwMDRiMWRkNDAxYzg1ZjU3MGU3MQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtTWFuYWdl
ck9wZW5WUi5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdh
bGlhLCBTLkwuIEFsbCByaWdodCByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNF
KE9QRU5WUikKKworI2luY2x1ZGUgIlZSUGxhdGZvcm1NYW5hZ2VyLmgiCisKKyNpbmNsdWRlIDxv
cGVudnIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBWUlBsYXRmb3JtTWFuYWdl
ck9wZW5WUiA6IHB1YmxpYyBWUlBsYXRmb3JtTWFuYWdlciB7CitwdWJsaWM6CisgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxWUlBsYXRmb3JtTWFuYWdlck9wZW5WUj4gY3JlYXRlKCk7CisgICAg
ZXhwbGljaXQgVlJQbGF0Zm9ybU1hbmFnZXJPcGVuVlIoKTsKKworICAgIFZlY3RvcjxWUlBsYXRm
b3JtRGlzcGxheSo+IGdldFZSRGlzcGxheXMoKSBvdmVycmlkZTsKKworICAgIH5WUlBsYXRmb3Jt
TWFuYWdlck9wZW5WUigpOworcHJpdmF0ZToKKyAgICBib29sIGluaXRPcGVuVlIoKTsKKworICAg
IHZyOjpJVlJTeXN0ZW0qIG1fc3lzdGVtIHsgbnVsbHB0ciB9OworfTsKKworfTsgLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShPUEVOVlIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>333598</attachid>
            <date>2018-02-12 09:23:24 -0800</date>
            <delta_ts>2018-02-16 02:19:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-182692-20180212182321.patch</filename>
            <type>text/plain</type>
            <size>36757</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI3Nzg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTY1ODVmMmUyNTAyMTQ0
Yjk4NmNhYzI5OTdhYTFiNzM1ZDhjZWU4Yy4uNWIwN2NiNDIyMzZhYzZjZDgzZDJkZGMxMjE2NmVi
MTY3MzY1MmI1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDE4LTAyLTEyICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtXZWJWUl1b
T3BlblZSXSBJbXBsZW1lbnQgZ2V0VlJEaXNwbGF5cygpCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODI2OTIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBwbGF0Zm9ybS92ci8gZmlsZXMgdG8gdGhl
IGJ1aWxkIHN5c3RlbS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKworMjAxOC0wMi0xMiAgU2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlh
LmNvbT4KKworICAgICAgICBbV2ViVlJdW09wZW5WUl0gSW1wbGVtZW50IGdldFZSRGlzcGxheXMo
KQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgyNjky
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
cm92aWRlcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBOYXZpZ2F0b3IncyBnZXRWUkRpc3BsYXlzKCkK
KyAgICAgICAgbWV0aG9kIHVzaW5nIE9wZW5WUiBhcyBiYWNrZW5kLiBJdCBxdWV1ZXMgc2V2ZXJh
bCBwcm9taXNlcyBpbgorICAgICAgICBhIHF1ZXVlIGFuZCByZXNvbHZlcyB0aGVtIGFsbCBqdXN0
IG9uY2UuIFRoZSBpbmZvcm1hdGlvbiByZXRyaWV2ZWQKKyAgICAgICAgaXMgdmVyeSBtaW5pbWFs
IGZvciB0aGUgdGltZSBiZWluZywgYnV0IHRoaXMgY2hhbmdlIGxheXMgdGhlIGdyb3VuZAorICAg
ICAgICBmb3IgYWxsIHRoZSBjaGFuZ2VzIHRoYXQgYXJlIGFib3V0IHRvIGxhbmQuCisKKyAgICAg
ICAgVGhlIFZSIGNvZGUgdXNlcyBhIFZSTWFuYWdlciB3aGljaCBpcyB0aGUgaW50ZXJmYWNlIHdp
dGggdGhlCisgICAgICAgIHBsYXRmb3JtIGNvZGUgYW5kIHRoZSByZXNwb25zaWJsZSBmb3IgaW5z
dGFudGlhdGluZyB0aGUgcmlnaHQKKyAgICAgICAgcGxhdGZvcm0gY29kZS4gVGhpcyBwbGF0Zm9y
bSBjb2RlIGlzIGN1cnJlbnRseSBiZWluZyBpbXBsZW1lbnRlZAorICAgICAgICB1c2luZyBPcGVu
VlIgYnV0IGNvdWxkIHdlIGFsc28gcG9ydGVkIGluIHRoZSBmdXR1cmUgdG8gT3BlblhSIG9yIGFu
eQorICAgICAgICBvdGhlciBWUiBTREsuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYnZyL05hdmlnYXRvcldlYlZSLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok5hdmlnYXRvcldlYlZSOjpnZXRWUkRpc3BsYXlzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5h
dmlnYXRvcldlYlZSOjp2ckVuYWJsZWQpOgorICAgICAgICAqIE1vZHVsZXMvd2VidnIvTmF2aWdh
dG9yV2ViVlIuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYnZyL1ZSRGlzcGxheS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpWUkRpc3BsYXk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWUkRp
c3BsYXk6OlZSRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpWUkRpc3BsYXk6OmlzQ29ubmVj
dGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheTo6ZGlzcGxheU5hbWUgY29u
c3QpOgorICAgICAgICAqIE1vZHVsZXMvd2VidnIvVlJEaXNwbGF5Lmg6CisgICAgICAgICogTW9k
dWxlcy93ZWJ2ci9WUkRpc3BsYXlDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VlJEaXNwbGF5Q2FwYWJpbGl0aWVzOjpWUkRpc3BsYXlDYXBhYmlsaXRpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6VlJEaXNwbGF5Q2FwYWJpbGl0aWVzOjpoYXNQb3NpdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpWUkRpc3BsYXlDYXBhYmlsaXRpZXM6Omhhc09yaWVudGF0aW9uIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheUNhcGFiaWxpdGllczo6aGFzRXh0ZXJuYWxE
aXNwbGF5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheUNhcGFiaWxpdGllczo6
Y2FuUHJlc2VudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpWUkRpc3BsYXlDYXBhYmlsaXRp
ZXM6Om1heExheWVyIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnZyL1ZSRGlzcGxheUNh
cGFiaWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6VlJEaXNwbGF5Q2FwYWJpbGl0aWVzOjpj
cmVhdGUpOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIHBsYXRmb3JtL3ZyL1ZS
TWFuYWdlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VlJNYW5hZ2VyOjpzaW5nbGV0
b24pOgorICAgICAgICAoV2ViQ29yZTo6VlJNYW5hZ2VyOjpWUk1hbmFnZXIpOgorICAgICAgICAo
V2ViQ29yZTo6VlJNYW5hZ2VyOjp+VlJNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlZSTWFu
YWdlcjo6cmVmcmVzaFZSRGV2aWNlcyk6CisgICAgICAgICogcGxhdGZvcm0vdnIvVlJNYW5hZ2Vy
Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3ZyL1ZSUGxhdGZvcm1EaXNwbGF5Lmg6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3ZyL1ZSUGxhdGZvcm1NYW5hZ2VyLmg6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5WUi5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VlJQbGF0Zm9ybURpc3BsYXlPcGVuVlI6OlZSUGxh
dGZvcm1EaXNwbGF5T3BlblZSKToKKyAgICAgICAgKiBwbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0
Zm9ybURpc3BsYXlPcGVuVlIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vdnIvb3BlbnZy
L1ZSUGxhdGZvcm1NYW5hZ2VyT3BlblZSLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpW
UlBsYXRmb3JtTWFuYWdlck9wZW5WUjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlZSUGxh
dGZvcm1NYW5hZ2VyT3BlblZSOjpWUlBsYXRmb3JtTWFuYWdlck9wZW5WUik6CisgICAgICAgIChX
ZWJDb3JlOjpWUlBsYXRmb3JtTWFuYWdlck9wZW5WUjo6flZSUGxhdGZvcm1NYW5hZ2VyT3BlblZS
KToKKyAgICAgICAgKFdlYkNvcmU6OlZSUGxhdGZvcm1NYW5hZ2VyT3BlblZSOjppbml0T3BlblZS
KToKKyAgICAgICAgKiBwbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybU1hbmFnZXJPcGVuVlIu
aDogQWRkZWQuCisKIDIwMTgtMDEtMzAgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29t
PgogCiAgICAgICAgIEF2b2lkIHRyYXZlcnNpbmcgdG9vIG11Y2ggd2hlbiBkb2luZyBjbGFzcyBj
aGFuZ2UgaW52YWxpZGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDQ5N2I0ZGQyYTQ4YTM2
MGM0YjVkOTEzMTI4Y2VkYjczOGVhYTVmYmQuLmU3NmYwMDZiNzc4YzkzN2QzMTUyMWQ0OTRlZTBm
YTQxMzI3ZWMzNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMTgsNiArMTE4LDcgQEAgc2V0
KFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9y
bS9zcWwiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3RleHQiCiAgICAgIiR7V0VCQ09S
RV9ESVJ9L3BsYXRmb3JtL3RleHQvaWN1IgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS92
ciIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGx1Z2lucyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcmVu
ZGVyaW5nIgogICAgICIke1dFQkNPUkVfRElSfS9yZW5kZXJpbmcvbGluZSIKQEAgLTE1MjcsNiAr
MTUyOCw3IEBAIGVuZGlmICgpCiAKIGlmIChVU0VfT1BFTlZSKQogICBsaXN0KEFQUEVORCBXZWJD
b3JlX0lOQ0xVREVfRElSRUNUT1JJRVMgIiR7VEhJUkRQQVJUWV9ESVJ9L29wZW52ci9oZWFkZXJz
IikKKyAgbGlzdChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTICIke1dFQkNPUkVf
RElSfS9wbGF0Zm9ybS92ci9vcGVudnIiKQogICBsaXN0KEFQUEVORCBXZWJDb3JlX0xJQlJBUklF
UyBvcGVudnJfYXBpKQogZW5kaWYgKCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJ2ci9OYXZpZ2F0b3JXZWJWUi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YnZyL05hdmlnYXRvcldlYlZSLmNwcAppbmRleCBlY2I1NDExOTIyNTc0NGYyYmE5ZDQ0NmI1OGM3
M2UwMTc5NTA0YWY0Li41ODUwMzEzMTczMzJhZDYzN2RlODRiNDU4OWU5ZjczNjg5MTA4OWE2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL05hdmlnYXRvcldlYlZSLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL05hdmlnYXRvcldlYlZSLmNwcApA
QCAtMjYsMTIgKzI2LDIyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTmF2aWdh
dG9yV2ViVlIuaCIKIAorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJOYXZpZ2F0b3IuaCIKICNpbmNsdWRlICJWUkRpc3BsYXkuaCIKKyNpbmNsdWRl
ICJWUk1hbmFnZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIE5hdmlnYXRvcldl
YlZSOjpnZXRWUkRpc3BsYXlzKE5hdmlnYXRvciYsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpCit2
b2lkIE5hdmlnYXRvcldlYlZSOjpnZXRWUkRpc3BsYXlzKE5hdmlnYXRvciYgbmF2aWdhdG9yLCBH
ZXRWUkRpc3BsYXlzUHJvbWlzZSYmIHByb21pc2UpCiB7CisgICAgaWYgKCF2ckVuYWJsZWQobmF2
aWdhdG9yKSkgeworICAgICAgICBwcm9taXNlLnJlamVjdCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgVlJNYW5hZ2VyOjpzaW5nbGV0b24oKS5yZWZyZXNoVlJEZXZpY2VzKFdURk1v
dmUocHJvbWlzZSksIG5hdmlnYXRvci5mcmFtZSgpLT5kb2N1bWVudCgpKTsKIH0KIAogY29uc3Qg
VmVjdG9yPFJlZlB0cjxWUkRpc3BsYXk+PiYgTmF2aWdhdG9yV2ViVlI6OmFjdGl2ZVZSRGlzcGxh
eXMoTmF2aWdhdG9yJikKQEAgLTQyLDcgKzUyLDcgQEAgY29uc3QgVmVjdG9yPFJlZlB0cjxWUkRp
c3BsYXk+PiYgTmF2aWdhdG9yV2ViVlI6OmFjdGl2ZVZSRGlzcGxheXMoTmF2aWdhdG9yJikKIAog
Ym9vbCBOYXZpZ2F0b3JXZWJWUjo6dnJFbmFibGVkKE5hdmlnYXRvciYpCiB7Ci0gICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL05hdmlnYXRvcldlYlZSLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL05hdmlnYXRvcldlYlZSLmgKaW5kZXggZmUx
NTc2OTc3NDVlMGRmYTk3YTUwYTFjMGQ0ZGQ4YTUxOGJjYzA0OC4uNzA5Nzg5MTI5ZmExMTE0YTc5
OGIzMmQwY2I1Njk1ZGVjMjA0ZmM2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJ2ci9OYXZpZ2F0b3JXZWJWUi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
dnIvTmF2aWdhdG9yV2ViVlIuaApAQCAtMzcsNyArMzcsOSBAQCBjbGFzcyBWUkRpc3BsYXk7CiAK
IGNsYXNzIE5hdmlnYXRvcldlYlZSIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnQ8UGFnZT4gewog
cHVibGljOgotICAgIHN0YXRpYyB2b2lkIGdldFZSRGlzcGxheXMoTmF2aWdhdG9yJiwgUmVmPERl
ZmVycmVkUHJvbWlzZT4mJik7CisgICAgdXNpbmcgR2V0VlJEaXNwbGF5c1Byb21pc2UgPSBET01Q
cm9taXNlRGVmZXJyZWQ8SURMU2VxdWVuY2U8SURMSW50ZXJmYWNlPFZSRGlzcGxheT4+PjsKKwor
ICAgIHN0YXRpYyB2b2lkIGdldFZSRGlzcGxheXMoTmF2aWdhdG9yJiwgR2V0VlJEaXNwbGF5c1By
b21pc2UmJik7CiAgICAgc3RhdGljIGNvbnN0IFZlY3RvcjxSZWZQdHI8VlJEaXNwbGF5Pj4mIGFj
dGl2ZVZSRGlzcGxheXMoTmF2aWdhdG9yJik7CiAgICAgc3RhdGljIGJvb2wgdnJFbmFibGVkKE5h
dmlnYXRvciYpOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIv
VlJEaXNwbGF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJEaXNwbGF5LmNw
cAppbmRleCAzYTUyNzBhOWY1ODc1YWVjNjc4MzRjMGIzNzNhY2JjNTc3OWYwZGIyLi4zYmU5NmZk
YzdjMmZjNTc1NTQyMzFlZGFjMDc1OWM0NDIzOWQ5ZDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJ2ci9WUkRpc3BsYXkuY3BwCkBAIC0yOSwyMSArMjksMjQgQEAKICNpbmNsdWRlICJW
UkRpc3BsYXlDYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJWUkV5ZVBhcmFtZXRlcnMuaCIKICNp
bmNsdWRlICJWUkxheWVySW5pdC5oIgorI2luY2x1ZGUgIlZSUGxhdGZvcm1EaXNwbGF5LmgiCiAj
aW5jbHVkZSAiVlJQb3NlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPFZSRGlzcGxh
eT4gVlJEaXNwbGF5OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkKK1Jl
ZjxWUkRpc3BsYXk+IFZSRGlzcGxheTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNv
bnRleHQsIFZSUGxhdGZvcm1EaXNwbGF5KiBwbGF0Zm9ybURpc3BsYXkpCiB7Ci0gICAgYXV0byBk
aXNwbGF5ID0gYWRvcHRSZWYoKm5ldyBWUkRpc3BsYXkoY29udGV4dCkpOworICAgIGF1dG8gZGlz
cGxheSA9IGFkb3B0UmVmKCpuZXcgVlJEaXNwbGF5KGNvbnRleHQsIHBsYXRmb3JtRGlzcGxheSkp
OwogICAgIGRpc3BsYXktPnN1c3BlbmRJZk5lZWRlZCgpOwogICAgIHJldHVybiBkaXNwbGF5Owog
fQogCi1WUkRpc3BsYXk6OlZSRGlzcGxheShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0
KQorVlJEaXNwbGF5OjpWUkRpc3BsYXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwg
VlJQbGF0Zm9ybURpc3BsYXkqIHBsYXRmb3JtRGlzcGxheSkKICAgICA6IEFjdGl2ZURPTU9iamVj
dCgmY29udGV4dCkKLSAgICAsIG1fY2FwYWJpbGl0aWVzKFZSRGlzcGxheUNhcGFiaWxpdGllczo6
Y3JlYXRlKCkpCisgICAgLCBtX2NhcGFiaWxpdGllcyhWUkRpc3BsYXlDYXBhYmlsaXRpZXM6OmNy
ZWF0ZShwbGF0Zm9ybURpc3BsYXktPmdldERpc3BsYXlJbmZvKCkuY2FwYWJpbGl0eUZsYWdzKSkK
ICAgICAsIG1fZXllUGFyYW1ldGVycyhWUkV5ZVBhcmFtZXRlcnM6OmNyZWF0ZSgpKQorICAgICwg
bV9kaXNwbGF5KHBsYXRmb3JtRGlzcGxheSkKKyAgICAsIG1fZGlzcGxheU5hbWUocGxhdGZvcm1E
aXNwbGF5LT5nZXREaXNwbGF5SW5mbygpLmRpc3BsYXlOYW1lKQogewogfQogCkBAIC01MSw3ICs1
NCw3IEBAIFZSRGlzcGxheTo6flZSRGlzcGxheSgpID0gZGVmYXVsdDsKIAogYm9vbCBWUkRpc3Bs
YXk6OmlzQ29ubmVjdGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IG1fZGlzcGxheS0+Z2V0RGlzcGxheUluZm8oKS5pc0Nvbm5lY3RlZDsKIH0KIAogYm9vbCBWUkRp
c3BsYXk6OmlzUHJlc2VudGluZygpIGNvbnN0CkBAIC04MSw3ICs4NCw3IEBAIHVuc2lnbmVkIFZS
RGlzcGxheTo6ZGlzcGxheUlkKCkgY29uc3QKIAogY29uc3QgU3RyaW5nJiBWUkRpc3BsYXk6OmRp
c3BsYXlOYW1lKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICByZXR1
cm4gbV9kaXNwbGF5TmFtZTsKIH0KIAogYm9vbCBWUkRpc3BsYXk6OmdldEZyYW1lRGF0YShWUkZy
YW1lRGF0YSYpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZy
L1ZSRGlzcGxheS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXkuaApp
bmRleCBhODUyOWM3OGMyODZkYzdlYmMxMjYxYzJkNDZhZTliYmY4MDYwY2IzLi5jNjMyZDcwMWFj
YWRkMGFhM2QxYjVjOTU2ZDVkMzMzZjhlYjFiZTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxheS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2VidnIvVlJEaXNwbGF5LmgKQEAgLTM3LDEzICszNywxNCBAQCBjbGFzcyBSZXF1ZXN0QW5pbWF0
aW9uRnJhbWVDYWxsYmFjazsKIGNsYXNzIFZSRGlzcGxheUNhcGFiaWxpdGllczsKIGNsYXNzIFZS
RXllUGFyYW1ldGVyczsKIGNsYXNzIFZSRnJhbWVEYXRhOworY2xhc3MgVlJQbGF0Zm9ybURpc3Bs
YXk7CiBjbGFzcyBWUlBvc2U7CiBjbGFzcyBWUlN0YWdlUGFyYW1ldGVyczsKIHN0cnVjdCBWUkxh
eWVySW5pdDsKIAogY2xhc3MgVlJEaXNwbGF5IDogcHVibGljIFJlZkNvdW50ZWQ8VlJEaXNwbGF5
PiwgcHVibGljIEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGEsIHB1YmxpYyBBY3RpdmVET01PYmpl
Y3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8VlJEaXNwbGF5PiBjcmVhdGUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYpOworICAgIHN0YXRpYyBSZWY8VlJEaXNwbGF5PiBjcmVhdGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIFZSUGxhdGZvcm1EaXNwbGF5Kik7CiAKICAgICB2aXJ0dWFsIH5W
UkRpc3BsYXkoKTsKIApAQCAtODIsNyArODMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdWJtaXRG
cmFtZSgpOwogCiBwcml2YXRlOgotICAgIFZSRGlzcGxheShTY3JpcHRFeGVjdXRpb25Db250ZXh0
Jik7CisgICAgVlJEaXNwbGF5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBWUlBsYXRmb3JtRGlz
cGxheSopOwogCiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICBFdmVudFRhcmdldEludGVyZmFjZSBl
dmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFZSRGlzcGxheUV2
ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsgfQpAQCAtOTgsNiArOTksMTAgQEAgcHJpdmF0ZToKIAog
ICAgIFJlZjxWUkRpc3BsYXlDYXBhYmlsaXRpZXM+IG1fY2FwYWJpbGl0aWVzOwogICAgIFJlZjxW
UkV5ZVBhcmFtZXRlcnM+IG1fZXllUGFyYW1ldGVyczsKKworICAgIFZSUGxhdGZvcm1EaXNwbGF5
KiBtX2Rpc3BsYXk7CisKKyAgICBjb25zdCBTdHJpbmcgbV9kaXNwbGF5TmFtZTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2VidnIvVlJEaXNwbGF5Q2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2VidnIvVlJEaXNwbGF5Q2FwYWJpbGl0aWVzLmNwcAppbmRleCA0ODg0N2M4NzZmZDNjNmQ2ZjZj
N2YyNzg5N2Q3MzExMmU1Mzg1ZDI4Li41NzY1NDc4ZTY1ZDU0ZGU1NTQzMTM2OThiMTI1ZmZjN2Mz
YmQyZGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxh
eUNhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkRp
c3BsYXlDYXBhYmlsaXRpZXMuY3BwCkBAIC0yOCwzMSArMjgsMzQgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1WUkRpc3BsYXlDYXBhYmlsaXRpZXM6OlZSRGlzcGxheUNhcGFiaWxpdGllcygp
ID0gZGVmYXVsdDsKK1ZSRGlzcGxheUNhcGFiaWxpdGllczo6VlJEaXNwbGF5Q2FwYWJpbGl0aWVz
KHVuc2lnbmVkIGNhcGFiaWxpdHlGbGFncykKK3sKKyAgICBtX2ZsYWdzID0gY2FwYWJpbGl0eUZs
YWdzOworfQogCiBib29sIFZSRGlzcGxheUNhcGFiaWxpdGllczo6aGFzUG9zaXRpb24oKSBjb25z
dAogewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9mbGFncyAmIFZSRGlzcGxheUNh
cGFiaWxpdHlGbGFnczo6UG9zaXRpb247CiB9CiAKIGJvb2wgVlJEaXNwbGF5Q2FwYWJpbGl0aWVz
OjpoYXNPcmllbnRhdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biBtX2ZsYWdzICYgVlJEaXNwbGF5Q2FwYWJpbGl0eUZsYWdzOjpPcmllbnRhdGlvbjsKIH0KIAog
Ym9vbCBWUkRpc3BsYXlDYXBhYmlsaXRpZXM6Omhhc0V4dGVybmFsRGlzcGxheSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX2ZsYWdzICYgVlJEaXNwbGF5Q2FwYWJp
bGl0eUZsYWdzOjpFeHRlcm5hbERpc3BsYXk7CiB9CiAKIGJvb2wgVlJEaXNwbGF5Q2FwYWJpbGl0
aWVzOjpjYW5QcmVzZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IG1fZmxhZ3MgJiBWUkRpc3BsYXlDYXBhYmlsaXR5RmxhZ3M6OlByZXNlbnQ7CiB9CiAKIHVuc2ln
bmVkIFZSRGlzcGxheUNhcGFiaWxpdGllczo6bWF4TGF5ZXIoKSBjb25zdAogewotICAgIHJldHVy
biAwOworICAgIHJldHVybiBjYW5QcmVzZW50KCkgPyAxIDogMDsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkRp
c3BsYXlDYXBhYmlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJEaXNw
bGF5Q2FwYWJpbGl0aWVzLmgKaW5kZXggNTgzODE0OTk5NDlkMzBhZWJkODRiYjNlYzMyNDQ3N2Vi
NzFiNDhlMi4uNWU0MjI2MGRiZjQzOGE3YmMxMjBiYTQzNzgxODhiODUyOWUzNDc3MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXlDYXBhYmlsaXRpZXMu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxheUNhcGFiaWxpdGll
cy5oCkBAIC0zMiw5ICszMiw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgVlJEaXNw
bGF5Q2FwYWJpbGl0aWVzIDogcHVibGljIFJlZkNvdW50ZWQ8VlJEaXNwbGF5Q2FwYWJpbGl0aWVz
PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxWUkRpc3BsYXlDYXBhYmlsaXRpZXM+IGNyZWF0
ZSgpCisgICAgc3RhdGljIFJlZjxWUkRpc3BsYXlDYXBhYmlsaXRpZXM+IGNyZWF0ZSh1bnNpZ25l
ZCBjYXBhYmlsaXR5RmxhZ3MpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBW
UkRpc3BsYXlDYXBhYmlsaXRpZXMpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWUkRp
c3BsYXlDYXBhYmlsaXRpZXMoY2FwYWJpbGl0eUZsYWdzKSk7CiAgICAgfQogCiAgICAgYm9vbCBo
YXNQb3NpdGlvbigpIGNvbnN0OwpAQCAtNDQsNyArNDQsOSBAQCBwdWJsaWM6CiAgICAgdW5zaWdu
ZWQgbWF4TGF5ZXIoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBWUkRpc3BsYXlDYXBhYmlsaXRp
ZXMoKTsKKyAgICBWUkRpc3BsYXlDYXBhYmlsaXRpZXModW5zaWduZWQgY2FwYWJpbGl0eUZsYWdz
KTsKKworICAgIHVuc2lnbmVkIG1fZmxhZ3M7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CmluZGV4IDVmNjUzZmRhODAzYzQwMWZjOGI5ZDk3NWQyYjdhMTViODkzODUy
N2MuLmJhODNkOTA0Mzk4ZGFkZDk5NjQzYWJhMjdkMGJiY2Q5MGJlY2Q1OWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CkBAIC0xNzQ5LDYgKzE3NDksMTAgQEAgcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3Bw
CiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdG9ySUNVLmNwcAogcGxhdGZvcm0vdGV4
dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKIAorcGxhdGZvcm0vdnIvVlJNYW5hZ2VyLmNwcAor
cGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmNwcAorcGxhdGZvcm0v
dnIvb3BlbnZyL1ZSUGxhdGZvcm1NYW5hZ2VyT3BlblZSLmNwcAorCiBwbHVnaW5zL0RPTU1pbWVU
eXBlLmNwcAogcGx1Z2lucy9ET01NaW1lVHlwZUFycmF5LmNwcAogcGx1Z2lucy9ET01QbHVnaW4u
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggY2IwMWY4ZTVhMzk1ZjFkNGI2NjliOWE0ZjRiY2E0OTkxZTVhNjk2Mi4uNzc5OTRi
MzVkNTZiZWY1NTk2NTljNjUxMzE3YTA3NWFjYjY4NGZjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDUwNSw2ICs0NTA1LDEx
IEBACiAJCUUxODA4MTE3MTZGQ0Y5Q0IwMEI4MEQwNyAvKiBTeW5jaHJvbm91c0xvYWRlckNsaWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4MDgx
MTUxNkZDRjlDQjAwQjgwRDA3IC8qIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTE4MjU2OTAwRUYyQjAy
RDAwOTMzMjQyIC8qIEpTV29ya2VyR2xvYmFsU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxODI1NjhFMEVGMkIwMkQwMDkzMzI0MiAvKiBKU1dv
cmtlckdsb2JhbFNjb3BlLmggKi87IH07CiAJCUUxODUzNjg0MUY0RTQ4MTQwMEZFMDkxQiAvKiBX
ZWJBcmNoaXZlUmVzb3VyY2VGcm9tTlNBdHRyaWJ1dGVkU3RyaW5nLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTg1MzY4MTFGNEU0NzI3MDBGRTA5MUIg
LyogV2ViQXJjaGl2ZVJlc291cmNlRnJvbU5TQXR0cmlidXRlZFN0cmluZy5oICovOyB9OworCQlF
MTg4MjM2NDIwMzFGNTcxMDBCNDJERjMgLyogVlJNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTg4MjM2MzIwMzFGNTVEMDBCNDJERjMgLyog
VlJNYW5hZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJRTE4ODIzNjUyMDMxRjU3RjAwQjQyREYzIC8qIFZSUGxhdGZvcm1EaXNwbGF5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTg4MjM2MDIwMzFG
NTVBMDBCNDJERjMgLyogVlJQbGF0Zm9ybURpc3BsYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlFMTg4MjM2NjIwMzFGNTk0MDBCNDJERjMgLyog
VlJQbGF0Zm9ybU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxODgyMzYxMjAzMUY1NUIwMEI0MkRGMyAvKiBWUlBsYXRmb3JtTWFuYWdlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUUxODgy
MzZDMjAzMjAzNzQwMEI0MkRGMyAvKiBWUlBsYXRmb3JtRGlzcGxheU9wZW5WUi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4ODIzNkIyMDMyMDM2ODAw
QjQyREYzIC8qIFZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTE4ODIzNkQyMDMyMDM4MjAwQjQyREYzIC8q
IFZSUGxhdGZvcm1NYW5hZ2VyT3BlblZSLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMTg4MjM2OTIwMzIwMzY3MDBCNDJERjMgLyogVlJQbGF0Zm9ybU1h
bmFnZXJPcGVuVlIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlFMThDMzU0NDFGNzE5NzBDMDBGRjYzMkQgLyogV2ViQXJjaGl2ZVJlc291cmNlV2Vi
UmVzb3VyY2VIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMThDMzU0MTFGNzE5NkNEMDBGRjYzMkQgLyogV2ViQXJjaGl2ZVJlc291cmNlV2Vi
UmVzb3VyY2VIYW5kbGVyLmggKi87IH07CiAJCUUxOERGMzM1MThBQUYxMkMwMDc3M0U1OSAvKiBT
ZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTE4REYzMzQxOEFBRjEyQzAwNzczRTU5IC8qIFNlcmlhbGl6ZWRDcnlw
dG9LZXlXcmFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRTE5NzI3MTYxODIwNTQ5RTAwNTkyRDUxIC8qIENyeXB0b0tleVR5cGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOTcyNzE1MTgyMDU0OUUw
MDU5MkQ1MSAvKiBDcnlwdG9LZXlUeXBlLmggKi87IH07CkBAIC0xMzg0OSw2ICsxMzg1NCwxNCBA
QAogCQlFMTgyNThBQjBFRjNDRDcwMDA5MzMyNDIgLyogSlNXb3JrZXJHbG9iYWxTY29wZUN1c3Rv
bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dvcmtlckdsb2Jh
bFNjb3BlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE4NTM2ODEx
RjRFNDcyNzAwRkUwOTFCIC8qIFdlYkFyY2hpdmVSZXNvdXJjZUZyb21OU0F0dHJpYnV0ZWRTdHJp
bmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQXJjaGl2ZVJlc291cmNlRnJvbU5TQXR0cmlidXRlZFN0
cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTg1MzY4MjFGNEU0NzI3MDBG
RTA5MUIgLyogV2ViQXJjaGl2ZVJlc291cmNlRnJvbU5TQXR0cmlidXRlZFN0cmluZy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFdlYkFyY2hpdmVSZXNvdXJjZUZyb21OU0F0dHJpYnV0ZWRTdHJp
bmcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxODgyMzYwMjAzMUY1NUEwMEI0
MkRGMyAvKiBWUlBsYXRmb3JtRGlzcGxheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBWUlBsYXRmb3JtRGlzcGxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
MTg4MjM2MTIwMzFGNTVCMDBCNDJERjMgLyogVlJQbGF0Zm9ybU1hbmFnZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVlJQbGF0Zm9ybU1hbmFnZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRTE4ODIzNjIyMDMxRjU1QzAwQjQyREYzIC8qIFZSTWFuYWdlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWUk1hbmFnZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMTg4MjM2MzIwMzFGNTVEMDBCNDJERjMgLyog
VlJNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZSTWFuYWdlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMTg4MjM2ODIwMzIwMzY2MDBCNDJERjMg
LyogVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlFMTg4MjM2OTIwMzIwMzY3MDBCNDJERjMgLyogVlJQbGF0Zm9ybU1hbmFn
ZXJPcGVuVlIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVlJQbGF0Zm9ybU1h
bmFnZXJPcGVuVlIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTE4ODIzNkEyMDMy
MDM2NzAwQjQyREYzIC8qIFZSUGxhdGZvcm1NYW5hZ2VyT3BlblZSLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZSUGxhdGZvcm1NYW5hZ2VyT3BlblZSLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTE4ODIzNkIyMDMyMDM2ODAwQjQyREYzIC8qIFZS
UGxhdGZvcm1EaXNwbGF5T3BlblZSLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUxOEMzNTQxMUY3MTk2Q0QwMEZGNjMyRCAvKiBXZWJBcmNoaXZlUmVzb3VyY2VXZWJSZXNvdXJj
ZUhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQXJjaGl2ZVJlc291cmNlV2ViUmVzb3VyY2VI
YW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxOEMzNTQyMUY3MTk3MDEw
MEZGNjMyRCAvKiBXZWJBcmNoaXZlUmVzb3VyY2VXZWJSZXNvdXJjZUhhbmRsZXIubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBXZWJBcmNoaXZlUmVzb3VyY2VXZWJSZXNvdXJjZUhhbmRsZXIubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxOERGMzM0MThBQUYxMkMwMDc3M0U1OSAv
KiBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjM4MDUsNiArMjM4MTgsNyBAQAogCQkJCTUxNjAzMDA5MENDNDI0NTQwMEM4QUMyNSAv
KiBwb3NpeCAqLywKIAkJCQkxQTJFNkU1NjBDQzU1MUUwMDA0QTIwNjIgLyogc3FsICovLAogCQkJ
CUIyQzNEOUVDMEQwMDZDMUQwMEVGNkYyNiAvKiB0ZXh0ICovLAorCQkJCUUxODgyMzVGMjAzMUY1
MEYwMEI0MkRGMyAvKiB2ciAqLywKIAkJCQk0OUFFMkQ5NDEzNEVFNUY5MDA3MjkyMEEgLyogQ2Fs
Y3VsYXRpb25WYWx1ZS5jcHAgKi8sCiAJCQkJNDlBRTJEOTUxMzRFRTVGOTAwNzI5MjBBIC8qIENh
bGN1bGF0aW9uVmFsdWUuaCAqLywKIAkJCQlDMzMwQTIyMTEzRUMxOTZCMDAwMEI0NUIgLyogQ29s
b3JDaG9vc2VyLmggKi8sCkBAIC0yNDQ0OCw2ICsyNDQ2MiwyOSBAQAogCQkJcGF0aCA9IGFsZ29y
aXRobXM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQlFMTg4MjM1RjIwMzFG
NTBGMDBCNDJERjMgLyogdnIgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCUUxODgyMzY3MjAzMjAyRkYwMEI0MkRGMyAvKiBvcGVudnIgKi8sCisJCQkJRTE4
ODIzNjIyMDMxRjU1QzAwQjQyREYzIC8qIFZSTWFuYWdlci5jcHAgKi8sCisJCQkJRTE4ODIzNjMy
MDMxRjU1RDAwQjQyREYzIC8qIFZSTWFuYWdlci5oICovLAorCQkJCUUxODgyMzYwMjAzMUY1NUEw
MEI0MkRGMyAvKiBWUlBsYXRmb3JtRGlzcGxheS5oICovLAorCQkJCUUxODgyMzYxMjAzMUY1NUIw
MEI0MkRGMyAvKiBWUlBsYXRmb3JtTWFuYWdlci5oICovLAorCQkJKTsKKwkJCXBhdGggPSB2cjsK
KwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCUUxODgyMzY3MjAzMjAyRkYwMEI0
MkRGMyAvKiBvcGVudnIgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0g
KAorCQkJCUUxODgyMzY4MjAzMjAzNjYwMEI0MkRGMyAvKiBWUlBsYXRmb3JtRGlzcGxheU9wZW5W
Ui5jcHAgKi8sCisJCQkJRTE4ODIzNkIyMDMyMDM2ODAwQjQyREYzIC8qIFZSUGxhdGZvcm1EaXNw
bGF5T3BlblZSLmggKi8sCisJCQkJRTE4ODIzNkEyMDMyMDM2NzAwQjQyREYzIC8qIFZSUGxhdGZv
cm1NYW5hZ2VyT3BlblZSLmNwcCAqLywKKwkJCQlFMTg4MjM2OTIwMzIwMzY3MDBCNDJERjMgLyog
VlJQbGF0Zm9ybU1hbmFnZXJPcGVuVlIuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gb3BlbnZyOwor
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJRTE5REEyOUQxODE5OTVDRTAwMDg4
QkM4IC8qIGtleXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApA
QCAtMzAxMDYsNiArMzAxNDMsMTEgQEAKIAkJCQk0MTlCQzJERjE2ODUzMjk5MDBENjRENkQgLyog
VmlzaXRlZExpbmtTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCQTgwMDAxODk3MzQxMjAw
RENFOUQ2IC8qIFZpc2l0ZWRMaW5rU3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NDYxM0I2
MENENjM0NEUwMEZBREE3NSAvKiBWb2lkQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAorCQkJCUUx
ODgyMzY0MjAzMUY1NzEwMEI0MkRGMyAvKiBWUk1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUUxODgyMzY1MjAzMUY1N0YwMEI0MkRGMyAvKiBWUlBsYXRmb3JtRGlzcGxheS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRTE4ODIzNkMyMDMyMDM3NDAwQjQyREYzIC8qIFZSUGxhdGZvcm1EaXNwbGF5
T3BlblZSLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMTg4MjM2NjIwMzFGNTk0MDBCNDJERjMgLyog
VlJQbGF0Zm9ybU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxODgyMzZEMjAzMjAzODIw
MEI0MkRGMyAvKiBWUlBsYXRmb3JtTWFuYWdlck9wZW5WUi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkUyMDUwN0ExOEE0NTg2QjAwODA2NDdFIC8qIFZUVEN1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0FGOUIyMDMxOENGQjJERjAwQzY0QkVGIC8qIFZUVFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJN0FGOUIyMDYxOENGQjJERjAwQzY0QkVGIC8qIFZUVFJlZ2lvbkxpc3QuaCBpbiBIZWFkZXJz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdnIvVlJNYW5hZ2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL1ZSTWFuYWdlci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YjMzNzM0ZDA4OThjYmNmZTBmMzNmYTZlY2U0YmQ2OWRlOTcwMGJjMAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL1ZSTWFuYWdlci5jcHAKQEAgLTAsMCArMSw3
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEsIFMuTC4gQWxsIHJpZ2h0IHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlZSTWFuYWdlci5oIgor
CisjaW5jbHVkZSAiSlNWUkRpc3BsYXkuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgiCisjaW5jbHVkZSAiVlJQbGF0Zm9ybURpc3BsYXkuaCIKKyNpbmNsdWRlICJWUlBsYXRm
b3JtTWFuYWdlci5oIgorCisjaWYgVVNFKE9QRU5WUikKKyNpbmNsdWRlICJWUlBsYXRmb3JtTWFu
YWdlck9wZW5WUi5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVlJNYW5hZ2Vy
JiBWUk1hbmFnZXI6OnNpbmdsZXRvbigpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFZS
TWFuYWdlcj4gaW5zdGFuY2U7CisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCitWUk1hbmFnZXI6
OlZSTWFuYWdlcigpCit7CisjaWYgVVNFKE9QRU5WUikKKyAgICBtX3BsYXRmb3JtTWFuYWdlciA9
IFZSUGxhdGZvcm1NYW5hZ2VyT3BlblZSOjpjcmVhdGUoKTsKKyNlbmRpZgorfQorCitWUk1hbmFn
ZXI6On5WUk1hbmFnZXIoKQoreworICAgIG1fcHJvbWlzZVRhc2tRdWV1ZS5jbG9zZSgpOworICAg
IG1fcGxhdGZvcm1NYW5hZ2VyID0gbnVsbHB0cjsKK30KKwordm9pZCBWUk1hbmFnZXI6OnJlZnJl
c2hWUkRldmljZXMoR2V0VlJEaXNwbGF5c1Byb21pc2UmJiBwcm9taXNlLCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0KQoreworICAgIGlmICghbV9wbGF0Zm9ybU1hbmFnZXIpCisgICAg
ICAgIHByb21pc2UucmVqZWN0KEludmFsaWRTdGF0ZUVycm9yKTsKKworICAgIG1fZ2V0RGlzcGxh
eXNQcm9taXNlcy5hcHBlbmQoV1RGTW92ZShwcm9taXNlKSk7CisKKyAgICBpZiAobV9wcm9taXNl
VGFza1F1ZXVlLmhhc1BlbmRpbmdUYXNrcygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBG
SVhNRTogcHJvdGVjdCBjb250ZXh0Pz8/CisgICAgbV9wcm9taXNlVGFza1F1ZXVlLmVucXVldWVU
YXNrKFt0aGlzLCBwcm9taXNlcyA9IFdURk1vdmUobV9nZXREaXNwbGF5c1Byb21pc2VzKSwgY29u
dGV4dF0gKCkgbXV0YWJsZSB7CisgICAgICAgIFZlY3RvcjxWUlBsYXRmb3JtRGlzcGxheSo+IHBs
YXRmb3JtRGlzcGxheXMgPSBtX3BsYXRmb3JtTWFuYWdlci0+Z2V0VlJEaXNwbGF5cygpOworICAg
ICAgICBWZWN0b3I8UmVmPFZSRGlzcGxheT4+IGRpc3BsYXlzOworICAgICAgICBmb3IgKGF1dG8g
cGxhdGZvcm1EaXNwbGF5IDogcGxhdGZvcm1EaXNwbGF5cykKKyAgICAgICAgICAgIGRpc3BsYXlz
LmFwcGVuZChWUkRpc3BsYXk6OmNyZWF0ZSgqY29udGV4dCwgcGxhdGZvcm1EaXNwbGF5KSk7Cisg
ICAgICAgIGZvciAoYXV0byYgZGVmZXJyZWRQcm9taXNlIDogcHJvbWlzZXMpCisgICAgICAgICAg
ICBkZWZlcnJlZFByb21pc2UucmVzb2x2ZShkaXNwbGF5cyk7CisgICAgICAgIH0pOworCit9CisK
K307IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS92ci9WUk1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL1ZSTWFuYWdl
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmI5NjdmMjEwMzExZDkxODFhNzUxM2Q2ODc5ZGRlMjRkNTNmYTIyODEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9WUk1hbmFnZXIu
aApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSwgUy5M
LiBBbGwgcmlnaHQgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkdlbmVy
aWNUYXNrUXVldWUuaCIKKyNpbmNsdWRlICJKU0RPTVByb21pc2VEZWZlcnJlZC5oIgorI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVlJEaXNw
bGF5OworY2xhc3MgVlJQbGF0Zm9ybU1hbmFnZXI7CisKK2NsYXNzIFZSTWFuYWdlciBmaW5hbCB7
CisgICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8VlJNYW5hZ2VyPjsKK3B1Ymxp
YzoKKyAgICB1c2luZyBHZXRWUkRpc3BsYXlzUHJvbWlzZSA9IERPTVByb21pc2VEZWZlcnJlZDxJ
RExTZXF1ZW5jZTxJRExJbnRlcmZhY2U8VlJEaXNwbGF5Pj4+OworCisgICAgflZSTWFuYWdlcigp
OworCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFZSTWFuYWdlciYgc2luZ2xldG9uKCk7CisK
KyAgICB2b2lkIHJlZnJlc2hWUkRldmljZXMoR2V0VlJEaXNwbGF5c1Byb21pc2UmJiwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCopOworCitwcml2YXRlOgorICAgIFZSTWFuYWdlcigpOworCisgICAg
VmVjdG9yPEdldFZSRGlzcGxheXNQcm9taXNlLCAxPiBtX2dldERpc3BsYXlzUHJvbWlzZXM7Cisg
ICAgR2VuZXJpY1Rhc2tRdWV1ZTxUaW1lcj4gbV9wcm9taXNlVGFza1F1ZXVlOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxWUlBsYXRmb3JtTWFuYWdlcj4gbV9wbGF0Zm9ybU1hbmFnZXI7Cit9OworCit9
OyAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdnIvVlJQbGF0Zm9ybURpc3BsYXkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL1ZS
UGxhdGZvcm1EaXNwbGF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzQyMDlmZDhiMmJlNWY4ZmI0MDIwYmY2ZWI3
MjdjYTY5ZWQ3ZjUzNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3ZyL1ZSUGxhdGZvcm1EaXNwbGF5LmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOCBJZ2FsaWEsIFMuTC4gQWxsIHJpZ2h0IHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisj
aW5jbHVkZSAiUmVjdEVkZ2VzLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIFZSRGlzcGxheUNhcGFiaWxpdHlGbGFncyB7
CisgICAgTm9uZSA9IDAsCisgICAgUG9zaXRpb24gPSAxIDw8IDEsCisgICAgT3JpZW50YXRpb24g
PSAxIDw8IDIsCisgICAgRXh0ZXJuYWxEaXNwbGF5ID0gMSA8PCAzLAorICAgIFByZXNlbnQgPSAx
IDw8IDQKK307CisKKy8qIFRoZSBwdXJwb3NlIG9mIHRoaXMgY2xhc3MgaXMgdG8gZW5jYXBzdWxh
dGUgYWxsIHRoZSBpbmZvIGFib3V0IHRoZSBkaXNwbGF5IGluIGEgc2luZ2xlIGNsYXNzL2RhdGEK
KyAqIHN0cnVjdHVyZS4gVGhpcyB3YXkgd2Ugd291bGRuJ3QgaGF2ZSB0byByZXBsaWNhdGUgYWxs
IHRoZSBBUEkgY2FsbHMgb2YgVlJEaXNwbGF5IGluCisgKiBWUlBsYXRmb3JtRGlzcGxheS4gQWxz
byB0aGUgY2xpZW50IG9mIHRoaXMgQVBJIHdvdWxkIG9ubHkgaGF2ZSB0byBpc3N1ZSBhIHNpbmds
ZSBjYWxsIHRvIGdldCBhbGwKKyAqIHRoZSBpbmZvIGZyb20gdGhlIGRpc3BsYXkuIE5vdGUgdGhh
dCBpdCdzIGZhaXJseSB1bmxpa2VseSB0aGF0IGEgVlIgYXBwbGljYXRpb24gd291bGQgb25seQor
ICogcmVxdWlyZSBqdXN0IGEgZmV3IHBpZWNlcyBvZiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBkZXZp
Y2UuCisqLworc3RydWN0IFZSUGxhdGZvcm1EaXNwbGF5SW5mbyB7CisgICAgU3RyaW5nIGRpc3Bs
YXlOYW1lOworICAgIGJvb2wgaXNDb25uZWN0ZWQ7CisgICAgYm9vbCBpc01vdW50ZWQ7CisgICAg
dW5zaWduZWQgY2FwYWJpbGl0eUZsYWdzOworfTsKKworY2xhc3MgVlJQbGF0Zm9ybURpc3BsYXkg
eworcHVibGljOgorICAgIHZpcnR1YWwgVlJQbGF0Zm9ybURpc3BsYXlJbmZvIGdldERpc3BsYXlJ
bmZvKCkgPSAwOworICAgIHZpcnR1YWwgflZSUGxhdGZvcm1EaXNwbGF5KCkgPSBkZWZhdWx0Owor
fTsKKworfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3ZyL1ZSUGxhdGZvcm1NYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS92ci9WUlBsYXRmb3JtTWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2ODQ3ZDI2ZWQ5ODMyOWQ3NmMx
N2UzOTBjN2JkOTc4MTUxNGQxY2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS92ci9WUlBsYXRmb3JtTWFuYWdlci5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhLCBTLkwuIEFsbCByaWdodCByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNET01Qcm9taXNlRGVmZXJyZWQuaCIKKyNpbmNsdWRl
ICJWUlBsYXRmb3JtRGlzcGxheS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFZS
RGlzcGxheTsKKworY2xhc3MgVlJQbGF0Zm9ybU1hbmFnZXIgeworcHVibGljOgorICAgIHVzaW5n
IEdldFZSRGV2aWNlc1Byb21pc2UgPSBET01Qcm9taXNlRGVmZXJyZWQ8SURMU2VxdWVuY2U8SURM
SW50ZXJmYWNlPFZSRGlzcGxheT4+PjsKKworICAgIHZpcnR1YWwgVmVjdG9yPFZSUGxhdGZvcm1E
aXNwbGF5Kj4gZ2V0VlJEaXNwbGF5cygpID0gMDsKKyAgICB2aXJ0dWFsIH5WUlBsYXRmb3JtTWFu
YWdlcigpID0gZGVmYXVsdDsKK307CisKK307IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlP
cGVuVlIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1E
aXNwbGF5T3BlblZSLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43M2FmN2EyMjlhOTA1ODBlNGQ1MDNlNmMwYTk1
YmFmMTJmMjBkZDFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmNwcApAQCAtMCwwICsxLDU4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSwgUy5MLiBBbGwgcmlnaHQgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVlJQbGF0Zm9ybURpc3BsYXlPcGVu
VlIuaCIKKworI2lmIFVTRShPUEVOVlIpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlI6
OlZSUGxhdGZvcm1EaXNwbGF5T3BlblZSKHZyOjpJVlJTeXN0ZW0qIFZSU3lzdGVtLCB2cjo6SVZS
Q2hhcGVyb25lKiBWUkNoYXBlcm9uZSwgdnI6OklWUkNvbXBvc2l0b3IqIFZSQ29tcG9zaXRvcikK
KyAgICA6IG1fc3lzdGVtKFZSU3lzdGVtKQorICAgICwgbV9jaGFwZXJvbmUoVlJDaGFwZXJvbmUp
CisgICAgLCBtX2NvbXBvc2l0b3IoVlJDb21wb3NpdG9yKQoreworICAgIG1fZGlzcGxheUluZm8u
aXNDb25uZWN0ZWQgPSBtX3N5c3RlbS0+SXNUcmFja2VkRGV2aWNlQ29ubmVjdGVkKHZyOjprX3Vu
VHJhY2tlZERldmljZUluZGV4X0htZCk7CisKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxk
ZXI7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJPcGVuVlIgSE1EIik7CisgICAg
Y2hhciBITUROYW1lWzEyOF07CisgICAgaWYgKGF1dG8gbGVuZ3RoID0gbV9zeXN0ZW0tPkdldFN0
cmluZ1RyYWNrZWREZXZpY2VQcm9wZXJ0eSh2cjo6a191blRyYWNrZWREZXZpY2VJbmRleF9IbWQs
IHZyOjpQcm9wX01hbnVmYWN0dXJlck5hbWVfU3RyaW5nLCBITUROYW1lLCAxMjgpKSB7CisgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgKCIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChITUROYW1lLCBsZW5ndGgpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnKScp
OworICAgIH0KKyAgICBtX2Rpc3BsYXlJbmZvLmRpc3BsYXlOYW1lID0gc3RyaW5nQnVpbGRlci50
b1N0cmluZygpOworCisgICAgbV9kaXNwbGF5SW5mby5pc01vdW50ZWQgPSBmYWxzZTsKKyAgICAv
LyBGSVhNRTogV2UncmUgYXNzdW1pbmcgYW4gSFRDIFZpdmUgSE1EIGhlcmUuIEdldCB0aGlzIGlu
Zm8gZnJvbSBPcGVuVlI/LgorICAgIG1fZGlzcGxheUluZm8uY2FwYWJpbGl0eUZsYWdzID0gVlJE
aXNwbGF5Q2FwYWJpbGl0eUZsYWdzOjpOb25lIHwKKyAgICAgICAgVlJEaXNwbGF5Q2FwYWJpbGl0
eUZsYWdzOjpQb3NpdGlvbiB8CisgICAgICAgIFZSRGlzcGxheUNhcGFiaWxpdHlGbGFnczo6T3Jp
ZW50YXRpb24gfAorICAgICAgICBWUkRpc3BsYXlDYXBhYmlsaXR5RmxhZ3M6OkV4dGVybmFsRGlz
cGxheSB8CisgICAgICAgIFZSRGlzcGxheUNhcGFiaWxpdHlGbGFnczo6UHJlc2VudDsKK30KKwor
fTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShPUEVOVlIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlP
cGVuVlIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtRGlz
cGxheU9wZW5WUi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFhOTNhNTZiOTI5MjYyNDhmMGVjN2FiMmQ0Nzg1M2Mz
ZDJmOWE2NjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9v
cGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSwgUy5MLiBBbGwgcmlnaHQgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIFVTRShPUEVOVlIpCisKKyNpbmNsdWRlICJWUlBsYXRmb3JtRGlz
cGxheS5oIgorCisjaW5jbHVkZSA8b3BlbnZyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIgOiBwdWJsaWMgVlJQbGF0Zm9ybURpc3BsYXkg
eworcHVibGljOgorICAgIGV4cGxpY2l0IFZSUGxhdGZvcm1EaXNwbGF5T3BlblZSKHZyOjpJVlJT
eXN0ZW0qLCB2cjo6SVZSQ2hhcGVyb25lKiwgdnI6OklWUkNvbXBvc2l0b3IqKTsKKworICAgIFZS
UGxhdGZvcm1EaXNwbGF5SW5mbyBnZXREaXNwbGF5SW5mbygpIG92ZXJyaWRlIHsgcmV0dXJuIG1f
ZGlzcGxheUluZm87IH0KKworcHJpdmF0ZToKKyAgICB2cjo6SVZSU3lzdGVtICptX3N5c3RlbTsK
KyAgICB2cjo6SVZSQ2hhcGVyb25lICptX2NoYXBlcm9uZTsKKyAgICB2cjo6SVZSQ29tcG9zaXRv
ciAqbV9jb21wb3NpdG9yOworCisgICAgVlJQbGF0Zm9ybURpc3BsYXlJbmZvIG1fZGlzcGxheUlu
Zm87Cit9OworCit9OyAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKE9QRU5W
UikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL29wZW52ci9WUlBsYXRm
b3JtTWFuYWdlck9wZW5WUi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9vcGVudnIv
VlJQbGF0Zm9ybU1hbmFnZXJPcGVuVlIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFhNTY1NTYwYTdmNmYyMTcx
NzYwMWMyYzk4MmYyMTliMDExNTQ2NzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybU1hbmFnZXJPcGVuVlIuY3BwCkBAIC0wLDAg
KzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhLCBTLkwuIEFsbCByaWdo
dCByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWUlBsYXRmb3Jt
TWFuYWdlck9wZW5WUi5oIgorCisjaW5jbHVkZSAiVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIuaCIK
KworI2lmIFVTRShPUEVOVlIpCisKKyNpbmNsdWRlICJKU1ZSRGlzcGxheS5oIgorI2luY2x1ZGUg
IlZSRGlzcGxheS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSB2
cjsKKworc3RkOjp1bmlxdWVfcHRyPFZSUGxhdGZvcm1NYW5hZ2VyT3BlblZSPiBWUlBsYXRmb3Jt
TWFuYWdlck9wZW5WUjo6Y3JlYXRlKCkKK3sKKyAgICBpZiAoIVZSX0lzUnVudGltZUluc3RhbGxl
ZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPFZSUGxhdGZvcm1NYW5hZ2VyT3BlblZSPigpOworfQorCitWUlBsYXRmb3JtTWFuYWdlck9w
ZW5WUjo6VlJQbGF0Zm9ybU1hbmFnZXJPcGVuVlIoKQoreworfQorCitWUlBsYXRmb3JtTWFuYWdl
ck9wZW5WUjo6flZSUGxhdGZvcm1NYW5hZ2VyT3BlblZSKCkKK3sKKyAgICBWUl9TaHV0ZG93bigp
OworfQorCitib29sIFZSUGxhdGZvcm1NYW5hZ2VyT3BlblZSOjppbml0T3BlblZSKCkKK3sKKyAg
ICBIbWRFcnJvciBlcnJvcjsKKyAgICBtX3N5c3RlbSA9IFZSX0luaXQoJmVycm9yLCBWUkFwcGxp
Y2F0aW9uX1NjZW5lKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCitWZWN0b3I8VlJQbGF0Zm9ybURpc3BsYXkqPiBWUlBsYXRm
b3JtTWFuYWdlck9wZW5WUjo6Z2V0VlJEaXNwbGF5cygpCit7CisgICAgLy8gUXVpY2tseSBjaGVj
ayBmb3IgSE1Ecy4gTXVjaCBmYXN0ZXIgdGhhbiBpbml0aWFsaXppbmcgdGhlIHdob2xlIE9wZW5W
UiBBUEkuCisgICAgaWYgKCFWUl9Jc0htZFByZXNlbnQoKSkgeworICAgICAgICBtX3N5c3RlbSA9
IG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgaWYgKCFtX3N5c3Rl
bSAmJiAhaW5pdE9wZW5WUigpKSB7CisgICAgICAgIG1fc3lzdGVtID0gbnVsbHB0cjsKKyAgICAg
ICAgVlJfU2h1dGRvd24oKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBIbWRF
cnJvciBlcnJvcjsKKyAgICBJVlJDaGFwZXJvbmUqIGNoYXBlcm9uZSA9IHN0YXRpY19jYXN0PElW
UkNoYXBlcm9uZSo+KFZSX0dldEdlbmVyaWNJbnRlcmZhY2UoSVZSQ2hhcGVyb25lX1ZlcnNpb24s
ICZlcnJvcikpOworICAgIGlmIChlcnJvciB8fCAhY2hhcGVyb25lKQorICAgICAgICByZXR1cm4g
eyB9OworCisgICAgSVZSQ29tcG9zaXRvciogY29tcG9zaXRvciA9IHN0YXRpY19jYXN0PElWUkNv
bXBvc2l0b3IqPihWUl9HZXRHZW5lcmljSW50ZXJmYWNlKElWUkNvbXBvc2l0b3JfVmVyc2lvbiwg
JmVycm9yKSk7CisgICAgaWYgKGVycm9yIHx8ICFjb21wb3NpdG9yKQorICAgICAgICByZXR1cm4g
eyB9OworCisgICAgVmVjdG9yPFZSUGxhdGZvcm1EaXNwbGF5Kj4gZGlzcGxheXM7CisgICAgZGlz
cGxheXMuYXBwZW5kKG5ldyBWUlBsYXRmb3JtRGlzcGxheU9wZW5WUihtX3N5c3RlbSwgY2hhcGVy
b25lLCBjb21wb3NpdG9yKSk7CisgICAgcmV0dXJuIGRpc3BsYXlzOworfQorCit9OyAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKE9QRU5WUikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtTWFuYWdlck9wZW5WUi5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1NYW5hZ2VyT3BlblZS
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOTk5YzViZDhiZDEzNTZmODg0ZmMwMDRiMWRkNDAxYzg1ZjU3MGU3MQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL29wZW52ci9WUlBs
YXRmb3JtTWFuYWdlck9wZW5WUi5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgSWdhbGlhLCBTLkwuIEFsbCByaWdodCByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgVVNFKE9QRU5WUikKKworI2luY2x1ZGUgIlZSUGxhdGZvcm1NYW5hZ2VyLmgiCisK
KyNpbmNsdWRlIDxvcGVudnIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBWUlBs
YXRmb3JtTWFuYWdlck9wZW5WUiA6IHB1YmxpYyBWUlBsYXRmb3JtTWFuYWdlciB7CitwdWJsaWM6
CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxWUlBsYXRmb3JtTWFuYWdlck9wZW5WUj4gY3Jl
YXRlKCk7CisgICAgZXhwbGljaXQgVlJQbGF0Zm9ybU1hbmFnZXJPcGVuVlIoKTsKKworICAgIFZl
Y3RvcjxWUlBsYXRmb3JtRGlzcGxheSo+IGdldFZSRGlzcGxheXMoKSBvdmVycmlkZTsKKworICAg
IH5WUlBsYXRmb3JtTWFuYWdlck9wZW5WUigpOworcHJpdmF0ZToKKyAgICBib29sIGluaXRPcGVu
VlIoKTsKKworICAgIHZyOjpJVlJTeXN0ZW0qIG1fc3lzdGVtIHsgbnVsbHB0ciB9OworfTsKKwor
fTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShPUEVOVlIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>334028</attachid>
            <date>2018-02-16 02:19:32 -0800</date>
            <delta_ts>2018-02-19 04:08:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-182692-20180216111929.patch</filename>
            <type>text/plain</type>
            <size>35372</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI3Nzg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTY1ODVmMmUyNTAyMTQ0
Yjk4NmNhYzI5OTdhYTFiNzM1ZDhjZWU4Yy4uMmUzZjY3NDQ2ZGNkMzQ4ODcwODkzZjNjNTkxODMz
ZTc1ZTY5ZGZiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDE4LTAyLTEyICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtXZWJWUl1b
T3BlblZSXSBJbXBsZW1lbnQgZ2V0VlJEaXNwbGF5cygpCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODI2OTIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHByb3ZpZGVzIGFuIGltcGxlbWVudGF0aW9u
IG9mIE5hdmlnYXRvcidzIGdldFZSRGlzcGxheXMoKQorICAgICAgICBtZXRob2QgdXNpbmcgT3Bl
blZSIGFzIGJhY2tlbmQuIEl0IHF1ZXVlcyBzZXZlcmFsIHByb21pc2VzIGluCisgICAgICAgIGEg
cXVldWUgYW5kIHJlc29sdmVzIHRoZW0gYWxsIGp1c3Qgb25jZS4gVGhlIGluZm9ybWF0aW9uIHJl
dHJpZXZlZAorICAgICAgICBpcyB2ZXJ5IG1pbmltYWwgZm9yIHRoZSB0aW1lIGJlaW5nLCBidXQg
dGhpcyBjaGFuZ2UgbGF5cyB0aGUgZ3JvdW5kCisgICAgICAgIGZvciBhbGwgdGhlIGNoYW5nZXMg
dGhhdCBhcmUgYWJvdXQgdG8gbGFuZC4KKworICAgICAgICBUaGUgVlIgY29kZSB1c2VzIGEgVlJN
YW5hZ2VyIHdoaWNoIGlzIHRoZSBpbnRlcmZhY2Ugd2l0aCB0aGUKKyAgICAgICAgcGxhdGZvcm0g
Y29kZSBhbmQgdGhlIHJlc3BvbnNpYmxlIGZvciBpbnN0YW50aWF0aW5nIHRoZSByaWdodAorICAg
ICAgICBwbGF0Zm9ybSBjb2RlLiBUaGlzIHBsYXRmb3JtIGNvZGUgaXMgY3VycmVudGx5IGJlaW5n
IGltcGxlbWVudGVkCisgICAgICAgIHVzaW5nIE9wZW5WUiBidXQgY291bGQgd2UgYWxzbyBwb3J0
ZWQgaW4gdGhlIGZ1dHVyZSB0byBPcGVuWFIgb3IgYW55CisgICAgICAgIG90aGVyIFZSIFNESy4K
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIE1vZHVsZXMvd2VidnIvTmF2
aWdhdG9yV2ViVlIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yV2ViVlI6OmdldFZS
RGlzcGxheXMpOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yV2ViVlI6OnZyRW5hYmxlZCk6
CisgICAgICAgICogTW9kdWxlcy93ZWJ2ci9OYXZpZ2F0b3JXZWJWUi5oOgorICAgICAgICAqIE1v
ZHVsZXMvd2VidnIvVlJEaXNwbGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheTo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheTo6VlJEaXNwbGF5KToKKyAgICAg
ICAgKFdlYkNvcmU6OlZSRGlzcGxheTo6aXNDb25uZWN0ZWQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6VlJEaXNwbGF5OjpkaXNwbGF5TmFtZSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93
ZWJ2ci9WUkRpc3BsYXkuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYnZyL1ZSRGlzcGxheUNhcGFi
aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWUkRpc3BsYXlDYXBhYmlsaXRpZXM6OlZS
RGlzcGxheUNhcGFiaWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpWUkRpc3BsYXlDYXBhYmls
aXRpZXM6Omhhc1Bvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheUNh
cGFiaWxpdGllczo6aGFzT3JpZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJE
aXNwbGF5Q2FwYWJpbGl0aWVzOjpoYXNFeHRlcm5hbERpc3BsYXkgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6VlJEaXNwbGF5Q2FwYWJpbGl0aWVzOjpjYW5QcmVzZW50IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlZSRGlzcGxheUNhcGFiaWxpdGllczo6bWF4TGF5ZXIgY29uc3QpOgorICAg
ICAgICAqIE1vZHVsZXMvd2VidnIvVlJEaXNwbGF5Q2FwYWJpbGl0aWVzLmg6CisgICAgICAgIChX
ZWJDb3JlOjpWUkRpc3BsYXlDYXBhYmlsaXRpZXM6OmNyZWF0ZSk6CisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogcGxhdGZvcm0vdnIvVlJNYW5hZ2VyLmNwcDogQWRkZWQuIFRoaXMg
aXMgdGhlIG1haW4gaW50ZXJmYWNlIHVzZWQgYnkgYmluZGluZ3MgY29kZSB0bworICAgICAgICBh
Y2Nlc3MgVlIgZGV2aWNlcyBkYXRhIHByb3ZpZGVkIGJ5IHBsYXRmb3JtIGNvZGUuCisgICAgICAg
IChXZWJDb3JlOjpWUk1hbmFnZXI6OnNpbmdsZXRvbik6CisgICAgICAgIChXZWJDb3JlOjpWUk1h
bmFnZXI6OlZSTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpWUk1hbmFnZXI6On5WUk1hbmFn
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VlJNYW5hZ2VyOjpyZWZyZXNoVlJEZXZpY2VzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS92ci9WUk1hbmFnZXIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vdnIvVlJQbGF0Zm9ybURpc3BsYXkuaDogQWRkZWQuIEFic3RyYWN0aW9uIG9mIGEgVlIgZGlz
cGxheSBzeXN0ZW0uIFRvIGJlCisgICAgICAgIGltcGxlbWVudGVkIGJ5IGJhY2tlbmRzIGxpa2Ug
T3BlblZSLCBPcGVuWFIuLi4KKyAgICAgICAgKiBwbGF0Zm9ybS92ci9WUlBsYXRmb3JtTWFuYWdl
ci5oOiBBZGRlZC4gQWJzdHJhY3Rpb24gb2YgdGhlIHBsYXRmb3JtIHNwZWNpZmljIGNsYXNzIHdo
aWNoCisgICAgICAgIHJldHJpZXZlcyBkYXRhIGZyb20gVlIgZGV2aWNlcy4gVG8gYmUgaW1wbGVt
ZW50ZWQgYnkgYmFja2VuZHMgbGlrZSBPcGVuVlIsIE9wZW5YUi4uLgorICAgICAgICAqIHBsYXRm
b3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5WUi5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6VlJQbGF0Zm9ybURpc3BsYXlPcGVuVlI6OlZSUGxhdGZvcm1EaXNwbGF5T3Bl
blZSKToKKyAgICAgICAgKiBwbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVu
VlIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1NYW5h
Z2VyT3BlblZSLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpWUlBsYXRmb3JtTWFuYWdl
ck9wZW5WUjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlZSUGxhdGZvcm1NYW5hZ2VyT3Bl
blZSOjpWUlBsYXRmb3JtTWFuYWdlck9wZW5WUik6CisgICAgICAgIChXZWJDb3JlOjpWUlBsYXRm
b3JtTWFuYWdlck9wZW5WUjo6flZSUGxhdGZvcm1NYW5hZ2VyT3BlblZSKToKKyAgICAgICAgKFdl
YkNvcmU6OlZSUGxhdGZvcm1NYW5hZ2VyT3BlblZSOjppbml0T3BlblZSKToKKyAgICAgICAgKiBw
bGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybU1hbmFnZXJPcGVuVlIuaDogQWRkZWQuCisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE4LTAxLTMwICBB
bnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBBdm9pZCB0cmF2ZXJz
aW5nIHRvbyBtdWNoIHdoZW4gZG9pbmcgY2xhc3MgY2hhbmdlIGludmFsaWRhdGlvbgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAppbmRleCA0OTdiNGRkMmE0OGEzNjBjNGI1ZDkxMzEyOGNlZGI3MzhlYWE1ZmJk
Li5lNzZmMDA2Yjc3OGM5MzdkMzE1MjFkNDk0ZWUwZmE0MTMyN2VjMzUzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dApAQCAtMTE4LDYgKzExOCw3IEBAIHNldChXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJ
RVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vc3FsIgogICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS90ZXh0IgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS90ZXh0L2ljdSIK
KyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vdnIiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3Bs
dWdpbnMiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3JlbmRlcmluZyIKICAgICAiJHtXRUJDT1JFX0RJ
Un0vcmVuZGVyaW5nL2xpbmUiCkBAIC0xNTI3LDYgKzE1MjgsNyBAQCBlbmRpZiAoKQogCiBpZiAo
VVNFX09QRU5WUikKICAgbGlzdChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTICIk
e1RISVJEUEFSVFlfRElSfS9vcGVudnIvaGVhZGVycyIpCisgIGxpc3QoQVBQRU5EIFdlYkNvcmVf
SU5DTFVERV9ESVJFQ1RPUklFUyAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vdnIvb3BlbnZyIikK
ICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMgb3BlbnZyX2FwaSkKIGVuZGlmICgpCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvTmF2aWdhdG9yV2ViVlIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9OYXZpZ2F0b3JXZWJWUi5jcHAKaW5k
ZXggZWNiNTQxMTkyMjU3NDRmMmJhOWQ0NDZiNThjNzNlMDE3OTUwNGFmNC4uZDcxMzc1OGE2MTM5
NDNkNGQ5MzcyM2Y2NzRiZmM1OWQ5YmEzZjUxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJ2ci9OYXZpZ2F0b3JXZWJWUi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJ2ci9OYXZpZ2F0b3JXZWJWUi5jcHAKQEAgLTI2LDEyICsyNiwzMyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk5hdmlnYXRvcldlYlZSLmgiCiAKKyNpbmNsdWRlICJE
b2N1bWVudC5oIgorI2luY2x1ZGUgIkpTVlJEaXNwbGF5LmgiCisjaW5jbHVkZSAiTmF2aWdhdG9y
LmgiCiAjaW5jbHVkZSAiVlJEaXNwbGF5LmgiCisjaW5jbHVkZSAiVlJNYW5hZ2VyLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBOYXZpZ2F0b3JXZWJWUjo6Z2V0VlJEaXNwbGF5cyhO
YXZpZ2F0b3ImLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKQordm9pZCBOYXZpZ2F0b3JXZWJWUjo6
Z2V0VlJEaXNwbGF5cyhOYXZpZ2F0b3ImIG5hdmlnYXRvciwgRG9jdW1lbnQmIGRvY3VtZW50LCBH
ZXRWUkRpc3BsYXlzUHJvbWlzZSYmIHByb21pc2UpCiB7CisgICAgaWYgKCF2ckVuYWJsZWQobmF2
aWdhdG9yKSkgeworICAgICAgICBwcm9taXNlLnJlamVjdCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgZG9jdW1lbnQucG9zdFRhc2soW3Byb21pc2UgPSBXVEZNb3ZlKHByb21pc2Up
XSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJsZSB7CisgICAgICAgIHN0
ZDo6b3B0aW9uYWw8VlJNYW5hZ2VyOjpWUkRpc3BsYXlzVmVjdG9yPiBwbGF0Zm9ybURpc3BsYXlz
ID0gVlJNYW5hZ2VyOjpzaW5nbGV0b24oKS5nZXRWUkRpc3BsYXlzKCk7CisgICAgICAgIGlmICgh
cGxhdGZvcm1EaXNwbGF5cykgeworICAgICAgICAgICAgcHJvbWlzZS5yZWplY3QoKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFZlY3RvcjxSZWY8VlJEaXNwbGF5
Pj4gZGlzcGxheXM7CisgICAgICAgIGZvciAoYXV0byBwbGF0Zm9ybURpc3BsYXkgOiBwbGF0Zm9y
bURpc3BsYXlzLnZhbHVlKCkpCisgICAgICAgICAgICBkaXNwbGF5cy5hcHBlbmQoVlJEaXNwbGF5
OjpjcmVhdGUoY29udGV4dCwgcGxhdGZvcm1EaXNwbGF5KSk7CisgICAgICAgIHByb21pc2UucmVz
b2x2ZShkaXNwbGF5cyk7CisgICAgICAgIH0pOwogfQogCiBjb25zdCBWZWN0b3I8UmVmUHRyPFZS
RGlzcGxheT4+JiBOYXZpZ2F0b3JXZWJWUjo6YWN0aXZlVlJEaXNwbGF5cyhOYXZpZ2F0b3ImKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9OYXZpZ2F0b3JXZWJWUi5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9OYXZpZ2F0b3JXZWJWUi5oCmluZGV4IGZl
MTU3Njk3NzQ1ZTBkZmE5N2E1MGExYzBkNGRkOGE1MThiY2MwNDguLjQ2ZWYxZDU0NTIzZGM2OGJh
NDRhZjE5Y2YyNzljM2I5NzhlYmQ5ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2VidnIvTmF2aWdhdG9yV2ViVlIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YnZyL05hdmlnYXRvcldlYlZSLmgKQEAgLTMxLDEzICszMSwxNiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK2NsYXNzIERvY3VtZW50OwogY2xhc3MgTmF2aWdhdG9yOwogY2xhc3MgUGFnZTsK
IGNsYXNzIFZSRGlzcGxheTsKIAogY2xhc3MgTmF2aWdhdG9yV2ViVlIgZmluYWwgOiBwdWJsaWMg
U3VwcGxlbWVudDxQYWdlPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgZ2V0VlJEaXNwbGF5
cyhOYXZpZ2F0b3ImLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKKyAgICB1c2luZyBHZXRWUkRp
c3BsYXlzUHJvbWlzZSA9IERPTVByb21pc2VEZWZlcnJlZDxJRExTZXF1ZW5jZTxJRExJbnRlcmZh
Y2U8VlJEaXNwbGF5Pj4+OworCisgICAgc3RhdGljIHZvaWQgZ2V0VlJEaXNwbGF5cyhOYXZpZ2F0
b3ImLCBEb2N1bWVudCYsIEdldFZSRGlzcGxheXNQcm9taXNlJiYpOwogICAgIHN0YXRpYyBjb25z
dCBWZWN0b3I8UmVmUHRyPFZSRGlzcGxheT4+JiBhY3RpdmVWUkRpc3BsYXlzKE5hdmlnYXRvciYp
OwogICAgIHN0YXRpYyBib29sIHZyRW5hYmxlZChOYXZpZ2F0b3ImKTsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL05hdmlnYXRvcldlYlZSLmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvTmF2aWdhdG9yV2ViVlIuaWRsCmluZGV4IGU1NTA0Nzc2
MjA2NWUyN2IxZmM3ZDQyYTllYTQ3YWI0YTUwNDE2OWUuLmY1ZTdhODc0ZTZjY2MwOTU1ZTBlZGEz
YjE3YWNhNTQzZTRiMmUzNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
dnIvTmF2aWdhdG9yV2ViVlIuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIv
TmF2aWdhdG9yV2ViVlIuaWRsCkBAIC0yNiw2ICsyNiw2IEBACiBbCiAgICAgRW5hYmxlZEF0UnVu
dGltZT1XZWJWUiwKIF0gcGFydGlhbCBpbnRlcmZhY2UgTmF2aWdhdG9yIHsKLSAgICBQcm9taXNl
PHNlcXVlbmNlPFZSRGlzcGxheT4+IGdldFZSRGlzcGxheXMoKTsKKyAgICBbQ2FsbFdpdGg9RG9j
dW1lbnRdIFByb21pc2U8c2VxdWVuY2U8VlJEaXNwbGF5Pj4gZ2V0VlJEaXNwbGF5cygpOwogICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBGcm96ZW5BcnJheTxWUkRpc3BsYXk+IGFjdGl2ZVZSRGlzcGxh
eXM7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkRpc3Bs
YXkuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXkuY3BwCmluZGV4
IDNhNTI3MGE5ZjU4NzVhZWM2NzgzNGMwYjM3M2FjYmM1Nzc5ZjBkYjIuLjYyMDRlMjhkNjUyZDhl
YWQ2MGQ3MWY1YjE2ZTE3MTJlMDNhNDBlMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2VidnIvVlJEaXNwbGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YnZyL1ZSRGlzcGxheS5jcHAKQEAgLTI5LDIxICsyOSwyNCBAQAogI2luY2x1ZGUgIlZSRGlzcGxh
eUNhcGFiaWxpdGllcy5oIgogI2luY2x1ZGUgIlZSRXllUGFyYW1ldGVycy5oIgogI2luY2x1ZGUg
IlZSTGF5ZXJJbml0LmgiCisjaW5jbHVkZSAiVlJQbGF0Zm9ybURpc3BsYXkuaCIKICNpbmNsdWRl
ICJWUlBvc2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8VlJEaXNwbGF5PiBWUkRp
c3BsYXk6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KQorUmVmPFZSRGlz
cGxheT4gVlJEaXNwbGF5OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwg
V2Vha1B0cjxWUlBsYXRmb3JtRGlzcGxheT4gcGxhdGZvcm1EaXNwbGF5KQogewotICAgIGF1dG8g
ZGlzcGxheSA9IGFkb3B0UmVmKCpuZXcgVlJEaXNwbGF5KGNvbnRleHQpKTsKKyAgICBhdXRvIGRp
c3BsYXkgPSBhZG9wdFJlZigqbmV3IFZSRGlzcGxheShjb250ZXh0LCBwbGF0Zm9ybURpc3BsYXkp
KTsKICAgICBkaXNwbGF5LT5zdXNwZW5kSWZOZWVkZWQoKTsKICAgICByZXR1cm4gZGlzcGxheTsK
IH0KIAotVlJEaXNwbGF5OjpWUkRpc3BsYXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCkKK1ZSRGlzcGxheTo6VlJEaXNwbGF5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQs
IFdlYWtQdHI8VlJQbGF0Zm9ybURpc3BsYXk+IHBsYXRmb3JtRGlzcGxheSkKICAgICA6IEFjdGl2
ZURPTU9iamVjdCgmY29udGV4dCkKLSAgICAsIG1fY2FwYWJpbGl0aWVzKFZSRGlzcGxheUNhcGFi
aWxpdGllczo6Y3JlYXRlKCkpCisgICAgLCBtX2NhcGFiaWxpdGllcyhWUkRpc3BsYXlDYXBhYmls
aXRpZXM6OmNyZWF0ZShwbGF0Zm9ybURpc3BsYXktPmdldERpc3BsYXlJbmZvKCkuY2FwYWJpbGl0
eUZsYWdzKSkKICAgICAsIG1fZXllUGFyYW1ldGVycyhWUkV5ZVBhcmFtZXRlcnM6OmNyZWF0ZSgp
KQorICAgICwgbV9kaXNwbGF5KHBsYXRmb3JtRGlzcGxheSkKKyAgICAsIG1fZGlzcGxheU5hbWUo
cGxhdGZvcm1EaXNwbGF5LT5nZXREaXNwbGF5SW5mbygpLmRpc3BsYXlOYW1lKQogewogfQogCkBA
IC01MSw3ICs1NCw3IEBAIFZSRGlzcGxheTo6flZSRGlzcGxheSgpID0gZGVmYXVsdDsKIAogYm9v
bCBWUkRpc3BsYXk6OmlzQ29ubmVjdGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIG1fZGlzcGxheS0+Z2V0RGlzcGxheUluZm8oKS5pc0Nvbm5lY3RlZDsKIH0KIAog
Ym9vbCBWUkRpc3BsYXk6OmlzUHJlc2VudGluZygpIGNvbnN0CkBAIC04MSw3ICs4NCw3IEBAIHVu
c2lnbmVkIFZSRGlzcGxheTo6ZGlzcGxheUlkKCkgY29uc3QKIAogY29uc3QgU3RyaW5nJiBWUkRp
c3BsYXk6OmRpc3BsYXlOYW1lKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsK
KyAgICByZXR1cm4gbV9kaXNwbGF5TmFtZTsKIH0KIAogYm9vbCBWUkRpc3BsYXk6OmdldEZyYW1l
RGF0YShWUkZyYW1lRGF0YSYpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnZyL1ZSRGlzcGxheS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkRp
c3BsYXkuaAppbmRleCBhODUyOWM3OGMyODZkYzdlYmMxMjYxYzJkNDZhZTliYmY4MDYwY2IzLi5l
YmQ0YjU2MzJhMmUxODBhYmU5ZGMyNWE0NTQ2Y2M2MGJmOWUyNmQzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxheS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2VidnIvVlJEaXNwbGF5LmgKQEAgLTM3LDEzICszNywxNCBAQCBjbGFzcyBSZXF1
ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjazsKIGNsYXNzIFZSRGlzcGxheUNhcGFiaWxpdGllczsK
IGNsYXNzIFZSRXllUGFyYW1ldGVyczsKIGNsYXNzIFZSRnJhbWVEYXRhOworY2xhc3MgVlJQbGF0
Zm9ybURpc3BsYXk7CiBjbGFzcyBWUlBvc2U7CiBjbGFzcyBWUlN0YWdlUGFyYW1ldGVyczsKIHN0
cnVjdCBWUkxheWVySW5pdDsKIAogY2xhc3MgVlJEaXNwbGF5IDogcHVibGljIFJlZkNvdW50ZWQ8
VlJEaXNwbGF5PiwgcHVibGljIEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGEsIHB1YmxpYyBBY3Rp
dmVET01PYmplY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8VlJEaXNwbGF5PiBjcmVhdGUo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpOworICAgIHN0YXRpYyBSZWY8VlJEaXNwbGF5PiBjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdlYWtQdHI8VlJQbGF0Zm9ybURpc3BsYXk+KTsK
IAogICAgIHZpcnR1YWwgflZSRGlzcGxheSgpOwogCkBAIC04Miw3ICs4Myw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHN1Ym1pdEZyYW1lKCk7CiAKIHByaXZhdGU6Ci0gICAgVlJEaXNwbGF5KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmKTsKKyAgICBWUkRpc3BsYXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYsIFdlYWtQdHI8VlJQbGF0Zm9ybURpc3BsYXk+KTsKIAogICAgIC8vIEV2ZW50VGFyZ2V0CiAg
ICAgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBWUkRpc3BsYXlFdmVudFRhcmdldEludGVyZmFjZVR5cGU7IH0KQEAgLTk4
LDYgKzk5LDEwIEBAIHByaXZhdGU6CiAKICAgICBSZWY8VlJEaXNwbGF5Q2FwYWJpbGl0aWVzPiBt
X2NhcGFiaWxpdGllczsKICAgICBSZWY8VlJFeWVQYXJhbWV0ZXJzPiBtX2V5ZVBhcmFtZXRlcnM7
CisKKyAgICBXZWFrUHRyPFZSUGxhdGZvcm1EaXNwbGF5PiBtX2Rpc3BsYXk7CisKKyAgICBjb25z
dCBTdHJpbmcgbV9kaXNwbGF5TmFtZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJEaXNwbGF5Q2FwYWJpbGl0
aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJEaXNwbGF5Q2FwYWJpbGl0
aWVzLmNwcAppbmRleCA0ODg0N2M4NzZmZDNjNmQ2ZjZjN2YyNzg5N2Q3MzExMmU1Mzg1ZDI4Li41
NzY1NDc4ZTY1ZDU0ZGU1NTQzMTM2OThiMTI1ZmZjN2MzYmQyZGQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxheUNhcGFiaWxpdGllcy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXlDYXBhYmlsaXRpZXMuY3BwCkBA
IC0yOCwzMSArMjgsMzQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1WUkRpc3BsYXlDYXBh
YmlsaXRpZXM6OlZSRGlzcGxheUNhcGFiaWxpdGllcygpID0gZGVmYXVsdDsKK1ZSRGlzcGxheUNh
cGFiaWxpdGllczo6VlJEaXNwbGF5Q2FwYWJpbGl0aWVzKHVuc2lnbmVkIGNhcGFiaWxpdHlGbGFn
cykKK3sKKyAgICBtX2ZsYWdzID0gY2FwYWJpbGl0eUZsYWdzOworfQogCiBib29sIFZSRGlzcGxh
eUNhcGFiaWxpdGllczo6aGFzUG9zaXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gbV9mbGFncyAmIFZSRGlzcGxheUNhcGFiaWxpdHlGbGFnczo6UG9zaXRpb247
CiB9CiAKIGJvb2wgVlJEaXNwbGF5Q2FwYWJpbGl0aWVzOjpoYXNPcmllbnRhdGlvbigpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX2ZsYWdzICYgVlJEaXNwbGF5Q2Fw
YWJpbGl0eUZsYWdzOjpPcmllbnRhdGlvbjsKIH0KIAogYm9vbCBWUkRpc3BsYXlDYXBhYmlsaXRp
ZXM6Omhhc0V4dGVybmFsRGlzcGxheSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBtX2ZsYWdzICYgVlJEaXNwbGF5Q2FwYWJpbGl0eUZsYWdzOjpFeHRlcm5hbERpc3Bs
YXk7CiB9CiAKIGJvb2wgVlJEaXNwbGF5Q2FwYWJpbGl0aWVzOjpjYW5QcmVzZW50KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fZmxhZ3MgJiBWUkRpc3BsYXlDYXBh
YmlsaXR5RmxhZ3M6OlByZXNlbnQ7CiB9CiAKIHVuc2lnbmVkIFZSRGlzcGxheUNhcGFiaWxpdGll
czo6bWF4TGF5ZXIoKSBjb25zdAogewotICAgIHJldHVybiAwOworICAgIHJldHVybiBjYW5QcmVz
ZW50KCkgPyAxIDogMDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXlDYXBhYmlsaXRpZXMuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJEaXNwbGF5Q2FwYWJpbGl0aWVzLmgKaW5kZXgg
NTgzODE0OTk5NDlkMzBhZWJkODRiYjNlYzMyNDQ3N2ViNzFiNDhlMi4uNWU0MjI2MGRiZjQzOGE3
YmMxMjBiYTQzNzgxODhiODUyOWUzNDc3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJ2ci9WUkRpc3BsYXlDYXBhYmlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnZyL1ZSRGlzcGxheUNhcGFiaWxpdGllcy5oCkBAIC0zMiw5ICszMiw5IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgVlJEaXNwbGF5Q2FwYWJpbGl0aWVzIDogcHVibGlj
IFJlZkNvdW50ZWQ8VlJEaXNwbGF5Q2FwYWJpbGl0aWVzPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxWUkRpc3BsYXlDYXBhYmlsaXRpZXM+IGNyZWF0ZSgpCisgICAgc3RhdGljIFJlZjxWUkRp
c3BsYXlDYXBhYmlsaXRpZXM+IGNyZWF0ZSh1bnNpZ25lZCBjYXBhYmlsaXR5RmxhZ3MpCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWUkRpc3BsYXlDYXBhYmlsaXRpZXMpOwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWUkRpc3BsYXlDYXBhYmlsaXRpZXMoY2FwYWJp
bGl0eUZsYWdzKSk7CiAgICAgfQogCiAgICAgYm9vbCBoYXNQb3NpdGlvbigpIGNvbnN0OwpAQCAt
NDQsNyArNDQsOSBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbWF4TGF5ZXIoKSBjb25zdDsKIAog
cHJpdmF0ZToKLSAgICBWUkRpc3BsYXlDYXBhYmlsaXRpZXMoKTsKKyAgICBWUkRpc3BsYXlDYXBh
YmlsaXRpZXModW5zaWduZWQgY2FwYWJpbGl0eUZsYWdzKTsKKworICAgIHVuc2lnbmVkIG1fZmxh
Z3M7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDVmNjUz
ZmRhODAzYzQwMWZjOGI5ZDk3NWQyYjdhMTViODkzODUyN2MuLmJhODNkOTA0Mzk4ZGFkZDk5NjQz
YWJhMjdkMGJiY2Q5MGJlY2Q1OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xNzQ5LDYgKzE3NDksMTAg
QEAgcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwCiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNv
ZGluZ0RldGVjdG9ySUNVLmNwcAogcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5j
cHAKIAorcGxhdGZvcm0vdnIvVlJNYW5hZ2VyLmNwcAorcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxh
dGZvcm1EaXNwbGF5T3BlblZSLmNwcAorcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1NYW5h
Z2VyT3BlblZSLmNwcAorCiBwbHVnaW5zL0RPTU1pbWVUeXBlLmNwcAogcGx1Z2lucy9ET01NaW1l
VHlwZUFycmF5LmNwcAogcGx1Z2lucy9ET01QbHVnaW4uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggY2IwMWY4ZTVhMzk1ZjFk
NGI2NjliOWE0ZjRiY2E0OTkxZTVhNjk2Mi4uODZhOGRkYzQyYjg0ODc3NTM4ODE1NmY1M2IwNTA4
NzQ2MmI3MGNjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtNDUwNSw2ICs0NTA1LDkgQEAKIAkJRTE4MDgxMTcxNkZDRjlDQjAw
QjgwRDA3IC8qIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTgwODExNTE2RkNGOUNCMDBCODBEMDcgLyogU3lu
Y2hyb25vdXNMb2FkZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlFMTgyNTY5MDBFRjJCMDJEMDA5MzMyNDIgLyogSlNXb3JrZXJHbG9i
YWxTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTE4MjU2OEUwRUYyQjAyRDAwOTMzMjQyIC8qIEpTV29ya2VyR2xvYmFsU2NvcGUuaCAqLzsgfTsK
IAkJRTE4NTM2ODQxRjRFNDgxNDAwRkUwOTFCIC8qIFdlYkFyY2hpdmVSZXNvdXJjZUZyb21OU0F0
dHJpYnV0ZWRTdHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxODUzNjgxMUY0RTQ3MjcwMEZFMDkxQiAvKiBXZWJBcmNoaXZlUmVzb3VyY2VGcm9t
TlNBdHRyaWJ1dGVkU3RyaW5nLmggKi87IH07CisJCUUxODgyMzY0MjAzMUY1NzEwMEI0MkRGMyAv
KiBWUk1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUxODgyMzYzMjAzMUY1NUQwMEI0MkRGMyAvKiBWUk1hbmFnZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlFMTg4MjM2NTIwMzFGNTdGMDBC
NDJERjMgLyogVlJQbGF0Zm9ybURpc3BsYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUxODgyMzYwMjAzMUY1NUEwMEI0MkRGMyAvKiBWUlBsYXRmb3Jt
RGlzcGxheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCUUxODgyMzY2MjAzMUY1OTQwMEI0MkRGMyAvKiBWUlBsYXRmb3JtTWFuYWdlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4ODIzNjEyMDMxRjU1
QjAwQjQyREYzIC8qIFZSUGxhdGZvcm1NYW5hZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTE4QzM1NDQxRjcxOTcwQzAwRkY2MzJEIC8qIFdl
YkFyY2hpdmVSZXNvdXJjZVdlYlJlc291cmNlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4QzM1NDExRjcxOTZDRDAwRkY2MzJEIC8qIFdl
YkFyY2hpdmVSZXNvdXJjZVdlYlJlc291cmNlSGFuZGxlci5oICovOyB9OwogCQlFMThERjMzNTE4
QUFGMTJDMDA3NzNFNTkgLyogU2VyaWFsaXplZENyeXB0b0tleVdyYXAuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOERGMzM0MThBQUYxMkMwMDc3M0U1
OSAvKiBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUxOTcyNzE2MTgyMDU0OUUwMDU5MkQ1MSAvKiBDcnlw
dG9LZXlUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMTk3MjcxNTE4MjA1NDlFMDA1OTJENTEgLyogQ3J5cHRvS2V5VHlwZS5oICovOyB9OwpAQCAt
MTM4NDksNiArMTM4NTIsMTAgQEAKIAkJRTE4MjU4QUIwRUYzQ0Q3MDAwOTMzMjQyIC8qIEpTV29y
a2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUxODUzNjgxMUY0RTQ3MjcwMEZFMDkxQiAvKiBXZWJBcmNoaXZlUmVzb3VyY2VG
cm9tTlNBdHRyaWJ1dGVkU3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkFyY2hpdmVSZXNvdXJj
ZUZyb21OU0F0dHJpYnV0ZWRTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTE4NTM2ODIxRjRFNDcyNzAwRkUwOTFCIC8qIFdlYkFyY2hpdmVSZXNvdXJjZUZyb21OU0F0dHJp
YnV0ZWRTdHJpbmcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJBcmNoaXZlUmVzb3VyY2VG
cm9tTlNBdHRyaWJ1dGVkU3RyaW5nLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
MTg4MjM2MDIwMzFGNTVBMDBCNDJERjMgLyogVlJQbGF0Zm9ybURpc3BsYXkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVlJQbGF0Zm9ybURpc3BsYXkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRTE4ODIzNjEyMDMxRjU1QjAwQjQyREYzIC8qIFZSUGxhdGZvcm1N
YW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZSUGxhdGZvcm1NYW5h
Z2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxODgyMzYyMjAzMUY1NUMwMEI0
MkRGMyAvKiBWUk1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVlJNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTE4ODIzNjMy
MDMxRjU1RDAwQjQyREYzIC8qIFZSTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBWUk1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE4QzM1
NDExRjcxOTZDRDAwRkY2MzJEIC8qIFdlYkFyY2hpdmVSZXNvdXJjZVdlYlJlc291cmNlSGFuZGxl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJBcmNoaXZlUmVzb3VyY2VXZWJSZXNvdXJjZUhhbmRsZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE4QzM1NDIxRjcxOTcwMTAwRkY2MzJE
IC8qIFdlYkFyY2hpdmVSZXNvdXJjZVdlYlJlc291cmNlSGFuZGxlci5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFdlYkFyY2hpdmVSZXNvdXJjZVdlYlJlc291cmNlSGFuZGxlci5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE4REYzMzQxOEFBRjEyQzAwNzczRTU5IC8qIFNlcmlh
bGl6ZWRDcnlwdG9LZXlXcmFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNl
cmlhbGl6ZWRDcnlwdG9LZXlXcmFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
MzgwNSw2ICsyMzgxMiw3IEBACiAJCQkJNTE2MDMwMDkwQ0M0MjQ1NDAwQzhBQzI1IC8qIHBvc2l4
ICovLAogCQkJCTFBMkU2RTU2MENDNTUxRTAwMDRBMjA2MiAvKiBzcWwgKi8sCiAJCQkJQjJDM0Q5
RUMwRDAwNkMxRDAwRUY2RjI2IC8qIHRleHQgKi8sCisJCQkJRTE4ODIzNUYyMDMxRjUwRjAwQjQy
REYzIC8qIHZyICovLAogCQkJCTQ5QUUyRDk0MTM0RUU1RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlv
blZhbHVlLmNwcCAqLywKIAkJCQk0OUFFMkQ5NTEzNEVFNUY5MDA3MjkyMEEgLyogQ2FsY3VsYXRp
b25WYWx1ZS5oICovLAogCQkJCUMzMzBBMjIxMTNFQzE5NkIwMDAwQjQ1QiAvKiBDb2xvckNob29z
ZXIuaCAqLywKQEAgLTI0NDQ4LDYgKzI0NDU2LDE3IEBACiAJCQlwYXRoID0gYWxnb3JpdGhtczsK
IAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCUUxODgyMzVGMjAzMUY1MEYwMEI0
MkRGMyAvKiB2ciAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJ
CQkJRTE4ODIzNjIyMDMxRjU1QzAwQjQyREYzIC8qIFZSTWFuYWdlci5jcHAgKi8sCisJCQkJRTE4
ODIzNjMyMDMxRjU1RDAwQjQyREYzIC8qIFZSTWFuYWdlci5oICovLAorCQkJCUUxODgyMzYwMjAz
MUY1NUEwMEI0MkRGMyAvKiBWUlBsYXRmb3JtRGlzcGxheS5oICovLAorCQkJCUUxODgyMzYxMjAz
MUY1NUIwMEI0MkRGMyAvKiBWUlBsYXRmb3JtTWFuYWdlci5oICovLAorCQkJKTsKKwkJCXBhdGgg
PSB2cjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCUUxOURBMjlEMTgxOTk1
Q0UwMDA4OEJDOCAvKiBrZXlzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKQEAgLTMwMTA2LDYgKzMwMTI1LDExIEBACiAJCQkJNDE5QkMyREYxNjg1MzI5OTAwRDY0
RDZEIC8qIFZpc2l0ZWRMaW5rU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQkE4MDAwMTg5
NzM0MTIwMERDRTlENiAvKiBWaXNpdGVkTGlua1N0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
NDQ2MTNCNjBDRDYzNDRFMDBGQURBNzUgLyogVm9pZENhbGxiYWNrLmggaW4gSGVhZGVycyAqLywK
KwkJCQlFMTg4MjM2NDIwMzFGNTcxMDBCNDJERjMgLyogVlJNYW5hZ2VyLmggaW4gSGVhZGVycyAq
LywKKwkJCQlFMTg4MjM2NTIwMzFGNTdGMDBCNDJERjMgLyogVlJQbGF0Zm9ybURpc3BsYXkuaCBp
biBIZWFkZXJzICovLAorCQkJCUUxODgyMzZDMjAzMjAzNzQwMEI0MkRGMyAvKiBWUlBsYXRmb3Jt
RGlzcGxheU9wZW5WUi5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTE4ODIzNjYyMDMxRjU5NDAwQjQy
REYzIC8qIFZSUGxhdGZvcm1NYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMTg4MjM2RDIw
MzIwMzgyMDBCNDJERjMgLyogVlJQbGF0Zm9ybU1hbmFnZXJPcGVuVlIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJFMjA1MDdBMThBNDU4NkIwMDgwNjQ3RSAvKiBWVFRDdWUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTdBRjlCMjAzMThDRkIyREYwMEM2NEJFRiAvKiBWVFRSZWdpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTdBRjlCMjA2MThDRkIyREYwMEM2NEJFRiAvKiBWVFRSZWdpb25MaXN0LmggaW4g
SGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL1ZSTWFu
YWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9WUk1hbmFnZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmY3YTY4NDZlZTZkZDAzOGQyNTBiMmM3ZTNmMmIyZmU2NzYxOWYxZGMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9WUk1hbmFnZXIuY3BwCkBAIC0w
LDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhLCBTLkwuIEFsbCBy
aWdodCByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWUk1hbmFn
ZXIuaCIKKworI2luY2x1ZGUgIlZSUGxhdGZvcm1EaXNwbGF5LmgiCisjaW5jbHVkZSAiVlJQbGF0
Zm9ybU1hbmFnZXIuaCIKKworI2lmIFVTRShPUEVOVlIpCisjaW5jbHVkZSAiVlJQbGF0Zm9ybU1h
bmFnZXJPcGVuVlIuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1ZSTWFuYWdl
ciYgVlJNYW5hZ2VyOjpzaW5nbGV0b24oKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxW
Uk1hbmFnZXI+IGluc3RhbmNlOworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworVlJNYW5hZ2Vy
OjpWUk1hbmFnZXIoKQoreworI2lmIFVTRShPUEVOVlIpCisgICAgbV9wbGF0Zm9ybU1hbmFnZXIg
PSBWUlBsYXRmb3JtTWFuYWdlck9wZW5WUjo6Y3JlYXRlKCk7CisjZW5kaWYKK30KKworVlJNYW5h
Z2VyOjp+VlJNYW5hZ2VyKCkKK3sKKyAgICBtX3BsYXRmb3JtTWFuYWdlciA9IG51bGxwdHI7Cit9
CisKK3N0ZDo6b3B0aW9uYWw8VlJNYW5hZ2VyOjpWUkRpc3BsYXlzVmVjdG9yPiBWUk1hbmFnZXI6
OmdldFZSRGlzcGxheXMoKQoreworICAgIGlmICghbV9wbGF0Zm9ybU1hbmFnZXIpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gbV9wbGF0Zm9ybU1hbmFnZXItPmdl
dFZSRGlzcGxheXMoKTsKK30KKworfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL1ZSTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdnIvVlJNYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDk0MmM3Y2I1NWYwNTllMmQ3ODZk
MjMzNjI0MDYyMWNhZWFlMzNkZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3ZyL1ZSTWFuYWdlci5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgSWdhbGlhLCBTLkwuIEFsbCByaWdodCByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgVlJQbGF0Zm9ybURpc3BsYXk7CitjbGFzcyBWUlBsYXRmb3JtTWFuYWdlcjsKKworY2xh
c3MgVlJNYW5hZ2VyIGZpbmFsIHsKKyAgICBmcmllbmQgY2xhc3MgV1RGOjpOZXZlckRlc3Ryb3ll
ZDxWUk1hbmFnZXI+OworcHVibGljOgorICAgIHVzaW5nIFZSRGlzcGxheXNWZWN0b3IgPSBWZWN0
b3I8V2Vha1B0cjxWUlBsYXRmb3JtRGlzcGxheT4+OworCisgICAgflZSTWFuYWdlcigpOworCisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFZSTWFuYWdlciYgc2luZ2xldG9uKCk7CisKKyAgICBz
dGQ6Om9wdGlvbmFsPFZSRGlzcGxheXNWZWN0b3I+IGdldFZSRGlzcGxheXMoKTsKKworcHJpdmF0
ZToKKyAgICBWUk1hbmFnZXIoKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxWUlBsYXRmb3JtTWFu
YWdlcj4gbV9wbGF0Zm9ybU1hbmFnZXI7Cit9OworCit9OyAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdnIvVlJQbGF0Zm9ybURpc3BsYXku
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL1ZSUGxhdGZvcm1EaXNwbGF5LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMjdhZDllZmQyYjRjMTA5MWUxYTY4MjkzYjg2OTQxN2ViYzU1MzBiYwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL1ZSUGxhdGZvcm1EaXNwbGF5LmgK
QEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEsIFMuTC4g
QWxsIHJpZ2h0IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvV2Vh
a1B0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2VudW0gVlJEaXNwbGF5Q2FwYWJpbGl0eUZsYWdzIHsKKyAgICBOb25lID0gMCwK
KyAgICBQb3NpdGlvbiA9IDEgPDwgMSwKKyAgICBPcmllbnRhdGlvbiA9IDEgPDwgMiwKKyAgICBF
eHRlcm5hbERpc3BsYXkgPSAxIDw8IDMsCisgICAgUHJlc2VudCA9IDEgPDwgNAorfTsKKworLyog
VGhlIHB1cnBvc2Ugb2YgdGhpcyBjbGFzcyBpcyB0byBlbmNhcHN1bGF0ZSBhbGwgdGhlIGluZm8g
YWJvdXQgdGhlIGRpc3BsYXkgaW4gYSBzaW5nbGUgY2xhc3MvZGF0YQorICogc3RydWN0dXJlLiBU
aGlzIHdheSB3ZSB3b3VsZG4ndCBoYXZlIHRvIHJlcGxpY2F0ZSBhbGwgdGhlIEFQSSBjYWxscyBv
ZiBWUkRpc3BsYXkgaW4KKyAqIFZSUGxhdGZvcm1EaXNwbGF5LiBBbHNvIHRoZSBjbGllbnQgb2Yg
dGhpcyBBUEkgd291bGQgb25seSBoYXZlIHRvIGlzc3VlIGEgc2luZ2xlIGNhbGwgdG8gZ2V0IGFs
bAorICogdGhlIGluZm8gZnJvbSB0aGUgZGlzcGxheS4gTm90ZSB0aGF0IGl0J3MgZmFpcmx5IHVu
bGlrZWx5IHRoYXQgYSBWUiBhcHBsaWNhdGlvbiB3b3VsZCBvbmx5CisgKiByZXF1aXJlIGp1c3Qg
YSBmZXcgcGllY2VzIG9mIGluZm9ybWF0aW9uIGZyb20gdGhlIGRldmljZS4KKyovCitzdHJ1Y3Qg
VlJQbGF0Zm9ybURpc3BsYXlJbmZvIHsKKyAgICBTdHJpbmcgZGlzcGxheU5hbWU7CisgICAgYm9v
bCBpc0Nvbm5lY3RlZDsKKyAgICBib29sIGlzTW91bnRlZDsKKyAgICB1bnNpZ25lZCBjYXBhYmls
aXR5RmxhZ3M7Cit9OworCitjbGFzcyBWUlBsYXRmb3JtRGlzcGxheSB7CitwdWJsaWM6CisgICAg
dmlydHVhbCBWUlBsYXRmb3JtRGlzcGxheUluZm8gZ2V0RGlzcGxheUluZm8oKSA9IDA7CisgICAg
dmlydHVhbCB+VlJQbGF0Zm9ybURpc3BsYXkoKSA9IGRlZmF1bHQ7CisKKyAgICBXZWFrUHRyPFZS
UGxhdGZvcm1EaXNwbGF5PiBjcmVhdGVXZWFrUHRyKCkgeyByZXR1cm4gbV93ZWFrUHRyRmFjdG9y
eS5jcmVhdGVXZWFrUHRyKCp0aGlzKTsgfQorcHJpdmF0ZToKKworICAgIFdlYWtQdHJGYWN0b3J5
PFZSUGxhdGZvcm1EaXNwbGF5PiBtX3dlYWtQdHJGYWN0b3J5OworfTsKKworfTsgLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL1ZSUGxh
dGZvcm1NYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9WUlBsYXRmb3JtTWFu
YWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjg4YjI0ZWQwYjY1ZmUyOTE0NTc3OGQxYTM3YmQ0N2RlZjZmYWVi
NWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9WUlBsYXRm
b3JtTWFuYWdlci5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
SWdhbGlhLCBTLkwuIEFsbCByaWdodCByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiVlJQbGF0Zm9ybURpc3BsYXkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBWUkRpc3BsYXk7CisKK2NsYXNzIFZSUGxhdGZvcm1NYW5hZ2VyIHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIFZlY3RvcjxXZWFrUHRyPFZSUGxhdGZvcm1EaXNwbGF5Pj4gZ2V0VlJEaXNwbGF5cygp
ID0gMDsKKyAgICB2aXJ0dWFsIH5WUlBsYXRmb3JtTWFuYWdlcigpID0gZGVmYXVsdDsKK307CisK
K307IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40MWQ3NmYzMWIwNmZlNjFmYzljMWU5ZTFhODM0OGM0NGVlZjBkMzI5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNw
bGF5T3BlblZSLmNwcApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IElnYWxpYSwgUy5MLiBBbGwgcmlnaHQgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIuaCIKKworI2lmIFVTRShPUEVOVlIp
CisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlI6OlZSUGxhdGZvcm1EaXNwbGF5T3BlblZS
KHZyOjpJVlJTeXN0ZW0qIHN5c3RlbSwgdnI6OklWUkNoYXBlcm9uZSogY2hhcGVyb25lLCB2cjo6
SVZSQ29tcG9zaXRvciogY29tcG9zaXRvcikKKyAgICA6IG1fc3lzdGVtKHN5c3RlbSkKKyAgICAs
IG1fY2hhcGVyb25lKGNoYXBlcm9uZSkKKyAgICAsIG1fY29tcG9zaXRvcihjb21wb3NpdG9yKQor
eworICAgIG1fZGlzcGxheUluZm8uaXNDb25uZWN0ZWQgPSBtX3N5c3RlbS0+SXNUcmFja2VkRGV2
aWNlQ29ubmVjdGVkKHZyOjprX3VuVHJhY2tlZERldmljZUluZGV4X0htZCk7CisKKyAgICBTdHJp
bmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJPcGVuVlIgSE1EIik7CisgICAgY2hhciBITUROYW1lWzEyOF07CisgICAgaWYgKGF1dG8gbGVu
Z3RoID0gbV9zeXN0ZW0tPkdldFN0cmluZ1RyYWNrZWREZXZpY2VQcm9wZXJ0eSh2cjo6a191blRy
YWNrZWREZXZpY2VJbmRleF9IbWQsIHZyOjpQcm9wX01hbnVmYWN0dXJlck5hbWVfU3RyaW5nLCBI
TUROYW1lLCAxMjgpKSB7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgKCIpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChITUROYW1lLCBsZW5ndGgpOworICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnKScpOworICAgIH0KKyAgICBtX2Rpc3BsYXlJbmZvLmRpc3BsYXlO
YW1lID0gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworCisgICAgbV9kaXNwbGF5SW5mby5pc01v
dW50ZWQgPSBmYWxzZTsKKyAgICAvLyBGSVhNRTogV2UncmUgYXNzdW1pbmcgYW4gSFRDIFZpdmUg
SE1EIGhlcmUuIEdldCB0aGlzIGluZm8gZnJvbSBPcGVuVlI/LgorICAgIG1fZGlzcGxheUluZm8u
Y2FwYWJpbGl0eUZsYWdzID0gVlJEaXNwbGF5Q2FwYWJpbGl0eUZsYWdzOjpOb25lIHwKKyAgICAg
ICAgVlJEaXNwbGF5Q2FwYWJpbGl0eUZsYWdzOjpQb3NpdGlvbiB8CisgICAgICAgIFZSRGlzcGxh
eUNhcGFiaWxpdHlGbGFnczo6T3JpZW50YXRpb24gfAorICAgICAgICBWUkRpc3BsYXlDYXBhYmls
aXR5RmxhZ3M6OkV4dGVybmFsRGlzcGxheSB8CisgICAgICAgIFZSRGlzcGxheUNhcGFiaWxpdHlG
bGFnczo6UHJlc2VudDsKK30KKworfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFVTRShPUEVOVlIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9vcGVu
dnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Zy
L29wZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5WUi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFhOTNhNTZiOTI5
MjYyNDhmMGVjN2FiMmQ0Nzg1M2MzZDJmOWE2NjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIuaApAQCAt
MCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSwgUy5MLiBBbGwg
cmlnaHQgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShPUEVOVlIpCisKKyNp
bmNsdWRlICJWUlBsYXRmb3JtRGlzcGxheS5oIgorCisjaW5jbHVkZSA8b3BlbnZyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIgOiBwdWJs
aWMgVlJQbGF0Zm9ybURpc3BsYXkgeworcHVibGljOgorICAgIGV4cGxpY2l0IFZSUGxhdGZvcm1E
aXNwbGF5T3BlblZSKHZyOjpJVlJTeXN0ZW0qLCB2cjo6SVZSQ2hhcGVyb25lKiwgdnI6OklWUkNv
bXBvc2l0b3IqKTsKKworICAgIFZSUGxhdGZvcm1EaXNwbGF5SW5mbyBnZXREaXNwbGF5SW5mbygp
IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGlzcGxheUluZm87IH0KKworcHJpdmF0ZToKKyAgICB2cjo6
SVZSU3lzdGVtICptX3N5c3RlbTsKKyAgICB2cjo6SVZSQ2hhcGVyb25lICptX2NoYXBlcm9uZTsK
KyAgICB2cjo6SVZSQ29tcG9zaXRvciAqbV9jb21wb3NpdG9yOworCisgICAgVlJQbGF0Zm9ybURp
c3BsYXlJbmZvIG1fZGlzcGxheUluZm87Cit9OworCit9OyAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKE9QRU5WUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtTWFuYWdlck9wZW5WUi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybU1hbmFnZXJPcGVuVlIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjk5YThmMWQxNzE2YjFhODQ4MWM1NmQzOGRhZjdkZjhmMDFmZThjMzMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybU1hbmFn
ZXJPcGVuVlIuY3BwCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
SWdhbGlhLCBTLkwuIEFsbCByaWdodCByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJWUlBsYXRmb3JtTWFuYWdlck9wZW5WUi5oIgorCisjaW5jbHVkZSAiVlJQbGF0
Zm9ybURpc3BsYXlPcGVuVlIuaCIKKworI2lmIFVTRShPUEVOVlIpCisKKyNpbmNsdWRlICJKU1ZS
RGlzcGxheS5oIgorI2luY2x1ZGUgIlZSRGlzcGxheS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0ZDo6dW5pcXVlX3B0cjxWUlBsYXRmb3JtTWFuYWdlck9wZW5WUj4gVlJQbGF0Zm9ybU1h
bmFnZXJPcGVuVlI6OmNyZWF0ZSgpCit7CisgICAgaWYgKCF2cjo6VlJfSXNSdW50aW1lSW5zdGFs
bGVkKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV91
bmlxdWU8VlJQbGF0Zm9ybU1hbmFnZXJPcGVuVlI+KCk7Cit9CisKK1ZSUGxhdGZvcm1NYW5hZ2Vy
T3BlblZSOjp+VlJQbGF0Zm9ybU1hbmFnZXJPcGVuVlIoKQoreworICAgIHZyOjpWUl9TaHV0ZG93
bigpOworfQorCitib29sIFZSUGxhdGZvcm1NYW5hZ2VyT3BlblZSOjppbml0T3BlblZSKCkKK3sK
KyAgICB2cjo6SG1kRXJyb3IgZXJyb3I7CisgICAgbV9zeXN0ZW0gPSB2cjo6VlJfSW5pdCgmZXJy
b3IsIHZyOjpWUkFwcGxpY2F0aW9uX1NjZW5lKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitWZWN0b3I8V2Vha1B0cjxWUlBs
YXRmb3JtRGlzcGxheT4+IFZSUGxhdGZvcm1NYW5hZ2VyT3BlblZSOjpnZXRWUkRpc3BsYXlzKCkK
K3sKKyAgICAvLyBRdWlja2x5IGNoZWNrIGZvciBITURzLiBNdWNoIGZhc3RlciB0aGFuIGluaXRp
YWxpemluZyB0aGUgd2hvbGUgT3BlblZSIEFQSS4KKyAgICBpZiAoIXZyOjpWUl9Jc0htZFByZXNl
bnQoKSkgeworICAgICAgICBtX3N5c3RlbSA9IG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07
CisgICAgfQorCisgICAgaWYgKCFtX3N5c3RlbSAmJiAhaW5pdE9wZW5WUigpKSB7CisgICAgICAg
IG1fc3lzdGVtID0gbnVsbHB0cjsKKyAgICAgICAgdnI6OlZSX1NodXRkb3duKCk7CisgICAgICAg
IHJldHVybiB7IH07CisgICAgfQorCisgICAgdnI6OkhtZEVycm9yIGVycm9yOworICAgIHZyOjpJ
VlJDaGFwZXJvbmUqIGNoYXBlcm9uZSA9IHN0YXRpY19jYXN0PHZyOjpJVlJDaGFwZXJvbmUqPih2
cjo6VlJfR2V0R2VuZXJpY0ludGVyZmFjZSh2cjo6SVZSQ2hhcGVyb25lX1ZlcnNpb24sICZlcnJv
cikpOworICAgIGlmIChlcnJvciB8fCAhY2hhcGVyb25lKQorICAgICAgICByZXR1cm4geyB9Owor
CisgICAgdnI6OklWUkNvbXBvc2l0b3IqIGNvbXBvc2l0b3IgPSBzdGF0aWNfY2FzdDx2cjo6SVZS
Q29tcG9zaXRvcio+KHZyOjpWUl9HZXRHZW5lcmljSW50ZXJmYWNlKHZyOjpJVlJDb21wb3NpdG9y
X1ZlcnNpb24sICZlcnJvcikpOworICAgIGlmIChlcnJvciB8fCAhY29tcG9zaXRvcikKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIFZlY3RvcjxXZWFrUHRyPFZSUGxhdGZvcm1EaXNwbGF5Pj4g
ZGlzcGxheXM7CisgICAgaWYgKCFtX2Rpc3BsYXkpCisgICAgICAgIG1fZGlzcGxheSA9IHN0ZDo6
bWFrZV91bmlxdWU8VlJQbGF0Zm9ybURpc3BsYXlPcGVuVlI+KG1fc3lzdGVtLCBjaGFwZXJvbmUs
IGNvbXBvc2l0b3IpOworICAgIGRpc3BsYXlzLmFwcGVuZChtX2Rpc3BsYXktPmNyZWF0ZVdlYWtQ
dHIoKSk7CisgICAgcmV0dXJuIGRpc3BsYXlzOworfQorCit9OyAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gVVNFKE9QRU5WUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtTWFuYWdlck9wZW5WUi5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1NYW5hZ2VyT3BlblZSLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNmE0Mzg3Y2MzMDgxNWUwMGMzNDE2Yzg5NjZhZDI5ZDRiNzNmNzBkOQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtTWFuYWdl
ck9wZW5WUi5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdh
bGlhLCBTLkwuIEFsbCByaWdodCByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNF
KE9QRU5WUikKKworI2luY2x1ZGUgIlZSUGxhdGZvcm1NYW5hZ2VyLmgiCisKKyNpbmNsdWRlIDxv
cGVudnIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBWUlBsYXRmb3JtRGlzcGxh
eU9wZW5WUjsKKworY2xhc3MgVlJQbGF0Zm9ybU1hbmFnZXJPcGVuVlIgOiBwdWJsaWMgVlJQbGF0
Zm9ybU1hbmFnZXIgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VlJQbGF0
Zm9ybU1hbmFnZXJPcGVuVlI+IGNyZWF0ZSgpOworICAgIGV4cGxpY2l0IFZSUGxhdGZvcm1NYW5h
Z2VyT3BlblZSKCkgPSBkZWZhdWx0OworCisgICAgVmVjdG9yPFdlYWtQdHI8VlJQbGF0Zm9ybURp
c3BsYXk+PiBnZXRWUkRpc3BsYXlzKCkgb3ZlcnJpZGU7CisKKyAgICB+VlJQbGF0Zm9ybU1hbmFn
ZXJPcGVuVlIoKTsKK3ByaXZhdGU6CisgICAgYm9vbCBpbml0T3BlblZSKCk7CisKKyAgICB2cjo6
SVZSU3lzdGVtKiBtX3N5c3RlbSB7IG51bGxwdHIgfTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VlJQ
bGF0Zm9ybURpc3BsYXlPcGVuVlI+IG1fZGlzcGxheTsKK307CisKK307IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoT1BFTlZSKQo=
</data>
<flag name="review"
          id="352828"
          type_id="1"
          status="+"
          setter="zan"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>334151</attachid>
            <date>2018-02-19 04:21:51 -0800</date>
            <delta_ts>2018-02-19 04:21:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-182692-20180219132149.patch</filename>
            <type>text/plain</type>
            <size>35300</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI3Nzg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTY1ODVmMmUyNTAyMTQ0
Yjk4NmNhYzI5OTdhYTFiNzM1ZDhjZWU4Yy4uMmUzZjY3NDQ2ZGNkMzQ4ODcwODkzZjNjNTkxODMz
ZTc1ZTY5ZGZiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDE4LTAyLTEyICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtXZWJWUl1b
T3BlblZSXSBJbXBsZW1lbnQgZ2V0VlJEaXNwbGF5cygpCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODI2OTIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHByb3ZpZGVzIGFuIGltcGxlbWVudGF0aW9u
IG9mIE5hdmlnYXRvcidzIGdldFZSRGlzcGxheXMoKQorICAgICAgICBtZXRob2QgdXNpbmcgT3Bl
blZSIGFzIGJhY2tlbmQuIEl0IHF1ZXVlcyBzZXZlcmFsIHByb21pc2VzIGluCisgICAgICAgIGEg
cXVldWUgYW5kIHJlc29sdmVzIHRoZW0gYWxsIGp1c3Qgb25jZS4gVGhlIGluZm9ybWF0aW9uIHJl
dHJpZXZlZAorICAgICAgICBpcyB2ZXJ5IG1pbmltYWwgZm9yIHRoZSB0aW1lIGJlaW5nLCBidXQg
dGhpcyBjaGFuZ2UgbGF5cyB0aGUgZ3JvdW5kCisgICAgICAgIGZvciBhbGwgdGhlIGNoYW5nZXMg
dGhhdCBhcmUgYWJvdXQgdG8gbGFuZC4KKworICAgICAgICBUaGUgVlIgY29kZSB1c2VzIGEgVlJN
YW5hZ2VyIHdoaWNoIGlzIHRoZSBpbnRlcmZhY2Ugd2l0aCB0aGUKKyAgICAgICAgcGxhdGZvcm0g
Y29kZSBhbmQgdGhlIHJlc3BvbnNpYmxlIGZvciBpbnN0YW50aWF0aW5nIHRoZSByaWdodAorICAg
ICAgICBwbGF0Zm9ybSBjb2RlLiBUaGlzIHBsYXRmb3JtIGNvZGUgaXMgY3VycmVudGx5IGJlaW5n
IGltcGxlbWVudGVkCisgICAgICAgIHVzaW5nIE9wZW5WUiBidXQgY291bGQgd2UgYWxzbyBwb3J0
ZWQgaW4gdGhlIGZ1dHVyZSB0byBPcGVuWFIgb3IgYW55CisgICAgICAgIG90aGVyIFZSIFNESy4K
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIE1vZHVsZXMvd2VidnIvTmF2
aWdhdG9yV2ViVlIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yV2ViVlI6OmdldFZS
RGlzcGxheXMpOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yV2ViVlI6OnZyRW5hYmxlZCk6
CisgICAgICAgICogTW9kdWxlcy93ZWJ2ci9OYXZpZ2F0b3JXZWJWUi5oOgorICAgICAgICAqIE1v
ZHVsZXMvd2VidnIvVlJEaXNwbGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheTo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheTo6VlJEaXNwbGF5KToKKyAgICAg
ICAgKFdlYkNvcmU6OlZSRGlzcGxheTo6aXNDb25uZWN0ZWQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6VlJEaXNwbGF5OjpkaXNwbGF5TmFtZSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93
ZWJ2ci9WUkRpc3BsYXkuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYnZyL1ZSRGlzcGxheUNhcGFi
aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWUkRpc3BsYXlDYXBhYmlsaXRpZXM6OlZS
RGlzcGxheUNhcGFiaWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpWUkRpc3BsYXlDYXBhYmls
aXRpZXM6Omhhc1Bvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlZSRGlzcGxheUNh
cGFiaWxpdGllczo6aGFzT3JpZW50YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VlJE
aXNwbGF5Q2FwYWJpbGl0aWVzOjpoYXNFeHRlcm5hbERpc3BsYXkgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6VlJEaXNwbGF5Q2FwYWJpbGl0aWVzOjpjYW5QcmVzZW50IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlZSRGlzcGxheUNhcGFiaWxpdGllczo6bWF4TGF5ZXIgY29uc3QpOgorICAg
ICAgICAqIE1vZHVsZXMvd2VidnIvVlJEaXNwbGF5Q2FwYWJpbGl0aWVzLmg6CisgICAgICAgIChX
ZWJDb3JlOjpWUkRpc3BsYXlDYXBhYmlsaXRpZXM6OmNyZWF0ZSk6CisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogcGxhdGZvcm0vdnIvVlJNYW5hZ2VyLmNwcDogQWRkZWQuIFRoaXMg
aXMgdGhlIG1haW4gaW50ZXJmYWNlIHVzZWQgYnkgYmluZGluZ3MgY29kZSB0bworICAgICAgICBh
Y2Nlc3MgVlIgZGV2aWNlcyBkYXRhIHByb3ZpZGVkIGJ5IHBsYXRmb3JtIGNvZGUuCisgICAgICAg
IChXZWJDb3JlOjpWUk1hbmFnZXI6OnNpbmdsZXRvbik6CisgICAgICAgIChXZWJDb3JlOjpWUk1h
bmFnZXI6OlZSTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpWUk1hbmFnZXI6On5WUk1hbmFn
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VlJNYW5hZ2VyOjpyZWZyZXNoVlJEZXZpY2VzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS92ci9WUk1hbmFnZXIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vdnIvVlJQbGF0Zm9ybURpc3BsYXkuaDogQWRkZWQuIEFic3RyYWN0aW9uIG9mIGEgVlIgZGlz
cGxheSBzeXN0ZW0uIFRvIGJlCisgICAgICAgIGltcGxlbWVudGVkIGJ5IGJhY2tlbmRzIGxpa2Ug
T3BlblZSLCBPcGVuWFIuLi4KKyAgICAgICAgKiBwbGF0Zm9ybS92ci9WUlBsYXRmb3JtTWFuYWdl
ci5oOiBBZGRlZC4gQWJzdHJhY3Rpb24gb2YgdGhlIHBsYXRmb3JtIHNwZWNpZmljIGNsYXNzIHdo
aWNoCisgICAgICAgIHJldHJpZXZlcyBkYXRhIGZyb20gVlIgZGV2aWNlcy4gVG8gYmUgaW1wbGVt
ZW50ZWQgYnkgYmFja2VuZHMgbGlrZSBPcGVuVlIsIE9wZW5YUi4uLgorICAgICAgICAqIHBsYXRm
b3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5WUi5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6VlJQbGF0Zm9ybURpc3BsYXlPcGVuVlI6OlZSUGxhdGZvcm1EaXNwbGF5T3Bl
blZSKToKKyAgICAgICAgKiBwbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVu
VlIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1NYW5h
Z2VyT3BlblZSLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpWUlBsYXRmb3JtTWFuYWdl
ck9wZW5WUjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlZSUGxhdGZvcm1NYW5hZ2VyT3Bl
blZSOjpWUlBsYXRmb3JtTWFuYWdlck9wZW5WUik6CisgICAgICAgIChXZWJDb3JlOjpWUlBsYXRm
b3JtTWFuYWdlck9wZW5WUjo6flZSUGxhdGZvcm1NYW5hZ2VyT3BlblZSKToKKyAgICAgICAgKFdl
YkNvcmU6OlZSUGxhdGZvcm1NYW5hZ2VyT3BlblZSOjppbml0T3BlblZSKToKKyAgICAgICAgKiBw
bGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybU1hbmFnZXJPcGVuVlIuaDogQWRkZWQuCisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE4LTAxLTMwICBB
bnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBBdm9pZCB0cmF2ZXJz
aW5nIHRvbyBtdWNoIHdoZW4gZG9pbmcgY2xhc3MgY2hhbmdlIGludmFsaWRhdGlvbgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAppbmRleCA0OTdiNGRkMmE0OGEzNjBjNGI1ZDkxMzEyOGNlZGI3MzhlYWE1ZmJk
Li5lNzZmMDA2Yjc3OGM5MzdkMzE1MjFkNDk0ZWUwZmE0MTMyN2VjMzUzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dApAQCAtMTE4LDYgKzExOCw3IEBAIHNldChXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJ
RVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vc3FsIgogICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS90ZXh0IgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS90ZXh0L2ljdSIK
KyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vdnIiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3Bs
dWdpbnMiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3JlbmRlcmluZyIKICAgICAiJHtXRUJDT1JFX0RJ
Un0vcmVuZGVyaW5nL2xpbmUiCkBAIC0xNTI3LDYgKzE1MjgsNyBAQCBlbmRpZiAoKQogCiBpZiAo
VVNFX09QRU5WUikKICAgbGlzdChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTICIk
e1RISVJEUEFSVFlfRElSfS9vcGVudnIvaGVhZGVycyIpCisgIGxpc3QoQVBQRU5EIFdlYkNvcmVf
SU5DTFVERV9ESVJFQ1RPUklFUyAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vdnIvb3BlbnZyIikK
ICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMgb3BlbnZyX2FwaSkKIGVuZGlmICgpCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvTmF2aWdhdG9yV2ViVlIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9OYXZpZ2F0b3JXZWJWUi5jcHAKaW5k
ZXggZWNiNTQxMTkyMjU3NDRmMmJhOWQ0NDZiNThjNzNlMDE3OTUwNGFmNC4uYWE1NjlhMGZmNGE2
OTgxMzIwYjliNTZkNDc5MTg0NzJkM2I0ODI2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJ2ci9OYXZpZ2F0b3JXZWJWUi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJ2ci9OYXZpZ2F0b3JXZWJWUi5jcHAKQEAgLTI2LDEyICsyNiwzMyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk5hdmlnYXRvcldlYlZSLmgiCiAKKyNpbmNsdWRlICJE
b2N1bWVudC5oIgorI2luY2x1ZGUgIkpTVlJEaXNwbGF5LmgiCisjaW5jbHVkZSAiTmF2aWdhdG9y
LmgiCiAjaW5jbHVkZSAiVlJEaXNwbGF5LmgiCisjaW5jbHVkZSAiVlJNYW5hZ2VyLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBOYXZpZ2F0b3JXZWJWUjo6Z2V0VlJEaXNwbGF5cyhO
YXZpZ2F0b3ImLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKQordm9pZCBOYXZpZ2F0b3JXZWJWUjo6
Z2V0VlJEaXNwbGF5cyhOYXZpZ2F0b3ImIG5hdmlnYXRvciwgRG9jdW1lbnQmIGRvY3VtZW50LCBH
ZXRWUkRpc3BsYXlzUHJvbWlzZSYmIHByb21pc2UpCiB7CisgICAgaWYgKCF2ckVuYWJsZWQobmF2
aWdhdG9yKSkgeworICAgICAgICBwcm9taXNlLnJlamVjdCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgZG9jdW1lbnQucG9zdFRhc2soW3Byb21pc2UgPSBXVEZNb3ZlKHByb21pc2Up
XSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJsZSB7CisgICAgICAgIHN0
ZDo6b3B0aW9uYWw8VlJNYW5hZ2VyOjpWUkRpc3BsYXlzVmVjdG9yPiBwbGF0Zm9ybURpc3BsYXlz
ID0gVlJNYW5hZ2VyOjpzaW5nbGV0b24oKS5nZXRWUkRpc3BsYXlzKCk7CisgICAgICAgIGlmICgh
cGxhdGZvcm1EaXNwbGF5cykgeworICAgICAgICAgICAgcHJvbWlzZS5yZWplY3QoKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFZlY3RvcjxSZWY8VlJEaXNwbGF5
Pj4gZGlzcGxheXM7CisgICAgICAgIGZvciAoYXV0byYgcGxhdGZvcm1EaXNwbGF5IDogcGxhdGZv
cm1EaXNwbGF5cy52YWx1ZSgpKQorICAgICAgICAgICAgZGlzcGxheXMuYXBwZW5kKFZSRGlzcGxh
eTo6Y3JlYXRlKGNvbnRleHQsIFdURk1vdmUocGxhdGZvcm1EaXNwbGF5KSkpOworICAgICAgICBw
cm9taXNlLnJlc29sdmUoZGlzcGxheXMpOworICAgIH0pOwogfQogCiBjb25zdCBWZWN0b3I8UmVm
UHRyPFZSRGlzcGxheT4+JiBOYXZpZ2F0b3JXZWJWUjo6YWN0aXZlVlJEaXNwbGF5cyhOYXZpZ2F0
b3ImKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9OYXZpZ2F0b3JX
ZWJWUi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9OYXZpZ2F0b3JXZWJWUi5oCmlu
ZGV4IGZlMTU3Njk3NzQ1ZTBkZmE5N2E1MGExYzBkNGRkOGE1MThiY2MwNDguLjQ2ZWYxZDU0NTIz
ZGM2OGJhNDRhZjE5Y2YyNzljM2I5NzhlYmQ5ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2VidnIvTmF2aWdhdG9yV2ViVlIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnZyL05hdmlnYXRvcldlYlZSLmgKQEAgLTMxLDEzICszMSwxNiBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIERvY3VtZW50OwogY2xhc3MgTmF2aWdhdG9yOwogY2xhc3Mg
UGFnZTsKIGNsYXNzIFZSRGlzcGxheTsKIAogY2xhc3MgTmF2aWdhdG9yV2ViVlIgZmluYWwgOiBw
dWJsaWMgU3VwcGxlbWVudDxQYWdlPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgZ2V0VlJE
aXNwbGF5cyhOYXZpZ2F0b3ImLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKKyAgICB1c2luZyBH
ZXRWUkRpc3BsYXlzUHJvbWlzZSA9IERPTVByb21pc2VEZWZlcnJlZDxJRExTZXF1ZW5jZTxJRExJ
bnRlcmZhY2U8VlJEaXNwbGF5Pj4+OworCisgICAgc3RhdGljIHZvaWQgZ2V0VlJEaXNwbGF5cyhO
YXZpZ2F0b3ImLCBEb2N1bWVudCYsIEdldFZSRGlzcGxheXNQcm9taXNlJiYpOwogICAgIHN0YXRp
YyBjb25zdCBWZWN0b3I8UmVmUHRyPFZSRGlzcGxheT4+JiBhY3RpdmVWUkRpc3BsYXlzKE5hdmln
YXRvciYpOwogICAgIHN0YXRpYyBib29sIHZyRW5hYmxlZChOYXZpZ2F0b3ImKTsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL05hdmlnYXRvcldlYlZSLmlkbCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvTmF2aWdhdG9yV2ViVlIuaWRsCmluZGV4IGU1
NTA0Nzc2MjA2NWUyN2IxZmM3ZDQyYTllYTQ3YWI0YTUwNDE2OWUuLmY1ZTdhODc0ZTZjY2MwOTU1
ZTBlZGEzYjE3YWNhNTQzZTRiMmUzNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2VidnIvTmF2aWdhdG9yV2ViVlIuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2VidnIvTmF2aWdhdG9yV2ViVlIuaWRsCkBAIC0yNiw2ICsyNiw2IEBACiBbCiAgICAgRW5hYmxl
ZEF0UnVudGltZT1XZWJWUiwKIF0gcGFydGlhbCBpbnRlcmZhY2UgTmF2aWdhdG9yIHsKLSAgICBQ
cm9taXNlPHNlcXVlbmNlPFZSRGlzcGxheT4+IGdldFZSRGlzcGxheXMoKTsKKyAgICBbQ2FsbFdp
dGg9RG9jdW1lbnRdIFByb21pc2U8c2VxdWVuY2U8VlJEaXNwbGF5Pj4gZ2V0VlJEaXNwbGF5cygp
OwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBGcm96ZW5BcnJheTxWUkRpc3BsYXk+IGFjdGl2ZVZS
RGlzcGxheXM7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9W
UkRpc3BsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXkuY3Bw
CmluZGV4IDNhNTI3MGE5ZjU4NzVhZWM2NzgzNGMwYjM3M2FjYmM1Nzc5ZjBkYjIuLmMyYmQxOGQ2
NTYzOTk3ZGZhN2FlNGM3NGFiNDhkNGZjNmRkNTA4OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2VidnIvVlJEaXNwbGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnZyL1ZSRGlzcGxheS5jcHAKQEAgLTI5LDIxICsyOSwyNCBAQAogI2luY2x1ZGUgIlZS
RGlzcGxheUNhcGFiaWxpdGllcy5oIgogI2luY2x1ZGUgIlZSRXllUGFyYW1ldGVycy5oIgogI2lu
Y2x1ZGUgIlZSTGF5ZXJJbml0LmgiCisjaW5jbHVkZSAiVlJQbGF0Zm9ybURpc3BsYXkuaCIKICNp
bmNsdWRlICJWUlBvc2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8VlJEaXNwbGF5
PiBWUkRpc3BsYXk6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KQorUmVm
PFZSRGlzcGxheT4gVlJEaXNwbGF5OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCwgV2Vha1B0cjxWUlBsYXRmb3JtRGlzcGxheT4mJiBwbGF0Zm9ybURpc3BsYXkpCiB7Ci0g
ICAgYXV0byBkaXNwbGF5ID0gYWRvcHRSZWYoKm5ldyBWUkRpc3BsYXkoY29udGV4dCkpOworICAg
IGF1dG8gZGlzcGxheSA9IGFkb3B0UmVmKCpuZXcgVlJEaXNwbGF5KGNvbnRleHQsIFdURk1vdmUo
cGxhdGZvcm1EaXNwbGF5KSkpOwogICAgIGRpc3BsYXktPnN1c3BlbmRJZk5lZWRlZCgpOwogICAg
IHJldHVybiBkaXNwbGF5OwogfQogCi1WUkRpc3BsYXk6OlZSRGlzcGxheShTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0KQorVlJEaXNwbGF5OjpWUkRpc3BsYXkoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udGV4dCwgV2Vha1B0cjxWUlBsYXRmb3JtRGlzcGxheT4mJiBwbGF0Zm9ybURp
c3BsYXkpCiAgICAgOiBBY3RpdmVET01PYmplY3QoJmNvbnRleHQpCi0gICAgLCBtX2NhcGFiaWxp
dGllcyhWUkRpc3BsYXlDYXBhYmlsaXRpZXM6OmNyZWF0ZSgpKQorICAgICwgbV9jYXBhYmlsaXRp
ZXMoVlJEaXNwbGF5Q2FwYWJpbGl0aWVzOjpjcmVhdGUocGxhdGZvcm1EaXNwbGF5LT5nZXREaXNw
bGF5SW5mbygpLmNhcGFiaWxpdHlGbGFncykpCiAgICAgLCBtX2V5ZVBhcmFtZXRlcnMoVlJFeWVQ
YXJhbWV0ZXJzOjpjcmVhdGUoKSkKKyAgICAsIG1fZGlzcGxheShXVEZNb3ZlKHBsYXRmb3JtRGlz
cGxheSkpCisgICAgLCBtX2Rpc3BsYXlOYW1lKHBsYXRmb3JtRGlzcGxheS0+Z2V0RGlzcGxheUlu
Zm8oKS5kaXNwbGF5TmFtZSkKIHsKIH0KIApAQCAtNTEsNyArNTQsMTAgQEAgVlJEaXNwbGF5Ojp+
VlJEaXNwbGF5KCkgPSBkZWZhdWx0OwogCiBib29sIFZSRGlzcGxheTo6aXNDb25uZWN0ZWQoKSBj
b25zdAogewotICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fZGlzcGxheSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG1fZGlzcGxheS0+Z2V0RGlzcGxheUluZm8oKS5p
c0Nvbm5lY3RlZDsKIH0KIAogYm9vbCBWUkRpc3BsYXk6OmlzUHJlc2VudGluZygpIGNvbnN0CkBA
IC04MSw3ICs4Nyw3IEBAIHVuc2lnbmVkIFZSRGlzcGxheTo6ZGlzcGxheUlkKCkgY29uc3QKIAog
Y29uc3QgU3RyaW5nJiBWUkRpc3BsYXk6OmRpc3BsYXlOYW1lKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKKyAgICByZXR1cm4gbV9kaXNwbGF5TmFtZTsKIH0KIAogYm9vbCBW
UkRpc3BsYXk6OmdldEZyYW1lRGF0YShWUkZyYW1lRGF0YSYpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxheS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXkuaAppbmRleCBhODUyOWM3OGMyODZkYzdlYmMxMjYxYzJk
NDZhZTliYmY4MDYwY2IzLi4zZDg1ZDNiNzc3MTNiMzZlYTQwNDlkMDQ2OTIxZDNjZTdjNGRmMDI2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxheS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJEaXNwbGF5LmgKQEAgLTM3LDEzICsz
NywxNCBAQCBjbGFzcyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjazsKIGNsYXNzIFZSRGlz
cGxheUNhcGFiaWxpdGllczsKIGNsYXNzIFZSRXllUGFyYW1ldGVyczsKIGNsYXNzIFZSRnJhbWVE
YXRhOworY2xhc3MgVlJQbGF0Zm9ybURpc3BsYXk7CiBjbGFzcyBWUlBvc2U7CiBjbGFzcyBWUlN0
YWdlUGFyYW1ldGVyczsKIHN0cnVjdCBWUkxheWVySW5pdDsKIAogY2xhc3MgVlJEaXNwbGF5IDog
cHVibGljIFJlZkNvdW50ZWQ8VlJEaXNwbGF5PiwgcHVibGljIEV2ZW50VGFyZ2V0V2l0aElubGlu
ZURhdGEsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
VlJEaXNwbGF5PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpOworICAgIHN0YXRpYyBS
ZWY8VlJEaXNwbGF5PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFdlYWtQdHI8VlJQ
bGF0Zm9ybURpc3BsYXk+JiYpOwogCiAgICAgdmlydHVhbCB+VlJEaXNwbGF5KCk7CiAKQEAgLTgy
LDcgKzgzLDcgQEAgcHVibGljOgogICAgIHZvaWQgc3VibWl0RnJhbWUoKTsKIAogcHJpdmF0ZToK
LSAgICBWUkRpc3BsYXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpOworICAgIFZSRGlzcGxheShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiwgV2Vha1B0cjxWUlBsYXRmb3JtRGlzcGxheT4mJik7CiAK
ICAgICAvLyBFdmVudFRhcmdldAogICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0
SW50ZXJmYWNlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gVlJEaXNwbGF5RXZlbnRUYXJnZXRJ
bnRlcmZhY2VUeXBlOyB9CkBAIC05OCw2ICs5OSwxMCBAQCBwcml2YXRlOgogCiAgICAgUmVmPFZS
RGlzcGxheUNhcGFiaWxpdGllcz4gbV9jYXBhYmlsaXRpZXM7CiAgICAgUmVmPFZSRXllUGFyYW1l
dGVycz4gbV9leWVQYXJhbWV0ZXJzOworCisgICAgV2Vha1B0cjxWUlBsYXRmb3JtRGlzcGxheT4g
bV9kaXNwbGF5OworCisgICAgY29uc3QgU3RyaW5nIG1fZGlzcGxheU5hbWU7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YnZyL1ZSRGlzcGxheUNhcGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YnZyL1ZSRGlzcGxheUNhcGFiaWxpdGllcy5jcHAKaW5kZXggNDg4NDdjODc2ZmQzYzZkNmY2Yzdm
Mjc4OTdkNzMxMTJlNTM4NWQyOC4uNTc2NTQ3OGU2NWQ1NGRlNTU0MzEzNjk4YjEyNWZmYzdjM2Jk
MmRkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXlD
YXBhYmlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJEaXNw
bGF5Q2FwYWJpbGl0aWVzLmNwcApAQCAtMjgsMzEgKzI4LDM0IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotVlJEaXNwbGF5Q2FwYWJpbGl0aWVzOjpWUkRpc3BsYXlDYXBhYmlsaXRpZXMoKSA9
IGRlZmF1bHQ7CitWUkRpc3BsYXlDYXBhYmlsaXRpZXM6OlZSRGlzcGxheUNhcGFiaWxpdGllcyh1
bnNpZ25lZCBjYXBhYmlsaXR5RmxhZ3MpCit7CisgICAgbV9mbGFncyA9IGNhcGFiaWxpdHlGbGFn
czsKK30KIAogYm9vbCBWUkRpc3BsYXlDYXBhYmlsaXRpZXM6Omhhc1Bvc2l0aW9uKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fZmxhZ3MgJiBWUkRpc3BsYXlDYXBh
YmlsaXR5RmxhZ3M6OlBvc2l0aW9uOwogfQogCiBib29sIFZSRGlzcGxheUNhcGFiaWxpdGllczo6
aGFzT3JpZW50YXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
bV9mbGFncyAmIFZSRGlzcGxheUNhcGFiaWxpdHlGbGFnczo6T3JpZW50YXRpb247CiB9CiAKIGJv
b2wgVlJEaXNwbGF5Q2FwYWJpbGl0aWVzOjpoYXNFeHRlcm5hbERpc3BsYXkoKSBjb25zdAogewot
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9mbGFncyAmIFZSRGlzcGxheUNhcGFiaWxp
dHlGbGFnczo6RXh0ZXJuYWxEaXNwbGF5OwogfQogCiBib29sIFZSRGlzcGxheUNhcGFiaWxpdGll
czo6Y2FuUHJlc2VudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBt
X2ZsYWdzICYgVlJEaXNwbGF5Q2FwYWJpbGl0eUZsYWdzOjpQcmVzZW50OwogfQogCiB1bnNpZ25l
ZCBWUkRpc3BsYXlDYXBhYmlsaXRpZXM6Om1heExheWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gY2FuUHJlc2VudCgpID8gMSA6IDA7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJEaXNw
bGF5Q2FwYWJpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnZyL1ZSRGlzcGxh
eUNhcGFiaWxpdGllcy5oCmluZGV4IDU4MzgxNDk5OTQ5ZDMwYWViZDg0YmIzZWMzMjQ0NzdlYjcx
YjQ4ZTIuLjVlNDIyNjBkYmY0MzhhN2JjMTIwYmE0Mzc4MTg4Yjg1MjllMzQ3NzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VidnIvVlJEaXNwbGF5Q2FwYWJpbGl0aWVzLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ2ci9WUkRpc3BsYXlDYXBhYmlsaXRpZXMu
aApAQCAtMzIsOSArMzIsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFZSRGlzcGxh
eUNhcGFiaWxpdGllcyA6IHB1YmxpYyBSZWZDb3VudGVkPFZSRGlzcGxheUNhcGFiaWxpdGllcz4g
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8VlJEaXNwbGF5Q2FwYWJpbGl0aWVzPiBjcmVhdGUo
KQorICAgIHN0YXRpYyBSZWY8VlJEaXNwbGF5Q2FwYWJpbGl0aWVzPiBjcmVhdGUodW5zaWduZWQg
Y2FwYWJpbGl0eUZsYWdzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVlJE
aXNwbGF5Q2FwYWJpbGl0aWVzKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVlJEaXNw
bGF5Q2FwYWJpbGl0aWVzKGNhcGFiaWxpdHlGbGFncykpOwogICAgIH0KIAogICAgIGJvb2wgaGFz
UG9zaXRpb24oKSBjb25zdDsKQEAgLTQ0LDcgKzQ0LDkgQEAgcHVibGljOgogICAgIHVuc2lnbmVk
IG1heExheWVyKCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgVlJEaXNwbGF5Q2FwYWJpbGl0aWVz
KCk7CisgICAgVlJEaXNwbGF5Q2FwYWJpbGl0aWVzKHVuc2lnbmVkIGNhcGFiaWxpdHlGbGFncyk7
CisKKyAgICB1bnNpZ25lZCBtX2ZsYWdzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAppbmRleCA1ZjY1M2ZkYTgwM2M0MDFmYzhiOWQ5NzVkMmI3YTE1Yjg5Mzg1Mjdj
Li5iYTgzZDkwNDM5OGRhZGQ5OTY0M2FiYTI3ZDBiYmNkOTBiZWNkNTlmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dApAQCAtMTc0OSw2ICsxNzQ5LDEwIEBAIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcAog
cGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdEZXRlY3RvcklDVS5jcHAKIHBsYXRmb3JtL3RleHQv
VGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCiAKK3BsYXRmb3JtL3ZyL1ZSTWFuYWdlci5jcHAKK3Bs
YXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtRGlzcGxheU9wZW5WUi5jcHAKK3BsYXRmb3JtL3Zy
L29wZW52ci9WUlBsYXRmb3JtTWFuYWdlck9wZW5WUi5jcHAKKwogcGx1Z2lucy9ET01NaW1lVHlw
ZS5jcHAKIHBsdWdpbnMvRE9NTWltZVR5cGVBcnJheS5jcHAKIHBsdWdpbnMvRE9NUGx1Z2luLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IGNiMDFmOGU1YTM5NWYxZDRiNjY5YjlhNGY0YmNhNDk5MWU1YTY5NjIuLjgxY2VlMGY4
ZWNhNWQ3YWU5YzUzODNiYTllNzUwMjg4OGNlNWM0ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ1MDUsNiArNDUwNSw5IEBA
CiAJCUUxODA4MTE3MTZGQ0Y5Q0IwMEI4MEQwNyAvKiBTeW5jaHJvbm91c0xvYWRlckNsaWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4MDgxMTUx
NkZDRjlDQjAwQjgwRDA3IC8qIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTE4MjU2OTAwRUYyQjAyRDAw
OTMzMjQyIC8qIEpTV29ya2VyR2xvYmFsU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxODI1NjhFMEVGMkIwMkQwMDkzMzI0MiAvKiBKU1dvcmtl
ckdsb2JhbFNjb3BlLmggKi87IH07CiAJCUUxODUzNjg0MUY0RTQ4MTQwMEZFMDkxQiAvKiBXZWJB
cmNoaXZlUmVzb3VyY2VGcm9tTlNBdHRyaWJ1dGVkU3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTg1MzY4MTFGNEU0NzI3MDBGRTA5MUIgLyog
V2ViQXJjaGl2ZVJlc291cmNlRnJvbU5TQXR0cmlidXRlZFN0cmluZy5oICovOyB9OworCQlFMTg4
MjM2NDIwMzFGNTcxMDBCNDJERjMgLyogVlJNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTg4MjM2MzIwMzFGNTVEMDBCNDJERjMgLyogVlJN
YW5hZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJRTE4ODIzNjUyMDMxRjU3RjAwQjQyREYzIC8qIFZSUGxhdGZvcm1EaXNwbGF5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTg4MjM2MDIwMzFGNTVB
MDBCNDJERjMgLyogVlJQbGF0Zm9ybURpc3BsYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQlFMTg4MjM2NjIwMzFGNTk0MDBCNDJERjMgLyogVlJQ
bGF0Zm9ybU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxODgyMzYxMjAzMUY1NUIwMEI0MkRGMyAvKiBWUlBsYXRmb3JtTWFuYWdlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUxOEMzNTQ0
MUY3MTk3MEMwMEZGNjMyRCAvKiBXZWJBcmNoaXZlUmVzb3VyY2VXZWJSZXNvdXJjZUhhbmRsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOEMzNTQx
MUY3MTk2Q0QwMEZGNjMyRCAvKiBXZWJBcmNoaXZlUmVzb3VyY2VXZWJSZXNvdXJjZUhhbmRsZXIu
aCAqLzsgfTsKIAkJRTE4REYzMzUxOEFBRjEyQzAwNzczRTU5IC8qIFNlcmlhbGl6ZWRDcnlwdG9L
ZXlXcmFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MThERjMzNDE4QUFGMTJDMDA3NzNFNTkgLyogU2VyaWFsaXplZENyeXB0b0tleVdyYXAuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMTk3MjcxNjE4
MjA1NDlFMDA1OTJENTEgLyogQ3J5cHRvS2V5VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE5NzI3MTUxODIwNTQ5RTAwNTkyRDUxIC8qIENyeXB0
b0tleVR5cGUuaCAqLzsgfTsKQEAgLTEzODQ5LDYgKzEzODUyLDEwIEBACiAJCUUxODI1OEFCMEVG
M0NENzAwMDkzMzI0MiAvKiBKU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTg1MzY4MTFGNEU0NzI3MDBGRTA5MUIg
LyogV2ViQXJjaGl2ZVJlc291cmNlRnJvbU5TQXR0cmlidXRlZFN0cmluZy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJBcmNoaXZlUmVzb3VyY2VGcm9tTlNBdHRyaWJ1dGVkU3RyaW5nLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxODUzNjgyMUY0RTQ3MjcwMEZFMDkxQiAvKiBXZWJBcmNo
aXZlUmVzb3VyY2VGcm9tTlNBdHRyaWJ1dGVkU3RyaW5nLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gV2ViQXJjaGl2ZVJlc291cmNlRnJvbU5TQXR0cmlidXRlZFN0cmluZy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTE4ODIzNjAyMDMxRjU1QTAwQjQyREYzIC8qIFZSUGxhdGZv
cm1EaXNwbGF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZSUGxhdGZvcm1E
aXNwbGF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxODgyMzYxMjAzMUY1NUIw
MEI0MkRGMyAvKiBWUlBsYXRmb3JtTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBWUlBsYXRmb3JtTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlFMTg4MjM2MjIwMzFGNTVDMDBCNDJERjMgLyogVlJNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZSTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUUxODgyMzYzMjAzMUY1NUQwMEI0MkRGMyAvKiBWUk1hbmFnZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVlJNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUUxOEMzNTQxMUY3MTk2Q0QwMEZGNjMyRCAvKiBXZWJBcmNoaXZlUmVz
b3VyY2VXZWJSZXNvdXJjZUhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQXJjaGl2ZVJlc291
cmNlV2ViUmVzb3VyY2VIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUx
OEMzNTQyMUY3MTk3MDEwMEZGNjMyRCAvKiBXZWJBcmNoaXZlUmVzb3VyY2VXZWJSZXNvdXJjZUhh
bmRsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJBcmNoaXZlUmVzb3VyY2VXZWJSZXNv
dXJjZUhhbmRsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxOERGMzM0MThB
QUYxMkMwMDc3M0U1OSAvKiBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjM4MDUsNiArMjM4MTIsNyBAQAogCQkJCTUxNjAzMDA5MEND
NDI0NTQwMEM4QUMyNSAvKiBwb3NpeCAqLywKIAkJCQkxQTJFNkU1NjBDQzU1MUUwMDA0QTIwNjIg
Lyogc3FsICovLAogCQkJCUIyQzNEOUVDMEQwMDZDMUQwMEVGNkYyNiAvKiB0ZXh0ICovLAorCQkJ
CUUxODgyMzVGMjAzMUY1MEYwMEI0MkRGMyAvKiB2ciAqLywKIAkJCQk0OUFFMkQ5NDEzNEVFNUY5
MDA3MjkyMEEgLyogQ2FsY3VsYXRpb25WYWx1ZS5jcHAgKi8sCiAJCQkJNDlBRTJEOTUxMzRFRTVG
OTAwNzI5MjBBIC8qIENhbGN1bGF0aW9uVmFsdWUuaCAqLywKIAkJCQlDMzMwQTIyMTEzRUMxOTZC
MDAwMEI0NUIgLyogQ29sb3JDaG9vc2VyLmggKi8sCkBAIC0yNDQ0OCw2ICsyNDQ1NiwxNyBAQAog
CQkJcGF0aCA9IGFsZ29yaXRobXM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9Owor
CQlFMTg4MjM1RjIwMzFGNTBGMDBCNDJERjMgLyogdnIgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91
cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUUxODgyMzYyMjAzMUY1NUMwMEI0MkRGMyAvKiBWUk1h
bmFnZXIuY3BwICovLAorCQkJCUUxODgyMzYzMjAzMUY1NUQwMEI0MkRGMyAvKiBWUk1hbmFnZXIu
aCAqLywKKwkJCQlFMTg4MjM2MDIwMzFGNTVBMDBCNDJERjMgLyogVlJQbGF0Zm9ybURpc3BsYXku
aCAqLywKKwkJCQlFMTg4MjM2MTIwMzFGNTVCMDBCNDJERjMgLyogVlJQbGF0Zm9ybU1hbmFnZXIu
aCAqLywKKwkJCSk7CisJCQlwYXRoID0gdnI7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwor
CQl9OwogCQlFMTlEQTI5RDE4MTk5NUNFMDAwODhCQzggLyoga2V5cyAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0zMDEwNiw2ICszMDEyNSw5IEBACiAJCQkJ
NDE5QkMyREYxNjg1MzI5OTAwRDY0RDZEIC8qIFZpc2l0ZWRMaW5rU3RhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBQkE4MDAwMTg5NzM0MTIwMERDRTlENiAvKiBWaXNpdGVkTGlua1N0b3JlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFNDQ2MTNCNjBDRDYzNDRFMDBGQURBNzUgLyogVm9pZENhbGxi
YWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMTg4MjM2NDIwMzFGNTcxMDBCNDJERjMgLyogVlJN
YW5hZ2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMTg4MjM2NTIwMzFGNTdGMDBCNDJERjMgLyog
VlJQbGF0Zm9ybURpc3BsYXkuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxODgyMzY2MjAzMUY1OTQw
MEI0MkRGMyAvKiBWUlBsYXRmb3JtTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkUyMDUw
N0ExOEE0NTg2QjAwODA2NDdFIC8qIFZUVEN1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0FGOUIy
MDMxOENGQjJERjAwQzY0QkVGIC8qIFZUVFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0FG
OUIyMDYxOENGQjJERjAwQzY0QkVGIC8qIFZUVFJlZ2lvbkxpc3QuaCBpbiBIZWFkZXJzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdnIvVlJNYW5hZ2VyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL1ZSTWFuYWdlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjdhNjg0
NmVlNmRkMDM4ZDI1MGIyYzdlM2YyYjJmZTY3NjE5ZjFkYwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL1ZSTWFuYWdlci5jcHAKQEAgLTAsMCArMSw1OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEsIFMuTC4gQWxsIHJpZ2h0IHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlZSTWFuYWdlci5oIgorCisjaW5j
bHVkZSAiVlJQbGF0Zm9ybURpc3BsYXkuaCIKKyNpbmNsdWRlICJWUlBsYXRmb3JtTWFuYWdlci5o
IgorCisjaWYgVVNFKE9QRU5WUikKKyNpbmNsdWRlICJWUlBsYXRmb3JtTWFuYWdlck9wZW5WUi5o
IgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVlJNYW5hZ2VyJiBWUk1hbmFnZXI6
OnNpbmdsZXRvbigpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFZSTWFuYWdlcj4gaW5z
dGFuY2U7CisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCitWUk1hbmFnZXI6OlZSTWFuYWdlcigp
Cit7CisjaWYgVVNFKE9QRU5WUikKKyAgICBtX3BsYXRmb3JtTWFuYWdlciA9IFZSUGxhdGZvcm1N
YW5hZ2VyT3BlblZSOjpjcmVhdGUoKTsKKyNlbmRpZgorfQorCitWUk1hbmFnZXI6On5WUk1hbmFn
ZXIoKQoreworICAgIG1fcGxhdGZvcm1NYW5hZ2VyID0gbnVsbHB0cjsKK30KKworc3RkOjpvcHRp
b25hbDxWUk1hbmFnZXI6OlZSRGlzcGxheXNWZWN0b3I+IFZSTWFuYWdlcjo6Z2V0VlJEaXNwbGF5
cygpCit7CisgICAgaWYgKCFtX3BsYXRmb3JtTWFuYWdlcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIHJldHVybiBtX3BsYXRmb3JtTWFuYWdlci0+Z2V0VlJEaXNwbGF5cygp
OworfQorCit9OyAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdnIvVlJNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9W
Uk1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOTQyYzdjYjU1ZjA1OWUyZDc4NmQyMzM2MjQwNjIxY2Fl
YWUzM2RlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdnIvVlJN
YW5hZ2VyLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2Fs
aWEsIFMuTC4gQWxsIHJpZ2h0IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVk
ZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBWUlBsYXRm
b3JtRGlzcGxheTsKK2NsYXNzIFZSUGxhdGZvcm1NYW5hZ2VyOworCitjbGFzcyBWUk1hbmFnZXIg
ZmluYWwgeworICAgIGZyaWVuZCBjbGFzcyBXVEY6Ok5ldmVyRGVzdHJveWVkPFZSTWFuYWdlcj47
CitwdWJsaWM6CisgICAgdXNpbmcgVlJEaXNwbGF5c1ZlY3RvciA9IFZlY3RvcjxXZWFrUHRyPFZS
UGxhdGZvcm1EaXNwbGF5Pj47CisKKyAgICB+VlJNYW5hZ2VyKCk7CisKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgVlJNYW5hZ2VyJiBzaW5nbGV0b24oKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8
VlJEaXNwbGF5c1ZlY3Rvcj4gZ2V0VlJEaXNwbGF5cygpOworCitwcml2YXRlOgorICAgIFZSTWFu
YWdlcigpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFZSUGxhdGZvcm1NYW5hZ2VyPiBtX3BsYXRm
b3JtTWFuYWdlcjsKK307CisKK307IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9WUlBsYXRmb3JtRGlzcGxheS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdnIvVlJQbGF0Zm9ybURpc3BsYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMzA5MmM2
MmM5Yzg4ZDc3YjY0MDA0YzA4ZWMyYmFhZTRiMjU2ZThhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdnIvVlJQbGF0Zm9ybURpc3BsYXkuaApAQCAtMCwwICsxLDU5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSwgUy5MLiBBbGwgcmlnaHQgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICoKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51
bSBWUkRpc3BsYXlDYXBhYmlsaXR5RmxhZ3MgeworICAgIE5vbmUgPSAwLAorICAgIFBvc2l0aW9u
ID0gMSA8PCAxLAorICAgIE9yaWVudGF0aW9uID0gMSA8PCAyLAorICAgIEV4dGVybmFsRGlzcGxh
eSA9IDEgPDwgMywKKyAgICBQcmVzZW50ID0gMSA8PCA0Cit9OworCisvKiBUaGUgcHVycG9zZSBv
ZiB0aGlzIGNsYXNzIGlzIHRvIGVuY2Fwc3VsYXRlIGFsbCB0aGUgaW5mbyBhYm91dCB0aGUgZGlz
cGxheSBpbiBhIHNpbmdsZSBjbGFzcy9kYXRhCisgKiBzdHJ1Y3R1cmUuIFRoaXMgd2F5IHdlIHdv
dWxkbid0IGhhdmUgdG8gcmVwbGljYXRlIGFsbCB0aGUgQVBJIGNhbGxzIG9mIFZSRGlzcGxheSBp
bgorICogVlJQbGF0Zm9ybURpc3BsYXkuIEFsc28gdGhlIGNsaWVudCBvZiB0aGlzIEFQSSB3b3Vs
ZCBvbmx5IGhhdmUgdG8gaXNzdWUgYSBzaW5nbGUgY2FsbCB0byBnZXQgYWxsCisgKiB0aGUgaW5m
byBmcm9tIHRoZSBkaXNwbGF5LiBOb3RlIHRoYXQgaXQncyBmYWlybHkgdW5saWtlbHkgdGhhdCBh
IFZSIGFwcGxpY2F0aW9uIHdvdWxkIG9ubHkKKyAqIHJlcXVpcmUganVzdCBhIGZldyBwaWVjZXMg
b2YgaW5mb3JtYXRpb24gZnJvbSB0aGUgZGV2aWNlLgorKi8KK3N0cnVjdCBWUlBsYXRmb3JtRGlz
cGxheUluZm8geworICAgIFN0cmluZyBkaXNwbGF5TmFtZTsKKyAgICBib29sIGlzQ29ubmVjdGVk
OworICAgIGJvb2wgaXNNb3VudGVkOworICAgIHVuc2lnbmVkIGNhcGFiaWxpdHlGbGFnczsKK307
CisKK2NsYXNzIFZSUGxhdGZvcm1EaXNwbGF5IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIFZSUGxh
dGZvcm1EaXNwbGF5SW5mbyBnZXREaXNwbGF5SW5mbygpID0gMDsKKyAgICB2aXJ0dWFsIH5WUlBs
YXRmb3JtRGlzcGxheSgpID0gZGVmYXVsdDsKKworICAgIFdlYWtQdHI8VlJQbGF0Zm9ybURpc3Bs
YXk+IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQ
dHIoKnRoaXMpOyB9Citwcml2YXRlOgorICAgIFdlYWtQdHJGYWN0b3J5PFZSUGxhdGZvcm1EaXNw
bGF5PiBtX3dlYWtQdHJGYWN0b3J5OworfTsKKworfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL1ZSUGxhdGZvcm1NYW5hZ2VyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9WUlBsYXRmb3JtTWFuYWdlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjg4YjI0ZWQwYjY1ZmUyOTE0NTc3OGQxYTM3YmQ0N2RlZjZmYWViNWUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9WUlBsYXRmb3JtTWFuYWdlci5oCkBA
IC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhLCBTLkwuIEFs
bCByaWdodCByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVlJQbGF0Zm9y
bURpc3BsYXkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBWUkRpc3BsYXk7CisK
K2NsYXNzIFZSUGxhdGZvcm1NYW5hZ2VyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIFZlY3RvcjxX
ZWFrUHRyPFZSUGxhdGZvcm1EaXNwbGF5Pj4gZ2V0VlJEaXNwbGF5cygpID0gMDsKKyAgICB2aXJ0
dWFsIH5WUlBsYXRmb3JtTWFuYWdlcigpID0gZGVmYXVsdDsKK307CisKK307IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9vcGVudnIv
VlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdnIv
b3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MWQ3NmYzMWIw
NmZlNjFmYzljMWU5ZTFhODM0OGM0NGVlZjBkMzI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdnIvb3BlbnZyL1ZSUGxhdGZvcm1EaXNwbGF5T3BlblZSLmNwcApA
QCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSwgUy5MLiBB
bGwgcmlnaHQgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVlJQ
bGF0Zm9ybURpc3BsYXlPcGVuVlIuaCIKKworI2lmIFVTRShPUEVOVlIpCisKKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVlJQbGF0
Zm9ybURpc3BsYXlPcGVuVlI6OlZSUGxhdGZvcm1EaXNwbGF5T3BlblZSKHZyOjpJVlJTeXN0ZW0q
IHN5c3RlbSwgdnI6OklWUkNoYXBlcm9uZSogY2hhcGVyb25lLCB2cjo6SVZSQ29tcG9zaXRvciog
Y29tcG9zaXRvcikKKyAgICA6IG1fc3lzdGVtKHN5c3RlbSkKKyAgICAsIG1fY2hhcGVyb25lKGNo
YXBlcm9uZSkKKyAgICAsIG1fY29tcG9zaXRvcihjb21wb3NpdG9yKQoreworICAgIG1fZGlzcGxh
eUluZm8uaXNDb25uZWN0ZWQgPSBtX3N5c3RlbS0+SXNUcmFja2VkRGV2aWNlQ29ubmVjdGVkKHZy
OjprX3VuVHJhY2tlZERldmljZUluZGV4X0htZCk7CisKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmlu
Z0J1aWxkZXI7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJPcGVuVlIgSE1EIik7
CisgICAgY2hhciBITUROYW1lWzEyOF07CisgICAgaWYgKGF1dG8gbGVuZ3RoID0gbV9zeXN0ZW0t
PkdldFN0cmluZ1RyYWNrZWREZXZpY2VQcm9wZXJ0eSh2cjo6a191blRyYWNrZWREZXZpY2VJbmRl
eF9IbWQsIHZyOjpQcm9wX01hbnVmYWN0dXJlck5hbWVfU3RyaW5nLCBITUROYW1lLCAxMjgpKSB7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgKCIpOworICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChITUROYW1lLCBsZW5ndGgpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgnKScpOworICAgIH0KKyAgICBtX2Rpc3BsYXlJbmZvLmRpc3BsYXlOYW1lID0gc3RyaW5nQnVp
bGRlci50b1N0cmluZygpOworCisgICAgbV9kaXNwbGF5SW5mby5pc01vdW50ZWQgPSBmYWxzZTsK
KyAgICAvLyBGSVhNRTogV2UncmUgYXNzdW1pbmcgYW4gSFRDIFZpdmUgSE1EIGhlcmUuIEdldCB0
aGlzIGluZm8gZnJvbSBPcGVuVlI/LgorICAgIG1fZGlzcGxheUluZm8uY2FwYWJpbGl0eUZsYWdz
ID0gVlJEaXNwbGF5Q2FwYWJpbGl0eUZsYWdzOjpOb25lIHwKKyAgICAgICAgVlJEaXNwbGF5Q2Fw
YWJpbGl0eUZsYWdzOjpQb3NpdGlvbiB8CisgICAgICAgIFZSRGlzcGxheUNhcGFiaWxpdHlGbGFn
czo6T3JpZW50YXRpb24gfAorICAgICAgICBWUkRpc3BsYXlDYXBhYmlsaXR5RmxhZ3M6OkV4dGVy
bmFsRGlzcGxheSB8CisgICAgICAgIFZSRGlzcGxheUNhcGFiaWxpdHlGbGFnczo6UHJlc2VudDsK
K30KKworfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShPUEVOVlIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybURp
c3BsYXlPcGVuVlIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL29wZW52ci9WUlBsYXRm
b3JtRGlzcGxheU9wZW5WUi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM4NjZmNDUzZDRmNjgzMjExMWZmMjQ3NmNh
MTg5YmEyNjNkMjNkMTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS92ci9vcGVudnIvVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIuaApAQCAtMCwwICsxLDQ3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSwgUy5MLiBBbGwgcmlnaHQgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShPUEVOVlIpCisKKyNpbmNsdWRlICJWUlBsYXRm
b3JtRGlzcGxheS5oIgorCisjaW5jbHVkZSA8b3BlbnZyLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgVlJQbGF0Zm9ybURpc3BsYXlPcGVuVlIgOiBwdWJsaWMgVlJQbGF0Zm9ybURp
c3BsYXkgeworcHVibGljOgorICAgIGV4cGxpY2l0IFZSUGxhdGZvcm1EaXNwbGF5T3BlblZSKHZy
OjpJVlJTeXN0ZW0qLCB2cjo6SVZSQ2hhcGVyb25lKiwgdnI6OklWUkNvbXBvc2l0b3IqKTsKKwor
ICAgIFZSUGxhdGZvcm1EaXNwbGF5SW5mbyBnZXREaXNwbGF5SW5mbygpIG92ZXJyaWRlIHsgcmV0
dXJuIG1fZGlzcGxheUluZm87IH0KKworcHJpdmF0ZToKKyAgICB2cjo6SVZSU3lzdGVtKiBtX3N5
c3RlbTsKKyAgICB2cjo6SVZSQ2hhcGVyb25lKiBtX2NoYXBlcm9uZTsKKyAgICB2cjo6SVZSQ29t
cG9zaXRvciogbV9jb21wb3NpdG9yOworCisgICAgVlJQbGF0Zm9ybURpc3BsYXlJbmZvIG1fZGlz
cGxheUluZm87Cit9OworCit9OyAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNF
KE9QRU5WUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL29wZW52ci9W
UlBsYXRmb3JtTWFuYWdlck9wZW5WUi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS92ci9v
cGVudnIvVlJQbGF0Zm9ybU1hbmFnZXJPcGVuVlIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk5YThmMWQxNzE2
YjFhODQ4MWM1NmQzOGRhZjdkZjhmMDFmZThjMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS92ci9vcGVudnIvVlJQbGF0Zm9ybU1hbmFnZXJPcGVuVlIuY3BwCkBA
IC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhLCBTLkwuIEFs
bCByaWdodCByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWUlBs
YXRmb3JtTWFuYWdlck9wZW5WUi5oIgorCisjaW5jbHVkZSAiVlJQbGF0Zm9ybURpc3BsYXlPcGVu
VlIuaCIKKworI2lmIFVTRShPUEVOVlIpCisKKyNpbmNsdWRlICJKU1ZSRGlzcGxheS5oIgorI2lu
Y2x1ZGUgIlZSRGlzcGxheS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0ZDo6dW5pcXVl
X3B0cjxWUlBsYXRmb3JtTWFuYWdlck9wZW5WUj4gVlJQbGF0Zm9ybU1hbmFnZXJPcGVuVlI6OmNy
ZWF0ZSgpCit7CisgICAgaWYgKCF2cjo6VlJfSXNSdW50aW1lSW5zdGFsbGVkKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VlJQbGF0Zm9y
bU1hbmFnZXJPcGVuVlI+KCk7Cit9CisKK1ZSUGxhdGZvcm1NYW5hZ2VyT3BlblZSOjp+VlJQbGF0
Zm9ybU1hbmFnZXJPcGVuVlIoKQoreworICAgIHZyOjpWUl9TaHV0ZG93bigpOworfQorCitib29s
IFZSUGxhdGZvcm1NYW5hZ2VyT3BlblZSOjppbml0T3BlblZSKCkKK3sKKyAgICB2cjo6SG1kRXJy
b3IgZXJyb3I7CisgICAgbV9zeXN0ZW0gPSB2cjo6VlJfSW5pdCgmZXJyb3IsIHZyOjpWUkFwcGxp
Y2F0aW9uX1NjZW5lKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCitWZWN0b3I8V2Vha1B0cjxWUlBsYXRmb3JtRGlzcGxheT4+
IFZSUGxhdGZvcm1NYW5hZ2VyT3BlblZSOjpnZXRWUkRpc3BsYXlzKCkKK3sKKyAgICAvLyBRdWlj
a2x5IGNoZWNrIGZvciBITURzLiBNdWNoIGZhc3RlciB0aGFuIGluaXRpYWxpemluZyB0aGUgd2hv
bGUgT3BlblZSIEFQSS4KKyAgICBpZiAoIXZyOjpWUl9Jc0htZFByZXNlbnQoKSkgeworICAgICAg
ICBtX3N5c3RlbSA9IG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAg
aWYgKCFtX3N5c3RlbSAmJiAhaW5pdE9wZW5WUigpKSB7CisgICAgICAgIG1fc3lzdGVtID0gbnVs
bHB0cjsKKyAgICAgICAgdnI6OlZSX1NodXRkb3duKCk7CisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgfQorCisgICAgdnI6OkhtZEVycm9yIGVycm9yOworICAgIHZyOjpJVlJDaGFwZXJvbmUqIGNo
YXBlcm9uZSA9IHN0YXRpY19jYXN0PHZyOjpJVlJDaGFwZXJvbmUqPih2cjo6VlJfR2V0R2VuZXJp
Y0ludGVyZmFjZSh2cjo6SVZSQ2hhcGVyb25lX1ZlcnNpb24sICZlcnJvcikpOworICAgIGlmIChl
cnJvciB8fCAhY2hhcGVyb25lKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgdnI6OklWUkNv
bXBvc2l0b3IqIGNvbXBvc2l0b3IgPSBzdGF0aWNfY2FzdDx2cjo6SVZSQ29tcG9zaXRvcio+KHZy
OjpWUl9HZXRHZW5lcmljSW50ZXJmYWNlKHZyOjpJVlJDb21wb3NpdG9yX1ZlcnNpb24sICZlcnJv
cikpOworICAgIGlmIChlcnJvciB8fCAhY29tcG9zaXRvcikKKyAgICAgICAgcmV0dXJuIHsgfTsK
KworICAgIFZlY3RvcjxXZWFrUHRyPFZSUGxhdGZvcm1EaXNwbGF5Pj4gZGlzcGxheXM7CisgICAg
aWYgKCFtX2Rpc3BsYXkpCisgICAgICAgIG1fZGlzcGxheSA9IHN0ZDo6bWFrZV91bmlxdWU8VlJQ
bGF0Zm9ybURpc3BsYXlPcGVuVlI+KG1fc3lzdGVtLCBjaGFwZXJvbmUsIGNvbXBvc2l0b3IpOwor
ICAgIGRpc3BsYXlzLmFwcGVuZChtX2Rpc3BsYXktPmNyZWF0ZVdlYWtQdHIoKSk7CisgICAgcmV0
dXJuIGRpc3BsYXlzOworfQorCit9OyAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
VVNFKE9QRU5WUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3ZyL29wZW52
ci9WUlBsYXRmb3JtTWFuYWdlck9wZW5WUi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdnIv
b3BlbnZyL1ZSUGxhdGZvcm1NYW5hZ2VyT3BlblZSLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmE0Mzg3Y2MzMDgx
NWUwMGMzNDE2Yzg5NjZhZDI5ZDRiNzNmNzBkOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3ZyL29wZW52ci9WUlBsYXRmb3JtTWFuYWdlck9wZW5WUi5oCkBAIC0w
LDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhLCBTLkwuIEFsbCBy
aWdodCByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKE9QRU5WUikKKworI2lu
Y2x1ZGUgIlZSUGxhdGZvcm1NYW5hZ2VyLmgiCisKKyNpbmNsdWRlIDxvcGVudnIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBWUlBsYXRmb3JtRGlzcGxheU9wZW5WUjsKKworY2xh
c3MgVlJQbGF0Zm9ybU1hbmFnZXJPcGVuVlIgOiBwdWJsaWMgVlJQbGF0Zm9ybU1hbmFnZXIgewor
cHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VlJQbGF0Zm9ybU1hbmFnZXJPcGVu
VlI+IGNyZWF0ZSgpOworICAgIGV4cGxpY2l0IFZSUGxhdGZvcm1NYW5hZ2VyT3BlblZSKCkgPSBk
ZWZhdWx0OworCisgICAgVmVjdG9yPFdlYWtQdHI8VlJQbGF0Zm9ybURpc3BsYXk+PiBnZXRWUkRp
c3BsYXlzKCkgb3ZlcnJpZGU7CisKKyAgICB+VlJQbGF0Zm9ybU1hbmFnZXJPcGVuVlIoKTsKK3By
aXZhdGU6CisgICAgYm9vbCBpbml0T3BlblZSKCk7CisKKyAgICB2cjo6SVZSU3lzdGVtKiBtX3N5
c3RlbSB7IG51bGxwdHIgfTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VlJQbGF0Zm9ybURpc3BsYXlP
cGVuVlI+IG1fZGlzcGxheTsKK307CisKK307IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBVU0UoT1BFTlZSKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>