<?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>173718</bug_id>
          
          <creation_ts>2017-06-22 09:08:36 -0700</creation_ts>
          <short_desc>[iOS] Respond to AudioSession interruption and resume</short_desc>
          <delta_ts>2022-10-05 16:05:50 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>Other</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="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>ahmad.saleem792</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1321914</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-06-22 09:08:36 -0700</bug_when>
    <thetext>Handle AudioSession interruption and resume</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321915</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-06-22 09:09:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/32925263&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321938</commentid>
    <comment_count>2</comment_count>
      <attachid>313639</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-06-22 09:51:35 -0700</bug_when>
    <thetext>Created attachment 313639
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321978</commentid>
    <comment_count>3</comment_count>
      <attachid>313639</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-06-22 11:24:40 -0700</bug_when>
    <thetext>Comment on attachment 313639
Proposed patch.

LGTM.
I tried to think about cases where we would run into issues with all these states but just got some questions.
I wonder how much we would be able to test that all these state handling are fine with unit testing.

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

&gt; Source/WebCore/platform/mediastream/ios/CoreAudioCaptureSourceIOS.h:38
&gt; +private:

No need for space above private?

&gt; Source/WebCore/platform/mediastream/ios/CoreAudioCaptureSourceIOS.h:42
&gt; +    virtual ~CoreAudioCaptureSourceIOS();

Probably no need for virtual here.

&gt; Source/WebCore/platform/mediastream/ios/CoreAudioCaptureSourceIOS.mm:88
&gt; +        return;

Can this case actually happen?
If the listener callback is null, it is probably because it was invalidated and will not receive this notification?

