<?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>151388</bug_id>
          
          <creation_ts>2015-11-18 07:32:00 -0800</creation_ts>
          <short_desc>Split platform-independent logic in AVCaptureDeviceManager out into a new class</short_desc>
          <delta_ts>2015-11-30 15:48:55 -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>WebCore Misc.</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="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>eric.carlson</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1142826</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2015-11-18 07:32:00 -0800</bug_when>
    <thetext>To prepare for creating a MockCaptureDeviceManager to be able to test MediaDevices.getUserMedia, we need to create a platform-independent capture device manager which AVCaptureDeviceManager should extend and add platform logic to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142833</commentid>
    <comment_count>1</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2015-11-18 08:40:31 -0800</bug_when>
    <thetext>&lt;rdar://problem/23593980&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142838</commentid>
    <comment_count>2</comment_count>
      <attachid>265746</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2015-11-18 08:55:37 -0800</bug_when>
    <thetext>Created attachment 265746
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142840</commentid>
    <comment_count>3</comment_count>
      <attachid>265747</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2015-11-18 08:58:51 -0800</bug_when>
    <thetext>Created attachment 265747
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142935</commentid>
    <comment_count>4</comment_count>
      <attachid>265747</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-11-18 12:09:49 -0800</bug_when>
    <thetext>Comment on attachment 265747
Patch

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

This is a great start, but it needs a bit more work.

&gt; Source/WebCore/ChangeLog:14
&gt; +        CaptureDeviceManager::captureDeviceList should be overridden by the MockCaptureDeviceManager

This will be done by each platform, so &quot;MockCaptureDeviceManager&quot; should be something like &quot;&lt;Platform&gt;CaptureDeviceManager&quot;

&gt; Source/WebCore/ChangeLog:15
&gt; +        to respectively create MockRealtimeMediaSources and return a list of fake capture devices

Typo: &quot;MockRealtimeMediaSources&quot; -&gt; &quot;a RealtimeMediaSource&quot;

&gt; Source/WebCore/Modules/mediastream/CaptureDevice.h:39
&gt; +enum class CaptureDevicePosition {
&gt; +    Unspecified,
&gt; +    Front,
&gt; +    Back
&gt; +};

This should have &quot;facing mode&quot; in the name, and the values should be the same as the legal facingMode values: &quot;left&quot;, &quot;right&quot;, &quot;user&quot;, &quot;environment&quot;.

&gt; Source/WebCore/Modules/mediastream/CaptureDevice.h:47
&gt; +enum CaptureSessionPreset {
&gt; +    CaptureSessionPresetNone = 0,
&gt; +    CaptureSessionPresetLow = 1 &lt;&lt; 0,
&gt; +    CaptureSessionPreset352x288 = 1 &lt;&lt; 1,
&gt; +    CaptureSessionPreset640x480 = 1 &lt;&lt; 2,
&gt; +    CaptureSessionPreset1280x720 = 1 &lt;&lt; 3
&gt; +};

I don&apos;t think this will work as a bitfield because we can&apos;t assume anything about the sizes a video capture device will support. I think you will need to have something like a &quot;supportsVideoSize&quot; method that platforms implement.

&gt; Source/WebCore/Modules/mediastream/CaptureDevice.h:57
&gt; +    String m_captureDeviceID;

If this is the persistent ID, I think the name should include &quot;persistent&quot; to make that obvious.

&gt; Source/WebCore/Modules/mediastream/CaptureDevice.h:62
&gt; +    String m_audioSourceId;
&gt; +    String m_videoSourceId;

I thinks the device manager code will be cleaner and easier to understand if each CaptureDevice only supports a single media type, which will make these fields unnecessary, and you won&apos;t need CaptureDeviceMediaTypeMuxed.

&gt; Source/WebCore/Modules/mediastream/CaptureDeviceManager.cpp:149
&gt; +            if (!captureSource)
&gt; +                continue;

I know that you copied this, but it shouldn&apos;t &quot;continue&quot; because it won&apos;t consider the video source.

&gt; Source/WebCore/Modules/mediastream/CaptureDeviceManager.cpp:198
&gt; +    case RealtimeMediaSourceStates::Left:
&gt; +    case RealtimeMediaSourceStates::Right:

These should be implemented.

&gt; Source/WebCore/Modules/mediastream/CaptureDeviceManager.cpp:220
&gt; +    size_t constraint = validConstraintNames().find(name);
&gt; +    if (constraint == notFound)
&gt; +        return true;

This should use RealtimeMediaSourceCenter::supportedConstraints() once bug 151394 lands.

&gt; Source/WebCore/Modules/mediastream/CaptureDeviceManager.cpp:238
&gt; +        // It would make sense to use [AVCaptureConnection videoMinFrameDuration] and
&gt; +        // [AVCaptureConnection videoMaxFrameDuration], but they only work with a &quot;live&quot; AVCaptureConnection.

Oops!

&gt; Source/WebCore/Modules/mediastream/CaptureDeviceManager.cpp:240
&gt; +        return rate &gt; 0 &amp;&amp; rate &lt;= 60;

We can&apos;t assume anything about frame rates, make this a call into the platform device manager.

&gt; Source/WebCore/Modules/mediastream/CaptureDeviceManager.cpp:277
&gt; +    DEPRECATED_DEFINE_STATIC_LOCAL(Vector&lt;AtomicString&gt;, constraints, ());

This won&apos;t be necessary if you use RealtimeMediaSourceCenter::supportedConstraints.

&gt; Source/WebCore/Modules/mediastream/CaptureDeviceManager.h:40
&gt; +    enum ValidConstraints { Width = 0, Height, FrameRate, FacingMode, Gain };

This isn&apos;t used.

&gt; Source/WebCore/Modules/mediastream/CaptureDeviceManager.h:66
&gt; +    Vector&lt;CaptureDevice&gt; m_devices;

This should either be private and initialized by a one-time call into platform code, or don&apos;t include it and make captureDeviceList() pure virtual and always use it. In either case, we also need a method in the base class that platform code can call when the list of devices changes.

&gt; Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.mm:259
&gt; +    ASSERT(device);

I am not certain this should assert, but it should definitely return nullptr if the device is nil.

&gt; Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.mm:268
&gt; +        // FIXME: To preserve behavior, ensure that a newly initialized CaptureSession

ensure that a newly initialized CaptureSession ... ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144378</commentid>
    <comment_count>5</comment_count>
      <attachid>265747</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2015-11-24 14:17:05 -0800</bug_when>
    <thetext>Comment on attachment 265747
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:14
&gt;&gt; +        CaptureDeviceManager::captureDeviceList should be overridden by the MockCaptureDeviceManager
&gt; 
&gt; This will be done by each platform, so &quot;MockCaptureDeviceManager&quot; should be something like &quot;&lt;Platform&gt;CaptureDeviceManager&quot;

Fixed.

&gt;&gt; Source/WebCore/ChangeLog:15
&gt;&gt; +        to respectively create MockRealtimeMediaSources and return a list of fake capture devices
&gt; 
&gt; Typo: &quot;MockRealtimeMediaSources&quot; -&gt; &quot;a RealtimeMediaSource&quot;

Fixed.

&gt;&gt; Source/WebCore/Modules/mediastream/CaptureDevice.h:39
&gt;&gt; +};
&gt; 
&gt; This should have &quot;facing mode&quot; in the name, and the values should be the same as the legal facingMode values: &quot;left&quot;, &quot;right&quot;, &quot;user&quot;, &quot;environment&quot;.

Fixed.

&gt;&gt; Source/WebCore/Modules/mediastream/CaptureDevice.h:47
&gt;&gt; +};
&gt; 
&gt; I don&apos;t think this will work as a bitfield because we can&apos;t assume anything about the sizes a video capture device will support. I think you will need to have something like a &quot;supportsVideoSize&quot; method that platforms implement.

Sounds good -- added a supportsVideoSize method.

&gt;&gt; Source/WebCore/Modules/mediastream/CaptureDevice.h:57
&gt;&gt; +    String m_captureDeviceID;
&gt; 
&gt; If this is the persistent ID, I think the name should include &quot;persistent&quot; to make that obvious.

This is indeed the persistent ID -- I&apos;ll rename this to be m_persistentDeviceId.

&gt;&gt; Source/WebCore/Modules/mediastream/CaptureDevice.h:62
&gt;&gt; +    String m_videoSourceId;
&gt; 
&gt; I thinks the device manager code will be cleaner and easier to understand if each CaptureDevice only supports a single media type, which will make these fields unnecessary, and you won&apos;t need CaptureDeviceMediaTypeMuxed.

Sounds good. Changed to have a single m_sourceId. This also means m_mediaTypes should be m_mediaType instead and use an enum class instead of a bitfield.

&gt;&gt; Source/WebCore/Modules/mediastream/CaptureDeviceManager.cpp:149
&gt;&gt; +                continue;
&gt; 
&gt; I know that you copied this, but it shouldn&apos;t &quot;continue&quot; because it won&apos;t consider the video source.

Fixed.

&gt;&gt; Source/WebCore/Modules/mediastream/CaptureDeviceManager.cpp:198
&gt;&gt; +    case RealtimeMediaSourceStates::Right:
&gt; 
&gt; These should be implemented.

Fixed.

&gt;&gt; Source/WebCore/Modules/mediastream/CaptureDeviceManager.cpp:220
&gt;&gt; +        return true;
&gt; 
&gt; This should use RealtimeMediaSourceCenter::supportedConstraints() once bug 151394 lands.

Got it. Changed to use supportedConstraints() instead of validConstraintNames().

&gt;&gt; Source/WebCore/Modules/mediastream/CaptureDeviceManager.cpp:238
&gt;&gt; +        // [AVCaptureConnection videoMaxFrameDuration], but they only work with a &quot;live&quot; AVCaptureConnection.
&gt; 
&gt; Oops!

We should address this issue in a separate patch.

&gt;&gt; Source/WebCore/Modules/mediastream/CaptureDeviceManager.cpp:240
&gt;&gt; +        return rate &gt; 0 &amp;&amp; rate &lt;= 60;
&gt; 
&gt; We can&apos;t assume anything about frame rates, make this a call into the platform device manager.

Sounds good. I&apos;ll add something like isSupportedFrameRate(float rate);

&gt;&gt; Source/WebCore/Modules/mediastream/CaptureDeviceManager.cpp:277
&gt;&gt; +    DEPRECATED_DEFINE_STATIC_LOCAL(Vector&lt;AtomicString&gt;, constraints, ());
&gt; 
&gt; This won&apos;t be necessary if you use RealtimeMediaSourceCenter::supportedConstraints.

Got it. Removed.

&gt;&gt; Source/WebCore/Modules/mediastream/CaptureDeviceManager.h:40
&gt;&gt; +    enum ValidConstraints { Width = 0, Height, FrameRate, FacingMode, Gain };
&gt; 
&gt; This isn&apos;t used.

Removed.

&gt;&gt; Source/WebCore/Modules/mediastream/CaptureDeviceManager.h:66
&gt;&gt; +    Vector&lt;CaptureDevice&gt; m_devices;
&gt; 
&gt; This should either be private and initialized by a one-time call into platform code, or don&apos;t include it and make captureDeviceList() pure virtual and always use it. In either case, we also need a method in the base class that platform code can call when the list of devices changes.

Good point. I&apos;ll remove m_devices from the platform-independent code and make captureDeviceList and refreshCaptureDeviceList pure virtual methods of CaptureDeviceManager.

&gt;&gt; Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.mm:259
&gt;&gt; +    ASSERT(device);
&gt; 
&gt; I am not certain this should assert, but it should definitely return nullptr if the device is nil.

Sounds good. I&apos;ll change this.

&gt;&gt; Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.mm:268
&gt;&gt; +        // FIXME: To preserve behavior, ensure that a newly initialized CaptureSession
&gt; 
&gt; ensure that a newly initialized CaptureSession ... ?

Whoops -- forgot to remove this comment! This comment was intended to reflect the fact that the mock capture device manager should override defaultCaptureSession() to return the same thing as AVCaptureDeviceManager::defaultCaptureSession() to ensure that the tested behaviors match what we ship. I decided to remove the comment and add it later when we implement the mock capture device manager.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144400</commentid>
    <comment_count>6</comment_count>
      <attachid>266149</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2015-11-25 01:42:20 -0800</bug_when>
    <thetext>Created attachment 266149
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144797</commentid>
    <comment_count>7</comment_count>
      <attachid>266149</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2015-11-30 10:14:42 -0800</bug_when>
    <thetext>Comment on attachment 266149
Patch

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

&gt; Source/WebCore/ChangeLog:11
&gt; +        which AVCaptureDeviceManager should extend and add platform logic to.

Nit: AVCaptureDeviceManager -&gt; all platforms, and &quot;add platform logic&quot; -&gt; &quot;add platform-specific logic&quot;

&gt; Source/WebCore/ChangeLog:25
&gt; +        component of a capture device, but not both at once. This means a webcam that supports

Nit: webcam -&gt; capture device.

&gt; Source/WebCore/Modules/mediastream/CaptureDeviceManager.cpp:102
&gt; +    } sortBasedOffFitnessScore;

Nit: sortBasedOffFitnessScore -&gt; sortBasedOnFitnessScore

&gt; Source/WebCore/platform/mediastream/RealtimeMediaSourceSupportedConstraints.h:94
&gt; +    String nameForConstraint(MediaConstraintType) const;

String -&gt; AtomicString.

&gt; Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.h:46
&gt; +    AVCaptureSessionInfo(AVCaptureSession *platformSession);

Nit: the variable name isn&apos;t necessary.

&gt; Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.h:47
&gt; +    virtual bool supportsVideoSize(const String&amp; videoSize) const override;

Ditto.

&gt; Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.h:60
&gt; +    virtual RefPtr&lt;RealtimeMediaSource&gt; sourceWithUID(const String&amp; deviceUID, RealtimeMediaSource::Type, MediaConstraints*) override;

Ditto.

&gt; Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.mm:274
&gt; +    if (type == RealtimeMediaSource::Video &amp;&amp; session) {

Nit; if session is NULL, this should use defaultCaptureSession().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144960</commentid>
    <comment_count>8</comment_count>
      <attachid>266149</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2015-11-30 14:59:51 -0800</bug_when>
    <thetext>Comment on attachment 266149
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:11
&gt;&gt; +        which AVCaptureDeviceManager should extend and add platform logic to.
&gt; 
&gt; Nit: AVCaptureDeviceManager -&gt; all platforms, and &quot;add platform logic&quot; -&gt; &quot;add platform-specific logic&quot;

Fixed.

&gt;&gt; Source/WebCore/ChangeLog:25
&gt;&gt; +        component of a capture device, but not both at once. This means a webcam that supports
&gt; 
&gt; Nit: webcam -&gt; capture device.

Fixed.

&gt;&gt; Source/WebCore/Modules/mediastream/CaptureDeviceManager.cpp:102
&gt;&gt; +    } sortBasedOffFitnessScore;
&gt; 
&gt; Nit: sortBasedOffFitnessScore -&gt; sortBasedOnFitnessScore

Fixed.

&gt;&gt; Source/WebCore/platform/mediastream/RealtimeMediaSourceSupportedConstraints.h:94
&gt;&gt; +    String nameForConstraint(MediaConstraintType) const;
&gt; 
&gt; String -&gt; AtomicString.

Fixed.

&gt;&gt; Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.h:46
&gt;&gt; +    AVCaptureSessionInfo(AVCaptureSession *platformSession);
&gt; 
&gt; Nit: the variable name isn&apos;t necessary.

Fixed.

&gt;&gt; Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.h:47
&gt;&gt; +    virtual bool supportsVideoSize(const String&amp; videoSize) const override;
&gt; 
&gt; Ditto.

Fixed.

&gt;&gt; Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.h:60
&gt;&gt; +    virtual RefPtr&lt;RealtimeMediaSource&gt; sourceWithUID(const String&amp; deviceUID, RealtimeMediaSource::Type, MediaConstraints*) override;
&gt; 
&gt; Ditto.

Fixed.

&gt;&gt; Source/WebCore/platform/mediastream/mac/AVCaptureDeviceManager.mm:274
&gt;&gt; +    if (type == RealtimeMediaSource::Video &amp;&amp; session) {
&gt; 
&gt; Nit; if session is NULL, this should use defaultCaptureSession().

Good catch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144993</commentid>
    <comment_count>9</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2015-11-30 15:48:55 -0800</bug_when>
    <thetext>Committed r192838: &lt;http://trac.webkit.org/changeset/192838&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265746</attachid>
            <date>2015-11-18 08:55:37 -0800</date>
            <delta_ts>2015-11-18 08:58:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151388-20151118085526.patch</filename>
            <type>text/plain</type>
            <size>68833</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyMjc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjFjNDMzZDVhMTZjMTk4
MTEyNTVkZmY4NGY2NWM1MDViMTk3ZGQ5YS4uZjEyYWQ2ZDJhNjhmZTY5Y2U2Njg2ZWMzYjcyODk2
NjFlY2Y0YzI4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDE1LTExLTE4ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0IHBsYXRm
b3JtLWluZGVwZW5kZW50IGxvZ2ljIGluIEFWQ2FwdHVyZURldmljZU1hbmFnZXIgb3V0IGludG8g
YSBuZXcgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1MTM4OAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjM1OTM5ODA+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVG8gcHJlcGFyZSBmb3IgY3Jl
YXRpbmcgYSBNb2NrQ2FwdHVyZURldmljZU1hbmFnZXIgdG8gYmUgYWJsZSB0byB0ZXN0CisgICAg
ICAgIE1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEsIHdlIG5lZWQgdG8gY3JlYXRlIGEgcGxhdGZv
cm0taW5kZXBlbmRlbnQgY2FwdHVyZSBkZXZpY2UgbWFuYWdlcgorICAgICAgICB3aGljaCBBVkNh
cHR1cmVEZXZpY2VNYW5hZ2VyIHNob3VsZCBleHRlbmQgYW5kIGFkZCBwbGF0Zm9ybSBsb2dpYyB0
by4KKworICAgICAgICBUaGUgbWV0aG9kcyBDYXB0dXJlRGV2aWNlTWFuYWdlcjo6Y3JlYXRlTWVk
aWFTb3VyY2VGb3JDYXB0dXJlRGV2aWNlV2l0aENvbnN0cmFpbnRzIGFuZAorICAgICAgICBDYXB0
dXJlRGV2aWNlTWFuYWdlcjo6Y2FwdHVyZURldmljZUxpc3Qgc2hvdWxkIGJlIG92ZXJyaWRkZW4g
YnkgdGhlIE1vY2tDYXB0dXJlRGV2aWNlTWFuYWdlcgorICAgICAgICB0byByZXNwZWN0aXZlbHkg
Y3JlYXRlIE1vY2tSZWFsdGltZU1lZGlhU291cmNlcyBhbmQgcmV0dXJuIGEgbGlzdCBvZiBmYWtl
IGNhcHR1cmUgZGV2aWNlcworICAgICAgICBzcGVjaWZpZWQgdGhyb3VnaCBpbnRlcm5hbHMuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzLCBzaW5jZSB0aGVyZSBzaG91bGQgYmUgbm8gYmVoYXZpb3Ig
Y2hhbmdlLgorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlLmg6
IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vQ2FwdHVyZURldmljZU1hbmFn
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKENhcHR1cmVEZXZpY2VNYW5hZ2VyOjp+Q2FwdHVyZURl
dmljZU1hbmFnZXIpOgorICAgICAgICAoQ2FwdHVyZURldmljZU1hbmFnZXI6OmdldFNvdXJjZXNJ
bmZvKToKKyAgICAgICAgKENhcHR1cmVEZXZpY2VNYW5hZ2VyOjpjYXB0dXJlRGV2aWNlRnJvbURl
dmljZUlEKToKKyAgICAgICAgKENhcHR1cmVEZXZpY2VNYW5hZ2VyOjp2ZXJpZnlDb25zdHJhaW50
c0Zvck1lZGlhVHlwZSk6CisgICAgICAgIChDYXB0dXJlRGV2aWNlTWFuYWdlcjo6YmVzdFNlc3Np
b25QcmVzZXRGb3JWaWRlb1NpemUpOgorICAgICAgICAoQ2FwdHVyZURldmljZU1hbmFnZXI6OmJl
c3RTb3VyY2VzRm9yVHlwZUFuZENvbnN0cmFpbnRzKToKKyAgICAgICAgKENhcHR1cmVEZXZpY2VN
YW5hZ2VyOjpzb3VyY2VXaXRoVUlEKToKKyAgICAgICAgKENhcHR1cmVEZXZpY2VNYW5hZ2VyOjpk
ZXZpY2VTdXBwb3J0c0ZhY2luZ01vZGUpOgorICAgICAgICAoQ2FwdHVyZURldmljZU1hbmFnZXI6
OmJlc3REZXZpY2VGb3JGYWNpbmdNb2RlKToKKyAgICAgICAgKENhcHR1cmVEZXZpY2VNYW5hZ2Vy
OjpzZXNzaW9uU3VwcG9ydHNDb25zdHJhaW50KToKKyAgICAgICAgKENhcHR1cmVEZXZpY2VNYW5h
Z2VyOjppc1ZhbGlkQ29uc3RyYWludCk6CisgICAgICAgIChDYXB0dXJlRGV2aWNlTWFuYWdlcjo6
dmFsaWRDb25zdHJhaW50TmFtZXMpOgorICAgICAgICAoQ2FwdHVyZURldmljZU1hbmFnZXI6OnZh
bGlkRmFjaW5nTW9kZXMpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vQ2FwdHVyZURl
dmljZU1hbmFnZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYXB0dXJlRGV2aWNlTWFu
YWdlcjo6Y2FwdHVyZURldmljZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FwdHVyZURldmlj
ZU1hbmFnZXI6OmRlZmF1bHRDYXB0dXJlU2Vzc2lvbik6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmg6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIubW06CisgICAgICAgIChXZWJDb3JlOjpBVkNh
cHR1cmVEZXZpY2VNYW5hZ2VyOjpjYXB0dXJlRGV2aWNlTGlzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpzaG91bGRDb25zaWRlckRldmljZUluRGV2aWNlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpB
VkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpyZWZyZXNoQ2FwdHVyZURldmljZUxpc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2Vzc2lvbkZyb21QbGF0Zm9ybVNl
c3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6cHJlc2V0
U3RyaW5nRnJvbUNhcHR1cmVTZXNzaW9uUHJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkFWQ2Fw
dHVyZURldmljZU1hbmFnZXI6OkFWQ2FwdHVyZURldmljZU1hbmFnZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6fkFWQ2FwdHVyZURldmljZU1hbmFnZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6YmVzdFNvdXJjZXNGb3JU
eXBlQW5kQ29uc3RyYWludHMpOgorICAgICAgICAoV2ViQ29yZTo6QVZDYXB0dXJlRGV2aWNlTWFu
YWdlcjo6c291cmNlV2l0aFVJRCk6CisgICAgICAgIChXZWJDb3JlOjpBVkNhcHR1cmVEZXZpY2VN
YW5hZ2VyOjpnZXRTb3VyY2VzSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpBVkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyOjp2ZXJpZnlDb25zdHJhaW50c0Zvck1lZGlhVHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjpBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpkZWZhdWx0Q2FwdHVyZVNlc3Npb24pOgorICAg
ICAgICAoV2ViQ29yZTo6QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6Y3JlYXRlTWVkaWFTb3VyY2VG
b3JDYXB0dXJlRGV2aWNlV2l0aENvbnN0cmFpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhcHR1
cmVEZXZpY2U6OjptX2VuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2FwdHVy
ZURldmljZUxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2FwdHVyZURldmljZUZy
b21EZXZpY2VJRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpyZWZyZXNoQ2FwdHVyZURl
dmljZUxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QVZDYXB0dXJlRGV2aWNlTWFu
YWdlcjo6YmVzdFNlc3Npb25QcmVzZXRGb3JWaWRlb1NpemUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6ZGV2aWNlU3VwcG9ydHNGYWNpbmdNb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFWQ2FwdHVyZURldmljZU1hbmFnZXI6OmJl
c3REZXZpY2VGb3JGYWNpbmdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFWQ2Fw
dHVyZURldmljZU1hbmFnZXI6OnNlc3Npb25TdXBwb3J0c0NvbnN0cmFpbnQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6aXNWYWxpZENvbnN0cmFp
bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6
dmFsaWRDb25zdHJhaW50TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QVZDYXB0
dXJlRGV2aWNlTWFuYWdlcjo6dmFsaWRGYWNpbmdNb2Rlcyk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6QVZWaWRlb0NhcHR1cmVTb3VyY2U6OmFwcGx5Q29uc3RyYWludHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVy
TWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWM6
OnZhbGlkYXRlUmVxdWVzdENvbnN0cmFpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXJNYWM6OmNyZWF0ZU1lZGlhU3RyZWFtKToKKwogMjAxNS0xMS0xMCAg
WmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIENvbnRpbnVhdGlvbnMg
d2l0aCBhbm9ueW1vdXMgd3JhcHBlcnMgaW5zaWRlIG1pc3BsYWNlcyBjaGlsZCByZW5kZXJlcnMu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL0NhcHR1cmVE
ZXZpY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vQ2FwdHVyZURldmlj
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjhlODQ1MDJmYzcyNjNmZDRhZTcwMTZhYTVlMzgyMzIxODNkNzY5MmIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL0Nh
cHR1cmVEZXZpY2UuaApAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDYXB0dXJlRGV2aWNlX2gKKyNkZWZpbmUgQ2Fw
dHVyZURldmljZV9oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBD
YXB0dXJlRGV2aWNlUG9zaXRpb24geworICAgIFVuc3BlY2lmaWVkLAorICAgIEZyb250LAorICAg
IEJhY2sKK307CisKK2VudW0gQ2FwdHVyZVNlc3Npb25QcmVzZXQgeworICAgIENhcHR1cmVTZXNz
aW9uUHJlc2V0Tm9uZSA9IDAsCisgICAgQ2FwdHVyZVNlc3Npb25QcmVzZXRMb3cgPSAxIDw8IDAs
CisgICAgQ2FwdHVyZVNlc3Npb25QcmVzZXQzNTJ4Mjg4ID0gMSA8PCAxLAorICAgIENhcHR1cmVT
ZXNzaW9uUHJlc2V0NjQweDQ4MCA9IDEgPDwgMiwKKyAgICBDYXB0dXJlU2Vzc2lvblByZXNldDEy
ODB4NzIwID0gMSA8PCAzCit9OworCitlbnVtIENhcHR1cmVEZXZpY2VNZWRpYVR5cGUgeworICAg
IENhcHR1cmVEZXZpY2VNZWRpYVR5cGVOb25lID0gMCwKKyAgICBDYXB0dXJlRGV2aWNlTWVkaWFU
eXBlQXVkaW8gPSAxIDw8IDAsCisgICAgQ2FwdHVyZURldmljZU1lZGlhVHlwZU11eGVkID0gMSA8
PCAxLAorICAgIENhcHR1cmVEZXZpY2VNZWRpYVR5cGVWaWRlbyA9IDEgPDwgMgorfTsKKworc3Ry
dWN0IENhcHR1cmVEZXZpY2UgeworICAgIFN0cmluZyBtX2NhcHR1cmVEZXZpY2VJRDsKKyAgICBT
dHJpbmcgbV9sb2NhbGl6ZWROYW1lOworICAgIFN0cmluZyBtX2dyb3VwSUQ7CisKKyAgICBTdHJp
bmcgbV9hdWRpb1NvdXJjZUlkOworICAgIFN0cmluZyBtX3ZpZGVvU291cmNlSWQ7CisKKyAgICBi
b29sIG1fZW5hYmxlZCB7IGZhbHNlIH07CisgICAgQ2FwdHVyZURldmljZU1lZGlhVHlwZSBtX21l
ZGlhVHlwZXMgeyBDYXB0dXJlRGV2aWNlTWVkaWFUeXBlTm9uZSB9OworICAgIENhcHR1cmVEZXZp
Y2VQb3NpdGlvbiBtX3Bvc2l0aW9uIHsgQ2FwdHVyZURldmljZVBvc2l0aW9uOjpVbnNwZWNpZmll
ZCB9OworfTsKKworc3RydWN0IENhcHR1cmVTZXNzaW9uIHsKKyAgICBDYXB0dXJlU2Vzc2lvblBy
ZXNldCBtX3N1cHBvcnRlZFByZXNldHMgeyBDYXB0dXJlU2Vzc2lvblByZXNldE5vbmUgfTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJF
QU0pCisKKyNlbmRpZiAvKiBDYXB0dXJlRGV2aWNlX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZmVmZTk4NjZmM2E1ZDAxOWI5MjMyOTI4MDVhODA0MWZjYmRmNDIzNQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vQ2FwdHVy
ZURldmljZU1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsMzA5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJD
YXB0dXJlRGV2aWNlTWFuYWdlci5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2lt
cG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTWVkaWFDb25zdHJhaW50cy5oIgorI2ltcG9ydCAi
UmVhbHRpbWVNZWRpYVNvdXJjZS5oIgorI2ltcG9ydCAiUmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRl
cy5oIgorI2ltcG9ydCAiVVVJRC5oIgorI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KKyNpbXBv
cnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
Q2FwdHVyZURldmljZU1hbmFnZXI6On5DYXB0dXJlRGV2aWNlTWFuYWdlcigpCit7Cit9CisKK1Zl
Y3RvcjxSZWZQdHI8VHJhY2tTb3VyY2VJbmZvPj4gQ2FwdHVyZURldmljZU1hbmFnZXI6OmdldFNv
dXJjZXNJbmZvKGNvbnN0IFN0cmluZyYgcmVxdWVzdE9yaWdpbikKK3sKKyAgICBVTlVTRURfUEFS
QU0ocmVxdWVzdE9yaWdpbik7CisgICAgVmVjdG9yPFJlZlB0cjxUcmFja1NvdXJjZUluZm8+PiBz
b3VyY2VzSW5mbzsKKyAgICBmb3IgKGF1dG8gY2FwdHVyZURldmljZSA6IGNhcHR1cmVEZXZpY2VM
aXN0KCkpIHsKKyAgICAgICAgaWYgKCFjYXB0dXJlRGV2aWNlLm1fZW5hYmxlZCkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICghY2FwdHVyZURldmljZS5tX3ZpZGVvU291cmNl
SWQuaXNFbXB0eSgpKQorICAgICAgICAgICAgc291cmNlc0luZm8uYXBwZW5kKFRyYWNrU291cmNl
SW5mbzo6Y3JlYXRlKGNhcHR1cmVEZXZpY2UubV92aWRlb1NvdXJjZUlkLCBUcmFja1NvdXJjZUlu
Zm86OlZpZGVvLCBjYXB0dXJlRGV2aWNlLm1fbG9jYWxpemVkTmFtZSwgY2FwdHVyZURldmljZS5t
X2dyb3VwSUQpKTsKKyAgICAgICAgaWYgKCFjYXB0dXJlRGV2aWNlLm1fYXVkaW9Tb3VyY2VJZC5p
c0VtcHR5KCkpCisgICAgICAgICAgICBzb3VyY2VzSW5mby5hcHBlbmQoVHJhY2tTb3VyY2VJbmZv
OjpjcmVhdGUoY2FwdHVyZURldmljZS5tX2F1ZGlvU291cmNlSWQsIFRyYWNrU291cmNlSW5mbzo6
QXVkaW8sIGNhcHR1cmVEZXZpY2UubV9sb2NhbGl6ZWROYW1lLCBjYXB0dXJlRGV2aWNlLm1fZ3Jv
dXBJRCkpOworICAgIH0KKyAgICBMT0coTWVkaWEsICJDYXB0dXJlRGV2aWNlTWFuYWdlcjo6Z2V0
U291cmNlc0luZm8oJXApLCBmb3VuZCAlenUgYWN0aXZlIGRldmljZXMiLCB0aGlzLCBzb3VyY2Vz
SW5mby5zaXplKCkpOworICAgIHJldHVybiBzb3VyY2VzSW5mbzsKK30KKworYm9vbCBDYXB0dXJl
RGV2aWNlTWFuYWdlcjo6Y2FwdHVyZURldmljZUZyb21EZXZpY2VJRChjb25zdCBTdHJpbmcmIGNh
cHR1cmVEZXZpY2VJRCwgQ2FwdHVyZURldmljZSYgc291cmNlKQoreworICAgIHNpemVfdCBjb3Vu
dCA9IG1fZGV2aWNlcy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7CisgICAgICAgIGlmIChtX2RldmljZXNbaV0ubV9jYXB0dXJlRGV2aWNlSUQgPT0gY2Fw
dHVyZURldmljZUlEKSB7CisgICAgICAgICAgICBzb3VyY2UgPSBtX2RldmljZXNbaV07CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBDYXB0dXJlRGV2aWNlTWFuYWdlcjo6dmVyaWZ5Q29uc3RyYWludHNGb3JN
ZWRpYVR5cGUoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSB0eXBlLCBNZWRpYUNvbnN0cmFpbnRz
KiBjb25zdHJhaW50cywgY29uc3QgQ2FwdHVyZVNlc3Npb24mIHNlc3Npb24sIFN0cmluZyYgaW52
YWxpZENvbnN0cmFpbnQpCit7CisgICAgaWYgKCFjb25zdHJhaW50cykKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBWZWN0b3I8TWVkaWFDb25zdHJhaW50PiBtYW5kYXRvcnlDb25zdHJhaW50
czsKKyAgICBjb25zdHJhaW50cy0+Z2V0TWFuZGF0b3J5Q29uc3RyYWludHMobWFuZGF0b3J5Q29u
c3RyYWludHMpOworICAgIGlmIChtYW5kYXRvcnlDb25zdHJhaW50cy5zaXplKCkpIHsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYW5kYXRvcnlDb25zdHJhaW50cy5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgY29uc3QgTWVkaWFDb25zdHJhaW50JiBjb25zdHJhaW50ID0gbWFu
ZGF0b3J5Q29uc3RyYWludHNbaV07CisgICAgICAgICAgICBpZiAoIXNlc3Npb25TdXBwb3J0c0Nv
bnN0cmFpbnQodHlwZSwgY29uc3RyYWludC5tX25hbWUsIHNlc3Npb24sIGNvbnN0cmFpbnQubV92
YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBpbnZhbGlkQ29uc3RyYWludCA9IGNvbnN0cmFpbnQu
bV9uYW1lOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENhcHR1cmVEZXZp
Y2VNYW5hZ2VyOjp2ZXJpZnlDb25zdHJhaW50c0Zvck1lZGlhVHlwZShSZWFsdGltZU1lZGlhU291
cmNlOjpUeXBlIHR5cGUsIE1lZGlhQ29uc3RyYWludHMqIGNvbnN0cmFpbnRzLCBTdHJpbmcmIGlu
dmFsaWRDb25zdHJhaW50KQoreworICAgIHJldHVybiB2ZXJpZnlDb25zdHJhaW50c0Zvck1lZGlh
VHlwZSh0eXBlLCBjb25zdHJhaW50cywgZGVmYXVsdENhcHR1cmVTZXNzaW9uKCksIGludmFsaWRD
b25zdHJhaW50KTsKK30KKworQ2FwdHVyZVNlc3Npb25QcmVzZXQgQ2FwdHVyZURldmljZU1hbmFn
ZXI6OmJlc3RTZXNzaW9uUHJlc2V0Rm9yVmlkZW9TaXplKGNvbnN0IENhcHR1cmVTZXNzaW9uJiBj
YXB0dXJlU2Vzc2lvbiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIEFTU0VSVCh3aWR0
aCA+PSAwKTsKKyAgICBBU1NFUlQoaGVpZ2h0ID49IDApOworCisgICAgaWYgKHdpZHRoID4gMTI4
MCB8fCBoZWlnaHQgPiA3MjApIHsKKyAgICAgICAgLy8gRklYTUU6IHRoaXMgcmVzdHJpY3Rpb24g
Y291bGQgYmUgYWRqdXN0ZWQgd2l0aCB0aGUgdmlkZW9NYXhTY2FsZUFuZENyb3BGYWN0b3IgcHJv
cGVydHkuCisgICAgICAgIHJldHVybiBDYXB0dXJlU2Vzc2lvblByZXNldE5vbmU7CisgICAgfQor
CisgICAgaWYgKHdpZHRoID4gNjQwIHx8IGhlaWdodCA+IDQ4MCkgeworICAgICAgICBpZiAoIShj
YXB0dXJlU2Vzc2lvbi5tX3N1cHBvcnRlZFByZXNldHMgJiBDYXB0dXJlU2Vzc2lvblByZXNldDEy
ODB4NzIwKSkKKyAgICAgICAgICAgIHJldHVybiBDYXB0dXJlU2Vzc2lvblByZXNldE5vbmU7Cisg
ICAgICAgIHJldHVybiBDYXB0dXJlU2Vzc2lvblByZXNldDEyODB4NzIwOworICAgIH0KKworICAg
IGlmICh3aWR0aCA+IDM1MiB8fCBoZWlnaHQgPiAyODgpIHsKKyAgICAgICAgaWYgKCEoY2FwdHVy
ZVNlc3Npb24ubV9zdXBwb3J0ZWRQcmVzZXRzICYgQ2FwdHVyZVNlc3Npb25QcmVzZXQ2NDB4NDgw
KSkKKyAgICAgICAgICAgIHJldHVybiBDYXB0dXJlU2Vzc2lvblByZXNldE5vbmU7CisgICAgICAg
IHJldHVybiBDYXB0dXJlU2Vzc2lvblByZXNldDY0MHg0ODA7CisgICAgfQorCisgICAgaWYgKGNh
cHR1cmVTZXNzaW9uLm1fc3VwcG9ydGVkUHJlc2V0cyAmIENhcHR1cmVTZXNzaW9uUHJlc2V0MzUy
eDI4OCkKKyAgICAgICAgcmV0dXJuIENhcHR1cmVTZXNzaW9uUHJlc2V0MzUyeDI4ODsKKworICAg
IGlmIChjYXB0dXJlU2Vzc2lvbi5tX3N1cHBvcnRlZFByZXNldHMgJiBDYXB0dXJlU2Vzc2lvblBy
ZXNldExvdykKKyAgICAgICAgcmV0dXJuIENhcHR1cmVTZXNzaW9uUHJlc2V0TG93OworCisgICAg
cmV0dXJuIENhcHR1cmVTZXNzaW9uUHJlc2V0Tm9uZTsKK30KKworVmVjdG9yPFJlZlB0cjxSZWFs
dGltZU1lZGlhU291cmNlPj4gQ2FwdHVyZURldmljZU1hbmFnZXI6OmJlc3RTb3VyY2VzRm9yVHlw
ZUFuZENvbnN0cmFpbnRzKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlwZSwgUGFzc1JlZlB0
cjxNZWRpYUNvbnN0cmFpbnRzPiBjb25zdHJhaW50cykKK3sKKyAgICBWZWN0b3I8UmVmUHRyPFJl
YWx0aW1lTWVkaWFTb3VyY2U+PiBiZXN0U291cmNlc0xpc3Q7CisKKyAgICBzdHJ1Y3QgeworICAg
ICAgICBib29sIG9wZXJhdG9yKCkoUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+IGEsIFJlZlB0
cjxSZWFsdGltZU1lZGlhU291cmNlPiBiKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
YS0+Zml0bmVzc1Njb3JlKCkgPCBiLT5maXRuZXNzU2NvcmUoKTsKKyAgICAgICAgfQorICAgIH0g
c29ydEJhc2VkT2ZmRml0bmVzc1Njb3JlOworCisgICAgZm9yIChhdXRvJiBjYXB0dXJlRGV2aWNl
IDogY2FwdHVyZURldmljZUxpc3QoKSkgeworICAgICAgICBpZiAoIWNhcHR1cmVEZXZpY2UubV9l
bmFibGVkKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHR5cGUgPT0gUmVh
bHRpbWVNZWRpYVNvdXJjZTo6QXVkaW8gJiYgIWNhcHR1cmVEZXZpY2UubV9hdWRpb1NvdXJjZUlk
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+IGNh
cHR1cmVTb3VyY2UgPSBzb3VyY2VXaXRoVUlEKGNhcHR1cmVEZXZpY2UubV9jYXB0dXJlRGV2aWNl
SUQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlvLCBjb25zdHJhaW50cy5nZXQoKSk7CisgICAg
ICAgICAgICBpZiAoIWNhcHR1cmVTb3VyY2UpCisgICAgICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgICAgIGJlc3RTb3VyY2VzTGlzdC5hcHBlbmQoY2FwdHVyZVNvdXJjZS5sZWFrUmVm
KCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJj
ZTo6VmlkZW8gJiYgIWNhcHR1cmVEZXZpY2UubV92aWRlb1NvdXJjZUlkLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+IGNhcHR1cmVTb3VyY2UgPSBz
b3VyY2VXaXRoVUlEKGNhcHR1cmVEZXZpY2UubV9jYXB0dXJlRGV2aWNlSUQsIFJlYWx0aW1lTWVk
aWFTb3VyY2U6OlZpZGVvLCBjb25zdHJhaW50cy5nZXQoKSk7CisgICAgICAgICAgICBpZiAoIWNh
cHR1cmVTb3VyY2UpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGJl
c3RTb3VyY2VzTGlzdC5hcHBlbmQoY2FwdHVyZVNvdXJjZS5sZWFrUmVmKCkpOworICAgICAgICB9
CisgICAgfQorICAgIHN0ZDo6c29ydChiZXN0U291cmNlc0xpc3QuYmVnaW4oKSwgYmVzdFNvdXJj
ZXNMaXN0LmVuZCgpLCBzb3J0QmFzZWRPZmZGaXRuZXNzU2NvcmUpOworICAgIHJldHVybiBiZXN0
U291cmNlc0xpc3Q7Cit9CisKK1JlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlPiBDYXB0dXJlRGV2
aWNlTWFuYWdlcjo6c291cmNlV2l0aFVJRChjb25zdCBTdHJpbmcmIGRldmljZVVJRCwgUmVhbHRp
bWVNZWRpYVNvdXJjZTo6VHlwZSB0eXBlLCBNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cykK
K3sKKyAgICBmb3IgKGF1dG8mIGNhcHR1cmVEZXZpY2UgOiBjYXB0dXJlRGV2aWNlTGlzdCgpKSB7
CisgICAgICAgIGlmIChjYXB0dXJlRGV2aWNlLm1fY2FwdHVyZURldmljZUlEICE9IGRldmljZVVJ
RCB8fCAhY2FwdHVyZURldmljZS5tX2VuYWJsZWQpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBpZiAodHlwZSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpBdWRpbyAmJiBjYXB0dXJl
RGV2aWNlLm1fYXVkaW9Tb3VyY2VJZC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgaWYgKHR5cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VmlkZW8gJiYgY2FwdHVy
ZURldmljZS5tX3ZpZGVvU291cmNlSWQuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgaWYgKFJlYWx0aW1lTWVkaWFTb3VyY2UqIG1lZGlhU291cmNlID0gY3JlYXRl
TWVkaWFTb3VyY2VGb3JDYXB0dXJlRGV2aWNlV2l0aENvbnN0cmFpbnRzKGNhcHR1cmVEZXZpY2Us
IHR5cGUsIGNvbnN0cmFpbnRzKSkKKyAgICAgICAgICAgIHJldHVybiBtZWRpYVNvdXJjZTsKKyAg
ICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2Jvb2wgQ2FwdHVyZURldmljZU1hbmFnZXI6
OmRldmljZVN1cHBvcnRzRmFjaW5nTW9kZShjb25zdCBDYXB0dXJlRGV2aWNlJiBkZXZpY2UsIFJl
YWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OlZpZGVvRmFjaW5nTW9kZSBmYWNpbmdNb2RlKQorewor
ICAgIGlmICghZGV2aWNlLm1fbWVkaWFUeXBlcyAmIENhcHR1cmVEZXZpY2VNZWRpYVR5cGVWaWRl
bykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChmYWNpbmdNb2RlKSB7Cisg
ICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlU3RhdGVzOjpVc2VyOgorICAgICAgICBpZiAoZGV2
aWNlLm1fcG9zaXRpb24gPT0gQ2FwdHVyZURldmljZVBvc2l0aW9uOjpGcm9udCkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJlYWx0aW1lTWVkaWFT
b3VyY2VTdGF0ZXM6OkVudmlyb25tZW50OgorICAgICAgICBpZiAoZGV2aWNlLm1fcG9zaXRpb24g
PT0gQ2FwdHVyZURldmljZVBvc2l0aW9uOjpCYWNrKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6TGVm
dDoKKyAgICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OlJpZ2h0OgorICAgIGNhc2Ug
UmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6VW5rbm93bjoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworQ2FwdHVyZURldmljZSogQ2FwdHVy
ZURldmljZU1hbmFnZXI6OmJlc3REZXZpY2VGb3JGYWNpbmdNb2RlKFJlYWx0aW1lTWVkaWFTb3Vy
Y2VTdGF0ZXM6OlZpZGVvRmFjaW5nTW9kZSBmYWNpbmdNb2RlKQoreworICAgIGZvciAoYXV0byYg
ZGV2aWNlIDogbV9kZXZpY2VzKSB7CisgICAgICAgIGlmIChkZXZpY2VTdXBwb3J0c0ZhY2luZ01v
ZGUoZGV2aWNlLCBmYWNpbmdNb2RlKSkKKyAgICAgICAgICAgIHJldHVybiAmZGV2aWNlOworICAg
IH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIENhcHR1cmVEZXZpY2VNYW5hZ2Vy
OjpzZXNzaW9uU3VwcG9ydHNDb25zdHJhaW50KFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlw
ZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBDYXB0dXJlU2Vzc2lvbiYgc2Vzc2lvbiwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBzaXplX3QgY29uc3RyYWludCA9IHZhbGlkQ29uc3Ry
YWludE5hbWVzKCkuZmluZChuYW1lKTsKKyAgICBpZiAoY29uc3RyYWludCA9PSBub3RGb3VuZCkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBzd2l0Y2ggKGNvbnN0cmFpbnQpIHsKKyAgICBj
YXNlIFdpZHRoOgorICAgICAgICBpZiAodHlwZSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpBdWRp
bykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4gYmVzdFNlc3Np
b25QcmVzZXRGb3JWaWRlb1NpemUoc2Vzc2lvbiwgdmFsdWUudG9JbnQoKSwgMCkgIT0gQ2FwdHVy
ZVNlc3Npb25QcmVzZXROb25lOworICAgIGNhc2UgSGVpZ2h0OgorICAgICAgICBpZiAodHlwZSA9
PSBSZWFsdGltZU1lZGlhU291cmNlOjpBdWRpbykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICByZXR1cm4gYmVzdFNlc3Npb25QcmVzZXRGb3JWaWRlb1NpemUoc2Vzc2lvbiwg
MCwgdmFsdWUudG9JbnQoKSkgIT0gQ2FwdHVyZVNlc3Npb25QcmVzZXROb25lOworICAgIGNhc2Ug
RnJhbWVSYXRlOiB7CisgICAgICAgIGlmICh0eXBlID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1
ZGlvKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIEl0IHdvdWxkIG1h
a2Ugc2Vuc2UgdG8gdXNlIFtBVkNhcHR1cmVDb25uZWN0aW9uIHZpZGVvTWluRnJhbWVEdXJhdGlv
bl0gYW5kCisgICAgICAgIC8vIFtBVkNhcHR1cmVDb25uZWN0aW9uIHZpZGVvTWF4RnJhbWVEdXJh
dGlvbl0sIGJ1dCB0aGV5IG9ubHkgd29yayB3aXRoIGEgImxpdmUiIEFWQ2FwdHVyZUNvbm5lY3Rp
b24uCisgICAgICAgIGZsb2F0IHJhdGUgPSB2YWx1ZS50b0Zsb2F0KCk7CisgICAgICAgIHJldHVy
biByYXRlID4gMCAmJiByYXRlIDw9IDYwOworICAgIH0KKyAgICBjYXNlIEdhaW46IHsKKyAgICAg
ICAgaWYgKHR5cGUgIT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW8pCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZmxvYXQgbGV2ZWwgPSB2YWx1ZS50b0Zsb2F0KCk7Cisg
ICAgICAgIHJldHVybiBsZXZlbCA+IDAgJiYgbGV2ZWwgPD0gMTsKKyAgICB9CisgICAgY2FzZSBG
YWNpbmdNb2RlOiB7CisgICAgICAgIGlmICh0eXBlID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1
ZGlvKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHNpemVfdCBmYWNpbmdN
b2RlID0gIHZhbGlkRmFjaW5nTW9kZXMoKS5maW5kKHZhbHVlKTsKKyAgICAgICAgaWYgKGZhY2lu
Z01vZGUgIT0gbm90Rm91bmQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybiBiZXN0RGV2aWNlRm9yRmFjaW5nTW9kZShzdGF0aWNfY2FzdDxSZWFsdGltZU1lZGlhU291
cmNlU3RhdGVzOjpWaWRlb0ZhY2luZ01vZGU+KGZhY2luZ01vZGUpKTsKKyAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIENhcHR1cmVEZXZpY2VNYW5hZ2VyOjppc1Zh
bGlkQ29uc3RyYWludChSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmlu
ZyYgbmFtZSkKK3sKKyAgICBzaXplX3QgY29uc3RyYWludCA9IHZhbGlkQ29uc3RyYWludE5hbWVz
KCkuZmluZChuYW1lKTsKKyAgICBpZiAoY29uc3RyYWludCA9PSBub3RGb3VuZCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKGNvbnN0cmFpbnQgPT0gR2FpbikKKyAgICAgICAgcmV0
dXJuIHR5cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW87CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIENhcHR1cmVEZXZpY2VNYW5hZ2Vy
Ojp2YWxpZENvbnN0cmFpbnROYW1lcygpCit7CisgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElD
X0xPQ0FMKFZlY3RvcjxBdG9taWNTdHJpbmc+LCBjb25zdHJhaW50cywgKCkpOworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGhlaWdodENvbnN0cmFpbnQoImhlaWdodCIs
IEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxBdG9taWNTdHJpbmc+IHdpZHRoQ29uc3RyYWludCgid2lkdGgiLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRv
bWljU3RyaW5nPiBmcmFtZVJhdGVDb25zdHJhaW50KCJmcmFtZVJhdGUiLCBBdG9taWNTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWlj
U3RyaW5nPiBmYWNpbmdNb2RlQ29uc3RyYWludCgiZmFjaW5nTW9kZSIsIEF0b21pY1N0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IGdhaW5Db25zdHJhaW50KCJnYWluIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CisKKyAgICBpZiAoIWNvbnN0cmFpbnRzLnNpemUoKSkgeworICAgICAgICBjb25z
dHJhaW50cy5pbnNlcnQoV2lkdGgsIHdpZHRoQ29uc3RyYWludCk7CisgICAgICAgIGNvbnN0cmFp
bnRzLmluc2VydChIZWlnaHQsIGhlaWdodENvbnN0cmFpbnQpOworICAgICAgICBjb25zdHJhaW50
cy5pbnNlcnQoRnJhbWVSYXRlLCBmcmFtZVJhdGVDb25zdHJhaW50KTsKKyAgICAgICAgY29uc3Ry
YWludHMuaW5zZXJ0KEZhY2luZ01vZGUsIGZhY2luZ01vZGVDb25zdHJhaW50KTsKKyAgICAgICAg
Y29uc3RyYWludHMuaW5zZXJ0KEdhaW4sIGdhaW5Db25zdHJhaW50KTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gY29uc3RyYWludHM7Cit9CisKK2NvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBDYXB0
dXJlRGV2aWNlTWFuYWdlcjo6dmFsaWRGYWNpbmdNb2RlcygpCit7CisgICAgREVQUkVDQVRFRF9E
RUZJTkVfU1RBVElDX0xPQ0FMKFZlY3RvcjxBdG9taWNTdHJpbmc+LCBtb2RlcywgKCkpOworCisg
ICAgaWYgKCFtb2Rlcy5zaXplKCkpIHsKKyAgICAgICAgbW9kZXMuaW5zZXJ0KFJlYWx0aW1lTWVk
aWFTb3VyY2VTdGF0ZXM6OlVzZXIsIFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OmZhY2luZ01v
ZGUoUmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6VXNlcikpOworICAgICAgICBtb2Rlcy5pbnNl
cnQoUmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6RW52aXJvbm1lbnQsIFJlYWx0aW1lTWVkaWFT
b3VyY2VTdGF0ZXM6OmZhY2luZ01vZGUoUmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6RW52aXJv
bm1lbnQpKTsKKyAgICAgICAgbW9kZXMuaW5zZXJ0KFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6
OkxlZnQsIFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OmZhY2luZ01vZGUoUmVhbHRpbWVNZWRp
YVNvdXJjZVN0YXRlczo6TGVmdCkpOworICAgICAgICBtb2Rlcy5pbnNlcnQoUmVhbHRpbWVNZWRp
YVNvdXJjZVN0YXRlczo6UmlnaHQsIFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OmZhY2luZ01v
ZGUoUmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6UmlnaHQpKTsKKyAgICB9CisKKyAgICByZXR1
cm4gbW9kZXM7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlTWFuYWdl
ci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlTWFu
YWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmJlMWIxZjQ1ZjQ5Njc3ZjQ3ZDFhNGRiZjk5OWI5MTcwYzI4ZWRm
ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ2FwdHVyZURldmljZU1hbmFn
ZXJfaAorI2RlZmluZSBDYXB0dXJlRGV2aWNlTWFuYWdlcl9oCisKKyNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKQorCisjaW5jbHVkZSAiQ2FwdHVyZURldmljZS5oIgorI2luY2x1ZGUgIk1lZGlhU3Ry
ZWFtVHJhY2tTb3VyY2VzUmVxdWVzdENsaWVudC5oIgorI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFT
b3VyY2UuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBDYXB0dXJlRGV2aWNlTWFuYWdlciB7CitwdWJsaWM6CisgICAgZW51
bSBWYWxpZENvbnN0cmFpbnRzIHsgV2lkdGggPSAwLCBIZWlnaHQsIEZyYW1lUmF0ZSwgRmFjaW5n
TW9kZSwgR2FpbiB9OworCisgICAgdmlydHVhbCBWZWN0b3I8Q2FwdHVyZURldmljZT4mIGNhcHR1
cmVEZXZpY2VMaXN0KCkgeyByZXR1cm4gbV9kZXZpY2VzOyB9CisgICAgdmlydHVhbCBUcmFja1Nv
dXJjZUluZm9WZWN0b3IgZ2V0U291cmNlc0luZm8oY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVh
bCBWZWN0b3I8UmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+PiBiZXN0U291cmNlc0ZvclR5cGVB
bmRDb25zdHJhaW50cyhSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlLCBQYXNzUmVmUHRyPE1lZGlh
Q29uc3RyYWludHM+KTsKKyAgICB2aXJ0dWFsIFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlPiBz
b3VyY2VXaXRoVUlEKGNvbnN0IFN0cmluZyYsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUsIE1l
ZGlhQ29uc3RyYWludHMqKTsKKworICAgIHZpcnR1YWwgYm9vbCB2ZXJpZnlDb25zdHJhaW50c0Zv
ck1lZGlhVHlwZShSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlLCBNZWRpYUNvbnN0cmFpbnRzKiwg
Y29uc3QgQ2FwdHVyZVNlc3Npb24mLCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmVyaWZ5
Q29uc3RyYWludHNGb3JNZWRpYVR5cGUoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSwgTWVkaWFD
b25zdHJhaW50cyosIFN0cmluZyYpOworCisgICAgdmlydHVhbCBDYXB0dXJlU2Vzc2lvblByZXNl
dCBiZXN0U2Vzc2lvblByZXNldEZvclZpZGVvU2l6ZShjb25zdCBDYXB0dXJlU2Vzc2lvbiYsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCk7CisKKyAgICB2aXJ0dWFsIGNvbnN0IFZlY3RvcjxBdG9taWNT
dHJpbmc+JiB2YWxpZENvbnN0cmFpbnROYW1lcygpOworICAgIHZpcnR1YWwgY29uc3QgVmVjdG9y
PEF0b21pY1N0cmluZz4mIHZhbGlkRmFjaW5nTW9kZXMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNW
YWxpZENvbnN0cmFpbnQoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSwgY29uc3QgU3RyaW5nJik7
CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5DYXB0dXJlRGV2aWNlTWFuYWdlcigpOworICAg
IHZpcnR1YWwgUmVhbHRpbWVNZWRpYVNvdXJjZSogY3JlYXRlTWVkaWFTb3VyY2VGb3JDYXB0dXJl
RGV2aWNlV2l0aENvbnN0cmFpbnRzKGNvbnN0IENhcHR1cmVEZXZpY2UmLCBSZWFsdGltZU1lZGlh
U291cmNlOjpUeXBlLCBNZWRpYUNvbnN0cmFpbnRzKikgPSAwOworCisgICAgdmlydHVhbCBDYXB0
dXJlU2Vzc2lvbiBkZWZhdWx0Q2FwdHVyZVNlc3Npb24oKSBjb25zdCB7IHJldHVybiBDYXB0dXJl
U2Vzc2lvbigpOyB9CisgICAgdmlydHVhbCBDYXB0dXJlRGV2aWNlKiBiZXN0RGV2aWNlRm9yRmFj
aW5nTW9kZShSZWFsdGltZU1lZGlhU291cmNlU3RhdGVzOjpWaWRlb0ZhY2luZ01vZGUpOworICAg
IHZpcnR1YWwgYm9vbCBzZXNzaW9uU3VwcG9ydHNDb25zdHJhaW50KFJlYWx0aW1lTWVkaWFTb3Vy
Y2U6OlR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgQ2FwdHVyZVNlc3Npb24mLCBjb25z
dCBTdHJpbmcmIHZhbHVlKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FwdHVyZURldmljZUZyb21EZXZp
Y2VJRChjb25zdCBTdHJpbmcmIGNhcHR1cmVEZXZpY2VJRCwgQ2FwdHVyZURldmljZSYgc291cmNl
KTsKKyAgICB2aXJ0dWFsIGJvb2wgZGV2aWNlU3VwcG9ydHNGYWNpbmdNb2RlKGNvbnN0IENhcHR1
cmVEZXZpY2UmLCBSZWFsdGltZU1lZGlhU291cmNlU3RhdGVzOjpWaWRlb0ZhY2luZ01vZGUpOwor
CisgICAgVmVjdG9yPENhcHR1cmVEZXZpY2U+IG1fZGV2aWNlczsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNlbmRpZiAv
KiBDYXB0dXJlRGV2aWNlTWFuYWdlcl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYWIyZGFmZDJjYzViZjYyNGI3YzgxNDc3
MTMxMmVlNzYzYjRjYzU5MC4uN2U1YTFmZjNiZWI1ODI0ZTFlZmU5OWE2ZjExYjllZDZlM2NhMWI2
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMzM5LDEwICszMzksMTAgQEAKIAkJMDdEMDdCMTQxODM0MTU4ODAwQUJERDNDIC8q
IEpTUlRDU2Vzc2lvbkRlc2NyaXB0aW9uQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3RDA3QjEzMTgzNDE1ODgwMEFCREQzQyAvKiBKU1JU
Q1Nlc3Npb25EZXNjcmlwdGlvbkN1c3RvbS5jcHAgKi87IH07CiAJCTA3RDYzNzQwMUJCMEIxMTMw
MDI1NkNFOSAvKiBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdENjM3M0UxQkIwQjExMzAwMjU2Q0U5
IC8qIFdlYkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLmggKi87IH07CiAJCTA3RDYzNzQxMUJC
MEIxMTMwMDI1NkNFOSAvKiBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3RDYzNzNGMUJCMEIxMTMw
MDI1NkNFOSAvKiBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbSAqLzsgfTsKLQkJMDdE
NkE0RUYxQkVDRjJEMjAwMTc0MTQ2IC8qIE1vY2tSZWFsdGltZU1lZGlhU291cmNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3RDZBNEVEMUJFQ0Yy
RDIwMDE3NDE0NiAvKiBNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAgKi87IHNldHRpbmdzID0g
e0FTU0VUX1RBR1MgPSAoKTsgfTsgfTsKLQkJMDdENkE0RjAxQkVDRjJEMjAwMTc0MTQ2IC8qIE1v
Y2tSZWFsdGltZU1lZGlhU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwN0Q2QTRFRTFCRUNGMkQyMDAxNzQxNDYgLyogTW9ja1JlYWx0aW1lTWVk
aWFTb3VyY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVNTRVRfVEFHUyA9ICgpOyB9OyB9OwotCQkwN0Q2
QTRGMzFCRUQ1Rjg4MDAxNzQxNDYgLyogTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdENkE0RjExQkVENUY4
ODAwMTc0MTQ2IC8qIE1vY2tSZWFsdGltZUF1ZGlvU291cmNlLmNwcCAqLzsgc2V0dGluZ3MgPSB7
QVNTRVRfVEFHUyA9ICgpOyB9OyB9OwotCQkwN0Q2QTRGNDFCRUQ1Rjg4MDAxNzQxNDYgLyogTW9j
a1JlYWx0aW1lQXVkaW9Tb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA3RDZBNEYyMUJFRDVGODgwMDE3NDE0NiAvKiBNb2NrUmVhbHRpbWVBdWRp
b1NvdXJjZS5oICovOyBzZXR0aW5ncyA9IHtBU1NFVF9UQUdTID0gKCk7IH07IH07CisJCTA3RDZB
NEVGMUJFQ0YyRDIwMDE3NDE0NiAvKiBNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0Q2QTRFRDFCRUNGMkQy
MDAxNzQxNDYgLyogTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwICovOyB9OworCQkwN0Q2QTRG
MDFCRUNGMkQyMDAxNzQxNDYgLyogTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3RDZBNEVFMUJFQ0YyRDIwMDE3
NDE0NiAvKiBNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZS5oICovOyB9OworCQkwN0Q2QTRGMzFCRUQ1
Rjg4MDAxNzQxNDYgLyogTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdENkE0RjExQkVENUY4ODAwMTc0MTQ2
IC8qIE1vY2tSZWFsdGltZUF1ZGlvU291cmNlLmNwcCAqLzsgfTsKKwkJMDdENkE0RjQxQkVENUY4
ODAwMTc0MTQ2IC8qIE1vY2tSZWFsdGltZUF1ZGlvU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0Q2QTRGMjFCRUQ1Rjg4MDAxNzQxNDYgLyog
TW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuaCAqLzsgfTsKIAkJMDdEQzVGRDQxN0QzRUVFOTAwOTlG
ODkwIC8qIEpTUlRDU3RhdHNSZXNwb25zZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0RDNUZEMzE3RDNFRUU5MDA5OUY4OTAgLyogSlNS
VENTdGF0c1Jlc3BvbnNlQ3VzdG9tLmNwcCAqLzsgfTsKIAkJMDdFMTE2QjExNDg5QzlBMTAwRUM1
QUNFIC8qIEpTVGV4dFRyYWNrQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDA3RTExNkIwMTQ4OUM5QTEwMEVDNUFDRSAvKiBKU1RleHRUcmFj
a0N1c3RvbS5jcHAgKi87IH07CiAJCTA3RTExNzA3MTQ4OUVCRUIwMEVDNUFDRSAvKiBKU1RleHRU
cmFja0N1ZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwN0UxMTcwNjE0ODlFQkVCMDBFQzVBQ0UgLyogSlNUZXh0VHJhY2tDdWVDdXN0b20u
Y3BwICovOyB9OwpAQCAtMzUwLDEwICszNTAsMTAgQEAKIAkJMDdFOUUxMkUxOEY1RTI3NjAwMTFB
M0E0IC8qIEluYmFuZE1ldGFkYXRhVGV4dFRyYWNrUHJpdmF0ZUFWRi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdFOUUxMkQxOEY1RTI3NjAwMTFBM0E0
IC8qIEluYmFuZE1ldGFkYXRhVGV4dFRyYWNrUHJpdmF0ZUFWRi5oICovOyB9OwogCQkwN0U5RTEz
MDE4RjYyQjM3MDAxMUEzQTQgLyogSW5iYW5kTWV0YWRhdGFUZXh0VHJhY2tQcml2YXRlQVZGLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3RTlFMTJG
MThGNjJCMzcwMDExQTNBNCAvKiBJbmJhbmRNZXRhZGF0YVRleHRUcmFja1ByaXZhdGVBVkYuY3Bw
ICovOyB9OwogCQkwN0VEQzNFRTFBQUNCNzVEMDA5ODNFQjUgLyogTWVkaWFTZXNzaW9uTWFuYWdl
ck1hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
N0VEQzNFRDFBQUNCNzVEMDA5ODNFQjUgLyogTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5jcHAgKi87
IH07Ci0JCTA3RUU3NkVCMUJFOTZEQjAwMEY4OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJj
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0VF
NzZFOTFCRTk2REIwMDBGODkxMzMgLyogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwICovOyBz
ZXR0aW5ncyA9IHtBU1NFVF9UQUdTID0gKCk7IH07IH07Ci0JCTA3RUU3NkVDMUJFOTZEQjAwMEY4
OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdFRTc2RUExQkU5NkRCMDAwRjg5MTMzIC8qIE1vY2tS
ZWFsdGltZVZpZGVvU291cmNlLmggKi87IHNldHRpbmdzID0ge0FTU0VUX1RBR1MgPSAoKTsgfTsg
fTsKLQkJMDdFRTc2RUYxQkVBNjE5ODAwRjg5MTMzIC8qIE1vY2tSZWFsdGltZVZpZGVvU291cmNl
TWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0VF
NzZFRDFCRUE2MTk4MDBGODkxMzMgLyogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMuaCAqLzsg
c2V0dGluZ3MgPSB7QVNTRVRfVEFHUyA9ICgpOyB9OyB9OwotCQkwN0VFNzZGMDFCRUE2MTk4MDBG
ODkxMzMgLyogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0VFNzZFRTFCRUE2MTk4MDBGODkxMzMgLyog
TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0gKi87IHNldHRpbmdzID0ge0FTU0VUX1RBR1Mg
PSAoKTsgfTsgfTsKKwkJMDdFRTc2RUIxQkU5NkRCMDAwRjg5MTMzIC8qIE1vY2tSZWFsdGltZVZp
ZGVvU291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA3RUU3NkU5MUJFOTZEQjAwMEY4OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5j
cHAgKi87IH07CisJCTA3RUU3NkVDMUJFOTZEQjAwMEY4OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRl
b1NvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDdFRTc2RUExQkU5NkRCMDAwRjg5MTMzIC8qIE1vY2tSZWFsdGltZVZpZGVvU291cmNlLmggKi87
IH07CisJCTA3RUU3NkVGMUJFQTYxOTgwMEY4OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJj
ZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdF
RTc2RUQxQkVBNjE5ODAwRjg5MTMzIC8qIE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLmggKi87
IH07CisJCTA3RUU3NkYwMUJFQTYxOTgwMEY4OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJj
ZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3
RUU3NkVFMUJFQTYxOTgwMEY4OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbSAq
LzsgfTsKIAkJMDdGMEI5N0ExQUM1REIzMzAwRTUzNUQ5IC8qIEFWS2l0U1BJLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0YwQjk3OTFBQzVEQjMzMDBF
NTM1RDkgLyogQVZLaXRTUEkuaCAqLzsgfTsKIAkJMDdGMEI5N0MxQUM1REI0NjAwRTUzNUQ5IC8q
IEFWRm91bmRhdGlvblNQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDdGMEI5N0IxQUM1REI0NjAwRTUzNUQ5IC8qIEFWRm91bmRhdGlvblNQSS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3Rjg3Njg0
MUFENTgwRjkwMDkwNTg0OSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0Q29udGV4dC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdGODc2ODMxQUQ0QTk0NTAw
OTA1ODQ5IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEyMTIsNiArMTIxMiw5IEBACiAJCTJF
M0JDMTA4MTE3RDQ3OTgwMEI5NDA5QSAvKiBET01GaWxlRXJyb3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFM0JDMTA2MTE3RDQ3OTgwMEI5NDA5QSAv
KiBET01GaWxlRXJyb3IuaCAqLzsgfTsKIAkJMkUzQkMxMDkxMTdENDc5ODAwQjk0MDlBIC8qIERP
TUZpbGVFcnJvci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJFM0JDMTA3MTE3RDQ3OTgwMEI5NDA5QSAvKiBET01GaWxlRXJyb3IubW0gKi87IH07CiAJ
CTJFM0JDMTBCMTE3RDQ3QzgwMEI5NDA5QSAvKiBET01GaWxlRXJyb3JJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkUzQkMxMEExMTdENDdD
ODAwQjk0MDlBIC8qIERPTUZpbGVFcnJvckludGVybmFsLmggKi87IH07CisJCTJFM0M4QzYyMUJG
QkE5NzUwMDMwOTU2NiAvKiBDYXB0dXJlRGV2aWNlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkUzQzhDNjExQkZCQThEQzAwMzA5NTY2IC8q
IENhcHR1cmVEZXZpY2VNYW5hZ2VyLmggKi87IH07CisJCTJFM0M4QzY0MUJGQkI3NUQwMDMwOTU2
NiAvKiBDYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRTNDOEM2MzFCRkJCNzVEMDAzMDk1NjYgLyogQ2FwdHVyZURl
dmljZU1hbmFnZXIuY3BwICovOyB9OworCQkyRTNDOEM2ODFCRkJGOEUxMDAzMDk1NjYgLyogQ2Fw
dHVyZURldmljZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkUzQzhDNjYxQkZCRjhFMTAwMzA5NTY2IC8qIENhcHR1cmVEZXZpY2UuaCAqLzsgfTsKIAkJ
MkU0MzQ2NDUwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTQzNDYzMzBGNTQ2QTgyMDBCMEYxQkEgLyog
V29ya2VyLmNwcCAqLzsgfTsKIAkJMkU0MzQ2NDYwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU0MzQ2MzQw
RjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlci5oICovOyB9OwogCQkyRTQzNDY0ODBGNTQ2QTgyMDBC
MEYxQkEgLyogV29ya2VyR2xvYmFsU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkU0MzQ2MzYwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlckds
b2JhbFNjb3BlLmNwcCAqLzsgfTsKQEAgLTUwMDcsMTAgKzUwMTAsMTAgQEAKIAkJQjJDM0RBNkIw
RDAwNkNENjAwRUY2RjI2IC8qIEZvbnRTZWxlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNUEwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRT
ZWxlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUIyQzNEQTZDMEQwMDZDRDYwMEVGNkYyNiAvKiBHbHlwaEJ1ZmZlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJDM0RBNUIwRDAwNkNENjAwRUY2
RjI2IC8qIEdseXBoQnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQjJDOTZEOEQwQjNBRjJCNzAwNUU4MEVDIC8qIEpTU1ZHUGF0aFNlZ0N1
c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
MkM5NkQ4QzBCM0FGMkI3MDA1RTgwRUMgLyogSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcCAqLzsgfTsK
LQkJQjJEM0RBNjQwRDAwNkNENjAwRUY2RjNBIC8qIE9wZW5UeXBlQ0cuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJEM0RBNTMwRDAwNkNENjAwRUY2
RjNBIC8qIE9wZW5UeXBlQ0cuY3BwICovOyB9OwotCQlCMkQzREE2NTBEMDA2Q0Q2MDBFRjZGM0Eg
LyogT3BlblR5cGVDRy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjJEM0RBNTQwRDAwNkNENjAwRUY2RjNBIC8qIE9wZW5UeXBlQ0cuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMkQzREE2NDBEMDA2Q0Q2
MDBFRjZGMjcgLyogT3BlblR5cGVNYXRoRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMkQzREE1MzBEMDA2Q0Q2MDBFRjZGMjcgLyogT3BlblR5
cGVNYXRoRGF0YS5jcHAgKi87IH07CisJCUIyRDNEQTY0MEQwMDZDRDYwMEVGNkYzQSAvKiBPcGVu
VHlwZUNHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyRDNEQTUzMEQwMDZDRDYwMEVGNkYzQSAvKiBPcGVuVHlwZUNHLmNwcCAqLzsgfTsKIAkJQjJE
M0RBNjUwRDAwNkNENjAwRUY2RjI3IC8qIE9wZW5UeXBlTWF0aERhdGEuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyRDNEQTU0MEQwMDZDRDYwMEVGNkYy
NyAvKiBPcGVuVHlwZU1hdGhEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJQjJEM0RBNjUwRDAwNkNENjAwRUY2RjNBIC8qIE9wZW5UeXBlQ0cu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyRDNEQTU0
MEQwMDZDRDYwMEVGNkYzQSAvKiBPcGVuVHlwZUNHLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJEM0VBNjUwRDAwNkNENjAwRUY2RjI4IC8qIE9w
ZW5UeXBlVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEIyRDNFQTU0MEQwMDZDRDYwMEVGNkYyOCAvKiBPcGVuVHlwZVR5cGVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjJFMjdDOUYwQjBGMkIw
OTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCMkUyN0M5RDBCMEYyQjA5MDBGMTdDN0IgLyogRmxvYXRQb2lu
dDNELmNwcCAqLzsgfTsKIAkJQjJFMjdDQTAwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQz
RC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjJFMjdD
OUUwQjBGMkIwOTAwRjE3QzdCIC8qIEZsb2F0UG9pbnQzRC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04NTU5LDYgKzg1NjIsOSBAQAogCQkyRTNC
QzEwNjExN0Q0Nzk4MDBCOTQwOUEgLyogRE9NRmlsZUVycm9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERPTUZpbGVFcnJvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyRTNCQzEwNzExN0Q0Nzk4MDBCOTQwOUEgLyogRE9NRmlsZUVycm9yLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NRmlsZUVycm9yLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyRTNCQzEwQTExN0Q0N0M4MDBCOTQwOUEgLyogRE9NRmls
ZUVycm9ySW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NRmls
ZUVycm9ySW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkUzQzhDNjEx
QkZCQThEQzAwMzA5NTY2IC8qIENhcHR1cmVEZXZpY2VNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENhcHR1cmVEZXZpY2VNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJF
M0M4QzYzMUJGQkI3NUQwMDMwOTU2NiAvKiBDYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYXB0dXJlRGV2aWNlTWFuYWdlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJFM0M4QzY2MUJGQkY4RTEwMDMwOTU2NiAv
KiBDYXB0dXJlRGV2aWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhcHR1
cmVEZXZpY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkU0MzQ2MzMwRjU0NkE4
MjAwQjBGMUJBIC8qIFdvcmtlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXb3JrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRTQzNDYzNDBG
NTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdvcmtlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRTQzNDYzNTBGNTQ2
QTgyMDBCMEYxQkEgLyogV29ya2VyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXb3JrZXIu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI3NTUsMTAgKzEyNzYxLDEwIEBA
CiAJCUIyQzNEQTVBMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250U2VsZWN0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRTZWxlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCMkMzREE1QjBEMDA2Q0Q2MDBFRjZGMjYgLyogR2x5cGhCdWZmZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdseXBoQnVmZmVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQzk2RDhDMEIzQUYyQjcwMDVFODBFQyAvKiBKU1NWR1Bh
dGhTZWdDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
U1ZHUGF0aFNlZ0N1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyRDNE
QTUzMEQwMDZDRDYwMEVGNkYzQSAvKiBPcGVuVHlwZUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBPcGVuVHlwZUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQjJEM0RBNTQwRDAwNkNENjAwRUY2RjNBIC8qIE9wZW5UeXBlQ0cuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wZW5UeXBlQ0cuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQjJEM0RBNTMwRDAwNkNENjAwRUY2RjI3IC8qIE9wZW5UeXBlTWF0aERh
dGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9wZW5UeXBlTWF0
aERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMkQzREE1MzBEMDA2Q0Q2
MDBFRjZGM0EgLyogT3BlblR5cGVDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gT3BlblR5cGVDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIy
RDNEQTU0MEQwMDZDRDYwMEVGNkYyNyAvKiBPcGVuVHlwZU1hdGhEYXRhLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBPcGVuVHlwZU1hdGhEYXRhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUIyRDNEQTU0MEQwMDZDRDYwMEVGNkYzQSAvKiBPcGVuVHlwZUNHLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcGVuVHlwZUNHLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRDNFQTU0MEQwMDZDRDYwMEVGNkYyOCAvKiBPcGVuVHlw
ZVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcGVuVHlwZVR5cGVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRTI3QzlEMEIwRjJCMDkwMEYxN0M3
QiAvKiBGbG9hdFBvaW50M0QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEZsb2F0UG9pbnQzRC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyRTI3
QzlFMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZsb2F0UG9pbnQzRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTUwNzIsNiArMTUwNzgsOSBAQAogCQkJCTA3MDU4NEZFMTdGOUYwNUUwMDVGMkJDQiAv
KiBDYXBhYmlsaXR5UmFuZ2UuY3BwICovLAogCQkJCTA3QzU5Qjc0MTdGN0QwOUQwMDBGQkNCQiAv
KiBDYXBhYmlsaXR5UmFuZ2UuaCAqLywKIAkJCQkwN0M1OUI3NTE3RjdEMDlEMDAwRkJDQkIgLyog
Q2FwYWJpbGl0eVJhbmdlLmlkbCAqLywKKwkJCQkyRTNDOEM2MTFCRkJBOERDMDAzMDk1NjYgLyog
Q2FwdHVyZURldmljZU1hbmFnZXIuaCAqLywKKwkJCQkyRTNDOEM2MzFCRkJCNzVEMDAzMDk1NjYg
LyogQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwICovLAorCQkJCTJFM0M4QzY2MUJGQkY4RTEwMDMw
OTU2NiAvKiBDYXB0dXJlRGV2aWNlLmggKi8sCiAJCQkJMDczNzk0RUQxOUVFMzY0MjAwRTVBMDQ1
IC8qIERPTVVSTE1lZGlhU3RyZWFtLmNwcCAqLywKIAkJCQkxNUZDQzlGRDFCNERGODU2MDBFNzIz
MjYgLyogRE9NVVJMTWVkaWFTdHJlYW0uaCAqLywKIAkJCQkwNzM3OTRFRTE5RUUzNjQyMDBFNUEw
NDUgLyogRE9NVVJMTWVkaWFTdHJlYW0uaWRsICovLApAQCAtMjY1MTIsNiArMjY1MjEsNyBAQAog
CQkJCUJDRUZFMUVCMERDQTVGNjQwMDczOTIxOSAvKiBKU1hTTFRQcm9jZXNzb3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg1MDMxQjQ0MEE0NEVGQzcwMEY5OTJFMCAvKiBLZXlib2FyZEV2ZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQUUwMEQ1OTE4MkRBQzhEMDAwODdERDcgLyogS2V5ZWRDb2Rp
bmcuaCBpbiBIZWFkZXJzICovLAorCQkJCTJFM0M4QzYyMUJGQkE5NzUwMDMwOTU2NiAvKiBDYXB0
dXJlRGV2aWNlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3QTYzQzUxQjc0MzE4RjAw
RTdEQ0RDIC8qIEtleWVkRGVjb2RlckNGLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTdBNjNDNjFC
NzQzMTkyMDBFN0RDREMgLyogS2V5ZWRFbmNvZGVyQ0YuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
MTNCM0Q3MTE0QjE2NjYwMDFDNDI5QiAvKiBLZXlFdmVudENvY29hLmggaW4gSGVhZGVycyAqLywK
QEAgLTI2NTk2LDYgKzI2NjA2LDcgQEAKIAkJCQlGQUJFNzJGOTEwNTlDMUVCMDBEOTk5REQgLyog
TWF0aE1MTWF0aEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ0QTI4QUFGMTJERkI4QkYw
MEFFOTIzQiAvKiBNYXRoTUxOYW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkE2NTRBNkMxMTA4
QUJFRDAwMjYxNUUwIC8qIE1hdGhNTFRleHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQky
RTNDOEM2ODFCRkJGOEUxMDAzMDk1NjYgLyogQ2FwdHVyZURldmljZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNDlENURDMkMwRjQyM0E3MzAwOEYyMEZEIC8qIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUU5MTFDNzBFRjg2RDQ3MDA5RDBDQUYgLyogTWF0
cml4VHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0JDOERBRDFBQUEz
MDIyMDBFMUM4MDMgLyogTWVkaWFBY2Nlc3NpYmlsaXR5U29mdExpbmsuaCBpbiBIZWFkZXJzICov
LApAQCAtMzAyNTQsNiArMzAyNjUsNyBAQAogCQkJCUU0QjY1QTVBMTMyRkFBRjkwMDcwRTdCRSAv
KiBMZWdhY3lUaWxlR3JpZC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUU0MjRBM0EwMTMzMERGMUUw
MENGNkRDOSAvKiBMZWdhY3lUaWxlR3JpZFRpbGUubW0gaW4gU291cmNlcyAqLywKIAkJCQlFNEI2
NUE1RTEzMkZBREI2MDA3MEU3QkUgLyogTGVnYWN5VGlsZUxheWVyLm1tIGluIFNvdXJjZXMgKi8s
CisJCQkJMkUzQzhDNjQxQkZCQjc1RDAwMzA5NTY2IC8qIENhcHR1cmVEZXZpY2VNYW5hZ2VyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUU0RTM5QUZEMTMzMEVGQzYwMDNBQjI3NCAvKiBMZWdhY3lU
aWxlTGF5ZXJQb29sLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE2NDVCNkExQjlGQTZDODAwRjc4
OUNFIC8qIExlZ2FjeVRyYW5zYWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNjQ1QjZD
MUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIuaAppbmRleCBjYTkxYzQzMGQ3NGQ0
YTU2NWRiZjYzMjhiMzYwZTM2OTcwZTBkZjU1Li4zNDlhOTg4YzgwMDY4NzkxZmQ5MDBkZmFlYWE4
NzI5YTM4M2E3N2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNiArMjgs
NyBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEFWRk9VTkRBVElPTikKIAor
I2luY2x1ZGUgIkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1U
cmFja1NvdXJjZXNSZXF1ZXN0Q2xpZW50LmgiCiAjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJj
ZS5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTQwLDM2ICs0MSwzNCBAQCBPQkpD
X0NMQVNTIFdlYkNvcmVBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyT2JzZXJ2ZXI7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgQ2FwdHVyZURldmljZTsKLQotY2xhc3MgQVZDYXB0dXJlRGV2
aWNlTWFuYWdlciB7CitjbGFzcyBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyIGZpbmFsIDogcHVibGlj
IENhcHR1cmVEZXZpY2VNYW5hZ2VyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgQVZDYXB0dXJlRGV2
aWNlTWFuYWdlciYgc2luZ2xldG9uKCk7Ci0gICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsK
KyAgICB2aXJ0dWFsIFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYgY2FwdHVyZURldmljZUxpc3QoKSBv
dmVycmlkZTsKIAotICAgIFRyYWNrU291cmNlSW5mb1ZlY3RvciBnZXRTb3VyY2VzSW5mbyhjb25z
dCBTdHJpbmcmKTsKLSAgICBib29sIHZlcmlmeUNvbnN0cmFpbnRzRm9yTWVkaWFUeXBlKEFWQ2Fw
dHVyZVNlc3Npb24gKiwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSwgTWVkaWFDb25zdHJhaW50
cyosIFN0cmluZyYpOwotICAgIFZlY3RvcjxSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4+IGJl
c3RTb3VyY2VzRm9yVHlwZUFuZENvbnN0cmFpbnRzKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUs
IFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4pOwotICAgIFJlZlB0cjxSZWFsdGltZU1lZGlh
U291cmNlPiBzb3VyY2VXaXRoVUlEKGNvbnN0IFN0cmluZyYsIFJlYWx0aW1lTWVkaWFTb3VyY2U6
OlR5cGUsIE1lZGlhQ29uc3RyYWludHMqKTsKKyAgICBzdGF0aWMgQVZDYXB0dXJlRGV2aWNlTWFu
YWdlciYgc2luZ2xldG9uKCk7CisgICAgc3RhdGljIENhcHR1cmVTZXNzaW9uIHNlc3Npb25Gcm9t
UGxhdGZvcm1TZXNzaW9uKEFWQ2FwdHVyZVNlc3Npb24qKTsKKyAgICBzdGF0aWMgU3RyaW5nIHBy
ZXNldFN0cmluZ0Zyb21DYXB0dXJlU2Vzc2lvblByZXNldChDYXB0dXJlU2Vzc2lvblByZXNldCk7
CiAKLSAgICBlbnVtIFZhbGlkQ29uc3RyYWludHMgeyBXaWR0aCA9IDAsIEhlaWdodCwgRnJhbWVS
YXRlLCBGYWNpbmdNb2RlLCBHYWluIH07Ci0gICAgc3RhdGljIGNvbnN0IFZlY3RvcjxBdG9taWNT
dHJpbmc+JiB2YWxpZENvbnN0cmFpbnROYW1lcygpOwotICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8
QXRvbWljU3RyaW5nPiYgdmFsaWRGYWNpbmdNb2RlcygpOworICAgIHZpcnR1YWwgUmVmUHRyPFJl
YWx0aW1lTWVkaWFTb3VyY2U+IHNvdXJjZVdpdGhVSUQoY29uc3QgU3RyaW5nJiBkZXZpY2VVSUQs
IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUsIE1lZGlhQ29uc3RyYWludHMqKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIFZlY3RvcjxSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4+IGJlc3RTb3Vy
Y2VzRm9yVHlwZUFuZENvbnN0cmFpbnRzKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUsIFBhc3NS
ZWZQdHI8TWVkaWFDb25zdHJhaW50cz4pIG92ZXJyaWRlOwogCi0gICAgc3RhdGljIGJvb2wgZGV2
aWNlU3VwcG9ydHNGYWNpbmdNb2RlKEFWQ2FwdHVyZURldmljZSosIFJlYWx0aW1lTWVkaWFTb3Vy
Y2VTdGF0ZXM6OlZpZGVvRmFjaW5nTW9kZSk7Ci0gICAgc3RhdGljIGJvb2wgaXNWYWxpZENvbnN0
cmFpbnQoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSwgY29uc3QgU3RyaW5nJik7Ci0gICAgc3Rh
dGljIFN0cmluZyBiZXN0U2Vzc2lvblByZXNldEZvclZpZGVvU2l6ZShBVkNhcHR1cmVTZXNzaW9u
KiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIFRyYWNrU291cmNlSW5mb1Zl
Y3RvciBnZXRTb3VyY2VzSW5mbyhjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IGJvb2wgdmVyaWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5cGUoUmVhbHRpbWVNZWRpYVNvdXJjZTo6
VHlwZSwgTWVkaWFDb25zdHJhaW50cyosIGNvbnN0IENhcHR1cmVTZXNzaW9uJiwgU3RyaW5nJikg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHZlcmlmeUNvbnN0cmFpbnRzRm9yTWVkaWFUeXBl
KFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUsIE1lZGlhQ29uc3RyYWludHMqLCBTdHJpbmcmKSBv
dmVycmlkZTsKIAotICAgIHZvaWQgcmVnaXN0ZXJGb3JEZXZpY2VOb3RpZmljYXRpb25zKCk7CiAg
ICAgdm9pZCBkZXZpY2VDb25uZWN0ZWQoKTsKICAgICB2b2lkIGRldmljZURpc2Nvbm5lY3RlZChB
VkNhcHR1cmVEZXZpY2UqKTsKIAogcHJvdGVjdGVkOgorICAgIHN0YXRpYyBib29sIGlzQXZhaWxh
YmxlKCk7CisKICAgICBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyKCk7Ci0gICAgfkFWQ2FwdHVyZURl
dmljZU1hbmFnZXIoKTsKKyAgICB2aXJ0dWFsIH5BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyKCkgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBSZWFsdGltZU1lZGlhU291cmNlKiBjcmVhdGVNZWRpYVNvdXJj
ZUZvckNhcHR1cmVEZXZpY2VXaXRoQ29uc3RyYWludHMoY29uc3QgQ2FwdHVyZURldmljZSYsIFJl
YWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUsIE1lZGlhQ29uc3RyYWludHMqKSBvdmVycmlkZTsKIAot
ICAgIENhcHR1cmVEZXZpY2UqIGJlc3REZXZpY2VGb3JGYWNpbmdNb2RlKFJlYWx0aW1lTWVkaWFT
b3VyY2VTdGF0ZXM6OlZpZGVvRmFjaW5nTW9kZSk7Ci0gICAgYm9vbCBzZXNzaW9uU3VwcG9ydHND
b25zdHJhaW50KEFWQ2FwdHVyZVNlc3Npb24qLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgIHZvaWQgcmVnaXN0
ZXJGb3JEZXZpY2VOb3RpZmljYXRpb25zKCk7CisgICAgdm9pZCByZWZyZXNoQ2FwdHVyZURldmlj
ZUxpc3QoKTsKKyAgICB2aXJ0dWFsIENhcHR1cmVTZXNzaW9uIGRlZmF1bHRDYXB0dXJlU2Vzc2lv
bigpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgUmV0YWluUHRyPFdlYkNvcmVBVkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyT2JzZXJ2ZXI+IG1fb2JqY09ic2VydmVyOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURl
dmljZU1hbmFnZXIubW0KaW5kZXggMzhjYTJjMWNlY2Q1M2EyOGQ2YjA0NGYyYzY2MjhlNTVhYmU3
ZjU4Ny4uNGJmZjM4NmM4NzcyZDY3ODJjZjcxZmYxYmUwOWY1MDZiZjBhZTAxNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmlj
ZU1hbmFnZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0FWQ2FwdHVyZURldmljZU1hbmFnZXIubW0KQEAgLTg5LDg2ICs4OSw2NCBAQCBAZW5kCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIHZvaWQgcmVmcmVzaENhcHR1cmVEZXZpY2VMaXN0
KCk7Ci0KLWNsYXNzIENhcHR1cmVEZXZpY2UgewotcHVibGljOgotICAgIENhcHR1cmVEZXZpY2Uo
KQotICAgICAgICA6bV9lbmFibGVkKGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICBTdHJpbmcg
bV9jYXB0dXJlRGV2aWNlSUQ7Ci0gICAgU3RyaW5nIG1fbG9jYWxpemVkTmFtZTsKLSAgICBTdHJp
bmcgbV9ncm91cElEOwotCi0gICAgU3RyaW5nIG1fYXVkaW9Tb3VyY2VJZDsKLSAgICBTdHJpbmcg
bV92aWRlb1NvdXJjZUlkOwotCi0gICAgYm9vbCBtX2VuYWJsZWQ7Ci19OwotCi1zdGF0aWMgVmVj
dG9yPENhcHR1cmVEZXZpY2U+JiBjYXB0dXJlRGV2aWNlTGlzdCgpCitWZWN0b3I8Q2FwdHVyZURl
dmljZT4mIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OmNhcHR1cmVEZXZpY2VMaXN0KCkKIHsKLSAg
ICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPENhcHR1cmVEZXZpY2U+LCBj
YXB0dXJlRGV2aWNlTGlzdCwgKCkpOwogICAgIHN0YXRpYyBib29sIGZpcnN0VGltZSA9IHRydWU7
Ci0KLSAgICBpZiAoZmlyc3RUaW1lICYmICFjYXB0dXJlRGV2aWNlTGlzdC5zaXplKCkpIHsKKyAg
ICBpZiAoZmlyc3RUaW1lICYmICFtX2RldmljZXMuc2l6ZSgpKSB7CiAgICAgICAgIGZpcnN0VGlt
ZSA9IGZhbHNlOwogICAgICAgICByZWZyZXNoQ2FwdHVyZURldmljZUxpc3QoKTsKLSAgICAgICAg
QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCkucmVnaXN0ZXJGb3JEZXZpY2VOb3Rp
ZmljYXRpb25zKCk7CisgICAgICAgIHJlZ2lzdGVyRm9yRGV2aWNlTm90aWZpY2F0aW9ucygpOwog
ICAgIH0KIAotICAgIHJldHVybiBjYXB0dXJlRGV2aWNlTGlzdDsKKyAgICByZXR1cm4gbV9kZXZp
Y2VzOwogfQogCi1zdGF0aWMgYm9vbCBjYXB0dXJlRGV2aWNlRnJvbURldmljZUlEKGNvbnN0IFN0
cmluZyYgY2FwdHVyZURldmljZUlELCBDYXB0dXJlRGV2aWNlJiBzb3VyY2UpCitpbmxpbmUgc3Rh
dGljIGJvb2wgc2hvdWxkQ29uc2lkZXJEZXZpY2VJbkRldmljZUxpc3QoQVZDYXB0dXJlRGV2aWNl
VHlwZSAqZGV2aWNlKQogewotICAgIFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYgZGV2aWNlcyA9IGNh
cHR1cmVEZXZpY2VMaXN0KCk7Ci0gICAgCi0gICAgc2l6ZV90IGNvdW50ID0gZGV2aWNlcy5zaXpl
KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIGlm
IChkZXZpY2VzW2ldLm1fY2FwdHVyZURldmljZUlEID09IGNhcHR1cmVEZXZpY2VJRCkgewotICAg
ICAgICAgICAgc291cmNlID0gZGV2aWNlc1tpXTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsKLX0KKyAgICBpZiAoIVtk
ZXZpY2UgaXNDb25uZWN0ZWRdKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLXN0YXRpYyB2b2lk
IHJlZnJlc2hDYXB0dXJlRGV2aWNlTGlzdCgpCi17Ci0gICAgVmVjdG9yPENhcHR1cmVEZXZpY2U+
JiBkZXZpY2VzID0gY2FwdHVyZURldmljZUxpc3QoKTsKLSAgICAKLSAgICBmb3IgKEFWQ2FwdHVy
ZURldmljZVR5cGUgKmRldmljZSBpbiBbZ2V0QVZDYXB0dXJlRGV2aWNlQ2xhc3MoKSBkZXZpY2Vz
XSkgewotICAgICAgICBDYXB0dXJlRGV2aWNlIHNvdXJjZTsKKyNpZiAhUExBVEZPUk0oSU9TKQor
ICAgIGlmIChbZGV2aWNlIGlzU3VzcGVuZGVkXSB8fCBbZGV2aWNlIGlzSW5Vc2VCeUFub3RoZXJB
cHBsaWNhdGlvbl0pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogCi0gICAgICAgIGlm
ICghW2RldmljZSBpc0Nvbm5lY3RlZF0pCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KIAotI2lmICFQTEFURk9STShJT1MpCi0gICAgICAgIGlmIChbZGV2aWNlIGlz
U3VzcGVuZGVkXSB8fCBbZGV2aWNlIGlzSW5Vc2VCeUFub3RoZXJBcHBsaWNhdGlvbl0pCit2b2lk
IEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnJlZnJlc2hDYXB0dXJlRGV2aWNlTGlzdCgpCit7Cisg
ICAgZm9yIChBVkNhcHR1cmVEZXZpY2VUeXBlICpwbGF0Zm9ybURldmljZSBpbiBbZ2V0QVZDYXB0
dXJlRGV2aWNlQ2xhc3MoKSBkZXZpY2VzXSkgeworICAgICAgICBpZiAoIXNob3VsZENvbnNpZGVy
RGV2aWNlSW5EZXZpY2VMaXN0KHBsYXRmb3JtRGV2aWNlKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwotI2VuZGlmCiAKLSAgICAgICAgaWYgKCFjYXB0dXJlRGV2aWNlRnJvbURldmljZUlEKGRldmlj
ZS51bmlxdWVJRCwgc291cmNlKSkgeworICAgICAgICBDYXB0dXJlRGV2aWNlIHNvdXJjZTsKKyAg
ICAgICAgaWYgKCFjYXB0dXJlRGV2aWNlRnJvbURldmljZUlEKHBsYXRmb3JtRGV2aWNlLnVuaXF1
ZUlELCBzb3VyY2UpKSB7CiAgICAgICAgICAgICAvLyBBbiBBVkNhcHR1cmVEZXZpY2UgaGFzIGEg
dW5pcXVlIElELCBidXQgd2UgY2FuJ3QgdXNlIGl0IGZvciB0aGUgc291cmNlIElEIGJlY2F1c2U6
CiAgICAgICAgICAgICAvLyAxLiBpZiBpdCBwcm92aWRlcyBib3RoIGF1ZGlvIGFuZCB2aWRlbyB3
ZSB3aWxsIG5lZWQgdG8gY3JlYXRlIHR3byBzb3VyY2VzIGZvciBpdAogICAgICAgICAgICAgLy8g
Mi4gdGhlIHVuaXF1ZSBJRCBwZXJzaXN0cyBvbiBvbmUgc3lzdGVtIGFjcm9zcyBkZXZpY2UgY29u
bmVjdGlvbnMsIGRpc2Nvbm5lY3Rpb25zLAogICAgICAgICAgICAgLy8gICAgYXBwbGljYXRpb24g
cmVzdGFydHMsIGFuZCByZWJvb3RzLCBzbyBpdCBjb3VsZCBiZSB1c2VkIHRvIGZpZ2VycHJpbnQg
YSB1c2VyLgotICAgICAgICAgICAgc291cmNlLm1fY2FwdHVyZURldmljZUlEID0gZGV2aWNlLnVu
aXF1ZUlEOworICAgICAgICAgICAgc291cmNlLm1fY2FwdHVyZURldmljZUlEID0gcGxhdGZvcm1E
ZXZpY2UudW5pcXVlSUQ7CiAgICAgICAgICAgICBzb3VyY2UubV9lbmFibGVkID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGlmIChbZGV2aWNlIGhhc01lZGlhVHlwZTpBVk1lZGlhVHlwZUF1ZGlvXSB8fCBb
ZGV2aWNlIGhhc01lZGlhVHlwZTpBVk1lZGlhVHlwZU11eGVkXSkKKyAgICAgICAgICAgIGlmIChb
cGxhdGZvcm1EZXZpY2UgaGFzTWVkaWFUeXBlOkFWTWVkaWFUeXBlQXVkaW9dIHx8IFtwbGF0Zm9y
bURldmljZSBoYXNNZWRpYVR5cGU6QVZNZWRpYVR5cGVNdXhlZF0pCiAgICAgICAgICAgICAgICAg
c291cmNlLm1fYXVkaW9Tb3VyY2VJZCA9IGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKIAot
ICAgICAgICAgICAgaWYgKFtkZXZpY2UgaGFzTWVkaWFUeXBlOkFWTWVkaWFUeXBlVmlkZW9dIHx8
IFtkZXZpY2UgaGFzTWVkaWFUeXBlOkFWTWVkaWFUeXBlTXV4ZWRdKQorICAgICAgICAgICAgaWYg
KFtwbGF0Zm9ybURldmljZSBoYXNNZWRpYVR5cGU6QVZNZWRpYVR5cGVWaWRlb10gfHwgW3BsYXRm
b3JtRGV2aWNlIGhhc01lZGlhVHlwZTpBVk1lZGlhVHlwZU11eGVkXSkKICAgICAgICAgICAgICAg
ICBzb3VyY2UubV92aWRlb1NvdXJjZUlkID0gY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOwog
CiAgICAgICAgICAgICBzb3VyY2UubV9ncm91cElEID0gY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmlu
ZygpOwotICAgICAgICAgICAgc291cmNlLm1fbG9jYWxpemVkTmFtZSA9IGRldmljZS5sb2NhbGl6
ZWROYW1lOwotCi0gICAgICAgICAgICBkZXZpY2VzLmFwcGVuZChzb3VyY2UpOworICAgICAgICAg
ICAgc291cmNlLm1fbG9jYWxpemVkTmFtZSA9IHBsYXRmb3JtRGV2aWNlLmxvY2FsaXplZE5hbWU7
CisgICAgICAgICAgICBpZiAoW3BsYXRmb3JtRGV2aWNlIGhhc01lZGlhVHlwZTpBVk1lZGlhVHlw
ZUF1ZGlvXSkKKyAgICAgICAgICAgICAgICBzb3VyY2UubV9tZWRpYVR5cGVzID0gKENhcHR1cmVE
ZXZpY2VNZWRpYVR5cGUpIChzb3VyY2UubV9tZWRpYVR5cGVzIHwgQ2FwdHVyZURldmljZU1lZGlh
VHlwZUF1ZGlvKTsKKyAgICAgICAgICAgIGlmIChbcGxhdGZvcm1EZXZpY2UgaGFzTWVkaWFUeXBl
OkFWTWVkaWFUeXBlTXV4ZWRdKQorICAgICAgICAgICAgICAgIHNvdXJjZS5tX21lZGlhVHlwZXMg
PSAoQ2FwdHVyZURldmljZU1lZGlhVHlwZSkgKHNvdXJjZS5tX21lZGlhVHlwZXMgfCBDYXB0dXJl
RGV2aWNlTWVkaWFUeXBlTXV4ZWQpOworICAgICAgICAgICAgaWYgKFtwbGF0Zm9ybURldmljZSBo
YXNNZWRpYVR5cGU6QVZNZWRpYVR5cGVWaWRlb10pCisgICAgICAgICAgICAgICAgc291cmNlLm1f
bWVkaWFUeXBlcyA9IChDYXB0dXJlRGV2aWNlTWVkaWFUeXBlKSAoc291cmNlLm1fbWVkaWFUeXBl
cyB8IENhcHR1cmVEZXZpY2VNZWRpYVR5cGVWaWRlbyk7CisgICAgICAgICAgICBpZiAoW3BsYXRm
b3JtRGV2aWNlIHBvc2l0aW9uXSA9PSBBVkNhcHR1cmVEZXZpY2VQb3NpdGlvbkZyb250KQorICAg
ICAgICAgICAgICAgIHNvdXJjZS5tX3Bvc2l0aW9uID0gQ2FwdHVyZURldmljZVBvc2l0aW9uOjpG
cm9udDsKKyAgICAgICAgICAgIGlmIChbcGxhdGZvcm1EZXZpY2UgcG9zaXRpb25dID09IEFWQ2Fw
dHVyZURldmljZVBvc2l0aW9uQmFjaykKKyAgICAgICAgICAgICAgICBzb3VyY2UubV9wb3NpdGlv
biA9IENhcHR1cmVEZXZpY2VQb3NpdGlvbjo6QmFjazsKKyAgICAgICAgICAgIG1fZGV2aWNlcy5h
cHBlbmQoc291cmNlKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE4NCwyNzggKzE2MiwxMTkg
QEAgQVZDYXB0dXJlRGV2aWNlTWFuYWdlciYgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xl
dG9uKCkKICAgICByZXR1cm4gbWFuYWdlcjsKIH0KIAotQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6
QVZDYXB0dXJlRGV2aWNlTWFuYWdlcigpCi0gICAgOiBtX29iamNPYnNlcnZlcihhZG9wdE5TKFtb
V2ViQ29yZUFWQ2FwdHVyZURldmljZU1hbmFnZXJPYnNlcnZlciBhbGxvY10gaW5pdFdpdGhDYWxs
YmFjazp0aGlzXSkpCi17Ci19Ci0KLUFWQ2FwdHVyZURldmljZU1hbmFnZXI6On5BVkNhcHR1cmVE
ZXZpY2VNYW5hZ2VyKCkKK0NhcHR1cmVTZXNzaW9uIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNl
c3Npb25Gcm9tUGxhdGZvcm1TZXNzaW9uKEFWQ2FwdHVyZVNlc3Npb25UeXBlKiBwbGF0Zm9ybVNl
c3Npb24pCiB7Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1v
dmVPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQoKV07Ci0gICAgW21fb2JqY09ic2VydmVyIGRp
c2Nvbm5lY3RdOworICAgIENhcHR1cmVTZXNzaW9uIHNlc3Npb247CisgICAgaWYgKFtwbGF0Zm9y
bVNlc3Npb24gY2FuU2V0U2Vzc2lvblByZXNldDpBVkNhcHR1cmVTZXNzaW9uUHJlc2V0TG93XSkK
KyAgICAgICAgc2Vzc2lvbi5tX3N1cHBvcnRlZFByZXNldHMgPSAoQ2FwdHVyZVNlc3Npb25QcmVz
ZXQpIChzZXNzaW9uLm1fc3VwcG9ydGVkUHJlc2V0cyB8IENhcHR1cmVTZXNzaW9uUHJlc2V0TG93
KTsKKyAgICBpZiAoW3BsYXRmb3JtU2Vzc2lvbiBjYW5TZXRTZXNzaW9uUHJlc2V0OkFWQ2FwdHVy
ZVNlc3Npb25QcmVzZXQzNTJ4Mjg4XSkKKyAgICAgICAgc2Vzc2lvbi5tX3N1cHBvcnRlZFByZXNl
dHMgPSAoQ2FwdHVyZVNlc3Npb25QcmVzZXQpIChzZXNzaW9uLm1fc3VwcG9ydGVkUHJlc2V0cyB8
IENhcHR1cmVTZXNzaW9uUHJlc2V0MzUyeDI4OCk7CisgICAgaWYgKFtwbGF0Zm9ybVNlc3Npb24g
Y2FuU2V0U2Vzc2lvblByZXNldDpBVkNhcHR1cmVTZXNzaW9uUHJlc2V0NjQweDQ4MF0pCisgICAg
ICAgIHNlc3Npb24ubV9zdXBwb3J0ZWRQcmVzZXRzID0gKENhcHR1cmVTZXNzaW9uUHJlc2V0KSAo
c2Vzc2lvbi5tX3N1cHBvcnRlZFByZXNldHMgfCBDYXB0dXJlU2Vzc2lvblByZXNldDY0MHg0ODAp
OworICAgIGlmIChbcGxhdGZvcm1TZXNzaW9uIGNhblNldFNlc3Npb25QcmVzZXQ6QVZDYXB0dXJl
U2Vzc2lvblByZXNldDEyODB4NzIwXSkKKyAgICAgICAgc2Vzc2lvbi5tX3N1cHBvcnRlZFByZXNl
dHMgPSAoQ2FwdHVyZVNlc3Npb25QcmVzZXQpIChzZXNzaW9uLm1fc3VwcG9ydGVkUHJlc2V0cyB8
IENhcHR1cmVTZXNzaW9uUHJlc2V0MTI4MHg3MjApOworICAgIHJldHVybiBzZXNzaW9uOwogfQog
Ci1TdHJpbmcgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6YmVzdFNlc3Npb25QcmVzZXRGb3JWaWRl
b1NpemUoQVZDYXB0dXJlU2Vzc2lvblR5cGUgKmNhcHR1cmVTZXNzaW9uLCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpCitTdHJpbmcgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6cHJlc2V0U3RyaW5nRnJv
bUNhcHR1cmVTZXNzaW9uUHJlc2V0KENhcHR1cmVTZXNzaW9uUHJlc2V0IHByZXNldCkKIHsKLSAg
ICBBU1NFUlQod2lkdGggPj0gMCk7Ci0gICAgQVNTRVJUKGhlaWdodCA+PSAwKTsKLSAgICAKLSAg
ICBpZiAod2lkdGggPiAxMjgwIHx8IGhlaWdodCA+IDcyMCkKLSAgICAgICAgLy8gRklYTUU6IHRo
aXMgcmVzdHJpY3Rpb24gY291bGQgYmUgYWRqdXN0ZWQgd2l0aCB0aGUgdmlkZW9NYXhTY2FsZUFu
ZENyb3BGYWN0b3IgcHJvcGVydHkuCisgICAgc3dpdGNoIChwcmVzZXQpIHsKKyAgICBjYXNlIENh
cHR1cmVTZXNzaW9uUHJlc2V0Tm9uZToKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0g
ICAgCi0gICAgaWYgKHdpZHRoID4gNjQwIHx8IGhlaWdodCA+IDQ4MCkgewotICAgICAgICBpZiAo
IVtjYXB0dXJlU2Vzc2lvbiBjYW5TZXRTZXNzaW9uUHJlc2V0OkFWQ2FwdHVyZVNlc3Npb25QcmVz
ZXQxMjgweDcyMF0pCi0gICAgICAgICAgICBlbXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm4g
QVZDYXB0dXJlU2Vzc2lvblByZXNldDEyODB4NzIwOwotICAgIH0KLSAgICAKLSAgICBpZiAod2lk
dGggPiAzNTIgfHwgaGVpZ2h0ID4gMjg4KSB7Ci0gICAgICAgIGlmICghW2NhcHR1cmVTZXNzaW9u
IGNhblNldFNlc3Npb25QcmVzZXQ6QVZDYXB0dXJlU2Vzc2lvblByZXNldDY0MHg0ODBdKQotICAg
ICAgICAgICAgZW1wdHlTdHJpbmcoKTsKKyAgICBjYXNlIENhcHR1cmVTZXNzaW9uUHJlc2V0TG93
OgorICAgICAgICByZXR1cm4gQVZDYXB0dXJlU2Vzc2lvblByZXNldExvdzsKKyAgICBjYXNlIENh
cHR1cmVTZXNzaW9uUHJlc2V0MzUyeDI4ODoKKyAgICAgICAgcmV0dXJuIEFWQ2FwdHVyZVNlc3Np
b25QcmVzZXQzNTJ4Mjg4OworICAgIGNhc2UgQ2FwdHVyZVNlc3Npb25QcmVzZXQ2NDB4NDgwOgog
ICAgICAgICByZXR1cm4gQVZDYXB0dXJlU2Vzc2lvblByZXNldDY0MHg0ODA7CisgICAgY2FzZSBD
YXB0dXJlU2Vzc2lvblByZXNldDEyODB4NzIwOgorICAgICAgICByZXR1cm4gQVZDYXB0dXJlU2Vz
c2lvblByZXNldDEyODB4NzIwOwogICAgIH0KLSAgICAKLSAgICBpZiAoW2NhcHR1cmVTZXNzaW9u
IGNhblNldFNlc3Npb25QcmVzZXQ6QVZDYXB0dXJlU2Vzc2lvblByZXNldDM1MngyODhdKQotICAg
ICAgICByZXR1cm4gQVZDYXB0dXJlU2Vzc2lvblByZXNldDM1MngyODg7Ci0gICAgCi0gICAgaWYg
KFtjYXB0dXJlU2Vzc2lvbiBjYW5TZXRTZXNzaW9uUHJlc2V0OkFWQ2FwdHVyZVNlc3Npb25QcmVz
ZXRMb3ddKQotICAgICAgICByZXR1cm4gQVZDYXB0dXJlU2Vzc2lvblByZXNldExvdzsKLSAgICAK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0K
IAotYm9vbCBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpkZXZpY2VTdXBwb3J0c0ZhY2luZ01vZGUo
QVZDYXB0dXJlRGV2aWNlVHlwZSAqZGV2aWNlLCBSZWFsdGltZU1lZGlhU291cmNlU3RhdGVzOjpW
aWRlb0ZhY2luZ01vZGUgZmFjaW5nTW9kZSkKK0FWQ2FwdHVyZURldmljZU1hbmFnZXI6OkFWQ2Fw
dHVyZURldmljZU1hbmFnZXIoKQorICAgIDogbV9vYmpjT2JzZXJ2ZXIoYWRvcHROUyhbW1dlYkNv
cmVBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyT2JzZXJ2ZXIgYWxsb2NdIGluaXRXaXRoQ2FsbGJhY2s6
IHRoaXNdKSkKIHsKLSAgICBpZiAoIVtkZXZpY2UgaGFzTWVkaWFUeXBlOkFWTWVkaWFUeXBlVmlk
ZW9dKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgc3dpdGNoIChmYWNpbmdNb2Rl
KSB7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlU3RhdGVzOjpVc2VyOgotICAgICAgICBp
ZiAoW2RldmljZSBwb3NpdGlvbl0gPT0gQVZDYXB0dXJlRGV2aWNlUG9zaXRpb25Gcm9udCkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFJlYWx0aW1l
TWVkaWFTb3VyY2VTdGF0ZXM6OkVudmlyb25tZW50OgotICAgICAgICBpZiAoW2RldmljZSBwb3Np
dGlvbl0gPT0gQVZDYXB0dXJlRGV2aWNlUG9zaXRpb25CYWNrKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRl
czo6TGVmdDoKLSAgICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OlJpZ2h0OgotICAg
IGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6VW5rbm93bjoKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUNhcHR1cmVEZXZp
Y2UqIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OmJlc3REZXZpY2VGb3JGYWNpbmdNb2RlKFJlYWx0
aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OlZpZGVvRmFjaW5nTW9kZSBmYWNpbmdNb2RlKQorQVZDYXB0
dXJlRGV2aWNlTWFuYWdlcjo6fkFWQ2FwdHVyZURldmljZU1hbmFnZXIoKQogewotICAgIFZlY3Rv
cjxDYXB0dXJlRGV2aWNlPiYgZGV2aWNlcyA9IGNhcHR1cmVEZXZpY2VMaXN0KCk7Ci0gICAgCi0g
ICAgc2l6ZV90IGNvdW50ID0gZGV2aWNlcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIEFWQ2FwdHVyZURldmljZVR5cGUgKmRldmljZSA9
IFtnZXRBVkNhcHR1cmVEZXZpY2VDbGFzcygpIGRldmljZVdpdGhVbmlxdWVJRDpkZXZpY2VzW2ld
Lm1fY2FwdHVyZURldmljZUlEXTsKLSAgICAgICAgQVNTRVJUKGRldmljZSk7Ci0gICAgICAgIAot
ICAgICAgICBpZiAoZGV2aWNlICYmIGRldmljZVN1cHBvcnRzRmFjaW5nTW9kZShkZXZpY2UsIGZh
Y2luZ01vZGUpKQotICAgICAgICAgICAgcmV0dXJuICZkZXZpY2VzW2ldOwotICAgIH0KLSAgICAK
LSAgICByZXR1cm4gMDsKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJd
IHJlbW92ZU9ic2VydmVyOm1fb2JqY09ic2VydmVyLmdldCgpXTsKKyAgICBbbV9vYmpjT2JzZXJ2
ZXIgZGlzY29ubmVjdF07CiB9CiAKLWJvb2wgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2Vzc2lv
blN1cHBvcnRzQ29uc3RyYWludChBVkNhcHR1cmVTZXNzaW9uVHlwZSAqc2Vzc2lvbiwgUmVhbHRp
bWVNZWRpYVNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCitWZWN0b3I8UmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+PiBBVkNhcHR1cmVE
ZXZpY2VNYW5hZ2VyOjpiZXN0U291cmNlc0ZvclR5cGVBbmRDb25zdHJhaW50cyhSZWFsdGltZU1l
ZGlhU291cmNlOjpUeXBlIHR5cGUsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gY29uc3Ry
YWludHMpCiB7Ci0gICAgc2l6ZV90IGNvbnN0cmFpbnQgPSB2YWxpZENvbnN0cmFpbnROYW1lcygp
LmZpbmQobmFtZSk7Ci0gICAgaWYgKGNvbnN0cmFpbnQgPT0gbm90Rm91bmQpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIAotICAgIHN3aXRjaCAoY29uc3RyYWludCkgewotICAgIGNhc2UgV2lk
dGg6Ci0gICAgICAgIGlmICh0eXBlID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlvKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiAhYmVzdFNlc3Npb25QcmVz
ZXRGb3JWaWRlb1NpemUoc2Vzc2lvbiwgdmFsdWUudG9JbnQoKSwgMCkuaXNFbXB0eSgpOwotICAg
IGNhc2UgSGVpZ2h0OgotICAgICAgICBpZiAodHlwZSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpB
dWRpbykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXR1cm4gIWJlc3RT
ZXNzaW9uUHJlc2V0Rm9yVmlkZW9TaXplKHNlc3Npb24sIDAsIHZhbHVlLnRvSW50KCkpLmlzRW1w
dHkoKTsKLSAgICBjYXNlIEZyYW1lUmF0ZTogewotICAgICAgICBpZiAodHlwZSA9PSBSZWFsdGlt
ZU1lZGlhU291cmNlOjpBdWRpbykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
Ci0gICAgICAgIC8vIEl0IHdvdWxkIG1ha2Ugc2Vuc2UgdG8gdXNlIFtBVkNhcHR1cmVDb25uZWN0
aW9uIHZpZGVvTWluRnJhbWVEdXJhdGlvbl0gYW5kCi0gICAgICAgIC8vIFtBVkNhcHR1cmVDb25u
ZWN0aW9uIHZpZGVvTWF4RnJhbWVEdXJhdGlvbl0sIGJ1dCB0aGV5IG9ubHkgd29yayB3aXRoIGEg
ImxpdmUiIEFWQ2FwdHVyZUNvbm5lY3Rpb24uCi0gICAgICAgIGZsb2F0IHJhdGUgPSB2YWx1ZS50
b0Zsb2F0KCk7Ci0gICAgICAgIHJldHVybiByYXRlID4gMCAmJiByYXRlIDw9IDYwOwotICAgIH0K
LSAgICBjYXNlIEdhaW46IHsKLSAgICAgICAgaWYgKHR5cGUgIT0gUmVhbHRpbWVNZWRpYVNvdXJj
ZTo6QXVkaW8pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBm
bG9hdCBsZXZlbCA9IHZhbHVlLnRvRmxvYXQoKTsKLSAgICAgICAgcmV0dXJuIGxldmVsID4gMCAm
JiBsZXZlbCA8PSAxOwotICAgIH0KLSAgICBjYXNlIEZhY2luZ01vZGU6IHsKLSAgICAgICAgaWYg
KHR5cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW8pCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgc2l6ZV90IGZhY2luZ01vZGUgPSAgdmFsaWRGYWNpbmdNb2Rlcygp
LmZpbmQodmFsdWUpOwotICAgICAgICBpZiAoZmFjaW5nTW9kZSAhPSBub3RGb3VuZCkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIGJlc3REZXZpY2VGb3JGYWNpbmdN
b2RlKHN0YXRpY19jYXN0PFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OlZpZGVvRmFjaW5nTW9k
ZT4oZmFjaW5nTW9kZSkpOwotICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmICghaXNBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxSZWZQdHI8UmVh
bHRpbWVNZWRpYVNvdXJjZT4+KCk7CisKKyAgICByZXR1cm4gQ2FwdHVyZURldmljZU1hbmFnZXI6
OmJlc3RTb3VyY2VzRm9yVHlwZUFuZENvbnN0cmFpbnRzKHR5cGUsIGNvbnN0cmFpbnRzKTsKIH0K
IAotYm9vbCBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjppc1ZhbGlkQ29uc3RyYWludChSZWFsdGlt
ZU1lZGlhU291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKK1JlZlB0cjxSZWFs
dGltZU1lZGlhU291cmNlPiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzb3VyY2VXaXRoVUlEKGNv
bnN0IFN0cmluZyYgZGV2aWNlVUlELCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUsIE1l
ZGlhQ29uc3RyYWludHMqIGNvbnN0cmFpbnRzKQogewotICAgIHNpemVfdCBjb25zdHJhaW50ID0g
dmFsaWRDb25zdHJhaW50TmFtZXMoKS5maW5kKG5hbWUpOwotICAgIGlmIChjb25zdHJhaW50ID09
IG5vdEZvdW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoY29uc3RyYWludCA9
PSBHYWluKQotICAgICAgICByZXR1cm4gdHlwZSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpBdWRp
bzsKKyAgICBpZiAoIWlzQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIENhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzb3VyY2VX
aXRoVUlEKGRldmljZVVJRCwgdHlwZSwgY29uc3RyYWludHMpOwogfQogCi1WZWN0b3I8UmVmUHRy
PFRyYWNrU291cmNlSW5mbz4+IEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OmdldFNvdXJjZXNJbmZv
KGNvbnN0IFN0cmluZyYgcmVxdWVzdE9yaWdpbikKK1RyYWNrU291cmNlSW5mb1ZlY3RvciBBVkNh
cHR1cmVEZXZpY2VNYW5hZ2VyOjpnZXRTb3VyY2VzSW5mbyhjb25zdCBTdHJpbmcmIHJlcXVlc3RP
cmlnaW4pCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHJlcXVlc3RPcmlnaW4pOwotICAgIFZlY3RvcjxS
ZWZQdHI8VHJhY2tTb3VyY2VJbmZvPj4gc291cmNlc0luZm87Ci0KICAgICBpZiAoIWlzQXZhaWxh
YmxlKCkpCi0gICAgICAgIHJldHVybiBzb3VyY2VzSW5mbzsKLQotICAgIFZlY3RvcjxDYXB0dXJl
RGV2aWNlPiYgZGV2aWNlcyA9IGNhcHR1cmVEZXZpY2VMaXN0KCk7Ci0gICAgZm9yIChhdXRvIGNh
cHR1cmVEZXZpY2UgOiBkZXZpY2VzKSB7Ci0KLSAgICAgICAgaWYgKCFjYXB0dXJlRGV2aWNlLm1f
ZW5hYmxlZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmICghY2FwdHVyZURl
dmljZS5tX3ZpZGVvU291cmNlSWQuaXNFbXB0eSgpKQotICAgICAgICAgICAgc291cmNlc0luZm8u
YXBwZW5kKFRyYWNrU291cmNlSW5mbzo6Y3JlYXRlKGNhcHR1cmVEZXZpY2UubV92aWRlb1NvdXJj
ZUlkLCBUcmFja1NvdXJjZUluZm86OlZpZGVvLCBjYXB0dXJlRGV2aWNlLm1fbG9jYWxpemVkTmFt
ZSwgY2FwdHVyZURldmljZS5tX2dyb3VwSUQpKTsKLSAgICAgICAgaWYgKCFjYXB0dXJlRGV2aWNl
Lm1fYXVkaW9Tb3VyY2VJZC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBzb3VyY2VzSW5mby5hcHBl
bmQoVHJhY2tTb3VyY2VJbmZvOjpjcmVhdGUoY2FwdHVyZURldmljZS5tX2F1ZGlvU291cmNlSWQs
IFRyYWNrU291cmNlSW5mbzo6QXVkaW8sIGNhcHR1cmVEZXZpY2UubV9sb2NhbGl6ZWROYW1lLCBj
YXB0dXJlRGV2aWNlLm1fZ3JvdXBJRCkpOwotICAgIH0KLQotICAgIExPRyhNZWRpYSwgIkFWQ2Fw
dHVyZURldmljZU1hbmFnZXI6OmdldFNvdXJjZXNJbmZvKCVwKSwgZm91bmQgJWQgYWN0aXZlIGRl
dmljZXMiLCB0aGlzLCBzb3VyY2VzSW5mby5zaXplKCkpOwotCi0gICAgcmV0dXJuIHNvdXJjZXNJ
bmZvOworICAgICAgICByZXR1cm4gVHJhY2tTb3VyY2VJbmZvVmVjdG9yKCk7CisgICAgCisgICAg
cmV0dXJuIENhcHR1cmVEZXZpY2VNYW5hZ2VyOjpnZXRTb3VyY2VzSW5mbyhyZXF1ZXN0T3JpZ2lu
KTsKIH0KIAotYm9vbCBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjp2ZXJpZnlDb25zdHJhaW50c0Zv
ck1lZGlhVHlwZShBVkNhcHR1cmVTZXNzaW9uVHlwZSAqc2Vzc2lvbiwgUmVhbHRpbWVNZWRpYVNv
dXJjZTo6VHlwZSB0eXBlLCBNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cywgU3RyaW5nJiBp
bnZhbGlkQ29uc3RyYWludCkKK2Jvb2wgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6dmVyaWZ5Q29u
c3RyYWludHNGb3JNZWRpYVR5cGUoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSB0eXBlLCBNZWRp
YUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cywgY29uc3QgQ2FwdHVyZVNlc3Npb24mIHNlc3Npb24s
IFN0cmluZyYgaW52YWxpZENvbnN0cmFpbnQpCiB7CiAgICAgaWYgKCFpc0F2YWlsYWJsZSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIWNvbnN0cmFpbnRzKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIFZlY3RvcjxNZWRpYUNvbnN0cmFpbnQ+IG1hbmRhdG9yeUNvbnN0
cmFpbnRzOwotICAgIGNvbnN0cmFpbnRzLT5nZXRNYW5kYXRvcnlDb25zdHJhaW50cyhtYW5kYXRv
cnlDb25zdHJhaW50cyk7Ci0gICAgaWYgKG1hbmRhdG9yeUNvbnN0cmFpbnRzLnNpemUoKSkgewot
Ci0gICAgICAgIFJldGFpblB0cjxBVkNhcHR1cmVTZXNzaW9uVHlwZT4gY2FwdHVyZVNlc3Npb24g
PSBzZXNzaW9uID8gc2Vzc2lvbiA6IGFkb3B0TlMoW2FsbG9jQVZDYXB0dXJlU2Vzc2lvbkluc3Rh
bmNlKCkgaW5pdF0pOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hbmRhdG9yeUNv
bnN0cmFpbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBNZWRpYUNvbnN0cmFp
bnQmIGNvbnN0cmFpbnQgPSBtYW5kYXRvcnlDb25zdHJhaW50c1tpXTsKLSAgICAgICAgICAgIGlm
ICghc2Vzc2lvblN1cHBvcnRzQ29uc3RyYWludChjYXB0dXJlU2Vzc2lvbi5nZXQoKSwgdHlwZSwg
Y29uc3RyYWludC5tX25hbWUsIGNvbnN0cmFpbnQubV92YWx1ZSkpIHsKLSAgICAgICAgICAgICAg
ICBpbnZhbGlkQ29uc3RyYWludCA9IGNvbnN0cmFpbnQubV9uYW1lOwotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiBDYXB0dXJlRGV2aWNlTWFuYWdlcjo6dmVyaWZ5Q29uc3Ry
YWludHNGb3JNZWRpYVR5cGUodHlwZSwgY29uc3RyYWludHMsIHNlc3Npb24sIGludmFsaWRDb25z
dHJhaW50KTsKIH0KIAotVmVjdG9yPFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlPj4gQVZDYXB0
dXJlRGV2aWNlTWFuYWdlcjo6YmVzdFNvdXJjZXNGb3JUeXBlQW5kQ29uc3RyYWludHMoUmVhbHRp
bWVNZWRpYVNvdXJjZTo6VHlwZSB0eXBlLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IGNv
bnN0cmFpbnRzKQorYm9vbCBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjp2ZXJpZnlDb25zdHJhaW50
c0Zvck1lZGlhVHlwZShSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUsIE1lZGlhQ29uc3Ry
YWludHMqIGNvbnN0cmFpbnRzLCBTdHJpbmcmIGludmFsaWRDb25zdHJhaW50KQogewotICAgIFZl
Y3RvcjxSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4+IGJlc3RTb3VyY2VzTGlzdDsKLSAgICAK
ICAgICBpZiAoIWlzQXZhaWxhYmxlKCkpCi0gICAgICAgIHJldHVybiBiZXN0U291cmNlc0xpc3Q7
CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBzdHJ1Y3QgewotICAgICAgICBib29s
IG9wZXJhdG9yKCkoUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+IGEsIFJlZlB0cjxSZWFsdGlt
ZU1lZGlhU291cmNlPiBiKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYS0+Zml0bmVz
c1Njb3JlKCkgPCBiLT5maXRuZXNzU2NvcmUoKTsKLSAgICAgICAgfQotICAgIH0gc29ydEJhc2Vk
T2ZmRml0bmVzc1Njb3JlOwotCi0gICAgVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBkZXZpY2VzID0g
Y2FwdHVyZURldmljZUxpc3QoKTsKLQotICAgIGZvciAoYXV0byYgY2FwdHVyZURldmljZSA6IGRl
dmljZXMpIHsKLSAgICAgICAgaWYgKCFjYXB0dXJlRGV2aWNlLm1fZW5hYmxlZCkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmICh0eXBlID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6
OkF1ZGlvICYmICFjYXB0dXJlRGV2aWNlLm1fYXVkaW9Tb3VyY2VJZC5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgICAgIFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlPiBjYXB0dXJlU291cmNlID0gQVZD
YXB0dXJlRGV2aWNlTWFuYWdlcjo6c291cmNlV2l0aFVJRChjYXB0dXJlRGV2aWNlLm1fY2FwdHVy
ZURldmljZUlELCBSZWFsdGltZU1lZGlhU291cmNlOjpBdWRpbywgY29uc3RyYWludHMuZ2V0KCkp
OwotICAgICAgICAgICAgaWYgKCFjYXB0dXJlU291cmNlKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgICAgICBiZXN0U291cmNlc0xpc3QuYXBwZW5kKGNhcHR1cmVTb3VyY2Uu
bGVha1JlZigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0eXBlID09IFJlYWx0aW1lTWVk
aWFTb3VyY2U6OlZpZGVvICYmICFjYXB0dXJlRGV2aWNlLm1fdmlkZW9Tb3VyY2VJZC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlPiBjYXB0dXJlU291
cmNlID0gQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c291cmNlV2l0aFVJRChjYXB0dXJlRGV2aWNl
Lm1fY2FwdHVyZURldmljZUlELCBSZWFsdGltZU1lZGlhU291cmNlOjpWaWRlbywgY29uc3RyYWlu
dHMuZ2V0KCkpOwotICAgICAgICAgICAgaWYgKCFjYXB0dXJlU291cmNlKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBiZXN0U291cmNlc0xpc3QuYXBwZW5kKGNhcHR1
cmVTb3VyY2UubGVha1JlZigpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBzdGQ6OnNvcnQoYmVz
dFNvdXJjZXNMaXN0LmJlZ2luKCksIGJlc3RTb3VyY2VzTGlzdC5lbmQoKSwgc29ydEJhc2VkT2Zm
Rml0bmVzc1Njb3JlKTsKLSAgICByZXR1cm4gYmVzdFNvdXJjZXNMaXN0OworICAgIHJldHVybiBD
YXB0dXJlRGV2aWNlTWFuYWdlcjo6dmVyaWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5cGUodHlwZSwg
Y29uc3RyYWludHMsIGludmFsaWRDb25zdHJhaW50KTsKIH0KIAotUmVmUHRyPFJlYWx0aW1lTWVk
aWFTb3VyY2U+IEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNvdXJjZVdpdGhVSUQoY29uc3QgU3Ry
aW5nJiBkZXZpY2VVSUQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlwZSwgTWVkaWFDb25z
dHJhaW50cyogY29uc3RyYWludHMpCitDYXB0dXJlU2Vzc2lvbiBBVkNhcHR1cmVEZXZpY2VNYW5h
Z2VyOjpkZWZhdWx0Q2FwdHVyZVNlc3Npb24oKSBjb25zdAogewotICAgIGlmICghaXNBdmFpbGFi
bGUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBWZWN0b3I8Q2FwdHVyZURldmljZT4mIGRl
dmljZXMgPSBjYXB0dXJlRGV2aWNlTGlzdCgpOwotICAgIGZvciAoYXV0byYgY2FwdHVyZURldmlj
ZSA6IGRldmljZXMpIHsKLSAgICAgICAgaWYgKGNhcHR1cmVEZXZpY2UubV9jYXB0dXJlRGV2aWNl
SUQgIT0gZGV2aWNlVUlEIHx8ICFjYXB0dXJlRGV2aWNlLm1fZW5hYmxlZCkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIGlmICh0eXBlID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1
ZGlvICYmIGNhcHR1cmVEZXZpY2UubV9hdWRpb1NvdXJjZUlkLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAodHlwZSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpW
aWRlbyAmJiBjYXB0dXJlRGV2aWNlLm1fdmlkZW9Tb3VyY2VJZC5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICBBVkNhcHR1cmVEZXZpY2VUeXBlICpkZXZpY2UgPSBb
Z2V0QVZDYXB0dXJlRGV2aWNlQ2xhc3MoKSBkZXZpY2VXaXRoVW5pcXVlSUQ6Y2FwdHVyZURldmlj
ZS5tX2NhcHR1cmVEZXZpY2VJRF07Ci0gICAgICAgIEFTU0VSVChkZXZpY2UpOwotCi0gICAgICAg
IFJlZlB0cjxBVk1lZGlhQ2FwdHVyZVNvdXJjZT4gY2FwdHVyZVNvdXJjZTsKLSAgICAgICAgaWYg
KHR5cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW8pCi0gICAgICAgICAgICBjYXB0dXJl
U291cmNlID0gQVZBdWRpb0NhcHR1cmVTb3VyY2U6OmNyZWF0ZShkZXZpY2UsIGNhcHR1cmVEZXZp
Y2UubV9hdWRpb1NvdXJjZUlkLCBjb25zdHJhaW50cyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGNhcHR1cmVTb3VyY2UgPSBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKGRldmljZSwg
Y2FwdHVyZURldmljZS5tX3ZpZGVvU291cmNlSWQsIGNvbnN0cmFpbnRzKTsKLQotICAgICAgICBp
ZiAoY29uc3RyYWludHMpIHsKLSAgICAgICAgICAgIFN0cmluZyBpbnZhbGlkQ29uc3RyYWludHM7
Ci0gICAgICAgICAgICBBVkNhcHR1cmVTZXNzaW9uVHlwZSAqc2Vzc2lvbiA9IG5pbDsKLQotICAg
ICAgICAgICAgaWYgKHR5cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VmlkZW8pCi0gICAgICAg
ICAgICAgICAgc2Vzc2lvbiA9IGNhcHR1cmVTb3VyY2UtPnNlc3Npb24oKTsKLSAgICAgICAgICAg
IGVsc2UgaWYgKHR5cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW8pCi0gICAgICAgICAg
ICAgICAgc2Vzc2lvbiA9IGNhcHR1cmVTb3VyY2UtPnNlc3Npb24oKTsKLSAgICAgICAgICAgIEFW
Q2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmdsZXRvbigpLnZlcmlmeUNvbnN0cmFpbnRzRm9yTWVk
aWFUeXBlKHNlc3Npb24sIHR5cGUsIGNvbnN0cmFpbnRzLCBpbnZhbGlkQ29uc3RyYWludHMpOwor
ICAgIC8vIEZJWE1FOiBJIGRvbid0IGtub3cgaWYgaXQncyBzYWZlIHRvIHVzZSBhIHN0YXRpYyB2
YXIgaGVyZSwgc2luY2UgdGhlIHN0YXRlIG9mIGEgbmV3bHkKKyAgICAvLyBpbml0aWFsaXplZCBB
VkNhcHR1cmVTZXNzaW9uIG1heSBiZSBkaWZmZXJlbnQuIElmIG5vdCwgdGhpcyBzaG91bGQgYmUg
c3RhdGljIGFuZCB1c2UgYQorICAgIC8vIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDYXB0dXJlU2Vz
c2lvbj4uCisgICAgcmV0dXJuIHNlc3Npb25Gcm9tUGxhdGZvcm1TZXNzaW9uKFthbGxvY0FWQ2Fw
dHVyZVNlc3Npb25JbnN0YW5jZSgpIGluaXRdKTsKK30KIAotICAgICAgICAgICAgaWYgKCFpbnZh
bGlkQ29uc3RyYWludHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gY2FwdHVyZVNvdXJjZS5sZWFrUmVmKCk7
CitSZWFsdGltZU1lZGlhU291cmNlKiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpjcmVhdGVNZWRp
YVNvdXJjZUZvckNhcHR1cmVEZXZpY2VXaXRoQ29uc3RyYWludHMoY29uc3QgQ2FwdHVyZURldmlj
ZSYgY2FwdHVyZURldmljZSwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSB0eXBlLCBNZWRpYUNv
bnN0cmFpbnRzKiBjb25zdHJhaW50cykKK3sKKyAgICBBVkNhcHR1cmVEZXZpY2VUeXBlICpkZXZp
Y2UgPSBbZ2V0QVZDYXB0dXJlRGV2aWNlQ2xhc3MoKSBkZXZpY2VXaXRoVW5pcXVlSUQ6Y2FwdHVy
ZURldmljZS5tX2NhcHR1cmVEZXZpY2VJRF07CisgICAgQVNTRVJUKGRldmljZSk7CisgICAgUmVm
UHRyPEFWTWVkaWFDYXB0dXJlU291cmNlPiBjYXB0dXJlU291cmNlOworICAgIGlmICh0eXBlID09
IFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlvKQorICAgICAgICBjYXB0dXJlU291cmNlID0gQVZB
dWRpb0NhcHR1cmVTb3VyY2U6OmNyZWF0ZShkZXZpY2UsIGNhcHR1cmVEZXZpY2UubV9hdWRpb1Nv
dXJjZUlkLCBjb25zdHJhaW50cyk7CisgICAgZWxzZQorICAgICAgICBjYXB0dXJlU291cmNlID0g
QVZWaWRlb0NhcHR1cmVTb3VyY2U6OmNyZWF0ZShkZXZpY2UsIGNhcHR1cmVEZXZpY2UubV92aWRl
b1NvdXJjZUlkLCBjb25zdHJhaW50cyk7CisKKyAgICBpZiAoY29uc3RyYWludHMpIHsKKyAgICAg
ICAgU3RyaW5nIGludmFsaWRDb25zdHJhaW50czsKKyAgICAgICAgLy8gRklYTUU6IFRvIHByZXNl
cnZlIGJlaGF2aW9yLCBlbnN1cmUgdGhhdCBhIG5ld2x5IGluaXRpYWxpemVkIENhcHR1cmVTZXNz
aW9uCisgICAgICAgIENhcHR1cmVTZXNzaW9uIGNhcHR1cmVTZXNzaW9uID0gZGVmYXVsdENhcHR1
cmVTZXNzaW9uKCk7CisgICAgICAgIGlmICh0eXBlICE9IFJlYWx0aW1lTWVkaWFTb3VyY2U6Ok5v
bmUpCisgICAgICAgICAgICBjYXB0dXJlU2Vzc2lvbiA9IHNlc3Npb25Gcm9tUGxhdGZvcm1TZXNz
aW9uKGNhcHR1cmVTb3VyY2UtPnNlc3Npb24oKSk7CisKKyAgICAgICAgdmVyaWZ5Q29uc3RyYWlu
dHNGb3JNZWRpYVR5cGUodHlwZSwgY29uc3RyYWludHMsIGNhcHR1cmVTZXNzaW9uLCBpbnZhbGlk
Q29uc3RyYWludHMpOworICAgICAgICBpZiAoIWludmFsaWRDb25zdHJhaW50cy5pc0VtcHR5KCkp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG51
bGxwdHI7Ci0KKyAgICByZXR1cm4gY2FwdHVyZVNvdXJjZS5sZWFrUmVmKCk7CiB9CiAKIHZvaWQg
QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6cmVnaXN0ZXJGb3JEZXZpY2VOb3RpZmljYXRpb25zKCkK
QEAgLTQ4Niw0MCArMzA1LDYgQEAgdm9pZCBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpkZXZpY2VE
aXNjb25uZWN0ZWQoQVZDYXB0dXJlRGV2aWNlVHlwZSogZGV2aWNlKQogICAgIH0KIH0KIAotY29u
c3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnZhbGlkQ29u
c3RyYWludE5hbWVzKCkKLXsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoVmVj
dG9yPEF0b21pY1N0cmluZz4sIGNvbnN0cmFpbnRzLCAoKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEF0b21pY1N0cmluZz4gaGVpZ2h0Q29uc3RyYWludCgiaGVpZ2h0IiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0
b21pY1N0cmluZz4gd2lkdGhDb25zdHJhaW50KCJ3aWR0aCIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+
IGZyYW1lUmF0ZUNvbnN0cmFpbnQoImZyYW1lUmF0ZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGZh
Y2luZ01vZGVDb25zdHJhaW50KCJmYWNpbmdNb2RlIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZ2Fp
bkNvbnN0cmFpbnQoImdhaW4iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
LSAgICAKLSAgICBpZiAoIWNvbnN0cmFpbnRzLnNpemUoKSkgewotICAgICAgICBjb25zdHJhaW50
cy5pbnNlcnQoV2lkdGgsIHdpZHRoQ29uc3RyYWludCk7Ci0gICAgICAgIGNvbnN0cmFpbnRzLmlu
c2VydChIZWlnaHQsIGhlaWdodENvbnN0cmFpbnQpOwotICAgICAgICBjb25zdHJhaW50cy5pbnNl
cnQoRnJhbWVSYXRlLCBmcmFtZVJhdGVDb25zdHJhaW50KTsKLSAgICAgICAgY29uc3RyYWludHMu
aW5zZXJ0KEZhY2luZ01vZGUsIGZhY2luZ01vZGVDb25zdHJhaW50KTsKLSAgICAgICAgY29uc3Ry
YWludHMuaW5zZXJ0KEdhaW4sIGdhaW5Db25zdHJhaW50KTsKLSAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIGNvbnN0cmFpbnRzOwotfQotCi1jb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgQVZDYXB0
dXJlRGV2aWNlTWFuYWdlcjo6dmFsaWRGYWNpbmdNb2RlcygpCi17Ci0gICAgREVQUkVDQVRFRF9E
RUZJTkVfU1RBVElDX0xPQ0FMKFZlY3RvcjxBdG9taWNTdHJpbmc+LCBtb2RlcywgKCkpOwotICAg
IAotICAgIGlmICghbW9kZXMuc2l6ZSgpKSB7Ci0gICAgICAgIG1vZGVzLmluc2VydChSZWFsdGlt
ZU1lZGlhU291cmNlU3RhdGVzOjpVc2VyLCBSZWFsdGltZU1lZGlhU291cmNlU3RhdGVzOjpmYWNp
bmdNb2RlKFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OlVzZXIpKTsKLSAgICAgICAgbW9kZXMu
aW5zZXJ0KFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OkVudmlyb25tZW50LCBSZWFsdGltZU1l
ZGlhU291cmNlU3RhdGVzOjpmYWNpbmdNb2RlKFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OkVu
dmlyb25tZW50KSk7Ci0gICAgICAgIG1vZGVzLmluc2VydChSZWFsdGltZU1lZGlhU291cmNlU3Rh
dGVzOjpMZWZ0LCBSZWFsdGltZU1lZGlhU291cmNlU3RhdGVzOjpmYWNpbmdNb2RlKFJlYWx0aW1l
TWVkaWFTb3VyY2VTdGF0ZXM6OkxlZnQpKTsKLSAgICAgICAgbW9kZXMuaW5zZXJ0KFJlYWx0aW1l
TWVkaWFTb3VyY2VTdGF0ZXM6OlJpZ2h0LCBSZWFsdGltZU1lZGlhU291cmNlU3RhdGVzOjpmYWNp
bmdNb2RlKFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OlJpZ2h0KSk7Ci0gICAgfQotICAgIAot
ICAgIHJldHVybiBtb2RlczsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBAaW1wbGVt
ZW50YXRpb24gV2ViQ29yZUFWQ2FwdHVyZURldmljZU1hbmFnZXJPYnNlcnZlcgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJl
U291cmNlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlk
ZW9DYXB0dXJlU291cmNlLm1tCmluZGV4IDMzM2Q3NTI2NjU2MDdhZWI2ZTdhMmUwYjVlYzFmMmQ0
OTUwNmVhZjMuLjVlMzc3NjczZmQxNzZhMDVlZDM5ZjFlZTAxYjIxMGNiZTllMGQzNWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2Fw
dHVyZVNvdXJjZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvQVZWaWRlb0NhcHR1cmVTb3VyY2UubW0KQEAgLTE3OCw3ICsxNzgsNyBAQCBib29sIEFWVmlk
ZW9DYXB0dXJlU291cmNlOjphcHBseUNvbnN0cmFpbnRzKE1lZGlhQ29uc3RyYWludHMqIGNvbnN0
cmFpbnRzKQogewogICAgIEFTU0VSVChjb25zdHJhaW50cyk7CiAKLSAgICBjb25zdCBWZWN0b3I8
QXRvbWljU3RyaW5nPiYgY29uc3RyYWludE5hbWVzID0gQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6
dmFsaWRDb25zdHJhaW50TmFtZXMoKTsKKyAgICBjb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiYg
Y29uc3RyYWludE5hbWVzID0gQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCkudmFs
aWRDb25zdHJhaW50TmFtZXMoKTsKICAgICBTdHJpbmcgd2lkdGhDb25zdHJhaW50OwogICAgIFN0
cmluZyBoZWlnaHRDb25zdHJhaW50OwogCkBAIC0xOTUsNyArMTk1LDkgQEAgYm9vbCBBVlZpZGVv
Q2FwdHVyZVNvdXJjZTo6YXBwbHlDb25zdHJhaW50cyhNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJh
aW50cykKICAgICB9CiAgICAgCiAgICAgaWYgKHdpZHRoIHx8IGhlaWdodCkgewotICAgICAgICBO
U1N0cmluZyAqcHJlc2V0ID0gQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6YmVzdFNlc3Npb25QcmVz
ZXRGb3JWaWRlb1NpemUoc2Vzc2lvbigpLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgQ2FwdHVy
ZVNlc3Npb24gY2FwdHVyZVNlc3Npb24gPSBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzZXNzaW9u
RnJvbVBsYXRmb3JtU2Vzc2lvbihzZXNzaW9uKCkpOworICAgICAgICBDYXB0dXJlU2Vzc2lvblBy
ZXNldCBjYXB0dXJlU2Vzc2lvblByZXNldCA9IEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmds
ZXRvbigpLmJlc3RTZXNzaW9uUHJlc2V0Rm9yVmlkZW9TaXplKGNhcHR1cmVTZXNzaW9uLCB3aWR0
aCwgaGVpZ2h0KTsKKyAgICAgICAgTlNTdHJpbmcgKnByZXNldCA9IEFWQ2FwdHVyZURldmljZU1h
bmFnZXI6OnByZXNldFN0cmluZ0Zyb21DYXB0dXJlU2Vzc2lvblByZXNldChjYXB0dXJlU2Vzc2lv
blByZXNldCk7CiAgICAgICAgIGlmICghcHJlc2V0IHx8ICFbc2Vzc2lvbigpIGNhblNldFNlc3Np
b25QcmVzZXQ6cHJlc2V0XSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlck1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5jcHAKaW5kZXggZGM4Zjdh
YWI3NWYwMTg4YjA0NTRlNjdmZjA1MmZlNGI2M2MzODIyYy4uYmJlZjhmZmFjODE4OTRiYjJhOGM3
YmEyMzAxMzYyMTBhOWUwYmI5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyTWFjLmNwcApAQCAtNjUsNyArNjUsNyBAQCB2b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2VD
ZW50ZXJNYWM6OnZhbGlkYXRlUmVxdWVzdENvbnN0cmFpbnRzKE1lZGlhU3RyZWFtQ3JlYXRpbwog
CiAgICAgaWYgKGF1ZGlvQ29uc3RyYWludHMpIHsKICAgICAgICAgU3RyaW5nIGludmFsaWRDb25z
dHJhaW50OwotICAgICAgICBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24oKS52ZXJp
ZnlDb25zdHJhaW50c0Zvck1lZGlhVHlwZShuaWwsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlv
LCBhdWRpb0NvbnN0cmFpbnRzLmdldCgpLCBpbnZhbGlkQ29uc3RyYWludCk7CisgICAgICAgIEFW
Q2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmdsZXRvbigpLnZlcmlmeUNvbnN0cmFpbnRzRm9yTWVk
aWFUeXBlKFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlvLCBhdWRpb0NvbnN0cmFpbnRzLmdldCgp
LCBpbnZhbGlkQ29uc3RyYWludCk7CiAgICAgICAgIGlmICghaW52YWxpZENvbnN0cmFpbnQuaXNF
bXB0eSgpKSB7CiAgICAgICAgICAgICBjbGllbnQtPmNvbnN0cmFpbnRzSW52YWxpZChpbnZhbGlk
Q29uc3RyYWludCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC03Niw3ICs3Niw3IEBAIHZvaWQg
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYzo6dmFsaWRhdGVSZXF1ZXN0Q29uc3RyYWludHMo
TWVkaWFTdHJlYW1DcmVhdGlvCiAKICAgICBpZiAodmlkZW9Db25zdHJhaW50cykgewogICAgICAg
ICBTdHJpbmcgaW52YWxpZENvbnN0cmFpbnQ7Ci0gICAgICAgIEFWQ2FwdHVyZURldmljZU1hbmFn
ZXI6OnNpbmdsZXRvbigpLnZlcmlmeUNvbnN0cmFpbnRzRm9yTWVkaWFUeXBlKG5pbCwgUmVhbHRp
bWVNZWRpYVNvdXJjZTo6VmlkZW8sIHZpZGVvQ29uc3RyYWludHMuZ2V0KCksIGludmFsaWRDb25z
dHJhaW50KTsKKyAgICAgICAgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCkudmVy
aWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5cGUoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VmlkZW8sIHZp
ZGVvQ29uc3RyYWludHMuZ2V0KCksIGludmFsaWRDb25zdHJhaW50KTsKICAgICAgICAgaWYgKCFp
bnZhbGlkQ29uc3RyYWludC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGNsaWVudC0+Y29uc3Ry
YWludHNJbnZhbGlkKGludmFsaWRDb25zdHJhaW50KTsKICAgICAgICAgICAgIHJldHVybjsKQEAg
LTk4LDcgKzk4LDcgQEAgdm9pZCBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjOjpjcmVhdGVN
ZWRpYVN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXQKICAgICAKICAgICBpZiAoYXVk
aW9Db25zdHJhaW50cykgewogICAgICAgICBTdHJpbmcgaW52YWxpZENvbnN0cmFpbnQ7Ci0gICAg
ICAgIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmdsZXRvbigpLnZlcmlmeUNvbnN0cmFpbnRz
Rm9yTWVkaWFUeXBlKG5pbCwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW8sIGF1ZGlvQ29uc3Ry
YWludHMuZ2V0KCksIGludmFsaWRDb25zdHJhaW50KTsKKyAgICAgICAgQVZDYXB0dXJlRGV2aWNl
TWFuYWdlcjo6c2luZ2xldG9uKCkudmVyaWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5cGUoUmVhbHRp
bWVNZWRpYVNvdXJjZTo6QXVkaW8sIGF1ZGlvQ29uc3RyYWludHMuZ2V0KCksIGludmFsaWRDb25z
dHJhaW50KTsKICAgICAgICAgaWYgKCFpbnZhbGlkQ29uc3RyYWludC5pc0VtcHR5KCkpIHsKICAg
ICAgICAgICAgIGNsaWVudC0+ZmFpbGVkVG9DcmVhdGVTdHJlYW1XaXRoQ29uc3RyYWludHNFcnJv
cihpbnZhbGlkQ29uc3RyYWludCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMTMsNyArMTEz
LDcgQEAgdm9pZCBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjOjpjcmVhdGVNZWRpYVN0cmVh
bShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXQKICAgICAKICAgICBpZiAodmlkZW9Db25zdHJh
aW50cykgewogICAgICAgICBTdHJpbmcgaW52YWxpZENvbnN0cmFpbnQ7Ci0gICAgICAgIEFWQ2Fw
dHVyZURldmljZU1hbmFnZXI6OnNpbmdsZXRvbigpLnZlcmlmeUNvbnN0cmFpbnRzRm9yTWVkaWFU
eXBlKG5pbCwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VmlkZW8sIHZpZGVvQ29uc3RyYWludHMuZ2V0
KCksIGludmFsaWRDb25zdHJhaW50KTsKKyAgICAgICAgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6
c2luZ2xldG9uKCkudmVyaWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5cGUoUmVhbHRpbWVNZWRpYVNv
dXJjZTo6VmlkZW8sIHZpZGVvQ29uc3RyYWludHMuZ2V0KCksIGludmFsaWRDb25zdHJhaW50KTsK
ICAgICAgICAgaWYgKCFpbnZhbGlkQ29uc3RyYWludC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
IGNsaWVudC0+ZmFpbGVkVG9DcmVhdGVTdHJlYW1XaXRoQ29uc3RyYWludHNFcnJvcihpbnZhbGlk
Q29uc3RyYWludCk7CiAgICAgICAgICAgICByZXR1cm47Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265747</attachid>
            <date>2015-11-18 08:58:51 -0800</date>
            <delta_ts>2015-11-25 01:42:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151388-20151118085840.patch</filename>
            <type>text/plain</type>
            <size>59458</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyNTE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzY0MmVmMzcwMzNjZjgx
YWNhNzhiMmZiNzJlNDdiNTliMzkxMDllNS4uZGU1NTQ0YWY5Nzc3YTQ2ZDg0NTNjZDc5YjZmNWUx
NzY2Njg5NTYyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDE1LTExLTE4ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0IHBsYXRm
b3JtLWluZGVwZW5kZW50IGxvZ2ljIGluIEFWQ2FwdHVyZURldmljZU1hbmFnZXIgb3V0IGludG8g
YSBuZXcgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1MTM4OAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjM1OTM5ODA+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVG8gcHJlcGFyZSBmb3IgY3Jl
YXRpbmcgYSBNb2NrQ2FwdHVyZURldmljZU1hbmFnZXIgdG8gYmUgYWJsZSB0byB0ZXN0CisgICAg
ICAgIE1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEsIHdlIG5lZWQgdG8gY3JlYXRlIGEgcGxhdGZv
cm0taW5kZXBlbmRlbnQgY2FwdHVyZSBkZXZpY2UgbWFuYWdlcgorICAgICAgICB3aGljaCBBVkNh
cHR1cmVEZXZpY2VNYW5hZ2VyIHNob3VsZCBleHRlbmQgYW5kIGFkZCBwbGF0Zm9ybSBsb2dpYyB0
by4KKworICAgICAgICBUaGUgbWV0aG9kcyBDYXB0dXJlRGV2aWNlTWFuYWdlcjo6Y3JlYXRlTWVk
aWFTb3VyY2VGb3JDYXB0dXJlRGV2aWNlV2l0aENvbnN0cmFpbnRzIGFuZAorICAgICAgICBDYXB0
dXJlRGV2aWNlTWFuYWdlcjo6Y2FwdHVyZURldmljZUxpc3Qgc2hvdWxkIGJlIG92ZXJyaWRkZW4g
YnkgdGhlIE1vY2tDYXB0dXJlRGV2aWNlTWFuYWdlcgorICAgICAgICB0byByZXNwZWN0aXZlbHkg
Y3JlYXRlIE1vY2tSZWFsdGltZU1lZGlhU291cmNlcyBhbmQgcmV0dXJuIGEgbGlzdCBvZiBmYWtl
IGNhcHR1cmUgZGV2aWNlcworICAgICAgICBzcGVjaWZpZWQgdGhyb3VnaCBpbnRlcm5hbHMuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzLCBzaW5jZSB0aGVyZSBzaG91bGQgYmUgbm8gYmVoYXZpb3Ig
Y2hhbmdlLgorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlLmg6
IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vQ2FwdHVyZURldmljZU1hbmFn
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKENhcHR1cmVEZXZpY2VNYW5hZ2VyOjp+Q2FwdHVyZURl
dmljZU1hbmFnZXIpOgorICAgICAgICAoQ2FwdHVyZURldmljZU1hbmFnZXI6OmdldFNvdXJjZXNJ
bmZvKToKKyAgICAgICAgKENhcHR1cmVEZXZpY2VNYW5hZ2VyOjpjYXB0dXJlRGV2aWNlRnJvbURl
dmljZUlEKToKKyAgICAgICAgKENhcHR1cmVEZXZpY2VNYW5hZ2VyOjp2ZXJpZnlDb25zdHJhaW50
c0Zvck1lZGlhVHlwZSk6CisgICAgICAgIChDYXB0dXJlRGV2aWNlTWFuYWdlcjo6YmVzdFNlc3Np
b25QcmVzZXRGb3JWaWRlb1NpemUpOgorICAgICAgICAoQ2FwdHVyZURldmljZU1hbmFnZXI6OmJl
c3RTb3VyY2VzRm9yVHlwZUFuZENvbnN0cmFpbnRzKToKKyAgICAgICAgKENhcHR1cmVEZXZpY2VN
YW5hZ2VyOjpzb3VyY2VXaXRoVUlEKToKKyAgICAgICAgKENhcHR1cmVEZXZpY2VNYW5hZ2VyOjpk
ZXZpY2VTdXBwb3J0c0ZhY2luZ01vZGUpOgorICAgICAgICAoQ2FwdHVyZURldmljZU1hbmFnZXI6
OmJlc3REZXZpY2VGb3JGYWNpbmdNb2RlKToKKyAgICAgICAgKENhcHR1cmVEZXZpY2VNYW5hZ2Vy
OjpzZXNzaW9uU3VwcG9ydHNDb25zdHJhaW50KToKKyAgICAgICAgKENhcHR1cmVEZXZpY2VNYW5h
Z2VyOjppc1ZhbGlkQ29uc3RyYWludCk6CisgICAgICAgIChDYXB0dXJlRGV2aWNlTWFuYWdlcjo6
dmFsaWRDb25zdHJhaW50TmFtZXMpOgorICAgICAgICAoQ2FwdHVyZURldmljZU1hbmFnZXI6OnZh
bGlkRmFjaW5nTW9kZXMpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vQ2FwdHVyZURl
dmljZU1hbmFnZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYXB0dXJlRGV2aWNlTWFu
YWdlcjo6Y2FwdHVyZURldmljZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FwdHVyZURldmlj
ZU1hbmFnZXI6OmRlZmF1bHRDYXB0dXJlU2Vzc2lvbik6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmg6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIubW06CisgICAgICAgIChXZWJDb3JlOjpBVkNh
cHR1cmVEZXZpY2VNYW5hZ2VyOjpjYXB0dXJlRGV2aWNlTGlzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpzaG91bGRDb25zaWRlckRldmljZUluRGV2aWNlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpB
VkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpyZWZyZXNoQ2FwdHVyZURldmljZUxpc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2Vzc2lvbkZyb21QbGF0Zm9ybVNl
c3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6cHJlc2V0
U3RyaW5nRnJvbUNhcHR1cmVTZXNzaW9uUHJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkFWQ2Fw
dHVyZURldmljZU1hbmFnZXI6OkFWQ2FwdHVyZURldmljZU1hbmFnZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6fkFWQ2FwdHVyZURldmljZU1hbmFnZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6YmVzdFNvdXJjZXNGb3JU
eXBlQW5kQ29uc3RyYWludHMpOgorICAgICAgICAoV2ViQ29yZTo6QVZDYXB0dXJlRGV2aWNlTWFu
YWdlcjo6c291cmNlV2l0aFVJRCk6CisgICAgICAgIChXZWJDb3JlOjpBVkNhcHR1cmVEZXZpY2VN
YW5hZ2VyOjpnZXRTb3VyY2VzSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpBVkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyOjp2ZXJpZnlDb25zdHJhaW50c0Zvck1lZGlhVHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjpBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpkZWZhdWx0Q2FwdHVyZVNlc3Npb24pOgorICAg
ICAgICAoV2ViQ29yZTo6QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6Y3JlYXRlTWVkaWFTb3VyY2VG
b3JDYXB0dXJlRGV2aWNlV2l0aENvbnN0cmFpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhcHR1
cmVEZXZpY2U6OjptX2VuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2FwdHVy
ZURldmljZUxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2FwdHVyZURldmljZUZy
b21EZXZpY2VJRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpyZWZyZXNoQ2FwdHVyZURl
dmljZUxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QVZDYXB0dXJlRGV2aWNlTWFu
YWdlcjo6YmVzdFNlc3Npb25QcmVzZXRGb3JWaWRlb1NpemUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6ZGV2aWNlU3VwcG9ydHNGYWNpbmdNb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFWQ2FwdHVyZURldmljZU1hbmFnZXI6OmJl
c3REZXZpY2VGb3JGYWNpbmdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFWQ2Fw
dHVyZURldmljZU1hbmFnZXI6OnNlc3Npb25TdXBwb3J0c0NvbnN0cmFpbnQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6aXNWYWxpZENvbnN0cmFp
bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6
dmFsaWRDb25zdHJhaW50TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QVZDYXB0
dXJlRGV2aWNlTWFuYWdlcjo6dmFsaWRGYWNpbmdNb2Rlcyk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6QVZWaWRlb0NhcHR1cmVTb3VyY2U6OmFwcGx5Q29uc3RyYWludHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVy
TWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWM6
OnZhbGlkYXRlUmVxdWVzdENvbnN0cmFpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXJNYWM6OmNyZWF0ZU1lZGlhU3RyZWFtKToKKwogMjAxNS0xMS0xNyAg
U2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBBU1NF
UlRJT04gRkFJTEVEOiBjb250ZW50U2l6ZSA+PSAwIGluIFdlYkNvcmU6OlJlbmRlckZsZXhpYmxl
Qm94OjphZGp1c3RDaGlsZFNpemVGb3JNaW5BbmRNYXgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vQ2FwdHVyZURldmljZS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGU4NDUwMmZj
NzI2M2ZkNGFlNzAxNmFhNWUzODIzMjE4M2Q3NjkyYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vQ2FwdHVyZURldmljZS5oCkBAIC0wLDAgKzEs
NzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIENhcHR1cmVEZXZpY2VfaAorI2RlZmluZSBDYXB0dXJlRGV2aWNlX2gKKworI2lmIEVOQUJM
RShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIENhcHR1cmVEZXZpY2VQb3NpdGlvbiB7Cisg
ICAgVW5zcGVjaWZpZWQsCisgICAgRnJvbnQsCisgICAgQmFjaworfTsKKworZW51bSBDYXB0dXJl
U2Vzc2lvblByZXNldCB7CisgICAgQ2FwdHVyZVNlc3Npb25QcmVzZXROb25lID0gMCwKKyAgICBD
YXB0dXJlU2Vzc2lvblByZXNldExvdyA9IDEgPDwgMCwKKyAgICBDYXB0dXJlU2Vzc2lvblByZXNl
dDM1MngyODggPSAxIDw8IDEsCisgICAgQ2FwdHVyZVNlc3Npb25QcmVzZXQ2NDB4NDgwID0gMSA8
PCAyLAorICAgIENhcHR1cmVTZXNzaW9uUHJlc2V0MTI4MHg3MjAgPSAxIDw8IDMKK307CisKK2Vu
dW0gQ2FwdHVyZURldmljZU1lZGlhVHlwZSB7CisgICAgQ2FwdHVyZURldmljZU1lZGlhVHlwZU5v
bmUgPSAwLAorICAgIENhcHR1cmVEZXZpY2VNZWRpYVR5cGVBdWRpbyA9IDEgPDwgMCwKKyAgICBD
YXB0dXJlRGV2aWNlTWVkaWFUeXBlTXV4ZWQgPSAxIDw8IDEsCisgICAgQ2FwdHVyZURldmljZU1l
ZGlhVHlwZVZpZGVvID0gMSA8PCAyCit9OworCitzdHJ1Y3QgQ2FwdHVyZURldmljZSB7CisgICAg
U3RyaW5nIG1fY2FwdHVyZURldmljZUlEOworICAgIFN0cmluZyBtX2xvY2FsaXplZE5hbWU7Cisg
ICAgU3RyaW5nIG1fZ3JvdXBJRDsKKworICAgIFN0cmluZyBtX2F1ZGlvU291cmNlSWQ7CisgICAg
U3RyaW5nIG1fdmlkZW9Tb3VyY2VJZDsKKworICAgIGJvb2wgbV9lbmFibGVkIHsgZmFsc2UgfTsK
KyAgICBDYXB0dXJlRGV2aWNlTWVkaWFUeXBlIG1fbWVkaWFUeXBlcyB7IENhcHR1cmVEZXZpY2VN
ZWRpYVR5cGVOb25lIH07CisgICAgQ2FwdHVyZURldmljZVBvc2l0aW9uIG1fcG9zaXRpb24geyBD
YXB0dXJlRGV2aWNlUG9zaXRpb246OlVuc3BlY2lmaWVkIH07Cit9OworCitzdHJ1Y3QgQ2FwdHVy
ZVNlc3Npb24geworICAgIENhcHR1cmVTZXNzaW9uUHJlc2V0IG1fc3VwcG9ydGVkUHJlc2V0cyB7
IENhcHR1cmVTZXNzaW9uUHJlc2V0Tm9uZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2VuZGlmIC8qIENhcHR1cmVE
ZXZpY2VfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9DYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZWZlOTg2NmYzYTVk
MDE5YjkyMzI5MjgwNWE4MDQxZmNiZGY0MjM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAKQEAgLTAs
MCArMSwzMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgiCisK
KyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0
ICJNZWRpYUNvbnN0cmFpbnRzLmgiCisjaW1wb3J0ICJSZWFsdGltZU1lZGlhU291cmNlLmgiCisj
aW1wb3J0ICJSZWFsdGltZU1lZGlhU291cmNlU3RhdGVzLmgiCisjaW1wb3J0ICJVVUlELmgiCisj
aW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgorI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitDYXB0dXJlRGV2aWNlTWFuYWdlcjo6fkNh
cHR1cmVEZXZpY2VNYW5hZ2VyKCkKK3sKK30KKworVmVjdG9yPFJlZlB0cjxUcmFja1NvdXJjZUlu
Zm8+PiBDYXB0dXJlRGV2aWNlTWFuYWdlcjo6Z2V0U291cmNlc0luZm8oY29uc3QgU3RyaW5nJiBy
ZXF1ZXN0T3JpZ2luKQoreworICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0T3JpZ2luKTsKKyAgICBW
ZWN0b3I8UmVmUHRyPFRyYWNrU291cmNlSW5mbz4+IHNvdXJjZXNJbmZvOworICAgIGZvciAoYXV0
byBjYXB0dXJlRGV2aWNlIDogY2FwdHVyZURldmljZUxpc3QoKSkgeworICAgICAgICBpZiAoIWNh
cHR1cmVEZXZpY2UubV9lbmFibGVkKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
aWYgKCFjYXB0dXJlRGV2aWNlLm1fdmlkZW9Tb3VyY2VJZC5pc0VtcHR5KCkpCisgICAgICAgICAg
ICBzb3VyY2VzSW5mby5hcHBlbmQoVHJhY2tTb3VyY2VJbmZvOjpjcmVhdGUoY2FwdHVyZURldmlj
ZS5tX3ZpZGVvU291cmNlSWQsIFRyYWNrU291cmNlSW5mbzo6VmlkZW8sIGNhcHR1cmVEZXZpY2Uu
bV9sb2NhbGl6ZWROYW1lLCBjYXB0dXJlRGV2aWNlLm1fZ3JvdXBJRCkpOworICAgICAgICBpZiAo
IWNhcHR1cmVEZXZpY2UubV9hdWRpb1NvdXJjZUlkLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHNv
dXJjZXNJbmZvLmFwcGVuZChUcmFja1NvdXJjZUluZm86OmNyZWF0ZShjYXB0dXJlRGV2aWNlLm1f
YXVkaW9Tb3VyY2VJZCwgVHJhY2tTb3VyY2VJbmZvOjpBdWRpbywgY2FwdHVyZURldmljZS5tX2xv
Y2FsaXplZE5hbWUsIGNhcHR1cmVEZXZpY2UubV9ncm91cElEKSk7CisgICAgfQorICAgIExPRyhN
ZWRpYSwgIkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpnZXRTb3VyY2VzSW5mbyglcCksIGZvdW5kICV6
dSBhY3RpdmUgZGV2aWNlcyIsIHRoaXMsIHNvdXJjZXNJbmZvLnNpemUoKSk7CisgICAgcmV0dXJu
IHNvdXJjZXNJbmZvOworfQorCitib29sIENhcHR1cmVEZXZpY2VNYW5hZ2VyOjpjYXB0dXJlRGV2
aWNlRnJvbURldmljZUlEKGNvbnN0IFN0cmluZyYgY2FwdHVyZURldmljZUlELCBDYXB0dXJlRGV2
aWNlJiBzb3VyY2UpCit7CisgICAgc2l6ZV90IGNvdW50ID0gbV9kZXZpY2VzLnNpemUoKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgaWYgKG1fZGV2
aWNlc1tpXS5tX2NhcHR1cmVEZXZpY2VJRCA9PSBjYXB0dXJlRGV2aWNlSUQpIHsKKyAgICAgICAg
ICAgIHNvdXJjZSA9IG1fZGV2aWNlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIENhcHR1cmVEZXZp
Y2VNYW5hZ2VyOjp2ZXJpZnlDb25zdHJhaW50c0Zvck1lZGlhVHlwZShSZWFsdGltZU1lZGlhU291
cmNlOjpUeXBlIHR5cGUsIE1lZGlhQ29uc3RyYWludHMqIGNvbnN0cmFpbnRzLCBjb25zdCBDYXB0
dXJlU2Vzc2lvbiYgc2Vzc2lvbiwgU3RyaW5nJiBpbnZhbGlkQ29uc3RyYWludCkKK3sKKyAgICBp
ZiAoIWNvbnN0cmFpbnRzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFZlY3RvcjxNZWRp
YUNvbnN0cmFpbnQ+IG1hbmRhdG9yeUNvbnN0cmFpbnRzOworICAgIGNvbnN0cmFpbnRzLT5nZXRN
YW5kYXRvcnlDb25zdHJhaW50cyhtYW5kYXRvcnlDb25zdHJhaW50cyk7CisgICAgaWYgKG1hbmRh
dG9yeUNvbnN0cmFpbnRzLnNpemUoKSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1hbmRhdG9yeUNvbnN0cmFpbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBN
ZWRpYUNvbnN0cmFpbnQmIGNvbnN0cmFpbnQgPSBtYW5kYXRvcnlDb25zdHJhaW50c1tpXTsKKyAg
ICAgICAgICAgIGlmICghc2Vzc2lvblN1cHBvcnRzQ29uc3RyYWludCh0eXBlLCBjb25zdHJhaW50
Lm1fbmFtZSwgc2Vzc2lvbiwgY29uc3RyYWludC5tX3ZhbHVlKSkgeworICAgICAgICAgICAgICAg
IGludmFsaWRDb25zdHJhaW50ID0gY29uc3RyYWludC5tX25hbWU7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgQ2FwdHVyZURldmljZU1hbmFnZXI6OnZlcmlmeUNvbnN0cmFp
bnRzRm9yTWVkaWFUeXBlKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlwZSwgTWVkaWFDb25z
dHJhaW50cyogY29uc3RyYWludHMsIFN0cmluZyYgaW52YWxpZENvbnN0cmFpbnQpCit7CisgICAg
cmV0dXJuIHZlcmlmeUNvbnN0cmFpbnRzRm9yTWVkaWFUeXBlKHR5cGUsIGNvbnN0cmFpbnRzLCBk
ZWZhdWx0Q2FwdHVyZVNlc3Npb24oKSwgaW52YWxpZENvbnN0cmFpbnQpOworfQorCitDYXB0dXJl
U2Vzc2lvblByZXNldCBDYXB0dXJlRGV2aWNlTWFuYWdlcjo6YmVzdFNlc3Npb25QcmVzZXRGb3JW
aWRlb1NpemUoY29uc3QgQ2FwdHVyZVNlc3Npb24mIGNhcHR1cmVTZXNzaW9uLCBpbnQgd2lkdGgs
IGludCBoZWlnaHQpCit7CisgICAgQVNTRVJUKHdpZHRoID49IDApOworICAgIEFTU0VSVChoZWln
aHQgPj0gMCk7CisKKyAgICBpZiAod2lkdGggPiAxMjgwIHx8IGhlaWdodCA+IDcyMCkgeworICAg
ICAgICAvLyBGSVhNRTogdGhpcyByZXN0cmljdGlvbiBjb3VsZCBiZSBhZGp1c3RlZCB3aXRoIHRo
ZSB2aWRlb01heFNjYWxlQW5kQ3JvcEZhY3RvciBwcm9wZXJ0eS4KKyAgICAgICAgcmV0dXJuIENh
cHR1cmVTZXNzaW9uUHJlc2V0Tm9uZTsKKyAgICB9CisKKyAgICBpZiAod2lkdGggPiA2NDAgfHwg
aGVpZ2h0ID4gNDgwKSB7CisgICAgICAgIGlmICghKGNhcHR1cmVTZXNzaW9uLm1fc3VwcG9ydGVk
UHJlc2V0cyAmIENhcHR1cmVTZXNzaW9uUHJlc2V0MTI4MHg3MjApKQorICAgICAgICAgICAgcmV0
dXJuIENhcHR1cmVTZXNzaW9uUHJlc2V0Tm9uZTsKKyAgICAgICAgcmV0dXJuIENhcHR1cmVTZXNz
aW9uUHJlc2V0MTI4MHg3MjA7CisgICAgfQorCisgICAgaWYgKHdpZHRoID4gMzUyIHx8IGhlaWdo
dCA+IDI4OCkgeworICAgICAgICBpZiAoIShjYXB0dXJlU2Vzc2lvbi5tX3N1cHBvcnRlZFByZXNl
dHMgJiBDYXB0dXJlU2Vzc2lvblByZXNldDY0MHg0ODApKQorICAgICAgICAgICAgcmV0dXJuIENh
cHR1cmVTZXNzaW9uUHJlc2V0Tm9uZTsKKyAgICAgICAgcmV0dXJuIENhcHR1cmVTZXNzaW9uUHJl
c2V0NjQweDQ4MDsKKyAgICB9CisKKyAgICBpZiAoY2FwdHVyZVNlc3Npb24ubV9zdXBwb3J0ZWRQ
cmVzZXRzICYgQ2FwdHVyZVNlc3Npb25QcmVzZXQzNTJ4Mjg4KQorICAgICAgICByZXR1cm4gQ2Fw
dHVyZVNlc3Npb25QcmVzZXQzNTJ4Mjg4OworCisgICAgaWYgKGNhcHR1cmVTZXNzaW9uLm1fc3Vw
cG9ydGVkUHJlc2V0cyAmIENhcHR1cmVTZXNzaW9uUHJlc2V0TG93KQorICAgICAgICByZXR1cm4g
Q2FwdHVyZVNlc3Npb25QcmVzZXRMb3c7CisKKyAgICByZXR1cm4gQ2FwdHVyZVNlc3Npb25QcmVz
ZXROb25lOworfQorCitWZWN0b3I8UmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+PiBDYXB0dXJl
RGV2aWNlTWFuYWdlcjo6YmVzdFNvdXJjZXNGb3JUeXBlQW5kQ29uc3RyYWludHMoUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6VHlwZSB0eXBlLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IGNvbnN0
cmFpbnRzKQoreworICAgIFZlY3RvcjxSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4+IGJlc3RT
b3VyY2VzTGlzdDsKKworICAgIHN0cnVjdCB7CisgICAgICAgIGJvb2wgb3BlcmF0b3IoKShSZWZQ
dHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4gYSwgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+IGIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhLT5maXRuZXNzU2NvcmUoKSA8IGItPmZp
dG5lc3NTY29yZSgpOworICAgICAgICB9CisgICAgfSBzb3J0QmFzZWRPZmZGaXRuZXNzU2NvcmU7
CisKKyAgICBmb3IgKGF1dG8mIGNhcHR1cmVEZXZpY2UgOiBjYXB0dXJlRGV2aWNlTGlzdCgpKSB7
CisgICAgICAgIGlmICghY2FwdHVyZURldmljZS5tX2VuYWJsZWQpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBpZiAodHlwZSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpBdWRpbyAm
JiAhY2FwdHVyZURldmljZS5tX2F1ZGlvU291cmNlSWQuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICBSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4gY2FwdHVyZVNvdXJjZSA9IHNvdXJjZVdpdGhV
SUQoY2FwdHVyZURldmljZS5tX2NhcHR1cmVEZXZpY2VJRCwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6
QXVkaW8sIGNvbnN0cmFpbnRzLmdldCgpKTsKKyAgICAgICAgICAgIGlmICghY2FwdHVyZVNvdXJj
ZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgYmVzdFNvdXJjZXNM
aXN0LmFwcGVuZChjYXB0dXJlU291cmNlLmxlYWtSZWYoKSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAodHlwZSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpWaWRlbyAmJiAhY2FwdHVyZURldmlj
ZS5tX3ZpZGVvU291cmNlSWQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBSZWZQdHI8UmVhbHRp
bWVNZWRpYVNvdXJjZT4gY2FwdHVyZVNvdXJjZSA9IHNvdXJjZVdpdGhVSUQoY2FwdHVyZURldmlj
ZS5tX2NhcHR1cmVEZXZpY2VJRCwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VmlkZW8sIGNvbnN0cmFp
bnRzLmdldCgpKTsKKyAgICAgICAgICAgIGlmICghY2FwdHVyZVNvdXJjZSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgYmVzdFNvdXJjZXNMaXN0LmFwcGVuZChjYXB0
dXJlU291cmNlLmxlYWtSZWYoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgc3RkOjpzb3J0KGJl
c3RTb3VyY2VzTGlzdC5iZWdpbigpLCBiZXN0U291cmNlc0xpc3QuZW5kKCksIHNvcnRCYXNlZE9m
ZkZpdG5lc3NTY29yZSk7CisgICAgcmV0dXJuIGJlc3RTb3VyY2VzTGlzdDsKK30KKworUmVmUHRy
PFJlYWx0aW1lTWVkaWFTb3VyY2U+IENhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzb3VyY2VXaXRoVUlE
KGNvbnN0IFN0cmluZyYgZGV2aWNlVUlELCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUs
IE1lZGlhQ29uc3RyYWludHMqIGNvbnN0cmFpbnRzKQoreworICAgIGZvciAoYXV0byYgY2FwdHVy
ZURldmljZSA6IGNhcHR1cmVEZXZpY2VMaXN0KCkpIHsKKyAgICAgICAgaWYgKGNhcHR1cmVEZXZp
Y2UubV9jYXB0dXJlRGV2aWNlSUQgIT0gZGV2aWNlVUlEIHx8ICFjYXB0dXJlRGV2aWNlLm1fZW5h
YmxlZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICh0eXBlID09IFJlYWx0
aW1lTWVkaWFTb3VyY2U6OkF1ZGlvICYmIGNhcHR1cmVEZXZpY2UubV9hdWRpb1NvdXJjZUlkLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAodHlwZSA9PSBSZWFs
dGltZU1lZGlhU291cmNlOjpWaWRlbyAmJiBjYXB0dXJlRGV2aWNlLm1fdmlkZW9Tb3VyY2VJZC5p
c0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoUmVhbHRpbWVN
ZWRpYVNvdXJjZSogbWVkaWFTb3VyY2UgPSBjcmVhdGVNZWRpYVNvdXJjZUZvckNhcHR1cmVEZXZp
Y2VXaXRoQ29uc3RyYWludHMoY2FwdHVyZURldmljZSwgdHlwZSwgY29uc3RyYWludHMpKQorICAg
ICAgICAgICAgcmV0dXJuIG1lZGlhU291cmNlOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworYm9vbCBDYXB0dXJlRGV2aWNlTWFuYWdlcjo6ZGV2aWNlU3VwcG9ydHNGYWNpbmdNb2Rl
KGNvbnN0IENhcHR1cmVEZXZpY2UmIGRldmljZSwgUmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6
VmlkZW9GYWNpbmdNb2RlIGZhY2luZ01vZGUpCit7CisgICAgaWYgKCFkZXZpY2UubV9tZWRpYVR5
cGVzICYgQ2FwdHVyZURldmljZU1lZGlhVHlwZVZpZGVvKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBzd2l0Y2ggKGZhY2luZ01vZGUpIHsKKyAgICBjYXNlIFJlYWx0aW1lTWVkaWFTb3Vy
Y2VTdGF0ZXM6OlVzZXI6CisgICAgICAgIGlmIChkZXZpY2UubV9wb3NpdGlvbiA9PSBDYXB0dXJl
RGV2aWNlUG9zaXRpb246OkZyb250KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6RW52aXJvbm1lbnQ6
CisgICAgICAgIGlmIChkZXZpY2UubV9wb3NpdGlvbiA9PSBDYXB0dXJlRGV2aWNlUG9zaXRpb246
OkJhY2spCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBSZWFsdGltZU1lZGlhU291cmNlU3RhdGVzOjpMZWZ0OgorICAgIGNhc2UgUmVhbHRpbWVNZWRp
YVNvdXJjZVN0YXRlczo6UmlnaHQ6CisgICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlU3RhdGVz
OjpVbmtub3duOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitDYXB0dXJlRGV2aWNlKiBDYXB0dXJlRGV2aWNlTWFuYWdlcjo6YmVzdERldmlj
ZUZvckZhY2luZ01vZGUoUmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6VmlkZW9GYWNpbmdNb2Rl
IGZhY2luZ01vZGUpCit7CisgICAgZm9yIChhdXRvJiBkZXZpY2UgOiBtX2RldmljZXMpIHsKKyAg
ICAgICAgaWYgKGRldmljZVN1cHBvcnRzRmFjaW5nTW9kZShkZXZpY2UsIGZhY2luZ01vZGUpKQor
ICAgICAgICAgICAgcmV0dXJuICZkZXZpY2U7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK2Jvb2wgQ2FwdHVyZURldmljZU1hbmFnZXI6OnNlc3Npb25TdXBwb3J0c0NvbnN0cmFp
bnQoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IENhcHR1cmVTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAg
IHNpemVfdCBjb25zdHJhaW50ID0gdmFsaWRDb25zdHJhaW50TmFtZXMoKS5maW5kKG5hbWUpOwor
ICAgIGlmIChjb25zdHJhaW50ID09IG5vdEZvdW5kKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIHN3aXRjaCAoY29uc3RyYWludCkgeworICAgIGNhc2UgV2lkdGg6CisgICAgICAgIGlmICh0
eXBlID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlvKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIHJldHVybiBiZXN0U2Vzc2lvblByZXNldEZvclZpZGVvU2l6ZShzZXNz
aW9uLCB2YWx1ZS50b0ludCgpLCAwKSAhPSBDYXB0dXJlU2Vzc2lvblByZXNldE5vbmU7CisgICAg
Y2FzZSBIZWlnaHQ6CisgICAgICAgIGlmICh0eXBlID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1
ZGlvKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiBiZXN0U2Vz
c2lvblByZXNldEZvclZpZGVvU2l6ZShzZXNzaW9uLCAwLCB2YWx1ZS50b0ludCgpKSAhPSBDYXB0
dXJlU2Vzc2lvblByZXNldE5vbmU7CisgICAgY2FzZSBGcmFtZVJhdGU6IHsKKyAgICAgICAgaWYg
KHR5cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW8pCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgLy8gSXQgd291bGQgbWFrZSBzZW5zZSB0byB1c2UgW0FWQ2FwdHVy
ZUNvbm5lY3Rpb24gdmlkZW9NaW5GcmFtZUR1cmF0aW9uXSBhbmQKKyAgICAgICAgLy8gW0FWQ2Fw
dHVyZUNvbm5lY3Rpb24gdmlkZW9NYXhGcmFtZUR1cmF0aW9uXSwgYnV0IHRoZXkgb25seSB3b3Jr
IHdpdGggYSAibGl2ZSIgQVZDYXB0dXJlQ29ubmVjdGlvbi4KKyAgICAgICAgZmxvYXQgcmF0ZSA9
IHZhbHVlLnRvRmxvYXQoKTsKKyAgICAgICAgcmV0dXJuIHJhdGUgPiAwICYmIHJhdGUgPD0gNjA7
CisgICAgfQorICAgIGNhc2UgR2FpbjogeworICAgICAgICBpZiAodHlwZSAhPSBSZWFsdGltZU1l
ZGlhU291cmNlOjpBdWRpbykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBm
bG9hdCBsZXZlbCA9IHZhbHVlLnRvRmxvYXQoKTsKKyAgICAgICAgcmV0dXJuIGxldmVsID4gMCAm
JiBsZXZlbCA8PSAxOworICAgIH0KKyAgICBjYXNlIEZhY2luZ01vZGU6IHsKKyAgICAgICAgaWYg
KHR5cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW8pCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgc2l6ZV90IGZhY2luZ01vZGUgPSAgdmFsaWRGYWNpbmdNb2Rlcygp
LmZpbmQodmFsdWUpOworICAgICAgICBpZiAoZmFjaW5nTW9kZSAhPSBub3RGb3VuZCkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGJlc3REZXZpY2VGb3JGYWNpbmdN
b2RlKHN0YXRpY19jYXN0PFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OlZpZGVvRmFjaW5nTW9k
ZT4oZmFjaW5nTW9kZSkpOworICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgQ2FwdHVyZURldmljZU1hbmFnZXI6OmlzVmFsaWRDb25zdHJhaW50KFJlYWx0aW1lTWVk
aWFTb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIHNpemVfdCBj
b25zdHJhaW50ID0gdmFsaWRDb25zdHJhaW50TmFtZXMoKS5maW5kKG5hbWUpOworICAgIGlmIChj
b25zdHJhaW50ID09IG5vdEZvdW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
Y29uc3RyYWludCA9PSBHYWluKQorICAgICAgICByZXR1cm4gdHlwZSA9PSBSZWFsdGltZU1lZGlh
U291cmNlOjpBdWRpbzsKKworICAgIHJldHVybiB0cnVlOworfQorCitjb25zdCBWZWN0b3I8QXRv
bWljU3RyaW5nPiYgQ2FwdHVyZURldmljZU1hbmFnZXI6OnZhbGlkQ29uc3RyYWludE5hbWVzKCkK
K3sKKyAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPEF0b21pY1N0cmlu
Zz4sIGNvbnN0cmFpbnRzLCAoKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0
cmluZz4gaGVpZ2h0Q29uc3RyYWludCgiaGVpZ2h0IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gd2lk
dGhDb25zdHJhaW50KCJ3aWR0aCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGZyYW1lUmF0ZUNvbnN0
cmFpbnQoImZyYW1lUmF0ZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGZhY2luZ01vZGVDb25zdHJh
aW50KCJmYWNpbmdNb2RlIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZ2FpbkNvbnN0cmFpbnQoImdh
aW4iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKworICAgIGlmICghY29u
c3RyYWludHMuc2l6ZSgpKSB7CisgICAgICAgIGNvbnN0cmFpbnRzLmluc2VydChXaWR0aCwgd2lk
dGhDb25zdHJhaW50KTsKKyAgICAgICAgY29uc3RyYWludHMuaW5zZXJ0KEhlaWdodCwgaGVpZ2h0
Q29uc3RyYWludCk7CisgICAgICAgIGNvbnN0cmFpbnRzLmluc2VydChGcmFtZVJhdGUsIGZyYW1l
UmF0ZUNvbnN0cmFpbnQpOworICAgICAgICBjb25zdHJhaW50cy5pbnNlcnQoRmFjaW5nTW9kZSwg
ZmFjaW5nTW9kZUNvbnN0cmFpbnQpOworICAgICAgICBjb25zdHJhaW50cy5pbnNlcnQoR2Fpbiwg
Z2FpbkNvbnN0cmFpbnQpOworICAgIH0KKworICAgIHJldHVybiBjb25zdHJhaW50czsKK30KKwor
Y29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIENhcHR1cmVEZXZpY2VNYW5hZ2VyOjp2YWxpZEZh
Y2luZ01vZGVzKCkKK3sKKyAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9y
PEF0b21pY1N0cmluZz4sIG1vZGVzLCAoKSk7CisKKyAgICBpZiAoIW1vZGVzLnNpemUoKSkgewor
ICAgICAgICBtb2Rlcy5pbnNlcnQoUmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6VXNlciwgUmVh
bHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6ZmFjaW5nTW9kZShSZWFsdGltZU1lZGlhU291cmNlU3Rh
dGVzOjpVc2VyKSk7CisgICAgICAgIG1vZGVzLmluc2VydChSZWFsdGltZU1lZGlhU291cmNlU3Rh
dGVzOjpFbnZpcm9ubWVudCwgUmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6ZmFjaW5nTW9kZShS
ZWFsdGltZU1lZGlhU291cmNlU3RhdGVzOjpFbnZpcm9ubWVudCkpOworICAgICAgICBtb2Rlcy5p
bnNlcnQoUmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6TGVmdCwgUmVhbHRpbWVNZWRpYVNvdXJj
ZVN0YXRlczo6ZmFjaW5nTW9kZShSZWFsdGltZU1lZGlhU291cmNlU3RhdGVzOjpMZWZ0KSk7Cisg
ICAgICAgIG1vZGVzLmluc2VydChSZWFsdGltZU1lZGlhU291cmNlU3RhdGVzOjpSaWdodCwgUmVh
bHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6ZmFjaW5nTW9kZShSZWFsdGltZU1lZGlhU291cmNlU3Rh
dGVzOjpSaWdodCkpOworICAgIH0KKworICAgIHJldHVybiBtb2RlczsKK30KKworI2VuZGlmIC8v
IEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmUxYjFm
NDVmNDk2NzdmNDdkMWE0ZGJmOTk5YjkxNzBjMjhlZGZlOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vQ2FwdHVyZURldmljZU1hbmFnZXIuaApA
QCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBDYXB0dXJlRGV2aWNlTWFuYWdlcl9oCisjZGVmaW5lIENhcHR1cmVEZXZp
Y2VNYW5hZ2VyX2gKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJDYXB0
dXJlRGV2aWNlLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja1NvdXJjZXNSZXF1ZXN0Q2xp
ZW50LmgiCisjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhcHR1cmVE
ZXZpY2VNYW5hZ2VyIHsKK3B1YmxpYzoKKyAgICBlbnVtIFZhbGlkQ29uc3RyYWludHMgeyBXaWR0
aCA9IDAsIEhlaWdodCwgRnJhbWVSYXRlLCBGYWNpbmdNb2RlLCBHYWluIH07CisKKyAgICB2aXJ0
dWFsIFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYgY2FwdHVyZURldmljZUxpc3QoKSB7IHJldHVybiBt
X2RldmljZXM7IH0KKyAgICB2aXJ0dWFsIFRyYWNrU291cmNlSW5mb1ZlY3RvciBnZXRTb3VyY2Vz
SW5mbyhjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIFZlY3RvcjxSZWZQdHI8UmVhbHRpbWVN
ZWRpYVNvdXJjZT4+IGJlc3RTb3VyY2VzRm9yVHlwZUFuZENvbnN0cmFpbnRzKFJlYWx0aW1lTWVk
aWFTb3VyY2U6OlR5cGUsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4pOworICAgIHZpcnR1
YWwgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+IHNvdXJjZVdpdGhVSUQoY29uc3QgU3RyaW5n
JiwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSwgTWVkaWFDb25zdHJhaW50cyopOworCisgICAg
dmlydHVhbCBib29sIHZlcmlmeUNvbnN0cmFpbnRzRm9yTWVkaWFUeXBlKFJlYWx0aW1lTWVkaWFT
b3VyY2U6OlR5cGUsIE1lZGlhQ29uc3RyYWludHMqLCBjb25zdCBDYXB0dXJlU2Vzc2lvbiYsIFN0
cmluZyYpOworICAgIHZpcnR1YWwgYm9vbCB2ZXJpZnlDb25zdHJhaW50c0Zvck1lZGlhVHlwZShS
ZWFsdGltZU1lZGlhU291cmNlOjpUeXBlLCBNZWRpYUNvbnN0cmFpbnRzKiwgU3RyaW5nJik7CisK
KyAgICB2aXJ0dWFsIENhcHR1cmVTZXNzaW9uUHJlc2V0IGJlc3RTZXNzaW9uUHJlc2V0Rm9yVmlk
ZW9TaXplKGNvbnN0IENhcHR1cmVTZXNzaW9uJiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKwor
ICAgIHZpcnR1YWwgY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIHZhbGlkQ29uc3RyYWludE5h
bWVzKCk7CisgICAgdmlydHVhbCBjb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgdmFsaWRGYWNp
bmdNb2RlcygpOworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkQ29uc3RyYWludChSZWFsdGltZU1l
ZGlhU291cmNlOjpUeXBlLCBjb25zdCBTdHJpbmcmKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1
YWwgfkNhcHR1cmVEZXZpY2VNYW5hZ2VyKCk7CisgICAgdmlydHVhbCBSZWFsdGltZU1lZGlhU291
cmNlKiBjcmVhdGVNZWRpYVNvdXJjZUZvckNhcHR1cmVEZXZpY2VXaXRoQ29uc3RyYWludHMoY29u
c3QgQ2FwdHVyZURldmljZSYsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUsIE1lZGlhQ29uc3Ry
YWludHMqKSA9IDA7CisKKyAgICB2aXJ0dWFsIENhcHR1cmVTZXNzaW9uIGRlZmF1bHRDYXB0dXJl
U2Vzc2lvbigpIGNvbnN0IHsgcmV0dXJuIENhcHR1cmVTZXNzaW9uKCk7IH0KKyAgICB2aXJ0dWFs
IENhcHR1cmVEZXZpY2UqIGJlc3REZXZpY2VGb3JGYWNpbmdNb2RlKFJlYWx0aW1lTWVkaWFTb3Vy
Y2VTdGF0ZXM6OlZpZGVvRmFjaW5nTW9kZSk7CisgICAgdmlydHVhbCBib29sIHNlc3Npb25TdXBw
b3J0c0NvbnN0cmFpbnQoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBDYXB0dXJlU2Vzc2lvbiYsIGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgIHZp
cnR1YWwgYm9vbCBjYXB0dXJlRGV2aWNlRnJvbURldmljZUlEKGNvbnN0IFN0cmluZyYgY2FwdHVy
ZURldmljZUlELCBDYXB0dXJlRGV2aWNlJiBzb3VyY2UpOworICAgIHZpcnR1YWwgYm9vbCBkZXZp
Y2VTdXBwb3J0c0ZhY2luZ01vZGUoY29uc3QgQ2FwdHVyZURldmljZSYsIFJlYWx0aW1lTWVkaWFT
b3VyY2VTdGF0ZXM6OlZpZGVvRmFjaW5nTW9kZSk7CisKKyAgICBWZWN0b3I8Q2FwdHVyZURldmlj
ZT4gbV9kZXZpY2VzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2VuZGlmIC8qIENhcHR1cmVEZXZpY2VNYW5hZ2VyX2gg
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCA5MDRiNDQxNGU5NjEyYjY3ZjFiYjg0YmUzYWQ4OTQwYjhkNzc0ODk4Li45ZDEzNGQ4
NDgxMTQxN2NiMmU2NzI0NmE2YjQ3ZDI1ZjRiN2Q3NTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMjA1LDYgKzEyMDUsOSBA
QAogCQkyRTNCQzEwODExN0Q0Nzk4MDBCOTQwOUEgLyogRE9NRmlsZUVycm9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTNCQzEwNjExN0Q0Nzk4MDBC
OTQwOUEgLyogRE9NRmlsZUVycm9yLmggKi87IH07CiAJCTJFM0JDMTA5MTE3RDQ3OTgwMEI5NDA5
QSAvKiBET01GaWxlRXJyb3IubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRTNCQzEwNzExN0Q0Nzk4MDBCOTQwOUEgLyogRE9NRmlsZUVycm9yLm1tICov
OyB9OwogCQkyRTNCQzEwQjExN0Q0N0M4MDBCOTQwOUEgLyogRE9NRmlsZUVycm9ySW50ZXJuYWwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFM0JDMTBB
MTE3RDQ3QzgwMEI5NDA5QSAvKiBET01GaWxlRXJyb3JJbnRlcm5hbC5oICovOyB9OworCQkyRTND
OEM2MjFCRkJBOTc1MDAzMDk1NjYgLyogQ2FwdHVyZURldmljZU1hbmFnZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFM0M4QzYxMUJGQkE4REMwMDMw
OTU2NiAvKiBDYXB0dXJlRGV2aWNlTWFuYWdlci5oICovOyB9OworCQkyRTNDOEM2NDFCRkJCNzVE
MDAzMDk1NjYgLyogQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkUzQzhDNjMxQkZCQjc1RDAwMzA5NTY2IC8qIENh
cHR1cmVEZXZpY2VNYW5hZ2VyLmNwcCAqLzsgfTsKKwkJMkUzQzhDNjgxQkZCRjhFMTAwMzA5NTY2
IC8qIENhcHR1cmVEZXZpY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJFM0M4QzY2MUJGQkY4RTEwMDMwOTU2NiAvKiBDYXB0dXJlRGV2aWNlLmggKi87
IH07CiAJCTJFNDM0NjQ1MEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU0MzQ2MzMwRjU0NkE4MjAwQjBG
MUJBIC8qIFdvcmtlci5jcHAgKi87IH07CiAJCTJFNDM0NjQ2MEY1NDZBODIwMEIwRjFCQSAvKiBX
b3JrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJF
NDM0NjM0MEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXIuaCAqLzsgfTsKIAkJMkU0MzQ2NDgwRjU0
NkE4MjAwQjBGMUJBIC8qIFdvcmtlckdsb2JhbFNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNDM0NjM2MEY1NDZBODIwMEIwRjFCQSAvKiBX
b3JrZXJHbG9iYWxTY29wZS5jcHAgKi87IH07CkBAIC04NTcyLDYgKzg1NzUsOSBAQAogCQkyRTNC
QzEwNjExN0Q0Nzk4MDBCOTQwOUEgLyogRE9NRmlsZUVycm9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERPTUZpbGVFcnJvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyRTNCQzEwNzExN0Q0Nzk4MDBCOTQwOUEgLyogRE9NRmlsZUVycm9yLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NRmlsZUVycm9yLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyRTNCQzEwQTExN0Q0N0M4MDBCOTQwOUEgLyogRE9NRmls
ZUVycm9ySW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NRmls
ZUVycm9ySW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkUzQzhDNjEx
QkZCQThEQzAwMzA5NTY2IC8qIENhcHR1cmVEZXZpY2VNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENhcHR1cmVEZXZpY2VNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJF
M0M4QzYzMUJGQkI3NUQwMDMwOTU2NiAvKiBDYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYXB0dXJlRGV2aWNlTWFuYWdlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJFM0M4QzY2MUJGQkY4RTEwMDMwOTU2NiAv
KiBDYXB0dXJlRGV2aWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhcHR1
cmVEZXZpY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkU0MzQ2MzMwRjU0NkE4
MjAwQjBGMUJBIC8qIFdvcmtlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXb3JrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRTQzNDYzNDBG
NTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdvcmtlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRTQzNDYzNTBGNTQ2
QTgyMDBCMEYxQkEgLyogV29ya2VyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXb3JrZXIu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTUxMTksNiArMTUxMjUsOSBAQAog
CQkJCTA3MDU4NEZFMTdGOUYwNUUwMDVGMkJDQiAvKiBDYXBhYmlsaXR5UmFuZ2UuY3BwICovLAog
CQkJCTA3QzU5Qjc0MTdGN0QwOUQwMDBGQkNCQiAvKiBDYXBhYmlsaXR5UmFuZ2UuaCAqLywKIAkJ
CQkwN0M1OUI3NTE3RjdEMDlEMDAwRkJDQkIgLyogQ2FwYWJpbGl0eVJhbmdlLmlkbCAqLywKKwkJ
CQkyRTNDOEM2MTFCRkJBOERDMDAzMDk1NjYgLyogQ2FwdHVyZURldmljZU1hbmFnZXIuaCAqLywK
KwkJCQkyRTNDOEM2MzFCRkJCNzVEMDAzMDk1NjYgLyogQ2FwdHVyZURldmljZU1hbmFnZXIuY3Bw
ICovLAorCQkJCTJFM0M4QzY2MUJGQkY4RTEwMDMwOTU2NiAvKiBDYXB0dXJlRGV2aWNlLmggKi8s
CiAJCQkJMDczNzk0RUQxOUVFMzY0MjAwRTVBMDQ1IC8qIERPTVVSTE1lZGlhU3RyZWFtLmNwcCAq
LywKIAkJCQkxNUZDQzlGRDFCNERGODU2MDBFNzIzMjYgLyogRE9NVVJMTWVkaWFTdHJlYW0uaCAq
LywKIAkJCQkwNzM3OTRFRTE5RUUzNjQyMDBFNUEwNDUgLyogRE9NVVJMTWVkaWFTdHJlYW0uaWRs
ICovLApAQCAtMjY1ODcsNiArMjY1OTYsNyBAQAogCQkJCUJDRUZFMUVCMERDQTVGNjQwMDczOTIx
OSAvKiBKU1hTTFRQcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1MDMxQjQ0MEE0NEVG
QzcwMEY5OTJFMCAvKiBLZXlib2FyZEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUwMEQ1
OTE4MkRBQzhEMDAwODdERDcgLyogS2V5ZWRDb2RpbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCTJF
M0M4QzYyMUJGQkE5NzUwMDMwOTU2NiAvKiBDYXB0dXJlRGV2aWNlTWFuYWdlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTE3QTYzQzUxQjc0MzE4RjAwRTdEQ0RDIC8qIEtleWVkRGVjb2RlckNGLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MTdBNjNDNjFCNzQzMTkyMDBFN0RDREMgLyogS2V5ZWRFbmNv
ZGVyQ0YuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MTNCM0Q3MTE0QjE2NjYwMDFDNDI5QiAvKiBL
ZXlFdmVudENvY29hLmggaW4gSGVhZGVycyAqLywKQEAgLTI2NjcyLDYgKzI2NjgyLDcgQEAKIAkJ
CQlGQUJFNzJGOTEwNTlDMUVCMDBEOTk5REQgLyogTWF0aE1MTWF0aEVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQ0QTI4QUFGMTJERkI4QkYwMEFFOTIzQiAvKiBNYXRoTUxOYW1lcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkE2NTRBNkMxMTA4QUJFRDAwMjYxNUUwIC8qIE1hdGhNTFRleHRF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkyRTNDOEM2ODFCRkJGOEUxMDAzMDk1NjYgLyog
Q2FwdHVyZURldmljZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlENURDMkMwRjQyM0E3MzAwOEYy
MEZEIC8qIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0
OUU5MTFDNzBFRjg2RDQ3MDA5RDBDQUYgLyogTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1Q0JDOERBRDFBQUEzMDIyMDBFMUM4MDMgLyogTWVkaWFBY2Nlc3Np
YmlsaXR5U29mdExpbmsuaCBpbiBIZWFkZXJzICovLApAQCAtMzAzMzksNiArMzAzNTAsNyBAQAog
CQkJCUU0QjY1QTVBMTMyRkFBRjkwMDcwRTdCRSAvKiBMZWdhY3lUaWxlR3JpZC5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUU0MjRBM0EwMTMzMERGMUUwMENGNkRDOSAvKiBMZWdhY3lUaWxlR3JpZFRp
bGUubW0gaW4gU291cmNlcyAqLywKIAkJCQlFNEI2NUE1RTEzMkZBREI2MDA3MEU3QkUgLyogTGVn
YWN5VGlsZUxheWVyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMkUzQzhDNjQxQkZCQjc1RDAwMzA5
NTY2IC8qIENhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0RTM5
QUZEMTMzMEVGQzYwMDNBQjI3NCAvKiBMZWdhY3lUaWxlTGF5ZXJQb29sLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTE2NDVCNkExQjlGQTZDODAwRjc4OUNFIC8qIExlZ2FjeVRyYW5zYWN0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxNjQ1QjZDMUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lW
ZXJzaW9uQ2hhbmdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmlj
ZU1hbmFnZXIuaAppbmRleCBjYTkxYzQzMGQ3NGQ0YTU2NWRiZjYzMjhiMzYwZTM2OTcwZTBkZjU1
Li4zNDlhOTg4YzgwMDY4NzkxZmQ5MDBkZmFlYWE4NzI5YTM4M2E3N2M3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFu
YWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNh
cHR1cmVEZXZpY2VNYW5hZ2VyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkgJiYgVVNFKEFWRk9VTkRBVElPTikKIAorI2luY2x1ZGUgIkNhcHR1cmVEZXZpY2VNYW5h
Z2VyLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja1NvdXJjZXNSZXF1ZXN0Q2xpZW50Lmgi
CiAjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KQEAgLTQwLDM2ICs0MSwzNCBAQCBPQkpDX0NMQVNTIFdlYkNvcmVBVkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyT2JzZXJ2ZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ2FwdHVy
ZURldmljZTsKLQotY2xhc3MgQVZDYXB0dXJlRGV2aWNlTWFuYWdlciB7CitjbGFzcyBBVkNhcHR1
cmVEZXZpY2VNYW5hZ2VyIGZpbmFsIDogcHVibGljIENhcHR1cmVEZXZpY2VNYW5hZ2VyIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgQVZDYXB0dXJlRGV2aWNlTWFuYWdlciYgc2luZ2xldG9uKCk7Ci0g
ICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKKyAgICB2aXJ0dWFsIFZlY3RvcjxDYXB0dXJl
RGV2aWNlPiYgY2FwdHVyZURldmljZUxpc3QoKSBvdmVycmlkZTsKIAotICAgIFRyYWNrU291cmNl
SW5mb1ZlY3RvciBnZXRTb3VyY2VzSW5mbyhjb25zdCBTdHJpbmcmKTsKLSAgICBib29sIHZlcmlm
eUNvbnN0cmFpbnRzRm9yTWVkaWFUeXBlKEFWQ2FwdHVyZVNlc3Npb24gKiwgUmVhbHRpbWVNZWRp
YVNvdXJjZTo6VHlwZSwgTWVkaWFDb25zdHJhaW50cyosIFN0cmluZyYpOwotICAgIFZlY3RvcjxS
ZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4+IGJlc3RTb3VyY2VzRm9yVHlwZUFuZENvbnN0cmFp
bnRzKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50
cz4pOwotICAgIFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlPiBzb3VyY2VXaXRoVUlEKGNvbnN0
IFN0cmluZyYsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUsIE1lZGlhQ29uc3RyYWludHMqKTsK
KyAgICBzdGF0aWMgQVZDYXB0dXJlRGV2aWNlTWFuYWdlciYgc2luZ2xldG9uKCk7CisgICAgc3Rh
dGljIENhcHR1cmVTZXNzaW9uIHNlc3Npb25Gcm9tUGxhdGZvcm1TZXNzaW9uKEFWQ2FwdHVyZVNl
c3Npb24qKTsKKyAgICBzdGF0aWMgU3RyaW5nIHByZXNldFN0cmluZ0Zyb21DYXB0dXJlU2Vzc2lv
blByZXNldChDYXB0dXJlU2Vzc2lvblByZXNldCk7CiAKLSAgICBlbnVtIFZhbGlkQ29uc3RyYWlu
dHMgeyBXaWR0aCA9IDAsIEhlaWdodCwgRnJhbWVSYXRlLCBGYWNpbmdNb2RlLCBHYWluIH07Ci0g
ICAgc3RhdGljIGNvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiB2YWxpZENvbnN0cmFpbnROYW1l
cygpOwotICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgdmFsaWRGYWNpbmdN
b2RlcygpOworICAgIHZpcnR1YWwgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+IHNvdXJjZVdp
dGhVSUQoY29uc3QgU3RyaW5nJiBkZXZpY2VVSUQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUs
IE1lZGlhQ29uc3RyYWludHMqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFZlY3RvcjxSZWZQdHI8
UmVhbHRpbWVNZWRpYVNvdXJjZT4+IGJlc3RTb3VyY2VzRm9yVHlwZUFuZENvbnN0cmFpbnRzKFJl
YWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4pIG92
ZXJyaWRlOwogCi0gICAgc3RhdGljIGJvb2wgZGV2aWNlU3VwcG9ydHNGYWNpbmdNb2RlKEFWQ2Fw
dHVyZURldmljZSosIFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OlZpZGVvRmFjaW5nTW9kZSk7
Ci0gICAgc3RhdGljIGJvb2wgaXNWYWxpZENvbnN0cmFpbnQoUmVhbHRpbWVNZWRpYVNvdXJjZTo6
VHlwZSwgY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIFN0cmluZyBiZXN0U2Vzc2lvblByZXNl
dEZvclZpZGVvU2l6ZShBVkNhcHR1cmVTZXNzaW9uKiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsK
KyAgICB2aXJ0dWFsIFRyYWNrU291cmNlSW5mb1ZlY3RvciBnZXRTb3VyY2VzSW5mbyhjb25zdCBT
dHJpbmcmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgdmVyaWZ5Q29uc3RyYWludHNGb3JN
ZWRpYVR5cGUoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSwgTWVkaWFDb25zdHJhaW50cyosIGNv
bnN0IENhcHR1cmVTZXNzaW9uJiwgU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29s
IHZlcmlmeUNvbnN0cmFpbnRzRm9yTWVkaWFUeXBlKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUs
IE1lZGlhQ29uc3RyYWludHMqLCBTdHJpbmcmKSBvdmVycmlkZTsKIAotICAgIHZvaWQgcmVnaXN0
ZXJGb3JEZXZpY2VOb3RpZmljYXRpb25zKCk7CiAgICAgdm9pZCBkZXZpY2VDb25uZWN0ZWQoKTsK
ICAgICB2b2lkIGRldmljZURpc2Nvbm5lY3RlZChBVkNhcHR1cmVEZXZpY2UqKTsKIAogcHJvdGVj
dGVkOgorICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CisKICAgICBBVkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyKCk7Ci0gICAgfkFWQ2FwdHVyZURldmljZU1hbmFnZXIoKTsKKyAgICB2aXJ0dWFs
IH5BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBSZWFsdGlt
ZU1lZGlhU291cmNlKiBjcmVhdGVNZWRpYVNvdXJjZUZvckNhcHR1cmVEZXZpY2VXaXRoQ29uc3Ry
YWludHMoY29uc3QgQ2FwdHVyZURldmljZSYsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUsIE1l
ZGlhQ29uc3RyYWludHMqKSBvdmVycmlkZTsKIAotICAgIENhcHR1cmVEZXZpY2UqIGJlc3REZXZp
Y2VGb3JGYWNpbmdNb2RlKFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OlZpZGVvRmFjaW5nTW9k
ZSk7Ci0gICAgYm9vbCBzZXNzaW9uU3VwcG9ydHNDb25zdHJhaW50KEFWQ2FwdHVyZVNlc3Npb24q
LCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgdmFsdWUpOworICAgIHZvaWQgcmVnaXN0ZXJGb3JEZXZpY2VOb3RpZmljYXRpb25zKCk7
CisgICAgdm9pZCByZWZyZXNoQ2FwdHVyZURldmljZUxpc3QoKTsKKyAgICB2aXJ0dWFsIENhcHR1
cmVTZXNzaW9uIGRlZmF1bHRDYXB0dXJlU2Vzc2lvbigpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
UmV0YWluUHRyPFdlYkNvcmVBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyT2JzZXJ2ZXI+IG1fb2JqY09i
c2VydmVyOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIubW0KaW5kZXggMzhjYTJj
MWNlY2Q1M2EyOGQ2YjA0NGYyYzY2MjhlNTVhYmU3ZjU4Ny4uNGJmZjM4NmM4NzcyZDY3ODJjZjcx
ZmYxYmUwOWY1MDZiZjBhZTAxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIubW0K
QEAgLTg5LDg2ICs4OSw2NCBAQCBAZW5kCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGlj
IHZvaWQgcmVmcmVzaENhcHR1cmVEZXZpY2VMaXN0KCk7Ci0KLWNsYXNzIENhcHR1cmVEZXZpY2Ug
ewotcHVibGljOgotICAgIENhcHR1cmVEZXZpY2UoKQotICAgICAgICA6bV9lbmFibGVkKGZhbHNl
KQotICAgIHsKLSAgICB9Ci0KLSAgICBTdHJpbmcgbV9jYXB0dXJlRGV2aWNlSUQ7Ci0gICAgU3Ry
aW5nIG1fbG9jYWxpemVkTmFtZTsKLSAgICBTdHJpbmcgbV9ncm91cElEOwotCi0gICAgU3RyaW5n
IG1fYXVkaW9Tb3VyY2VJZDsKLSAgICBTdHJpbmcgbV92aWRlb1NvdXJjZUlkOwotCi0gICAgYm9v
bCBtX2VuYWJsZWQ7Ci19OwotCi1zdGF0aWMgVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBjYXB0dXJl
RGV2aWNlTGlzdCgpCitWZWN0b3I8Q2FwdHVyZURldmljZT4mIEFWQ2FwdHVyZURldmljZU1hbmFn
ZXI6OmNhcHR1cmVEZXZpY2VMaXN0KCkKIHsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNf
TE9DQUwoVmVjdG9yPENhcHR1cmVEZXZpY2U+LCBjYXB0dXJlRGV2aWNlTGlzdCwgKCkpOwogICAg
IHN0YXRpYyBib29sIGZpcnN0VGltZSA9IHRydWU7Ci0KLSAgICBpZiAoZmlyc3RUaW1lICYmICFj
YXB0dXJlRGV2aWNlTGlzdC5zaXplKCkpIHsKKyAgICBpZiAoZmlyc3RUaW1lICYmICFtX2Rldmlj
ZXMuc2l6ZSgpKSB7CiAgICAgICAgIGZpcnN0VGltZSA9IGZhbHNlOwogICAgICAgICByZWZyZXNo
Q2FwdHVyZURldmljZUxpc3QoKTsKLSAgICAgICAgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2lu
Z2xldG9uKCkucmVnaXN0ZXJGb3JEZXZpY2VOb3RpZmljYXRpb25zKCk7CisgICAgICAgIHJlZ2lz
dGVyRm9yRGV2aWNlTm90aWZpY2F0aW9ucygpOwogICAgIH0KIAotICAgIHJldHVybiBjYXB0dXJl
RGV2aWNlTGlzdDsKKyAgICByZXR1cm4gbV9kZXZpY2VzOwogfQogCi1zdGF0aWMgYm9vbCBjYXB0
dXJlRGV2aWNlRnJvbURldmljZUlEKGNvbnN0IFN0cmluZyYgY2FwdHVyZURldmljZUlELCBDYXB0
dXJlRGV2aWNlJiBzb3VyY2UpCitpbmxpbmUgc3RhdGljIGJvb2wgc2hvdWxkQ29uc2lkZXJEZXZp
Y2VJbkRldmljZUxpc3QoQVZDYXB0dXJlRGV2aWNlVHlwZSAqZGV2aWNlKQogewotICAgIFZlY3Rv
cjxDYXB0dXJlRGV2aWNlPiYgZGV2aWNlcyA9IGNhcHR1cmVEZXZpY2VMaXN0KCk7Ci0gICAgCi0g
ICAgc2l6ZV90IGNvdW50ID0gZGV2aWNlcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIGlmIChkZXZpY2VzW2ldLm1fY2FwdHVyZURldmlj
ZUlEID09IGNhcHR1cmVEZXZpY2VJRCkgewotICAgICAgICAgICAgc291cmNlID0gZGV2aWNlc1tp
XTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAg
IHJldHVybiBmYWxzZTsKLX0KKyAgICBpZiAoIVtkZXZpY2UgaXNDb25uZWN0ZWRdKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLXN0YXRpYyB2b2lkIHJlZnJlc2hDYXB0dXJlRGV2aWNlTGlzdCgp
Ci17Ci0gICAgVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBkZXZpY2VzID0gY2FwdHVyZURldmljZUxp
c3QoKTsKLSAgICAKLSAgICBmb3IgKEFWQ2FwdHVyZURldmljZVR5cGUgKmRldmljZSBpbiBbZ2V0
QVZDYXB0dXJlRGV2aWNlQ2xhc3MoKSBkZXZpY2VzXSkgewotICAgICAgICBDYXB0dXJlRGV2aWNl
IHNvdXJjZTsKKyNpZiAhUExBVEZPUk0oSU9TKQorICAgIGlmIChbZGV2aWNlIGlzU3VzcGVuZGVk
XSB8fCBbZGV2aWNlIGlzSW5Vc2VCeUFub3RoZXJBcHBsaWNhdGlvbl0pCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyNlbmRpZgogCi0gICAgICAgIGlmICghW2RldmljZSBpc0Nvbm5lY3RlZF0pCi0g
ICAgICAgICAgICBjb250aW51ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotI2lmICFQTEFURk9S
TShJT1MpCi0gICAgICAgIGlmIChbZGV2aWNlIGlzU3VzcGVuZGVkXSB8fCBbZGV2aWNlIGlzSW5V
c2VCeUFub3RoZXJBcHBsaWNhdGlvbl0pCit2b2lkIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnJl
ZnJlc2hDYXB0dXJlRGV2aWNlTGlzdCgpCit7CisgICAgZm9yIChBVkNhcHR1cmVEZXZpY2VUeXBl
ICpwbGF0Zm9ybURldmljZSBpbiBbZ2V0QVZDYXB0dXJlRGV2aWNlQ2xhc3MoKSBkZXZpY2VzXSkg
eworICAgICAgICBpZiAoIXNob3VsZENvbnNpZGVyRGV2aWNlSW5EZXZpY2VMaXN0KHBsYXRmb3Jt
RGV2aWNlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotI2VuZGlmCiAKLSAgICAgICAgaWYgKCFj
YXB0dXJlRGV2aWNlRnJvbURldmljZUlEKGRldmljZS51bmlxdWVJRCwgc291cmNlKSkgeworICAg
ICAgICBDYXB0dXJlRGV2aWNlIHNvdXJjZTsKKyAgICAgICAgaWYgKCFjYXB0dXJlRGV2aWNlRnJv
bURldmljZUlEKHBsYXRmb3JtRGV2aWNlLnVuaXF1ZUlELCBzb3VyY2UpKSB7CiAgICAgICAgICAg
ICAvLyBBbiBBVkNhcHR1cmVEZXZpY2UgaGFzIGEgdW5pcXVlIElELCBidXQgd2UgY2FuJ3QgdXNl
IGl0IGZvciB0aGUgc291cmNlIElEIGJlY2F1c2U6CiAgICAgICAgICAgICAvLyAxLiBpZiBpdCBw
cm92aWRlcyBib3RoIGF1ZGlvIGFuZCB2aWRlbyB3ZSB3aWxsIG5lZWQgdG8gY3JlYXRlIHR3byBz
b3VyY2VzIGZvciBpdAogICAgICAgICAgICAgLy8gMi4gdGhlIHVuaXF1ZSBJRCBwZXJzaXN0cyBv
biBvbmUgc3lzdGVtIGFjcm9zcyBkZXZpY2UgY29ubmVjdGlvbnMsIGRpc2Nvbm5lY3Rpb25zLAog
ICAgICAgICAgICAgLy8gICAgYXBwbGljYXRpb24gcmVzdGFydHMsIGFuZCByZWJvb3RzLCBzbyBp
dCBjb3VsZCBiZSB1c2VkIHRvIGZpZ2VycHJpbnQgYSB1c2VyLgotICAgICAgICAgICAgc291cmNl
Lm1fY2FwdHVyZURldmljZUlEID0gZGV2aWNlLnVuaXF1ZUlEOworICAgICAgICAgICAgc291cmNl
Lm1fY2FwdHVyZURldmljZUlEID0gcGxhdGZvcm1EZXZpY2UudW5pcXVlSUQ7CiAgICAgICAgICAg
ICBzb3VyY2UubV9lbmFibGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChbZGV2aWNlIGhhc01l
ZGlhVHlwZTpBVk1lZGlhVHlwZUF1ZGlvXSB8fCBbZGV2aWNlIGhhc01lZGlhVHlwZTpBVk1lZGlh
VHlwZU11eGVkXSkKKyAgICAgICAgICAgIGlmIChbcGxhdGZvcm1EZXZpY2UgaGFzTWVkaWFUeXBl
OkFWTWVkaWFUeXBlQXVkaW9dIHx8IFtwbGF0Zm9ybURldmljZSBoYXNNZWRpYVR5cGU6QVZNZWRp
YVR5cGVNdXhlZF0pCiAgICAgICAgICAgICAgICAgc291cmNlLm1fYXVkaW9Tb3VyY2VJZCA9IGNy
ZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKIAotICAgICAgICAgICAgaWYgKFtkZXZpY2UgaGFz
TWVkaWFUeXBlOkFWTWVkaWFUeXBlVmlkZW9dIHx8IFtkZXZpY2UgaGFzTWVkaWFUeXBlOkFWTWVk
aWFUeXBlTXV4ZWRdKQorICAgICAgICAgICAgaWYgKFtwbGF0Zm9ybURldmljZSBoYXNNZWRpYVR5
cGU6QVZNZWRpYVR5cGVWaWRlb10gfHwgW3BsYXRmb3JtRGV2aWNlIGhhc01lZGlhVHlwZTpBVk1l
ZGlhVHlwZU11eGVkXSkKICAgICAgICAgICAgICAgICBzb3VyY2UubV92aWRlb1NvdXJjZUlkID0g
Y3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOwogCiAgICAgICAgICAgICBzb3VyY2UubV9ncm91
cElEID0gY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOwotICAgICAgICAgICAgc291cmNlLm1f
bG9jYWxpemVkTmFtZSA9IGRldmljZS5sb2NhbGl6ZWROYW1lOwotCi0gICAgICAgICAgICBkZXZp
Y2VzLmFwcGVuZChzb3VyY2UpOworICAgICAgICAgICAgc291cmNlLm1fbG9jYWxpemVkTmFtZSA9
IHBsYXRmb3JtRGV2aWNlLmxvY2FsaXplZE5hbWU7CisgICAgICAgICAgICBpZiAoW3BsYXRmb3Jt
RGV2aWNlIGhhc01lZGlhVHlwZTpBVk1lZGlhVHlwZUF1ZGlvXSkKKyAgICAgICAgICAgICAgICBz
b3VyY2UubV9tZWRpYVR5cGVzID0gKENhcHR1cmVEZXZpY2VNZWRpYVR5cGUpIChzb3VyY2UubV9t
ZWRpYVR5cGVzIHwgQ2FwdHVyZURldmljZU1lZGlhVHlwZUF1ZGlvKTsKKyAgICAgICAgICAgIGlm
IChbcGxhdGZvcm1EZXZpY2UgaGFzTWVkaWFUeXBlOkFWTWVkaWFUeXBlTXV4ZWRdKQorICAgICAg
ICAgICAgICAgIHNvdXJjZS5tX21lZGlhVHlwZXMgPSAoQ2FwdHVyZURldmljZU1lZGlhVHlwZSkg
KHNvdXJjZS5tX21lZGlhVHlwZXMgfCBDYXB0dXJlRGV2aWNlTWVkaWFUeXBlTXV4ZWQpOworICAg
ICAgICAgICAgaWYgKFtwbGF0Zm9ybURldmljZSBoYXNNZWRpYVR5cGU6QVZNZWRpYVR5cGVWaWRl
b10pCisgICAgICAgICAgICAgICAgc291cmNlLm1fbWVkaWFUeXBlcyA9IChDYXB0dXJlRGV2aWNl
TWVkaWFUeXBlKSAoc291cmNlLm1fbWVkaWFUeXBlcyB8IENhcHR1cmVEZXZpY2VNZWRpYVR5cGVW
aWRlbyk7CisgICAgICAgICAgICBpZiAoW3BsYXRmb3JtRGV2aWNlIHBvc2l0aW9uXSA9PSBBVkNh
cHR1cmVEZXZpY2VQb3NpdGlvbkZyb250KQorICAgICAgICAgICAgICAgIHNvdXJjZS5tX3Bvc2l0
aW9uID0gQ2FwdHVyZURldmljZVBvc2l0aW9uOjpGcm9udDsKKyAgICAgICAgICAgIGlmIChbcGxh
dGZvcm1EZXZpY2UgcG9zaXRpb25dID09IEFWQ2FwdHVyZURldmljZVBvc2l0aW9uQmFjaykKKyAg
ICAgICAgICAgICAgICBzb3VyY2UubV9wb3NpdGlvbiA9IENhcHR1cmVEZXZpY2VQb3NpdGlvbjo6
QmFjazsKKyAgICAgICAgICAgIG1fZGV2aWNlcy5hcHBlbmQoc291cmNlKTsKICAgICAgICAgfQog
ICAgIH0KIH0KQEAgLTE4NCwyNzggKzE2MiwxMTkgQEAgQVZDYXB0dXJlRGV2aWNlTWFuYWdlciYg
QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCkKICAgICByZXR1cm4gbWFuYWdlcjsK
IH0KIAotQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6QVZDYXB0dXJlRGV2aWNlTWFuYWdlcigpCi0g
ICAgOiBtX29iamNPYnNlcnZlcihhZG9wdE5TKFtbV2ViQ29yZUFWQ2FwdHVyZURldmljZU1hbmFn
ZXJPYnNlcnZlciBhbGxvY10gaW5pdFdpdGhDYWxsYmFjazp0aGlzXSkpCi17Ci19Ci0KLUFWQ2Fw
dHVyZURldmljZU1hbmFnZXI6On5BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyKCkKK0NhcHR1cmVTZXNz
aW9uIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNlc3Npb25Gcm9tUGxhdGZvcm1TZXNzaW9uKEFW
Q2FwdHVyZVNlc3Npb25UeXBlKiBwbGF0Zm9ybVNlc3Npb24pCiB7Ci0gICAgW1tOU05vdGlmaWNh
dGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX29iamNPYnNlcnZlci5n
ZXQoKV07Ci0gICAgW21fb2JqY09ic2VydmVyIGRpc2Nvbm5lY3RdOworICAgIENhcHR1cmVTZXNz
aW9uIHNlc3Npb247CisgICAgaWYgKFtwbGF0Zm9ybVNlc3Npb24gY2FuU2V0U2Vzc2lvblByZXNl
dDpBVkNhcHR1cmVTZXNzaW9uUHJlc2V0TG93XSkKKyAgICAgICAgc2Vzc2lvbi5tX3N1cHBvcnRl
ZFByZXNldHMgPSAoQ2FwdHVyZVNlc3Npb25QcmVzZXQpIChzZXNzaW9uLm1fc3VwcG9ydGVkUHJl
c2V0cyB8IENhcHR1cmVTZXNzaW9uUHJlc2V0TG93KTsKKyAgICBpZiAoW3BsYXRmb3JtU2Vzc2lv
biBjYW5TZXRTZXNzaW9uUHJlc2V0OkFWQ2FwdHVyZVNlc3Npb25QcmVzZXQzNTJ4Mjg4XSkKKyAg
ICAgICAgc2Vzc2lvbi5tX3N1cHBvcnRlZFByZXNldHMgPSAoQ2FwdHVyZVNlc3Npb25QcmVzZXQp
IChzZXNzaW9uLm1fc3VwcG9ydGVkUHJlc2V0cyB8IENhcHR1cmVTZXNzaW9uUHJlc2V0MzUyeDI4
OCk7CisgICAgaWYgKFtwbGF0Zm9ybVNlc3Npb24gY2FuU2V0U2Vzc2lvblByZXNldDpBVkNhcHR1
cmVTZXNzaW9uUHJlc2V0NjQweDQ4MF0pCisgICAgICAgIHNlc3Npb24ubV9zdXBwb3J0ZWRQcmVz
ZXRzID0gKENhcHR1cmVTZXNzaW9uUHJlc2V0KSAoc2Vzc2lvbi5tX3N1cHBvcnRlZFByZXNldHMg
fCBDYXB0dXJlU2Vzc2lvblByZXNldDY0MHg0ODApOworICAgIGlmIChbcGxhdGZvcm1TZXNzaW9u
IGNhblNldFNlc3Npb25QcmVzZXQ6QVZDYXB0dXJlU2Vzc2lvblByZXNldDEyODB4NzIwXSkKKyAg
ICAgICAgc2Vzc2lvbi5tX3N1cHBvcnRlZFByZXNldHMgPSAoQ2FwdHVyZVNlc3Npb25QcmVzZXQp
IChzZXNzaW9uLm1fc3VwcG9ydGVkUHJlc2V0cyB8IENhcHR1cmVTZXNzaW9uUHJlc2V0MTI4MHg3
MjApOworICAgIHJldHVybiBzZXNzaW9uOwogfQogCi1TdHJpbmcgQVZDYXB0dXJlRGV2aWNlTWFu
YWdlcjo6YmVzdFNlc3Npb25QcmVzZXRGb3JWaWRlb1NpemUoQVZDYXB0dXJlU2Vzc2lvblR5cGUg
KmNhcHR1cmVTZXNzaW9uLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCitTdHJpbmcgQVZDYXB0dXJl
RGV2aWNlTWFuYWdlcjo6cHJlc2V0U3RyaW5nRnJvbUNhcHR1cmVTZXNzaW9uUHJlc2V0KENhcHR1
cmVTZXNzaW9uUHJlc2V0IHByZXNldCkKIHsKLSAgICBBU1NFUlQod2lkdGggPj0gMCk7Ci0gICAg
QVNTRVJUKGhlaWdodCA+PSAwKTsKLSAgICAKLSAgICBpZiAod2lkdGggPiAxMjgwIHx8IGhlaWdo
dCA+IDcyMCkKLSAgICAgICAgLy8gRklYTUU6IHRoaXMgcmVzdHJpY3Rpb24gY291bGQgYmUgYWRq
dXN0ZWQgd2l0aCB0aGUgdmlkZW9NYXhTY2FsZUFuZENyb3BGYWN0b3IgcHJvcGVydHkuCisgICAg
c3dpdGNoIChwcmVzZXQpIHsKKyAgICBjYXNlIENhcHR1cmVTZXNzaW9uUHJlc2V0Tm9uZToKICAg
ICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgCi0gICAgaWYgKHdpZHRoID4gNjQwIHx8
IGhlaWdodCA+IDQ4MCkgewotICAgICAgICBpZiAoIVtjYXB0dXJlU2Vzc2lvbiBjYW5TZXRTZXNz
aW9uUHJlc2V0OkFWQ2FwdHVyZVNlc3Npb25QcmVzZXQxMjgweDcyMF0pCi0gICAgICAgICAgICBl
bXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm4gQVZDYXB0dXJlU2Vzc2lvblByZXNldDEyODB4
NzIwOwotICAgIH0KLSAgICAKLSAgICBpZiAod2lkdGggPiAzNTIgfHwgaGVpZ2h0ID4gMjg4KSB7
Ci0gICAgICAgIGlmICghW2NhcHR1cmVTZXNzaW9uIGNhblNldFNlc3Npb25QcmVzZXQ6QVZDYXB0
dXJlU2Vzc2lvblByZXNldDY0MHg0ODBdKQotICAgICAgICAgICAgZW1wdHlTdHJpbmcoKTsKKyAg
ICBjYXNlIENhcHR1cmVTZXNzaW9uUHJlc2V0TG93OgorICAgICAgICByZXR1cm4gQVZDYXB0dXJl
U2Vzc2lvblByZXNldExvdzsKKyAgICBjYXNlIENhcHR1cmVTZXNzaW9uUHJlc2V0MzUyeDI4ODoK
KyAgICAgICAgcmV0dXJuIEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQzNTJ4Mjg4OworICAgIGNhc2Ug
Q2FwdHVyZVNlc3Npb25QcmVzZXQ2NDB4NDgwOgogICAgICAgICByZXR1cm4gQVZDYXB0dXJlU2Vz
c2lvblByZXNldDY0MHg0ODA7CisgICAgY2FzZSBDYXB0dXJlU2Vzc2lvblByZXNldDEyODB4NzIw
OgorICAgICAgICByZXR1cm4gQVZDYXB0dXJlU2Vzc2lvblByZXNldDEyODB4NzIwOwogICAgIH0K
LSAgICAKLSAgICBpZiAoW2NhcHR1cmVTZXNzaW9uIGNhblNldFNlc3Npb25QcmVzZXQ6QVZDYXB0
dXJlU2Vzc2lvblByZXNldDM1MngyODhdKQotICAgICAgICByZXR1cm4gQVZDYXB0dXJlU2Vzc2lv
blByZXNldDM1MngyODg7Ci0gICAgCi0gICAgaWYgKFtjYXB0dXJlU2Vzc2lvbiBjYW5TZXRTZXNz
aW9uUHJlc2V0OkFWQ2FwdHVyZVNlc3Npb25QcmVzZXRMb3ddKQotICAgICAgICByZXR1cm4gQVZD
YXB0dXJlU2Vzc2lvblByZXNldExvdzsKLSAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAotYm9vbCBBVkNhcHR1cmVEZXZpY2VNYW5h
Z2VyOjpkZXZpY2VTdXBwb3J0c0ZhY2luZ01vZGUoQVZDYXB0dXJlRGV2aWNlVHlwZSAqZGV2aWNl
LCBSZWFsdGltZU1lZGlhU291cmNlU3RhdGVzOjpWaWRlb0ZhY2luZ01vZGUgZmFjaW5nTW9kZSkK
K0FWQ2FwdHVyZURldmljZU1hbmFnZXI6OkFWQ2FwdHVyZURldmljZU1hbmFnZXIoKQorICAgIDog
bV9vYmpjT2JzZXJ2ZXIoYWRvcHROUyhbW1dlYkNvcmVBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyT2Jz
ZXJ2ZXIgYWxsb2NdIGluaXRXaXRoQ2FsbGJhY2s6IHRoaXNdKSkKIHsKLSAgICBpZiAoIVtkZXZp
Y2UgaGFzTWVkaWFUeXBlOkFWTWVkaWFUeXBlVmlkZW9dKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgCi0gICAgc3dpdGNoIChmYWNpbmdNb2RlKSB7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlh
U291cmNlU3RhdGVzOjpVc2VyOgotICAgICAgICBpZiAoW2RldmljZSBwb3NpdGlvbl0gPT0gQVZD
YXB0dXJlRGV2aWNlUG9zaXRpb25Gcm9udCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OkVudmlyb25t
ZW50OgotICAgICAgICBpZiAoW2RldmljZSBwb3NpdGlvbl0gPT0gQVZDYXB0dXJlRGV2aWNlUG9z
aXRpb25CYWNrKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6TGVmdDoKLSAgICBjYXNlIFJlYWx0aW1l
TWVkaWFTb3VyY2VTdGF0ZXM6OlJpZ2h0OgotICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZVN0
YXRlczo6VW5rbm93bjoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLUNhcHR1cmVEZXZpY2UqIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6
OmJlc3REZXZpY2VGb3JGYWNpbmdNb2RlKFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OlZpZGVv
RmFjaW5nTW9kZSBmYWNpbmdNb2RlKQorQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6fkFWQ2FwdHVy
ZURldmljZU1hbmFnZXIoKQogewotICAgIFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYgZGV2aWNlcyA9
IGNhcHR1cmVEZXZpY2VMaXN0KCk7Ci0gICAgCi0gICAgc2l6ZV90IGNvdW50ID0gZGV2aWNlcy5z
aXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAg
IEFWQ2FwdHVyZURldmljZVR5cGUgKmRldmljZSA9IFtnZXRBVkNhcHR1cmVEZXZpY2VDbGFzcygp
IGRldmljZVdpdGhVbmlxdWVJRDpkZXZpY2VzW2ldLm1fY2FwdHVyZURldmljZUlEXTsKLSAgICAg
ICAgQVNTRVJUKGRldmljZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoZGV2aWNlICYmIGRldmlj
ZVN1cHBvcnRzRmFjaW5nTW9kZShkZXZpY2UsIGZhY2luZ01vZGUpKQotICAgICAgICAgICAgcmV0
dXJuICZkZXZpY2VzW2ldOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gMDsKKyAgICBbW05TTm90
aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOm1fb2JqY09ic2Vy
dmVyLmdldCgpXTsKKyAgICBbbV9vYmpjT2JzZXJ2ZXIgZGlzY29ubmVjdF07CiB9CiAKLWJvb2wg
QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2Vzc2lvblN1cHBvcnRzQ29uc3RyYWludChBVkNhcHR1
cmVTZXNzaW9uVHlwZSAqc2Vzc2lvbiwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSB0eXBlLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCitWZWN0b3I8UmVmUHRyPFJl
YWx0aW1lTWVkaWFTb3VyY2U+PiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpiZXN0U291cmNlc0Zv
clR5cGVBbmRDb25zdHJhaW50cyhSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUsIFBhc3NS
ZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gY29uc3RyYWludHMpCiB7Ci0gICAgc2l6ZV90IGNvbnN0
cmFpbnQgPSB2YWxpZENvbnN0cmFpbnROYW1lcygpLmZpbmQobmFtZSk7Ci0gICAgaWYgKGNvbnN0
cmFpbnQgPT0gbm90Rm91bmQpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIHN3aXRj
aCAoY29uc3RyYWludCkgewotICAgIGNhc2UgV2lkdGg6Ci0gICAgICAgIGlmICh0eXBlID09IFJl
YWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlvKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIHJldHVybiAhYmVzdFNlc3Npb25QcmVzZXRGb3JWaWRlb1NpemUoc2Vzc2lvbiwgdmFs
dWUudG9JbnQoKSwgMCkuaXNFbXB0eSgpOwotICAgIGNhc2UgSGVpZ2h0OgotICAgICAgICBpZiAo
dHlwZSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpBdWRpbykKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICByZXR1cm4gIWJlc3RTZXNzaW9uUHJlc2V0Rm9yVmlkZW9TaXplKHNl
c3Npb24sIDAsIHZhbHVlLnRvSW50KCkpLmlzRW1wdHkoKTsKLSAgICBjYXNlIEZyYW1lUmF0ZTog
ewotICAgICAgICBpZiAodHlwZSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpBdWRpbykKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIC8vIEl0IHdvdWxkIG1ha2Ug
c2Vuc2UgdG8gdXNlIFtBVkNhcHR1cmVDb25uZWN0aW9uIHZpZGVvTWluRnJhbWVEdXJhdGlvbl0g
YW5kCi0gICAgICAgIC8vIFtBVkNhcHR1cmVDb25uZWN0aW9uIHZpZGVvTWF4RnJhbWVEdXJhdGlv
bl0sIGJ1dCB0aGV5IG9ubHkgd29yayB3aXRoIGEgImxpdmUiIEFWQ2FwdHVyZUNvbm5lY3Rpb24u
Ci0gICAgICAgIGZsb2F0IHJhdGUgPSB2YWx1ZS50b0Zsb2F0KCk7Ci0gICAgICAgIHJldHVybiBy
YXRlID4gMCAmJiByYXRlIDw9IDYwOwotICAgIH0KLSAgICBjYXNlIEdhaW46IHsKLSAgICAgICAg
aWYgKHR5cGUgIT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW8pCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBmbG9hdCBsZXZlbCA9IHZhbHVlLnRvRmxvYXQo
KTsKLSAgICAgICAgcmV0dXJuIGxldmVsID4gMCAmJiBsZXZlbCA8PSAxOwotICAgIH0KLSAgICBj
YXNlIEZhY2luZ01vZGU6IHsKLSAgICAgICAgaWYgKHR5cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJj
ZTo6QXVkaW8pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgc2l6ZV90IGZh
Y2luZ01vZGUgPSAgdmFsaWRGYWNpbmdNb2RlcygpLmZpbmQodmFsdWUpOwotICAgICAgICBpZiAo
ZmFjaW5nTW9kZSAhPSBub3RGb3VuZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgcmV0dXJuIGJlc3REZXZpY2VGb3JGYWNpbmdNb2RlKHN0YXRpY19jYXN0PFJlYWx0aW1lTWVk
aWFTb3VyY2VTdGF0ZXM6OlZpZGVvRmFjaW5nTW9kZT4oZmFjaW5nTW9kZSkpOwotICAgIH0KLSAg
ICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghaXNBdmFpbGFibGUoKSkKKyAg
ICAgICAgcmV0dXJuIFZlY3RvcjxSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4+KCk7CisKKyAg
ICByZXR1cm4gQ2FwdHVyZURldmljZU1hbmFnZXI6OmJlc3RTb3VyY2VzRm9yVHlwZUFuZENvbnN0
cmFpbnRzKHR5cGUsIGNvbnN0cmFpbnRzKTsKIH0KIAotYm9vbCBBVkNhcHR1cmVEZXZpY2VNYW5h
Z2VyOjppc1ZhbGlkQ29uc3RyYWludChSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUsIGNv
bnN0IFN0cmluZyYgbmFtZSkKK1JlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlPiBBVkNhcHR1cmVE
ZXZpY2VNYW5hZ2VyOjpzb3VyY2VXaXRoVUlEKGNvbnN0IFN0cmluZyYgZGV2aWNlVUlELCBSZWFs
dGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUsIE1lZGlhQ29uc3RyYWludHMqIGNvbnN0cmFpbnRz
KQogewotICAgIHNpemVfdCBjb25zdHJhaW50ID0gdmFsaWRDb25zdHJhaW50TmFtZXMoKS5maW5k
KG5hbWUpOwotICAgIGlmIChjb25zdHJhaW50ID09IG5vdEZvdW5kKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoY29uc3RyYWludCA9PSBHYWluKQotICAgICAgICByZXR1cm4gdHlw
ZSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpBdWRpbzsKKyAgICBpZiAoIWlzQXZhaWxhYmxlKCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJu
IENhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzb3VyY2VXaXRoVUlEKGRldmljZVVJRCwgdHlwZSwgY29u
c3RyYWludHMpOwogfQogCi1WZWN0b3I8UmVmUHRyPFRyYWNrU291cmNlSW5mbz4+IEFWQ2FwdHVy
ZURldmljZU1hbmFnZXI6OmdldFNvdXJjZXNJbmZvKGNvbnN0IFN0cmluZyYgcmVxdWVzdE9yaWdp
bikKK1RyYWNrU291cmNlSW5mb1ZlY3RvciBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpnZXRTb3Vy
Y2VzSW5mbyhjb25zdCBTdHJpbmcmIHJlcXVlc3RPcmlnaW4pCiB7Ci0gICAgVU5VU0VEX1BBUkFN
KHJlcXVlc3RPcmlnaW4pOwotICAgIFZlY3RvcjxSZWZQdHI8VHJhY2tTb3VyY2VJbmZvPj4gc291
cmNlc0luZm87Ci0KICAgICBpZiAoIWlzQXZhaWxhYmxlKCkpCi0gICAgICAgIHJldHVybiBzb3Vy
Y2VzSW5mbzsKLQotICAgIFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYgZGV2aWNlcyA9IGNhcHR1cmVE
ZXZpY2VMaXN0KCk7Ci0gICAgZm9yIChhdXRvIGNhcHR1cmVEZXZpY2UgOiBkZXZpY2VzKSB7Ci0K
LSAgICAgICAgaWYgKCFjYXB0dXJlRGV2aWNlLm1fZW5hYmxlZCkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIGlmICghY2FwdHVyZURldmljZS5tX3ZpZGVvU291cmNlSWQuaXNFbXB0
eSgpKQotICAgICAgICAgICAgc291cmNlc0luZm8uYXBwZW5kKFRyYWNrU291cmNlSW5mbzo6Y3Jl
YXRlKGNhcHR1cmVEZXZpY2UubV92aWRlb1NvdXJjZUlkLCBUcmFja1NvdXJjZUluZm86OlZpZGVv
LCBjYXB0dXJlRGV2aWNlLm1fbG9jYWxpemVkTmFtZSwgY2FwdHVyZURldmljZS5tX2dyb3VwSUQp
KTsKLSAgICAgICAgaWYgKCFjYXB0dXJlRGV2aWNlLm1fYXVkaW9Tb3VyY2VJZC5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICBzb3VyY2VzSW5mby5hcHBlbmQoVHJhY2tTb3VyY2VJbmZvOjpjcmVhdGUo
Y2FwdHVyZURldmljZS5tX2F1ZGlvU291cmNlSWQsIFRyYWNrU291cmNlSW5mbzo6QXVkaW8sIGNh
cHR1cmVEZXZpY2UubV9sb2NhbGl6ZWROYW1lLCBjYXB0dXJlRGV2aWNlLm1fZ3JvdXBJRCkpOwot
ICAgIH0KLQotICAgIExPRyhNZWRpYSwgIkFWQ2FwdHVyZURldmljZU1hbmFnZXI6OmdldFNvdXJj
ZXNJbmZvKCVwKSwgZm91bmQgJWQgYWN0aXZlIGRldmljZXMiLCB0aGlzLCBzb3VyY2VzSW5mby5z
aXplKCkpOwotCi0gICAgcmV0dXJuIHNvdXJjZXNJbmZvOworICAgICAgICByZXR1cm4gVHJhY2tT
b3VyY2VJbmZvVmVjdG9yKCk7CisgICAgCisgICAgcmV0dXJuIENhcHR1cmVEZXZpY2VNYW5hZ2Vy
OjpnZXRTb3VyY2VzSW5mbyhyZXF1ZXN0T3JpZ2luKTsKIH0KIAotYm9vbCBBVkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyOjp2ZXJpZnlDb25zdHJhaW50c0Zvck1lZGlhVHlwZShBVkNhcHR1cmVTZXNzaW9u
VHlwZSAqc2Vzc2lvbiwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSB0eXBlLCBNZWRpYUNvbnN0
cmFpbnRzKiBjb25zdHJhaW50cywgU3RyaW5nJiBpbnZhbGlkQ29uc3RyYWludCkKK2Jvb2wgQVZD
YXB0dXJlRGV2aWNlTWFuYWdlcjo6dmVyaWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5cGUoUmVhbHRp
bWVNZWRpYVNvdXJjZTo6VHlwZSB0eXBlLCBNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cywg
Y29uc3QgQ2FwdHVyZVNlc3Npb24mIHNlc3Npb24sIFN0cmluZyYgaW52YWxpZENvbnN0cmFpbnQp
CiB7CiAgICAgaWYgKCFpc0F2YWlsYWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBpZiAoIWNvbnN0cmFpbnRzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFZlY3RvcjxN
ZWRpYUNvbnN0cmFpbnQ+IG1hbmRhdG9yeUNvbnN0cmFpbnRzOwotICAgIGNvbnN0cmFpbnRzLT5n
ZXRNYW5kYXRvcnlDb25zdHJhaW50cyhtYW5kYXRvcnlDb25zdHJhaW50cyk7Ci0gICAgaWYgKG1h
bmRhdG9yeUNvbnN0cmFpbnRzLnNpemUoKSkgewotCi0gICAgICAgIFJldGFpblB0cjxBVkNhcHR1
cmVTZXNzaW9uVHlwZT4gY2FwdHVyZVNlc3Npb24gPSBzZXNzaW9uID8gc2Vzc2lvbiA6IGFkb3B0
TlMoW2FsbG9jQVZDYXB0dXJlU2Vzc2lvbkluc3RhbmNlKCkgaW5pdF0pOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1hbmRhdG9yeUNvbnN0cmFpbnRzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgICAgICBjb25zdCBNZWRpYUNvbnN0cmFpbnQmIGNvbnN0cmFpbnQgPSBtYW5kYXRvcnlD
b25zdHJhaW50c1tpXTsKLSAgICAgICAgICAgIGlmICghc2Vzc2lvblN1cHBvcnRzQ29uc3RyYWlu
dChjYXB0dXJlU2Vzc2lvbi5nZXQoKSwgdHlwZSwgY29uc3RyYWludC5tX25hbWUsIGNvbnN0cmFp
bnQubV92YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICBpbnZhbGlkQ29uc3RyYWludCA9IGNvbnN0
cmFpbnQubV9uYW1lOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBDYXB0
dXJlRGV2aWNlTWFuYWdlcjo6dmVyaWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5cGUodHlwZSwgY29u
c3RyYWludHMsIHNlc3Npb24sIGludmFsaWRDb25zdHJhaW50KTsKIH0KIAotVmVjdG9yPFJlZlB0
cjxSZWFsdGltZU1lZGlhU291cmNlPj4gQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6YmVzdFNvdXJj
ZXNGb3JUeXBlQW5kQ29uc3RyYWludHMoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSB0eXBlLCBQ
YXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IGNvbnN0cmFpbnRzKQorYm9vbCBBVkNhcHR1cmVE
ZXZpY2VNYW5hZ2VyOjp2ZXJpZnlDb25zdHJhaW50c0Zvck1lZGlhVHlwZShSZWFsdGltZU1lZGlh
U291cmNlOjpUeXBlIHR5cGUsIE1lZGlhQ29uc3RyYWludHMqIGNvbnN0cmFpbnRzLCBTdHJpbmcm
IGludmFsaWRDb25zdHJhaW50KQogewotICAgIFZlY3RvcjxSZWZQdHI8UmVhbHRpbWVNZWRpYVNv
dXJjZT4+IGJlc3RTb3VyY2VzTGlzdDsKLSAgICAKICAgICBpZiAoIWlzQXZhaWxhYmxlKCkpCi0g
ICAgICAgIHJldHVybiBiZXN0U291cmNlc0xpc3Q7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKLSAgICBzdHJ1Y3QgewotICAgICAgICBib29sIG9wZXJhdG9yKCkoUmVmUHRyPFJlYWx0aW1l
TWVkaWFTb3VyY2U+IGEsIFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlPiBiKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gYS0+Zml0bmVzc1Njb3JlKCkgPCBiLT5maXRuZXNzU2NvcmUo
KTsKLSAgICAgICAgfQotICAgIH0gc29ydEJhc2VkT2ZmRml0bmVzc1Njb3JlOwotCi0gICAgVmVj
dG9yPENhcHR1cmVEZXZpY2U+JiBkZXZpY2VzID0gY2FwdHVyZURldmljZUxpc3QoKTsKLQotICAg
IGZvciAoYXV0byYgY2FwdHVyZURldmljZSA6IGRldmljZXMpIHsKLSAgICAgICAgaWYgKCFjYXB0
dXJlRGV2aWNlLm1fZW5hYmxlZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlm
ICh0eXBlID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlvICYmICFjYXB0dXJlRGV2aWNlLm1f
YXVkaW9Tb3VyY2VJZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxSZWFsdGltZU1l
ZGlhU291cmNlPiBjYXB0dXJlU291cmNlID0gQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c291cmNl
V2l0aFVJRChjYXB0dXJlRGV2aWNlLm1fY2FwdHVyZURldmljZUlELCBSZWFsdGltZU1lZGlhU291
cmNlOjpBdWRpbywgY29uc3RyYWludHMuZ2V0KCkpOwotICAgICAgICAgICAgaWYgKCFjYXB0dXJl
U291cmNlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBiZXN0U291
cmNlc0xpc3QuYXBwZW5kKGNhcHR1cmVTb3VyY2UubGVha1JlZigpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmICh0eXBlID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlZpZGVvICYmICFjYXB0dXJl
RGV2aWNlLm1fdmlkZW9Tb3VyY2VJZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxS
ZWFsdGltZU1lZGlhU291cmNlPiBjYXB0dXJlU291cmNlID0gQVZDYXB0dXJlRGV2aWNlTWFuYWdl
cjo6c291cmNlV2l0aFVJRChjYXB0dXJlRGV2aWNlLm1fY2FwdHVyZURldmljZUlELCBSZWFsdGlt
ZU1lZGlhU291cmNlOjpWaWRlbywgY29uc3RyYWludHMuZ2V0KCkpOwotICAgICAgICAgICAgaWYg
KCFjYXB0dXJlU291cmNlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAg
ICBiZXN0U291cmNlc0xpc3QuYXBwZW5kKGNhcHR1cmVTb3VyY2UubGVha1JlZigpKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBzdGQ6OnNvcnQoYmVzdFNvdXJjZXNMaXN0LmJlZ2luKCksIGJlc3RT
b3VyY2VzTGlzdC5lbmQoKSwgc29ydEJhc2VkT2ZmRml0bmVzc1Njb3JlKTsKLSAgICByZXR1cm4g
YmVzdFNvdXJjZXNMaXN0OworICAgIHJldHVybiBDYXB0dXJlRGV2aWNlTWFuYWdlcjo6dmVyaWZ5
Q29uc3RyYWludHNGb3JNZWRpYVR5cGUodHlwZSwgY29uc3RyYWludHMsIGludmFsaWRDb25zdHJh
aW50KTsKIH0KIAotUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+IEFWQ2FwdHVyZURldmljZU1h
bmFnZXI6OnNvdXJjZVdpdGhVSUQoY29uc3QgU3RyaW5nJiBkZXZpY2VVSUQsIFJlYWx0aW1lTWVk
aWFTb3VyY2U6OlR5cGUgdHlwZSwgTWVkaWFDb25zdHJhaW50cyogY29uc3RyYWludHMpCitDYXB0
dXJlU2Vzc2lvbiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpkZWZhdWx0Q2FwdHVyZVNlc3Npb24o
KSBjb25zdAogewotICAgIGlmICghaXNBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBWZWN0b3I8Q2FwdHVyZURldmljZT4mIGRldmljZXMgPSBjYXB0dXJlRGV2aWNlTGlzdCgp
OwotICAgIGZvciAoYXV0byYgY2FwdHVyZURldmljZSA6IGRldmljZXMpIHsKLSAgICAgICAgaWYg
KGNhcHR1cmVEZXZpY2UubV9jYXB0dXJlRGV2aWNlSUQgIT0gZGV2aWNlVUlEIHx8ICFjYXB0dXJl
RGV2aWNlLm1fZW5hYmxlZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmICh0
eXBlID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlvICYmIGNhcHR1cmVEZXZpY2UubV9hdWRp
b1NvdXJjZUlkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAo
dHlwZSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpWaWRlbyAmJiBjYXB0dXJlRGV2aWNlLm1fdmlk
ZW9Tb3VyY2VJZC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBB
VkNhcHR1cmVEZXZpY2VUeXBlICpkZXZpY2UgPSBbZ2V0QVZDYXB0dXJlRGV2aWNlQ2xhc3MoKSBk
ZXZpY2VXaXRoVW5pcXVlSUQ6Y2FwdHVyZURldmljZS5tX2NhcHR1cmVEZXZpY2VJRF07Ci0gICAg
ICAgIEFTU0VSVChkZXZpY2UpOwotCi0gICAgICAgIFJlZlB0cjxBVk1lZGlhQ2FwdHVyZVNvdXJj
ZT4gY2FwdHVyZVNvdXJjZTsKLSAgICAgICAgaWYgKHR5cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJj
ZTo6QXVkaW8pCi0gICAgICAgICAgICBjYXB0dXJlU291cmNlID0gQVZBdWRpb0NhcHR1cmVTb3Vy
Y2U6OmNyZWF0ZShkZXZpY2UsIGNhcHR1cmVEZXZpY2UubV9hdWRpb1NvdXJjZUlkLCBjb25zdHJh
aW50cyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhcHR1cmVTb3VyY2UgPSBBVlZpZGVv
Q2FwdHVyZVNvdXJjZTo6Y3JlYXRlKGRldmljZSwgY2FwdHVyZURldmljZS5tX3ZpZGVvU291cmNl
SWQsIGNvbnN0cmFpbnRzKTsKLQotICAgICAgICBpZiAoY29uc3RyYWludHMpIHsKLSAgICAgICAg
ICAgIFN0cmluZyBpbnZhbGlkQ29uc3RyYWludHM7Ci0gICAgICAgICAgICBBVkNhcHR1cmVTZXNz
aW9uVHlwZSAqc2Vzc2lvbiA9IG5pbDsKLQotICAgICAgICAgICAgaWYgKHR5cGUgPT0gUmVhbHRp
bWVNZWRpYVNvdXJjZTo6VmlkZW8pCi0gICAgICAgICAgICAgICAgc2Vzc2lvbiA9IGNhcHR1cmVT
b3VyY2UtPnNlc3Npb24oKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6QXVkaW8pCi0gICAgICAgICAgICAgICAgc2Vzc2lvbiA9IGNhcHR1cmVTb3Vy
Y2UtPnNlc3Npb24oKTsKLSAgICAgICAgICAgIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmds
ZXRvbigpLnZlcmlmeUNvbnN0cmFpbnRzRm9yTWVkaWFUeXBlKHNlc3Npb24sIHR5cGUsIGNvbnN0
cmFpbnRzLCBpbnZhbGlkQ29uc3RyYWludHMpOworICAgIC8vIEZJWE1FOiBJIGRvbid0IGtub3cg
aWYgaXQncyBzYWZlIHRvIHVzZSBhIHN0YXRpYyB2YXIgaGVyZSwgc2luY2UgdGhlIHN0YXRlIG9m
IGEgbmV3bHkKKyAgICAvLyBpbml0aWFsaXplZCBBVkNhcHR1cmVTZXNzaW9uIG1heSBiZSBkaWZm
ZXJlbnQuIElmIG5vdCwgdGhpcyBzaG91bGQgYmUgc3RhdGljIGFuZCB1c2UgYQorICAgIC8vIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxDYXB0dXJlU2Vzc2lvbj4uCisgICAgcmV0dXJuIHNlc3Npb25G
cm9tUGxhdGZvcm1TZXNzaW9uKFthbGxvY0FWQ2FwdHVyZVNlc3Npb25JbnN0YW5jZSgpIGluaXRd
KTsKK30KIAotICAgICAgICAgICAgaWYgKCFpbnZhbGlkQ29uc3RyYWludHMuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBy
ZXR1cm4gY2FwdHVyZVNvdXJjZS5sZWFrUmVmKCk7CitSZWFsdGltZU1lZGlhU291cmNlKiBBVkNh
cHR1cmVEZXZpY2VNYW5hZ2VyOjpjcmVhdGVNZWRpYVNvdXJjZUZvckNhcHR1cmVEZXZpY2VXaXRo
Q29uc3RyYWludHMoY29uc3QgQ2FwdHVyZURldmljZSYgY2FwdHVyZURldmljZSwgUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6VHlwZSB0eXBlLCBNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cykKK3sK
KyAgICBBVkNhcHR1cmVEZXZpY2VUeXBlICpkZXZpY2UgPSBbZ2V0QVZDYXB0dXJlRGV2aWNlQ2xh
c3MoKSBkZXZpY2VXaXRoVW5pcXVlSUQ6Y2FwdHVyZURldmljZS5tX2NhcHR1cmVEZXZpY2VJRF07
CisgICAgQVNTRVJUKGRldmljZSk7CisgICAgUmVmUHRyPEFWTWVkaWFDYXB0dXJlU291cmNlPiBj
YXB0dXJlU291cmNlOworICAgIGlmICh0eXBlID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlv
KQorICAgICAgICBjYXB0dXJlU291cmNlID0gQVZBdWRpb0NhcHR1cmVTb3VyY2U6OmNyZWF0ZShk
ZXZpY2UsIGNhcHR1cmVEZXZpY2UubV9hdWRpb1NvdXJjZUlkLCBjb25zdHJhaW50cyk7CisgICAg
ZWxzZQorICAgICAgICBjYXB0dXJlU291cmNlID0gQVZWaWRlb0NhcHR1cmVTb3VyY2U6OmNyZWF0
ZShkZXZpY2UsIGNhcHR1cmVEZXZpY2UubV92aWRlb1NvdXJjZUlkLCBjb25zdHJhaW50cyk7CisK
KyAgICBpZiAoY29uc3RyYWludHMpIHsKKyAgICAgICAgU3RyaW5nIGludmFsaWRDb25zdHJhaW50
czsKKyAgICAgICAgLy8gRklYTUU6IFRvIHByZXNlcnZlIGJlaGF2aW9yLCBlbnN1cmUgdGhhdCBh
IG5ld2x5IGluaXRpYWxpemVkIENhcHR1cmVTZXNzaW9uCisgICAgICAgIENhcHR1cmVTZXNzaW9u
IGNhcHR1cmVTZXNzaW9uID0gZGVmYXVsdENhcHR1cmVTZXNzaW9uKCk7CisgICAgICAgIGlmICh0
eXBlICE9IFJlYWx0aW1lTWVkaWFTb3VyY2U6Ok5vbmUpCisgICAgICAgICAgICBjYXB0dXJlU2Vz
c2lvbiA9IHNlc3Npb25Gcm9tUGxhdGZvcm1TZXNzaW9uKGNhcHR1cmVTb3VyY2UtPnNlc3Npb24o
KSk7CisKKyAgICAgICAgdmVyaWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5cGUodHlwZSwgY29uc3Ry
YWludHMsIGNhcHR1cmVTZXNzaW9uLCBpbnZhbGlkQ29uc3RyYWludHMpOworICAgICAgICBpZiAo
IWludmFsaWRDb25zdHJhaW50cy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG51bGxwdHI7Ci0KKyAgICByZXR1cm4gY2FwdHVy
ZVNvdXJjZS5sZWFrUmVmKCk7CiB9CiAKIHZvaWQgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6cmVn
aXN0ZXJGb3JEZXZpY2VOb3RpZmljYXRpb25zKCkKQEAgLTQ4Niw0MCArMzA1LDYgQEAgdm9pZCBB
VkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpkZXZpY2VEaXNjb25uZWN0ZWQoQVZDYXB0dXJlRGV2aWNl
VHlwZSogZGV2aWNlKQogICAgIH0KIH0KIAotY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIEFW
Q2FwdHVyZURldmljZU1hbmFnZXI6OnZhbGlkQ29uc3RyYWludE5hbWVzKCkKLXsKLSAgICBERVBS
RUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPEF0b21pY1N0cmluZz4sIGNvbnN0cmFp
bnRzLCAoKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gaGVpZ2h0
Q29uc3RyYWludCgiaGVpZ2h0IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gd2lkdGhDb25zdHJhaW50
KCJ3aWR0aCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGZyYW1lUmF0ZUNvbnN0cmFpbnQoImZyYW1l
UmF0ZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGZhY2luZ01vZGVDb25zdHJhaW50KCJmYWNpbmdN
b2RlIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZ2FpbkNvbnN0cmFpbnQoImdhaW4iLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAKLSAgICBpZiAoIWNvbnN0cmFpbnRz
LnNpemUoKSkgewotICAgICAgICBjb25zdHJhaW50cy5pbnNlcnQoV2lkdGgsIHdpZHRoQ29uc3Ry
YWludCk7Ci0gICAgICAgIGNvbnN0cmFpbnRzLmluc2VydChIZWlnaHQsIGhlaWdodENvbnN0cmFp
bnQpOwotICAgICAgICBjb25zdHJhaW50cy5pbnNlcnQoRnJhbWVSYXRlLCBmcmFtZVJhdGVDb25z
dHJhaW50KTsKLSAgICAgICAgY29uc3RyYWludHMuaW5zZXJ0KEZhY2luZ01vZGUsIGZhY2luZ01v
ZGVDb25zdHJhaW50KTsKLSAgICAgICAgY29uc3RyYWludHMuaW5zZXJ0KEdhaW4sIGdhaW5Db25z
dHJhaW50KTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGNvbnN0cmFpbnRzOwotfQotCi1jb25z
dCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6dmFsaWRGYWNp
bmdNb2RlcygpCi17Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKFZlY3RvcjxB
dG9taWNTdHJpbmc+LCBtb2RlcywgKCkpOwotICAgIAotICAgIGlmICghbW9kZXMuc2l6ZSgpKSB7
Ci0gICAgICAgIG1vZGVzLmluc2VydChSZWFsdGltZU1lZGlhU291cmNlU3RhdGVzOjpVc2VyLCBS
ZWFsdGltZU1lZGlhU291cmNlU3RhdGVzOjpmYWNpbmdNb2RlKFJlYWx0aW1lTWVkaWFTb3VyY2VT
dGF0ZXM6OlVzZXIpKTsKLSAgICAgICAgbW9kZXMuaW5zZXJ0KFJlYWx0aW1lTWVkaWFTb3VyY2VT
dGF0ZXM6OkVudmlyb25tZW50LCBSZWFsdGltZU1lZGlhU291cmNlU3RhdGVzOjpmYWNpbmdNb2Rl
KFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OkVudmlyb25tZW50KSk7Ci0gICAgICAgIG1vZGVz
Lmluc2VydChSZWFsdGltZU1lZGlhU291cmNlU3RhdGVzOjpMZWZ0LCBSZWFsdGltZU1lZGlhU291
cmNlU3RhdGVzOjpmYWNpbmdNb2RlKFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OkxlZnQpKTsK
LSAgICAgICAgbW9kZXMuaW5zZXJ0KFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OlJpZ2h0LCBS
ZWFsdGltZU1lZGlhU291cmNlU3RhdGVzOjpmYWNpbmdNb2RlKFJlYWx0aW1lTWVkaWFTb3VyY2VT
dGF0ZXM6OlJpZ2h0KSk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBtb2RlczsKLX0KLQogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiBAaW1wbGVtZW50YXRpb24gV2ViQ29yZUFWQ2FwdHVyZURl
dmljZU1hbmFnZXJPYnNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLm1tCmluZGV4IDlh
OGYzMTA0MTU4NWVjNGEwYWMwZGIxZTg5ZDI5MWU5NzMxY2UxNmYuLmQ3ZjlhNTFkMzNlNTIzZmI1
NTA5Y2UyZDkxM2Q0N2M5YTgyODYzNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVTb3VyY2UubW0K
QEAgLTE3OSw3ICsxNzksNyBAQCBib29sIEFWVmlkZW9DYXB0dXJlU291cmNlOjphcHBseUNvbnN0
cmFpbnRzKE1lZGlhQ29uc3RyYWludHMqIGNvbnN0cmFpbnRzKQogewogICAgIEFTU0VSVChjb25z
dHJhaW50cyk7CiAKLSAgICBjb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgY29uc3RyYWludE5h
bWVzID0gQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6dmFsaWRDb25zdHJhaW50TmFtZXMoKTsKKyAg
ICBjb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgY29uc3RyYWludE5hbWVzID0gQVZDYXB0dXJl
RGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCkudmFsaWRDb25zdHJhaW50TmFtZXMoKTsKICAgICBT
dHJpbmcgd2lkdGhDb25zdHJhaW50OwogICAgIFN0cmluZyBoZWlnaHRDb25zdHJhaW50OwogCkBA
IC0xOTYsNyArMTk2LDkgQEAgYm9vbCBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6YXBwbHlDb25zdHJh
aW50cyhNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cykKICAgICB9CiAgICAgCiAgICAgaWYg
KHdpZHRoIHx8IGhlaWdodCkgewotICAgICAgICBOU1N0cmluZyAqcHJlc2V0ID0gQVZDYXB0dXJl
RGV2aWNlTWFuYWdlcjo6YmVzdFNlc3Npb25QcmVzZXRGb3JWaWRlb1NpemUoc2Vzc2lvbigpLCB3
aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgQ2FwdHVyZVNlc3Npb24gY2FwdHVyZVNlc3Npb24gPSBB
VkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzZXNzaW9uRnJvbVBsYXRmb3JtU2Vzc2lvbihzZXNzaW9u
KCkpOworICAgICAgICBDYXB0dXJlU2Vzc2lvblByZXNldCBjYXB0dXJlU2Vzc2lvblByZXNldCA9
IEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmdsZXRvbigpLmJlc3RTZXNzaW9uUHJlc2V0Rm9y
VmlkZW9TaXplKGNhcHR1cmVTZXNzaW9uLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgTlNTdHJp
bmcgKnByZXNldCA9IEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnByZXNldFN0cmluZ0Zyb21DYXB0
dXJlU2Vzc2lvblByZXNldChjYXB0dXJlU2Vzc2lvblByZXNldCk7CiAgICAgICAgIGlmICghcHJl
c2V0IHx8ICFbc2Vzc2lvbigpIGNhblNldFNlc3Npb25QcmVzZXQ6cHJlc2V0XSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVNZWRpYVNv
dXJjZUNlbnRlck1hYy5jcHAKaW5kZXggZGM4ZjdhYWI3NWYwMTg4YjA0NTRlNjdmZjA1MmZlNGI2
M2MzODIyYy4uYmJlZjhmZmFjODE4OTRiYjJhOGM3YmEyMzAxMzYyMTBhOWUwYmI5NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXJNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmNwcApAQCAtNjUsNyArNjUs
NyBAQCB2b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWM6OnZhbGlkYXRlUmVxdWVzdENv
bnN0cmFpbnRzKE1lZGlhU3RyZWFtQ3JlYXRpbwogCiAgICAgaWYgKGF1ZGlvQ29uc3RyYWludHMp
IHsKICAgICAgICAgU3RyaW5nIGludmFsaWRDb25zdHJhaW50OwotICAgICAgICBBVkNhcHR1cmVE
ZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24oKS52ZXJpZnlDb25zdHJhaW50c0Zvck1lZGlhVHlwZShu
aWwsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlvLCBhdWRpb0NvbnN0cmFpbnRzLmdldCgpLCBp
bnZhbGlkQ29uc3RyYWludCk7CisgICAgICAgIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmds
ZXRvbigpLnZlcmlmeUNvbnN0cmFpbnRzRm9yTWVkaWFUeXBlKFJlYWx0aW1lTWVkaWFTb3VyY2U6
OkF1ZGlvLCBhdWRpb0NvbnN0cmFpbnRzLmdldCgpLCBpbnZhbGlkQ29uc3RyYWludCk7CiAgICAg
ICAgIGlmICghaW52YWxpZENvbnN0cmFpbnQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBjbGll
bnQtPmNvbnN0cmFpbnRzSW52YWxpZChpbnZhbGlkQ29uc3RyYWludCk7CiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC03Niw3ICs3Niw3IEBAIHZvaWQgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1h
Yzo6dmFsaWRhdGVSZXF1ZXN0Q29uc3RyYWludHMoTWVkaWFTdHJlYW1DcmVhdGlvCiAKICAgICBp
ZiAodmlkZW9Db25zdHJhaW50cykgewogICAgICAgICBTdHJpbmcgaW52YWxpZENvbnN0cmFpbnQ7
Ci0gICAgICAgIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmdsZXRvbigpLnZlcmlmeUNvbnN0
cmFpbnRzRm9yTWVkaWFUeXBlKG5pbCwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VmlkZW8sIHZpZGVv
Q29uc3RyYWludHMuZ2V0KCksIGludmFsaWRDb25zdHJhaW50KTsKKyAgICAgICAgQVZDYXB0dXJl
RGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCkudmVyaWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5cGUo
UmVhbHRpbWVNZWRpYVNvdXJjZTo6VmlkZW8sIHZpZGVvQ29uc3RyYWludHMuZ2V0KCksIGludmFs
aWRDb25zdHJhaW50KTsKICAgICAgICAgaWYgKCFpbnZhbGlkQ29uc3RyYWludC5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgIGNsaWVudC0+Y29uc3RyYWludHNJbnZhbGlkKGludmFsaWRDb25zdHJh
aW50KTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBSZWFsdGlt
ZU1lZGlhU291cmNlQ2VudGVyTWFjOjpjcmVhdGVNZWRpYVN0cmVhbShQYXNzUmVmUHRyPE1lZGlh
U3RyZWFtQ3JlYXQKICAgICAKICAgICBpZiAoYXVkaW9Db25zdHJhaW50cykgewogICAgICAgICBT
dHJpbmcgaW52YWxpZENvbnN0cmFpbnQ7Ci0gICAgICAgIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6
OnNpbmdsZXRvbigpLnZlcmlmeUNvbnN0cmFpbnRzRm9yTWVkaWFUeXBlKG5pbCwgUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6QXVkaW8sIGF1ZGlvQ29uc3RyYWludHMuZ2V0KCksIGludmFsaWRDb25zdHJh
aW50KTsKKyAgICAgICAgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCkudmVyaWZ5
Q29uc3RyYWludHNGb3JNZWRpYVR5cGUoUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW8sIGF1ZGlv
Q29uc3RyYWludHMuZ2V0KCksIGludmFsaWRDb25zdHJhaW50KTsKICAgICAgICAgaWYgKCFpbnZh
bGlkQ29uc3RyYWludC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGNsaWVudC0+ZmFpbGVkVG9D
cmVhdGVTdHJlYW1XaXRoQ29uc3RyYWludHNFcnJvcihpbnZhbGlkQ29uc3RyYWludCk7CiAgICAg
ICAgICAgICByZXR1cm47CkBAIC0xMTMsNyArMTEzLDcgQEAgdm9pZCBSZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyTWFjOjpjcmVhdGVNZWRpYVN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3Jl
YXQKICAgICAKICAgICBpZiAodmlkZW9Db25zdHJhaW50cykgewogICAgICAgICBTdHJpbmcgaW52
YWxpZENvbnN0cmFpbnQ7Ci0gICAgICAgIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmdsZXRv
bigpLnZlcmlmeUNvbnN0cmFpbnRzRm9yTWVkaWFUeXBlKG5pbCwgUmVhbHRpbWVNZWRpYVNvdXJj
ZTo6VmlkZW8sIHZpZGVvQ29uc3RyYWludHMuZ2V0KCksIGludmFsaWRDb25zdHJhaW50KTsKKyAg
ICAgICAgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCkudmVyaWZ5Q29uc3RyYWlu
dHNGb3JNZWRpYVR5cGUoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VmlkZW8sIHZpZGVvQ29uc3RyYWlu
dHMuZ2V0KCksIGludmFsaWRDb25zdHJhaW50KTsKICAgICAgICAgaWYgKCFpbnZhbGlkQ29uc3Ry
YWludC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGNsaWVudC0+ZmFpbGVkVG9DcmVhdGVTdHJl
YW1XaXRoQ29uc3RyYWludHNFcnJvcihpbnZhbGlkQ29uc3RyYWludCk7CiAgICAgICAgICAgICBy
ZXR1cm47Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266149</attachid>
            <date>2015-11-25 01:42:20 -0800</date>
            <delta_ts>2015-11-30 10:14:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151388-20151125014203.patch</filename>
            <type>text/plain</type>
            <size>71113</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyNzI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDRmZDc1NjhjY2Y1Mzlj
NzFmMGNjMGMyMDkzNjZjY2UzNTlmMTg4ZS4uMTFhMTg1NTRmYmNiMGRlN2Q4NWRhMjZjYzJiNjZk
ZjgyZWVkNDgwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDE1LTExLTI1ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0IHBsYXRm
b3JtLWluZGVwZW5kZW50IGxvZ2ljIGluIEFWQ2FwdHVyZURldmljZU1hbmFnZXIgb3V0IGludG8g
YSBuZXcgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1MTM4OAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjM1OTM5ODA+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVG8gcHJlcGFyZSBmb3IgY3Jl
YXRpbmcgYSBNb2NrQ2FwdHVyZURldmljZU1hbmFnZXIgdG8gYmUgYWJsZSB0byB0ZXN0CisgICAg
ICAgIE1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEsIHdlIGNyZWF0ZSBhIHBsYXRmb3JtLWluZGVw
ZW5kZW50IGNhcHR1cmUgZGV2aWNlIG1hbmFnZXIKKyAgICAgICAgd2hpY2ggQVZDYXB0dXJlRGV2
aWNlTWFuYWdlciBzaG91bGQgZXh0ZW5kIGFuZCBhZGQgcGxhdGZvcm0gbG9naWMgdG8uCisKKyAg
ICAgICAgVGhlIG1ldGhvZHMgQ2FwdHVyZURldmljZU1hbmFnZXI6OmNyZWF0ZU1lZGlhU291cmNl
Rm9yQ2FwdHVyZURldmljZVdpdGhDb25zdHJhaW50cyBhbmQKKyAgICAgICAgQ2FwdHVyZURldmlj
ZU1hbmFnZXI6OmNhcHR1cmVEZXZpY2VMaXN0IHNob3VsZCBiZSBvdmVycmlkZGVuIGJ5IGVhY2gg
cGxhdGZvcm0KKyAgICAgICAgQ2FwdHVyZURldmljZU1hbmFnZXIgdG8gcmVzcGVjdGl2ZWx5IGNy
ZWF0ZSBhIFJlYWx0aW1lTWVkaWFTb3VyY2UgYW5kIHJldHVybiBhIGxpc3Qgb2YKKyAgICAgICAg
Y2FwdHVyZSBkZXZpY2VzLiBjcmVhdGVNZWRpYVNvdXJjZUZvckNhcHR1cmVEZXZpY2VXaXRoQ29u
c3RyYWludHMgYXR0ZW1wdHMgdG8gY3JlYXRlCisgICAgICAgIGEgbWVkaWEgc291cmNlIGZvciBh
IGdpdmVuIGRldmljZSB3aXRoIHNvbWUgY29uc3RyYWludHM7IGlmIHRoZSBjb250cmFpbnRzIGNh
bm5vdCBiZQorICAgICAgICBzYXRpc2ZpZWQsIHRoaXMgcmV0dXJucyBudWxsLgorCisgICAgICAg
IFRoZSByZWZhY3RvcmVkIGNhcHR1cmUgZGV2aWNlIG1hbmFnZXIgYWxzbyBpbnRyb2R1Y2VzIHRo
ZSBub3Rpb24gb2YgYSBwbGF0Zm9ybS0KKyAgICAgICAgaW5kZXBlbmRlbnQgY2FwdHVyZSBzZXNz
aW9uIHdoaWNoIG1heSBiZSBleHRlbmRlZCBieSBwbGF0Zm9ybSBkZXZpY2UgbWFuYWdlcnMgZm9y
CisgICAgICAgIGRldGVybWluaW5nIHdoZXRoZXIgYSBnaXZlbiBjb25zdHJhaW50IG5hbWUsIHZh
bHVlIGFuZCBtZWRpYSB0eXBlIGlzIHZhbGlkLgorCisgICAgICAgIEEgcGxhdGZvcm0taW5kZXBl
bmRlbnQgQ2FwdHVyZURldmljZUluZm8gbm93IHJlcHJlc2VudHMgZWl0aGVyIHRoZSB2aWRlbyBv
ciBhdWRpbworICAgICAgICBjb21wb25lbnQgb2YgYSBjYXB0dXJlIGRldmljZSwgYnV0IG5vdCBi
b3RoIGF0IG9uY2UuIFRoaXMgbWVhbnMgYSB3ZWJjYW0gdGhhdCBzdXBwb3J0cworICAgICAgICBi
b3RoIHZpZGVvIGFuZCBhdWRpbyB3aWxsIGVtaXQgdHdvIHNlcGFyYXRlIGNhcHR1cmUgZGV2aWNl
cy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHNpbmNlIHRoZXJlIHNob3VsZCBiZSBubyBiZWhh
dmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL0NhcHR1cmVEZXZp
Y2VJbmZvLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FwdHVyZVNlc3Npb25JbmZvOjp+
Q2FwdHVyZVNlc3Npb25JbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkNhcHR1cmVTZXNzaW9uSW5m
bzo6c3VwcG9ydHNWaWRlb1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FwdHVyZVNlc3Npb25J
bmZvOjpiZXN0U2Vzc2lvblByZXNldEZvclZpZGVvRGltZW5zaW9ucyk6CisgICAgICAgICogTW9k
dWxlcy9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlTWFuYWdlci5jcHA6IEFkZGVkLgorICAgICAg
ICAoQ2FwdHVyZURldmljZU1hbmFnZXI6On5DYXB0dXJlRGV2aWNlTWFuYWdlcik6CisgICAgICAg
IChDYXB0dXJlRGV2aWNlTWFuYWdlcjo6Z2V0U291cmNlc0luZm8pOgorICAgICAgICAoQ2FwdHVy
ZURldmljZU1hbmFnZXI6OmNhcHR1cmVEZXZpY2VGcm9tRGV2aWNlSUQpOgorICAgICAgICAoQ2Fw
dHVyZURldmljZU1hbmFnZXI6OnZlcmlmeUNvbnN0cmFpbnRzRm9yTWVkaWFUeXBlKToKKyAgICAg
ICAgKENhcHR1cmVEZXZpY2VNYW5hZ2VyOjpiZXN0U291cmNlc0ZvclR5cGVBbmRDb25zdHJhaW50
cyk6CisgICAgICAgIChDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c291cmNlV2l0aFVJRCk6CisgICAg
ICAgIChDYXB0dXJlRGV2aWNlTWFuYWdlcjo6YmVzdERldmljZUZvckZhY2luZ01vZGUpOgorICAg
ICAgICAoZmFjaW5nTW9kZUZyb21TdHJpbmcpOgorICAgICAgICAoQ2FwdHVyZURldmljZU1hbmFn
ZXI6OnNlc3Npb25TdXBwb3J0c0NvbnN0cmFpbnQpOgorICAgICAgICAoQ2FwdHVyZURldmljZU1h
bmFnZXI6OmlzU3VwcG9ydGVkRnJhbWVSYXRlKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3Ry
ZWFtL0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2Fw
dHVyZURldmljZU1hbmFnZXI6OnJlZnJlc2hDYXB0dXJlRGV2aWNlTGlzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDYXB0dXJlRGV2aWNlTWFuYWdlcjo6ZGVmYXVsdENhcHR1cmVTZXNzaW9uKToKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxh
dGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRz
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlU3VwcG9y
dGVkQ29uc3RyYWludHM6Om5hbWVGb3JDb25zdHJhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50czo6Y29uc3RyYWludEZyb21OYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJh
aW50czo6c3VwcG9ydHNDb25zdHJhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVh
bS9SZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6QVZDYXB0dXJlU2Vzc2lvbkluZm86OkFWQ2FwdHVyZVNlc3Npb25J
bmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkFWQ2FwdHVyZVNlc3Npb25JbmZvOjpzdXBwb3J0c1Zp
ZGVvU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpBVkNhcHR1cmVTZXNzaW9uSW5mbzo6YmVzdFNl
c3Npb25QcmVzZXRGb3JWaWRlb0RpbWVuc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6QVZDYXB0
dXJlRGV2aWNlTWFuYWdlcjo6Y2FwdHVyZURldmljZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6
c2hvdWxkQ29uc2lkZXJEZXZpY2VJbkRldmljZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6QVZD
YXB0dXJlRGV2aWNlTWFuYWdlcjo6cmVmcmVzaENhcHR1cmVEZXZpY2VMaXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFWQ2FwdHVyZURldmljZU1hbmFnZXI6OkFWQ2FwdHVyZURldmljZU1hbmFnZXIp
OgorICAgICAgICAoV2ViQ29yZTo6QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6YmVzdFNvdXJjZXNG
b3JUeXBlQW5kQ29uc3RyYWludHMpOgorICAgICAgICAoV2ViQ29yZTo6QVZDYXB0dXJlRGV2aWNl
TWFuYWdlcjo6c291cmNlV2l0aFVJRCk6CisgICAgICAgIChXZWJDb3JlOjpBVkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyOjpnZXRTb3VyY2VzSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpBVkNhcHR1cmVE
ZXZpY2VNYW5hZ2VyOjp2ZXJpZnlDb25zdHJhaW50c0Zvck1lZGlhVHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpkZWZhdWx0Q2FwdHVyZVNlc3Npb24pOgor
ICAgICAgICAoV2ViQ29yZTo6QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2Vzc2lvblN1cHBvcnRz
Q29uc3RyYWludCk6CisgICAgICAgIChXZWJDb3JlOjpBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpj
cmVhdGVNZWRpYVNvdXJjZUZvckNhcHR1cmVEZXZpY2VXaXRoQ29uc3RyYWludHMpOgorICAgICAg
ICAoV2ViQ29yZTo6QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6ZGV2aWNlRGlzY29ubmVjdGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkFWQ2FwdHVyZURldmljZU1hbmFnZXI6OmlzU3VwcG9ydGVkRnJh
bWVSYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhcHR1cmVEZXZpY2U6OjptX2VuYWJsZWQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2FwdHVyZURldmljZUxpc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Y2FwdHVyZURldmljZUZyb21EZXZpY2VJRCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpyZWZyZXNoQ2FwdHVyZURldmljZUxpc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6YmVzdFNlc3Npb25QcmVzZXRG
b3JWaWRlb1NpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QVZDYXB0dXJlRGV2aWNl
TWFuYWdlcjo6ZGV2aWNlU3VwcG9ydHNGYWNpbmdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkFWQ2FwdHVyZURldmljZU1hbmFnZXI6OmJlc3REZXZpY2VGb3JGYWNpbmdNb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFWQ2FwdHVyZURldmljZU1hbmFnZXI6OmlzVmFs
aWRDb25zdHJhaW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFWQ2FwdHVyZURldmlj
ZU1hbmFnZXI6OnZhbGlkQ29uc3RyYWludE5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnZhbGlkRmFjaW5nTW9kZXMpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5t
bToKKyAgICAgICAgKFdlYkNvcmU6OkFWVmlkZW9DYXB0dXJlU291cmNlOjphcHBseUNvbnN0cmFp
bnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVNZWRpYVNv
dXJjZUNlbnRlck1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyTWFjOjp2YWxpZGF0ZVJlcXVlc3RDb25zdHJhaW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjOjpjcmVhdGVNZWRpYVN0cmVhbSk6CisKIDIw
MTUtMTEtMjEgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAg
ICAgICBUaW55IGNsZWFudXAgaW4gQ29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxl
eFRleHRSdW5zKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vQ2FwdHVyZURldmljZUluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vQ2FwdHVyZURldmljZUluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YjM4YTY2NmRmNDUwNGE3NmIwZDI1
NGFlZWJjODRhYmU0YTE2YTBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlSW5mby5oCkBAIC0wLDAgKzEsNTkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENhcHR1
cmVEZXZpY2VJbmZvX2gKKyNkZWZpbmUgQ2FwdHVyZURldmljZUluZm9faAorCisjaWYgRU5BQkxF
KE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgPFJlYWx0aW1lTWVkaWFTb3VyY2UuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1
Y3QgQ2FwdHVyZURldmljZUluZm8geworICAgIFN0cmluZyBtX3BlcnNpc3RlbnREZXZpY2VJRDsK
KyAgICBTdHJpbmcgbV9sb2NhbGl6ZWROYW1lOworICAgIFN0cmluZyBtX2dyb3VwSUQ7CisKKyAg
ICBTdHJpbmcgbV9zb3VyY2VJZDsKKworICAgIGJvb2wgbV9lbmFibGVkIHsgZmFsc2UgfTsKKyAg
ICBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIG1fc291cmNlVHlwZSB7IFJlYWx0aW1lTWVkaWFT
b3VyY2U6Ok5vbmUgfTsKKyAgICBSZWFsdGltZU1lZGlhU291cmNlU3RhdGVzOjpWaWRlb0ZhY2lu
Z01vZGUgbV9wb3NpdGlvbiB7IFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OlVua25vd24gfTsK
K307CisKK2NsYXNzIENhcHR1cmVTZXNzaW9uSW5mbyB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+
Q2FwdHVyZVNlc3Npb25JbmZvKCkgeyB9CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzVmlkZW9T
aXplKGNvbnN0IFN0cmluZyYgLyogdmlkZW9TaXplICovKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorICAgIHZpcnR1YWwgU3RyaW5nIGJlc3RTZXNzaW9uUHJlc2V0Rm9yVmlkZW9EaW1lbnNpb25z
KGludCAvKiB3aWR0aCAqLywgaW50IC8qIGhlaWdodCAqLykgY29uc3QgeyByZXR1cm4gZW1wdHlT
dHJpbmcoKTsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKE1FRElBX1NUUkVBTSkKKworI2VuZGlmIC8qIENhcHR1cmVEZXZpY2VJbmZvX2ggKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vQ2FwdHVyZURldmlj
ZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9DYXB0dXJl
RGV2aWNlTWFuYWdlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGQ5MTZiN2QyNmZhYmJhOTgzMDU1MmFjZTZm
MGE0NzhlZTcyOGY1NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsMTk1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJDYXB0dXJlRGV2aWNlTWFuYWdlci5oIgorCisjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKKworI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTWVkaWFDb25zdHJh
aW50cy5oIgorI2ltcG9ydCAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgorI2ltcG9ydCAiUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlci5oIgorI2ltcG9ydCAiUmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRl
cy5oIgorI2ltcG9ydCAiVVVJRC5oIgorI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KKyNpbXBv
cnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
Q2FwdHVyZURldmljZU1hbmFnZXI6On5DYXB0dXJlRGV2aWNlTWFuYWdlcigpCit7Cit9CisKK1Zl
Y3RvcjxSZWZQdHI8VHJhY2tTb3VyY2VJbmZvPj4gQ2FwdHVyZURldmljZU1hbmFnZXI6OmdldFNv
dXJjZXNJbmZvKGNvbnN0IFN0cmluZyYgcmVxdWVzdE9yaWdpbikKK3sKKyAgICBVTlVTRURfUEFS
QU0ocmVxdWVzdE9yaWdpbik7CisgICAgVmVjdG9yPFJlZlB0cjxUcmFja1NvdXJjZUluZm8+PiBz
b3VyY2VzSW5mbzsKKyAgICBmb3IgKGF1dG8gY2FwdHVyZURldmljZSA6IGNhcHR1cmVEZXZpY2VM
aXN0KCkpIHsKKyAgICAgICAgaWYgKCFjYXB0dXJlRGV2aWNlLm1fZW5hYmxlZCB8fCBjYXB0dXJl
RGV2aWNlLm1fc291cmNlVHlwZSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpOb25lKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgVHJhY2tTb3VyY2VJbmZvOjpTb3VyY2VLaW5kIHRy
YWNrU291cmNlVHlwZSA9IGNhcHR1cmVEZXZpY2UubV9zb3VyY2VUeXBlID09IFJlYWx0aW1lTWVk
aWFTb3VyY2U6OlZpZGVvID8gVHJhY2tTb3VyY2VJbmZvOjpWaWRlbyA6IFRyYWNrU291cmNlSW5m
bzo6QXVkaW87CisgICAgICAgIHNvdXJjZXNJbmZvLmFwcGVuZChUcmFja1NvdXJjZUluZm86OmNy
ZWF0ZShjYXB0dXJlRGV2aWNlLm1fc291cmNlSWQsIHRyYWNrU291cmNlVHlwZSwgY2FwdHVyZURl
dmljZS5tX2xvY2FsaXplZE5hbWUsIGNhcHR1cmVEZXZpY2UubV9ncm91cElEKSk7CisgICAgfQor
ICAgIExPRyhNZWRpYSwgIkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpnZXRTb3VyY2VzSW5mbyglcCks
IGZvdW5kICV6dSBhY3RpdmUgZGV2aWNlcyIsIHRoaXMsIHNvdXJjZXNJbmZvLnNpemUoKSk7Cisg
ICAgcmV0dXJuIHNvdXJjZXNJbmZvOworfQorCitib29sIENhcHR1cmVEZXZpY2VNYW5hZ2VyOjpj
YXB0dXJlRGV2aWNlRnJvbURldmljZUlEKGNvbnN0IFN0cmluZyYgY2FwdHVyZURldmljZUlELCBD
YXB0dXJlRGV2aWNlSW5mbyYgZm91bmREZXZpY2UpCit7CisgICAgZm9yIChhdXRvJiBkZXZpY2Ug
OiBjYXB0dXJlRGV2aWNlTGlzdCgpKSB7CisgICAgICAgIGlmIChkZXZpY2UubV9wZXJzaXN0ZW50
RGV2aWNlSUQgPT0gY2FwdHVyZURldmljZUlEKSB7CisgICAgICAgICAgICBmb3VuZERldmljZSA9
IGRldmljZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIENhcHR1cmVEZXZpY2VNYW5hZ2VyOjp2ZXJpZnlD
b25zdHJhaW50c0Zvck1lZGlhVHlwZShSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUsIE1l
ZGlhQ29uc3RyYWludHMqIGNvbnN0cmFpbnRzLCBjb25zdCBDYXB0dXJlU2Vzc2lvbkluZm8qIHNl
c3Npb24sIFN0cmluZyYgaW52YWxpZENvbnN0cmFpbnQpCit7CisgICAgaWYgKCFjb25zdHJhaW50
cykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBWZWN0b3I8TWVkaWFDb25zdHJhaW50PiBt
YW5kYXRvcnlDb25zdHJhaW50czsKKyAgICBjb25zdHJhaW50cy0+Z2V0TWFuZGF0b3J5Q29uc3Ry
YWludHMobWFuZGF0b3J5Q29uc3RyYWludHMpOworICAgIGlmIChtYW5kYXRvcnlDb25zdHJhaW50
cy5zaXplKCkpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYW5kYXRvcnlDb25z
dHJhaW50cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgY29uc3QgTWVkaWFDb25zdHJhaW50
JiBjb25zdHJhaW50ID0gbWFuZGF0b3J5Q29uc3RyYWludHNbaV07CisgICAgICAgICAgICBpZiAo
IXNlc3Npb25TdXBwb3J0c0NvbnN0cmFpbnQoc2Vzc2lvbiwgdHlwZSwgY29uc3RyYWludC5tX25h
bWUsIGNvbnN0cmFpbnQubV92YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBpbnZhbGlkQ29uc3Ry
YWludCA9IGNvbnN0cmFpbnQubV9uYW1lOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
CitWZWN0b3I8UmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+PiBDYXB0dXJlRGV2aWNlTWFuYWdl
cjo6YmVzdFNvdXJjZXNGb3JUeXBlQW5kQ29uc3RyYWludHMoUmVhbHRpbWVNZWRpYVNvdXJjZTo6
VHlwZSB0eXBlLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IGNvbnN0cmFpbnRzKQorewor
ICAgIFZlY3RvcjxSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4+IGJlc3RTb3VyY2VzTGlzdDsK
KworICAgIHN0cnVjdCB7CisgICAgICAgIGJvb2wgb3BlcmF0b3IoKShSZWZQdHI8UmVhbHRpbWVN
ZWRpYVNvdXJjZT4gYSwgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+IGIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBhLT5maXRuZXNzU2NvcmUoKSA8IGItPmZpdG5lc3NTY29yZSgp
OworICAgICAgICB9CisgICAgfSBzb3J0QmFzZWRPZmZGaXRuZXNzU2NvcmU7CisKKyAgICBmb3Ig
KGF1dG8mIGNhcHR1cmVEZXZpY2UgOiBjYXB0dXJlRGV2aWNlTGlzdCgpKSB7CisgICAgICAgIGlm
ICghY2FwdHVyZURldmljZS5tX2VuYWJsZWQgfHwgY2FwdHVyZURldmljZS5tX3NvdXJjZUlkLmlz
RW1wdHkoKSB8fCBjYXB0dXJlRGV2aWNlLm1fc291cmNlVHlwZSA9PSBSZWFsdGltZU1lZGlhU291
cmNlOjpOb25lKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKFJlZlB0cjxS
ZWFsdGltZU1lZGlhU291cmNlPiBjYXB0dXJlU291cmNlID0gc291cmNlV2l0aFVJRChjYXB0dXJl
RGV2aWNlLm1fcGVyc2lzdGVudERldmljZUlELCB0eXBlLCBjb25zdHJhaW50cy5nZXQoKSkpCisg
ICAgICAgICAgICBiZXN0U291cmNlc0xpc3QuYXBwZW5kKGNhcHR1cmVTb3VyY2UubGVha1JlZigp
KTsKKyAgICB9CisgICAgc3RkOjpzb3J0KGJlc3RTb3VyY2VzTGlzdC5iZWdpbigpLCBiZXN0U291
cmNlc0xpc3QuZW5kKCksIHNvcnRCYXNlZE9mZkZpdG5lc3NTY29yZSk7CisgICAgcmV0dXJuIGJl
c3RTb3VyY2VzTGlzdDsKK30KKworUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+IENhcHR1cmVE
ZXZpY2VNYW5hZ2VyOjpzb3VyY2VXaXRoVUlEKGNvbnN0IFN0cmluZyYgZGV2aWNlVUlELCBSZWFs
dGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUsIE1lZGlhQ29uc3RyYWludHMqIGNvbnN0cmFpbnRz
KQoreworICAgIGZvciAoYXV0byYgY2FwdHVyZURldmljZSA6IGNhcHR1cmVEZXZpY2VMaXN0KCkp
IHsKKyAgICAgICAgaWYgKGNhcHR1cmVEZXZpY2UubV9wZXJzaXN0ZW50RGV2aWNlSUQgIT0gZGV2
aWNlVUlEIHx8IGNhcHR1cmVEZXZpY2UubV9zb3VyY2VUeXBlICE9IHR5cGUpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBpZiAoIWNhcHR1cmVEZXZpY2UubV9lbmFibGVkIHx8IHR5
cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6Tm9uZSB8fCBjYXB0dXJlRGV2aWNlLm1fc291cmNl
SWQuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKFJlYWx0
aW1lTWVkaWFTb3VyY2UqIG1lZGlhU291cmNlID0gY3JlYXRlTWVkaWFTb3VyY2VGb3JDYXB0dXJl
RGV2aWNlV2l0aENvbnN0cmFpbnRzKGNhcHR1cmVEZXZpY2UsIGNvbnN0cmFpbnRzKSkKKyAgICAg
ICAgICAgIHJldHVybiBtZWRpYVNvdXJjZTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKK0NhcHR1cmVEZXZpY2VJbmZvKiBDYXB0dXJlRGV2aWNlTWFuYWdlcjo6YmVzdERldmljZUZv
ckZhY2luZ01vZGUoUmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6VmlkZW9GYWNpbmdNb2RlIGZh
Y2luZ01vZGUpCit7CisgICAgaWYgKGZhY2luZ01vZGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZVN0
YXRlczo6VW5rbm93bikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBmb3IgKGF1dG8m
IGRldmljZSA6IGNhcHR1cmVEZXZpY2VMaXN0KCkpIHsKKyAgICAgICAgaWYgKGRldmljZS5tX3Nv
dXJjZVR5cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VmlkZW8gJiYgZGV2aWNlLm1fcG9zaXRp
b24gPT0gZmFjaW5nTW9kZSkKKyAgICAgICAgICAgIHJldHVybiAmZGV2aWNlOworICAgIH0KKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIGlubGluZSBSZWFsdGltZU1lZGlhU291cmNl
U3RhdGVzOjpWaWRlb0ZhY2luZ01vZGUgZmFjaW5nTW9kZUZyb21TdHJpbmcoY29uc3QgU3RyaW5n
JiBmYWNpbmdNb2RlU3RyaW5nKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IHVzZXJGYWNpbmdNb2RlU3RyaW5nKCJ1c2VyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4g
ZW52aXJvbm1lbnRGYWNpbmdNb2RlU3RyaW5nKCJlbnZpcm9ubWVudCIsIEF0b21pY1N0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNT
dHJpbmc+IGxlZnRGYWNpbmdNb2RlU3RyaW5nKCJsZWZ0IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4g
cmlnaHRGYWNpbmdNb2RlU3RyaW5nKCJyaWdodCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOworICAgIGlmIChmYWNpbmdNb2RlU3RyaW5nID09IHVzZXJGYWNpbmdNb2RlU3Ry
aW5nKQorICAgICAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6VXNlcjsKKyAg
ICBpZiAoZmFjaW5nTW9kZVN0cmluZyA9PSBlbnZpcm9ubWVudEZhY2luZ01vZGVTdHJpbmcpCisg
ICAgICAgIHJldHVybiBSZWFsdGltZU1lZGlhU291cmNlU3RhdGVzOjpFbnZpcm9ubWVudDsKKyAg
ICBpZiAoZmFjaW5nTW9kZVN0cmluZyA9PSBsZWZ0RmFjaW5nTW9kZVN0cmluZykKKyAgICAgICAg
cmV0dXJuIFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OkxlZnQ7CisgICAgaWYgKGZhY2luZ01v
ZGVTdHJpbmcgPT0gcmlnaHRGYWNpbmdNb2RlU3RyaW5nKQorICAgICAgICByZXR1cm4gUmVhbHRp
bWVNZWRpYVNvdXJjZVN0YXRlczo6UmlnaHQ7CisgICAgcmV0dXJuIFJlYWx0aW1lTWVkaWFTb3Vy
Y2VTdGF0ZXM6OlVua25vd247Cit9CisKK2Jvb2wgQ2FwdHVyZURldmljZU1hbmFnZXI6OnNlc3Np
b25TdXBwb3J0c0NvbnN0cmFpbnQoY29uc3QgQ2FwdHVyZVNlc3Npb25JbmZvKiwgUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
dmFsdWUpCit7CisgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFp
bnRzJiBzdXBwb3J0ZWRDb25zdHJhaW50cyA9IFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNp
bmdsZXRvbigpLnN1cHBvcnRlZENvbnN0cmFpbnRzKCk7CisgICAgTWVkaWFDb25zdHJhaW50VHlw
ZSBjb25zdHJhaW50ID0gc3VwcG9ydGVkQ29uc3RyYWludHMuY29uc3RyYWludEZyb21OYW1lKG5h
bWUpOworICAgIGlmICghc3VwcG9ydGVkQ29uc3RyYWludHMuc3VwcG9ydHNDb25zdHJhaW50KGNv
bnN0cmFpbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKGNvbnN0cmFp
bnQpIHsKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OldpZHRoOgorICAgICAgICByZXR1
cm4gdHlwZSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpWaWRlbzsKKworICAgIGNhc2UgTWVkaWFD
b25zdHJhaW50VHlwZTo6SGVpZ2h0OgorICAgICAgICByZXR1cm4gdHlwZSA9PSBSZWFsdGltZU1l
ZGlhU291cmNlOjpWaWRlbzsKKworICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6RnJhbWVS
YXRlOiB7CisgICAgICAgIGlmICh0eXBlID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlvKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiBpc1N1cHBvcnRlZEZy
YW1lUmF0ZSh2YWx1ZS50b0Zsb2F0KCkpOworICAgIH0KKyAgICBjYXNlIE1lZGlhQ29uc3RyYWlu
dFR5cGU6OkZhY2luZ01vZGU6IHsKKyAgICAgICAgaWYgKHR5cGUgPT0gUmVhbHRpbWVNZWRpYVNv
dXJjZTo6QXVkaW8pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmV0dXJu
IGJlc3REZXZpY2VGb3JGYWNpbmdNb2RlKGZhY2luZ01vZGVGcm9tU3RyaW5nKHZhbHVlKSk7Cisg
ICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jv
b2wgQ2FwdHVyZURldmljZU1hbmFnZXI6OmlzU3VwcG9ydGVkRnJhbWVSYXRlKGZsb2F0IGZyYW1l
UmF0ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gMCA8IGZyYW1lUmF0ZSAmJiBmcmFtZVJhdGUgPD0g
NjA7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlTWFuYWdlci5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9DYXB0dXJlRGV2aWNlTWFuYWdlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjYxMjdmYWE2YmQ5YTA0YjA1ZGY3NTZiOTU2ZGE1ZmMzNWQ2MzY0ODYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL0NhcHR1
cmVEZXZpY2VNYW5hZ2VyLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ2FwdHVyZURldmljZU1hbmFnZXJfaAor
I2RlZmluZSBDYXB0dXJlRGV2aWNlTWFuYWdlcl9oCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFN
KQorCisjaW5jbHVkZSAiQ2FwdHVyZURldmljZUluZm8uaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVh
bVRyYWNrU291cmNlc1JlcXVlc3RDbGllbnQuaCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291
cmNlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgQ2FwdHVyZURldmljZU1hbmFnZXIgeworcHVibGljOgorICAgIHZpcnR1
YWwgVmVjdG9yPENhcHR1cmVEZXZpY2VJbmZvPiYgY2FwdHVyZURldmljZUxpc3QoKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHJlZnJlc2hDYXB0dXJlRGV2aWNlTGlzdCgpIHsgfQorICAgIHZpcnR1
YWwgVHJhY2tTb3VyY2VJbmZvVmVjdG9yIGdldFNvdXJjZXNJbmZvKGNvbnN0IFN0cmluZyYpOwor
ICAgIHZpcnR1YWwgVmVjdG9yPFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlPj4gYmVzdFNvdXJj
ZXNGb3JUeXBlQW5kQ29uc3RyYWludHMoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSwgUGFzc1Jl
ZlB0cjxNZWRpYUNvbnN0cmFpbnRzPik7CisgICAgdmlydHVhbCBSZWZQdHI8UmVhbHRpbWVNZWRp
YVNvdXJjZT4gc291cmNlV2l0aFVJRChjb25zdCBTdHJpbmcmLCBSZWFsdGltZU1lZGlhU291cmNl
OjpUeXBlLCBNZWRpYUNvbnN0cmFpbnRzKik7CisKKyAgICB2aXJ0dWFsIGJvb2wgdmVyaWZ5Q29u
c3RyYWludHNGb3JNZWRpYVR5cGUoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSwgTWVkaWFDb25z
dHJhaW50cyosIGNvbnN0IENhcHR1cmVTZXNzaW9uSW5mbyosIFN0cmluZyYpOworCitwcm90ZWN0
ZWQ6CisgICAgdmlydHVhbCB+Q2FwdHVyZURldmljZU1hbmFnZXIoKTsKKyAgICB2aXJ0dWFsIFJl
YWx0aW1lTWVkaWFTb3VyY2UqIGNyZWF0ZU1lZGlhU291cmNlRm9yQ2FwdHVyZURldmljZVdpdGhD
b25zdHJhaW50cyhjb25zdCBDYXB0dXJlRGV2aWNlSW5mbyYsIE1lZGlhQ29uc3RyYWludHMqKSA9
IDA7CisKKyAgICB2aXJ0dWFsIENhcHR1cmVTZXNzaW9uSW5mbyBkZWZhdWx0Q2FwdHVyZVNlc3Np
b24oKSBjb25zdCB7IHJldHVybiBDYXB0dXJlU2Vzc2lvbkluZm8oKTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBzZXNzaW9uU3VwcG9ydHNDb25zdHJhaW50KGNvbnN0IENhcHR1cmVTZXNzaW9uSW5mbyos
IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSk7CisgICAgdmlydHVhbCBib29sIGlzU3VwcG9ydGVkRnJhbWVSYXRlKGZsb2F0
IGZyYW1lUmF0ZSkgY29uc3Q7CisKKyAgICBib29sIGNhcHR1cmVEZXZpY2VGcm9tRGV2aWNlSUQo
Y29uc3QgU3RyaW5nJiBjYXB0dXJlRGV2aWNlSUQsIENhcHR1cmVEZXZpY2VJbmZvJiBzb3VyY2Up
OworICAgIENhcHR1cmVEZXZpY2VJbmZvKiBiZXN0RGV2aWNlRm9yRmFjaW5nTW9kZShSZWFsdGlt
ZU1lZGlhU291cmNlU3RhdGVzOjpWaWRlb0ZhY2luZ01vZGUpOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2VuZGlmIC8q
IENhcHR1cmVEZXZpY2VNYW5hZ2VyX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwOWRkMzA0Y2U4ZDAzY2JiZjExNDA4ZGJk
M2VkMDc0NmY4MzJkZDBhLi44YjJmNTg1MWI5MTkwMjc3ZGQ3MWI2ZTQ1YmVhZGYxMThhNzFjOTQ2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0xMjEwLDYgKzEyMTAsOSBAQAogCQkyRTNCQzEwODExN0Q0Nzk4MDBCOTQwOUEgLyog
RE9NRmlsZUVycm9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRTNCQzEwNjExN0Q0Nzk4MDBCOTQwOUEgLyogRE9NRmlsZUVycm9yLmggKi87IH07CiAJ
CTJFM0JDMTA5MTE3RDQ3OTgwMEI5NDA5QSAvKiBET01GaWxlRXJyb3IubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTNCQzEwNzExN0Q0Nzk4MDBCOTQw
OUEgLyogRE9NRmlsZUVycm9yLm1tICovOyB9OwogCQkyRTNCQzEwQjExN0Q0N0M4MDBCOTQwOUEg
LyogRE9NRmlsZUVycm9ySW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJFM0JDMTBBMTE3RDQ3QzgwMEI5NDA5QSAvKiBET01GaWxlRXJyb3JJ
bnRlcm5hbC5oICovOyB9OworCQkyRTNDOEM2MjFCRkJBOTc1MDAzMDk1NjYgLyogQ2FwdHVyZURl
dmljZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJFM0M4QzYxMUJGQkE4REMwMDMwOTU2NiAvKiBDYXB0dXJlRGV2aWNlTWFuYWdlci5oICov
OyB9OworCQkyRTNDOEM2NDFCRkJCNzVEMDAzMDk1NjYgLyogQ2FwdHVyZURldmljZU1hbmFnZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkUzQzhD
NjMxQkZCQjc1RDAwMzA5NTY2IC8qIENhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcCAqLzsgfTsKKwkJ
MkUzQzhDNjgxQkZCRjhFMTAwMzA5NTY2IC8qIENhcHR1cmVEZXZpY2VJbmZvLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTNDOEM2NjFCRkJGOEUxMDAz
MDk1NjYgLyogQ2FwdHVyZURldmljZUluZm8uaCAqLzsgfTsKIAkJMkU0MzQ2NDUwRjU0NkE4MjAw
QjBGMUJBIC8qIFdvcmtlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRTQzNDYzMzBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyLmNwcCAqLzsgfTsK
IAkJMkU0MzQ2NDYwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU0MzQ2MzQwRjU0NkE4MjAwQjBGMUJBIC8q
IFdvcmtlci5oICovOyB9OwogCQkyRTQzNDY0ODBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyR2xv
YmFsU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkU0MzQ2MzYwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlckdsb2JhbFNjb3BlLmNwcCAqLzsg
fTsKQEAgLTEyMzcsNiArMTI0MCw3IEBACiAJCTJFQjRCQ0QyMTIxRjAzRTMwMEVDNDg4NSAvKiBC
bG9iUmVzb3VyY2VIYW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkVCNEJDRDAxMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJjZUhhbmRs
ZS5jcHAgKi87IH07CiAJCTJFQjRCQ0QzMTIxRjAzRTMwMEVDNDg4NSAvKiBCbG9iUmVzb3VyY2VI
YW5kbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJF
QjRCQ0QxMTIxRjAzRTMwMEVDNDg4NSAvKiBCbG9iUmVzb3VyY2VIYW5kbGUuaCAqLzsgfTsKIAkJ
MkVCQkMzRDgxQjY1OTg4MzAwRjUyNTNEIC8qIFdoZWVsRXZlbnREZWx0YUZpbHRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVCQkMzRDcxQjY1OTg4
MzAwRjUyNTNEIC8qIFdoZWVsRXZlbnREZWx0YUZpbHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTJFQzQxREU0MUMwNDEwQTMwMEQyOTRGRSAv
KiBSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVDNDFERTIxQzA0MTBBMzAwRDI5
NEZFIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cy5jcHAgKi87IH07
CiAJCTJFQ0Y3QURDMTAxNjJCMzgwMDQyN0RFNyAvKiBKU0Vycm9yRXZlbnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVDRjdBREExMDE2MkIzODAw
NDI3REU3IC8qIEpTRXJyb3JFdmVudC5jcHAgKi87IH07CiAJCTJFQ0Y3QUREMTAxNjJCMzgwMDQy
N0RFNyAvKiBKU0Vycm9yRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJFQ0Y3QURCMTAxNjJCMzgwMDQyN0RFNyAvKiBKU0Vycm9yRXZlbnQuaCAq
LzsgfTsKIAkJMkVDRjdBRTExMDE2MkI1ODAwNDI3REU3IC8qIEVycm9yRXZlbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVDRjdBREUxMDE2MkI1
ODAwNDI3REU3IC8qIEVycm9yRXZlbnQuY3BwICovOyB9OwpAQCAtODU4Niw2ICs4NTkwLDkgQEAK
IAkJMkUzQkMxMDYxMTdENDc5ODAwQjk0MDlBIC8qIERPTUZpbGVFcnJvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBET01GaWxlRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMkUzQkMxMDcxMTdENDc5ODAwQjk0MDlBIC8qIERPTUZpbGVFcnJvci5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTUZpbGVFcnJvci5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkUzQkMxMEExMTdENDdDODAwQjk0MDlBIC8q
IERPTUZpbGVFcnJvckludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERPTUZpbGVFcnJvckludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJF
M0M4QzYxMUJGQkE4REMwMDMwOTU2NiAvKiBDYXB0dXJlRGV2aWNlTWFuYWdlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDYXB0dXJlRGV2aWNlTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkyRTNDOEM2MzFCRkJCNzVEMDAzMDk1NjYgLyogQ2FwdHVyZURldmljZU1hbmFnZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FwdHVyZURldmljZU1hbmFn
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRTNDOEM2NjFCRkJGOEUxMDAz
MDk1NjYgLyogQ2FwdHVyZURldmljZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ2FwdHVyZURldmljZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MkU0MzQ2MzMwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXb3JrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyRTQzNDYzNDBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdvcmtlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyRTQzNDYzNTBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyLmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBXb3JrZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODYxNiw2
ICs4NjIzLDcgQEAKIAkJMkVCNEJDRDAxMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJjZUhh
bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCbG9iUmVzb3Vy
Y2VIYW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRUI0QkNEMTEyMUYw
M0UzMDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEJsb2JSZXNvdXJjZUhhbmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkyRUJCQzNENzFCNjU5ODgzMDBGNTI1M0QgLyogV2hlZWxFdmVudERlbHRhRmlsdGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdoZWVsRXZlbnREZWx0YUZpbHRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRUM0MURFMjFDMDQxMEEzMDBEMjk0
RkUgLyogUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0
ZWRDb25zdHJhaW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFQ0Y3QURB
MTAxNjJCMzgwMDQyN0RFNyAvKiBKU0Vycm9yRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNFcnJvckV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMkVDRjdBREIxMDE2MkIzODAwNDI3REU3IC8qIEpTRXJyb3JFdmVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Vycm9yRXZlbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMkVDRjdBREUxMDE2MkI1ODAwNDI3REU3IC8qIEVycm9yRXZlbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXJyb3JFdmVudC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTEzNiw2ICsxNTE0NCw5IEBACiAJCQkJ
MDcwNTg0RkUxN0Y5RjA1RTAwNUYyQkNCIC8qIENhcGFiaWxpdHlSYW5nZS5jcHAgKi8sCiAJCQkJ
MDdDNTlCNzQxN0Y3RDA5RDAwMEZCQ0JCIC8qIENhcGFiaWxpdHlSYW5nZS5oICovLAogCQkJCTA3
QzU5Qjc1MTdGN0QwOUQwMDBGQkNCQiAvKiBDYXBhYmlsaXR5UmFuZ2UuaWRsICovLAorCQkJCTJF
M0M4QzYxMUJGQkE4REMwMDMwOTU2NiAvKiBDYXB0dXJlRGV2aWNlTWFuYWdlci5oICovLAorCQkJ
CTJFM0M4QzYzMUJGQkI3NUQwMDMwOTU2NiAvKiBDYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAgKi8s
CisJCQkJMkUzQzhDNjYxQkZCRjhFMTAwMzA5NTY2IC8qIENhcHR1cmVEZXZpY2VJbmZvLmggKi8s
CiAJCQkJMDczNzk0RUQxOUVFMzY0MjAwRTVBMDQ1IC8qIERPTVVSTE1lZGlhU3RyZWFtLmNwcCAq
LywKIAkJCQkxNUZDQzlGRDFCNERGODU2MDBFNzIzMjYgLyogRE9NVVJMTWVkaWFTdHJlYW0uaCAq
LywKIAkJCQkwNzM3OTRFRTE5RUUzNjQyMDBFNUEwNDUgLyogRE9NVVJMTWVkaWFTdHJlYW0uaWRs
ICovLApAQCAtMTUyNzQsNiArMTUyODUsNyBAQAogCQkJCTA3RkZERTY2MTgxQUVENDIwMDcyRDQw
OSAvKiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAgKi8sCiAJCQkJMDdGRkRFNjcxODFBRUQ0
MjAwNzJENDA5IC8qIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmggKi8sCiAJCQkJMDdDMUMwRTQx
QkZCNjBFRDAwQkQyMjU2IC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50
cy5oICovLAorCQkJCTJFQzQxREUyMUMwNDEwQTMwMEQyOTRGRSAvKiBSZWFsdGltZU1lZGlhU291
cmNlU3VwcG9ydGVkQ29uc3RyYWludHMuY3BwICovLAogCQkJCTA3NjMwNkUyMTdFMjJBNDMwMDVB
N0M0RSAvKiBNZWRpYVN0cmVhbVRyYWNrU291cmNlc1JlcXVlc3RDbGllbnQuaCAqLywKIAkJCQk0
QTRGNjU2QjFBQTk5N0YxMDBFMzhDREQgLyogUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAgKi8sCiAJ
CQkJNEE0RjY1NkMxQUE5OTdGMTAwRTM4Q0REIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2UuaCAqLywK
QEAgLTI2NjE2LDYgKzI2NjI4LDcgQEAKIAkJCQlCQ0VGRTFFQjBEQ0E1RjY0MDA3MzkyMTkgLyog
SlNYU0xUUHJvY2Vzc29yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTAzMUI0NDBBNDRFRkM3MDBG
OTkyRTAgLyogS2V5Ym9hcmRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFMDBENTkxODJE
QUM4RDAwMDg3REQ3IC8qIEtleWVkQ29kaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQkyRTNDOEM2
MjFCRkJBOTc1MDAzMDk1NjYgLyogQ2FwdHVyZURldmljZU1hbmFnZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUxN0E2M0M1MUI3NDMxOEYwMEU3RENEQyAvKiBLZXllZERlY29kZXJDRi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTE3QTYzQzYxQjc0MzE5MjAwRTdEQ0RDIC8qIEtleWVkRW5jb2RlckNG
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTEzQjNENzExNEIxNjY2MDAxQzQyOUIgLyogS2V5RXZl
bnRDb2NvYS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjcwMSw2ICsyNjcxNCw3IEBACiAJCQkJRkFC
RTcyRjkxMDU5QzFFQjAwRDk5OUREIC8qIE1hdGhNTE1hdGhFbGVtZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQk0NEEyOEFBRjEyREZCOEJGMDBBRTkyM0IgLyogTWF0aE1MTmFtZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUZBNjU0QTZDMTEwOEFCRUQwMDI2MTVFMCAvKiBNYXRoTUxUZXh0RWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkUzQzhDNjgxQkZCRjhFMTAwMzA5NTY2IC8qIENhcHR1
cmVEZXZpY2VJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUQ1REMyQzBGNDIzQTczMDA4RjIw
RkQgLyogTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5
RTkxMUM3MEVGODZENDcwMDlEMENBRiAvKiBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTVDQkM4REFEMUFBQTMwMjIwMEUxQzgwMyAvKiBNZWRpYUFjY2Vzc2li
aWxpdHlTb2Z0TGluay5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODY0OSw2ICsyODY2Myw3IEBACiAJ
CQkJRTE2NEEyRUQxOTFBRTYzNTAwMTA3MzdEIC8qIEJsb2JEYXRhRmlsZVJlZmVyZW5jZU1hYy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCUUxNEE5NEQ3MTZERkRGOTUwMDY4REU4MiAvKiBCbG9iUmVn
aXN0cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkVERUYxRjYxMjFCMEVGQzAwNzI2REIyIC8q
IEJsb2JSZWdpc3RyeUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMkVDNDFERTQxQzA0MTBB
MzAwRDI5NEZFIC8qIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkyRUI0QkNEMjEyMUYwM0UzMDBFQzQ4ODUgLyogQmxvYlJlc291
cmNlSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3NkQ2QzdFMTIyQjhBM0QwMDFGRDFG
NyAvKiBCbG9iVVJMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5QUUxMDgyNDVFNTkwMDFF
OUFCQyAvKiBCbG9ja0V4Y2VwdGlvbnMubW0gaW4gU291cmNlcyAqLywKQEAgLTMwMzcwLDYgKzMw
Mzg1LDcgQEAKIAkJCQlFNEI2NUE1QTEzMkZBQUY5MDA3MEU3QkUgLyogTGVnYWN5VGlsZUdyaWQu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlFNDI0QTNBMDEzMzBERjFFMDBDRjZEQzkgLyogTGVnYWN5
VGlsZUdyaWRUaWxlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTRCNjVBNUUxMzJGQURCNjAwNzBF
N0JFIC8qIExlZ2FjeVRpbGVMYXllci5tbSBpbiBTb3VyY2VzICovLAorCQkJCTJFM0M4QzY0MUJG
QkI3NUQwMDMwOTU2NiAvKiBDYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlFNEUzOUFGRDEzMzBFRkM2MDAzQUIyNzQgLyogTGVnYWN5VGlsZUxheWVyUG9vbC5tbSBp
biBTb3VyY2VzICovLAogCQkJCTUxNjQ1QjZBMUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lUcmFu
c2FjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTY0NUI2QzFCOUZBNkM4MDBGNzg5Q0Ug
LyogTGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJj
ZVN1cHBvcnRlZENvbnN0cmFpbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYjE4ZWFmMGVjZWVlYjk2NmIwMmY2NmFjYzc4NDQ0ZWQ5YmNiNjJiZAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVk
aWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cy5jcHAKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlYWx0aW1l
TWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cy5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQXRvbWljU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1N0
cmluZyBSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHM6Om5hbWVGb3JDb25z
dHJhaW50KE1lZGlhQ29uc3RyYWludFR5cGUgY29uc3RyYWludCkgY29uc3QKK3sKKyAgICBzd2l0
Y2ggKGNvbnN0cmFpbnQpIHsKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OlVua25vd246
CisgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgIGNhc2UgTWVkaWFDb25zdHJhaW50
VHlwZTo6V2lkdGg6CisgICAgICAgIHJldHVybiAid2lkdGgiOworICAgIGNhc2UgTWVkaWFDb25z
dHJhaW50VHlwZTo6SGVpZ2h0OgorICAgICAgICByZXR1cm4gImhlaWdodCI7CisgICAgY2FzZSBN
ZWRpYUNvbnN0cmFpbnRUeXBlOjpBc3BlY3RSYXRpbzoKKyAgICAgICAgcmV0dXJuICJhc3BlY3RS
YXRpbyI7CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpGcmFtZVJhdGU6CisgICAgICAg
IHJldHVybiAiZnJhbWVSYXRlIjsKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkZhY2lu
Z01vZGU6CisgICAgICAgIHJldHVybiAiZmFjaW5nTW9kZSI7CisgICAgY2FzZSBNZWRpYUNvbnN0
cmFpbnRUeXBlOjpWb2x1bWU6CisgICAgICAgIHJldHVybiAidm9sdW1lIjsKKyAgICBjYXNlIE1l
ZGlhQ29uc3RyYWludFR5cGU6OlNhbXBsZVJhdGU6CisgICAgICAgIHJldHVybiAic2FtcGxlUmF0
ZSI7CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpTYW1wbGVTaXplOgorICAgICAgICBy
ZXR1cm4gInNhbXBsZVNpemUiOworICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6RWNob0Nh
bmNlbGxhdGlvbjoKKyAgICAgICAgcmV0dXJuICJlY2hvQ2FuY2VsbGF0aW9uIjsKKyAgICBjYXNl
IE1lZGlhQ29uc3RyYWludFR5cGU6OkRldmljZUlkOgorICAgICAgICByZXR1cm4gImRldmljZUlk
IjsKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6Okdyb3VwSWQ6CisgICAgICAgIHJldHVy
biAiZ3JvdXBJZCI7CisgICAgfQorfQorCitNZWRpYUNvbnN0cmFpbnRUeXBlIFJlYWx0aW1lTWVk
aWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50czo6Y29uc3RyYWludEZyb21OYW1lKGNvbnN0IFN0
cmluZyYgY29uc3RyYWludE5hbWUpIGNvbnN0Cit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEhhc2hNYXA8QXRvbWljU3RyaW5nLCBNZWRpYUNvbnN0cmFpbnRUeXBlPj4gbmFtZVRvQ29uc3Ry
YWludE1hcDsKKyAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgTWVkaWFDb25zdHJhaW50VHlwZT4m
IG5hbWVUb0NvbnN0cmFpbnRNYXBWYWx1ZSA9IG5hbWVUb0NvbnN0cmFpbnRNYXAuZ2V0KCk7Cisg
ICAgaWYgKCFuYW1lVG9Db25zdHJhaW50TWFwVmFsdWUuc2l6ZSgpKSB7CisgICAgICAgIG5hbWVU
b0NvbnN0cmFpbnRNYXBWYWx1ZS5hZGQoIndpZHRoIiwgTWVkaWFDb25zdHJhaW50VHlwZTo6V2lk
dGgpOworICAgICAgICBuYW1lVG9Db25zdHJhaW50TWFwVmFsdWUuYWRkKCJoZWlnaHQiLCBNZWRp
YUNvbnN0cmFpbnRUeXBlOjpIZWlnaHQpOworICAgICAgICBuYW1lVG9Db25zdHJhaW50TWFwVmFs
dWUuYWRkKCJhc3BlY3RSYXRpbyIsIE1lZGlhQ29uc3RyYWludFR5cGU6OkFzcGVjdFJhdGlvKTsK
KyAgICAgICAgbmFtZVRvQ29uc3RyYWludE1hcFZhbHVlLmFkZCgiZnJhbWVSYXRlIiwgTWVkaWFD
b25zdHJhaW50VHlwZTo6RnJhbWVSYXRlKTsKKyAgICAgICAgbmFtZVRvQ29uc3RyYWludE1hcFZh
bHVlLmFkZCgiZmFjaW5nTW9kZSIsIE1lZGlhQ29uc3RyYWludFR5cGU6OkZhY2luZ01vZGUpOwor
ICAgICAgICBuYW1lVG9Db25zdHJhaW50TWFwVmFsdWUuYWRkKCJ2b2x1bWUiLCBNZWRpYUNvbnN0
cmFpbnRUeXBlOjpWb2x1bWUpOworICAgICAgICBuYW1lVG9Db25zdHJhaW50TWFwVmFsdWUuYWRk
KCJzYW1wbGVSYXRlIiwgTWVkaWFDb25zdHJhaW50VHlwZTo6U2FtcGxlUmF0ZSk7CisgICAgICAg
IG5hbWVUb0NvbnN0cmFpbnRNYXBWYWx1ZS5hZGQoInNhbXBsZVNpemUiLCBNZWRpYUNvbnN0cmFp
bnRUeXBlOjpTYW1wbGVTaXplKTsKKyAgICAgICAgbmFtZVRvQ29uc3RyYWludE1hcFZhbHVlLmFk
ZCgiZWNob0NhbmNlbGxhdGlvbiIsIE1lZGlhQ29uc3RyYWludFR5cGU6OkVjaG9DYW5jZWxsYXRp
b24pOworICAgICAgICBuYW1lVG9Db25zdHJhaW50TWFwVmFsdWUuYWRkKCJkZXZpY2VJZCIsIE1l
ZGlhQ29uc3RyYWludFR5cGU6OkRldmljZUlkKTsKKyAgICAgICAgbmFtZVRvQ29uc3RyYWludE1h
cFZhbHVlLmFkZCgiZ3JvdXBJZCIsIE1lZGlhQ29uc3RyYWludFR5cGU6Okdyb3VwSWQpOworICAg
IH0KKyAgICBhdXRvIGl0ZXIgPSBuYW1lVG9Db25zdHJhaW50TWFwVmFsdWUuZmluZChjb25zdHJh
aW50TmFtZSk7CisgICAgcmV0dXJuIGl0ZXIgPT0gbmFtZVRvQ29uc3RyYWludE1hcFZhbHVlLmVu
ZCgpID8gTWVkaWFDb25zdHJhaW50VHlwZTo6VW5rbm93biA6IGl0ZXItPnZhbHVlOworfQorCiti
b29sIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50czo6c3VwcG9ydHNDb25z
dHJhaW50KE1lZGlhQ29uc3RyYWludFR5cGUgY29uc3RyYWludCkgY29uc3QKK3sKKyAgICBzd2l0
Y2ggKGNvbnN0cmFpbnQpIHsKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OlVua25vd246
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6Oldp
ZHRoOgorICAgICAgICByZXR1cm4gc3VwcG9ydHNXaWR0aCgpOworICAgIGNhc2UgTWVkaWFDb25z
dHJhaW50VHlwZTo6SGVpZ2h0OgorICAgICAgICByZXR1cm4gc3VwcG9ydHNIZWlnaHQoKTsKKyAg
ICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkFzcGVjdFJhdGlvOgorICAgICAgICByZXR1cm4g
c3VwcG9ydHNBc3BlY3RSYXRpbygpOworICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6RnJh
bWVSYXRlOgorICAgICAgICByZXR1cm4gc3VwcG9ydHNGcmFtZVJhdGUoKTsKKyAgICBjYXNlIE1l
ZGlhQ29uc3RyYWludFR5cGU6OkZhY2luZ01vZGU6CisgICAgICAgIHJldHVybiBzdXBwb3J0c0Zh
Y2luZ01vZGUoKTsKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OlZvbHVtZToKKyAgICAg
ICAgcmV0dXJuIHN1cHBvcnRzVm9sdW1lKCk7CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBl
OjpTYW1wbGVSYXRlOgorICAgICAgICByZXR1cm4gc3VwcG9ydHNTYW1wbGVSYXRlKCk7CisgICAg
Y2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpTYW1wbGVTaXplOgorICAgICAgICByZXR1cm4gc3Vw
cG9ydHNTYW1wbGVTaXplKCk7CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpFY2hvQ2Fu
Y2VsbGF0aW9uOgorICAgICAgICByZXR1cm4gc3VwcG9ydHNFY2hvQ2FuY2VsbGF0aW9uKCk7Cisg
ICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpEZXZpY2VJZDoKKyAgICAgICAgcmV0dXJuIHN1
cHBvcnRzRGV2aWNlSWQoKTsKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6Okdyb3VwSWQ6
CisgICAgICAgIHJldHVybiBzdXBwb3J0c0dyb3VwSWQoKTsKKyAgICB9Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291
cmNlU3VwcG9ydGVkQ29uc3RyYWludHMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cy5oCmluZGV4IDQ4
NjY4YzNmNzVmMzcyMDc3YzJjOWIxMDFhMmUyZjA1MDZkMzMyZDcuLmRhNWMyOWFlZjA5MTE2Mjdm
YjNlZTQ5MzYzZWNmNDYyOTk4ZGUxZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFT
b3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cy5oCkBAIC0zMyw4ICszMywyNSBAQAogCiAjaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKIAorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK2VudW0gY2xhc3MgTWVkaWFDb25zdHJhaW50VHlwZSB7Cisg
ICAgVW5rbm93biwKKyAgICBXaWR0aCwKKyAgICBIZWlnaHQsCisgICAgQXNwZWN0UmF0aW8sCisg
ICAgRnJhbWVSYXRlLAorICAgIEZhY2luZ01vZGUsCisgICAgVm9sdW1lLAorICAgIFNhbXBsZVJh
dGUsCisgICAgU2FtcGxlU2l6ZSwKKyAgICBFY2hvQ2FuY2VsbGF0aW9uLAorICAgIERldmljZUlk
LAorICAgIEdyb3VwSWQKK307CisKIGNsYXNzIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRD
b25zdHJhaW50cyB7CiBwdWJsaWM6CiAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENv
bnN0cmFpbnRzKCkKQEAgLTc0LDYgKzkxLDEwIEBAIHB1YmxpYzoKICAgICBib29sIHN1cHBvcnRz
R3JvdXBJZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3VwcG9ydHNHcm91cElkOyB9CiAgICAgdm9pZCBz
ZXRTdXBwb3J0c0dyb3VwSWQoYm9vbCB2YWx1ZSkgeyBtX3N1cHBvcnRzR3JvdXBJZCA9IHZhbHVl
OyB9CiAKKyAgICBTdHJpbmcgbmFtZUZvckNvbnN0cmFpbnQoTWVkaWFDb25zdHJhaW50VHlwZSkg
Y29uc3Q7CisgICAgTWVkaWFDb25zdHJhaW50VHlwZSBjb25zdHJhaW50RnJvbU5hbWUoY29uc3Qg
U3RyaW5nJiBjb25zdHJhaW50TmFtZSkgY29uc3Q7CisgICAgYm9vbCBzdXBwb3J0c0NvbnN0cmFp
bnQoTWVkaWFDb25zdHJhaW50VHlwZSkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgYm9vbCBtX3N1
cHBvcnRzV2lkdGggeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zdXBwb3J0c0hlaWdodCB7IGZhbHNl
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
QVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIuaAppbmRleCBjYTkxYzQzMGQ3NGQ0YTU2
NWRiZjYzMjhiMzYwZTM2OTcwZTBkZjU1Li41NjJiMDhjMWM2NDIyYzE2MTk4NjM2YzFjYjgxYWJj
MzliYjAxYWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNiArMjgsNyBA
QAogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEFWRk9VTkRBVElPTikKIAorI2lu
Y2x1ZGUgIkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFj
a1NvdXJjZXNSZXF1ZXN0Q2xpZW50LmgiCiAjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5o
IgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTQwLDM4ICs0MSw0NiBAQCBPQkpDX0NM
QVNTIFdlYkNvcmVBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyT2JzZXJ2ZXI7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgQ2FwdHVyZURldmljZTsKK2NsYXNzIEFWQ2FwdHVyZVNlc3Npb25J
bmZvIDogcHVibGljIENhcHR1cmVTZXNzaW9uSW5mbyB7CitwdWJsaWM6CisgICAgQVZDYXB0dXJl
U2Vzc2lvbkluZm8oQVZDYXB0dXJlU2Vzc2lvbiAqcGxhdGZvcm1TZXNzaW9uKTsKKyAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNWaWRlb1NpemUoY29uc3QgU3RyaW5nJiB2aWRlb1NpemUpIGNvbnN0
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgU3RyaW5nIGJlc3RTZXNzaW9uUHJlc2V0Rm9yVmlkZW9E
aW1lbnNpb25zKGludCB3aWR0aCwgaW50IGhlaWdodCkgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZh
dGU6CisgICAgQVZDYXB0dXJlU2Vzc2lvbiAqbV9wbGF0Zm9ybVNlc3Npb247Cit9OwogCi1jbGFz
cyBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyIHsKK2NsYXNzIEFWQ2FwdHVyZURldmljZU1hbmFnZXIg
ZmluYWwgOiBwdWJsaWMgQ2FwdHVyZURldmljZU1hbmFnZXIgewogcHVibGljOgotICAgIHN0YXRp
YyBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyJiBzaW5nbGV0b24oKTsKLSAgICBzdGF0aWMgYm9vbCBp
c0F2YWlsYWJsZSgpOworICAgIHZpcnR1YWwgVmVjdG9yPENhcHR1cmVEZXZpY2VJbmZvPiYgY2Fw
dHVyZURldmljZUxpc3QoKSBvdmVycmlkZTsKIAotICAgIFRyYWNrU291cmNlSW5mb1ZlY3RvciBn
ZXRTb3VyY2VzSW5mbyhjb25zdCBTdHJpbmcmKTsKLSAgICBib29sIHZlcmlmeUNvbnN0cmFpbnRz
Rm9yTWVkaWFUeXBlKEFWQ2FwdHVyZVNlc3Npb24gKiwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlw
ZSwgTWVkaWFDb25zdHJhaW50cyosIFN0cmluZyYpOwotICAgIFZlY3RvcjxSZWZQdHI8UmVhbHRp
bWVNZWRpYVNvdXJjZT4+IGJlc3RTb3VyY2VzRm9yVHlwZUFuZENvbnN0cmFpbnRzKFJlYWx0aW1l
TWVkaWFTb3VyY2U6OlR5cGUsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4pOwotICAgIFJl
ZlB0cjxSZWFsdGltZU1lZGlhU291cmNlPiBzb3VyY2VXaXRoVUlEKGNvbnN0IFN0cmluZyYsIFJl
YWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUsIE1lZGlhQ29uc3RyYWludHMqKTsKKyAgICBzdGF0aWMg
QVZDYXB0dXJlRGV2aWNlTWFuYWdlciYgc2luZ2xldG9uKCk7CiAKLSAgICBlbnVtIFZhbGlkQ29u
c3RyYWludHMgeyBXaWR0aCA9IDAsIEhlaWdodCwgRnJhbWVSYXRlLCBGYWNpbmdNb2RlLCBHYWlu
IH07Ci0gICAgc3RhdGljIGNvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiB2YWxpZENvbnN0cmFp
bnROYW1lcygpOwotICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgdmFsaWRG
YWNpbmdNb2RlcygpOworICAgIHZpcnR1YWwgUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+IHNv
dXJjZVdpdGhVSUQoY29uc3QgU3RyaW5nJiBkZXZpY2VVSUQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6
OlR5cGUsIE1lZGlhQ29uc3RyYWludHMqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFZlY3RvcjxS
ZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4+IGJlc3RTb3VyY2VzRm9yVHlwZUFuZENvbnN0cmFp
bnRzKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50
cz4pIG92ZXJyaWRlOwogCi0gICAgc3RhdGljIGJvb2wgZGV2aWNlU3VwcG9ydHNGYWNpbmdNb2Rl
KEFWQ2FwdHVyZURldmljZSosIFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OlZpZGVvRmFjaW5n
TW9kZSk7Ci0gICAgc3RhdGljIGJvb2wgaXNWYWxpZENvbnN0cmFpbnQoUmVhbHRpbWVNZWRpYVNv
dXJjZTo6VHlwZSwgY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIFN0cmluZyBiZXN0U2Vzc2lv
blByZXNldEZvclZpZGVvU2l6ZShBVkNhcHR1cmVTZXNzaW9uKiwgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KTsKKyAgICB2aXJ0dWFsIFRyYWNrU291cmNlSW5mb1ZlY3RvciBnZXRTb3VyY2VzSW5mbyhj
b25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgdmVyaWZ5Q29uc3RyYWlu
dHNGb3JNZWRpYVR5cGUoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSwgTWVkaWFDb25zdHJhaW50
cyosIGNvbnN0IENhcHR1cmVTZXNzaW9uSW5mbyosIFN0cmluZyYpIG92ZXJyaWRlOwogCi0gICAg
dm9pZCByZWdpc3RlckZvckRldmljZU5vdGlmaWNhdGlvbnMoKTsKICAgICB2b2lkIGRldmljZUNv
bm5lY3RlZCgpOwogICAgIHZvaWQgZGV2aWNlRGlzY29ubmVjdGVkKEFWQ2FwdHVyZURldmljZSop
OwogCiBwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKKwogICAgIEFW
Q2FwdHVyZURldmljZU1hbmFnZXIoKTsKLSAgICB+QVZDYXB0dXJlRGV2aWNlTWFuYWdlcigpOwor
ICAgIHZpcnR1YWwgfkFWQ2FwdHVyZURldmljZU1hbmFnZXIoKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIGJvb2wgc2Vzc2lvblN1cHBvcnRzQ29uc3RyYWludChjb25zdCBDYXB0dXJlU2Vzc2lvbklu
Zm8qLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgdmFsdWUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgUmVhbHRpbWVNZWRpYVNvdXJj
ZSogY3JlYXRlTWVkaWFTb3VyY2VGb3JDYXB0dXJlRGV2aWNlV2l0aENvbnN0cmFpbnRzKGNvbnN0
IENhcHR1cmVEZXZpY2VJbmZvJiwgTWVkaWFDb25zdHJhaW50cyopIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgQ2FwdHVyZVNlc3Npb25JbmZvIGRlZmF1bHRDYXB0dXJlU2Vzc2lvbigpIGNvbnN0IG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCByZWZyZXNoQ2FwdHVyZURldmljZUxpc3QoKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTdXBwb3J0ZWRGcmFtZVJhdGUoZmxvYXQgZnJhbWVS
YXRlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIENhcHR1cmVEZXZpY2UqIGJlc3REZXZpY2VGb3JG
YWNpbmdNb2RlKFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OlZpZGVvRmFjaW5nTW9kZSk7Ci0g
ICAgYm9vbCBzZXNzaW9uU3VwcG9ydHNDb25zdHJhaW50KEFWQ2FwdHVyZVNlc3Npb24qLCBSZWFs
dGltZU1lZGlhU291cmNlOjpUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
dmFsdWUpOworICAgIHZvaWQgcmVnaXN0ZXJGb3JEZXZpY2VOb3RpZmljYXRpb25zKCk7CiAKICAg
ICBSZXRhaW5QdHI8V2ViQ29yZUFWQ2FwdHVyZURldmljZU1hbmFnZXJPYnNlcnZlcj4gbV9vYmpj
T2JzZXJ2ZXI7CisgICAgVmVjdG9yPENhcHR1cmVEZXZpY2VJbmZvPiBtX2RldmljZXM7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1t
CmluZGV4IDM4Y2EyYzFjZWNkNTNhMjhkNmIwNDRmMmM2NjI4ZTU1YWJlN2Y1ODcuLjE1MDZmMzlk
YjU4NmNhOTc4YWUwMDZmZDY0MWM1YTNlNTI0YmMwZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyLm1tCkBAIC0zNSw3ICszNSw5IEBACiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1w
b3J0ICJNZWRpYUNvbnN0cmFpbnRzLmgiCiAjaW1wb3J0ICJSZWFsdGltZU1lZGlhU291cmNlLmgi
CisjaW1wb3J0ICJSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmgiCiAjaW1wb3J0ICJSZWFsdGlt
ZU1lZGlhU291cmNlU3RhdGVzLmgiCisjaW1wb3J0ICJSZWFsdGltZU1lZGlhU291cmNlU3VwcG9y
dGVkQ29uc3RyYWludHMuaCIKICNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCiAjaW1wb3J0ICJVVUlE
LmgiCiAjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZGb3VuZGF0aW9uLmg+CkBAIC04OSw4NiArOTEs
MTEzIEBAIEBlbmQKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgdm9pZCByZWZyZXNo
Q2FwdHVyZURldmljZUxpc3QoKTsKK0FWQ2FwdHVyZVNlc3Npb25JbmZvOjpBVkNhcHR1cmVTZXNz
aW9uSW5mbyhBVkNhcHR1cmVTZXNzaW9uVHlwZSAqcGxhdGZvcm1TZXNzaW9uKQorICAgIDogbV9w
bGF0Zm9ybVNlc3Npb24ocGxhdGZvcm1TZXNzaW9uKQoreworfQorCitib29sIEFWQ2FwdHVyZVNl
c3Npb25JbmZvOjpzdXBwb3J0c1ZpZGVvU2l6ZShjb25zdCBTdHJpbmcmIHZpZGVvU2l6ZSkgY29u
c3QKK3sKKyAgICByZXR1cm4gW21fcGxhdGZvcm1TZXNzaW9uIGNhblNldFNlc3Npb25QcmVzZXQ6
dmlkZW9TaXplXTsKK30KKworU3RyaW5nIEFWQ2FwdHVyZVNlc3Npb25JbmZvOjpiZXN0U2Vzc2lv
blByZXNldEZvclZpZGVvRGltZW5zaW9ucyhpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0Cit7
CisgICAgQVNTRVJUKHdpZHRoID49IDApOworICAgIEFTU0VSVChoZWlnaHQgPj0gMCk7CiAKLWNs
YXNzIENhcHR1cmVEZXZpY2UgewotcHVibGljOgotICAgIENhcHR1cmVEZXZpY2UoKQotICAgICAg
ICA6bV9lbmFibGVkKGZhbHNlKQotICAgIHsKKyAgICBpZiAod2lkdGggPiAxMjgwIHx8IGhlaWdo
dCA+IDcyMCkgeworICAgICAgICAvLyBGSVhNRTogdGhpcyByZXN0cmljdGlvbiBjb3VsZCBiZSBh
ZGp1c3RlZCB3aXRoIHRoZSB2aWRlb01heFNjYWxlQW5kQ3JvcEZhY3RvciBwcm9wZXJ0eS4KKyAg
ICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAgICAgfQogCi0gICAgU3RyaW5nIG1fY2FwdHVy
ZURldmljZUlEOwotICAgIFN0cmluZyBtX2xvY2FsaXplZE5hbWU7Ci0gICAgU3RyaW5nIG1fZ3Jv
dXBJRDsKKyAgICBpZiAod2lkdGggPiA2NDAgfHwgaGVpZ2h0ID4gNDgwKSB7CisgICAgICAgIGlm
IChzdXBwb3J0c1ZpZGVvU2l6ZShBVkNhcHR1cmVTZXNzaW9uUHJlc2V0MTI4MHg3MjApKQorICAg
ICAgICAgICAgcmV0dXJuIEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQxMjgweDcyMDsKIAotICAgIFN0
cmluZyBtX2F1ZGlvU291cmNlSWQ7Ci0gICAgU3RyaW5nIG1fdmlkZW9Tb3VyY2VJZDsKKyAgICAg
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgfQogCi0gICAgYm9vbCBtX2VuYWJsZWQ7Ci19
OworICAgIGlmICh3aWR0aCA+IDM1MiB8fCBoZWlnaHQgPiAyODgpIHsKKyAgICAgICAgaWYgKHN1
cHBvcnRzVmlkZW9TaXplKEFWQ2FwdHVyZVNlc3Npb25QcmVzZXQ2NDB4NDgwKSkKKyAgICAgICAg
ICAgIHJldHVybiBBVkNhcHR1cmVTZXNzaW9uUHJlc2V0NjQweDQ4MDsKIAotc3RhdGljIFZlY3Rv
cjxDYXB0dXJlRGV2aWNlPiYgY2FwdHVyZURldmljZUxpc3QoKQorICAgICAgICByZXR1cm4gZW1w
dHlTdHJpbmcoKTsKKyAgICB9CisKKyAgICBpZiAoc3VwcG9ydHNWaWRlb1NpemUoQVZDYXB0dXJl
U2Vzc2lvblByZXNldDM1MngyODgpKQorICAgICAgICByZXR1cm4gQVZDYXB0dXJlU2Vzc2lvblBy
ZXNldDM1MngyODg7CisKKyAgICBpZiAoc3VwcG9ydHNWaWRlb1NpemUoQVZDYXB0dXJlU2Vzc2lv
blByZXNldExvdykpCisgICAgICAgIHJldHVybiBBVkNhcHR1cmVTZXNzaW9uUHJlc2V0TG93Owor
CisgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Cit9CisKKworVmVjdG9yPENhcHR1cmVEZXZpY2VJ
bmZvPiYgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6Y2FwdHVyZURldmljZUxpc3QoKQogewotICAg
IERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8Q2FwdHVyZURldmljZT4sIGNh
cHR1cmVEZXZpY2VMaXN0LCAoKSk7CiAgICAgc3RhdGljIGJvb2wgZmlyc3RUaW1lID0gdHJ1ZTsK
LQotICAgIGlmIChmaXJzdFRpbWUgJiYgIWNhcHR1cmVEZXZpY2VMaXN0LnNpemUoKSkgeworICAg
IGlmIChmaXJzdFRpbWUgJiYgIW1fZGV2aWNlcy5zaXplKCkpIHsKICAgICAgICAgZmlyc3RUaW1l
ID0gZmFsc2U7CiAgICAgICAgIHJlZnJlc2hDYXB0dXJlRGV2aWNlTGlzdCgpOwotICAgICAgICBB
VkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24oKS5yZWdpc3RlckZvckRldmljZU5vdGlm
aWNhdGlvbnMoKTsKKyAgICAgICAgcmVnaXN0ZXJGb3JEZXZpY2VOb3RpZmljYXRpb25zKCk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIGNhcHR1cmVEZXZpY2VMaXN0OworICAgIHJldHVybiBtX2Rldmlj
ZXM7CiB9CiAKLXN0YXRpYyBib29sIGNhcHR1cmVEZXZpY2VGcm9tRGV2aWNlSUQoY29uc3QgU3Ry
aW5nJiBjYXB0dXJlRGV2aWNlSUQsIENhcHR1cmVEZXZpY2UmIHNvdXJjZSkKK2lubGluZSBzdGF0
aWMgYm9vbCBzaG91bGRDb25zaWRlckRldmljZUluRGV2aWNlTGlzdChBVkNhcHR1cmVEZXZpY2VU
eXBlICpkZXZpY2UpCiB7Ci0gICAgVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBkZXZpY2VzID0gY2Fw
dHVyZURldmljZUxpc3QoKTsKLSAgICAKLSAgICBzaXplX3QgY291bnQgPSBkZXZpY2VzLnNpemUo
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgaWYg
KGRldmljZXNbaV0ubV9jYXB0dXJlRGV2aWNlSUQgPT0gY2FwdHVyZURldmljZUlEKSB7Ci0gICAg
ICAgICAgICBzb3VyY2UgPSBkZXZpY2VzW2ldOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQorICAgIGlmICghW2Rl
dmljZSBpc0Nvbm5lY3RlZF0pCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotc3RhdGljIHZvaWQg
cmVmcmVzaENhcHR1cmVEZXZpY2VMaXN0KCkKLXsKLSAgICBWZWN0b3I8Q2FwdHVyZURldmljZT4m
IGRldmljZXMgPSBjYXB0dXJlRGV2aWNlTGlzdCgpOwotICAgIAotICAgIGZvciAoQVZDYXB0dXJl
RGV2aWNlVHlwZSAqZGV2aWNlIGluIFtnZXRBVkNhcHR1cmVEZXZpY2VDbGFzcygpIGRldmljZXNd
KSB7Ci0gICAgICAgIENhcHR1cmVEZXZpY2Ugc291cmNlOworI2lmICFQTEFURk9STShJT1MpCisg
ICAgaWYgKFtkZXZpY2UgaXNTdXNwZW5kZWRdIHx8IFtkZXZpY2UgaXNJblVzZUJ5QW5vdGhlckFw
cGxpY2F0aW9uXSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiAKLSAgICAgICAgaWYg
KCFbZGV2aWNlIGlzQ29ubmVjdGVkXSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgIHJldHVy
biB0cnVlOworfQogCi0jaWYgIVBMQVRGT1JNKElPUykKLSAgICAgICAgaWYgKFtkZXZpY2UgaXNT
dXNwZW5kZWRdIHx8IFtkZXZpY2UgaXNJblVzZUJ5QW5vdGhlckFwcGxpY2F0aW9uXSkKK3ZvaWQg
QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6cmVmcmVzaENhcHR1cmVEZXZpY2VMaXN0KCkKK3sKKyAg
ICBmb3IgKEFWQ2FwdHVyZURldmljZVR5cGUgKnBsYXRmb3JtRGV2aWNlIGluIFtnZXRBVkNhcHR1
cmVEZXZpY2VDbGFzcygpIGRldmljZXNdKSB7CisgICAgICAgIGlmICghc2hvdWxkQ29uc2lkZXJE
ZXZpY2VJbkRldmljZUxpc3QocGxhdGZvcm1EZXZpY2UpKQogICAgICAgICAgICAgY29udGludWU7
Ci0jZW5kaWYKIAotICAgICAgICBpZiAoIWNhcHR1cmVEZXZpY2VGcm9tRGV2aWNlSUQoZGV2aWNl
LnVuaXF1ZUlELCBzb3VyY2UpKSB7CisgICAgICAgIENhcHR1cmVEZXZpY2VJbmZvIGNhcHR1cmVE
ZXZpY2U7CisgICAgICAgIGlmICghY2FwdHVyZURldmljZUZyb21EZXZpY2VJRChwbGF0Zm9ybURl
dmljZS51bmlxdWVJRCwgY2FwdHVyZURldmljZSkpIHsKICAgICAgICAgICAgIC8vIEFuIEFWQ2Fw
dHVyZURldmljZSBoYXMgYSB1bmlxdWUgSUQsIGJ1dCB3ZSBjYW4ndCB1c2UgaXQgZm9yIHRoZSBz
b3VyY2UgSUQgYmVjYXVzZToKICAgICAgICAgICAgIC8vIDEuIGlmIGl0IHByb3ZpZGVzIGJvdGgg
YXVkaW8gYW5kIHZpZGVvIHdlIHdpbGwgbmVlZCB0byBjcmVhdGUgdHdvIHNvdXJjZXMgZm9yIGl0
CiAgICAgICAgICAgICAvLyAyLiB0aGUgdW5pcXVlIElEIHBlcnNpc3RzIG9uIG9uZSBzeXN0ZW0g
YWNyb3NzIGRldmljZSBjb25uZWN0aW9ucywgZGlzY29ubmVjdGlvbnMsCiAgICAgICAgICAgICAv
LyAgICBhcHBsaWNhdGlvbiByZXN0YXJ0cywgYW5kIHJlYm9vdHMsIHNvIGl0IGNvdWxkIGJlIHVz
ZWQgdG8gZmlnZXJwcmludCBhIHVzZXIuCi0gICAgICAgICAgICBzb3VyY2UubV9jYXB0dXJlRGV2
aWNlSUQgPSBkZXZpY2UudW5pcXVlSUQ7Ci0gICAgICAgICAgICBzb3VyY2UubV9lbmFibGVkID0g
dHJ1ZTsKLSAgICAgICAgICAgIGlmIChbZGV2aWNlIGhhc01lZGlhVHlwZTpBVk1lZGlhVHlwZUF1
ZGlvXSB8fCBbZGV2aWNlIGhhc01lZGlhVHlwZTpBVk1lZGlhVHlwZU11eGVkXSkKLSAgICAgICAg
ICAgICAgICBzb3VyY2UubV9hdWRpb1NvdXJjZUlkID0gY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmlu
ZygpOwotCi0gICAgICAgICAgICBpZiAoW2RldmljZSBoYXNNZWRpYVR5cGU6QVZNZWRpYVR5cGVW
aWRlb10gfHwgW2RldmljZSBoYXNNZWRpYVR5cGU6QVZNZWRpYVR5cGVNdXhlZF0pCi0gICAgICAg
ICAgICAgICAgc291cmNlLm1fdmlkZW9Tb3VyY2VJZCA9IGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJp
bmcoKTsKLQotICAgICAgICAgICAgc291cmNlLm1fZ3JvdXBJRCA9IGNyZWF0ZUNhbm9uaWNhbFVV
SURTdHJpbmcoKTsKLSAgICAgICAgICAgIHNvdXJjZS5tX2xvY2FsaXplZE5hbWUgPSBkZXZpY2Uu
bG9jYWxpemVkTmFtZTsKKyAgICAgICAgICAgIGNhcHR1cmVEZXZpY2UubV9wZXJzaXN0ZW50RGV2
aWNlSUQgPSBwbGF0Zm9ybURldmljZS51bmlxdWVJRDsKKyAgICAgICAgICAgIGNhcHR1cmVEZXZp
Y2UubV9lbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGNhcHR1cmVEZXZpY2UubV9ncm91cElE
ID0gY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOworICAgICAgICAgICAgY2FwdHVyZURldmlj
ZS5tX2xvY2FsaXplZE5hbWUgPSBwbGF0Zm9ybURldmljZS5sb2NhbGl6ZWROYW1lOworICAgICAg
ICAgICAgaWYgKFtwbGF0Zm9ybURldmljZSBwb3NpdGlvbl0gPT0gQVZDYXB0dXJlRGV2aWNlUG9z
aXRpb25Gcm9udCkKKyAgICAgICAgICAgICAgICBjYXB0dXJlRGV2aWNlLm1fcG9zaXRpb24gPSBS
ZWFsdGltZU1lZGlhU291cmNlU3RhdGVzOjpVc2VyOworICAgICAgICAgICAgaWYgKFtwbGF0Zm9y
bURldmljZSBwb3NpdGlvbl0gPT0gQVZDYXB0dXJlRGV2aWNlUG9zaXRpb25CYWNrKQorICAgICAg
ICAgICAgICAgIGNhcHR1cmVEZXZpY2UubV9wb3NpdGlvbiA9IFJlYWx0aW1lTWVkaWFTb3VyY2VT
dGF0ZXM6OkVudmlyb25tZW50OworCisgICAgICAgICAgICBib29sIGhhc0F1ZGlvID0gW3BsYXRm
b3JtRGV2aWNlIGhhc01lZGlhVHlwZTpBVk1lZGlhVHlwZUF1ZGlvXSB8fCBbcGxhdGZvcm1EZXZp
Y2UgaGFzTWVkaWFUeXBlOkFWTWVkaWFUeXBlTXV4ZWRdOworICAgICAgICAgICAgYm9vbCBoYXNW
aWRlbyA9IFtwbGF0Zm9ybURldmljZSBoYXNNZWRpYVR5cGU6QVZNZWRpYVR5cGVWaWRlb10gfHwg
W3BsYXRmb3JtRGV2aWNlIGhhc01lZGlhVHlwZTpBVk1lZGlhVHlwZU11eGVkXTsKKyAgICAgICAg
ICAgIGlmICghaGFzQXVkaW8gJiYgIWhhc1ZpZGVvKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgICAgICBkZXZpY2VzLmFwcGVuZChzb3VyY2UpOworICAgICAgICAgICAgLy8g
RklYTUU6IEZvciBhIGdpdmVuIGRldmljZSwgdGhlIHNvdXJjZSBJRCBzaG91bGQgcGVyc2lzdCB3
aGVuIHZpc2l0aW5nIHRoZSBzYW1lIHJlcXVlc3Qgb3JpZ2luLAorICAgICAgICAgICAgLy8gYnV0
IGRpZmZlciBhY3Jvc3MgZGlmZmVyZW50IHJlcXVlc3Qgb3JpZ2lucy4KKyAgICAgICAgICAgIGNh
cHR1cmVEZXZpY2UubV9zb3VyY2VJZCA9IGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKKyAg
ICAgICAgICAgIGNhcHR1cmVEZXZpY2UubV9zb3VyY2VUeXBlID0gaGFzVmlkZW8gPyBSZWFsdGlt
ZU1lZGlhU291cmNlOjpWaWRlbyA6IFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlvOworICAgICAg
ICAgICAgaWYgKGhhc1ZpZGVvICYmIGhhc0F1ZGlvKSB7CisgICAgICAgICAgICAgICAgLy8gQWRk
IHRoZSBhdWRpbyBjb21wb25lbnQgYXMgYSBzZXBhcmF0ZSBkZXZpY2UuCisgICAgICAgICAgICAg
ICAgQ2FwdHVyZURldmljZUluZm8gYXVkaW9DYXB0dXJlRGV2aWNlID0gY2FwdHVyZURldmljZTsK
KyAgICAgICAgICAgICAgICBhdWRpb0NhcHR1cmVEZXZpY2UubV9zb3VyY2VJZCA9IGNyZWF0ZUNh
bm9uaWNhbFVVSURTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBhdWRpb0NhcHR1cmVEZXZpY2Uu
bV9zb3VyY2VUeXBlID0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW87CisgICAgICAgICAgICAg
ICAgbV9kZXZpY2VzLmFwcGVuZChhdWRpb0NhcHR1cmVEZXZpY2UpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgbV9kZXZpY2VzLmFwcGVuZChjYXB0dXJlRGV2aWNlKTsKICAgICAgICAgfQog
ICAgIH0KIH0KQEAgLTE4NSw3ICsyMTQsNyBAQCBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyJiBBVkNh
cHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24oKQogfQogCiBBVkNhcHR1cmVEZXZpY2VNYW5h
Z2VyOjpBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyKCkKLSAgICA6IG1fb2JqY09ic2VydmVyKGFkb3B0
TlMoW1tXZWJDb3JlQVZDYXB0dXJlRGV2aWNlTWFuYWdlck9ic2VydmVyIGFsbG9jXSBpbml0V2l0
aENhbGxiYWNrOnRoaXNdKSkKKyAgICA6IG1fb2JqY09ic2VydmVyKGFkb3B0TlMoW1tXZWJDb3Jl
QVZDYXB0dXJlRGV2aWNlTWFuYWdlck9ic2VydmVyIGFsbG9jXSBpbml0V2l0aENhbGxiYWNrOiB0
aGlzXSkpCiB7CiB9CiAKQEAgLTE5NSwyNjcgKzIyNCw4NSBAQCBBVkNhcHR1cmVEZXZpY2VNYW5h
Z2VyOjp+QVZDYXB0dXJlRGV2aWNlTWFuYWdlcigpCiAgICAgW21fb2JqY09ic2VydmVyIGRpc2Nv
bm5lY3RdOwogfQogCi1TdHJpbmcgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6YmVzdFNlc3Npb25Q
cmVzZXRGb3JWaWRlb1NpemUoQVZDYXB0dXJlU2Vzc2lvblR5cGUgKmNhcHR1cmVTZXNzaW9uLCBp
bnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgQVNTRVJUKHdpZHRoID49IDApOwotICAgIEFT
U0VSVChoZWlnaHQgPj0gMCk7Ci0gICAgCi0gICAgaWYgKHdpZHRoID4gMTI4MCB8fCBoZWlnaHQg
PiA3MjApCi0gICAgICAgIC8vIEZJWE1FOiB0aGlzIHJlc3RyaWN0aW9uIGNvdWxkIGJlIGFkanVz
dGVkIHdpdGggdGhlIHZpZGVvTWF4U2NhbGVBbmRDcm9wRmFjdG9yIHByb3BlcnR5LgotICAgICAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAKLSAgICBpZiAod2lkdGggPiA2NDAgfHwgaGVp
Z2h0ID4gNDgwKSB7Ci0gICAgICAgIGlmICghW2NhcHR1cmVTZXNzaW9uIGNhblNldFNlc3Npb25Q
cmVzZXQ6QVZDYXB0dXJlU2Vzc2lvblByZXNldDEyODB4NzIwXSkKLSAgICAgICAgICAgIGVtcHR5
U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiBBVkNhcHR1cmVTZXNzaW9uUHJlc2V0MTI4MHg3MjA7
Ci0gICAgfQotICAgIAotICAgIGlmICh3aWR0aCA+IDM1MiB8fCBoZWlnaHQgPiAyODgpIHsKLSAg
ICAgICAgaWYgKCFbY2FwdHVyZVNlc3Npb24gY2FuU2V0U2Vzc2lvblByZXNldDpBVkNhcHR1cmVT
ZXNzaW9uUHJlc2V0NjQweDQ4MF0pCi0gICAgICAgICAgICBlbXB0eVN0cmluZygpOwotICAgICAg
ICByZXR1cm4gQVZDYXB0dXJlU2Vzc2lvblByZXNldDY0MHg0ODA7Ci0gICAgfQotICAgIAotICAg
IGlmIChbY2FwdHVyZVNlc3Npb24gY2FuU2V0U2Vzc2lvblByZXNldDpBVkNhcHR1cmVTZXNzaW9u
UHJlc2V0MzUyeDI4OF0pCi0gICAgICAgIHJldHVybiBBVkNhcHR1cmVTZXNzaW9uUHJlc2V0MzUy
eDI4ODsKLSAgICAKLSAgICBpZiAoW2NhcHR1cmVTZXNzaW9uIGNhblNldFNlc3Npb25QcmVzZXQ6
QVZDYXB0dXJlU2Vzc2lvblByZXNldExvd10pCi0gICAgICAgIHJldHVybiBBVkNhcHR1cmVTZXNz
aW9uUHJlc2V0TG93OwotICAgIAotICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotfQotCi1ib29s
IEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OmRldmljZVN1cHBvcnRzRmFjaW5nTW9kZShBVkNhcHR1
cmVEZXZpY2VUeXBlICpkZXZpY2UsIFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OlZpZGVvRmFj
aW5nTW9kZSBmYWNpbmdNb2RlKQotewotICAgIGlmICghW2RldmljZSBoYXNNZWRpYVR5cGU6QVZN
ZWRpYVR5cGVWaWRlb10pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBzd2l0Y2gg
KGZhY2luZ01vZGUpIHsKLSAgICBjYXNlIFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OlVzZXI6
Ci0gICAgICAgIGlmIChbZGV2aWNlIHBvc2l0aW9uXSA9PSBBVkNhcHR1cmVEZXZpY2VQb3NpdGlv
bkZyb250KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgUmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6RW52aXJvbm1lbnQ6Ci0gICAgICAgIGlmIChb
ZGV2aWNlIHBvc2l0aW9uXSA9PSBBVkNhcHR1cmVEZXZpY2VQb3NpdGlvbkJhY2spCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlh
U291cmNlU3RhdGVzOjpMZWZ0OgotICAgIGNhc2UgUmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6
UmlnaHQ6Ci0gICAgY2FzZSBSZWFsdGltZU1lZGlhU291cmNlU3RhdGVzOjpVbmtub3duOgotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Q2FwdHVyZURldmljZSogQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6YmVzdERldmljZUZvckZhY2lu
Z01vZGUoUmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6VmlkZW9GYWNpbmdNb2RlIGZhY2luZ01v
ZGUpCitWZWN0b3I8UmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+PiBBVkNhcHR1cmVEZXZpY2VN
YW5hZ2VyOjpiZXN0U291cmNlc0ZvclR5cGVBbmRDb25zdHJhaW50cyhSZWFsdGltZU1lZGlhU291
cmNlOjpUeXBlIHR5cGUsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gY29uc3RyYWludHMp
CiB7Ci0gICAgVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBkZXZpY2VzID0gY2FwdHVyZURldmljZUxp
c3QoKTsKLSAgICAKLSAgICBzaXplX3QgY291bnQgPSBkZXZpY2VzLnNpemUoKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgQVZDYXB0dXJlRGV2aWNl
VHlwZSAqZGV2aWNlID0gW2dldEFWQ2FwdHVyZURldmljZUNsYXNzKCkgZGV2aWNlV2l0aFVuaXF1
ZUlEOmRldmljZXNbaV0ubV9jYXB0dXJlRGV2aWNlSURdOwotICAgICAgICBBU1NFUlQoZGV2aWNl
KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChkZXZpY2UgJiYgZGV2aWNlU3VwcG9ydHNGYWNpbmdN
b2RlKGRldmljZSwgZmFjaW5nTW9kZSkpCi0gICAgICAgICAgICByZXR1cm4gJmRldmljZXNbaV07
Ci0gICAgfQotICAgIAotICAgIHJldHVybiAwOwotfQorICAgIGlmICghaXNBdmFpbGFibGUoKSkK
KyAgICAgICAgcmV0dXJuIFZlY3RvcjxSZWZQdHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4+KCk7CiAK
LWJvb2wgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2Vzc2lvblN1cHBvcnRzQ29uc3RyYWludChB
VkNhcHR1cmVTZXNzaW9uVHlwZSAqc2Vzc2lvbiwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSB0
eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgc2l6
ZV90IGNvbnN0cmFpbnQgPSB2YWxpZENvbnN0cmFpbnROYW1lcygpLmZpbmQobmFtZSk7Ci0gICAg
aWYgKGNvbnN0cmFpbnQgPT0gbm90Rm91bmQpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAot
ICAgIHN3aXRjaCAoY29uc3RyYWludCkgewotICAgIGNhc2UgV2lkdGg6Ci0gICAgICAgIGlmICh0
eXBlID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlvKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIHJldHVybiAhYmVzdFNlc3Npb25QcmVzZXRGb3JWaWRlb1NpemUoc2Vz
c2lvbiwgdmFsdWUudG9JbnQoKSwgMCkuaXNFbXB0eSgpOwotICAgIGNhc2UgSGVpZ2h0OgotICAg
ICAgICBpZiAodHlwZSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpBdWRpbykKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXR1cm4gIWJlc3RTZXNzaW9uUHJlc2V0Rm9yVmlk
ZW9TaXplKHNlc3Npb24sIDAsIHZhbHVlLnRvSW50KCkpLmlzRW1wdHkoKTsKLSAgICBjYXNlIEZy
YW1lUmF0ZTogewotICAgICAgICBpZiAodHlwZSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpBdWRp
bykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIC8vIEl0IHdv
dWxkIG1ha2Ugc2Vuc2UgdG8gdXNlIFtBVkNhcHR1cmVDb25uZWN0aW9uIHZpZGVvTWluRnJhbWVE
dXJhdGlvbl0gYW5kCi0gICAgICAgIC8vIFtBVkNhcHR1cmVDb25uZWN0aW9uIHZpZGVvTWF4RnJh
bWVEdXJhdGlvbl0sIGJ1dCB0aGV5IG9ubHkgd29yayB3aXRoIGEgImxpdmUiIEFWQ2FwdHVyZUNv
bm5lY3Rpb24uCi0gICAgICAgIGZsb2F0IHJhdGUgPSB2YWx1ZS50b0Zsb2F0KCk7Ci0gICAgICAg
IHJldHVybiByYXRlID4gMCAmJiByYXRlIDw9IDYwOwotICAgIH0KLSAgICBjYXNlIEdhaW46IHsK
LSAgICAgICAgaWYgKHR5cGUgIT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW8pCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBmbG9hdCBsZXZlbCA9IHZhbHVl
LnRvRmxvYXQoKTsKLSAgICAgICAgcmV0dXJuIGxldmVsID4gMCAmJiBsZXZlbCA8PSAxOwotICAg
IH0KLSAgICBjYXNlIEZhY2luZ01vZGU6IHsKLSAgICAgICAgaWYgKHR5cGUgPT0gUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6QXVkaW8pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
c2l6ZV90IGZhY2luZ01vZGUgPSAgdmFsaWRGYWNpbmdNb2RlcygpLmZpbmQodmFsdWUpOwotICAg
ICAgICBpZiAoZmFjaW5nTW9kZSAhPSBub3RGb3VuZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgcmV0dXJuIGJlc3REZXZpY2VGb3JGYWNpbmdNb2RlKHN0YXRpY19jYXN0PFJl
YWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OlZpZGVvRmFjaW5nTW9kZT4oZmFjaW5nTW9kZSkpOwot
ICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBDYXB0dXJl
RGV2aWNlTWFuYWdlcjo6YmVzdFNvdXJjZXNGb3JUeXBlQW5kQ29uc3RyYWludHModHlwZSwgY29u
c3RyYWludHMpOwogfQogCi1ib29sIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OmlzVmFsaWRDb25z
dHJhaW50KFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1l
KQorUmVmUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+IEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNv
dXJjZVdpdGhVSUQoY29uc3QgU3RyaW5nJiBkZXZpY2VVSUQsIFJlYWx0aW1lTWVkaWFTb3VyY2U6
OlR5cGUgdHlwZSwgTWVkaWFDb25zdHJhaW50cyogY29uc3RyYWludHMpCiB7Ci0gICAgc2l6ZV90
IGNvbnN0cmFpbnQgPSB2YWxpZENvbnN0cmFpbnROYW1lcygpLmZpbmQobmFtZSk7Ci0gICAgaWYg
KGNvbnN0cmFpbnQgPT0gbm90Rm91bmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
IChjb25zdHJhaW50ID09IEdhaW4pCi0gICAgICAgIHJldHVybiB0eXBlID09IFJlYWx0aW1lTWVk
aWFTb3VyY2U6OkF1ZGlvOworICAgIGlmICghaXNBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gQ2FwdHVyZURldmljZU1h
bmFnZXI6OnNvdXJjZVdpdGhVSUQoZGV2aWNlVUlELCB0eXBlLCBjb25zdHJhaW50cyk7CiB9CiAK
LVZlY3RvcjxSZWZQdHI8VHJhY2tTb3VyY2VJbmZvPj4gQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6
Z2V0U291cmNlc0luZm8oY29uc3QgU3RyaW5nJiByZXF1ZXN0T3JpZ2luKQorVHJhY2tTb3VyY2VJ
bmZvVmVjdG9yIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OmdldFNvdXJjZXNJbmZvKGNvbnN0IFN0
cmluZyYgcmVxdWVzdE9yaWdpbikKIHsKLSAgICBVTlVTRURfUEFSQU0ocmVxdWVzdE9yaWdpbik7
Ci0gICAgVmVjdG9yPFJlZlB0cjxUcmFja1NvdXJjZUluZm8+PiBzb3VyY2VzSW5mbzsKLQogICAg
IGlmICghaXNBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuIHNvdXJjZXNJbmZvOwotCi0gICAg
VmVjdG9yPENhcHR1cmVEZXZpY2U+JiBkZXZpY2VzID0gY2FwdHVyZURldmljZUxpc3QoKTsKLSAg
ICBmb3IgKGF1dG8gY2FwdHVyZURldmljZSA6IGRldmljZXMpIHsKLQotICAgICAgICBpZiAoIWNh
cHR1cmVEZXZpY2UubV9lbmFibGVkKQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHJl
dHVybiBUcmFja1NvdXJjZUluZm9WZWN0b3IoKTsKIAotICAgICAgICBpZiAoIWNhcHR1cmVEZXZp
Y2UubV92aWRlb1NvdXJjZUlkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHNvdXJjZXNJbmZvLmFw
cGVuZChUcmFja1NvdXJjZUluZm86OmNyZWF0ZShjYXB0dXJlRGV2aWNlLm1fdmlkZW9Tb3VyY2VJ
ZCwgVHJhY2tTb3VyY2VJbmZvOjpWaWRlbywgY2FwdHVyZURldmljZS5tX2xvY2FsaXplZE5hbWUs
IGNhcHR1cmVEZXZpY2UubV9ncm91cElEKSk7Ci0gICAgICAgIGlmICghY2FwdHVyZURldmljZS5t
X2F1ZGlvU291cmNlSWQuaXNFbXB0eSgpKQotICAgICAgICAgICAgc291cmNlc0luZm8uYXBwZW5k
KFRyYWNrU291cmNlSW5mbzo6Y3JlYXRlKGNhcHR1cmVEZXZpY2UubV9hdWRpb1NvdXJjZUlkLCBU
cmFja1NvdXJjZUluZm86OkF1ZGlvLCBjYXB0dXJlRGV2aWNlLm1fbG9jYWxpemVkTmFtZSwgY2Fw
dHVyZURldmljZS5tX2dyb3VwSUQpKTsKLSAgICB9Ci0KLSAgICBMT0coTWVkaWEsICJBVkNhcHR1
cmVEZXZpY2VNYW5hZ2VyOjpnZXRTb3VyY2VzSW5mbyglcCksIGZvdW5kICVkIGFjdGl2ZSBkZXZp
Y2VzIiwgdGhpcywgc291cmNlc0luZm8uc2l6ZSgpKTsKLQotICAgIHJldHVybiBzb3VyY2VzSW5m
bzsKKyAgICByZXR1cm4gQ2FwdHVyZURldmljZU1hbmFnZXI6OmdldFNvdXJjZXNJbmZvKHJlcXVl
c3RPcmlnaW4pOwogfQogCi1ib29sIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnZlcmlmeUNvbnN0
cmFpbnRzRm9yTWVkaWFUeXBlKEFWQ2FwdHVyZVNlc3Npb25UeXBlICpzZXNzaW9uLCBSZWFsdGlt
ZU1lZGlhU291cmNlOjpUeXBlIHR5cGUsIE1lZGlhQ29uc3RyYWludHMqIGNvbnN0cmFpbnRzLCBT
dHJpbmcmIGludmFsaWRDb25zdHJhaW50KQorYm9vbCBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjp2
ZXJpZnlDb25zdHJhaW50c0Zvck1lZGlhVHlwZShSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5
cGUsIE1lZGlhQ29uc3RyYWludHMqIGNvbnN0cmFpbnRzLCBjb25zdCBDYXB0dXJlU2Vzc2lvbklu
Zm8qIHNlc3Npb24sIFN0cmluZyYgaW52YWxpZENvbnN0cmFpbnQpCiB7CiAgICAgaWYgKCFpc0F2
YWlsYWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIWNvbnN0cmFpbnRz
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFZlY3RvcjxNZWRpYUNvbnN0cmFpbnQ+IG1h
bmRhdG9yeUNvbnN0cmFpbnRzOwotICAgIGNvbnN0cmFpbnRzLT5nZXRNYW5kYXRvcnlDb25zdHJh
aW50cyhtYW5kYXRvcnlDb25zdHJhaW50cyk7Ci0gICAgaWYgKG1hbmRhdG9yeUNvbnN0cmFpbnRz
LnNpemUoKSkgewotCi0gICAgICAgIFJldGFpblB0cjxBVkNhcHR1cmVTZXNzaW9uVHlwZT4gY2Fw
dHVyZVNlc3Npb24gPSBzZXNzaW9uID8gc2Vzc2lvbiA6IGFkb3B0TlMoW2FsbG9jQVZDYXB0dXJl
U2Vzc2lvbkluc3RhbmNlKCkgaW5pdF0pOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1hbmRhdG9yeUNvbnN0cmFpbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBN
ZWRpYUNvbnN0cmFpbnQmIGNvbnN0cmFpbnQgPSBtYW5kYXRvcnlDb25zdHJhaW50c1tpXTsKLSAg
ICAgICAgICAgIGlmICghc2Vzc2lvblN1cHBvcnRzQ29uc3RyYWludChjYXB0dXJlU2Vzc2lvbi5n
ZXQoKSwgdHlwZSwgY29uc3RyYWludC5tX25hbWUsIGNvbnN0cmFpbnQubV92YWx1ZSkpIHsKLSAg
ICAgICAgICAgICAgICBpbnZhbGlkQ29uc3RyYWludCA9IGNvbnN0cmFpbnQubV9uYW1lOwotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBDYXB0dXJlRGV2aWNlTWFuYWdlcjo6
dmVyaWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5cGUodHlwZSwgY29uc3RyYWludHMsIHNlc3Npb24s
IGludmFsaWRDb25zdHJhaW50KTsKIH0KIAotVmVjdG9yPFJlZlB0cjxSZWFsdGltZU1lZGlhU291
cmNlPj4gQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6YmVzdFNvdXJjZXNGb3JUeXBlQW5kQ29uc3Ry
YWludHMoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSB0eXBlLCBQYXNzUmVmUHRyPE1lZGlhQ29u
c3RyYWludHM+IGNvbnN0cmFpbnRzKQorQ2FwdHVyZVNlc3Npb25JbmZvIEFWQ2FwdHVyZURldmlj
ZU1hbmFnZXI6OmRlZmF1bHRDYXB0dXJlU2Vzc2lvbigpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPFJl
ZlB0cjxSZWFsdGltZU1lZGlhU291cmNlPj4gYmVzdFNvdXJjZXNMaXN0OwotICAgIAotICAgIGlm
ICghaXNBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuIGJlc3RTb3VyY2VzTGlzdDsKLSAgICAK
LSAgICBzdHJ1Y3QgewotICAgICAgICBib29sIG9wZXJhdG9yKCkoUmVmUHRyPFJlYWx0aW1lTWVk
aWFTb3VyY2U+IGEsIFJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlPiBiKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gYS0+Zml0bmVzc1Njb3JlKCkgPCBiLT5maXRuZXNzU2NvcmUoKTsK
LSAgICAgICAgfQotICAgIH0gc29ydEJhc2VkT2ZmRml0bmVzc1Njb3JlOwotCi0gICAgVmVjdG9y
PENhcHR1cmVEZXZpY2U+JiBkZXZpY2VzID0gY2FwdHVyZURldmljZUxpc3QoKTsKLQotICAgIGZv
ciAoYXV0byYgY2FwdHVyZURldmljZSA6IGRldmljZXMpIHsKLSAgICAgICAgaWYgKCFjYXB0dXJl
RGV2aWNlLm1fZW5hYmxlZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmICh0
eXBlID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlvICYmICFjYXB0dXJlRGV2aWNlLm1fYXVk
aW9Tb3VyY2VJZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxSZWFsdGltZU1lZGlh
U291cmNlPiBjYXB0dXJlU291cmNlID0gQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c291cmNlV2l0
aFVJRChjYXB0dXJlRGV2aWNlLm1fY2FwdHVyZURldmljZUlELCBSZWFsdGltZU1lZGlhU291cmNl
OjpBdWRpbywgY29uc3RyYWludHMuZ2V0KCkpOwotICAgICAgICAgICAgaWYgKCFjYXB0dXJlU291
cmNlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgIC8vIEZJWE1FOiBJIGRvbid0IGtu
b3cgaWYgaXQncyBzYWZlIHRvIHVzZSBhIHN0YXRpYyB2YXIgaGVyZSwgc2luY2UgdGhlIHN0YXRl
IG9mIGEgbmV3bHkKKyAgICAvLyBpbml0aWFsaXplZCBBVkNhcHR1cmVTZXNzaW9uIG1heSBiZSBk
aWZmZXJlbnQuIElmIG5vdCwgdGhpcyBzaG91bGQgYmUgc3RhdGljIGFuZCB1c2UgYQorICAgIC8v
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDYXB0dXJlU2Vzc2lvbkluZm8+LgorICAgIHJldHVybiBB
VkNhcHR1cmVTZXNzaW9uSW5mbyhbYWxsb2NBVkNhcHR1cmVTZXNzaW9uSW5zdGFuY2UoKSBpbml0
XSk7Cit9CiAKLSAgICAgICAgICAgIGJlc3RTb3VyY2VzTGlzdC5hcHBlbmQoY2FwdHVyZVNvdXJj
ZS5sZWFrUmVmKCkpOwotICAgICAgICB9Citib29sIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNl
c3Npb25TdXBwb3J0c0NvbnN0cmFpbnQoY29uc3QgQ2FwdHVyZVNlc3Npb25JbmZvKiBzZXNzaW9u
LCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU3VwcG9y
dGVkQ29uc3RyYWludHMmIHN1cHBvcnRlZENvbnN0cmFpbnRzID0gUmVhbHRpbWVNZWRpYVNvdXJj
ZUNlbnRlcjo6c2luZ2xldG9uKCkuc3VwcG9ydGVkQ29uc3RyYWludHMoKTsKKyAgICBNZWRpYUNv
bnN0cmFpbnRUeXBlIGNvbnN0cmFpbnQgPSBzdXBwb3J0ZWRDb25zdHJhaW50cy5jb25zdHJhaW50
RnJvbU5hbWUobmFtZSk7CisgICAgaWYgKCFzdXBwb3J0ZWRDb25zdHJhaW50cy5zdXBwb3J0c0Nv
bnN0cmFpbnQoY29uc3RyYWludCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBp
ZiAodHlwZSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpWaWRlbyAmJiAhY2FwdHVyZURldmljZS5t
X3ZpZGVvU291cmNlSWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8UmVhbHRpbWVN
ZWRpYVNvdXJjZT4gY2FwdHVyZVNvdXJjZSA9IEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNvdXJj
ZVdpdGhVSUQoY2FwdHVyZURldmljZS5tX2NhcHR1cmVEZXZpY2VJRCwgUmVhbHRpbWVNZWRpYVNv
dXJjZTo6VmlkZW8sIGNvbnN0cmFpbnRzLmdldCgpKTsKLSAgICAgICAgICAgIGlmICghY2FwdHVy
ZVNvdXJjZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICBpZiAodHlwZSA9PSBSZWFs
dGltZU1lZGlhU291cmNlOjpWaWRlbyAmJiBzZXNzaW9uKSB7CisgICAgICAgIGlmIChjb25zdHJh
aW50ID09IE1lZGlhQ29uc3RyYWludFR5cGU6OldpZHRoKQorICAgICAgICAgICAgcmV0dXJuIHNl
c3Npb24tPmJlc3RTZXNzaW9uUHJlc2V0Rm9yVmlkZW9EaW1lbnNpb25zKHZhbHVlLnRvSW50KCks
IDApICE9IGVtcHR5U3RyaW5nKCk7CiAKLSAgICAgICAgICAgIGJlc3RTb3VyY2VzTGlzdC5hcHBl
bmQoY2FwdHVyZVNvdXJjZS5sZWFrUmVmKCkpOwotICAgICAgICB9CisgICAgICAgIGlmIChjb25z
dHJhaW50ID09IE1lZGlhQ29uc3RyYWludFR5cGU6OkhlaWdodCkKKyAgICAgICAgICAgIHJldHVy
biBzZXNzaW9uLT5iZXN0U2Vzc2lvblByZXNldEZvclZpZGVvRGltZW5zaW9ucygwLCB2YWx1ZS50
b0ludCgpKSAhPSBlbXB0eVN0cmluZygpOwogICAgIH0KLSAgICBzdGQ6OnNvcnQoYmVzdFNvdXJj
ZXNMaXN0LmJlZ2luKCksIGJlc3RTb3VyY2VzTGlzdC5lbmQoKSwgc29ydEJhc2VkT2ZmRml0bmVz
c1Njb3JlKTsKLSAgICByZXR1cm4gYmVzdFNvdXJjZXNMaXN0OworICAgIHJldHVybiBDYXB0dXJl
RGV2aWNlTWFuYWdlcjo6c2Vzc2lvblN1cHBvcnRzQ29uc3RyYWludChzZXNzaW9uLCB0eXBlLCBu
YW1lLCB2YWx1ZSk7CiB9CiAKLVJlZlB0cjxSZWFsdGltZU1lZGlhU291cmNlPiBBVkNhcHR1cmVE
ZXZpY2VNYW5hZ2VyOjpzb3VyY2VXaXRoVUlEKGNvbnN0IFN0cmluZyYgZGV2aWNlVUlELCBSZWFs
dGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUsIE1lZGlhQ29uc3RyYWludHMqIGNvbnN0cmFpbnRz
KQorUmVhbHRpbWVNZWRpYVNvdXJjZSogQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6Y3JlYXRlTWVk
aWFTb3VyY2VGb3JDYXB0dXJlRGV2aWNlV2l0aENvbnN0cmFpbnRzKGNvbnN0IENhcHR1cmVEZXZp
Y2VJbmZvJiBjYXB0dXJlRGV2aWNlLCBNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cykKIHsK
LSAgICBpZiAoIWlzQXZhaWxhYmxlKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgVmVjdG9y
PENhcHR1cmVEZXZpY2U+JiBkZXZpY2VzID0gY2FwdHVyZURldmljZUxpc3QoKTsKLSAgICBmb3Ig
KGF1dG8mIGNhcHR1cmVEZXZpY2UgOiBkZXZpY2VzKSB7Ci0gICAgICAgIGlmIChjYXB0dXJlRGV2
aWNlLm1fY2FwdHVyZURldmljZUlEICE9IGRldmljZVVJRCB8fCAhY2FwdHVyZURldmljZS5tX2Vu
YWJsZWQpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAodHlwZSA9PSBSZWFs
dGltZU1lZGlhU291cmNlOjpBdWRpbyAmJiBjYXB0dXJlRGV2aWNlLm1fYXVkaW9Tb3VyY2VJZC5p
c0VtcHR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHR5cGUgPT0gUmVh
bHRpbWVNZWRpYVNvdXJjZTo6VmlkZW8gJiYgY2FwdHVyZURldmljZS5tX3ZpZGVvU291cmNlSWQu
aXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgQVZDYXB0dXJlRGV2
aWNlVHlwZSAqZGV2aWNlID0gW2dldEFWQ2FwdHVyZURldmljZUNsYXNzKCkgZGV2aWNlV2l0aFVu
aXF1ZUlEOmNhcHR1cmVEZXZpY2UubV9jYXB0dXJlRGV2aWNlSURdOwotICAgICAgICBBU1NFUlQo
ZGV2aWNlKTsKLQotICAgICAgICBSZWZQdHI8QVZNZWRpYUNhcHR1cmVTb3VyY2U+IGNhcHR1cmVT
b3VyY2U7Ci0gICAgICAgIGlmICh0eXBlID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OkF1ZGlvKQot
ICAgICAgICAgICAgY2FwdHVyZVNvdXJjZSA9IEFWQXVkaW9DYXB0dXJlU291cmNlOjpjcmVhdGUo
ZGV2aWNlLCBjYXB0dXJlRGV2aWNlLm1fYXVkaW9Tb3VyY2VJZCwgY29uc3RyYWludHMpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBjYXB0dXJlU291cmNlID0gQVZWaWRlb0NhcHR1cmVTb3Vy
Y2U6OmNyZWF0ZShkZXZpY2UsIGNhcHR1cmVEZXZpY2UubV92aWRlb1NvdXJjZUlkLCBjb25zdHJh
aW50cyk7Ci0KLSAgICAgICAgaWYgKGNvbnN0cmFpbnRzKSB7Ci0gICAgICAgICAgICBTdHJpbmcg
aW52YWxpZENvbnN0cmFpbnRzOwotICAgICAgICAgICAgQVZDYXB0dXJlU2Vzc2lvblR5cGUgKnNl
c3Npb24gPSBuaWw7Ci0KLSAgICAgICAgICAgIGlmICh0eXBlID09IFJlYWx0aW1lTWVkaWFTb3Vy
Y2U6OlZpZGVvKQotICAgICAgICAgICAgICAgIHNlc3Npb24gPSBjYXB0dXJlU291cmNlLT5zZXNz
aW9uKCk7Ci0gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6
OkF1ZGlvKQotICAgICAgICAgICAgICAgIHNlc3Npb24gPSBjYXB0dXJlU291cmNlLT5zZXNzaW9u
KCk7Ci0gICAgICAgICAgICBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24oKS52ZXJp
ZnlDb25zdHJhaW50c0Zvck1lZGlhVHlwZShzZXNzaW9uLCB0eXBlLCBjb25zdHJhaW50cywgaW52
YWxpZENvbnN0cmFpbnRzKTsKLQotICAgICAgICAgICAgaWYgKCFpbnZhbGlkQ29uc3RyYWludHMu
aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICByZXR1cm4gY2FwdHVyZVNvdXJjZS5sZWFrUmVmKCk7CisgICAgQVZDYXB0dXJl
RGV2aWNlVHlwZSAqZGV2aWNlID0gW2dldEFWQ2FwdHVyZURldmljZUNsYXNzKCkgZGV2aWNlV2l0
aFVuaXF1ZUlEOmNhcHR1cmVEZXZpY2UubV9wZXJzaXN0ZW50RGV2aWNlSURdOworICAgIGlmICgh
ZGV2aWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJlZlB0cjxBVk1lZGlhQ2Fw
dHVyZVNvdXJjZT4gY2FwdHVyZVNvdXJjZTsKKyAgICBpZiAoY2FwdHVyZURldmljZS5tX3NvdXJj
ZVR5cGUgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW8pCisgICAgICAgIGNhcHR1cmVTb3Vy
Y2UgPSBBVkF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKGRldmljZSwgY2FwdHVyZURldmljZS5t
X3NvdXJjZUlkLCBjb25zdHJhaW50cyk7CisgICAgZWxzZQorICAgICAgICBjYXB0dXJlU291cmNl
ID0gQVZWaWRlb0NhcHR1cmVTb3VyY2U6OmNyZWF0ZShkZXZpY2UsIGNhcHR1cmVEZXZpY2UubV9z
b3VyY2VJZCwgY29uc3RyYWludHMpOworCisgICAgaWYgKGNvbnN0cmFpbnRzKSB7CisgICAgICAg
IENhcHR1cmVTZXNzaW9uSW5mbyBjYXB0dXJlU2Vzc2lvbiA9IGRlZmF1bHRDYXB0dXJlU2Vzc2lv
bigpOworICAgICAgICBpZiAoY2FwdHVyZURldmljZS5tX3NvdXJjZVR5cGUgIT0gUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6Tm9uZSkKKyAgICAgICAgICAgIGNhcHR1cmVTZXNzaW9uID0gQVZDYXB0dXJl
U2Vzc2lvbkluZm8oY2FwdHVyZVNvdXJjZS0+c2Vzc2lvbigpKTsKKworICAgICAgICBTdHJpbmcg
aWdub3JlZEludmFsaWRDb25zdHJhaW50czsKKyAgICAgICAgaWYgKCF2ZXJpZnlDb25zdHJhaW50
c0Zvck1lZGlhVHlwZShjYXB0dXJlRGV2aWNlLm1fc291cmNlVHlwZSwgY29uc3RyYWludHMsICZj
YXB0dXJlU2Vzc2lvbiwgaWdub3JlZEludmFsaWRDb25zdHJhaW50cykpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG51bGxwdHI7Ci0KKyAgICBy
ZXR1cm4gY2FwdHVyZVNvdXJjZS5sZWFrUmVmKCk7CiB9CiAKIHZvaWQgQVZDYXB0dXJlRGV2aWNl
TWFuYWdlcjo6cmVnaXN0ZXJGb3JEZXZpY2VOb3RpZmljYXRpb25zKCkKQEAgLTQ3MSw3ICszMTgs
NyBAQCB2b2lkIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OmRldmljZUNvbm5lY3RlZCgpCiAKIHZv
aWQgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6ZGV2aWNlRGlzY29ubmVjdGVkKEFWQ2FwdHVyZURl
dmljZVR5cGUqIGRldmljZSkKIHsKLSAgICBWZWN0b3I8Q2FwdHVyZURldmljZT4mIGRldmljZXMg
PSBjYXB0dXJlRGV2aWNlTGlzdCgpOworICAgIFZlY3RvcjxDYXB0dXJlRGV2aWNlSW5mbz4mIGRl
dmljZXMgPSBjYXB0dXJlRGV2aWNlTGlzdCgpOwogCiAgICAgc2l6ZV90IGNvdW50ID0gZGV2aWNl
cy5zaXplKCk7CiAgICAgaWYgKCFjb3VudCkKQEAgLTQ3OSw0NSArMzI2LDE4IEBAIHZvaWQgQVZD
YXB0dXJlRGV2aWNlTWFuYWdlcjo6ZGV2aWNlRGlzY29ubmVjdGVkKEFWQ2FwdHVyZURldmljZVR5
cGUqIGRldmljZSkKIAogICAgIFN0cmluZyBkZXZpY2VJRCA9IGRldmljZS51bmlxdWVJRDsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKGRldmlj
ZXNbaV0ubV9jYXB0dXJlRGV2aWNlSUQgPT0gZGV2aWNlSUQpIHsKKyAgICAgICAgaWYgKGRldmlj
ZXNbaV0ubV9wZXJzaXN0ZW50RGV2aWNlSUQgPT0gZGV2aWNlSUQpIHsKICAgICAgICAgICAgIExP
RyhNZWRpYSwgIkFWQ2FwdHVyZURldmljZU1hbmFnZXI6OmRldmljZURpc2Nvbm5lY3RlZCglcCks
IGRldmljZSAlZCBkaXNhYmxlZCIsIHRoaXMsIGkpOwogICAgICAgICAgICAgZGV2aWNlc1tpXS5t
X2VuYWJsZWQgPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIH0KIAotY29uc3QgVmVjdG9yPEF0
b21pY1N0cmluZz4mIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnZhbGlkQ29uc3RyYWludE5hbWVz
KCkKLXsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPEF0b21pY1N0
cmluZz4sIGNvbnN0cmFpbnRzLCAoKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21p
Y1N0cmluZz4gaGVpZ2h0Q29uc3RyYWludCgiaGVpZ2h0IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4g
d2lkdGhDb25zdHJhaW50KCJ3aWR0aCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGZyYW1lUmF0ZUNv
bnN0cmFpbnQoImZyYW1lUmF0ZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
OwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGZhY2luZ01vZGVDb25z
dHJhaW50KCJmYWNpbmdNb2RlIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZ2FpbkNvbnN0cmFpbnQo
ImdhaW4iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAKLSAgICBp
ZiAoIWNvbnN0cmFpbnRzLnNpemUoKSkgewotICAgICAgICBjb25zdHJhaW50cy5pbnNlcnQoV2lk
dGgsIHdpZHRoQ29uc3RyYWludCk7Ci0gICAgICAgIGNvbnN0cmFpbnRzLmluc2VydChIZWlnaHQs
IGhlaWdodENvbnN0cmFpbnQpOwotICAgICAgICBjb25zdHJhaW50cy5pbnNlcnQoRnJhbWVSYXRl
LCBmcmFtZVJhdGVDb25zdHJhaW50KTsKLSAgICAgICAgY29uc3RyYWludHMuaW5zZXJ0KEZhY2lu
Z01vZGUsIGZhY2luZ01vZGVDb25zdHJhaW50KTsKLSAgICAgICAgY29uc3RyYWludHMuaW5zZXJ0
KEdhaW4sIGdhaW5Db25zdHJhaW50KTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGNvbnN0cmFp
bnRzOwotfQotCi1jb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgQVZDYXB0dXJlRGV2aWNlTWFu
YWdlcjo6dmFsaWRGYWNpbmdNb2RlcygpCitib29sIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6Omlz
U3VwcG9ydGVkRnJhbWVSYXRlKGZsb2F0IGZyYW1lUmF0ZSkgY29uc3QKIHsKLSAgICBERVBSRUNB
VEVEX0RFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPEF0b21pY1N0cmluZz4sIG1vZGVzLCAoKSk7
Ci0gICAgCi0gICAgaWYgKCFtb2Rlcy5zaXplKCkpIHsKLSAgICAgICAgbW9kZXMuaW5zZXJ0KFJl
YWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OlVzZXIsIFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6
OmZhY2luZ01vZGUoUmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6VXNlcikpOwotICAgICAgICBt
b2Rlcy5pbnNlcnQoUmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6RW52aXJvbm1lbnQsIFJlYWx0
aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OmZhY2luZ01vZGUoUmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRl
czo6RW52aXJvbm1lbnQpKTsKLSAgICAgICAgbW9kZXMuaW5zZXJ0KFJlYWx0aW1lTWVkaWFTb3Vy
Y2VTdGF0ZXM6OkxlZnQsIFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6OmZhY2luZ01vZGUoUmVh
bHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6TGVmdCkpOwotICAgICAgICBtb2Rlcy5pbnNlcnQoUmVh
bHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6UmlnaHQsIFJlYWx0aW1lTWVkaWFTb3VyY2VTdGF0ZXM6
OmZhY2luZ01vZGUoUmVhbHRpbWVNZWRpYVNvdXJjZVN0YXRlczo6UmlnaHQpKTsKLSAgICB9Ci0g
ICAgCi0gICAgcmV0dXJuIG1vZGVzOworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdXNlIFtBVkNh
cHR1cmVDb25uZWN0aW9uIHZpZGVvTWluRnJhbWVEdXJhdGlvbl0gYW5kIFtBVkNhcHR1cmVDb25u
ZWN0aW9uIHZpZGVvTWF4RnJhbWVEdXJhdGlvbl0sCisgICAgLy8gYnV0IHRoZXkgb25seSB3b3Jr
IHdpdGggYSAibGl2ZSIgQVZDYXB0dXJlQ29ubmVjdGlvbi4gRm9yIG5vdywganVzdCB1c2UgdGhl
IGRlZmF1bHQgcGxhdGZvcm0taW5kZXBlbmRlbnQgYmVoYXZpb3IuCisgICAgcmV0dXJuIENhcHR1
cmVEZXZpY2VNYW5hZ2VyOjppc1N1cHBvcnRlZEZyYW1lUmF0ZShmcmFtZVJhdGUpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVTb3VyY2UubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVTb3VyY2UubW0KaW5kZXgg
NDRhOTgzOTJiNGUyNDEyODI5NGEwMTdlOGE2N2MxY2Q3NjNjMWYwOC4uMjg0ZTE5MjYyZTQxYjEx
Zjc4N2E5OGIzODY1YWFmYjkyNmIzN2Y2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5t
bQpAQCAtMzcsNiArMzcsNyBAQAogI2ltcG9ydCAiTWVkaWFDb25zdHJhaW50cy5oIgogI2ltcG9y
dCAiTm90SW1wbGVtZW50ZWQuaCIKICNpbXBvcnQgIlBsYXRmb3JtTGF5ZXIuaCIKKyNpbXBvcnQg
IlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuaCIKICNpbXBvcnQgIlJlYWx0aW1lTWVkaWFTb3Vy
Y2VTdGF0ZXMuaCIKICNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVkZvdW5kYXRpb24uaD4KICNpbXBv
cnQgPG9iamMvcnVudGltZS5oPgpAQCAtMTc5LDM2ICsxODAsMzkgQEAgYm9vbCBBVlZpZGVvQ2Fw
dHVyZVNvdXJjZTo6YXBwbHlDb25zdHJhaW50cyhNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50
cykKIHsKICAgICBBU1NFUlQoY29uc3RyYWludHMpOwogCi0gICAgY29uc3QgVmVjdG9yPEF0b21p
Y1N0cmluZz4mIGNvbnN0cmFpbnROYW1lcyA9IEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnZhbGlk
Q29uc3RyYWludE5hbWVzKCk7Ci0gICAgU3RyaW5nIHdpZHRoQ29uc3RyYWludDsKLSAgICBTdHJp
bmcgaGVpZ2h0Q29uc3RyYWludDsKKyAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU3VwcG9y
dGVkQ29uc3RyYWludHMmIHN1cHBvcnRlZENvbnN0cmFpbnRzID0gUmVhbHRpbWVNZWRpYVNvdXJj
ZUNlbnRlcjo6c2luZ2xldG9uKCkuc3VwcG9ydGVkQ29uc3RyYWludHMoKTsKKyAgICBTdHJpbmcg
d2lkdGhDb25zdHJhaW50VmFsdWU7CisgICAgU3RyaW5nIGhlaWdodENvbnN0cmFpbnRWYWx1ZTsK
KyAgICBTdHJpbmcgd2lkdGhDb25zdHJhaW50TmFtZSA9IHN1cHBvcnRlZENvbnN0cmFpbnRzLm5h
bWVGb3JDb25zdHJhaW50KE1lZGlhQ29uc3RyYWludFR5cGU6OldpZHRoKTsKKyAgICBTdHJpbmcg
aGVpZ2h0Q29uc3RyYWludE5hbWUgPSBzdXBwb3J0ZWRDb25zdHJhaW50cy5uYW1lRm9yQ29uc3Ry
YWludChNZWRpYUNvbnN0cmFpbnRUeXBlOjpIZWlnaHQpOwogCi0gICAgY29uc3RyYWludHMtPmdl
dE1hbmRhdG9yeUNvbnN0cmFpbnRWYWx1ZShjb25zdHJhaW50TmFtZXNbQVZDYXB0dXJlRGV2aWNl
TWFuYWdlcjo6V2lkdGhdLCB3aWR0aENvbnN0cmFpbnQpOwotICAgIGNvbnN0cmFpbnRzLT5nZXRN
YW5kYXRvcnlDb25zdHJhaW50VmFsdWUoY29uc3RyYWludE5hbWVzW0FWQ2FwdHVyZURldmljZU1h
bmFnZXI6OkhlaWdodF0sIGhlaWdodENvbnN0cmFpbnQpOworICAgIGNvbnN0cmFpbnRzLT5nZXRN
YW5kYXRvcnlDb25zdHJhaW50VmFsdWUod2lkdGhDb25zdHJhaW50TmFtZSwgd2lkdGhDb25zdHJh
aW50VmFsdWUpOworICAgIGNvbnN0cmFpbnRzLT5nZXRNYW5kYXRvcnlDb25zdHJhaW50VmFsdWUo
aGVpZ2h0Q29uc3RyYWludE5hbWUsIGhlaWdodENvbnN0cmFpbnRWYWx1ZSk7CiAKLSAgICBpbnQg
d2lkdGggPSB3aWR0aENvbnN0cmFpbnQudG9JbnQoKTsKLSAgICBpbnQgaGVpZ2h0ID0gaGVpZ2h0
Q29uc3RyYWludC50b0ludCgpOworICAgIGludCB3aWR0aCA9IHdpZHRoQ29uc3RyYWludFZhbHVl
LnRvSW50KCk7CisgICAgaW50IGhlaWdodCA9IGhlaWdodENvbnN0cmFpbnRWYWx1ZS50b0ludCgp
OwogICAgIGlmICghd2lkdGggJiYgIWhlaWdodCkgewotICAgICAgICBjb25zdHJhaW50cy0+Z2V0
T3B0aW9uYWxDb25zdHJhaW50VmFsdWUoY29uc3RyYWludE5hbWVzW0FWQ2FwdHVyZURldmljZU1h
bmFnZXI6OldpZHRoXSwgd2lkdGhDb25zdHJhaW50KTsKLSAgICAgICAgY29uc3RyYWludHMtPmdl
dE9wdGlvbmFsQ29uc3RyYWludFZhbHVlKGNvbnN0cmFpbnROYW1lc1tBVkNhcHR1cmVEZXZpY2VN
YW5hZ2VyOjpIZWlnaHRdLCBoZWlnaHRDb25zdHJhaW50KTsKLSAgICAgICAgd2lkdGggPSB3aWR0
aENvbnN0cmFpbnQudG9JbnQoKTsKLSAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0Q29uc3RyYWludC50
b0ludCgpOworICAgICAgICBjb25zdHJhaW50cy0+Z2V0T3B0aW9uYWxDb25zdHJhaW50VmFsdWUo
d2lkdGhDb25zdHJhaW50TmFtZSwgd2lkdGhDb25zdHJhaW50VmFsdWUpOworICAgICAgICBjb25z
dHJhaW50cy0+Z2V0T3B0aW9uYWxDb25zdHJhaW50VmFsdWUoaGVpZ2h0Q29uc3RyYWludE5hbWUs
IGhlaWdodENvbnN0cmFpbnRWYWx1ZSk7CisgICAgICAgIHdpZHRoID0gd2lkdGhDb25zdHJhaW50
VmFsdWUudG9JbnQoKTsKKyAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0Q29uc3RyYWludFZhbHVlLnRv
SW50KCk7CiAgICAgfQogICAgIAogICAgIGlmICh3aWR0aCB8fCBoZWlnaHQpIHsKLSAgICAgICAg
TlNTdHJpbmcgKnByZXNldCA9IEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OmJlc3RTZXNzaW9uUHJl
c2V0Rm9yVmlkZW9TaXplKHNlc3Npb24oKSwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIE5TU3Ry
aW5nICpwcmVzZXQgPSBBVkNhcHR1cmVTZXNzaW9uSW5mbyhzZXNzaW9uKCkpLmJlc3RTZXNzaW9u
UHJlc2V0Rm9yVmlkZW9EaW1lbnNpb25zKHdpZHRoLCBoZWlnaHQpOwogICAgICAgICBpZiAoIXBy
ZXNldCB8fCAhW3Nlc3Npb24oKSBjYW5TZXRTZXNzaW9uUHJlc2V0OnByZXNldF0pCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBbc2Vzc2lvbigpIHNldFNlc3Np
b25QcmVzZXQ6cHJlc2V0XTsKICAgICB9CiAKLSAgICBTdHJpbmcgZnJhbWVSYXRlQ29uc3RyYWlu
dDsKLSAgICBjb25zdHJhaW50cy0+Z2V0TWFuZGF0b3J5Q29uc3RyYWludFZhbHVlKGNvbnN0cmFp
bnROYW1lc1tBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpGcmFtZVJhdGVdLCBmcmFtZVJhdGVDb25z
dHJhaW50KTsKLSAgICBmbG9hdCBmcmFtZVJhdGUgPSBmcmFtZVJhdGVDb25zdHJhaW50LnRvRmxv
YXQoKTsKKyAgICBTdHJpbmcgZnJhbWVSYXRlQ29uc3RyYWludFZhbHVlOworICAgIFN0cmluZyBm
cmFtZVJhdGVDb25zdHJhaW50TmFtZSA9IHN1cHBvcnRlZENvbnN0cmFpbnRzLm5hbWVGb3JDb25z
dHJhaW50KE1lZGlhQ29uc3RyYWludFR5cGU6OkZyYW1lUmF0ZSk7CisgICAgY29uc3RyYWludHMt
PmdldE1hbmRhdG9yeUNvbnN0cmFpbnRWYWx1ZShmcmFtZVJhdGVDb25zdHJhaW50TmFtZSwgZnJh
bWVSYXRlQ29uc3RyYWludFZhbHVlKTsKKyAgICBmbG9hdCBmcmFtZVJhdGUgPSBmcmFtZVJhdGVD
b25zdHJhaW50VmFsdWUudG9GbG9hdCgpOwogICAgIGlmICghZnJhbWVSYXRlKSB7Ci0gICAgICAg
IGNvbnN0cmFpbnRzLT5nZXRPcHRpb25hbENvbnN0cmFpbnRWYWx1ZShjb25zdHJhaW50TmFtZXNb
QVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6RnJhbWVSYXRlXSwgZnJhbWVSYXRlQ29uc3RyYWludCk7
Ci0gICAgICAgIGZyYW1lUmF0ZSA9IGZyYW1lUmF0ZUNvbnN0cmFpbnQudG9GbG9hdCgpOworICAg
ICAgICBjb25zdHJhaW50cy0+Z2V0T3B0aW9uYWxDb25zdHJhaW50VmFsdWUoZnJhbWVSYXRlQ29u
c3RyYWludE5hbWUsIGZyYW1lUmF0ZUNvbnN0cmFpbnRWYWx1ZSk7CisgICAgICAgIGZyYW1lUmF0
ZSA9IGZyYW1lUmF0ZUNvbnN0cmFpbnRWYWx1ZS50b0Zsb2F0KCk7CiAgICAgfQogICAgIGlmIChm
cmFtZVJhdGUgJiYgIXNldEZyYW1lUmF0ZUNvbnN0cmFpbnQoZnJhbWVSYXRlLCAwKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJN
YWMuY3BwCmluZGV4IGM5ODMzYWY3NDk2ZmQ3ZGJkMzVkMDEwMjk4OGJmYzkxYzQ5NzM3OGYuLjVj
MzA2NGE1YjI0ZWVlY2E5MzQ5ZDQ2MTc1ZWQ2NzUxYjUwZjI4OWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5jcHAKQEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBS
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjOjp2YWxpZGF0ZVJlcXVlc3RDb25zdHJhaW50cyhN
ZWRpYVN0cmVhbUNyZWF0aW8KIAogICAgIGlmIChhdWRpb0NvbnN0cmFpbnRzKSB7CiAgICAgICAg
IFN0cmluZyBpbnZhbGlkQ29uc3RyYWludDsKLSAgICAgICAgQVZDYXB0dXJlRGV2aWNlTWFuYWdl
cjo6c2luZ2xldG9uKCkudmVyaWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5cGUobmlsLCBSZWFsdGlt
ZU1lZGlhU291cmNlOjpBdWRpbywgYXVkaW9Db25zdHJhaW50cy5nZXQoKSwgaW52YWxpZENvbnN0
cmFpbnQpOworICAgICAgICBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24oKS52ZXJp
ZnlDb25zdHJhaW50c0Zvck1lZGlhVHlwZShSZWFsdGltZU1lZGlhU291cmNlOjpBdWRpbywgYXVk
aW9Db25zdHJhaW50cy5nZXQoKSwgbnVsbHB0ciwgaW52YWxpZENvbnN0cmFpbnQpOwogICAgICAg
ICBpZiAoIWludmFsaWRDb25zdHJhaW50LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgY2xpZW50
LT5jb25zdHJhaW50c0ludmFsaWQoaW52YWxpZENvbnN0cmFpbnQpOwogICAgICAgICAgICAgcmV0
dXJuOwpAQCAtODcsNyArODcsNyBAQCB2b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWM6
OnZhbGlkYXRlUmVxdWVzdENvbnN0cmFpbnRzKE1lZGlhU3RyZWFtQ3JlYXRpbwogCiAgICAgaWYg
KHZpZGVvQ29uc3RyYWludHMpIHsKICAgICAgICAgU3RyaW5nIGludmFsaWRDb25zdHJhaW50Owot
ICAgICAgICBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24oKS52ZXJpZnlDb25zdHJh
aW50c0Zvck1lZGlhVHlwZShuaWwsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlZpZGVvLCB2aWRlb0Nv
bnN0cmFpbnRzLmdldCgpLCBpbnZhbGlkQ29uc3RyYWludCk7CisgICAgICAgIEFWQ2FwdHVyZURl
dmljZU1hbmFnZXI6OnNpbmdsZXRvbigpLnZlcmlmeUNvbnN0cmFpbnRzRm9yTWVkaWFUeXBlKFJl
YWx0aW1lTWVkaWFTb3VyY2U6OlZpZGVvLCB2aWRlb0NvbnN0cmFpbnRzLmdldCgpLCBudWxscHRy
LCBpbnZhbGlkQ29uc3RyYWludCk7CiAgICAgICAgIGlmICghaW52YWxpZENvbnN0cmFpbnQuaXNF
bXB0eSgpKSB7CiAgICAgICAgICAgICBjbGllbnQtPmNvbnN0cmFpbnRzSW52YWxpZChpbnZhbGlk
Q29uc3RyYWludCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMDksNyArMTA5LDcgQEAgdm9p
ZCBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjOjpjcmVhdGVNZWRpYVN0cmVhbShQYXNzUmVm
UHRyPE1lZGlhU3RyZWFtQ3JlYXQKICAgICAKICAgICBpZiAoYXVkaW9Db25zdHJhaW50cykgewog
ICAgICAgICBTdHJpbmcgaW52YWxpZENvbnN0cmFpbnQ7Ci0gICAgICAgIEFWQ2FwdHVyZURldmlj
ZU1hbmFnZXI6OnNpbmdsZXRvbigpLnZlcmlmeUNvbnN0cmFpbnRzRm9yTWVkaWFUeXBlKG5pbCwg
UmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW8sIGF1ZGlvQ29uc3RyYWludHMuZ2V0KCksIGludmFs
aWRDb25zdHJhaW50KTsKKyAgICAgICAgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9u
KCkudmVyaWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5cGUoUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVk
aW8sIGF1ZGlvQ29uc3RyYWludHMuZ2V0KCksIG51bGxwdHIsIGludmFsaWRDb25zdHJhaW50KTsK
ICAgICAgICAgaWYgKCFpbnZhbGlkQ29uc3RyYWludC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
IGNsaWVudC0+ZmFpbGVkVG9DcmVhdGVTdHJlYW1XaXRoQ29uc3RyYWludHNFcnJvcihpbnZhbGlk
Q29uc3RyYWludCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMjQsNyArMTI0LDcgQEAgdm9p
ZCBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjOjpjcmVhdGVNZWRpYVN0cmVhbShQYXNzUmVm
UHRyPE1lZGlhU3RyZWFtQ3JlYXQKICAgICAKICAgICBpZiAodmlkZW9Db25zdHJhaW50cykgewog
ICAgICAgICBTdHJpbmcgaW52YWxpZENvbnN0cmFpbnQ7Ci0gICAgICAgIEFWQ2FwdHVyZURldmlj
ZU1hbmFnZXI6OnNpbmdsZXRvbigpLnZlcmlmeUNvbnN0cmFpbnRzRm9yTWVkaWFUeXBlKG5pbCwg
UmVhbHRpbWVNZWRpYVNvdXJjZTo6VmlkZW8sIHZpZGVvQ29uc3RyYWludHMuZ2V0KCksIGludmFs
aWRDb25zdHJhaW50KTsKKyAgICAgICAgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9u
KCkudmVyaWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5cGUoUmVhbHRpbWVNZWRpYVNvdXJjZTo6Vmlk
ZW8sIHZpZGVvQ29uc3RyYWludHMuZ2V0KCksIG51bGxwdHIsIGludmFsaWRDb25zdHJhaW50KTsK
ICAgICAgICAgaWYgKCFpbnZhbGlkQ29uc3RyYWludC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
IGNsaWVudC0+ZmFpbGVkVG9DcmVhdGVTdHJlYW1XaXRoQ29uc3RyYWludHNFcnJvcihpbnZhbGlk
Q29uc3RyYWludCk7CiAgICAgICAgICAgICByZXR1cm47Cg==
</data>
<flag name="review"
          id="291172"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
      

    </bug>

</bugzilla>