&gt; Source/WebCore/platform/mediastream/ios/CoreAudioCaptureSourceIOS.mm:92
&gt; +    else {

Should we assert that the interruptionType is AVAudioSessionInterruptionTypeEnded? Maybe overkill?

&gt; Source/WebCore/platform/mediastream/ios/CoreAudioCaptureSourceIOS.mm:97
&gt; +#endif

Probably no need for #if/#endif, except if wanting to do release logging, which might be useful.

Do we want to log that an interruption started also?

&gt; Source/WebCore/platform/mediastream/ios/CoreAudioCaptureSourceIOS.mm:98
&gt; +        _callback-&gt;endInterruption();

If there is an error in setActive, should we still call endInterruption or do specific handling?

&gt; Source/WebCore/platform/mediastream/ios/CoreAudioCaptureSourceIOS.mm:107
&gt; +        return;

Is it needed?

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:90
&gt; +    bool suspended() const { return m_suspended; }

Since we have suspend which is close, maybe we should name it isSuspended()?

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:605
&gt; +OSStatus CoreAudioSharedUnit::resume()

This seems very close to startProducingData().
Maybe we can do some nice refactoring?

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:618
&gt; +        LOG(Media, &quot;CoreAudioSharedUnit::start(%p) AudioOutputUnitStart failed with error %d (%.4s)&quot;, this, (int)err, (char*)&amp;err);

::start -&gt; ::resume.

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:668
&gt; +

These two lines are also good for iOS, in particular persistentID which is missing in iOS.
Maybe, to help the readability, you could introduce some helper functions like deviceFromID and createCaptureSource that would have the #if/#endif and keep CoreAudioCaptureSource::create free from #if/#endif.
The alternative would be to have a CoreAudioCaptureSourceIOS::create and have this handling in the factory.

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:685
&gt; +    return CaptureSourceOrError(*source);

Use source.releaseNonNull() probably or you can stick with auto in both places.

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:858
&gt; +        m_suspendType = unit.isProducingData() ? SuspensionType::WhilePlaying : SuspensionType::WhilePaused;

What happens in the case of the source being played before interruption, so m_suspendType is SuspensionType::WhilePlaying but the user paused the source during interruption?

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:885
&gt; +        return;

Why is the handling of m_suspendType and m_reconfigurationState different?

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:888
&gt; +    scheduleDeferredTask([this, type, &amp;unit] {

No need to pass unit, sing you can get it through CoreAudioSharedUnit::singleton().

&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h:73
&gt; +    void scheduleReconfiguration();

Maybe you can make WebCoreAudioCaptureSourceIOSListener a friend?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322099</commentid>
    <comment_count>4</comment_count>
      <attachid>313667</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-06-22 15:48:19 -0700</bug_when>
    <thetext>Created attachment 313667
Patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322100</commentid>
    <comment_count>5</comment_count>
      <attachid>313639</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-06-22 15:49:42 -0700</bug_when>
    <thetext>Comment on attachment 313639
Proposed patch.

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

&gt;&gt; Source/WebCore/platform/mediastream/ios/CoreAudioCaptureSourceIOS.mm:88
&gt;&gt; +        return;
&gt; 
&gt; Can this case actually happen?
&gt; If the listener callback is null, it is probably because it was invalidated and will not receive this notification?

True in theory, I will leave it and add an ASSERT.

&gt;&gt; Source/WebCore/platform/mediastream/ios/CoreAudioCaptureSourceIOS.mm:92
&gt;&gt; +    else {
&gt; 
&gt; Should we assert that the interruptionType is AVAudioSessionInterruptionTypeEnded? Maybe overkill?

Might be overkill, but fixed.

&gt;&gt; Source/WebCore/platform/mediastream/ios/CoreAudioCaptureSourceIOS.mm:98
&gt;&gt; +        _callback-&gt;endInterruption();
&gt; 
&gt; If there is an error in setActive, should we still call endInterruption or do specific handling?

We definitely want to end the interruption because we won&apos;t get another notification, but we will attempt to call setActive later when a media element begins playing so I think this is OK.

&gt;&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:90
&gt;&gt; +    bool suspended() const { return m_suspended; }
&gt; 
&gt; Since we have suspend which is close, maybe we should name it isSuspended()?

Fixed

&gt;&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:605
&gt;&gt; +OSStatus CoreAudioSharedUnit::resume()
&gt; 
&gt; This seems very close to startProducingData().
&gt; Maybe we can do some nice refactoring?

Good idea, done.

&gt;&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:668
&gt;&gt; +
&gt; 
&gt; These two lines are also good for iOS, in particular persistentID which is missing in iOS.
&gt; Maybe, to help the readability, you could introduce some helper functions like deviceFromID and createCaptureSource that would have the #if/#endif and keep CoreAudioCaptureSource::create free from #if/#endif.
&gt; The alternative would be to have a CoreAudioCaptureSourceIOS::create and have this handling in the factory.

Restructured.

&gt;&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:685
&gt;&gt; +    return CaptureSourceOrError(*source);
&gt; 
&gt; Use source.releaseNonNull() probably or you can stick with auto in both places.

Reverted because of the restructuring of the platform-specific code.

&gt;&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:858
&gt;&gt; +        m_suspendType = unit.isProducingData() ? SuspensionType::WhilePlaying : SuspensionType::WhilePaused;
&gt; 
&gt; What happens in the case of the source being played before interruption, so m_suspendType is SuspensionType::WhilePlaying but the user paused the source during interruption?

Good point!

&gt;&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:885
&gt;&gt; +        return;
&gt; 
&gt; Why is the handling of m_suspendType and m_reconfigurationState different?

We only stop the unit for a Suspension, but we tear it down completely and rebuild it for a reconfiguration.

&gt;&gt; Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:888
&gt;&gt; +    scheduleDeferredTask([this, type, &amp;unit] {
&gt; 
&gt; No need to pass unit, sing you can get it through CoreAudioSharedUnit::singleton().

Yes, but we may call it twice so that will require two calls to the getter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322103</commentid>
    <comment_count>6</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-06-22 15:51:05 -0700</bug_when>
    <thetext>Attachment 313667 did not pass style-queue:


ERROR: Source/WebCore/platform/mediastream/ios/CoreAudioCaptureSourceIOS.mm:103:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322277</commentid>
    <comment_count>7</comment_count>
      <attachid>313713</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-06-23 06:11:13 -0700</bug_when>
    <thetext>Created attachment 313713
Patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322294</commentid>
    <comment_count>8</comment_count>
      <attachid>313713</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-06-23 08:40:09 -0700</bug_when>
    <thetext>Comment on attachment 313713
Patch for landing.

Clearing flags on attachment: 313713

Committed r218746: &lt;http://trac.webkit.org/changeset/218746&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1903582</commentid>
    <comment_count>9</comment_count>
    <who name="Ahmad Saleem">ahmad.saleem792</who>
    <bug_when>2022-10-05 16:05:50 -0700</bug_when>
    <thetext>This patched landed but this bug was not closed:

https://github.com/WebKit/WebKit/commit/222633f9e8ce0aedf71f94653126404dc1de8a3c

Marking this as &quot;RESOLVED FIXED&quot;. Thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313639</attachid>
            <date>2017-06-22 09:51:35 -0700</date>
            <delta_ts>2017-06-22 15:48:35 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>ios_audio_interruption_patch_2.txt</filename>
            <type>text/plain</type>
            <size>24592</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDE3LTA2LTIyICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFJlc3BvbmQg
dG8gQXVkaW9TZXNzaW9uIGludGVycnVwdGlvbiBhbmQgcmVzdW1lCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM3MTgKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzMyOTI1MjYzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRlc3RlZCBtYW51YWxseS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajogQWRkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2VJT1MubW0vLmgKKwor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuaDogTWFr
ZSBjcmVhdGVXZWFrUHRyIHByb3RlY3RlZCBzbyBkZXJpdmVkIGNsYXNzZXMKKyAgICAgICAgY2Fu
IHVzZSBpdC4KKworICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2lvcy9Db3JlQXVkaW9D
YXB0dXJlU291cmNlSU9TLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFt
L2lvcy9Db3JlQXVkaW9DYXB0dXJlU291cmNlSU9TLm1tOiBBZGRlZC4KKyAgICAgICAgKC1bV2Vi
Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPU0xpc3RlbmVyIGluaXRXaXRoQ2FsbGJhY2s6XSk6Cisg
ICAgICAgICgtW1dlYkNvcmVBdWRpb0NhcHR1cmVTb3VyY2VJT1NMaXN0ZW5lciBpbnZhbGlkYXRl
XSk6CisgICAgICAgICgtW1dlYkNvcmVBdWRpb0NhcHR1cmVTb3VyY2VJT1NMaXN0ZW5lciBoYW5k
bGVJbnRlcnJ1cHRpb246XSk6CisgICAgICAgICgtW1dlYkNvcmVBdWRpb0NhcHR1cmVTb3VyY2VJ
T1NMaXN0ZW5lciBzZXNzaW9uTWVkaWFTZXJ2aWNlc1dlcmVSZXNldDpdKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2VJT1M6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2VJ
T1MpOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPUzo6fkNvcmVB
dWRpb0NhcHR1cmVTb3VyY2VJT1MpOgorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1
ZGlvU2hhcmVkVW5pdDo6c3VzcGVuZGVkKTogCisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9T
aGFyZWRVbml0OjpzZXR1cEF1ZGlvVW5pdCk6IENsZWFyIG1fc3VzcGVuZGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q29yZUF1ZGlvU2hhcmVkVW5pdDo6c3VzcGVuZCk6IERvbid0IGNsZWFyIHNvdXJj
ZXMgb3IgdW5pbml0aWFsaXplIHRoZSBhdWRpbyB1bml0LAorICAgICAgICBzdXNwZW5kIGlzIHRl
bXBvcmFyeS4gU2V0IG1fc3VzcGVuZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlvU2hh
cmVkVW5pdDo6cmVzdW1lKTogTmV3LCByZXN0YXJ0IHRoZSBhdWRpbyB1bml0LgorICAgICAgICAo
V2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlKTogQ3JlYXRlIHRoZSBjb3Jy
ZWN0IG9iamVjdC4KKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnNj
aGVkdWxlUmVjb25maWd1cmF0aW9uKTogRGlzcGF0Y2ggdG8gbWFpbiB0aHJlYWQgaWYgbmVjZXNz
YXJ5LgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6YmVnaW5JbnRl
cnJ1cHRpb24pOiBOZXcsIHN1c3BlbmQgZnJvbSBtYWluIHRocmVhZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmVuZEludGVycnVwdGlvbik6IE5ldywgcmVzdW1l
L3JlY29uZmlndXJlIGZyb20gbWFpbiB0aHJlYWQuCisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVk
aW9DYXB0dXJlU291cmNlOjppbnRlcnJ1cHRlZCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaDoKKwogMjAxNy0wNi0yMiAgWW91ZW5u
IEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYlJUQ10gUHJldmVudCBj
YXB0dXJpbmcgYXQgdW5jb252ZW50aW9uYWwgcmVzb2x1dGlvbnMgd2hlbiB1c2luZyB0aGUgU1cg
ZW5jb2RlciBvbiBNYWMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxODYwOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjYx
LDYgKzI2MSw4IEBACiAJCTA3QUJFRjZFMUQ4QTFDNzYwMEYyMTk3MiAvKiBNZWRpYURldmljZXNF
bnVtZXJhdGlvblJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA3QUJFRjZEMUQ4QTFDNzYwMEYyMTk3MiAvKiBNZWRpYURldmljZXNFbnVtZXJh
dGlvblJlcXVlc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwN0FDNDcwMTE5NTIxMDIxMDBFRTk3MjMgLyogSVNPVlRUQ3VlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3QUM0NkZGMTk1MjEwMjEw
MEVFOTcyMyAvKiBJU09WVFRDdWUuY3BwICovOyB9OwogCQkwN0FDNDcwMjE5NTIxMDIxMDBFRTk3
MjMgLyogSVNPVlRUQ3VlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwN0FDNDcwMDE5NTIxMDIxMDBFRTk3MjMgLyogSVNPVlRUQ3VlLmggKi87IH07CisJ
CTA3QUZGNDIyMUVGQjE0NDkwMEI1NDVCMyAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlSU9TLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0FGRjQyMDFF
RkIxNDQ3MDBCNTQ1QjMgLyogQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPUy5oICovOyB9OworCQkw
N0FGRjQyMzFFRkIxNDQ5MDBCNTQ1QjMgLyogQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPUy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3QUZGNDIxMUVG
QjE0NDcwMEI1NDVCMyAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlSU9TLm1tICovOyB9OwogCQkw
N0IwMTEzRjEwMzIyNDIyMDBGQkRDMzMgLyogQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3QjAxMTNFMTAz
MjI0MjIwMEZCREMzMyAvKiBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5oICovOyB9OwogCQkw
N0IwQUJDRjEwMzIyNDIyMDBGQkRDMzMgLyogQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3QjBBQkNFMTAz
MjI0MjIwMEZCREMzMyAvKiBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudC5oICovOyB9OwogCQkw
N0I0NDJENjE2NkM3MEIwMDA1NTZDQUQgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0I0NDJENDE2
NkM3MEIwMDA1NTZDQUQgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAgKi87IH07CkBA
IC03Njg0LDYgKzc2ODYsOCBAQAogCQkwN0FCRUY2RDFEOEExQzc2MDBGMjE5NzIgLyogTWVkaWFE
ZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwN0FDNDZGRjE5NTIxMDIxMDBFRTk3MjMgLyogSVNPVlRUQ3VlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElTT1ZUVEN1ZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3QUM0NzAwMTk1MjEwMjEwMEVFOTcyMyAvKiBJU09WVFRD
dWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSVNPVlRUQ3VlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3QUZGNDIwMUVGQjE0NDcwMEI1NDVCMyAvKiBDb3Jl
QXVkaW9DYXB0dXJlU291cmNlSU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENvcmVBdWRpb0NhcHR1cmVTb3VyY2VJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMDdBRkY0MjExRUZCMTQ0NzAwQjU0NUIzIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2VJT1Mu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDb3JlQXVkaW9DYXB0
dXJlU291cmNlSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwN0IwMTEzRTEw
MzIyNDIyMDBGQkRDMzMgLyogQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDdCMEFCQ0UxMDMyMjQyMjAwRkJEQzMzIC8qIEFj
Y2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA3QjQ0MkQ0MTY2QzcwQjAwMDU1NkNBRCAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRl
QVZGLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluYmFuZFRleHRU
cmFja1ByaXZhdGVBVkYuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQ0NTcs
NiArMjQ0NjEsOCBAQAogCQkJCUNEQzY3NTI0MUVBRUE5RDQwMDcyN0M4NCAvKiBBVkF1ZGlvU2Vz
c2lvbkNhcHR1cmVEZXZpY2UubW0gKi8sCiAJCQkJQ0RDNjc1MjExRUFFQTlCNzAwNzI3Qzg0IC8q
IEFWQXVkaW9TZXNzaW9uQ2FwdHVyZURldmljZU1hbmFnZXIuaCAqLywKIAkJCQlDREM2NzUyMDFF
QUVBOUI3MDA3MjdDODQgLyogQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlci5tbSAq
LywKKwkJCQkwN0FGRjQyMDFFRkIxNDQ3MDBCNTQ1QjMgLyogQ29yZUF1ZGlvQ2FwdHVyZVNvdXJj
ZUlPUy5oICovLAorCQkJCTA3QUZGNDIxMUVGQjE0NDcwMEI1NDVCMyAvKiBDb3JlQXVkaW9DYXB0
dXJlU291cmNlSU9TLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBpb3M7CiAJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwpAQCAtMjY4OTksNiArMjY5MDUsNyBAQAogCQkJCTk3NDZBRjIxMTRGNERE
RTYwMDNFN0E3MSAvKiBDb29yZGluYXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJM0Y4MDIwMzUx
RTlFNDdCRjAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTNGODAyMDM3MUU5RTQ3QzUwMERFQzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJlRGV2aWNl
TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDdBRkY0MjIxRUZCMTQ0OTAwQjU0NUIzIC8q
IENvcmVBdWRpb0NhcHR1cmVTb3VyY2VJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFMTI1MjM3
MUExNUJEQkUwMDg2NDQ4MCAvKiBDb3JlR3JhcGhpY3NTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQ0MzgxODAwMUE5MUIyRjgwMDZFMDRGMiAvKiBDb3JlTWVkaWFTb2Z0TGluay5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDQ0OUE0MDUxQTk2NEIwMDAwQjY0QUQ1IC8qIENvcmVNZWRpYVNQSS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zMDk5Niw2ICszMTAwMyw3IEBACiAJCQkJM0Y4MDIwMzYxRTlFNDdD
MzAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJM0Y4MDIwMzgxRTlFNDdDOTAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5h
Z2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTNGRjFGQTY2MUU3MzUwRkQwMEMxMDAyRiAvKiBD
b3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA3QUZGNDIzMUVG
QjE0NDkwMEI1NDVCMyAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlSU9TLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNDQzODE3RkYxQTkxQjJGODAwNkUwNEYyIC8qIENvcmVNZWRpYVNvZnRMaW5rLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUNEN0QzMzQ3MUM3QTE2QkYwMDA0MTI5MyAvKiBDb3JlVmlk
ZW9Tb2Z0TGluay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzVFQjk1MDBFODIwNTZCMDBCMjU5
NjUgLyogQ291bnRlckRpcmVjdGl2ZXMuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRp
YVNvdXJjZS5oCShyZXZpc2lvbiAyMTg2MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNSwx
MCArMjM1LDEwIEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgdmlkZW9TYW1wbGVBdmFpbGFibGUo
TWVkaWFTYW1wbGUmKTsKICAgICB2b2lkIGF1ZGlvU2FtcGxlc0F2YWlsYWJsZShjb25zdCBNZWRp
YVRpbWUmLCBjb25zdCBQbGF0Zm9ybUF1ZGlvRGF0YSYsIGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24mLCBzaXplX3QpOwotICAgIAotcHJpdmF0ZToKKwogICAgIFdlYWtQdHI8UmVhbHRpbWVN
ZWRpYVNvdXJjZT4gY3JlYXRlV2Vha1B0cigpIHsgcmV0dXJuIG1fd2Vha1B0ckZhY3RvcnkuY3Jl
YXRlV2Vha1B0cigpOyB9CiAKK3ByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0UHJvZHVj
aW5nRGF0YSgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpIHsgfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9pb3MvQ29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZUlPUy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2lvcy9Db3JlQXVkaW9DYXB0dXJlU291cmNlSU9TLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vaW9zL0NvcmVBdWRpb0Nh
cHR1cmVTb3VyY2VJT1MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlICJDb3Jl
QXVkaW9DYXB0dXJlU291cmNlLmgiCisKK09CSkNfQ0xBU1MgV2ViQ29yZUF1ZGlvQ2FwdHVyZVNv
dXJjZUlPU0xpc3RlbmVyOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvcmVBdWRp
b0NhcHR1cmVTb3VyY2VJT1MgZmluYWwgOiBwdWJsaWMgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZSB7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U7CisK
KyAgICBDb3JlQXVkaW9DYXB0dXJlU291cmNlSU9TKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsIGNv
bnN0IFN0cmluZyYgbGFiZWwsIHVpbnQzMl90IHBlcnNpc3RlbnRJRCk7CisgICAgdmlydHVhbCB+
Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPUygpOworCisgICAgUmV0YWluUHRyPFdlYkNvcmVBdWRp
b0NhcHR1cmVTb3VyY2VJT1NMaXN0ZW5lcj4gbV9saXN0ZW5lcjsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9pb3MvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJj
ZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9pb3MvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPUy5tbQkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9pb3MvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJj
ZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb3JlQXVkaW9DYXB0dXJlU291cmNlSU9TLmgi
CisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBQTEFURk9STShJT1MpCisKKyNpbXBvcnQg
IkxvZ2dpbmcuaCIKKyNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCisjaW1wb3J0IDxBVkZvdW5kYXRp
b24vQVZBdWRpb1Nlc3Npb24uaD4KKyNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CisKK3R5cGVk
ZWYgQVZBdWRpb1Nlc3Npb24gQVZBdWRpb1Nlc3Npb25UeXBlOworCitTT0ZUX0xJTktfRlJBTUVX
T1JLKEFWRm91bmRhdGlvbikKK1NPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWQXVkaW9T
ZXNzaW9uKQorCitTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWQXVkaW9TZXNzaW9u
SW50ZXJydXB0aW9uTm90aWZpY2F0aW9uLCBOU1N0cmluZyAqKQorU09GVF9MSU5LX1BPSU5URVIo
QVZGb3VuZGF0aW9uLCBBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvblR5cGVLZXksIE5TU3RyaW5n
ICopCitTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWQXVkaW9TZXNzaW9uTWVkaWFT
ZXJ2aWNlc1dlcmVSZXNldE5vdGlmaWNhdGlvbiwgTlNTdHJpbmcgKikKKworI2RlZmluZSBBVkF1
ZGlvU2Vzc2lvbiBnZXRBVkF1ZGlvU2Vzc2lvbkNsYXNzKCkKKyNkZWZpbmUgQVZBdWRpb1Nlc3Np
b25JbnRlcnJ1cHRpb25Ob3RpZmljYXRpb24gZ2V0QVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25O
b3RpZmljYXRpb24oKQorI2RlZmluZSBBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvblR5cGVLZXkg
Z2V0QVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25UeXBlS2V5KCkKKyNkZWZpbmUgQVZBdWRpb1Nl
c3Npb25NZWRpYVNlcnZpY2VzV2VyZVJlc2V0Tm90aWZpY2F0aW9uIGdldEFWQXVkaW9TZXNzaW9u
TWVkaWFTZXJ2aWNlc1dlcmVSZXNldE5vdGlmaWNhdGlvbigpCisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCitAaW50ZXJmYWNlIFdlYkNvcmVBdWRpb0NhcHR1cmVTb3VyY2VJT1NMaXN0ZW5l
ciA6IE5TT2JqZWN0IHsKKyAgICBDb3JlQXVkaW9DYXB0dXJlU291cmNlSU9TKiBfY2FsbGJhY2s7
Cit9CisKKy0gKHZvaWQpaW52YWxpZGF0ZTsKKy0gKHZvaWQpaGFuZGxlSW50ZXJydXB0aW9uOihO
U05vdGlmaWNhdGlvbiopbm90aWZpY2F0aW9uOworLSAodm9pZClzZXNzaW9uTWVkaWFTZXJ2aWNl
c1dlcmVSZXNldDooTlNOb3RpZmljYXRpb24qKW5vdGlmaWNhdGlvbjsKK0BlbmQKKworQGltcGxl
bWVudGF0aW9uIFdlYkNvcmVBdWRpb0NhcHR1cmVTb3VyY2VJT1NMaXN0ZW5lcgorLSAoaWQpaW5p
dFdpdGhDYWxsYmFjazooQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPUyopY2FsbGJhY2sKK3sKKyAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIF9jYWxsYmFjayA9IGNhbGxiYWNrOworCisgICAgTlNOb3RpZmljYXRpb25DZW50
ZXIqIGNlbnRlciA9IFtOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXTsKKyAgICBB
VkF1ZGlvU2Vzc2lvblR5cGUqIHNlc3Npb24gPSBbQVZBdWRpb1Nlc3Npb24gc2hhcmVkSW5zdGFu
Y2VdOworCisgICAgW2NlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvciho
YW5kbGVJbnRlcnJ1cHRpb246KSBuYW1lOkFWQXVkaW9TZXNzaW9uSW50ZXJydXB0aW9uTm90aWZp
Y2F0aW9uIG9iamVjdDpzZXNzaW9uXTsKKyAgICBbY2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2Vs
ZWN0b3I6QHNlbGVjdG9yKHNlc3Npb25NZWRpYVNlcnZpY2VzV2VyZVJlc2V0OikgbmFtZTpBVkF1
ZGlvU2Vzc2lvbk1lZGlhU2VydmljZXNXZXJlUmVzZXROb3RpZmljYXRpb24gb2JqZWN0OnNlc3Np
b25dOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpaW52YWxpZGF0ZQoreworICAg
IF9jYWxsYmFjayA9IG51bGxwdHI7CisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0
Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmXTsKK30KKworLSAodm9pZCloYW5kbGVJbnRlcnJ1
cHRpb246KE5TTm90aWZpY2F0aW9uKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoIV9jYWxsYmFj
aykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKFtbbm90aWZpY2F0aW9uLnVzZXJJbmZvIHZh
bHVlRm9yS2V5OkFWQXVkaW9TZXNzaW9uSW50ZXJydXB0aW9uVHlwZUtleV0gaW50VmFsdWVdID09
IEFWQXVkaW9TZXNzaW9uSW50ZXJydXB0aW9uVHlwZUJlZ2FuKQorICAgICAgICBfY2FsbGJhY2st
PmJlZ2luSW50ZXJydXB0aW9uKCk7CisgICAgZWxzZSB7CisgICAgICAgIE5TRXJyb3IgKmVycm9y
ID0gbmlsOworICAgICAgICBbW0FWQXVkaW9TZXNzaW9uIHNoYXJlZEluc3RhbmNlXSBzZXRBY3Rp
dmU6WUVTIGVycm9yOiZlcnJvcl07CisjaWYgIUxPR19ESVNBQkxFRAorICAgICAgICBMT0coTWVk
aWEsICItW1dlYkNvcmVBdWRpb0NhcHR1cmVTb3VyY2VJT1NMaXN0ZW5lciBoYW5kbGVJbnRlcnJ1
cHRpb25dICglcCkgLSBlcnJvciA9ICVzIiwgc2VsZiwgW1tlcnJvciBsb2NhbGl6ZWREZXNjcmlw
dGlvbl0gVVRGOFN0cmluZ10pOworI2VuZGlmCisgICAgICAgIF9jYWxsYmFjay0+ZW5kSW50ZXJy
dXB0aW9uKCk7CisgICAgfQorfQorCistICh2b2lkKXNlc3Npb25NZWRpYVNlcnZpY2VzV2VyZVJl
c2V0OihOU05vdGlmaWNhdGlvbiopbm90aWZpY2F0aW9uCit7CisgICAgVU5VU0VEX1BBUkFNKG5v
dGlmaWNhdGlvbik7CisKKyAgICBpZiAoIV9jYWxsYmFjaykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gbWVkaWFzZXJ2ZXJkIGNyYXNoZWQgYW5kIHdhcyByZWxhdW5jaGVkLCByZWJ1aWxkIGV2
ZXJ5dGhpbmcuIFNlZQorICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9saWJyYXJ5
L2NvbnRlbnQvcWEvcWExNzQ5L19pbmRleC5odG1sLgorICAgIF9jYWxsYmFjay0+c2NoZWR1bGVS
ZWNvbmZpZ3VyYXRpb24oKTsKK30KK0BlbmQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDb3Jl
QXVkaW9DYXB0dXJlU291cmNlSU9TOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlSU9TKGNvbnN0IFN0
cmluZyYgZGV2aWNlSUQsIGNvbnN0IFN0cmluZyYgbGFiZWwsIHVpbnQzMl90IHBlcnNpc3RlbnRJ
RCkKKyAgICA6IENvcmVBdWRpb0NhcHR1cmVTb3VyY2UoZGV2aWNlSUQsIGxhYmVsLCBwZXJzaXN0
ZW50SUQpCisgICAgLCBtX2xpc3RlbmVyKGFkb3B0TlMoW1tXZWJDb3JlQXVkaW9DYXB0dXJlU291
cmNlSU9TTGlzdGVuZXIgYWxsb2NdIGluaXRXaXRoQ2FsbGJhY2s6dGhpc10pKQoreworfQorCitD
b3JlQXVkaW9DYXB0dXJlU291cmNlSU9TOjp+Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPUygpCit7
CisgICAgW21fbGlzdGVuZXIgaW52YWxpZGF0ZV07CisgICAgbV9saXN0ZW5lciA9IG51bGxwdHI7
Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFBMQVRGT1JNKElP
UykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVk
aW9DYXB0dXJlU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAJKHJldmlzaW9uIDIx
ODYwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVk
aW9DYXB0dXJlU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2lu
Y2x1ZGUgIkF1ZGlvU2Vzc2lvbi5oIgogI2luY2x1ZGUgIkNvcmVBdWRpb0NhcHR1cmVEZXZpY2Uu
aCIKICNpbmNsdWRlICJDb3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlci5oIgorI2luY2x1ZGUg
IkNvcmVBdWRpb0NhcHR1cmVTb3VyY2VJT1MuaCIKICNpbmNsdWRlICJDb3JlQXVkaW9TUEkuaCIK
ICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFUaW1lQVZGb3VuZGF0aW9uLmgi
CkBAIC04NCw2ICs4NSw5IEBAIHB1YmxpYzoKICAgICBib29sIGlzUHJvZHVjaW5nRGF0YSgpIHsg
cmV0dXJuIG1faW9Vbml0U3RhcnRlZDsgfQogCiAgICAgT1NTdGF0dXMgc3VzcGVuZCgpOworICAg
IE9TU3RhdHVzIHJlc3VtZSgpOworCisgICAgYm9vbCBzdXNwZW5kZWQoKSBjb25zdCB7IHJldHVy
biBtX3N1c3BlbmRlZDsgfQogCiAgICAgT1NTdGF0dXMgc2V0dXBBdWRpb1VuaXQoKTsKICAgICB2
b2lkIGNsZWFudXBBdWRpb1VuaXQoKTsKQEAgLTE2Myw2ICsxNjcsOCBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9lbmFibGVFY2hvQ2FuY2VsbGF0aW9uIHsgdHJ1ZSB9OwogICAgIGRvdWJsZSBtX3Zv
bHVtZSB7IDEgfTsKICAgICBpbnQgbV9zYW1wbGVSYXRlOworCisgICAgYm9vbCBtX3N1c3BlbmRl
ZCB7IGZhbHNlIH07CiB9OwogCiBDb3JlQXVkaW9TaGFyZWRVbml0JiBDb3JlQXVkaW9TaGFyZWRV
bml0OjpzaW5nbGV0b24oKQpAQCAtMjk1LDYgKzMwMSw3IEBAIE9TU3RhdHVzIENvcmVBdWRpb1No
YXJlZFVuaXQ6OnNldHVwQXVkaW8KICAgICAgICAgcmV0dXJuIGVycjsKICAgICB9CiAgICAgbV9p
b1VuaXRJbml0aWFsaXplZCA9IHRydWU7CisgICAgbV9zdXNwZW5kZWQgPSBmYWxzZTsKIAogICAg
IHVpbnQzMl90IG91dHB1dERldmljZTsKICAgICBpZiAoIWRlZmF1bHRPdXRwdXREZXZpY2UoJm91
dHB1dERldmljZSkpCkBAIC01ODAsMjkgKzU4Nyw0MCBAQCBPU1N0YXR1cyBDb3JlQXVkaW9TaGFy
ZWRVbml0OjpzdXNwZW5kKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAg
bV9hY3RpdmVTb3VyY2VzLmNsZWFyKCk7Ci0gICAgbV9wZW5kaW5nU291cmNlcy5jbGVhcigpOwor
ICAgIG1fc3VzcGVuZGVkID0gdHJ1ZTsKIAogICAgIGlmIChtX2lvVW5pdFN0YXJ0ZWQpIHsKICAg
ICAgICAgQVNTRVJUKG1faW9Vbml0KTsKICAgICAgICAgYXV0byBlcnIgPSBBdWRpb091dHB1dFVu
aXRTdG9wKG1faW9Vbml0KTsKICAgICAgICAgaWYgKGVycikgewotICAgICAgICAgICAgTE9HKE1l
ZGlhLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6cmVzdW1lKCVwKSBBdWRpb091dHB1dFVuaXRTdG9w
IGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVy
cik7CisgICAgICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9TaGFyZWRVbml0OjpzdXNwZW5k
KCVwKSBBdWRpb091dHB1dFVuaXRTdG9wIGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIsIHRo
aXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CiAgICAgICAgICAgICByZXR1cm4gZXJyOwogICAg
ICAgICB9CiAgICAgICAgIG1faW9Vbml0U3RhcnRlZCA9IGZhbHNlOwogICAgIH0KIAotICAgIGlm
IChtX2lvVW5pdEluaXRpYWxpemVkKSB7Ci0gICAgICAgIEFTU0VSVChtX2lvVW5pdCk7Ci0gICAg
ICAgIGF1dG8gZXJyID0gQXVkaW9Vbml0VW5pbml0aWFsaXplKG1faW9Vbml0KTsKLSAgICAgICAg
aWYgKGVycikgewotICAgICAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6
cmVzdW1lKCVwKSBBdWRpb1VuaXRVbmluaXRpYWxpemUgZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUu
NHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKLSAgICAgICAgICAgIHJldHVybiBl
cnI7Ci0gICAgICAgIH0KLSAgICAgICAgbV9pb1VuaXRJbml0aWFsaXplZCA9IGZhbHNlOworICAg
IHJldHVybiAwOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRVbml0OjpyZXN1bWUoKQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fc3VzcGVuZGVkKTsK
KyAgICBBU1NFUlQoIW1faW9Vbml0U3RhcnRlZCk7CisKKyAgICBtX3N1c3BlbmRlZCA9IGZhbHNl
OworCisgICAgaWYgKCFtX2lvVW5pdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBhdXRvIGVy
ciA9IEF1ZGlvT3V0cHV0VW5pdFN0YXJ0KG1faW9Vbml0KTsKKyAgICBpZiAoZXJyKSB7CisgICAg
ICAgIExPRyhNZWRpYSwgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnN0YXJ0KCVwKSBBdWRpb091dHB1
dFVuaXRTdGFydCBmYWlsZWQgd2l0aCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwg
KGNoYXIqKSZlcnIpOworICAgICAgICByZXR1cm4gZXJyOwogICAgIH0KIAorICAgIG1faW9Vbml0
U3RhcnRlZCA9IHRydWU7CisKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNjM2LDggKzY1NCwxMCBA
QCBPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRVbml0OjpkZWZhdWx0T3V0CiAKIENhcHR1cmVTb3Vy
Y2VPckVycm9yIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGRl
dmljZUlELCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cykKIHsKKyAgICBSZWZQ
dHI8UmVhbHRpbWVNZWRpYVNvdXJjZT4gc291cmNlOwogICAgIFN0cmluZyBsYWJlbDsKICAgICB1
aW50MzJfdCBwZXJzaXN0ZW50SUQgPSAwOworCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGF1dG8g
ZGV2aWNlID0gQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmdsZXRvbigpLmNvcmVB
dWRpb0RldmljZVdpdGhVSUQoZGV2aWNlSUQpOwogICAgIGlmICghZGV2aWNlKQpAQCAtNjQ1LDIx
ICs2NjUsMjQgQEAgQ2FwdHVyZVNvdXJjZU9yRXJyb3IgQ29yZUF1ZGlvQ2FwdHVyZVNvdQogCiAg
ICAgbGFiZWwgPSBkZXZpY2UtPmxhYmVsKCk7CiAgICAgcGVyc2lzdGVudElEID0gZGV2aWNlLT5k
ZXZpY2VJRCgpOworCisgICAgc291cmNlID0gYWRvcHRSZWYoKm5ldyBDb3JlQXVkaW9DYXB0dXJl
U291cmNlKGRldmljZUlELCBsYWJlbCwgcGVyc2lzdGVudElEKSk7CiAjZWxpZiBQTEFURk9STShJ
T1MpCiAgICAgYXV0byBkZXZpY2UgPSBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
OjpzaW5nbGV0b24oKS5hdWRpb1Nlc3Npb25EZXZpY2VXaXRoVUlEKGRldmljZUlEKTsKICAgICBp
ZiAoIWRldmljZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGxhYmVsID0gZGV2aWNlLT5s
YWJlbCgpOworCisgICAgc291cmNlID0gYWRvcHRSZWYoKm5ldyBDb3JlQXVkaW9DYXB0dXJlU291
cmNlSU9TKGRldmljZUlELCBsYWJlbCwgcGVyc2lzdGVudElEKSk7CiAjZW5kaWYKLSAgICBhdXRv
IHNvdXJjZSA9IGFkb3B0UmVmKCpuZXcgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZShkZXZpY2VJRCwg
bGFiZWwsIHBlcnNpc3RlbnRJRCkpOwogCiAgICAgaWYgKGNvbnN0cmFpbnRzKSB7CiAgICAgICAg
IGF1dG8gcmVzdWx0ID0gc291cmNlLT5hcHBseUNvbnN0cmFpbnRzKCpjb25zdHJhaW50cyk7CiAg
ICAgICAgIGlmIChyZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQudmFs
dWUoKS5maXJzdCk7CiAgICAgfQotICAgIHJldHVybiBDYXB0dXJlU291cmNlT3JFcnJvcihXVEZN
b3ZlKHNvdXJjZSkpOworICAgIHJldHVybiBDYXB0dXJlU291cmNlT3JFcnJvcigqc291cmNlKTsK
IH0KIAogUmVhbHRpbWVNZWRpYVNvdXJjZTo6QXVkaW9DYXB0dXJlRmFjdG9yeSYgQ29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZTo6ZmFjdG9yeSgpCkBAIC03ODQsMTggKzgwNywxMDMgQEAgYm9vbCBDb3Jl
QXVkaW9DYXB0dXJlU291cmNlOjphcHBseUVjaG9DYQogCiB2b2lkIENvcmVBdWRpb0NhcHR1cmVT
b3VyY2U6OnNjaGVkdWxlUmVjb25maWd1cmF0aW9uKCkKIHsKKyAgICBpZiAoIWlzTWFpblRocmVh
ZCgpKSB7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3dlYWtUaGlzID0gY3JlYXRlV2Vha1B0
cigpLCB0aGlzXSB7CisgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICAgICAgc2NoZWR1bGVSZWNvbmZpZ3VyYXRpb24oKTsKKyAgICAg
ICAgfSk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CiAgICAgYXV0byYgdW5pdCA9IENvcmVBdWRpb1NoYXJlZFVuaXQ6OnNpbmdsZXRvbigp
OwotICAgIGlmICghdW5pdC5oYXNBdWRpb1VuaXQoKSB8fCBtX3JlY29uZmlndXJhdGlvbk9uZ29p
bmcpCisgICAgaWYgKCF1bml0Lmhhc0F1ZGlvVW5pdCgpIHx8IG1fcmVjb25maWd1cmF0aW9uU3Rh
dGUgIT0gUmVjb25maWd1cmF0aW9uU3RhdGU6Ok5vbmUpCiAgICAgICAgIHJldHVybjsKIAotICAg
IG1fcmVjb25maWd1cmF0aW9uT25nb2luZyA9IHRydWU7CisgICAgbV9yZWNvbmZpZ3VyYXRpb25T
dGF0ZSA9IFJlY29uZmlndXJhdGlvblN0YXRlOjpPbmdvaW5nOwogICAgIHNjaGVkdWxlRGVmZXJy
ZWRUYXNrKFt0aGlzLCAmdW5pdF0geworICAgICAgICBpZiAodW5pdC5zdXNwZW5kZWQoKSkgewor
ICAgICAgICAgICAgbV9yZWNvbmZpZ3VyYXRpb25TdGF0ZSA9IFJlY29uZmlndXJhdGlvblN0YXRl
OjpSZXF1aXJlZDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIHVu
aXQucmVjb25maWd1cmVBdWRpb1VuaXQoKTsKLSAgICAgICAgbV9yZWNvbmZpZ3VyYXRpb25Pbmdv
aW5nID0gZmFsc2U7CisgICAgICAgIG1fcmVjb25maWd1cmF0aW9uU3RhdGUgPSBSZWNvbmZpZ3Vy
YXRpb25TdGF0ZTo6Tm9uZTsKICAgICB9KTsKIH0KIAordm9pZCBDb3JlQXVkaW9DYXB0dXJlU291
cmNlOjpiZWdpbkludGVycnVwdGlvbigpCit7CisgICAgaWYgKCFpc01haW5UaHJlYWQoKSkgewor
ICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt3ZWFrVGhpcyA9IGNyZWF0ZVdlYWtQdHIoKSwgdGhp
c10geworICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgICAgIGJlZ2luSW50ZXJydXB0aW9uKCk7CisgICAgICAgIH0pOworCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGF1
dG8mIHVuaXQgPSBDb3JlQXVkaW9TaGFyZWRVbml0OjpzaW5nbGV0b24oKTsKKyAgICBpZiAoIXVu
aXQuaGFzQXVkaW9Vbml0KCkgfHwgdW5pdC5zdXNwZW5kZWQoKSB8fCBtX3N1c3BlbmRQZW5kaW5n
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N1c3BlbmRQZW5kaW5nID0gdHJ1ZTsKKyAgICBz
Y2hlZHVsZURlZmVycmVkVGFzayhbdGhpcywgJnVuaXRdIHsKKyAgICAgICAgbV9zdXNwZW5kVHlw
ZSA9IHVuaXQuaXNQcm9kdWNpbmdEYXRhKCkgPyBTdXNwZW5zaW9uVHlwZTo6V2hpbGVQbGF5aW5n
IDogU3VzcGVuc2lvblR5cGU6OldoaWxlUGF1c2VkOworICAgICAgICB1bml0LnN1c3BlbmQoKTsK
KyAgICAgICAgbV9zdXNwZW5kUGVuZGluZyA9IGZhbHNlOworICAgIH0pOworfQorCit2b2lkIENv
cmVBdWRpb0NhcHR1cmVTb3VyY2U6OmVuZEludGVycnVwdGlvbigpCit7CisgICAgaWYgKCFpc01h
aW5UaHJlYWQoKSkgeworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt3ZWFrVGhpcyA9IGNyZWF0
ZVdlYWtQdHIoKSwgdGhpc10geworICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGVuZEludGVycnVwdGlvbigpOworICAgICAg
ICB9KTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKyAgICBhdXRvJiB1bml0ID0gQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c2luZ2xldG9uKCk7
CisgICAgaWYgKCF1bml0Lmhhc0F1ZGlvVW5pdCgpIHx8ICF1bml0LnN1c3BlbmRlZCgpIHx8IG1f
cmVzdW1lUGVuZGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byB0eXBlID0gbV9zdXNw
ZW5kVHlwZTsKKyAgICBtX3N1c3BlbmRUeXBlID0gU3VzcGVuc2lvblR5cGU6Ok5vbmU7CisgICAg
aWYgKHR5cGUgIT0gU3VzcGVuc2lvblR5cGU6OldoaWxlUGxheWluZyAmJiBtX3JlY29uZmlndXJh
dGlvblN0YXRlICE9IFJlY29uZmlndXJhdGlvblN0YXRlOjpSZXF1aXJlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9yZXN1bWVQZW5kaW5nID0gdHJ1ZTsKKyAgICBzY2hlZHVsZURlZmVycmVk
VGFzayhbdGhpcywgdHlwZSwgJnVuaXRdIHsKKyAgICAgICAgaWYgKG1fcmVjb25maWd1cmF0aW9u
U3RhdGUgPT0gUmVjb25maWd1cmF0aW9uU3RhdGU6OlJlcXVpcmVkKQorICAgICAgICAgICAgdW5p
dC5yZWNvbmZpZ3VyZUF1ZGlvVW5pdCgpOworICAgICAgICBpZiAodHlwZSA9PSBTdXNwZW5zaW9u
VHlwZTo6V2hpbGVQbGF5aW5nKQorICAgICAgICAgICAgdW5pdC5yZXN1bWUoKTsKKyAgICAgICAg
bV9yZWNvbmZpZ3VyYXRpb25TdGF0ZSA9IFJlY29uZmlndXJhdGlvblN0YXRlOjpOb25lOworICAg
ICAgICBtX3Jlc3VtZVBlbmRpbmcgPSBmYWxzZTsKKyAgICB9KTsKK30KKworYm9vbCBDb3JlQXVk
aW9DYXB0dXJlU291cmNlOjppbnRlcnJ1cHRlZCgpIGNvbnN0Cit7CisgICAgYXV0byYgdW5pdCA9
IENvcmVBdWRpb1NoYXJlZFVuaXQ6OnNpbmdsZXRvbigpOworICAgIGlmICh1bml0LnN1c3BlbmRl
ZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBSZWFsdGltZU1lZGlhU291
cmNlOjppbnRlcnJ1cHRlZCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNv
dXJjZS5oCShyZXZpc2lvbiAyMTg2MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw3ICs1MSw3IEBAIGNsYXNzIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTsKIGNsYXNzIENhcHR1cmVE
ZXZpY2VJbmZvOwogY2xhc3MgV2ViQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM7CiAKLWNsYXNz
IENvcmVBdWRpb0NhcHR1cmVTb3VyY2UgZmluYWwgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJj
ZSB7CitjbGFzcyBDb3JlQXVkaW9DYXB0dXJlU291cmNlIDogcHVibGljIFJlYWx0aW1lTWVkaWFT
b3VyY2UgewogcHVibGljOgogCiAgICAgc3RhdGljIENhcHR1cmVTb3VyY2VPckVycm9yIGNyZWF0
ZShjb25zdCBTdHJpbmcmIGRldmljZUlELCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKik7CkBAIC02
OCwxNSArNjgsMTggQEAgcHVibGljOgogCiAgICAgQ01DbG9ja1JlZiB0aW1lYmFzZUNsb2NrKCk7
CiAKLXByaXZhdGU6CisgICAgdm9pZCBiZWdpbkludGVycnVwdGlvbigpOworICAgIHZvaWQgZW5k
SW50ZXJydXB0aW9uKCk7CisgICAgdm9pZCBzY2hlZHVsZVJlY29uZmlndXJhdGlvbigpOworCitw
cm90ZWN0ZWQ6CiAgICAgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZShjb25zdCBTdHJpbmcmIGRldmlj
ZUlELCBjb25zdCBTdHJpbmcmIGxhYmVsLCB1aW50MzJfdCBwZXJzaXN0ZW50SUQpOwogICAgIHZp
cnR1YWwgfkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UoKTsKIAorcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgQ29yZUF1ZGlvU2hhcmVkVW5pdDsKICAgICBmcmllbmQgY2xhc3MgQ29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZUZhY3Rvcnk7CiAKLSAgICB2b2lkIHNjaGVkdWxlUmVjb25maWd1cmF0aW9uKCk7
Ci0KICAgICBib29sIGlzQ2FwdHVyZVNvdXJjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7
IH0KICAgICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIGZpbmFsOwogICAgIHZvaWQgc3RvcFBy
b2R1Y2luZ0RhdGEoKSBmaW5hbDsKQEAgLTg5LDE0ICs5MiwyMiBAQCBwcml2YXRlOgogICAgIGNv
bnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCBmaW5hbDsK
ICAgICB2b2lkIHNldHRpbmdzRGlkQ2hhbmdlKCkgZmluYWw7CiAKLSAgICB1aW50MzJfdCBtX2Nh
cHR1cmVEZXZpY2VJRCB7IDAgfTsKKyAgICBib29sIGludGVycnVwdGVkKCkgY29uc3QgZmluYWw7
CiAKLSAgICBib29sIG1faXNTdXNwZW5kZWQgeyBmYWxzZSB9OworICAgIHVpbnQzMl90IG1fY2Fw
dHVyZURldmljZUlEIHsgMCB9OwogCiAgICAgbXV0YWJsZSBzdGQ6Om9wdGlvbmFsPFJlYWx0aW1l
TWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM+IG1fY2FwYWJpbGl0aWVzOwogICAgIG11dGFibGUgc3Rk
OjpvcHRpb25hbDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M+IG1fY3VycmVudFNldHRpbmdz
OwogCi0gICAgYm9vbCBtX3JlY29uZmlndXJhdGlvbk9uZ29pbmcgeyBmYWxzZSB9OworICAgIGVu
dW0gY2xhc3MgU3VzcGVuc2lvblR5cGUgeyBOb25lLCBXaGlsZVBhdXNlZCwgV2hpbGVQbGF5aW5n
IH07CisgICAgU3VzcGVuc2lvblR5cGUgbV9zdXNwZW5kVHlwZSB7IFN1c3BlbnNpb25UeXBlOjpO
b25lIH07CisKKyAgICBlbnVtIGNsYXNzIFJlY29uZmlndXJhdGlvblN0YXRlIHsgTm9uZSwgUmVx
dWlyZWQsIE9uZ29pbmcgfTsKKyAgICBSZWNvbmZpZ3VyYXRpb25TdGF0ZSBtX3JlY29uZmlndXJh
dGlvblN0YXRlIHsgUmVjb25maWd1cmF0aW9uU3RhdGU6Ok5vbmUgfTsKKworICAgIGJvb2wgbV9y
ZWNvbmZpZ3VyYXRpb25SZXF1aXJlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX3N1c3BlbmRQZW5k
aW5nIHsgZmFsc2UgfTsKKyAgICBib29sIG1fcmVzdW1lUGVuZGluZyB7IGZhbHNlIH07CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>
<flag name="review"
          id="334524"
          type_id="1"
          status="+"
          setter="youennf"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313667</attachid>
            <date>2017-06-22 15:48:19 -0700</date>
            <delta_ts>2017-06-23 06:11:13 -0700</delta_ts>
            <desc>Patch for landing.</desc>
            <filename>ios_audio_interruption_patch_3.txt</filename>
            <type>text/plain</type>
            <size>26619</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDE3LTA2LTIyICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFJlc3BvbmQg
dG8gQXVkaW9TZXNzaW9uIGludGVycnVwdGlvbiBhbmQgcmVzdW1lCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM3MTgKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzMyOTI1MjYzPgorCisgICAgICAgIFJldmlld2VkIGJ5IFlvdWVubiBGYWJsZXQuCisK
KyAgICAgICAgVGVzdGVkIG1hbnVhbGx5LgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOiBBZGQgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPUy5tbS8uaAorCisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5oOiBNYWtl
IGNyZWF0ZVdlYWtQdHIgcHJvdGVjdGVkIHNvIGRlcml2ZWQgY2xhc3NlcworICAgICAgICBjYW4g
dXNlIGl0LgorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vaW9zL0NvcmVBdWRpb0Nh
cHR1cmVTb3VyY2VJT1MuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0v
aW9zL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2VJT1MubW06IEFkZGVkLgorICAgICAgICAoLVtXZWJD
b3JlQXVkaW9DYXB0dXJlU291cmNlSU9TTGlzdGVuZXIgaW5pdFdpdGhDYWxsYmFjazpdKToKKyAg
ICAgICAgKC1bV2ViQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPU0xpc3RlbmVyIGludmFsaWRhdGVd
KToKKyAgICAgICAgKC1bV2ViQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPU0xpc3RlbmVyIGhhbmRs
ZUludGVycnVwdGlvbjpdKToKKyAgICAgICAgKC1bV2ViQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlP
U0xpc3RlbmVyIHNlc3Npb25NZWRpYVNlcnZpY2VzV2VyZVJlc2V0Ol0pOgorICAgICAgICAoV2Vi
Q29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPUzo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlP
Uyk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlSU9TOjp+Q29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZUlPUyk6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVk
aW9TaGFyZWRVbml0OjpzdXNwZW5kZWQpOiAKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb1No
YXJlZFVuaXQ6OnNldHVwQXVkaW9Vbml0KTogQ2xlYXIgbV9zdXNwZW5kZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDb3JlQXVkaW9TaGFyZWRVbml0OjpzdXNwZW5kKTogRG9uJ3QgY2xlYXIgc291cmNl
cyBvciB1bmluaXRpYWxpemUgdGhlIGF1ZGlvIHVuaXQsCisgICAgICAgIHN1c3BlbmQgaXMgdGVt
cG9yYXJ5LiBTZXQgbV9zdXNwZW5kZWQuCisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9TaGFy
ZWRVbml0OjpyZXN1bWUpOiBOZXcsIHJlc3RhcnQgdGhlIGF1ZGlvIHVuaXQuCisgICAgICAgIChX
ZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpjcmVhdGUpOiBDcmVhdGUgdGhlIGNvcnJl
Y3Qgb2JqZWN0LgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2No
ZWR1bGVSZWNvbmZpZ3VyYXRpb24pOiBEaXNwYXRjaCB0byBtYWluIHRocmVhZCBpZiBuZWNlc3Nh
cnkuCisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpiZWdpbkludGVy
cnVwdGlvbik6IE5ldywgc3VzcGVuZCBmcm9tIG1haW4gdGhyZWFkLgorICAgICAgICAoV2ViQ29y
ZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6ZW5kSW50ZXJydXB0aW9uKTogTmV3LCByZXN1bWUv
cmVjb25maWd1cmUgZnJvbSBtYWluIHRocmVhZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRp
b0NhcHR1cmVTb3VyY2U6OmludGVycnVwdGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5oOgorCiAyMDE3LTA2LTIyICBZb3Vlbm4g
RmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViUlRDXSBQcmV2ZW50IGNh
cHR1cmluZyBhdCB1bmNvbnZlbnRpb25hbCByZXNvbHV0aW9ucyB3aGVuIHVzaW5nIHRoZSBTVyBl
bmNvZGVyIG9uIE1hYwpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE4NjA5KQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEs
NiArMjYxLDggQEAKIAkJMDdBQkVGNkUxRDhBMUM3NjAwRjIxOTcyIC8qIE1lZGlhRGV2aWNlc0Vu
dW1lcmF0aW9uUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDdBQkVGNkQxRDhBMUM3NjAwRjIxOTcyIC8qIE1lZGlhRGV2aWNlc0VudW1lcmF0
aW9uUmVxdWVzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTA3QUM0NzAxMTk1MjEwMjEwMEVFOTcyMyAvKiBJU09WVFRDdWUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdBQzQ2RkYxOTUyMTAyMTAw
RUU5NzIzIC8qIElTT1ZUVEN1ZS5jcHAgKi87IH07CiAJCTA3QUM0NzAyMTk1MjEwMjEwMEVFOTcy
MyAvKiBJU09WVFRDdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA3QUM0NzAwMTk1MjEwMjEwMEVFOTcyMyAvKiBJU09WVFRDdWUuaCAqLzsgfTsKKwkJ
MDdBRkY0MjIxRUZCMTQ0OTAwQjU0NUIzIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2VJT1MuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3QUZGNDIwMUVG
QjE0NDcwMEI1NDVCMyAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlSU9TLmggKi87IH07CisJCTA3
QUZGNDIzMUVGQjE0NDkwMEI1NDVCMyAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlSU9TLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdBRkY0MjExRUZC
MTQ0NzAwQjU0NUIzIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2VJT1MubW0gKi87IH07CiAJCTA3
QjAxMTNGMTAzMjI0MjIwMEZCREMzMyAvKiBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdCMDExM0UxMDMy
MjQyMjAwRkJEQzMzIC8qIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmggKi87IH07CiAJCTA3
QjBBQkNGMTAzMjI0MjIwMEZCREMzMyAvKiBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdCMEFCQ0UxMDMy
MjQyMjAwRkJEQzMzIC8qIEFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50LmggKi87IH07CiAJCTA3
QjQ0MkQ2MTY2QzcwQjAwMDU1NkNBRCAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3QjQ0MkQ0MTY2
QzcwQjAwMDU1NkNBRCAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcCAqLzsgfTsKQEAg
LTc2ODQsNiArNzY4Niw4IEBACiAJCTA3QUJFRjZEMUQ4QTFDNzYwMEYyMTk3MiAvKiBNZWRpYURl
dmljZXNFbnVtZXJhdGlvblJlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTA3QUM0NkZGMTk1MjEwMjEwMEVFOTcyMyAvKiBJU09WVFRDdWUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSVNPVlRUQ3VlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDdBQzQ3MDAxOTUyMTAyMTAwRUU5NzIzIC8qIElTT1ZUVEN1
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJU09WVFRDdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDdBRkY0MjAxRUZCMTQ0NzAwQjU0NUIzIC8qIENvcmVB
dWRpb0NhcHR1cmVTb3VyY2VJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwN0FGRjQyMTFFRkIxNDQ3MDBCNTQ1QjMgLyogQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPUy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvcmVBdWRpb0NhcHR1
cmVTb3VyY2VJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3QjAxMTNFMTAz
MjI0MjIwMEZCREMzMyAvKiBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwN0IwQUJDRTEwMzIyNDIyMDBGQkRDMzMgLyogQWNj
ZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMDdCNDQyRDQxNjZDNzBCMDAwNTU2Q0FEIC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVB
VkYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUFWRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDQ1Nyw2
ICsyNDQ2MSw4IEBACiAJCQkJQ0RDNjc1MjQxRUFFQTlENDAwNzI3Qzg0IC8qIEFWQXVkaW9TZXNz
aW9uQ2FwdHVyZURldmljZS5tbSAqLywKIAkJCQlDREM2NzUyMTFFQUVBOUI3MDA3MjdDODQgLyog
QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlci5oICovLAogCQkJCUNEQzY3NTIwMUVB
RUE5QjcwMDcyN0M4NCAvKiBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tICov
LAorCQkJCTA3QUZGNDIwMUVGQjE0NDcwMEI1NDVCMyAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNl
SU9TLmggKi8sCisJCQkJMDdBRkY0MjExRUZCMTQ0NzAwQjU0NUIzIC8qIENvcmVBdWRpb0NhcHR1
cmVTb3VyY2VJT1MubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9IGlvczsKIAkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CkBAIC0yNjg5OSw2ICsyNjkwNSw3IEBACiAJCQkJOTc0NkFGMjExNEY0RERF
NjAwM0U3QTcxIC8qIENvb3JkaW5hdGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkzRjgwMjAzNTFF
OUU0N0JGMDBERUM2MUQgLyogQ29yZUF1ZGlvQ2FwdHVyZURldmljZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJM0Y4MDIwMzcxRTlFNDdDNTAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2VN
YW5hZ2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwN0FGRjQyMjFFRkIxNDQ5MDBCNTQ1QjMgLyog
Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0UxMjUyMzcx
QTE1QkRCRTAwODY0NDgwIC8qIENvcmVHcmFwaGljc1NQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDQzODE4MDAxQTkxQjJGODAwNkUwNEYyIC8qIENvcmVNZWRpYVNvZnRMaW5rLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0NDQ5QTQwNTFBOTY0QjAwMDBCNjRBRDUgLyogQ29yZU1lZGlhU1BJLmggaW4g
SGVhZGVycyAqLywKQEAgLTMwOTk2LDYgKzMxMDAzLDcgQEAKIAkJCQkzRjgwMjAzNjFFOUU0N0Mz
MDBERUM2MUQgLyogQ29yZUF1ZGlvQ2FwdHVyZURldmljZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkzRjgwMjAzODFFOUU0N0M5MDBERUM2MUQgLyogQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFn
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJM0ZGMUZBNjYxRTczNTBGRDAwQzEwMDJGIC8qIENv
cmVBdWRpb0NhcHR1cmVTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMDdBRkY0MjMxRUZC
MTQ0OTAwQjU0NUIzIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2VJT1MubW0gaW4gU291cmNlcyAq
LywKIAkJCQk0NDM4MTdGRjFBOTFCMkY4MDA2RTA0RjIgLyogQ29yZU1lZGlhU29mdExpbmsuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q3RDMzNDcxQzdBMTZCRjAwMDQxMjkzIC8qIENvcmVWaWRl
b1NvZnRMaW5rLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNUVCOTUwMEU4MjA1NkIwMEIyNTk2
NSAvKiBDb3VudGVyRGlyZWN0aXZlcy5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlh
U291cmNlLmgJKHJldmlzaW9uIDIxODYwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDEw
ICsyMzUsMTAgQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCB2aWRlb1NhbXBsZUF2YWlsYWJsZShN
ZWRpYVNhbXBsZSYpOwogICAgIHZvaWQgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKGNvbnN0IE1lZGlh
VGltZSYsIGNvbnN0IFBsYXRmb3JtQXVkaW9EYXRhJiwgY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbiYsIHNpemVfdCk7Ci0gICAgCi1wcml2YXRlOgorCiAgICAgV2Vha1B0cjxSZWFsdGltZU1l
ZGlhU291cmNlPiBjcmVhdGVXZWFrUHRyKCkgeyByZXR1cm4gbV93ZWFrUHRyRmFjdG9yeS5jcmVh
dGVXZWFrUHRyKCk7IH0KIAorcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRQcm9kdWNp
bmdEYXRhKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHN0b3BQcm9kdWNpbmdEYXRhKCkgeyB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2lvcy9Db3JlQXVkaW9D
YXB0dXJlU291cmNlSU9TLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vaW9zL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2VJT1MuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9pb3MvQ29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZUlPUy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgIkNvcmVB
dWRpb0NhcHR1cmVTb3VyY2UuaCIKKworT0JKQ19DTEFTUyBXZWJDb3JlQXVkaW9DYXB0dXJlU291
cmNlSU9TTGlzdGVuZXI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZUlPUyBmaW5hbCA6IHB1YmxpYyBDb3JlQXVkaW9DYXB0dXJlU291cmNlIHsK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U7CisKKyAg
ICBDb3JlQXVkaW9DYXB0dXJlU291cmNlSU9TKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsIGNvbnN0
IFN0cmluZyYgbGFiZWwpOworICAgIH5Db3JlQXVkaW9DYXB0dXJlU291cmNlSU9TKCk7CisKKyAg
ICBSZXRhaW5QdHI8V2ViQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPU0xpc3RlbmVyPiBtX2xpc3Rl
bmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1F
RElBX1NUUkVBTSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2lv
cy9Db3JlQXVkaW9DYXB0dXJlU291cmNlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2lvcy9Db3JlQXVkaW9DYXB0dXJlU291cmNlSU9TLm1t
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2lv
cy9Db3JlQXVkaW9DYXB0dXJlU291cmNlSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvcmVB
dWRpb0NhcHR1cmVTb3VyY2VJT1MuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFBM
QVRGT1JNKElPUykKKworI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiU29mdExpbmtpbmcu
aCIKKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVkF1ZGlvU2Vzc2lvbi5oPgorI2ltcG9ydCA8d3Rm
L01haW5UaHJlYWQuaD4KKwordHlwZWRlZiBBVkF1ZGlvU2Vzc2lvbiBBVkF1ZGlvU2Vzc2lvblR5
cGU7CisKK1NPRlRfTElOS19GUkFNRVdPUksoQVZGb3VuZGF0aW9uKQorU09GVF9MSU5LX0NMQVNT
KEFWRm91bmRhdGlvbiwgQVZBdWRpb1Nlc3Npb24pCisKK1NPRlRfTElOS19QT0lOVEVSKEFWRm91
bmRhdGlvbiwgQVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25Ob3RpZmljYXRpb24sIE5TU3RyaW5n
ICopCitTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWQXVkaW9TZXNzaW9uSW50ZXJy
dXB0aW9uVHlwZUtleSwgTlNTdHJpbmcgKikKK1NPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlv
biwgQVZBdWRpb1Nlc3Npb25NZWRpYVNlcnZpY2VzV2VyZVJlc2V0Tm90aWZpY2F0aW9uLCBOU1N0
cmluZyAqKQorCisjZGVmaW5lIEFWQXVkaW9TZXNzaW9uIGdldEFWQXVkaW9TZXNzaW9uQ2xhc3Mo
KQorI2RlZmluZSBBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvbk5vdGlmaWNhdGlvbiBnZXRBVkF1
ZGlvU2Vzc2lvbkludGVycnVwdGlvbk5vdGlmaWNhdGlvbigpCisjZGVmaW5lIEFWQXVkaW9TZXNz
aW9uSW50ZXJydXB0aW9uVHlwZUtleSBnZXRBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvblR5cGVL
ZXkoKQorI2RlZmluZSBBVkF1ZGlvU2Vzc2lvbk1lZGlhU2VydmljZXNXZXJlUmVzZXROb3RpZmlj
YXRpb24gZ2V0QVZBdWRpb1Nlc3Npb25NZWRpYVNlcnZpY2VzV2VyZVJlc2V0Tm90aWZpY2F0aW9u
KCkKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0BpbnRlcmZhY2UgV2ViQ29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZUlPU0xpc3RlbmVyIDogTlNPYmplY3QgeworICAgIENvcmVBdWRpb0NhcHR1
cmVTb3VyY2VJT1MqIF9jYWxsYmFjazsKK30KKworLSAodm9pZClpbnZhbGlkYXRlOworLSAodm9p
ZCloYW5kbGVJbnRlcnJ1cHRpb246KE5TTm90aWZpY2F0aW9uKilub3RpZmljYXRpb247CistICh2
b2lkKXNlc3Npb25NZWRpYVNlcnZpY2VzV2VyZVJlc2V0OihOU05vdGlmaWNhdGlvbiopbm90aWZp
Y2F0aW9uOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViQ29yZUF1ZGlvQ2FwdHVyZVNvdXJj
ZUlPU0xpc3RlbmVyCistIChpZClpbml0V2l0aENhbGxiYWNrOihDb3JlQXVkaW9DYXB0dXJlU291
cmNlSU9TKiljYWxsYmFjaworeworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFz
ZWxmKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX2NhbGxiYWNrID0gY2FsbGJhY2s7CisK
KyAgICBOU05vdGlmaWNhdGlvbkNlbnRlciogY2VudGVyID0gW05TTm90aWZpY2F0aW9uQ2VudGVy
IGRlZmF1bHRDZW50ZXJdOworICAgIEFWQXVkaW9TZXNzaW9uVHlwZSogc2Vzc2lvbiA9IFtBVkF1
ZGlvU2Vzc2lvbiBzaGFyZWRJbnN0YW5jZV07CisKKyAgICBbY2VudGVyIGFkZE9ic2VydmVyOnNl
bGYgc2VsZWN0b3I6QHNlbGVjdG9yKGhhbmRsZUludGVycnVwdGlvbjopIG5hbWU6QVZBdWRpb1Nl
c3Npb25JbnRlcnJ1cHRpb25Ob3RpZmljYXRpb24gb2JqZWN0OnNlc3Npb25dOworICAgIFtjZW50
ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Ioc2Vzc2lvbk1lZGlhU2Vydmlj
ZXNXZXJlUmVzZXQ6KSBuYW1lOkFWQXVkaW9TZXNzaW9uTWVkaWFTZXJ2aWNlc1dlcmVSZXNldE5v
dGlmaWNhdGlvbiBvYmplY3Q6c2Vzc2lvbl07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAo
dm9pZClpbnZhbGlkYXRlCit7CisgICAgX2NhbGxiYWNrID0gbnVsbHB0cjsKKyAgICBbW05TTm90
aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZdOworfQor
CistICh2b2lkKWhhbmRsZUludGVycnVwdGlvbjooTlNOb3RpZmljYXRpb24qKW5vdGlmaWNhdGlv
bgoreworICAgIEFTU0VSVChfY2FsbGJhY2spOworICAgIGlmICghX2NhbGxiYWNrKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoW1tub3RpZmljYXRpb24udXNlckluZm8gdmFsdWVGb3JLZXk6
QVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25UeXBlS2V5XSBpbnRWYWx1ZV0gPT0gQVZBdWRpb1Nl
c3Npb25JbnRlcnJ1cHRpb25UeXBlQmVnYW4pIHsKKyAgICAgICAgX2NhbGxiYWNrLT5iZWdpbklu
dGVycnVwdGlvbigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFtbbm90aWZp
Y2F0aW9uLnVzZXJJbmZvIHZhbHVlRm9yS2V5OkFWQXVkaW9TZXNzaW9uSW50ZXJydXB0aW9uVHlw
ZUtleV0gaW50VmFsdWVdID09IEFWQXVkaW9TZXNzaW9uSW50ZXJydXB0aW9uVHlwZUVuZGVkKSB7
CisgICAgICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOworICAgICAgICBbW0FWQXVkaW9TZXNzaW9u
IHNoYXJlZEluc3RhbmNlXSBzZXRBY3RpdmU6WUVTIGVycm9yOiZlcnJvcl07CisKKyNpZiAhTE9H
X0RJU0FCTEVECisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgTE9HKE1lZGlhLCAi
LVtXZWJDb3JlQXVkaW9DYXB0dXJlU291cmNlSU9TTGlzdGVuZXIgaGFuZGxlSW50ZXJydXB0aW9u
XSAoJXApIC0gZXJyb3IgPSAlcyIsIHNlbGYsIFtbZXJyb3IgbG9jYWxpemVkRGVzY3JpcHRpb25d
IFVURjhTdHJpbmddKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIF9jYWxsYmFjay0+ZW5k
SW50ZXJydXB0aW9uKCk7CisgICAgfQorfQorCistICh2b2lkKXNlc3Npb25NZWRpYVNlcnZpY2Vz
V2VyZVJlc2V0OihOU05vdGlmaWNhdGlvbiopbm90aWZpY2F0aW9uCit7CisgICAgVU5VU0VEX1BB
UkFNKG5vdGlmaWNhdGlvbik7CisgICAgQVNTRVJUKF9jYWxsYmFjayk7CisKKyAgICBpZiAoIV9j
YWxsYmFjaykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gbWVkaWFzZXJ2ZXJkIGNyYXNoZWQg
YW5kIHdhcyByZWxhdW5jaGVkLCByZWJ1aWxkIGV2ZXJ5dGhpbmcuIFNlZQorICAgIC8vIGh0dHBz
Oi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9saWJyYXJ5L2NvbnRlbnQvcWEvcWExNzQ5L19pbmRleC5o
dG1sLgorICAgIF9jYWxsYmFjay0+c2NoZWR1bGVSZWNvbmZpZ3VyYXRpb24oKTsKK30KK0BlbmQK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDb3JlQXVkaW9DYXB0dXJlU291cmNlSU9TOjpDb3Jl
QXVkaW9DYXB0dXJlU291cmNlSU9TKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsIGNvbnN0IFN0cmlu
ZyYgbGFiZWwpCisgICAgOiBDb3JlQXVkaW9DYXB0dXJlU291cmNlKGRldmljZUlELCBsYWJlbCwg
MCkKKyAgICAsIG1fbGlzdGVuZXIoYWRvcHROUyhbW1dlYkNvcmVBdWRpb0NhcHR1cmVTb3VyY2VJ
T1NMaXN0ZW5lciBhbGxvY10gaW5pdFdpdGhDYWxsYmFjazp0aGlzXSkpCit7Cit9CisKK0NvcmVB
dWRpb0NhcHR1cmVTb3VyY2VJT1M6On5Db3JlQXVkaW9DYXB0dXJlU291cmNlSU9TKCkKK3sKKyAg
ICBbbV9saXN0ZW5lciBpbnZhbGlkYXRlXTsKKyAgICBtX2xpc3RlbmVyID0gbnVsbHB0cjsKK30K
KworfQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgUExBVEZPUk0oSU9TKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb0Nh
cHR1cmVTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNlLmNwcAkocmV2aXNpb24gMjE4NjA5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb0Nh
cHR1cmVTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVk
ZSAiQXVkaW9TZXNzaW9uLmgiCiAjaW5jbHVkZSAiQ29yZUF1ZGlvQ2FwdHVyZURldmljZS5oIgog
I2luY2x1ZGUgIkNvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmgiCisjaW5jbHVkZSAiQ29y
ZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPUy5oIgogI2luY2x1ZGUgIkNvcmVBdWRpb1NQSS5oIgogI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZWRpYVRpbWVBVkZvdW5kYXRpb24uaCIKQEAg
LTg0LDYgKzg1LDkgQEAgcHVibGljOgogICAgIGJvb2wgaXNQcm9kdWNpbmdEYXRhKCkgeyByZXR1
cm4gbV9pb1VuaXRTdGFydGVkOyB9CiAKICAgICBPU1N0YXR1cyBzdXNwZW5kKCk7CisgICAgT1NT
dGF0dXMgcmVzdW1lKCk7CisKKyAgICBib29sIGlzU3VzcGVuZGVkKCkgY29uc3QgeyByZXR1cm4g
bV9zdXNwZW5kZWQ7IH0KIAogICAgIE9TU3RhdHVzIHNldHVwQXVkaW9Vbml0KCk7CiAgICAgdm9p
ZCBjbGVhbnVwQXVkaW9Vbml0KCk7CkBAIC0xMTgsNiArMTIyLDkgQEAgcHJpdmF0ZToKICAgICBz
dGF0aWMgT1NTdGF0dXMgc3BlYWtlckNhbGxiYWNrKHZvaWQqLCBBdWRpb1VuaXRSZW5kZXJBY3Rp
b25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiwgVUludDMyLCBVSW50MzIsIEF1ZGlvQnVm
ZmVyTGlzdCopOwogICAgIE9TU3RhdHVzIHByb3ZpZGVTcGVha2VyRGF0YShBdWRpb1VuaXRSZW5k
ZXJBY3Rpb25GbGFncyYsIGNvbnN0IEF1ZGlvVGltZVN0YW1wJiwgVUludDMyLCBVSW50MzIsIEF1
ZGlvQnVmZmVyTGlzdCopOwogCisgICAgdm9pZCBzdGFydEludGVybmFsKCk7CisgICAgdm9pZCBz
dG9wSW50ZXJuYWwoKTsKKwogICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPENvcmVB
dWRpb0NhcHR1cmVTb3VyY2U+PiBtX2NsaWVudHM7CiAKICAgICBBdWRpb1VuaXQgbV9pb1VuaXQg
eyBudWxscHRyIH07CkBAIC0xNjMsNiArMTcwLDggQEAgcHJpdmF0ZToKICAgICBib29sIG1fZW5h
YmxlRWNob0NhbmNlbGxhdGlvbiB7IHRydWUgfTsKICAgICBkb3VibGUgbV92b2x1bWUgeyAxIH07
CiAgICAgaW50IG1fc2FtcGxlUmF0ZTsKKworICAgIGJvb2wgbV9zdXNwZW5kZWQgeyBmYWxzZSB9
OwogfTsKIAogQ29yZUF1ZGlvU2hhcmVkVW5pdCYgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c2luZ2xl
dG9uKCkKQEAgLTI5NSw2ICszMDQsNyBAQCBPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRVbml0Ojpz
ZXR1cEF1ZGlvCiAgICAgICAgIHJldHVybiBlcnI7CiAgICAgfQogICAgIG1faW9Vbml0SW5pdGlh
bGl6ZWQgPSB0cnVlOworICAgIG1fc3VzcGVuZGVkID0gZmFsc2U7CiAKICAgICB1aW50MzJfdCBv
dXRwdXREZXZpY2U7CiAgICAgaWYgKCFkZWZhdWx0T3V0cHV0RGV2aWNlKCZvdXRwdXREZXZpY2Up
KQpAQCAtNTM3LDYgKzU0NywyNyBAQCB2b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnN0YXJ0UHJv
ZHVjaW5nCiAgICAgaWYgKG1faW9Vbml0U3RhcnRlZCkKICAgICAgICAgcmV0dXJuOwogCisgICAg
c3RhcnRJbnRlcm5hbCgpOworfQorCitPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRVbml0OjpyZXN1
bWUoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fc3VzcGVu
ZGVkKTsKKyAgICBBU1NFUlQoIW1faW9Vbml0U3RhcnRlZCk7CisKKyAgICBtX3N1c3BlbmRlZCA9
IGZhbHNlOworCisgICAgaWYgKCFtX2lvVW5pdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBz
dGFydEludGVybmFsKCk7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBDb3JlQXVkaW9TaGFy
ZWRVbml0OjpzdGFydEludGVybmFsKCkKK3sKICAgICBPU1N0YXR1cyBlcnI7CiAgICAgaWYgKCFt
X2lvVW5pdCkgewogICAgICAgICBlcnIgPSBzZXR1cEF1ZGlvVW5pdCgpOwpAQCAtNTYwLDUwICs1
OTEsMzYgQEAgdm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0OjpzdGFydFByb2R1Y2luZwogdm9pZCBD
b3JlQXVkaW9TaGFyZWRVbml0OjpzdG9wUHJvZHVjaW5nRGF0YSgpCiB7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9wcm9kdWNpbmdDb3VudCk7CiAKLSAgICBpZiAo
LS1tX3Byb2R1Y2luZ0NvdW50KQorICAgIGlmIChtX3Byb2R1Y2luZ0NvdW50ICYmIC0tbV9wcm9k
dWNpbmdDb3VudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX2lvVW5pdCB8fCAhbV9p
b1VuaXRTdGFydGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGVyciA9IEF1ZGlvT3V0
cHV0VW5pdFN0b3AobV9pb1VuaXQpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgTE9HKE1lZGlh
LCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3RvcCglcCkgQXVkaW9PdXRwdXRVbml0U3RvcCBmYWls
ZWQgd2l0aCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9pb1VuaXRTdGFydGVkID0gZmFsc2U7Cisg
ICAgc3RvcEludGVybmFsKCk7CiB9CiAKIE9TU3RhdHVzIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnN1
c3BlbmQoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBtX2FjdGl2ZVNv
dXJjZXMuY2xlYXIoKTsKLSAgICBtX3BlbmRpbmdTb3VyY2VzLmNsZWFyKCk7CisgICAgbV9zdXNw
ZW5kZWQgPSB0cnVlOworICAgIHN0b3BJbnRlcm5hbCgpOwogCi0gICAgaWYgKG1faW9Vbml0U3Rh
cnRlZCkgewotICAgICAgICBBU1NFUlQobV9pb1VuaXQpOwotICAgICAgICBhdXRvIGVyciA9IEF1
ZGlvT3V0cHV0VW5pdFN0b3AobV9pb1VuaXQpOwotICAgICAgICBpZiAoZXJyKSB7Ci0gICAgICAg
ICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9TaGFyZWRVbml0OjpyZXN1bWUoJXApIEF1ZGlvT3V0
cHV0VW5pdFN0b3AgZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIs
IChjaGFyKikmZXJyKTsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLSAgICAg
ICAgbV9pb1VuaXRTdGFydGVkID0gZmFsc2U7Ci0gICAgfQorICAgIHJldHVybiAwOworfQogCi0g
ICAgaWYgKG1faW9Vbml0SW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgQVNTRVJUKG1faW9Vbml0KTsK
LSAgICAgICAgYXV0byBlcnIgPSBBdWRpb1VuaXRVbmluaXRpYWxpemUobV9pb1VuaXQpOwotICAg
ICAgICBpZiAoZXJyKSB7Ci0gICAgICAgICAgICBMT0coTWVkaWEsICJDb3JlQXVkaW9TaGFyZWRV
bml0OjpyZXN1bWUoJXApIEF1ZGlvVW5pdFVuaW5pdGlhbGl6ZSBmYWlsZWQgd2l0aCBlcnJvciAl
ZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOwotICAgICAgICAgICAgcmV0
dXJuIGVycjsKLSAgICAgICAgfQotICAgICAgICBtX2lvVW5pdEluaXRpYWxpemVkID0gZmFsc2U7
Cit2b2lkIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnN0b3BJbnRlcm5hbCgpCit7CisgICAgaWYgKCFt
X2lvVW5pdCB8fCAhbV9pb1VuaXRTdGFydGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRv
IGVyciA9IEF1ZGlvT3V0cHV0VW5pdFN0b3AobV9pb1VuaXQpOworICAgIGlmIChlcnIpIHsKKyAg
ICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3RvcCglcCkgQXVkaW9PdXRw
dXRVbml0U3RvcCBmYWlsZWQgd2l0aCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCAoaW50KWVyciwg
KGNoYXIqKSZlcnIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcmV0dXJuIDA7Cisg
ICAgbV9pb1VuaXRTdGFydGVkID0gZmFsc2U7CiB9CiAKIE9TU3RhdHVzIENvcmVBdWRpb1NoYXJl
ZFVuaXQ6OmRlZmF1bHRJbnB1dERldmljZSh1aW50MzJfdCogZGV2aWNlSUQpCkBAIC02MzYsMjMg
KzY1MywxOSBAQCBPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRVbml0OjpkZWZhdWx0T3V0CiAKIENh
cHR1cmVTb3VyY2VPckVycm9yIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNyZWF0ZShjb25zdCBT
dHJpbmcmIGRldmljZUlELCBjb25zdCBNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cykKIHsK
LSAgICBTdHJpbmcgbGFiZWw7Ci0gICAgdWludDMyX3QgcGVyc2lzdGVudElEID0gMDsKICNpZiBQ
TEFURk9STShNQUMpCiAgICAgYXV0byBkZXZpY2UgPSBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFu
YWdlcjo6c2luZ2xldG9uKCkuY29yZUF1ZGlvRGV2aWNlV2l0aFVJRChkZXZpY2VJRCk7CiAgICAg
aWYgKCFkZXZpY2UpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBsYWJlbCA9IGRldmljZS0+
bGFiZWwoKTsKLSAgICBwZXJzaXN0ZW50SUQgPSBkZXZpY2UtPmRldmljZUlEKCk7CisgICAgYXV0
byBzb3VyY2UgPSBhZG9wdFJlZigqbmV3IENvcmVBdWRpb0NhcHR1cmVTb3VyY2UoZGV2aWNlSUQs
IGRldmljZS0+bGFiZWwoKSwgZGV2aWNlLT5kZXZpY2VJRCgpKSk7CiAjZWxpZiBQTEFURk9STShJ
T1MpCiAgICAgYXV0byBkZXZpY2UgPSBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
OjpzaW5nbGV0b24oKS5hdWRpb1Nlc3Npb25EZXZpY2VXaXRoVUlEKGRldmljZUlEKTsKICAgICBp
ZiAoIWRldmljZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGxhYmVsID0gZGV2aWNlLT5s
YWJlbCgpOworICAgIGF1dG8gc291cmNlID0gYWRvcHRSZWYoKm5ldyBDb3JlQXVkaW9DYXB0dXJl
U291cmNlSU9TKGRldmljZUlELCBkZXZpY2UtPmxhYmVsKCkpKTsKICNlbmRpZgotICAgIGF1dG8g
c291cmNlID0gYWRvcHRSZWYoKm5ldyBDb3JlQXVkaW9DYXB0dXJlU291cmNlKGRldmljZUlELCBs
YWJlbCwgcGVyc2lzdGVudElEKSk7CiAKICAgICBpZiAoY29uc3RyYWludHMpIHsKICAgICAgICAg
YXV0byByZXN1bHQgPSBzb3VyY2UtPmFwcGx5Q29uc3RyYWludHMoKmNvbnN0cmFpbnRzKTsKQEAg
LTcwNSwxMiArNzE4LDI1IEBAIHZvaWQgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c3RhcnRQcm9k
dWMKICAgICBjb3JlQXVkaW9DYXB0dXJlU291cmNlRmFjdG9yeSgpLnNldEFjdGl2ZVNvdXJjZSgq
dGhpcyk7CiAjZW5kaWYKIAotICAgIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnNpbmdsZXRvbigpLnN0
YXJ0UHJvZHVjaW5nRGF0YSgpOworICAgIGF1dG8mIHVuaXQgPSBDb3JlQXVkaW9TaGFyZWRVbml0
OjpzaW5nbGV0b24oKTsKKyAgICBpZiAodW5pdC5pc1N1c3BlbmRlZCgpKSB7CisgICAgICAgIG1f
c3VzcGVuZFR5cGUgPSBTdXNwZW5zaW9uVHlwZTo6V2hpbGVQbGF5aW5nOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgdW5pdC5zdGFydFByb2R1Y2luZ0RhdGEoKTsKIH0KIAogdm9pZCBD
b3JlQXVkaW9DYXB0dXJlU291cmNlOjpzdG9wUHJvZHVjaW5nRGF0YSgpCiB7Ci0gICAgQ29yZUF1
ZGlvU2hhcmVkVW5pdDo6c2luZ2xldG9uKCkuc3RvcFByb2R1Y2luZ0RhdGEoKTsKKyAgICBhdXRv
JiB1bml0ID0gQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c2luZ2xldG9uKCk7CisKKyAgICBpZiAodW5p
dC5pc1N1c3BlbmRlZCgpKSB7CisgICAgICAgIG1fc3VzcGVuZFR5cGUgPSBTdXNwZW5zaW9uVHlw
ZTo6V2hpbGVQYXVzZWQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB1bml0LnN0b3BQ
cm9kdWNpbmdEYXRhKCk7CiB9CiAKIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRp
ZXMmIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmNhcGFiaWxpdGllcygpIGNvbnN0CkBAIC03ODQs
MTggKzgxMCwxMDMgQEAgYm9vbCBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjphcHBseUVjaG9DYQog
CiB2b2lkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnNjaGVkdWxlUmVjb25maWd1cmF0aW9uKCkK
IHsKKyAgICBpZiAoIWlzTWFpblRocmVhZCgpKSB7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQo
W3dlYWtUaGlzID0gY3JlYXRlV2Vha1B0cigpLCB0aGlzXSB7CisgICAgICAgICAgICBpZiAoIXdl
YWtUaGlzKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgc2NoZWR1bGVS
ZWNvbmZpZ3VyYXRpb24oKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KwogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgYXV0byYgdW5pdCA9IENvcmVBdWRp
b1NoYXJlZFVuaXQ6OnNpbmdsZXRvbigpOwotICAgIGlmICghdW5pdC5oYXNBdWRpb1VuaXQoKSB8
fCBtX3JlY29uZmlndXJhdGlvbk9uZ29pbmcpCisgICAgaWYgKCF1bml0Lmhhc0F1ZGlvVW5pdCgp
IHx8IG1fcmVjb25maWd1cmF0aW9uU3RhdGUgIT0gUmVjb25maWd1cmF0aW9uU3RhdGU6Ok5vbmUp
CiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcmVjb25maWd1cmF0aW9uT25nb2luZyA9IHRydWU7
CisgICAgbV9yZWNvbmZpZ3VyYXRpb25TdGF0ZSA9IFJlY29uZmlndXJhdGlvblN0YXRlOjpPbmdv
aW5nOwogICAgIHNjaGVkdWxlRGVmZXJyZWRUYXNrKFt0aGlzLCAmdW5pdF0geworICAgICAgICBp
ZiAodW5pdC5pc1N1c3BlbmRlZCgpKSB7CisgICAgICAgICAgICBtX3JlY29uZmlndXJhdGlvblN0
YXRlID0gUmVjb25maWd1cmF0aW9uU3RhdGU6OlJlcXVpcmVkOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKICAgICAgICAgdW5pdC5yZWNvbmZpZ3VyZUF1ZGlvVW5pdCgpOwotICAg
ICAgICBtX3JlY29uZmlndXJhdGlvbk9uZ29pbmcgPSBmYWxzZTsKKyAgICAgICAgbV9yZWNvbmZp
Z3VyYXRpb25TdGF0ZSA9IFJlY29uZmlndXJhdGlvblN0YXRlOjpOb25lOwogICAgIH0pOwogfQog
Cit2b2lkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OmJlZ2luSW50ZXJydXB0aW9uKCkKK3sKKyAg
ICBpZiAoIWlzTWFpblRocmVhZCgpKSB7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3dlYWtU
aGlzID0gY3JlYXRlV2Vha1B0cigpLCB0aGlzXSB7CisgICAgICAgICAgICBpZiAoIXdlYWtUaGlz
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgYmVnaW5JbnRlcnJ1cHRp
b24oKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgYXV0byYgdW5pdCA9IENvcmVBdWRpb1NoYXJlZFVuaXQ6
OnNpbmdsZXRvbigpOworICAgIGlmICghdW5pdC5oYXNBdWRpb1VuaXQoKSB8fCB1bml0LmlzU3Vz
cGVuZGVkKCkgfHwgbV9zdXNwZW5kUGVuZGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9z
dXNwZW5kUGVuZGluZyA9IHRydWU7CisgICAgc2NoZWR1bGVEZWZlcnJlZFRhc2soW3RoaXMsICZ1
bml0XSB7CisgICAgICAgIG1fc3VzcGVuZFR5cGUgPSB1bml0LmlzUHJvZHVjaW5nRGF0YSgpID8g
U3VzcGVuc2lvblR5cGU6OldoaWxlUGxheWluZyA6IFN1c3BlbnNpb25UeXBlOjpXaGlsZVBhdXNl
ZDsKKyAgICAgICAgdW5pdC5zdXNwZW5kKCk7CisgICAgICAgIG1fc3VzcGVuZFBlbmRpbmcgPSBm
YWxzZTsKKyAgICB9KTsKK30KKwordm9pZCBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjplbmRJbnRl
cnJ1cHRpb24oKQoreworICAgIGlmICghaXNNYWluVGhyZWFkKCkpIHsKKyAgICAgICAgY2FsbE9u
TWFpblRocmVhZChbd2Vha1RoaXMgPSBjcmVhdGVXZWFrUHRyKCksIHRoaXNdIHsKKyAgICAgICAg
ICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAg
ICBlbmRJbnRlcnJ1cHRpb24oKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgYXV0byYgdW5pdCA9IENvcmVB
dWRpb1NoYXJlZFVuaXQ6OnNpbmdsZXRvbigpOworICAgIGlmICghdW5pdC5oYXNBdWRpb1VuaXQo
KSB8fCAhdW5pdC5pc1N1c3BlbmRlZCgpIHx8IG1fcmVzdW1lUGVuZGluZykKKyAgICAgICAgcmV0
dXJuOworCisgICAgYXV0byB0eXBlID0gbV9zdXNwZW5kVHlwZTsKKyAgICBtX3N1c3BlbmRUeXBl
ID0gU3VzcGVuc2lvblR5cGU6Ok5vbmU7CisgICAgaWYgKHR5cGUgIT0gU3VzcGVuc2lvblR5cGU6
OldoaWxlUGxheWluZyAmJiBtX3JlY29uZmlndXJhdGlvblN0YXRlICE9IFJlY29uZmlndXJhdGlv
blN0YXRlOjpSZXF1aXJlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yZXN1bWVQZW5kaW5n
ID0gdHJ1ZTsKKyAgICBzY2hlZHVsZURlZmVycmVkVGFzayhbdGhpcywgdHlwZSwgJnVuaXRdIHsK
KyAgICAgICAgaWYgKG1fcmVjb25maWd1cmF0aW9uU3RhdGUgPT0gUmVjb25maWd1cmF0aW9uU3Rh
dGU6OlJlcXVpcmVkKQorICAgICAgICAgICAgdW5pdC5yZWNvbmZpZ3VyZUF1ZGlvVW5pdCgpOwor
ICAgICAgICBpZiAodHlwZSA9PSBTdXNwZW5zaW9uVHlwZTo6V2hpbGVQbGF5aW5nKQorICAgICAg
ICAgICAgdW5pdC5yZXN1bWUoKTsKKyAgICAgICAgbV9yZWNvbmZpZ3VyYXRpb25TdGF0ZSA9IFJl
Y29uZmlndXJhdGlvblN0YXRlOjpOb25lOworICAgICAgICBtX3Jlc3VtZVBlbmRpbmcgPSBmYWxz
ZTsKKyAgICB9KTsKK30KKworYm9vbCBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjppbnRlcnJ1cHRl
ZCgpIGNvbnN0Cit7CisgICAgYXV0byYgdW5pdCA9IENvcmVBdWRpb1NoYXJlZFVuaXQ6OnNpbmds
ZXRvbigpOworICAgIGlmICh1bml0LmlzU3VzcGVuZGVkKCkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgcmV0dXJuIFJlYWx0aW1lTWVkaWFTb3VyY2U6OmludGVycnVwdGVkKCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0p
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNlLmgJKHJldmlzaW9uIDIxODYwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0
dXJlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgY2xhc3MgQXVkaW9T
YW1wbGVEYXRhU291cmNlOwogY2xhc3MgQ2FwdHVyZURldmljZUluZm87CiBjbGFzcyBXZWJBdWRp
b1NvdXJjZVByb3ZpZGVyQVZGT2JqQzsKIAotY2xhc3MgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZSBm
aW5hbCA6IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlIHsKK2NsYXNzIENvcmVBdWRpb0NhcHR1
cmVTb3VyY2UgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZSB7CiBwdWJsaWM6CiAKICAgICBz
dGF0aWMgQ2FwdHVyZVNvdXJjZU9yRXJyb3IgY3JlYXRlKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQs
IGNvbnN0IE1lZGlhQ29uc3RyYWludHMqKTsKQEAgLTY4LDE1ICs2OCwxOCBAQCBwdWJsaWM6CiAK
ICAgICBDTUNsb2NrUmVmIHRpbWViYXNlQ2xvY2soKTsKIAotcHJpdmF0ZToKKyAgICB2b2lkIGJl
Z2luSW50ZXJydXB0aW9uKCk7CisgICAgdm9pZCBlbmRJbnRlcnJ1cHRpb24oKTsKKyAgICB2b2lk
IHNjaGVkdWxlUmVjb25maWd1cmF0aW9uKCk7CisKK3Byb3RlY3RlZDoKICAgICBDb3JlQXVkaW9D
YXB0dXJlU291cmNlKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsIGNvbnN0IFN0cmluZyYgbGFiZWws
IHVpbnQzMl90IHBlcnNpc3RlbnRJRCk7CiAgICAgdmlydHVhbCB+Q29yZUF1ZGlvQ2FwdHVyZVNv
dXJjZSgpOwogCitwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDb3JlQXVkaW9TaGFyZWRVbml0
OwogICAgIGZyaWVuZCBjbGFzcyBDb3JlQXVkaW9DYXB0dXJlU291cmNlRmFjdG9yeTsKIAotICAg
IHZvaWQgc2NoZWR1bGVSZWNvbmZpZ3VyYXRpb24oKTsKLQogICAgIGJvb2wgaXNDYXB0dXJlU291
cmNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZvaWQgc3RhcnRQcm9kdWNp
bmdEYXRhKCkgZmluYWw7CiAgICAgdm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpIGZpbmFsOwpAQCAt
ODksMTQgKzkyLDIyIEBAIHByaXZhdGU6CiAgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNl
dHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IGZpbmFsOwogICAgIHZvaWQgc2V0dGluZ3NEaWRDaGFu
Z2UoKSBmaW5hbDsKIAotICAgIHVpbnQzMl90IG1fY2FwdHVyZURldmljZUlEIHsgMCB9OworICAg
IGJvb2wgaW50ZXJydXB0ZWQoKSBjb25zdCBmaW5hbDsKIAotICAgIGJvb2wgbV9pc1N1c3BlbmRl
ZCB7IGZhbHNlIH07CisgICAgdWludDMyX3QgbV9jYXB0dXJlRGV2aWNlSUQgeyAwIH07CiAKICAg
ICBtdXRhYmxlIHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcz4g
bV9jYXBhYmlsaXRpZXM7CiAgICAgbXV0YWJsZSBzdGQ6Om9wdGlvbmFsPFJlYWx0aW1lTWVkaWFT
b3VyY2VTZXR0aW5ncz4gbV9jdXJyZW50U2V0dGluZ3M7CiAKLSAgICBib29sIG1fcmVjb25maWd1
cmF0aW9uT25nb2luZyB7IGZhbHNlIH07CisgICAgZW51bSBjbGFzcyBTdXNwZW5zaW9uVHlwZSB7
IE5vbmUsIFdoaWxlUGF1c2VkLCBXaGlsZVBsYXlpbmcgfTsKKyAgICBTdXNwZW5zaW9uVHlwZSBt
X3N1c3BlbmRUeXBlIHsgU3VzcGVuc2lvblR5cGU6Ok5vbmUgfTsKKworICAgIGVudW0gY2xhc3Mg
UmVjb25maWd1cmF0aW9uU3RhdGUgeyBOb25lLCBSZXF1aXJlZCwgT25nb2luZyB9OworICAgIFJl
Y29uZmlndXJhdGlvblN0YXRlIG1fcmVjb25maWd1cmF0aW9uU3RhdGUgeyBSZWNvbmZpZ3VyYXRp
b25TdGF0ZTo6Tm9uZSB9OworCisgICAgYm9vbCBtX3JlY29uZmlndXJhdGlvblJlcXVpcmVkIHsg
ZmFsc2UgfTsKKyAgICBib29sIG1fc3VzcGVuZFBlbmRpbmcgeyBmYWxzZSB9OworICAgIGJvb2wg
bV9yZXN1bWVQZW5kaW5nIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313713</attachid>
            <date>2017-06-23 06:11:13 -0700</date>
            <delta_ts>2017-06-23 08:40:09 -0700</delta_ts>
            <desc>Patch for landing.</desc>
            <filename>ios_audio_interruption_patch_4.txt</filename>
            <type>text/plain</type>
            <size>26608</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxODcwMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDE3LTA2LTIyICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFJlc3BvbmQg
dG8gQXVkaW9TZXNzaW9uIGludGVycnVwdGlvbiBhbmQgcmVzdW1lCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM3MTgKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzMyOTI1MjYzPgorCisgICAgICAgIFJldmlld2VkIGJ5IFlvdWVubiBGYWJsZXQuCisK
KyAgICAgICAgVGVzdGVkIG1hbnVhbGx5LgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOiBBZGQgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPUy5tbS8uaAorCisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5oOiBNYWtl
IGNyZWF0ZVdlYWtQdHIgcHJvdGVjdGVkIHNvIGRlcml2ZWQgY2xhc3NlcworICAgICAgICBjYW4g
dXNlIGl0LgorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vaW9zL0NvcmVBdWRpb0Nh
cHR1cmVTb3VyY2VJT1MuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0v
aW9zL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2VJT1MubW06IEFkZGVkLgorICAgICAgICAoLVtXZWJD
b3JlQXVkaW9DYXB0dXJlU291cmNlSU9TTGlzdGVuZXIgaW5pdFdpdGhDYWxsYmFjazpdKToKKyAg
ICAgICAgKC1bV2ViQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPU0xpc3RlbmVyIGludmFsaWRhdGVd
KToKKyAgICAgICAgKC1bV2ViQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPU0xpc3RlbmVyIGhhbmRs
ZUludGVycnVwdGlvbjpdKToKKyAgICAgICAgKC1bV2ViQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlP
U0xpc3RlbmVyIHNlc3Npb25NZWRpYVNlcnZpY2VzV2VyZVJlc2V0Ol0pOgorICAgICAgICAoV2Vi
Q29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPUzo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlP
Uyk6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlSU9TOjp+Q29yZUF1
ZGlvQ2FwdHVyZVNvdXJjZUlPUyk6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVk
aW9TaGFyZWRVbml0OjpzdXNwZW5kZWQpOiAKKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRpb1No
YXJlZFVuaXQ6OnNldHVwQXVkaW9Vbml0KTogQ2xlYXIgbV9zdXNwZW5kZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDb3JlQXVkaW9TaGFyZWRVbml0OjpzdXNwZW5kKTogRG9uJ3QgY2xlYXIgc291cmNl
cyBvciB1bmluaXRpYWxpemUgdGhlIGF1ZGlvIHVuaXQsCisgICAgICAgIHN1c3BlbmQgaXMgdGVt
cG9yYXJ5LiBTZXQgbV9zdXNwZW5kZWQuCisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9TaGFy
ZWRVbml0OjpyZXN1bWUpOiBOZXcsIHJlc3RhcnQgdGhlIGF1ZGlvIHVuaXQuCisgICAgICAgIChX
ZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpjcmVhdGUpOiBDcmVhdGUgdGhlIGNvcnJl
Y3Qgb2JqZWN0LgorICAgICAgICAoV2ViQ29yZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6c2No
ZWR1bGVSZWNvbmZpZ3VyYXRpb24pOiBEaXNwYXRjaCB0byBtYWluIHRocmVhZCBpZiBuZWNlc3Nh
cnkuCisgICAgICAgIChXZWJDb3JlOjpDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpiZWdpbkludGVy
cnVwdGlvbik6IE5ldywgc3VzcGVuZCBmcm9tIG1haW4gdGhyZWFkLgorICAgICAgICAoV2ViQ29y
ZTo6Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6ZW5kSW50ZXJydXB0aW9uKTogTmV3LCByZXN1bWUv
cmVjb25maWd1cmUgZnJvbSBtYWluIHRocmVhZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvcmVBdWRp
b0NhcHR1cmVTb3VyY2U6OmludGVycnVwdGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5oOgorCiAyMDE3LTA2LTIyICBZb3Vlbm4g
RmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViUlRDXSBQcmV2ZW50IGNh
cHR1cmluZyBhdCB1bmNvbnZlbnRpb25hbCByZXNvbHV0aW9ucyB3aGVuIHVzaW5nIHRoZSBTVyBl
bmNvZGVyIG9uIE1hYwpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE4NjA5KQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEs
NiArMjYxLDggQEAKIAkJMDdBQkVGNkUxRDhBMUM3NjAwRjIxOTcyIC8qIE1lZGlhRGV2aWNlc0Vu
dW1lcmF0aW9uUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDdBQkVGNkQxRDhBMUM3NjAwRjIxOTcyIC8qIE1lZGlhRGV2aWNlc0VudW1lcmF0
aW9uUmVxdWVzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTA3QUM0NzAxMTk1MjEwMjEwMEVFOTcyMyAvKiBJU09WVFRDdWUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdBQzQ2RkYxOTUyMTAyMTAw
RUU5NzIzIC8qIElTT1ZUVEN1ZS5jcHAgKi87IH07CiAJCTA3QUM0NzAyMTk1MjEwMjEwMEVFOTcy
MyAvKiBJU09WVFRDdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA3QUM0NzAwMTk1MjEwMjEwMEVFOTcyMyAvKiBJU09WVFRDdWUuaCAqLzsgfTsKKwkJ
MDdBRkY0MjIxRUZCMTQ0OTAwQjU0NUIzIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2VJT1MuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3QUZGNDIwMUVG
QjE0NDcwMEI1NDVCMyAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlSU9TLmggKi87IH07CisJCTA3
QUZGNDIzMUVGQjE0NDkwMEI1NDVCMyAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNlSU9TLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdBRkY0MjExRUZC
MTQ0NzAwQjU0NUIzIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2VJT1MubW0gKi87IH07CiAJCTA3
QjAxMTNGMTAzMjI0MjIwMEZCREMzMyAvKiBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdCMDExM0UxMDMy
MjQyMjAwRkJEQzMzIC8qIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmggKi87IH07CiAJCTA3
QjBBQkNGMTAzMjI0MjIwMEZCREMzMyAvKiBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdCMEFCQ0UxMDMy
MjQyMjAwRkJEQzMzIC8qIEFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50LmggKi87IH07CiAJCTA3
QjQ0MkQ2MTY2QzcwQjAwMDU1NkNBRCAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3QjQ0MkQ0MTY2
QzcwQjAwMDU1NkNBRCAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcCAqLzsgfTsKQEAg
LTc2ODQsNiArNzY4Niw4IEBACiAJCTA3QUJFRjZEMUQ4QTFDNzYwMEYyMTk3MiAvKiBNZWRpYURl
dmljZXNFbnVtZXJhdGlvblJlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTA3QUM0NkZGMTk1MjEwMjEwMEVFOTcyMyAvKiBJU09WVFRDdWUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSVNPVlRUQ3VlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDdBQzQ3MDAxOTUyMTAyMTAwRUU5NzIzIC8qIElTT1ZUVEN1
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJU09WVFRDdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDdBRkY0MjAxRUZCMTQ0NzAwQjU0NUIzIC8qIENvcmVB
dWRpb0NhcHR1cmVTb3VyY2VJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwN0FGRjQyMTFFRkIxNDQ3MDBCNTQ1QjMgLyogQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPUy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvcmVBdWRpb0NhcHR1
cmVTb3VyY2VJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3QjAxMTNFMTAz
MjI0MjIwMEZCREMzMyAvKiBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwN0IwQUJDRTEwMzIyNDIyMDBGQkRDMzMgLyogQWNj
ZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMDdCNDQyRDQxNjZDNzBCMDAwNTU2Q0FEIC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVB
VkYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUFWRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDQ1Nyw2
ICsyNDQ2MSw4IEBACiAJCQkJQ0RDNjc1MjQxRUFFQTlENDAwNzI3Qzg0IC8qIEFWQXVkaW9TZXNz
aW9uQ2FwdHVyZURldmljZS5tbSAqLywKIAkJCQlDREM2NzUyMTFFQUVBOUI3MDA3MjdDODQgLyog
QVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlci5oICovLAogCQkJCUNEQzY3NTIwMUVB
RUE5QjcwMDcyN0M4NCAvKiBBVkF1ZGlvU2Vzc2lvbkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tICov
LAorCQkJCTA3QUZGNDIwMUVGQjE0NDcwMEI1NDVCMyAvKiBDb3JlQXVkaW9DYXB0dXJlU291cmNl
SU9TLmggKi8sCisJCQkJMDdBRkY0MjExRUZCMTQ0NzAwQjU0NUIzIC8qIENvcmVBdWRpb0NhcHR1
cmVTb3VyY2VJT1MubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9IGlvczsKIAkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CkBAIC0yNjg5OSw2ICsyNjkwNSw3IEBACiAJCQkJOTc0NkFGMjExNEY0RERF
NjAwM0U3QTcxIC8qIENvb3JkaW5hdGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkzRjgwMjAzNTFF
OUU0N0JGMDBERUM2MUQgLyogQ29yZUF1ZGlvQ2FwdHVyZURldmljZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJM0Y4MDIwMzcxRTlFNDdDNTAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2VN
YW5hZ2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwN0FGRjQyMjFFRkIxNDQ5MDBCNTQ1QjMgLyog
Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0UxMjUyMzcx
QTE1QkRCRTAwODY0NDgwIC8qIENvcmVHcmFwaGljc1NQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDQzODE4MDAxQTkxQjJGODAwNkUwNEYyIC8qIENvcmVNZWRpYVNvZnRMaW5rLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0NDQ5QTQwNTFBOTY0QjAwMDBCNjRBRDUgLyogQ29yZU1lZGlhU1BJLmggaW4g
SGVhZGVycyAqLywKQEAgLTMwOTk2LDYgKzMxMDAzLDcgQEAKIAkJCQkzRjgwMjAzNjFFOUU0N0Mz
MDBERUM2MUQgLyogQ29yZUF1ZGlvQ2FwdHVyZURldmljZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkzRjgwMjAzODFFOUU0N0M5MDBERUM2MUQgLyogQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFn
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJM0ZGMUZBNjYxRTczNTBGRDAwQzEwMDJGIC8qIENv
cmVBdWRpb0NhcHR1cmVTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMDdBRkY0MjMxRUZC
MTQ0OTAwQjU0NUIzIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2VJT1MubW0gaW4gU291cmNlcyAq
LywKIAkJCQk0NDM4MTdGRjFBOTFCMkY4MDA2RTA0RjIgLyogQ29yZU1lZGlhU29mdExpbmsuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q3RDMzNDcxQzdBMTZCRjAwMDQxMjkzIC8qIENvcmVWaWRl
b1NvZnRMaW5rLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNUVCOTUwMEU4MjA1NkIwMEIyNTk2
NSAvKiBDb3VudGVyRGlyZWN0aXZlcy5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlh
U291cmNlLmgJKHJldmlzaW9uIDIxODYwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDEw
ICsyMzUsMTAgQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCB2aWRlb1NhbXBsZUF2YWlsYWJsZShN
ZWRpYVNhbXBsZSYpOwogICAgIHZvaWQgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKGNvbnN0IE1lZGlh
VGltZSYsIGNvbnN0IFBsYXRmb3JtQXVkaW9EYXRhJiwgY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbiYsIHNpemVfdCk7Ci0gICAgCi1wcml2YXRlOgorCiAgICAgV2Vha1B0cjxSZWFsdGltZU1l
ZGlhU291cmNlPiBjcmVhdGVXZWFrUHRyKCkgeyByZXR1cm4gbV93ZWFrUHRyRmFjdG9yeS5jcmVh
dGVXZWFrUHRyKCk7IH0KIAorcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRQcm9kdWNp
bmdEYXRhKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHN0b3BQcm9kdWNpbmdEYXRhKCkgeyB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2lvcy9Db3JlQXVkaW9D
YXB0dXJlU291cmNlSU9TLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vaW9zL0NvcmVBdWRpb0NhcHR1cmVTb3VyY2VJT1MuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9pb3MvQ29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZUlPUy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgIkNvcmVB
dWRpb0NhcHR1cmVTb3VyY2UuaCIKKworT0JKQ19DTEFTUyBXZWJDb3JlQXVkaW9DYXB0dXJlU291
cmNlSU9TTGlzdGVuZXI7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZUlPUyBmaW5hbCA6IHB1YmxpYyBDb3JlQXVkaW9DYXB0dXJlU291cmNlIHsK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U7CisKKyAg
ICBDb3JlQXVkaW9DYXB0dXJlU291cmNlSU9TKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQsIGNvbnN0
IFN0cmluZyYgbGFiZWwpOworICAgIH5Db3JlQXVkaW9DYXB0dXJlU291cmNlSU9TKCk7CisKKyAg
ICBSZXRhaW5QdHI8V2ViQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPU0xpc3RlbmVyPiBtX2xpc3Rl
bmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1F
RElBX1NUUkVBTSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2lv
cy9Db3JlQXVkaW9DYXB0dXJlU291cmNlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2lvcy9Db3JlQXVkaW9DYXB0dXJlU291cmNlSU9TLm1t
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2lv
cy9Db3JlQXVkaW9DYXB0dXJlU291cmNlSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvcmVB
dWRpb0NhcHR1cmVTb3VyY2VJT1MuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFBM
QVRGT1JNKElPUykKKworI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiU29mdExpbmtpbmcu
aCIKKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVkF1ZGlvU2Vzc2lvbi5oPgorI2ltcG9ydCA8d3Rm
L01haW5UaHJlYWQuaD4KKwordHlwZWRlZiBBVkF1ZGlvU2Vzc2lvbiBBVkF1ZGlvU2Vzc2lvblR5
cGU7CisKK1NPRlRfTElOS19GUkFNRVdPUksoQVZGb3VuZGF0aW9uKQorU09GVF9MSU5LX0NMQVNT
KEFWRm91bmRhdGlvbiwgQVZBdWRpb1Nlc3Npb24pCisKK1NPRlRfTElOS19QT0lOVEVSKEFWRm91
bmRhdGlvbiwgQVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25Ob3RpZmljYXRpb24sIE5TU3RyaW5n
ICopCitTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWQXVkaW9TZXNzaW9uSW50ZXJy
dXB0aW9uVHlwZUtleSwgTlNTdHJpbmcgKikKK1NPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlv
biwgQVZBdWRpb1Nlc3Npb25NZWRpYVNlcnZpY2VzV2VyZVJlc2V0Tm90aWZpY2F0aW9uLCBOU1N0
cmluZyAqKQorCisjZGVmaW5lIEFWQXVkaW9TZXNzaW9uIGdldEFWQXVkaW9TZXNzaW9uQ2xhc3Mo
KQorI2RlZmluZSBBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvbk5vdGlmaWNhdGlvbiBnZXRBVkF1
ZGlvU2Vzc2lvbkludGVycnVwdGlvbk5vdGlmaWNhdGlvbigpCisjZGVmaW5lIEFWQXVkaW9TZXNz
aW9uSW50ZXJydXB0aW9uVHlwZUtleSBnZXRBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvblR5cGVL
ZXkoKQorI2RlZmluZSBBVkF1ZGlvU2Vzc2lvbk1lZGlhU2VydmljZXNXZXJlUmVzZXROb3RpZmlj
YXRpb24gZ2V0QVZBdWRpb1Nlc3Npb25NZWRpYVNlcnZpY2VzV2VyZVJlc2V0Tm90aWZpY2F0aW9u
KCkKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0BpbnRlcmZhY2UgV2ViQ29yZUF1ZGlv
Q2FwdHVyZVNvdXJjZUlPU0xpc3RlbmVyIDogTlNPYmplY3QgeworICAgIENvcmVBdWRpb0NhcHR1
cmVTb3VyY2VJT1MqIF9jYWxsYmFjazsKK30KKworLSAodm9pZClpbnZhbGlkYXRlOworLSAodm9p
ZCloYW5kbGVJbnRlcnJ1cHRpb246KE5TTm90aWZpY2F0aW9uKilub3RpZmljYXRpb247CistICh2
b2lkKXNlc3Npb25NZWRpYVNlcnZpY2VzV2VyZVJlc2V0OihOU05vdGlmaWNhdGlvbiopbm90aWZp
Y2F0aW9uOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViQ29yZUF1ZGlvQ2FwdHVyZVNvdXJj
ZUlPU0xpc3RlbmVyCistIChpZClpbml0V2l0aENhbGxiYWNrOihDb3JlQXVkaW9DYXB0dXJlU291
cmNlSU9TKiljYWxsYmFjaworeworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFz
ZWxmKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX2NhbGxiYWNrID0gY2FsbGJhY2s7CisK
KyAgICBOU05vdGlmaWNhdGlvbkNlbnRlciogY2VudGVyID0gW05TTm90aWZpY2F0aW9uQ2VudGVy
IGRlZmF1bHRDZW50ZXJdOworICAgIEFWQXVkaW9TZXNzaW9uVHlwZSogc2Vzc2lvbiA9IFtBVkF1
ZGlvU2Vzc2lvbiBzaGFyZWRJbnN0YW5jZV07CisKKyAgICBbY2VudGVyIGFkZE9ic2VydmVyOnNl
bGYgc2VsZWN0b3I6QHNlbGVjdG9yKGhhbmRsZUludGVycnVwdGlvbjopIG5hbWU6QVZBdWRpb1Nl
c3Npb25JbnRlcnJ1cHRpb25Ob3RpZmljYXRpb24gb2JqZWN0OnNlc3Npb25dOworICAgIFtjZW50
ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Ioc2Vzc2lvbk1lZGlhU2Vydmlj
ZXNXZXJlUmVzZXQ6KSBuYW1lOkFWQXVkaW9TZXNzaW9uTWVkaWFTZXJ2aWNlc1dlcmVSZXNldE5v
dGlmaWNhdGlvbiBvYmplY3Q6c2Vzc2lvbl07CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAo
dm9pZClpbnZhbGlkYXRlCit7CisgICAgX2NhbGxiYWNrID0gbnVsbHB0cjsKKyAgICBbW05TTm90
aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZdOworfQor
CistICh2b2lkKWhhbmRsZUludGVycnVwdGlvbjooTlNOb3RpZmljYXRpb24qKW5vdGlmaWNhdGlv
bgoreworICAgIEFTU0VSVChfY2FsbGJhY2spOworICAgIGlmICghX2NhbGxiYWNrKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoW1tub3RpZmljYXRpb24udXNlckluZm8gdmFsdWVGb3JLZXk6
QVZBdWRpb1Nlc3Npb25JbnRlcnJ1cHRpb25UeXBlS2V5XSBpbnRWYWx1ZV0gPT0gQVZBdWRpb1Nl
c3Npb25JbnRlcnJ1cHRpb25UeXBlQmVnYW4pIHsKKyAgICAgICAgX2NhbGxiYWNrLT5iZWdpbklu
dGVycnVwdGlvbigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKFtbbm90aWZp
Y2F0aW9uLnVzZXJJbmZvIHZhbHVlRm9yS2V5OkFWQXVkaW9TZXNzaW9uSW50ZXJydXB0aW9uVHlw
ZUtleV0gaW50VmFsdWVdID09IEFWQXVkaW9TZXNzaW9uSW50ZXJydXB0aW9uVHlwZUVuZGVkKSB7
CisgICAgICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOworICAgICAgICBbW0FWQXVkaW9TZXNzaW9u
IHNoYXJlZEluc3RhbmNlXSBzZXRBY3RpdmU6WUVTIGVycm9yOiZlcnJvcl07CisKKyNpZiAhTE9H
X0RJU0FCTEVECisgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgIExPRyhNZWRpYSwgIi1b
V2ViQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPU0xpc3RlbmVyIGhhbmRsZUludGVycnVwdGlvbl0g
KCVwKSAtIGVycm9yID0gJXMiLCBzZWxmLCBbW2Vycm9yIGxvY2FsaXplZERlc2NyaXB0aW9uXSBV
VEY4U3RyaW5nXSk7CisjZW5kaWYKKworICAgICAgICBfY2FsbGJhY2stPmVuZEludGVycnVwdGlv
bigpOworICAgIH0KK30KKworLSAodm9pZClzZXNzaW9uTWVkaWFTZXJ2aWNlc1dlcmVSZXNldDoo
TlNOb3RpZmljYXRpb24qKW5vdGlmaWNhdGlvbgoreworICAgIFVOVVNFRF9QQVJBTShub3RpZmlj
YXRpb24pOworICAgIEFTU0VSVChfY2FsbGJhY2spOworCisgICAgaWYgKCFfY2FsbGJhY2spCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIG1lZGlhc2VydmVyZCBjcmFzaGVkIGFuZCB3YXMgcmVs
YXVuY2hlZCwgcmVidWlsZCBldmVyeXRoaW5nLiBTZWUKKyAgICAvLyBodHRwczovL2RldmVsb3Bl
ci5hcHBsZS5jb20vbGlicmFyeS9jb250ZW50L3FhL3FhMTc0OS9faW5kZXguaHRtbC4KKyAgICBf
Y2FsbGJhY2stPnNjaGVkdWxlUmVjb25maWd1cmF0aW9uKCk7Cit9CitAZW5kCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPUzo6Q29yZUF1ZGlvQ2FwdHVy
ZVNvdXJjZUlPUyhjb25zdCBTdHJpbmcmIGRldmljZUlELCBjb25zdCBTdHJpbmcmIGxhYmVsKQor
ICAgIDogQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZShkZXZpY2VJRCwgbGFiZWwsIDApCisgICAgLCBt
X2xpc3RlbmVyKGFkb3B0TlMoW1tXZWJDb3JlQXVkaW9DYXB0dXJlU291cmNlSU9TTGlzdGVuZXIg
YWxsb2NdIGluaXRXaXRoQ2FsbGJhY2s6dGhpc10pKQoreworfQorCitDb3JlQXVkaW9DYXB0dXJl
U291cmNlSU9TOjp+Q29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPUygpCit7CisgICAgW21fbGlzdGVu
ZXIgaW52YWxpZGF0ZV07CisgICAgbV9saXN0ZW5lciA9IG51bGxwdHI7Cit9CisKK30KKworI2Vu
ZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFBMQVRGT1JNKElPUykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAJKHJldmlzaW9uIDIxODYwOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291cmNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkF1ZGlvU2Vz
c2lvbi5oIgogI2luY2x1ZGUgIkNvcmVBdWRpb0NhcHR1cmVEZXZpY2UuaCIKICNpbmNsdWRlICJD
b3JlQXVkaW9DYXB0dXJlRGV2aWNlTWFuYWdlci5oIgorI2luY2x1ZGUgIkNvcmVBdWRpb0NhcHR1
cmVTb3VyY2VJT1MuaCIKICNpbmNsdWRlICJDb3JlQXVkaW9TUEkuaCIKICNpbmNsdWRlICJMb2dn
aW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFUaW1lQVZGb3VuZGF0aW9uLmgiCkBAIC04NCw2ICs4NSw5
IEBAIHB1YmxpYzoKICAgICBib29sIGlzUHJvZHVjaW5nRGF0YSgpIHsgcmV0dXJuIG1faW9Vbml0
U3RhcnRlZDsgfQogCiAgICAgT1NTdGF0dXMgc3VzcGVuZCgpOworICAgIE9TU3RhdHVzIHJlc3Vt
ZSgpOworCisgICAgYm9vbCBpc1N1c3BlbmRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3VzcGVuZGVk
OyB9CiAKICAgICBPU1N0YXR1cyBzZXR1cEF1ZGlvVW5pdCgpOwogICAgIHZvaWQgY2xlYW51cEF1
ZGlvVW5pdCgpOwpAQCAtMTE4LDYgKzEyMiw5IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIE9TU3Rh
dHVzIHNwZWFrZXJDYWxsYmFjayh2b2lkKiwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBj
b25zdCBBdWRpb1RpbWVTdGFtcCosIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxpc3QqKTsK
ICAgICBPU1N0YXR1cyBwcm92aWRlU3BlYWtlckRhdGEoQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxh
Z3MmLCBjb25zdCBBdWRpb1RpbWVTdGFtcCYsIFVJbnQzMiwgVUludDMyLCBBdWRpb0J1ZmZlckxp
c3QqKTsKIAorICAgIHZvaWQgc3RhcnRJbnRlcm5hbCgpOworICAgIHZvaWQgc3RvcEludGVybmFs
KCk7CisKICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDb3JlQXVkaW9DYXB0dXJl
U291cmNlPj4gbV9jbGllbnRzOwogCiAgICAgQXVkaW9Vbml0IG1faW9Vbml0IHsgbnVsbHB0ciB9
OwpAQCAtMTYzLDYgKzE3MCw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2VuYWJsZUVjaG9DYW5j
ZWxsYXRpb24geyB0cnVlIH07CiAgICAgZG91YmxlIG1fdm9sdW1lIHsgMSB9OwogICAgIGludCBt
X3NhbXBsZVJhdGU7CisKKyAgICBib29sIG1fc3VzcGVuZGVkIHsgZmFsc2UgfTsKIH07CiAKIENv
cmVBdWRpb1NoYXJlZFVuaXQmIENvcmVBdWRpb1NoYXJlZFVuaXQ6OnNpbmdsZXRvbigpCkBAIC0y
OTUsNiArMzA0LDcgQEAgT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c2V0dXBBdWRpbwog
ICAgICAgICByZXR1cm4gZXJyOwogICAgIH0KICAgICBtX2lvVW5pdEluaXRpYWxpemVkID0gdHJ1
ZTsKKyAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwogCiAgICAgdWludDMyX3Qgb3V0cHV0RGV2aWNl
OwogICAgIGlmICghZGVmYXVsdE91dHB1dERldmljZSgmb3V0cHV0RGV2aWNlKSkKQEAgLTUzNyw2
ICs1NDcsMjcgQEAgdm9pZCBDb3JlQXVkaW9TaGFyZWRVbml0OjpzdGFydFByb2R1Y2luZwogICAg
IGlmIChtX2lvVW5pdFN0YXJ0ZWQpCiAgICAgICAgIHJldHVybjsKIAorICAgIHN0YXJ0SW50ZXJu
YWwoKTsKK30KKworT1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6cmVzdW1lKCkKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX3N1c3BlbmRlZCk7CisgICAg
QVNTRVJUKCFtX2lvVW5pdFN0YXJ0ZWQpOworCisgICAgbV9zdXNwZW5kZWQgPSBmYWxzZTsKKwor
ICAgIGlmICghbV9pb1VuaXQpCisgICAgICAgIHJldHVybiAwOworCisgICAgc3RhcnRJbnRlcm5h
bCgpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3Rh
cnRJbnRlcm5hbCgpCit7CiAgICAgT1NTdGF0dXMgZXJyOwogICAgIGlmICghbV9pb1VuaXQpIHsK
ICAgICAgICAgZXJyID0gc2V0dXBBdWRpb1VuaXQoKTsKQEAgLTU2MCw1MCArNTkxLDM2IEBAIHZv
aWQgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c3RhcnRQcm9kdWNpbmcKIHZvaWQgQ29yZUF1ZGlvU2hh
cmVkVW5pdDo6c3RvcFByb2R1Y2luZ0RhdGEoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisgICAgQVNTRVJUKG1fcHJvZHVjaW5nQ291bnQpOwogCi0gICAgaWYgKC0tbV9wcm9kdWNp
bmdDb3VudCkKKyAgICBpZiAobV9wcm9kdWNpbmdDb3VudCAmJiAtLW1fcHJvZHVjaW5nQ291bnQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbV9pb1VuaXQgfHwgIW1faW9Vbml0U3RhcnRl
ZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBlcnIgPSBBdWRpb091dHB1dFVuaXRTdG9w
KG1faW9Vbml0KTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIExPRyhNZWRpYSwgIkNvcmVBdWRp
b1NoYXJlZFVuaXQ6OnN0b3AoJXApIEF1ZGlvT3V0cHV0VW5pdFN0b3AgZmFpbGVkIHdpdGggZXJy
b3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG1faW9Vbml0U3RhcnRlZCA9IGZhbHNlOworICAgIHN0b3BJbnRl
cm5hbCgpOwogfQogCiBPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRVbml0OjpzdXNwZW5kKCkKIHsK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgbV9hY3RpdmVTb3VyY2VzLmNsZWFy
KCk7Ci0gICAgbV9wZW5kaW5nU291cmNlcy5jbGVhcigpOworICAgIG1fc3VzcGVuZGVkID0gdHJ1
ZTsKKyAgICBzdG9wSW50ZXJuYWwoKTsKIAotICAgIGlmIChtX2lvVW5pdFN0YXJ0ZWQpIHsKLSAg
ICAgICAgQVNTRVJUKG1faW9Vbml0KTsKLSAgICAgICAgYXV0byBlcnIgPSBBdWRpb091dHB1dFVu
aXRTdG9wKG1faW9Vbml0KTsKLSAgICAgICAgaWYgKGVycikgewotICAgICAgICAgICAgTE9HKE1l
ZGlhLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6cmVzdW1lKCVwKSBBdWRpb091dHB1dFVuaXRTdG9w
IGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVy
cik7Ci0gICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICB9Ci0gICAgICAgIG1faW9Vbml0
U3RhcnRlZCA9IGZhbHNlOwotICAgIH0KKyAgICByZXR1cm4gMDsKK30KIAotICAgIGlmIChtX2lv
VW5pdEluaXRpYWxpemVkKSB7Ci0gICAgICAgIEFTU0VSVChtX2lvVW5pdCk7Ci0gICAgICAgIGF1
dG8gZXJyID0gQXVkaW9Vbml0VW5pbml0aWFsaXplKG1faW9Vbml0KTsKLSAgICAgICAgaWYgKGVy
cikgewotICAgICAgICAgICAgTE9HKE1lZGlhLCAiQ29yZUF1ZGlvU2hhcmVkVW5pdDo6cmVzdW1l
KCVwKSBBdWRpb1VuaXRVbmluaXRpYWxpemUgZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwg
dGhpcywgKGludCllcnIsIChjaGFyKikmZXJyKTsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0g
ICAgICAgIH0KLSAgICAgICAgbV9pb1VuaXRJbml0aWFsaXplZCA9IGZhbHNlOwordm9pZCBDb3Jl
QXVkaW9TaGFyZWRVbml0OjpzdG9wSW50ZXJuYWwoKQoreworICAgIGlmICghbV9pb1VuaXQgfHwg
IW1faW9Vbml0U3RhcnRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBlcnIgPSBBdWRp
b091dHB1dFVuaXRTdG9wKG1faW9Vbml0KTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPRyhN
ZWRpYSwgIkNvcmVBdWRpb1NoYXJlZFVuaXQ6OnN0b3AoJXApIEF1ZGlvT3V0cHV0VW5pdFN0b3Ag
ZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgKGludCllcnIsIChjaGFyKikmZXJy
KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHJldHVybiAwOworICAgIG1faW9Vbml0
U3RhcnRlZCA9IGZhbHNlOwogfQogCiBPU1N0YXR1cyBDb3JlQXVkaW9TaGFyZWRVbml0OjpkZWZh
dWx0SW5wdXREZXZpY2UodWludDMyX3QqIGRldmljZUlEKQpAQCAtNjM2LDIzICs2NTMsMTkgQEAg
T1NTdGF0dXMgQ29yZUF1ZGlvU2hhcmVkVW5pdDo6ZGVmYXVsdE91dAogCiBDYXB0dXJlU291cmNl
T3JFcnJvciBDb3JlQXVkaW9DYXB0dXJlU291cmNlOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBkZXZp
Y2VJRCwgY29uc3QgTWVkaWFDb25zdHJhaW50cyogY29uc3RyYWludHMpCiB7Ci0gICAgU3RyaW5n
IGxhYmVsOwotICAgIHVpbnQzMl90IHBlcnNpc3RlbnRJRCA9IDA7CiAjaWYgUExBVEZPUk0oTUFD
KQogICAgIGF1dG8gZGV2aWNlID0gQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmds
ZXRvbigpLmNvcmVBdWRpb0RldmljZVdpdGhVSUQoZGV2aWNlSUQpOwogICAgIGlmICghZGV2aWNl
KQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgbGFiZWwgPSBkZXZpY2UtPmxhYmVsKCk7Ci0g
ICAgcGVyc2lzdGVudElEID0gZGV2aWNlLT5kZXZpY2VJRCgpOworICAgIGF1dG8gc291cmNlID0g
YWRvcHRSZWYoKm5ldyBDb3JlQXVkaW9DYXB0dXJlU291cmNlKGRldmljZUlELCBkZXZpY2UtPmxh
YmVsKCksIGRldmljZS0+ZGV2aWNlSUQoKSkpOwogI2VsaWYgUExBVEZPUk0oSU9TKQogICAgIGF1
dG8gZGV2aWNlID0gQVZBdWRpb1Nlc3Npb25DYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9u
KCkuYXVkaW9TZXNzaW9uRGV2aWNlV2l0aFVJRChkZXZpY2VJRCk7CiAgICAgaWYgKCFkZXZpY2Up
CiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBsYWJlbCA9IGRldmljZS0+bGFiZWwoKTsKKyAg
ICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVmKCpuZXcgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUlPUyhk
ZXZpY2VJRCwgZGV2aWNlLT5sYWJlbCgpKSk7CiAjZW5kaWYKLSAgICBhdXRvIHNvdXJjZSA9IGFk
b3B0UmVmKCpuZXcgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZShkZXZpY2VJRCwgbGFiZWwsIHBlcnNp
c3RlbnRJRCkpOwogCiAgICAgaWYgKGNvbnN0cmFpbnRzKSB7CiAgICAgICAgIGF1dG8gcmVzdWx0
ID0gc291cmNlLT5hcHBseUNvbnN0cmFpbnRzKCpjb25zdHJhaW50cyk7CkBAIC03MDUsMTIgKzcx
OCwyNSBAQCB2b2lkIENvcmVBdWRpb0NhcHR1cmVTb3VyY2U6OnN0YXJ0UHJvZHVjCiAgICAgY29y
ZUF1ZGlvQ2FwdHVyZVNvdXJjZUZhY3RvcnkoKS5zZXRBY3RpdmVTb3VyY2UoKnRoaXMpOwogI2Vu
ZGlmCiAKLSAgICBDb3JlQXVkaW9TaGFyZWRVbml0OjpzaW5nbGV0b24oKS5zdGFydFByb2R1Y2lu
Z0RhdGEoKTsKKyAgICBhdXRvJiB1bml0ID0gQ29yZUF1ZGlvU2hhcmVkVW5pdDo6c2luZ2xldG9u
KCk7CisgICAgaWYgKHVuaXQuaXNTdXNwZW5kZWQoKSkgeworICAgICAgICBtX3N1c3BlbmRUeXBl
ID0gU3VzcGVuc2lvblR5cGU6OldoaWxlUGxheWluZzsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIHVuaXQuc3RhcnRQcm9kdWNpbmdEYXRhKCk7CiB9CiAKIHZvaWQgQ29yZUF1ZGlvQ2Fw
dHVyZVNvdXJjZTo6c3RvcFByb2R1Y2luZ0RhdGEoKQogewotICAgIENvcmVBdWRpb1NoYXJlZFVu
aXQ6OnNpbmdsZXRvbigpLnN0b3BQcm9kdWNpbmdEYXRhKCk7CisgICAgYXV0byYgdW5pdCA9IENv
cmVBdWRpb1NoYXJlZFVuaXQ6OnNpbmdsZXRvbigpOworCisgICAgaWYgKHVuaXQuaXNTdXNwZW5k
ZWQoKSkgeworICAgICAgICBtX3N1c3BlbmRUeXBlID0gU3VzcGVuc2lvblR5cGU6OldoaWxlUGF1
c2VkOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdW5pdC5zdG9wUHJvZHVjaW5nRGF0
YSgpOwogfQogCiBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBDb3JlQXVk
aW9DYXB0dXJlU291cmNlOjpjYXBhYmlsaXRpZXMoKSBjb25zdApAQCAtNzg0LDE4ICs4MTAsMTAz
IEBAIGJvb2wgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6YXBwbHlFY2hvQ2EKIAogdm9pZCBDb3Jl
QXVkaW9DYXB0dXJlU291cmNlOjpzY2hlZHVsZVJlY29uZmlndXJhdGlvbigpCiB7CisgICAgaWYg
KCFpc01haW5UaHJlYWQoKSkgeworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt3ZWFrVGhpcyA9
IGNyZWF0ZVdlYWtQdHIoKSwgdGhpc10geworICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIHNjaGVkdWxlUmVjb25maWd1cmF0
aW9uKCk7CisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGF1dG8mIHVuaXQgPSBDb3JlQXVkaW9TaGFyZWRVbml0
OjpzaW5nbGV0b24oKTsKLSAgICBpZiAoIXVuaXQuaGFzQXVkaW9Vbml0KCkgfHwgbV9yZWNvbmZp
Z3VyYXRpb25PbmdvaW5nKQorICAgIGlmICghdW5pdC5oYXNBdWRpb1VuaXQoKSB8fCBtX3JlY29u
ZmlndXJhdGlvblN0YXRlICE9IFJlY29uZmlndXJhdGlvblN0YXRlOjpOb25lKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX3JlY29uZmlndXJhdGlvbk9uZ29pbmcgPSB0cnVlOworICAgIG1fcmVj
b25maWd1cmF0aW9uU3RhdGUgPSBSZWNvbmZpZ3VyYXRpb25TdGF0ZTo6T25nb2luZzsKICAgICBz
Y2hlZHVsZURlZmVycmVkVGFzayhbdGhpcywgJnVuaXRdIHsKKyAgICAgICAgaWYgKHVuaXQuaXNT
dXNwZW5kZWQoKSkgeworICAgICAgICAgICAgbV9yZWNvbmZpZ3VyYXRpb25TdGF0ZSA9IFJlY29u
ZmlndXJhdGlvblN0YXRlOjpSZXF1aXJlZDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCiAgICAgICAgIHVuaXQucmVjb25maWd1cmVBdWRpb1VuaXQoKTsKLSAgICAgICAgbV9yZWNv
bmZpZ3VyYXRpb25PbmdvaW5nID0gZmFsc2U7CisgICAgICAgIG1fcmVjb25maWd1cmF0aW9uU3Rh
dGUgPSBSZWNvbmZpZ3VyYXRpb25TdGF0ZTo6Tm9uZTsKICAgICB9KTsKIH0KIAordm9pZCBDb3Jl
QXVkaW9DYXB0dXJlU291cmNlOjpiZWdpbkludGVycnVwdGlvbigpCit7CisgICAgaWYgKCFpc01h
aW5UaHJlYWQoKSkgeworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt3ZWFrVGhpcyA9IGNyZWF0
ZVdlYWtQdHIoKSwgdGhpc10geworICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGJlZ2luSW50ZXJydXB0aW9uKCk7CisgICAg
ICAgIH0pOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworICAgIGF1dG8mIHVuaXQgPSBDb3JlQXVkaW9TaGFyZWRVbml0OjpzaW5nbGV0b24o
KTsKKyAgICBpZiAoIXVuaXQuaGFzQXVkaW9Vbml0KCkgfHwgdW5pdC5pc1N1c3BlbmRlZCgpIHx8
IG1fc3VzcGVuZFBlbmRpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3VzcGVuZFBlbmRp
bmcgPSB0cnVlOworICAgIHNjaGVkdWxlRGVmZXJyZWRUYXNrKFt0aGlzLCAmdW5pdF0geworICAg
ICAgICBtX3N1c3BlbmRUeXBlID0gdW5pdC5pc1Byb2R1Y2luZ0RhdGEoKSA/IFN1c3BlbnNpb25U
eXBlOjpXaGlsZVBsYXlpbmcgOiBTdXNwZW5zaW9uVHlwZTo6V2hpbGVQYXVzZWQ7CisgICAgICAg
IHVuaXQuc3VzcGVuZCgpOworICAgICAgICBtX3N1c3BlbmRQZW5kaW5nID0gZmFsc2U7CisgICAg
fSk7Cit9CisKK3ZvaWQgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6ZW5kSW50ZXJydXB0aW9uKCkK
K3sKKyAgICBpZiAoIWlzTWFpblRocmVhZCgpKSB7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQo
W3dlYWtUaGlzID0gY3JlYXRlV2Vha1B0cigpLCB0aGlzXSB7CisgICAgICAgICAgICBpZiAoIXdl
YWtUaGlzKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgZW5kSW50ZXJy
dXB0aW9uKCk7CisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGF1dG8mIHVuaXQgPSBDb3JlQXVkaW9TaGFyZWRV
bml0OjpzaW5nbGV0b24oKTsKKyAgICBpZiAoIXVuaXQuaGFzQXVkaW9Vbml0KCkgfHwgIXVuaXQu
aXNTdXNwZW5kZWQoKSB8fCBtX3Jlc3VtZVBlbmRpbmcpCisgICAgICAgIHJldHVybjsKKworICAg
IGF1dG8gdHlwZSA9IG1fc3VzcGVuZFR5cGU7CisgICAgbV9zdXNwZW5kVHlwZSA9IFN1c3BlbnNp
b25UeXBlOjpOb25lOworICAgIGlmICh0eXBlICE9IFN1c3BlbnNpb25UeXBlOjpXaGlsZVBsYXlp
bmcgJiYgbV9yZWNvbmZpZ3VyYXRpb25TdGF0ZSAhPSBSZWNvbmZpZ3VyYXRpb25TdGF0ZTo6UmVx
dWlyZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcmVzdW1lUGVuZGluZyA9IHRydWU7Cisg
ICAgc2NoZWR1bGVEZWZlcnJlZFRhc2soW3RoaXMsIHR5cGUsICZ1bml0XSB7CisgICAgICAgIGlm
IChtX3JlY29uZmlndXJhdGlvblN0YXRlID09IFJlY29uZmlndXJhdGlvblN0YXRlOjpSZXF1aXJl
ZCkKKyAgICAgICAgICAgIHVuaXQucmVjb25maWd1cmVBdWRpb1VuaXQoKTsKKyAgICAgICAgaWYg
KHR5cGUgPT0gU3VzcGVuc2lvblR5cGU6OldoaWxlUGxheWluZykKKyAgICAgICAgICAgIHVuaXQu
cmVzdW1lKCk7CisgICAgICAgIG1fcmVjb25maWd1cmF0aW9uU3RhdGUgPSBSZWNvbmZpZ3VyYXRp
b25TdGF0ZTo6Tm9uZTsKKyAgICAgICAgbV9yZXN1bWVQZW5kaW5nID0gZmFsc2U7CisgICAgfSk7
Cit9CisKK2Jvb2wgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZTo6aW50ZXJydXB0ZWQoKSBjb25zdAor
eworICAgIGF1dG8mIHVuaXQgPSBDb3JlQXVkaW9TaGFyZWRVbml0OjpzaW5nbGV0b24oKTsKKyAg
ICBpZiAodW5pdC5pc1N1c3BlbmRlZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJl
dHVybiBSZWFsdGltZU1lZGlhU291cmNlOjppbnRlcnJ1cHRlZCgpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVTb3Vy
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5oCShyZXZpc2lvbiAyMTg2MDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIGNsYXNzIEF1ZGlvU2FtcGxlRGF0YVNv
dXJjZTsKIGNsYXNzIENhcHR1cmVEZXZpY2VJbmZvOwogY2xhc3MgV2ViQXVkaW9Tb3VyY2VQcm92
aWRlckFWRk9iakM7CiAKLWNsYXNzIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UgZmluYWwgOiBwdWJs
aWMgUmVhbHRpbWVNZWRpYVNvdXJjZSB7CitjbGFzcyBDb3JlQXVkaW9DYXB0dXJlU291cmNlIDog
cHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2UgewogcHVibGljOgogCiAgICAgc3RhdGljIENhcHR1
cmVTb3VyY2VPckVycm9yIGNyZWF0ZShjb25zdCBTdHJpbmcmIGRldmljZUlELCBjb25zdCBNZWRp
YUNvbnN0cmFpbnRzKik7CkBAIC02OCwxNSArNjgsMTggQEAgcHVibGljOgogCiAgICAgQ01DbG9j
a1JlZiB0aW1lYmFzZUNsb2NrKCk7CiAKLXByaXZhdGU6CisgICAgdm9pZCBiZWdpbkludGVycnVw
dGlvbigpOworICAgIHZvaWQgZW5kSW50ZXJydXB0aW9uKCk7CisgICAgdm9pZCBzY2hlZHVsZVJl
Y29uZmlndXJhdGlvbigpOworCitwcm90ZWN0ZWQ6CiAgICAgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJj
ZShjb25zdCBTdHJpbmcmIGRldmljZUlELCBjb25zdCBTdHJpbmcmIGxhYmVsLCB1aW50MzJfdCBw
ZXJzaXN0ZW50SUQpOwogICAgIHZpcnR1YWwgfkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UoKTsKIAor
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ29yZUF1ZGlvU2hhcmVkVW5pdDsKICAgICBmcmll
bmQgY2xhc3MgQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZUZhY3Rvcnk7CiAKLSAgICB2b2lkIHNjaGVk
dWxlUmVjb25maWd1cmF0aW9uKCk7Ci0KICAgICBib29sIGlzQ2FwdHVyZVNvdXJjZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KICAgICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIGZp
bmFsOwogICAgIHZvaWQgc3RvcFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsKQEAgLTg5LDE0ICs5Miwy
MiBAQCBwcml2YXRlOgogICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0
dGluZ3MoKSBjb25zdCBmaW5hbDsKICAgICB2b2lkIHNldHRpbmdzRGlkQ2hhbmdlKCkgZmluYWw7
CiAKLSAgICB1aW50MzJfdCBtX2NhcHR1cmVEZXZpY2VJRCB7IDAgfTsKKyAgICBib29sIGludGVy
cnVwdGVkKCkgY29uc3QgZmluYWw7CiAKLSAgICBib29sIG1faXNTdXNwZW5kZWQgeyBmYWxzZSB9
OworICAgIHVpbnQzMl90IG1fY2FwdHVyZURldmljZUlEIHsgMCB9OwogCiAgICAgbXV0YWJsZSBz
dGQ6Om9wdGlvbmFsPFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM+IG1fY2FwYWJpbGl0
aWVzOwogICAgIG11dGFibGUgc3RkOjpvcHRpb25hbDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGlu
Z3M+IG1fY3VycmVudFNldHRpbmdzOwogCi0gICAgYm9vbCBtX3JlY29uZmlndXJhdGlvbk9uZ29p
bmcgeyBmYWxzZSB9OworICAgIGVudW0gY2xhc3MgU3VzcGVuc2lvblR5cGUgeyBOb25lLCBXaGls
ZVBhdXNlZCwgV2hpbGVQbGF5aW5nIH07CisgICAgU3VzcGVuc2lvblR5cGUgbV9zdXNwZW5kVHlw
ZSB7IFN1c3BlbnNpb25UeXBlOjpOb25lIH07CisKKyAgICBlbnVtIGNsYXNzIFJlY29uZmlndXJh
dGlvblN0YXRlIHsgTm9uZSwgUmVxdWlyZWQsIE9uZ29pbmcgfTsKKyAgICBSZWNvbmZpZ3VyYXRp
b25TdGF0ZSBtX3JlY29uZmlndXJhdGlvblN0YXRlIHsgUmVjb25maWd1cmF0aW9uU3RhdGU6Ok5v
bmUgfTsKKworICAgIGJvb2wgbV9yZWNvbmZpZ3VyYXRpb25SZXF1aXJlZCB7IGZhbHNlIH07Cisg
ICAgYm9vbCBtX3N1c3BlbmRQZW5kaW5nIHsgZmFsc2UgfTsKKyAgICBib29sIG1fcmVzdW1lUGVu
ZGluZyB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>