<?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>229142</bug_id>
          
          <creation_ts>2021-08-16 09:08:51 -0700</creation_ts>
          <short_desc>[macOS] Refactor screen capture class</short_desc>
          <delta_ts>2021-09-01 09:03:32 -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>WebRTC</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1784518</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2021-08-16 09:08:51 -0700</bug_when>
    <thetext>Refactor macOS screen capture class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784519</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-08-16 09:09:07 -0700</bug_when>
    <thetext>&lt;rdar://problem/81983306&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784645</commentid>
    <comment_count>2</comment_count>
      <attachid>435629</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2021-08-16 14:00:32 -0700</bug_when>
    <thetext>Created attachment 435629
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784671</commentid>
    <comment_count>3</comment_count>
      <attachid>435636</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2021-08-16 15:47:41 -0700</bug_when>
    <thetext>Created attachment 435636
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1784679</commentid>
    <comment_count>4</comment_count>
      <attachid>435640</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2021-08-16 16:08:36 -0700</bug_when>
    <thetext>Created attachment 435640
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1789338</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-09-01 09:03:30 -0700</bug_when>
    <thetext>Committed r281852 (241184@main): &lt;https://commits.webkit.org/241184@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 435640.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435629</attachid>
            <date>2021-08-16 14:00:32 -0700</date>
            <delta_ts>2021-08-16 15:47:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229142-20210816140031.patch</filename>
            <type>text/plain</type>
            <size>115449</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwODU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTJmOWQ0MTE1MzQxZmQ1
ZjI3MDQwNTE3NGQxMTg5MTQ1YjY2Mjc5ZS4uOTUwZDE3NjNlYzUwNjc0NTllN2U4ODY5MGJiZDlh
MDQ1N2U4NzdhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0IEBACisyMDIxLTA4LTE2ICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFttYWNPU10gUmVm
YWN0b3Igc2NyZWVuIGNhcHR1cmUgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyOTE0MgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vODE5ODMz
MDY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAg
ICAgICBSZW5hbWUgY2xhc3NlcyBiYXNlZCBvbiB0aGUgZnJhbWV3b3JrcyB0aGV5IHVzZS4gQ3Jl
YXRlIENHRGlzcGxheVN0cmVhbSBiYXNlIGNsYXNzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywg
bm8gZnVuY3Rpb25hbCBjaGFuZ2UuCisKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZTo6fkNH
RGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0dEaXNwbGF5
U3RyZWFtQ2FwdHVyZVNvdXJjZTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0dEaXNwbGF5
U3RyZWFtQ2FwdHVyZVNvdXJjZTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpDR0Rpc3BsYXlT
dHJlYW1DYXB0dXJlU291cmNlOjpnZW5lcmF0ZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNH
RGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2U6OnN0YXJ0RGlzcGxheVN0cmVhbSk6CisgICAgICAg
IChXZWJDb3JlOjpDR0Rpc3BsYXlTdHJlYW1DYXB0dXJlU291cmNlOjpjb21taXRDb25maWd1cmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNHRGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2U6OmRp
c3BsYXlXYXNSZWNvbmZpZ3VyZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0dEaXNwbGF5U3RyZWFt
Q2FwdHVyZVNvdXJjZTo6ZGlzcGxheVJlY29uZmlndXJhdGlvbkNhbGxCYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkNHRGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2U6Om5ld0ZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNHRGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2U6OmZyYW1lQXZhaWxhYmxl
SGFuZGxlcik6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NHRGlzcGxheVN0
cmVhbUNhcHR1cmVTb3VyY2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlck1hYy5oLgorICAgICAgICAoV2Vi
Q29yZTo6Q0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZTo6Y2hlY2tEaXNwbGF5U3RyZWFtKToK
KyAgICAgICAgKFdlYkNvcmU6OkNHRGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2U6OmRpc3BsYXlT
dHJlYW0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNv
dXJjZTo6aW52YWxpZGF0ZURpc3BsYXlTdHJlYW0pOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9DR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNlLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlzcGxh
eUNhcHR1cmVyTWFjLmguCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NHRGlz
cGxheVN0cmVhbVNjcmVlbkNhcHR1cmVTb3VyY2UubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6dXBkYXRlRGlzcGxheUlEKToKKyAgICAgICAgKFdlYkNvcmU6OkNHRGlzcGxheVN0cmVhbVNj
cmVlbkNhcHR1cmVTb3VyY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDR0Rpc3BsYXlT
dHJlYW1TY3JlZW5DYXB0dXJlU291cmNlOjpDR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNHRGlzcGxheVN0cmVhbVNjcmVlbkNhcHR1cmVTb3Vy
Y2U6OmNoZWNrRGlzcGxheVN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpDR0Rpc3BsYXlTdHJl
YW1TY3JlZW5DYXB0dXJlU291cmNlOjpjcmVhdGVEaXNwbGF5U3RyZWFtKToKKyAgICAgICAgKFdl
YkNvcmU6OkNHRGlzcGxheVN0cmVhbVNjcmVlbkNhcHR1cmVTb3VyY2U6OnNjcmVlbkNhcHR1cmVE
ZXZpY2VXaXRoUGVyc2lzdGVudElEKToKKyAgICAgICAgKFdlYkNvcmU6OkNHRGlzcGxheVN0cmVh
bVNjcmVlbkNhcHR1cmVTb3VyY2U6OnNjcmVlbkNhcHR1cmVEZXZpY2VzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ0dXaW5kb3dDYXB0dXJlU291cmNlLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvV2luZG93RGlzcGxh
eUNhcHR1cmVyTWFjLmguCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NHV2lu
ZG93Q2FwdHVyZVNvdXJjZS5tbTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWMubW0uCisgICAgICAgIChX
ZWJDb3JlOjpDR1dpbmRvd0NhcHR1cmVTb3VyY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDR1dpbmRvd0NhcHR1cmVTb3VyY2U6OkNHV2luZG93Q2FwdHVyZVNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpDR1dpbmRvd0NhcHR1cmVTb3VyY2U6OndpbmRvd0ltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNHV2luZG93Q2FwdHVyZVNvdXJjZTo6Z2VuZXJhdGVGcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpDR1dpbmRvd0NhcHR1cmVTb3VyY2U6OndpbmRvd0NhcHR1cmVEZXZpY2VXaXRo
UGVyc2lzdGVudElEKToKKyAgICAgICAgKFdlYkNvcmU6OkNHV2luZG93Q2FwdHVyZVNvdXJjZTo6
d2luZG93Q2FwdHVyZURldmljZXMpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9EaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5Q2FwdHVyZU1hbmFnZXJDb2NvYTo6dXBkYXRlRGlzcGxheUNhcHR1cmVEZXZpY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDYXB0dXJlTWFuYWdlckNvY29hOjp1cGRhdGVXaW5kb3dD
YXB0dXJlRGV2aWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZU1hbmFnZXJD
b2NvYTo6c2NyZWVuQ2FwdHVyZURldmljZVdpdGhQZXJzaXN0ZW50SUQpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2E6OndpbmRvd0NhcHR1cmVEZXZpY2VXaXRo
UGVyc2lzdGVudElEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxh
eUNhcHR1cmVTb3VyY2VNYWMuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6On5EaXNwbGF5Q2Fw
dHVyZVNvdXJjZU1hYyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJjZU1h
Yzo6Y2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDYXB0dXJlU291cmNl
TWFjOjpzZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJjZU1h
Yzo6c2V0dGluZ3NEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVT
b3VyY2VNYWM6OnN0YXJ0UHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
Q2FwdHVyZVNvdXJjZU1hYzo6c3RvcFByb2R1Y2luZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmVsYXBzZWRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjp1cGRhdGVGcmFtZVNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmVtaXRGcmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Q2FwdHVyZXI6OnNldExvZ2dlcik6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Q2FwdHVyZXI6OmxvZ0NoYW5u
ZWwgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2Fw
dHVyZVNvdXJjZU1hYy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuaC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlck1h
Yy5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZU1lZGlh
U291cmNlQ2VudGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tEaXNwbGF5Q2FwdHVyZXI6
OmdlbmVyYXRlRnJhbWUpOgorCiAyMDIxLTA4LTEwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CiAKICAgICAgICAgRG9jdW1lbnQuYmFzZVVSSSBpcyBpbmFjY3VyYXRlIGZvciBpZnJh
bWUgc3JjZG9jIGRvY3VtZW50cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0Nv
Y29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggY2E2MTE3MGMz
NGRmMzljMDFiMTViMTAxMjRlZGVjNDk2Nzk1MjhiMC4uMmFmZDRjMjMyMDE4NTFjY2JjZjBmNzMz
NDQxNjlmY2NjYjhlMDhiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC01MjUsMTEgKzUy
NSwxNCBAQCBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDUHJvdmlkZXJD
b2NvYS5jcHAKIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
Lm1tIEBuby11bmlmeQogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291
cmNlLm1tIEBuby11bmlmeQogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Jhc2VBdWRpb1NoYXJl
ZFVuaXQuY3BwCitwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ0dEaXNwbGF5U3RyZWFtQ2FwdHVy
ZVNvdXJjZS5jcHAKK3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9DR0Rpc3BsYXlTdHJlYW1TY3Jl
ZW5DYXB0dXJlU291cmNlLm1tCitwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ0dXaW5kb3dDYXB0
dXJlU291cmNlLm1tCiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZURl
dmljZS5jcHAKIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlRGV2aWNl
TWFuYWdlci5jcHAKIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Db3JlQXVkaW9DYXB0dXJlU291
cmNlLmNwcAogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlTWFuYWdlckNv
Y29hLmNwcAotcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlQ29j
b2EuY3BwCitwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMu
Y3BwCiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTWVkaWFTdHJlYW1UcmFja0F1ZGlvU291cmNl
UHJvdmlkZXJDb2NvYS5jcHAKIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrQXVkaW9TaGFy
ZWRVbml0Lm1tCiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3Vy
Y2VNYWMubW0KQEAgLTU0MCw5ICs1NDMsNyBAQCBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVh
bHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5tbQogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1Jl
YWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUNvY29hLmNwcAogcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUNvY29hLmNwcAogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL1JlYWx0aW1lVmlkZW9VdGlsaXRpZXMubW0KLXBsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9TY3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWMubW0KIHBsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9XZWJBdWRpb1NvdXJjZVByb3ZpZGVyQ29jb2EubW0KLXBsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9XaW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWMubW0KIHBsYXRmb3JtL21vY2svTWVkaWFQbGF5YmFj
a1RhcmdldE1vY2suY3BwCiBwbGF0Zm9ybS9tb2NrL01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJN
b2NrLmNwcAogcGxhdGZvcm0vbW9jay9Nb2NrQXVkaW9EZXN0aW5hdGlvbkNvY29hLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDM2NDE3MTE0ZjAzYWUwMTM5MmI4OWQ3M2FjY2FlZGM3Njg0YjBjN2EuLmM2Y2ZhOTY0YjQ3OWJk
MWQ4NmU0NDhkMWU5MGE4ZTBiMGU0MTMzNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU3NzgsNiArNTc3OCw4IEBACiAJCTA3
MEU4MUQwMUJGMjc2NTYwMDFGREE0OCAvKiBWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvVHJhY2tQcml2YXRlTWVkaWFT
dHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcwRjU0OTcxN0YxMkY2QjAw
MTY5RTA0IC8qIE1lZGlhU3RyZWFtQ29uc3RyYWludHNWYWxpZGF0aW9uQ2xpZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhU3RyZWFtQ29uc3RyYWludHNWYWxpZGF0
aW9uQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MTE1ODhGMTdERjYz
MzcwMEVERkUyQiAvKiBNZWRpYVN0cmVhbVByaXZhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFTdHJlYW1Qcml2YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMDcxNzc2NUUyNkMzMDNCNzAwQTYzMjk5IC8qIENHRGlzcGxheVN0cmVh
bVNjcmVlbkNhcHR1cmVTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0dEaXNwbGF5U3RyZWFtU2Ny
ZWVuQ2FwdHVyZVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzE3NzY1
RjI2QzMwM0I3MDBBNjMyOTkgLyogQ0dEaXNwbGF5U3RyZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZS5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENHRGlzcGxheVN0cmVhbVNjcmVlbkNhcHR1cmVTb3Vy
Y2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MUE5RUMwMTY4RkI1NkMwMDI2
MjlGOSAvKiBUZXh0VHJhY2tDdWVHZW5lcmljLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFRleHRUcmFja0N1ZUdlbmVyaWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwNzFBOUVDMTE2OEZCNTZDMDAyNjI5RjkgLyogVGV4dFRyYWNrQ3VlR2VuZXJp
Yy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0VHJhY2tDdWVHZW5lcmlj
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MUU0OTZEMUFENUFBMEQwMDhBNTBC
NCAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0Q29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBNZWRpYVBsYXliYWNrVGFyZ2V0Q29jb2EubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC01OTY4LDEwICs1OTcwLDEwIEBACiAJCTA3OUY1RTRCMEYzQkVC
RUEwMDVFMDc4MiAvKiBNZWRpYVBsYXllclByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWVkaWFQbGF5ZXJQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA3QTZEMUU5MTQ5MTEzNzcwMDA1MUQwQyAvKiBNZWRpYUZyYWdtZW50VVJJUGFyc2Vy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhRnJhZ21lbnRV
UklQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwN0E2RDFFQTE0OTEx
Mzc3MDAwNTFEMEMgLyogTWVkaWFGcmFnbWVudFVSSVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNZWRpYUZyYWdtZW50VVJJUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTA3QTZEODQ3MUZFQjcwMEIwMDY0NDFERSAvKiBEaXNwbGF5Q2FwdHVy
ZVNvdXJjZUNvY29hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERp
c3BsYXlDYXB0dXJlU291cmNlQ29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwN0E2RDg0NzFGRUI3MDBCMDA2NDQxREUgLyogRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlzcGxheUNhcHR1cmVTb3Vy
Y2VNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwN0E2RDg0ODFGRUI3MDBC
MDA2NDQxREUgLyogRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwN0E2RDg0OTFGRUI3MDBDMDA2NDQxREUgLyog
RGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMDdBNkQ4NEExRkVCNzAwRDAwNjQ0MURFIC8qIERpc3BsYXlDYXB0dXJlU291cmNl
Q29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUNhcHR1cmVT
b3VyY2VDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwN0E2RDg0QTFGRUI3
MDBEMDA2NDQxREUgLyogRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMDdBQTZCNjkxNjZEMDE5NTAwRDQ1NjcxIC8qIEluYmFuZFRleHRU
cmFja1ByaXZhdGVBVkZPYmpDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
YmFuZFRleHRUcmFja1ByaXZhdGVBVkZPYmpDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTA3QUE2QjZBMTY2RDAxOTUwMEQ0NTY3MSAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZG
T2JqQy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEluYmFuZFRl
eHRUcmFja1ByaXZhdGVBVkZPYmpDLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
N0FCOTk2NTE4REEzQzAxMDAxODc3MUUgLyogUlRDQ29uZmlndXJhdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSVENDb25maWd1cmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC03ODUyLDEwICs3ODU0LDEwIEBACiAJCTQxNkVEQkZGMjYwMEU3ODcw
MDA5MjY3NSAvKiBSVENEYXRhQ2hhbm5lbElkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUlRDRGF0YUNoYW5uZWxJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQxNkVEQzAxMjYwMEU3QjAwMDA5MjY3NSAvKiBSVENEYXRhQ2hhbm5l
bFJlbW90ZUhhbmRsZXJDb25uZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJUQ0RhdGFDaGFubmVsUmVtb3RlSGFuZGxlckNvbm5lY3Rpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDE2RURDMDMyNjAwRTgwRjAwMDkyNjc1IC8qIFJUQ0RhdGFDaGFu
bmVsUmVtb3RlU291cmNlQ29ubmVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSVENEYXRhQ2hhbm5lbFJlbW90ZVNvdXJjZUNvbm5lY3Rpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNDE2RjgwNzkyNDUwOUYzMjAwQjY4RjAyIC8qIFdpbmRvd0Rpc3Bs
YXlDYXB0dXJlck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXaW5kb3dE
aXNwbGF5Q2FwdHVyZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDE2Rjgw
N0EyNDUwOUYzMjAwQjY4RjAyIC8qIFNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNjcmVlbkRpc3BsYXlDYXB0dXJlck1h
Yy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDE2RjgwN0IyNDUwOUYzMzAwQjY4
RjAyIC8qIFdpbmRvd0Rpc3BsYXlDYXB0dXJlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFdpbmRvd0Rpc3BsYXlDYXB0dXJlck1hYy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDE2RjgwN0MyNDUwOUYzMzAwQjY4RjAyIC8qIFNjcmVlbkRp
c3BsYXlDYXB0dXJlck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3Jl
ZW5EaXNwbGF5Q2FwdHVyZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDE2
RjgwNzkyNDUwOUYzMjAwQjY4RjAyIC8qIENHV2luZG93Q2FwdHVyZVNvdXJjZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDR1dpbmRvd0NhcHR1cmVTb3VyY2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDE2RjgwN0EyNDUwOUYzMjAwQjY4RjAyIC8qIENHRGlz
cGxheVN0cmVhbUNhcHR1cmVTb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQxNkY4MDdCMjQ1MDlGMzMwMEI2OEYwMiAvKiBDR1dpbmRvd0NhcHR1
cmVTb3VyY2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDR1dp
bmRvd0NhcHR1cmVTb3VyY2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxNkY4
MDdDMjQ1MDlGMzMwMEI2OEYwMiAvKiBDR0Rpc3BsYXlTdHJlYW1DYXB0dXJlU291cmNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENHRGlzcGxheVN0cmVhbUNhcHR1cmVTb3Vy
Y2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE2RkQyNUQyNDBFRTFBRTAwNjY2
MUQ4IC8qIE5vd1BsYXlpbmdJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE5vd1BsYXlpbmdJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNzBBMkU5
MUQ4QzBDQzAwMDMxODQ1MiAvKiBKU0RPTVdyYXBwZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNET01XcmFwcGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDE3MjUzQTgxMzU0QkJCQzAwMzYwRjJBIC8qIE1lZGlhQ29udHJvbFRleHRUcmFj
a0NvbnRhaW5lckVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xNzM3NCw2ICsxNzM3NiwxMiBAQAogCQkJCTA3MDM2M0RGMTgx
QTFDREMwMEMwNzRBNSAvKiBBVlZpZGVvQ2FwdHVyZVNvdXJjZS5tbSAqLywKIAkJCQk0MTc3RjUx
QzIzODI1NDQwMDBDMDQ0ODYgLyogQmFzZUF1ZGlvU2hhcmVkVW5pdC5jcHAgKi8sCiAJCQkJNDE3
N0Y1MUUyMzgyNTQ1RTAwQzA0NDg2IC8qIEJhc2VBdWRpb1NoYXJlZFVuaXQuaCAqLywKKwkJCQk0
MTZGODA3QTI0NTA5RjMyMDBCNjhGMDIgLyogQ0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZS5j
cHAgKi8sCisJCQkJNDE2RjgwN0MyNDUwOUYzMzAwQjY4RjAyIC8qIENHRGlzcGxheVN0cmVhbUNh
cHR1cmVTb3VyY2UuaCAqLywKKwkJCQkwNzE3NzY1RTI2QzMwM0I3MDBBNjMyOTkgLyogQ0dEaXNw
bGF5U3RyZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZS5oICovLAorCQkJCTA3MTc3NjVGMjZDMzAzQjcw
MEE2MzI5OSAvKiBDR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNlLm1tICovLAorCQkJ
CTQxNkY4MDc5MjQ1MDlGMzIwMEI2OEYwMiAvKiBDR1dpbmRvd0NhcHR1cmVTb3VyY2UuaCAqLywK
KwkJCQk0MTZGODA3QjI0NTA5RjMzMDBCNjhGMDIgLyogQ0dXaW5kb3dDYXB0dXJlU291cmNlLm1t
ICovLAogCQkJCTNGODAyMDMxMUU5RTM4MUQwMERFQzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJlRGV2
aWNlLmNwcCAqLywKIAkJCQkzRjgwMjAzMjFFOUUzODFEMDBERUM2MUQgLyogQ29yZUF1ZGlvQ2Fw
dHVyZURldmljZS5oICovLAogCQkJCTNGODAyMDMzMUU5RTM4MUQwMERFQzYxRCAvKiBDb3JlQXVk
aW9DYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAgKi8sCkBAIC0xNzM4Miw4ICsxNzM5MCw4IEBACiAJ
CQkJM0YzQkI1ODMxRTcwOUVFNDAwQzcwMUYyIC8qIENvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaCAq
LywKIAkJCQkwN0E2RDg0ODFGRUI3MDBCMDA2NDQxREUgLyogRGlzcGxheUNhcHR1cmVNYW5hZ2Vy
Q29jb2EuY3BwICovLAogCQkJCTA3QTZEODQ5MUZFQjcwMEMwMDY0NDFERSAvKiBEaXNwbGF5Q2Fw
dHVyZU1hbmFnZXJDb2NvYS5oICovLAotCQkJCTA3QTZEODQ3MUZFQjcwMEIwMDY0NDFERSAvKiBE
aXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmNwcCAqLywKLQkJCQkwN0E2RDg0QTFGRUI3MDBEMDA2
NDQxREUgLyogRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5oICovLAorCQkJCTA3QTZEODQ3MUZF
QjcwMEIwMDY0NDFERSAvKiBEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5jcHAgKi8sCisJCQkJMDdB
NkQ4NEExRkVCNzAwRDAwNjQ0MURFIC8qIERpc3BsYXlDYXB0dXJlU291cmNlTWFjLmggKi8sCiAJ
CQkJNDE3NEU5MjAyNTM1RENERDAwRkU0MjAyIC8qIE1lZGlhU3RyZWFtVHJhY2tBdWRpb1NvdXJj
ZVByb3ZpZGVyQ29jb2EuY3BwICovLAogCQkJCTQxNzRFOTFFMjUzNURDRDYwMEZFNDIwMiAvKiBN
ZWRpYVN0cmVhbVRyYWNrQXVkaW9Tb3VyY2VQcm92aWRlckNvY29hLmggKi8sCiAJCQkJMDc0NEVD
RUIxRTBDNEFFNTAwMEQwOTQ0IC8qIE1vY2tBdWRpb1NoYXJlZFVuaXQuaCAqLywKQEAgLTE3NDAz
LDEyICsxNzQxMSw4IEBACiAJCQkJNDE5MjQyNDcyMTI3QjdDQzAwNjM0RkNGIC8qIFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZUNvY29hLm1tICovLAogCQkJCTQxRDE5MzhGMjE1MkM1NjEwMDZG
MTRDQSAvKiBSZWFsdGltZVZpZGVvVXRpbGl0aWVzLmggKi8sCiAJCQkJNDE1ODY0OUYyM0JGN0I5
MzAwQTBBNjFFIC8qIFJlYWx0aW1lVmlkZW9VdGlsaXRpZXMubW0gKi8sCi0JCQkJNDE2RjgwN0My
NDUwOUYzMzAwQjY4RjAyIC8qIFNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYy5oICovLAotCQkJCTQx
NkY4MDdBMjQ1MDlGMzIwMEI2OEYwMiAvKiBTY3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWMubW0gKi8s
CiAJCQkJMDdENjM3M0UxQkIwQjExMzAwMjU2Q0U5IC8qIFdlYkF1ZGlvU291cmNlUHJvdmlkZXJD
b2NvYS5oICovLAogCQkJCTA3RDYzNzNGMUJCMEIxMTMwMDI1NkNFOSAvKiBXZWJBdWRpb1NvdXJj
ZVByb3ZpZGVyQ29jb2EubW0gKi8sCi0JCQkJNDE2RjgwNzkyNDUwOUYzMjAwQjY4RjAyIC8qIFdp
bmRvd0Rpc3BsYXlDYXB0dXJlck1hYy5oICovLAotCQkJCTQxNkY4MDdCMjQ1MDlGMzMwMEI2OEYw
MiAvKiBXaW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWMubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9IG1h
YzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ0dEaXNwbGF5U3Ry
ZWFtQ2FwdHVyZVNvdXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzYzNTQ5ZDViMGI5ZGIwZjdjNWRjZWZi
ZmM4ZDlhMTlkYjJmMzQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9DR0Rpc3BsYXlTdHJlYW1DYXB0dXJlU291cmNlLmNwcApAQCAt
MCwwICsxLDE3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNHRGlzcGxheVN0cmVhbUNh
cHR1cmVTb3VyY2UuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFBMQVRGT1JNKE1B
QykKKworI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbXBvcnQgIkltYWdlQnVmZmVy
LmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNZWRpYUNvbnN0cmFpbnRzLmgiCisj
aW1wb3J0ICJNZWRpYVNhbXBsZUFWRk9iakMuaCIKKyNpbXBvcnQgIk5vdEltcGxlbWVudGVkLmgi
CisjaW1wb3J0ICJQbGF0Zm9ybUxheWVyLmgiCisjaW1wb3J0ICJQbGF0Zm9ybVNjcmVlbi5oIgor
I2ltcG9ydCAiUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzLmgiCisjaW1wb3J0ICJSZWFsdGlt
ZVZpZGVvVXRpbGl0aWVzLmgiCisKKyNpbXBvcnQgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworQ0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZTo6fkNHRGlz
cGxheVN0cmVhbUNhcHR1cmVTb3VyY2UoKQoreworICAgIG1fY3VycmVudEZyYW1lID0gbnVsbHB0
cjsKK30KKworYm9vbCBDR0Rpc3BsYXlTdHJlYW1DYXB0dXJlU291cmNlOjpzdGFydChmbG9hdCBm
cmFtZVJhdGUpCit7CisgICAgQUxXQVlTX0xPR19JRihsb2dnZXJQdHIoKSwgTE9HSURFTlRJRklF
Uik7CisKKyAgICBpZiAobV9pc1J1bm5pbmcpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
cmV0dXJuIHN0YXJ0RGlzcGxheVN0cmVhbShmcmFtZVJhdGUpOworfQorCit2b2lkIENHRGlzcGxh
eVN0cmVhbUNhcHR1cmVTb3VyY2U6OnN0b3AoKQoreworICAgIEFMV0FZU19MT0dfSUYobG9nZ2Vy
UHRyKCksIExPR0lERU5USUZJRVIpOworCisgICAgaWYgKCFtX2lzUnVubmluZykKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKG1fZGlzcGxheVN0cmVhbSkKKyAgICAgICAgQ0dEaXNwbGF5U3Ry
ZWFtU3RvcChtX2Rpc3BsYXlTdHJlYW0uZ2V0KCkpOworCisgICAgbV9pc1J1bm5pbmcgPSBmYWxz
ZTsKK30KKworRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OkRpc3BsYXlGcmFtZVR5cGUgQ0dEaXNw
bGF5U3RyZWFtQ2FwdHVyZVNvdXJjZTo6Z2VuZXJhdGVGcmFtZSgpCit7CisgICAgcmV0dXJuIERp
c3BsYXlDYXB0dXJlU291cmNlTWFjOjpEaXNwbGF5RnJhbWVUeXBlIHsgUmV0YWluUHRyPElPU3Vy
ZmFjZVJlZj4geyBtX2N1cnJlbnRGcmFtZS5pb1N1cmZhY2UoKSB9IH07Cit9CisKK2Jvb2wgQ0dE
aXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZTo6c3RhcnREaXNwbGF5U3RyZWFtKGZsb2F0IGZyYW1l
UmF0ZSkKK3sKKyAgICBpZiAoIWNoZWNrRGlzcGxheVN0cmVhbSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoIW1fY2FwdHVyZVF1ZXVlKQorICAgICAgICBtX2NhcHR1cmVRdWV1
ZSA9IGFkb3B0T1NPYmplY3QoZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJDR0Rpc3BsYXlTdHJlYW1D
YXB0dXJlU291cmNlIENhcHR1cmUgUXVldWUiLCBESVNQQVRDSF9RVUVVRV9TRVJJQUwpKTsKKwor
ICAgIGlmICghbV9kaXNwbGF5U3RyZWFtKSB7CisgICAgICAgIG1fZGlzcGxheVN0cmVhbSA9IGNy
ZWF0ZURpc3BsYXlTdHJlYW0oZnJhbWVSYXRlLCBmcmFtZUF2YWlsYWJsZUhhbmRsZXIoKSwgbV9j
YXB0dXJlUXVldWUuZ2V0KCkpOworICAgICAgICBpZiAoIW1fZGlzcGxheVN0cmVhbSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoIW1fb2JzZXJ2aW5nRGlzcGxheUNo
YW5nZXMpIHsKKyAgICAgICAgICAgIENHRGlzcGxheVJlZ2lzdGVyUmVjb25maWd1cmF0aW9uQ2Fs
bGJhY2soZGlzcGxheVJlY29uZmlndXJhdGlvbkNhbGxCYWNrLCB0aGlzKTsKKyAgICAgICAgICAg
IG1fb2JzZXJ2aW5nRGlzcGxheUNoYW5nZXMgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisg
ICAgYXV0byBlcnIgPSBDR0Rpc3BsYXlTdHJlYW1TdGFydChtX2Rpc3BsYXlTdHJlYW0uZ2V0KCkp
OworICAgIGlmIChlcnIpIHsKKyAgICAgICAgRVJST1JfTE9HX0lGKGxvZ2dlclB0cigpLCBMT0dJ
REVOVElGSUVSLCAiQ0dEaXNwbGF5U3RyZWFtU3RhcnQgZmFpbGVkIHdpdGggZXJyb3IgIiwgc3Rh
dGljX2Nhc3Q8aW50PihlcnIpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IG1faXNSdW5uaW5nID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDR0Rpc3Bs
YXlTdHJlYW1DYXB0dXJlU291cmNlOjpjb21taXRDb25maWd1cmF0aW9uKGZsb2F0IGZyYW1lUmF0
ZSkKK3sKKyAgICBpZiAobV9pc1J1bm5pbmcgJiYgIW1fZGlzcGxheVN0cmVhbSkKKyAgICAgICAg
c3RhcnREaXNwbGF5U3RyZWFtKGZyYW1lUmF0ZSk7Cit9CisKK3ZvaWQgQ0dEaXNwbGF5U3RyZWFt
Q2FwdHVyZVNvdXJjZTo6ZGlzcGxheVdhc1JlY29uZmlndXJlZChDR0RpcmVjdERpc3BsYXlJRCwg
Q0dEaXNwbGF5Q2hhbmdlU3VtbWFyeUZsYWdzKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQh
Cit9CisKK3ZvaWQgQ0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZTo6ZGlzcGxheVJlY29uZmln
dXJhdGlvbkNhbGxCYWNrKENHRGlyZWN0RGlzcGxheUlEIGRpc3BsYXksIENHRGlzcGxheUNoYW5n
ZVN1bW1hcnlGbGFncyBmbGFncywgdm9pZCAqdXNlckluZm8pCit7CisgICAgaWYgKHVzZXJJbmZv
KQorICAgICAgICByZWludGVycHJldF9jYXN0PENHRGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2Ug
Kj4odXNlckluZm8pLT5kaXNwbGF5V2FzUmVjb25maWd1cmVkKGRpc3BsYXksIGZsYWdzKTsKK30K
Kwordm9pZCBDR0Rpc3BsYXlTdHJlYW1DYXB0dXJlU291cmNlOjpuZXdGcmFtZShDR0Rpc3BsYXlT
dHJlYW1GcmFtZVN0YXR1cyBzdGF0dXMsIERpc3BsYXlTdXJmYWNlJiYgbmV3RnJhbWUpCit7Cisg
ICAgc3dpdGNoIChzdGF0dXMpIHsKKyAgICBjYXNlIGtDR0Rpc3BsYXlTdHJlYW1GcmFtZVN0YXR1
c0ZyYW1lQ29tcGxldGU6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrQ0dEaXNwbGF5U3Ry
ZWFtRnJhbWVTdGF0dXNGcmFtZUlkbGU6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrQ0dE
aXNwbGF5U3RyZWFtRnJhbWVTdGF0dXNGcmFtZUJsYW5rOgorICAgICAgICBSRUxFQVNFX0xPRyhX
ZWJSVEMsICJDR0Rpc3BsYXlTdHJlYW1DYXB0dXJlU291cmNlOjpmcmFtZUF2YWlsYWJsZToga0NH
RGlzcGxheVN0cmVhbUZyYW1lU3RhdHVzRnJhbWVCbGFuayIpOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2Uga0NHRGlzcGxheVN0cmVhbUZyYW1lU3RhdHVzU3RvcHBlZDoKKyAgICAgICAgUkVM
RUFTRV9MT0coV2ViUlRDLCAiQ0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZTo6ZnJhbWVBdmFp
bGFibGU6IGtDR0Rpc3BsYXlTdHJlYW1GcmFtZVN0YXR1c1N0b3BwZWQiKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgbV9jdXJyZW50RnJhbWUgPSBXVEZNb3ZlKG5ld0ZyYW1lKTsKK30K
KworQ0dEaXNwbGF5U3RyZWFtRnJhbWVBdmFpbGFibGVIYW5kbGVyIENHRGlzcGxheVN0cmVhbUNh
cHR1cmVTb3VyY2U6OmZyYW1lQXZhaWxhYmxlSGFuZGxlcigpCit7CisgICAgaWYgKG1fZnJhbWVB
dmFpbGFibGVIYW5kbGVyKQorICAgICAgICByZXR1cm4gbV9mcmFtZUF2YWlsYWJsZUhhbmRsZXIu
Z2V0KCk7CisKKyAgICBhdXRvIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpOworICAgIG1f
ZnJhbWVBdmFpbGFibGVIYW5kbGVyID0gXihDR0Rpc3BsYXlTdHJlYW1GcmFtZVN0YXR1cyBzdGF0
dXMsIHVpbnQ2NF90IGRpc3BsYXlUaW1lLCBJT1N1cmZhY2VSZWYgZnJhbWVTdXJmYWNlLCBDR0Rp
c3BsYXlTdHJlYW1VcGRhdGVSZWYgdXBkYXRlUmVmKQorICAgIHsKKyAgICAgICAgaWYgKCFmcmFt
ZVN1cmZhY2UgfHwgIWRpc3BsYXlUaW1lKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IHNpemVfdCBjb3VudDsKKyAgICAgICAgYXV0byogcmVjdHMgPSBDR0Rpc3BsYXlTdHJlYW1VcGRh
dGVHZXRSZWN0cyh1cGRhdGVSZWYsIGtDR0Rpc3BsYXlTdHJlYW1VcGRhdGVEaXJ0eVJlY3RzLCAm
Y291bnQpOworICAgICAgICBpZiAoIXJlY3RzIHx8ICFjb3VudCkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3dlYWtUaGlzLCBzdGF0dXMs
IGZyYW1lID0gRGlzcGxheVN1cmZhY2UgeyBmcmFtZVN1cmZhY2UgfV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgd2Vha1RoaXMtPm5ld0ZyYW1lKHN0YXR1cywgV1RGTW92ZShmcmFtZSkpOworICAgICAg
ICB9KTsKKyAgICB9OworCisgICAgcmV0dXJuIG1fZnJhbWVBdmFpbGFibGVIYW5kbGVyLmdldCgp
OworCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJ
QV9TVFJFQU0pICYmIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9DR0Rpc3BsYXlTdHJlYW1DYXB0dXJlU291cmNlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ0dEaXNwbGF5U3RyZWFtQ2Fw
dHVyZVNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFjMjBkZmMwMGFjZTRkZDkyMWMwNGJiZDA3YmM4OWRk
OTM3YTM5MjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvQ0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZS5oCkBAIC0wLDAgKzEsMTE0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFBMQVRGT1JNKE1BQykK
KworI2luY2x1ZGUgIkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgiCisjaW5jbHVkZSAiSU9TdXJm
YWNlLmgiCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHRGlzcGxheUNvbmZpZ3VyYXRpb24uaD4K
KyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dEaXNwbGF5U3RyZWFtLmg+CisjaW5jbHVkZSA8d3Rm
L0Jsb2NrUHRyLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvT1NPYmpl
Y3RQdHIuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX19DVkJ1ZmZlciAqQ1ZQaXhlbEJ1ZmZlclJlZjsK
K3R5cGVkZWYgc3RydWN0IG9wYXF1ZUNNU2FtcGxlQnVmZmVyICpDTVNhbXBsZUJ1ZmZlclJlZjsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDR0Rpc3BsYXlTdHJlYW1DYXB0dXJlU291
cmNlIDogcHVibGljIERpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpDYXB0dXJlciwgcHVibGljIENh
bk1ha2VXZWFrUHRyPENHRGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2U+IHsKK3B1YmxpYzoKKyAg
ICBleHBsaWNpdCBDR0Rpc3BsYXlTdHJlYW1DYXB0dXJlU291cmNlKCkgPSBkZWZhdWx0OworICAg
IH5DR0Rpc3BsYXlTdHJlYW1DYXB0dXJlU291cmNlKCk7CisKK3Byb3RlY3RlZDoKKyAgICB1c2lu
ZyBGcmFtZUF2YWlsYWJsZUNhbGxiYWNrID0gdm9pZCAoXikoQ0dEaXNwbGF5U3RyZWFtRnJhbWVT
dGF0dXMsIHVpbnQ2NF90LCBJT1N1cmZhY2VSZWYsIENHRGlzcGxheVN0cmVhbVVwZGF0ZVJlZik7
CisgICAgdmlydHVhbCBSZXRhaW5QdHI8Q0dEaXNwbGF5U3RyZWFtUmVmPiBjcmVhdGVEaXNwbGF5
U3RyZWFtKGZsb2F0LCBGcmFtZUF2YWlsYWJsZUNhbGxiYWNrLCBkaXNwYXRjaF9xdWV1ZV90KSA9
IDA7CisgICAgdmlydHVhbCBib29sIGNoZWNrRGlzcGxheVN0cmVhbSgpIHsgcmV0dXJuIHRydWU7
IH0KKworICAgIENHRGlzcGxheVN0cmVhbVJlZiBkaXNwbGF5U3RyZWFtKCkgY29uc3QgeyByZXR1
cm4gbV9kaXNwbGF5U3RyZWFtLmdldCgpOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlRGlzcGxheVN0
cmVhbSgpIHsgbV9kaXNwbGF5U3RyZWFtID0gbnVsbHB0cjsgfQorCitwcml2YXRlOgorICAgIHN0
YXRpYyB2b2lkIGRpc3BsYXlSZWNvbmZpZ3VyYXRpb25DYWxsQmFjayhDR0RpcmVjdERpc3BsYXlJ
RCwgQ0dEaXNwbGF5Q2hhbmdlU3VtbWFyeUZsYWdzLCB2b2lkKik7CisKKyAgICAvLyBEaXNwbGF5
Q2FwdHVyZVNvdXJjZU1hYzo6Q2FwdHVyZXIKKyAgICBib29sIHN0YXJ0KGZsb2F0IGZyYW1lUmF0
ZSkgZmluYWw7CisgICAgdm9pZCBzdG9wKCkgZmluYWw7CisgICAgRGlzcGxheUNhcHR1cmVTb3Vy
Y2VNYWM6OkRpc3BsYXlGcmFtZVR5cGUgZ2VuZXJhdGVGcmFtZSgpIGZpbmFsOworICAgIHZvaWQg
Y29tbWl0Q29uZmlndXJhdGlvbihmbG9hdCBmcmFtZVJhdGUpIGZpbmFsOworCisgICAgdm9pZCBk
aXNwbGF5V2FzUmVjb25maWd1cmVkKENHRGlyZWN0RGlzcGxheUlELCBDR0Rpc3BsYXlDaGFuZ2VT
dW1tYXJ5RmxhZ3MpOworICAgIGJvb2wgc3RhcnREaXNwbGF5U3RyZWFtKGZsb2F0IGZyYW1lUmF0
ZSk7CisgICAgRnJhbWVBdmFpbGFibGVDYWxsYmFjayBmcmFtZUF2YWlsYWJsZUhhbmRsZXIoKTsK
KworICAgIGNsYXNzIERpc3BsYXlTdXJmYWNlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIERpc3Bs
YXlTdXJmYWNlKCkgPSBkZWZhdWx0OworICAgICAgICBleHBsaWNpdCBEaXNwbGF5U3VyZmFjZShJ
T1N1cmZhY2VSZWYgc3VyZmFjZSkKKyAgICAgICAgICAgIDogbV9zdXJmYWNlKHN1cmZhY2UpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3N1cmZhY2UpCisgICAgICAgICAgICAgICAgSU9T
dXJmYWNlSW5jcmVtZW50VXNlQ291bnQobV9zdXJmYWNlLmdldCgpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIH5EaXNwbGF5U3VyZmFjZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3N1
cmZhY2UpCisgICAgICAgICAgICAgICAgSU9TdXJmYWNlRGVjcmVtZW50VXNlQ291bnQobV9zdXJm
YWNlLmdldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIERpc3BsYXlTdXJmYWNlJiBvcGVyYXRv
cj0oSU9TdXJmYWNlUmVmIHN1cmZhY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3N1
cmZhY2UpCisgICAgICAgICAgICAgICAgSU9TdXJmYWNlRGVjcmVtZW50VXNlQ291bnQobV9zdXJm
YWNlLmdldCgpKTsKKyAgICAgICAgICAgIGlmIChzdXJmYWNlKQorICAgICAgICAgICAgICAgIElP
U3VyZmFjZUluY3JlbWVudFVzZUNvdW50KHN1cmZhY2UpOworICAgICAgICAgICAgbV9zdXJmYWNl
ID0gc3VyZmFjZTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAg
ICAgIElPU3VyZmFjZVJlZiBpb1N1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2UuZ2V0
KCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFJldGFpblB0cjxJT1N1cmZhY2VSZWY+IG1f
c3VyZmFjZTsKKyAgICB9OworCisgICAgdm9pZCBuZXdGcmFtZShDR0Rpc3BsYXlTdHJlYW1GcmFt
ZVN0YXR1cywgRGlzcGxheVN1cmZhY2UmJik7CisKKyAgICBEaXNwbGF5U3VyZmFjZSBtX2N1cnJl
bnRGcmFtZTsKKyAgICBSZXRhaW5QdHI8Q0dEaXNwbGF5U3RyZWFtUmVmPiBtX2Rpc3BsYXlTdHJl
YW07CisgICAgT1NPYmplY3RQdHI8ZGlzcGF0Y2hfcXVldWVfdD4gbV9jYXB0dXJlUXVldWU7Cisg
ICAgQmxvY2tQdHI8dm9pZChDR0Rpc3BsYXlTdHJlYW1GcmFtZVN0YXR1cywgdWludDY0X3QsIElP
U3VyZmFjZVJlZiwgQ0dEaXNwbGF5U3RyZWFtVXBkYXRlUmVmKT4gbV9mcmFtZUF2YWlsYWJsZUhh
bmRsZXI7CisKKyAgICBib29sIG1faXNSdW5uaW5nIHsgZmFsc2UgfTsKKyAgICBib29sIG1fb2Jz
ZXJ2aW5nRGlzcGxheUNoYW5nZXMgeyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgUExBVEZPUk0oTUFDKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NHRGlz
cGxheVN0cmVhbVNjcmVlbkNhcHR1cmVTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9DR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNjkyZmY1YTQ3YTExNmFmZDI3NzQwODViNGFlYTMwNzZkYzhjMjlmMAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9DR0Rp
c3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNlLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgUExBVEZPUk0oTUFDKQorCisjaW5jbHVk
ZSAiQ0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZS5oIgorI2luY2x1ZGUgIklPU3VyZmFjZS5o
IgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0Rpc3BsYXlDb25maWd1cmF0aW9uLmg+CisjaW5j
bHVkZSA8Q29yZUdyYXBoaWNzL0NHRGlzcGxheVN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9Mb2Nr
Lmg+CisjaW5jbHVkZSA8d3RmL09TT2JqZWN0UHRyLmg+CisKK3R5cGVkZWYgc3RydWN0IF9fQ1ZC
dWZmZXIgKkNWUGl4ZWxCdWZmZXJSZWY7Cit0eXBlZGVmIHN0cnVjdCBvcGFxdWVDTVNhbXBsZUJ1
ZmZlciAqQ01TYW1wbGVCdWZmZXJSZWY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Q0dEaXNwbGF5U3RyZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZSBmaW5hbCA6IHB1YmxpYyBDR0Rpc3Bs
YXlTdHJlYW1DYXB0dXJlU291cmNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgRXhwZWN0ZWQ8VW5p
cXVlUmVmPERpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpDYXB0dXJlcj4sIFN0cmluZz4gY3JlYXRl
KGNvbnN0IFN0cmluZyYpOworCisgICAgZXhwbGljaXQgQ0dEaXNwbGF5U3RyZWFtU2NyZWVuQ2Fw
dHVyZVNvdXJjZSh1aW50MzJfdCk7CisgICAgfkNHRGlzcGxheVN0cmVhbVNjcmVlbkNhcHR1cmVT
b3VyY2UoKSA9IGRlZmF1bHQ7CisKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxDYXB0dXJlRGV2
aWNlPiBzY3JlZW5DYXB0dXJlRGV2aWNlV2l0aFBlcnNpc3RlbnRJRChjb25zdCBTdHJpbmcmKTsK
KyAgICBzdGF0aWMgdm9pZCBzY3JlZW5DYXB0dXJlRGV2aWNlcyhWZWN0b3I8Q2FwdHVyZURldmlj
ZT4mKTsKKworcHJpdmF0ZToKKworICAgIC8vIERpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpDYXB0
dXJlcgorICAgIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGUgZGV2aWNlVHlwZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OlNjcmVlbjsgfQorICAgIFJl
YWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RGlzcGxheVN1cmZhY2VUeXBlIHN1cmZhY2VUeXBl
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpEaXNw
bGF5U3VyZmFjZVR5cGU6Ok1vbml0b3I7IH0KKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAg
ICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiQ0dEaXNw
bGF5U3RyZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZSI7IH0KKyNlbmRpZgorCisgICAgLy8gQ0dEaXNw
bGF5U3RyZWFtQ2FwdHVyZVNvdXJjZQorICAgIFJldGFpblB0cjxDR0Rpc3BsYXlTdHJlYW1SZWY+
IGNyZWF0ZURpc3BsYXlTdHJlYW0oZmxvYXQsIEZyYW1lQXZhaWxhYmxlQ2FsbGJhY2ssIGRpc3Bh
dGNoX3F1ZXVlX3QpIGZpbmFsOworICAgIGJvb2wgY2hlY2tEaXNwbGF5U3RyZWFtKCkgZmluYWw7
CisKKyAgICBjbGFzcyBEaXNwbGF5U3VyZmFjZSB7CisgICAgcHVibGljOgorICAgICAgICBEaXNw
bGF5U3VyZmFjZSgpID0gZGVmYXVsdDsKKyAgICAgICAgZXhwbGljaXQgRGlzcGxheVN1cmZhY2Uo
SU9TdXJmYWNlUmVmIHN1cmZhY2UpCisgICAgICAgICAgICA6IG1fc3VyZmFjZShzdXJmYWNlKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9zdXJmYWNlKQorICAgICAgICAgICAgICAgIElP
U3VyZmFjZUluY3JlbWVudFVzZUNvdW50KG1fc3VyZmFjZS5nZXQoKSk7CisgICAgICAgIH0KKwor
ICAgICAgICB+RGlzcGxheVN1cmZhY2UoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9z
dXJmYWNlKQorICAgICAgICAgICAgICAgIElPU3VyZmFjZURlY3JlbWVudFVzZUNvdW50KG1fc3Vy
ZmFjZS5nZXQoKSk7CisgICAgICAgIH0KKworICAgICAgICBEaXNwbGF5U3VyZmFjZSYgb3BlcmF0
b3I9KElPU3VyZmFjZVJlZiBzdXJmYWNlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9z
dXJmYWNlKQorICAgICAgICAgICAgICAgIElPU3VyZmFjZURlY3JlbWVudFVzZUNvdW50KG1fc3Vy
ZmFjZS5nZXQoKSk7CisgICAgICAgICAgICBpZiAoc3VyZmFjZSkKKyAgICAgICAgICAgICAgICBJ
T1N1cmZhY2VJbmNyZW1lbnRVc2VDb3VudChzdXJmYWNlKTsKKyAgICAgICAgICAgIG1fc3VyZmFj
ZSA9IHN1cmZhY2U7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAg
ICAgICBJT1N1cmZhY2VSZWYgaW9TdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlLmdl
dCgpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBSZXRhaW5QdHI8SU9TdXJmYWNlUmVmPiBt
X3N1cmZhY2U7CisgICAgfTsKKworICAgIFJldGFpblB0cjxDR0Rpc3BsYXlTdHJlYW1SZWY+IG1f
ZGlzcGxheVN0cmVhbTsKKworICAgIHVpbnQzMl90IG1fZGlzcGxheUlEIHsgMCB9OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkg
JiYgUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL0NHRGlzcGxheVN0cmVhbVNjcmVlbkNhcHR1cmVTb3VyY2UubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ0dEaXNwbGF5U3RyZWFtU2NyZWVu
Q2FwdHVyZVNvdXJjZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNjkxMjE4NDU0YjM4YzY5OWZmYzRlODU2Y2U2
N2RjNDBmM2U5Yjk5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL0NHRGlzcGxheVN0cmVhbVNjcmVlbkNhcHR1cmVTb3VyY2UubW0KQEAg
LTAsMCArMSwxOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDR0Rpc3BsYXlTdHJlYW1T
Y3JlZW5DYXB0dXJlU291cmNlLmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBQTEFU
Rk9STShNQUMpCisKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW1wb3J0ICJJbWFn
ZUJ1ZmZlci5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTWVkaWFDb25zdHJhaW50
cy5oIgorI2ltcG9ydCAiTWVkaWFTYW1wbGVBVkZPYmpDLmgiCisjaW1wb3J0ICJOb3RJbXBsZW1l
bnRlZC5oIgorI2ltcG9ydCAiUGxhdGZvcm1MYXllci5oIgorI2ltcG9ydCAiUGxhdGZvcm1TY3Jl
ZW4uaCIKKyNpbXBvcnQgIlJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncy5oIgorI2ltcG9ydCAi
UmVhbHRpbWVWaWRlb1V0aWxpdGllcy5oIgorI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhp
Y3NTUEkuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ1RvSW50ZWdlckNvbnZlcnNpb24uaD4K
KworI2ltcG9ydCAiQ29yZVZpZGVvU29mdExpbmsuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGF0aWMgc3RkOjpvcHRpb25hbDxDR0RpcmVjdERpc3BsYXlJRD4gdXBkYXRlRGlzcGxheUlE
KENHRGlyZWN0RGlzcGxheUlEIGRpc3BsYXlJRCkKK3sKKyAgICB1aW50MzJfdCBkaXNwbGF5Q291
bnQgPSAwOworICAgIGF1dG8gZXJyID0gQ0dHZXRBY3RpdmVEaXNwbGF5TGlzdCgwLCBudWxscHRy
LCAmZGlzcGxheUNvdW50KTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKFdl
YlJUQywgIkNHR2V0QWN0aXZlRGlzcGxheUxpc3QoKSByZXR1cm5lZCBlcnJvciAlZCB3aGVuIHRy
eWluZyB0byBnZXQgZGlzcGxheSBjb3VudCIsIHN0YXRpY19jYXN0PGludD4oZXJyKSk7CisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgaWYgKCFkaXNwbGF5Q291bnQp
IHsKKyAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQ0dHZXRBY3RpdmVEaXNwbGF5TGlzdCgp
IHJldHVybmVkIGEgZGlzcGxheSBjb3VudCBvZiAwIik7CisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgfQorCisgICAgVmVjdG9yPENHRGlyZWN0RGlzcGxheUlEPiBhY3RpdmVEaXNw
bGF5cyhkaXNwbGF5Q291bnQpOworICAgIGVyciA9IENHR2V0QWN0aXZlRGlzcGxheUxpc3QoZGlz
cGxheUNvdW50LCBhY3RpdmVEaXNwbGF5cy5kYXRhKCksICZkaXNwbGF5Q291bnQpOworICAgIGlm
IChlcnIpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQ0dHZXRBY3RpdmVEaXNwbGF5
TGlzdCgpIHJldHVybmVkIGVycm9yICVkIHdoZW4gdHJ5aW5nIHRvIGdldCB0aGUgYWN0aXZlIGRp
c3BsYXkgbGlzdCIsIHN0YXRpY19jYXN0PGludD4oZXJyKSk7CisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgfQorCisgICAgYXV0byBkaXNwbGF5TWFzayA9IENHRGlzcGxheUlEVG9P
cGVuR0xEaXNwbGF5TWFzayhkaXNwbGF5SUQpOworICAgIGZvciAoYXV0byBkaXNwbGF5IDogYWN0
aXZlRGlzcGxheXMpIHsKKyAgICAgICAgaWYgKGRpc3BsYXlNYXNrID09IENHRGlzcGxheUlEVG9P
cGVuR0xEaXNwbGF5TWFzayhkaXNwbGF5KSkKKyAgICAgICAgICAgIHJldHVybiBkaXNwbGF5Owor
ICAgIH0KKworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK0V4cGVjdGVkPFVuaXF1ZVJl
ZjxEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Q2FwdHVyZXI+LCBTdHJpbmc+IENHRGlzcGxheVN0
cmVhbVNjcmVlbkNhcHR1cmVTb3VyY2U6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGRldmljZUlEKQor
eworICAgIGF1dG8gZGlzcGxheUlEID0gcGFyc2VJbnRlZ2VyPHVpbnQzMl90PihkZXZpY2VJRCk7
CisgICAgaWYgKCFkaXNwbGF5SUQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiSW52
YWxpZCBkaXNwbGF5IGRldmljZSBJRCJfcyk7CisKKyAgICBhdXRvIGFjdHVhbERpc3BsYXlJRCA9
IHVwZGF0ZURpc3BsYXlJRChkaXNwbGF5SUQudmFsdWUoKSk7CisgICAgaWYgKCFhY3R1YWxEaXNw
bGF5SUQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiSW52YWxpZCBkaXNwbGF5IElE
Il9zKTsKKworICAgIHJldHVybiBVbmlxdWVSZWY8RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OkNh
cHR1cmVyPihtYWtlVW5pcXVlUmVmPENHRGlzcGxheVN0cmVhbVNjcmVlbkNhcHR1cmVTb3VyY2U+
KGFjdHVhbERpc3BsYXlJRC52YWx1ZSgpKSk7Cit9CisKK0NHRGlzcGxheVN0cmVhbVNjcmVlbkNh
cHR1cmVTb3VyY2U6OkNHRGlzcGxheVN0cmVhbVNjcmVlbkNhcHR1cmVTb3VyY2UodWludDMyX3Qg
ZGlzcGxheUlEKQorICAgIDogQ0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZSgpCisgICAgLCBt
X2Rpc3BsYXlJRChkaXNwbGF5SUQpCit7Cit9CisKK2Jvb2wgQ0dEaXNwbGF5U3RyZWFtU2NyZWVu
Q2FwdHVyZVNvdXJjZTo6Y2hlY2tEaXNwbGF5U3RyZWFtKCkKK3sKKyAgICBhdXRvIGFjdHVhbERp
c3BsYXlJRCA9IHVwZGF0ZURpc3BsYXlJRChtX2Rpc3BsYXlJRCk7CisgICAgaWYgKCFhY3R1YWxE
aXNwbGF5SUQpIHsKKyAgICAgICAgRVJST1JfTE9HX0lGKGxvZ2dlclB0cigpLCBMT0dJREVOVElG
SUVSLCAiaW52YWxpZCBkaXNwbGF5IElEOiAiLCBtX2Rpc3BsYXlJRCk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobV9kaXNwbGF5SUQgIT0gYWN0dWFsRGlzcGxheUlE
LnZhbHVlKCkpIHsKKyAgICAgICAgbV9kaXNwbGF5SUQgPSBhY3R1YWxEaXNwbGF5SUQudmFsdWUo
KTsKKyAgICAgICAgaW52YWxpZGF0ZURpc3BsYXlTdHJlYW0oKTsKKyAgICAgICAgQUxXQVlTX0xP
R19JRihsb2dnZXJQdHIoKSwgTE9HSURFTlRJRklFUiwgImRpc3BsYXkgSUQgY2hhbmdlZCB0byAi
LCBzdGF0aWNfY2FzdDxpbnQ+KG1fZGlzcGxheUlEKSk7CisgICAgfQorICAgIAorICAgIHJldHVy
biB0cnVlOworfQorCitSZXRhaW5QdHI8Q0dEaXNwbGF5U3RyZWFtUmVmPiBDR0Rpc3BsYXlTdHJl
YW1TY3JlZW5DYXB0dXJlU291cmNlOjpjcmVhdGVEaXNwbGF5U3RyZWFtKGZsb2F0IGZyYW1lUmF0
ZSwgRnJhbWVBdmFpbGFibGVDYWxsYmFjayBmcmFtZUF2YWlsYWJsZUhhbmRsZXIsIGRpc3BhdGNo
X3F1ZXVlX3QgcXVldWUpCit7CisgICAgc3RhdGljIGNvbnN0IGludCBzY3JlZW5RdWV1ZU1heGlt
dW1MZW5ndGggPSA2OworCisgICAgQVNTRVJUKCFkaXNwbGF5U3RyZWFtKCkpOworICAgIEFTU0VS
VChtX2Rpc3BsYXlJRCA9PSB1cGRhdGVEaXNwbGF5SUQobV9kaXNwbGF5SUQpKTsKKworICAgIEFM
V0FZU19MT0dfSUYobG9nZ2VyUHRyKCksIExPR0lERU5USUZJRVIpOworCisgICAgYXV0byBkaXNw
bGF5TW9kZSA9IGFkb3B0Q0YoQ0dEaXNwbGF5Q29weURpc3BsYXlNb2RlKG1fZGlzcGxheUlEKSk7
CisgICAgYXV0byBzY3JlZW5XaWR0aCA9IENHRGlzcGxheU1vZGVHZXRQaXhlbHNXaWRlKGRpc3Bs
YXlNb2RlLmdldCgpKTsKKyAgICBhdXRvIHNjcmVlbkhlaWdodCA9IENHRGlzcGxheU1vZGVHZXRQ
aXhlbHNIaWdoKGRpc3BsYXlNb2RlLmdldCgpKTsKKyAgICBpZiAoIXNjcmVlbldpZHRoIHx8ICFz
Y3JlZW5IZWlnaHQpIHsKKyAgICAgICAgRVJST1JfTE9HX0lGKGxvZ2dlclB0cigpLCBMT0dJREVO
VElGSUVSLCAidW5hYmxlIHRvIGdldCBzY3JlZW4gd2lkdGgvaGVpZ2h0Iik7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKworICAgIE5TRGljdGlvbmFyeSogc3RyZWFtT3B0aW9ucyA9
IEB7CisgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDR0Rpc3BsYXlTdHJlYW1NaW5pbXVt
RnJhbWVUaW1lIDogQCgxIC8gZnJhbWVSYXRlKSwKKyAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5n
ICopa0NHRGlzcGxheVN0cmVhbVF1ZXVlRGVwdGggOiBAKHNjcmVlblF1ZXVlTWF4aW11bUxlbmd0
aCksCisgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDR0Rpc3BsYXlTdHJlYW1Db2xvclNw
YWNlIDogKF9fYnJpZGdlIGlkKXNSR0JDb2xvclNwYWNlUmVmKCksCisgICAgICAgIChfX2JyaWRn
ZSBOU1N0cmluZyAqKWtDR0Rpc3BsYXlTdHJlYW1TaG93Q3Vyc29yIDogQFlFUywKKyAgICB9Owor
CisgICAgcmV0dXJuIGFkb3B0Q0YoQ0dEaXNwbGF5U3RyZWFtQ3JlYXRlV2l0aERpc3BhdGNoUXVl
dWUobV9kaXNwbGF5SUQsIHNjcmVlbldpZHRoLCBzY3JlZW5IZWlnaHQsIHByZWZlcmVkUGl4ZWxC
dWZmZXJGb3JtYXQoKSwgKF9fYnJpZGdlIENGRGljdGlvbmFyeVJlZilzdHJlYW1PcHRpb25zLCBx
dWV1ZSwgZnJhbWVBdmFpbGFibGVIYW5kbGVyKSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8Q2FwdHVy
ZURldmljZT4gQ0dEaXNwbGF5U3RyZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZTo6c2NyZWVuQ2FwdHVy
ZURldmljZVdpdGhQZXJzaXN0ZW50SUQoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCkKK3sKKyAgICBh
dXRvIGRpc3BsYXlJRCA9IHBhcnNlSW50ZWdlcjx1aW50MzJfdD4oZGV2aWNlSUQpOworICAgIGlm
ICghZGlzcGxheUlEKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIkNHRGlzcGxheVN0
cmVhbVNjcmVlbkNhcHR1cmVTb3VyY2U6OnNjcmVlbkNhcHR1cmVEZXZpY2VXaXRoUGVyc2lzdGVu
dElEOiBkaXNwbGF5IElEIGRvZXMgbm90IGNvbnZlcnQgdG8gMzItYml0IGludGVnZXIiKTsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBhdXRvIGFjdHVhbERpc3Bs
YXlJRCA9IHVwZGF0ZURpc3BsYXlJRChkaXNwbGF5SUQudmFsdWUoKSk7CisgICAgaWYgKCFhY3R1
YWxEaXNwbGF5SUQpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBhdXRvIGRl
dmljZSA9IENhcHR1cmVEZXZpY2UoU3RyaW5nOjpudW1iZXIoYWN0dWFsRGlzcGxheUlELnZhbHVl
KCkpLCBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpTY3JlZW4sICJTY3JlZW5DYXB0dXJlRGV2
aWNlIl9zKTsKKyAgICBkZXZpY2Uuc2V0RW5hYmxlZCh0cnVlKTsKKworICAgIHJldHVybiBkZXZp
Y2U7Cit9CisKK3ZvaWQgQ0dEaXNwbGF5U3RyZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZTo6c2NyZWVu
Q2FwdHVyZURldmljZXMoVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBkaXNwbGF5cykKK3sKKyAgICBh
dXRvIHNjcmVlbklEID0gZGlzcGxheUlEKFtOU1NjcmVlbiBtYWluU2NyZWVuXSk7CisgICAgaWYg
KENHRGlzcGxheUlEVG9PcGVuR0xEaXNwbGF5TWFzayhzY3JlZW5JRCkpIHsKKyAgICAgICAgQ2Fw
dHVyZURldmljZSBkaXNwbGF5RGV2aWNlKFN0cmluZzo6bnVtYmVyKHNjcmVlbklEKSwgQ2FwdHVy
ZURldmljZTo6RGV2aWNlVHlwZTo6U2NyZWVuLCBtYWtlU3RyaW5nKCJTY3JlZW4gMCIpKTsKKyAg
ICAgICAgZGlzcGxheURldmljZS5zZXRFbmFibGVkKHRydWUpOworICAgICAgICBkaXNwbGF5cy5h
cHBlbmQoV1RGTW92ZShkaXNwbGF5RGV2aWNlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICB1aW50MzJfdCBkaXNwbGF5Q291bnQgPSAwOworICAgIGF1dG8gZXJyID0gQ0dHZXRBY3Rp
dmVEaXNwbGF5TGlzdCgwLCBudWxscHRyLCAmZGlzcGxheUNvdW50KTsKKyAgICBpZiAoZXJyKSB7
CisgICAgICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIkNHR2V0QWN0aXZlRGlzcGxheUxpc3QoKSBy
ZXR1cm5lZCBlcnJvciAlZCB3aGVuIHRyeWluZyB0byBnZXQgZGlzcGxheSBjb3VudCIsIChpbnQp
ZXJyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghZGlzcGxheUNvdW50KSB7
CisgICAgICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIkNHR2V0QWN0aXZlRGlzcGxheUxpc3QoKSBy
ZXR1cm5lZCBhIGRpc3BsYXkgY291bnQgb2YgMCIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgVmVjdG9yPENHRGlyZWN0RGlzcGxheUlEPiBhY3RpdmVEaXNwbGF5cyhkaXNwbGF5Q291
bnQpOworICAgIGVyciA9IENHR2V0QWN0aXZlRGlzcGxheUxpc3QoZGlzcGxheUNvdW50LCBhY3Rp
dmVEaXNwbGF5cy5kYXRhKCksICZkaXNwbGF5Q291bnQpOworICAgIGlmIChlcnIpIHsKKyAgICAg
ICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQ0dHZXRBY3RpdmVEaXNwbGF5TGlzdCgpIHJldHVybmVk
IGVycm9yICVkIHdoZW4gdHJ5aW5nIHRvIGdldCB0aGUgYWN0aXZlIGRpc3BsYXkgbGlzdCIsIChp
bnQpZXJyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludCBjb3VudCA9IDA7Cisg
ICAgZm9yIChhdXRvIGRpc3BsYXlJRCA6IGFjdGl2ZURpc3BsYXlzKSB7CisgICAgICAgIENhcHR1
cmVEZXZpY2UgZGlzcGxheURldmljZShTdHJpbmc6Om51bWJlcihkaXNwbGF5SUQpLCBDYXB0dXJl
RGV2aWNlOjpEZXZpY2VUeXBlOjpTY3JlZW4sIG1ha2VTdHJpbmcoIlNjcmVlbiAiLCBTdHJpbmc6
Om51bWJlcihjb3VudCsrKSkpOworICAgICAgICBkaXNwbGF5RGV2aWNlLnNldEVuYWJsZWQoQ0dE
aXNwbGF5SURUb09wZW5HTERpc3BsYXlNYXNrKGRpc3BsYXlJRCkpOworICAgICAgICBkaXNwbGF5
cy5hcHBlbmQoV1RGTW92ZShkaXNwbGF5RGV2aWNlKSk7CisgICAgfQorfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBQTEFURk9S
TShNQUMpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9DR1dpbmRvd0NhcHR1cmVTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9DR1dpbmRvd0NhcHR1cmVTb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNDE3M2Y0
MzNkZjY5MzIzZjViNWI2YmJiZGJhY2RlZDAxMzYxOTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NHV2luZG93Q2FwdHVyZVNvdXJj
ZS5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkg
JiYgUExBVEZPUk0oTUFDKQorCisjaW5jbHVkZSAiRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuaCIK
KwordHlwZWRlZiBzdHJ1Y3QgX19DVkJ1ZmZlciAqQ1ZCdWZmZXJSZWY7Cit0eXBlZGVmIENWQnVm
ZmVyUmVmIENWSW1hZ2VCdWZmZXJSZWY7Cit0eXBlZGVmIENWSW1hZ2VCdWZmZXJSZWYgQ1ZQaXhl
bEJ1ZmZlclJlZjsKK3R5cGVkZWYgc3RydWN0IF9fQ1ZQaXhlbEJ1ZmZlclBvb2wgKkNWUGl4ZWxC
dWZmZXJQb29sUmVmOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBpeGVsQnVmZmVy
Q29uZm9ybWVyQ1Y7CisKK2NsYXNzIENHV2luZG93Q2FwdHVyZVNvdXJjZSBmaW5hbCA6IHB1Ymxp
YyBEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Q2FwdHVyZXIgeworcHVibGljOgorICAgIHN0YXRp
YyBFeHBlY3RlZDxVbmlxdWVSZWY8RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OkNhcHR1cmVyPiwg
U3RyaW5nPiBjcmVhdGUoY29uc3QgU3RyaW5nJik7CisKKyAgICBleHBsaWNpdCBDR1dpbmRvd0Nh
cHR1cmVTb3VyY2UodWludDMyX3QpOworICAgIHZpcnR1YWwgfkNHV2luZG93Q2FwdHVyZVNvdXJj
ZSgpID0gZGVmYXVsdDsKKworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENhcHR1cmVEZXZpY2U+
IHdpbmRvd0NhcHR1cmVEZXZpY2VXaXRoUGVyc2lzdGVudElEKGNvbnN0IFN0cmluZyYpOworICAg
IHN0YXRpYyB2b2lkIHdpbmRvd0NhcHR1cmVEZXZpY2VzKFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYp
OworCitwcml2YXRlOgorICAgIC8vIERpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpDYXB0dXJlcgor
ICAgIGJvb2wgc3RhcnQoZmxvYXQpIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2b2lkIHN0
b3AoKSBmaW5hbCB7IH0KKyAgICBEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6RGlzcGxheUZyYW1l
VHlwZSBnZW5lcmF0ZUZyYW1lKCkgZmluYWw7CisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRp
bmdzOjpEaXNwbGF5U3VyZmFjZVR5cGUgc3VyZmFjZVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkRpc3BsYXlTdXJmYWNlVHlwZTo6V2luZG93
OyB9CisgICAgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZSBkZXZpY2VUeXBlKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6V2luZG93OyB9CisgICAgdm9p
ZCBjb21taXRDb25maWd1cmF0aW9uKGZsb2F0KSBmaW5hbCB7IH0KKyAgICBjb25zdCBjaGFyKiBs
b2dDbGFzc05hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiQ0dXaW5kb3dDYXB0dXJlU291cmNl
IjsgfQorCisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHdpbmRvd0ltYWdlKCk7CisKKyAgICBJ
bnRTaXplIG1fd2luZG93U2l6ZTsKKyAgICBDR1dpbmRvd0lEIG1fd2luZG93SUQgeyAwIH07Cisg
ICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJQb29sUmVmPiBtX2J1ZmZlclBvb2w7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFBpeGVsQnVmZmVyQ29uZm9ybWVyQ1Y+IG1fcGl4ZWxCdWZmZXJDb25mb3Jt
ZXI7CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1fbGFzdEltYWdlOworICAgIFJldGFpblB0
cjxDVlBpeGVsQnVmZmVyUmVmPiBtX2xhc3RQaXhlbEJ1ZmZlcjsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFBMQVRGT1JN
KE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9DR1dpbmRvd0NhcHR1cmVTb3VyY2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvQ0dXaW5kb3dDYXB0dXJlU291cmNlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE0Mjc1NmY4
NDZmZWY4YTVlOTI0MzljMmIyOTU4MGQ0MjQ3YjRjODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ0dXaW5kb3dDYXB0dXJlU291cmNl
Lm1tCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkNHV2luZG93Q2Fw
dHVyZVNvdXJjZS5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgUExBVEZPUk0oTUFD
KQorCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2ltcG9ydCAiSW1hZ2VCdWZmZXIu
aCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk1lZGlhQ29uc3RyYWludHMuaCIKKyNp
bXBvcnQgIk1lZGlhU2FtcGxlQVZGT2JqQy5oIgorI2ltcG9ydCAiTm90SW1wbGVtZW50ZWQuaCIK
KyNpbXBvcnQgIlBpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuaCIKKyNpbXBvcnQgIlBsYXRmb3JtTGF5
ZXIuaCIKKyNpbXBvcnQgIlJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncy5oIgorI2ltcG9ydCA8
cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KKyNpbXBvcnQgPHd0Zi9jZi9UeXBlQ2FzdHND
Ri5oPgorI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oPgorCisj
aW1wb3J0IDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4KKyNpbXBvcnQgIkNvcmVWaWRlb1Nv
ZnRMaW5rLmgiCisKK1dURl9ERUNMQVJFX0NGX1RZUEVfVFJBSVQoQ0dJbWFnZSk7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgYW55T2ZDR1dpbmRvdyhjb25zdCBGdW5jdGlv
bjxib29sKENGRGljdGlvbmFyeVJlZiBpbmZvLCB1bnNpZ25lZCBpZCwgY29uc3QgU3RyaW5nJiB0
aXRsZSk+JiBwcmVkaWNhdGUpCit7CisgICAgYXV0byB3aW5kb3dzID0gYWRvcHRDRihDR1dpbmRv
d0xpc3RDb3B5V2luZG93SW5mbyhrQ0dXaW5kb3dMaXN0T3B0aW9uT25TY3JlZW5Pbmx5IHwga0NH
V2luZG93TGlzdEV4Y2x1ZGVEZXNrdG9wRWxlbWVudHMsIGtDR051bGxXaW5kb3dJRCkpOworICAg
IGlmICghd2luZG93cykgeworICAgICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJDR1dpbmRvd0xp
c3RDb3B5V2luZG93SW5mbyByZXR1cm5lZCBOVUxMIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBhdXRvIHdpbmRvd0NvdW50ID0gQ0ZBcnJheUdldENvdW50KHdpbmRvd3Mu
Z2V0KCkpOworICAgIGZvciAoYXV0byBpID0gMDsgaSA8IHdpbmRvd0NvdW50OyBpKyspIHsKKyAg
ICAgICAgYXV0byB3aW5kb3dJbmZvID0gY2hlY2tlZF9jZl9jYXN0PENGRGljdGlvbmFyeVJlZj4o
Q0ZBcnJheUdldFZhbHVlQXRJbmRleCh3aW5kb3dzLmdldCgpLCBpKSk7CisgICAgICAgIGlmICgh
d2luZG93SW5mbykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIE1lbnVzLCB0
aGUgZG9jaywgZXRjIGhhdmUgbGF5ZXJzIGdyZWF0ZXIgdGhhbiAwLCBza2lwIHRoZW0uCisgICAg
ICAgIGF1dG8gd2luZG93TGF5ZXJSZWYgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENG
RGljdGlvbmFyeUdldFZhbHVlKHdpbmRvd0luZm8sIGtDR1dpbmRvd0xheWVyKSk7CisgICAgICAg
IGlmICghd2luZG93TGF5ZXJSZWYpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdW5z
aWduZWQgd2luZG93TGF5ZXI7CisgICAgICAgIENGTnVtYmVyR2V0VmFsdWUod2luZG93TGF5ZXJS
ZWYsIGtDRk51bWJlckludFR5cGUsICZ3aW5kb3dMYXllcik7CisgICAgICAgIGlmICh3aW5kb3dM
YXllcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF1dG8gb25TY3JlZW4gPSBj
aGVja2VkX2NmX2Nhc3Q8Q0ZCb29sZWFuUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZSh3aW5kb3dJ
bmZvLCBrQ0dXaW5kb3dJc09uc2NyZWVuKSk7CisgICAgICAgIGlmICghQ0ZCb29sZWFuR2V0VmFs
dWUob25TY3JlZW4pKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgYXV0byB3aW5k
b3dJRFJlZiA9IGNoZWNrZWRfY2ZfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUod2luZG93SW5mbywga0NHV2luZG93TnVtYmVyKSk7CisgICAgICAgIGlmICghd2luZG93SURS
ZWYpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdW5zaWduZWQgd2luZG93SUQ7Cisg
ICAgICAgIENGTnVtYmVyR2V0VmFsdWUod2luZG93SURSZWYsIGtDRk51bWJlckludFR5cGUsICZ3
aW5kb3dJRCk7CisgICAgICAgIGlmICghd2luZG93SUQpCisgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICBhdXRvIHdpbmRvd1RpdGxlID0gY2hlY2tlZF9jZl9jYXN0PENGU3RyaW5nUmVm
PihDRkRpY3Rpb25hcnlHZXRWYWx1ZSh3aW5kb3dJbmZvLCBrQ0dXaW5kb3dOYW1lKSk7CisKKyAg
ICAgICAgaWYgKHByZWRpY2F0ZSh3aW5kb3dJbmZvLCB3aW5kb3dJRCwgd2luZG93VGl0bGUpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQor
CitzdGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gd2luZG93RGVzY3JpcHRpb24oQ0dX
aW5kb3dJRCBpZCkKK3sKKyAgICBhdXRvIGlkcyA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZShudWxs
cHRyLCByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQqKj4oJmlkKSwgMSwgbnVsbHB0cikpOwor
ICAgIGF1dG8gd2luZG93cyA9IGFkb3B0Q0YoQ0dXaW5kb3dMaXN0Q3JlYXRlRGVzY3JpcHRpb25G
cm9tQXJyYXkoaWRzLmdldCgpKSk7CisgICAgaWYgKCF3aW5kb3dzKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIHJldHVybiBjaGVja2VkX2NmX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihD
RkFycmF5R2V0VmFsdWVBdEluZGV4KHdpbmRvd3MuZ2V0KCksIDApKTsKK30KKworRXhwZWN0ZWQ8
VW5pcXVlUmVmPERpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpDYXB0dXJlcj4sIFN0cmluZz4gQ0dX
aW5kb3dDYXB0dXJlU291cmNlOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCkKK3sKKyAg
ICBhdXRvIGRpc3BsYXlJRCA9IHBhcnNlSW50ZWdlcjx1aW50MzJfdD4oZGV2aWNlSUQpOworICAg
IGlmICghZGlzcGxheUlEKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludmFsaWQg
d2luZG93IGRldmljZSBJRCJfcyk7CisKKyAgICBhdXRvIHdpbmRvd0luZm8gPSB3aW5kb3dEZXNj
cmlwdGlvbigqZGlzcGxheUlEKTsKKyAgICBpZiAoIXdpbmRvd0luZm8pCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiSW52YWxpZCB3aW5kb3cgSUQiX3MpOworCisgICAgcmV0dXJuIFVu
aXF1ZVJlZjxEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Q2FwdHVyZXI+KG1ha2VVbmlxdWVSZWY8
Q0dXaW5kb3dDYXB0dXJlU291cmNlPigqZGlzcGxheUlEKSk7Cit9CisKK0NHV2luZG93Q2FwdHVy
ZVNvdXJjZTo6Q0dXaW5kb3dDYXB0dXJlU291cmNlKHVpbnQzMl90IHdpbmRvd0lEKQorICAgIDog
bV93aW5kb3dJRCh3aW5kb3dJRCkKK3sKK30KKworUmV0YWluUHRyPENHSW1hZ2VSZWY+IENHV2lu
ZG93Q2FwdHVyZVNvdXJjZTo6d2luZG93SW1hZ2UoKQoreworICAgIGF1dG8gaW1hZ2UgPSBhZG9w
dENGKENHV2luZG93TGlzdENyZWF0ZUltYWdlKENHUmVjdE51bGwsIGtDR1dpbmRvd0xpc3RPcHRp
b25JbmNsdWRpbmdXaW5kb3csIG1fd2luZG93SUQsIGtDR1dpbmRvd0ltYWdlQm91bmRzSWdub3Jl
RnJhbWluZyB8IGtDR1dpbmRvd0ltYWdlU2hvdWxkQmVPcGFxdWUpKTsKKyAgICBpZiAoIWltYWdl
KQorICAgICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJDR1dpbmRvd0NhcHR1cmVTb3VyY2U6Ondp
bmRvd0ltYWdlOiBmYWlsZWQgdG8gY2FwdHVyZSB3aW5kb3cgaW1hZ2UiKTsKKworICAgIHJldHVy
biBpbWFnZTsKK30KKworRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OkRpc3BsYXlGcmFtZVR5cGUg
Q0dXaW5kb3dDYXB0dXJlU291cmNlOjpnZW5lcmF0ZUZyYW1lKCkKK3sKKyAgICByZXR1cm4gRGlz
cGxheUNhcHR1cmVTb3VyY2VNYWM6OkRpc3BsYXlGcmFtZVR5cGUgeyBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4geyB3aW5kb3dJbWFnZSgpIH0gfTsKK30KKworc3RkOjpvcHRpb25hbDxDYXB0dXJlRGV2
aWNlPiBDR1dpbmRvd0NhcHR1cmVTb3VyY2U6OndpbmRvd0NhcHR1cmVEZXZpY2VXaXRoUGVyc2lz
dGVudElEKGNvbnN0IFN0cmluZyYgaWRTdHJpbmcpCit7CisgICAgYXV0byB3aW5kb3dJRCA9IHBh
cnNlSW50ZWdlcjx1aW50MzJfdD4oaWRTdHJpbmcpOworICAgIGlmICghd2luZG93SUQpIHsKKyAg
ICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQ0dXaW5kb3dDYXB0dXJlU291cmNlOjp3aW5kb3dD
YXB0dXJlRGV2aWNlV2l0aFBlcnNpc3RlbnRJRDogd2luZG93IElEIGRvZXMgbm90IGNvbnZlcnQg
dG8gMzItYml0IGludGVnZXIiKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9
CisKKyAgICBTdHJpbmcgd2luZG93VGl0bGU7CisgICAgaWYgKCFhbnlPZkNHV2luZG93KFsmd2lu
ZG93VGl0bGUsIHdpbmRvd0lEXSAoQ0ZEaWN0aW9uYXJ5UmVmLCBDR1dpbmRvd0lEIGlkLCBjb25z
dCBTdHJpbmcmIHRpdGxlKSB7CisgICAgICAgIGlmICh3aW5kb3dJRCAhPSBpZCkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB3aW5kb3dUaXRsZSA9IHRpdGxlOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIH0pKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKFdlYlJUQywg
IkNHV2luZG93Q2FwdHVyZVNvdXJjZTo6d2luZG93Q2FwdHVyZURldmljZVdpdGhQZXJzaXN0ZW50
SUQ6IHdpbmRvdyBJRCBpcyBub3QgdmFsaWQiKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICB9CisKKyAgICBhdXRvIGRldmljZSA9IENhcHR1cmVEZXZpY2UoU3RyaW5nOjpudW1i
ZXIoKndpbmRvd0lEKSwgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6V2luZG93LCB3aW5kb3dU
aXRsZSk7CisgICAgZGV2aWNlLnNldEVuYWJsZWQodHJ1ZSk7CisKKyAgICByZXR1cm4gZGV2aWNl
OworfQorCit2b2lkIENHV2luZG93Q2FwdHVyZVNvdXJjZTo6d2luZG93Q2FwdHVyZURldmljZXMo
VmVjdG9yPENhcHR1cmVEZXZpY2U+JiB3aW5kb3dzKQoreworICAgIGFueU9mQ0dXaW5kb3coWyZd
IChDRkRpY3Rpb25hcnlSZWYsIGludCBpZCwgY29uc3QgU3RyaW5nJiB0aXRsZSkgbXV0YWJsZSB7
CisgICAgICAgIENhcHR1cmVEZXZpY2UgZGV2aWNlKFN0cmluZzo6bnVtYmVyKGlkKSwgQ2FwdHVy
ZURldmljZTo6RGV2aWNlVHlwZTo6V2luZG93LCB0aXRsZSk7CisgICAgICAgIGRldmljZS5zZXRF
bmFibGVkKHRydWUpOworICAgICAgICB3aW5kb3dzLmFwcGVuZChXVEZNb3ZlKGRldmljZSkpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFBMQVRGT1JNKE1BQykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5
Q2FwdHVyZU1hbmFnZXJDb2NvYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2EuY3BwCmluZGV4IDJmZWY4YmIxNzM3
Y2Y5ZTE1ZWUyZTAzNTdkMjhlYjIwMmYyZjIxMmYuLjBiNjk0YzlmODkwNTI5MzIwYTkzZjAyMTZj
YWQ3M2M1NmUwNzk1MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlTWFuYWdlckNvY29h
LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMyw4ICszMyw4IEBACiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKICNp
ZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSAiU2NyZWVuRGlzcGxheUNhcHR1cmVyTWFjLmgiCi0j
aW5jbHVkZSAiV2luZG93RGlzcGxheUNhcHR1cmVyTWFjLmgiCisjaW5jbHVkZSAiQ0dEaXNwbGF5
U3RyZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZS5oIgorI2luY2x1ZGUgIkNHV2luZG93Q2FwdHVyZVNv
dXJjZS5oIgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0RpcmVjdERpc3BsYXkuaD4KICNlbmRp
ZgogCkBAIC02MSwyMSArNjEsMjEgQEAgY29uc3QgVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBEaXNw
bGF5Q2FwdHVyZU1hbmFnZXJDb2NvYTo6Y2FwdHVyZURldmljZXMoKQogdm9pZCBEaXNwbGF5Q2Fw
dHVyZU1hbmFnZXJDb2NvYTo6dXBkYXRlRGlzcGxheUNhcHR1cmVEZXZpY2VzKCkKIHsKICNpZiBQ
TEFURk9STShNQUMpCi0gICAgU2NyZWVuRGlzcGxheUNhcHR1cmVyTWFjOjpzY3JlZW5DYXB0dXJl
RGV2aWNlcyhtX2RldmljZXMpOworICAgIENHRGlzcGxheVN0cmVhbVNjcmVlbkNhcHR1cmVTb3Vy
Y2U6OnNjcmVlbkNhcHR1cmVEZXZpY2VzKG1fZGV2aWNlcyk7CiAjZW5kaWYKIH0KIAogdm9pZCBE
aXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYTo6dXBkYXRlV2luZG93Q2FwdHVyZURldmljZXMoKQog
ewogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBXaW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWM6OndpbmRv
d0NhcHR1cmVEZXZpY2VzKG1fZGV2aWNlcyk7CisgICAgQ0dXaW5kb3dDYXB0dXJlU291cmNlOjp3
aW5kb3dDYXB0dXJlRGV2aWNlcyhtX2RldmljZXMpOwogI2VuZGlmCiB9CiAKIHN0ZDo6b3B0aW9u
YWw8Q2FwdHVyZURldmljZT4gRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2E6OnNjcmVlbkNhcHR1
cmVEZXZpY2VXaXRoUGVyc2lzdGVudElEKGNvbnN0IFN0cmluZyYgZGV2aWNlSUQpCiB7CiAjaWYg
UExBVEZPUk0oTUFDKQotICAgIHJldHVybiBTY3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWM6OnNjcmVl
bkNhcHR1cmVEZXZpY2VXaXRoUGVyc2lzdGVudElEKGRldmljZUlEKTsKKyAgICByZXR1cm4gQ0dE
aXNwbGF5U3RyZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZTo6c2NyZWVuQ2FwdHVyZURldmljZVdpdGhQ
ZXJzaXN0ZW50SUQoZGV2aWNlSUQpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZGV2aWNlSUQp
OwogICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CkBAIC04NSw3ICs4NSw3IEBAIHN0ZDo6b3B0aW9u
YWw8Q2FwdHVyZURldmljZT4gRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2E6OnNjcmVlbkNhcHR1
cmVEZXZpY2VXaXRoCiBzdGQ6Om9wdGlvbmFsPENhcHR1cmVEZXZpY2U+IERpc3BsYXlDYXB0dXJl
TWFuYWdlckNvY29hOjp3aW5kb3dDYXB0dXJlRGV2aWNlV2l0aFBlcnNpc3RlbnRJRChjb25zdCBT
dHJpbmcmIGRldmljZUlEKQogewogI2lmIFBMQVRGT1JNKE1BQykKLSAgICByZXR1cm4gV2luZG93
RGlzcGxheUNhcHR1cmVyTWFjOjp3aW5kb3dDYXB0dXJlRGV2aWNlV2l0aFBlcnNpc3RlbnRJRChk
ZXZpY2VJRCk7CisgICAgcmV0dXJuIENHV2luZG93Q2FwdHVyZVNvdXJjZTo6d2luZG93Q2FwdHVy
ZURldmljZVdpdGhQZXJzaXN0ZW50SUQoZGV2aWNlSUQpOwogI2Vsc2UKICAgICBVTlVTRURfUEFS
QU0oZGV2aWNlSUQpOwogICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VD
b2NvYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxh
eUNhcHR1cmVTb3VyY2VDb2NvYS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4
MmY0YjI2Y2YxMThjNDk3MWFjZDdkMTgzMDkyMTk3ZTFlNzY4MmEuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMjk3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEaXNwbGF5Q2FwdHVy
ZVNvdXJjZUNvY29hLmgiCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jaW5jbHVkZSAi
TG9nZ2luZy5oIgotI2luY2x1ZGUgIk1lZGlhU2FtcGxlQVZGT2JqQy5oIgotI2luY2x1ZGUgIlBp
eGVsQnVmZmVyQ29uZm9ybWVyQ1YuaCIKLSNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgi
Ci0jaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5oIgotI2luY2x1ZGUgIlJlYWx0
aW1lTWVkaWFTb3VyY2VTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlJlYWx0aW1lVmlkZW9VdGlsaXRp
ZXMuaCIKLSNpbmNsdWRlICJSZW1vdGVWaWRlb1NhbXBsZS5oIgotI2luY2x1ZGUgIlRpbWVyLmgi
Ci0jaW5jbHVkZSA8Q29yZU1lZGlhL0NNU3luYy5oPgotI2luY2x1ZGUgPG1hY2gvbWFjaF90aW1l
Lmg+Ci0jaW5jbHVkZSA8cGFsL2F2Zm91bmRhdGlvbi9NZWRpYVRpbWVBVkZvdW5kYXRpb24uaD4K
LSNpbmNsdWRlIDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4KLSNpbmNsdWRlIDxwYWwvc3Bp
L2NmL0NvcmVBdWRpb1NQSS5oPgotI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJ
Lmg+Ci0jaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9JT1N1cmZhY2VTUEkuaD4KLSNpbmNsdWRlIDxz
eXMvdGltZS5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+Ci0KLSNpZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSAiU2NyZWVuRGlz
cGxheUNhcHR1cmVyTWFjLmgiCi0jaW5jbHVkZSAiV2luZG93RGlzcGxheUNhcHR1cmVyTWFjLmgi
Ci0jZW5kaWYKLQotI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotQ2FwdHVyZVNvdXJjZU9yRXJyb3IgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2Nv
YTo6Y3JlYXRlKGNvbnN0IENhcHR1cmVEZXZpY2UmIGRldmljZSwgY29uc3QgTWVkaWFDb25zdHJh
aW50cyogY29uc3RyYWludHMpCi17Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIHN3aXRjaCAoZGV2
aWNlLnR5cGUoKSkgewotICAgIGNhc2UgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6U2NyZWVu
OgotICAgICAgICByZXR1cm4gY3JlYXRlKFNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYzo6Y3JlYXRl
KGRldmljZS5wZXJzaXN0ZW50SWQoKSksIGRldmljZSwgY29uc3RyYWludHMpOwotICAgIGNhc2Ug
Q2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6V2luZG93OgotICAgICAgICByZXR1cm4gY3JlYXRl
KFdpbmRvd0Rpc3BsYXlDYXB0dXJlck1hYzo6Y3JlYXRlKGRldmljZS5wZXJzaXN0ZW50SWQoKSks
IGRldmljZSwgY29uc3RyYWludHMpOwotICAgIGNhc2UgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlw
ZTo6TWljcm9waG9uZToKLSAgICBjYXNlIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OlNwZWFr
ZXI6Ci0gICAgY2FzZSBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpDYW1lcmE6Ci0gICAgY2Fz
ZSBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpVbmtub3duOgotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotI2Vsc2UKLSAgICBVTlVTRURfUEFS
QU0oZGV2aWNlKTsKLSAgICBVTlVTRURfUEFSQU0oY29uc3RyYWludHMpOwotI2VuZGlmCi0gICAg
cmV0dXJuIHsgfTsKLX0KLQotQ2FwdHVyZVNvdXJjZU9yRXJyb3IgRGlzcGxheUNhcHR1cmVTb3Vy
Y2VDb2NvYTo6Y3JlYXRlKEV4cGVjdGVkPFVuaXF1ZVJlZjxDYXB0dXJlcj4sIFN0cmluZz4mJiBj
YXB0dXJlciwgY29uc3QgQ2FwdHVyZURldmljZSYgZGV2aWNlLCBjb25zdCBNZWRpYUNvbnN0cmFp
bnRzKiBjb25zdHJhaW50cykKLXsKLSAgICBpZiAoIWNhcHR1cmVyLmhhc192YWx1ZSgpKQotICAg
ICAgICByZXR1cm4gQ2FwdHVyZVNvdXJjZU9yRXJyb3IgeyBXVEZNb3ZlKGNhcHR1cmVyLmVycm9y
KCkpIH07Ci0KLSAgICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVmKCpuZXcgRGlzcGxheUNhcHR1cmVT
b3VyY2VDb2NvYShXVEZNb3ZlKGNhcHR1cmVyLnZhbHVlKCkpLCBTdHJpbmcgeyBkZXZpY2UubGFi
ZWwoKSB9KSk7Ci0gICAgaWYgKGNvbnN0cmFpbnRzKSB7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0g
c291cmNlLT5hcHBseUNvbnN0cmFpbnRzKCpjb25zdHJhaW50cyk7Ci0gICAgICAgIGlmIChyZXN1
bHQpCi0gICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQudmFsdWUoKS5iYWRDb25zdHJh
aW50KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gQ2FwdHVyZVNvdXJjZU9yRXJyb3IoV1RGTW92ZShz
b3VyY2UpKTsKLX0KLQotRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6RGlzcGxheUNhcHR1cmVT
b3VyY2VDb2NvYShVbmlxdWVSZWY8Q2FwdHVyZXI+JiYgY2FwdHVyZXIsIFN0cmluZyYmIG5hbWUp
Ci0gICAgOiBSZWFsdGltZU1lZGlhU291cmNlKFR5cGU6OlZpZGVvLCBXVEZNb3ZlKG5hbWUpKQot
ICAgICwgbV9jYXB0dXJlcihXVEZNb3ZlKGNhcHR1cmVyKSkKLSAgICAsIG1fdGltZXIoUnVuTG9v
cDo6Y3VycmVudCgpLCB0aGlzLCAmRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6ZW1pdEZyYW1l
KQotewotfQotCi1EaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjp+RGlzcGxheUNhcHR1cmVTb3Vy
Y2VDb2NvYSgpCi17Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBSZWFsdGltZU1lZGlh
U291cmNlQ2VudGVyOjpzaW5nbGV0b24oKS5kaXNwbGF5Q2FwdHVyZUZhY3RvcnkoKS51bnNldEFj
dGl2ZVNvdXJjZSgqdGhpcyk7Ci0jZW5kaWYKLX0KLQotY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJj
ZUNhcGFiaWxpdGllcyYgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6Y2FwYWJpbGl0aWVzKCkK
LXsKLSAgICBpZiAoIW1fY2FwYWJpbGl0aWVzKSB7Ci0gICAgICAgIFJlYWx0aW1lTWVkaWFTb3Vy
Y2VDYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzKHNldHRpbmdzKCkuc3VwcG9ydGVkQ29uc3RyYWlu
dHMoKSk7Ci0KLSAgICAgICAgLy8gRklYTUU6IHdoYXQgc2hvdWxkIHRoZXNlIGJlPwotICAgICAg
ICBjYXBhYmlsaXRpZXMuc2V0V2lkdGgoQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSgxLCAzODQwKSk7
Ci0gICAgICAgIGNhcGFiaWxpdGllcy5zZXRIZWlnaHQoQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSgx
LCAyMTYwKSk7Ci0gICAgICAgIGNhcGFiaWxpdGllcy5zZXRGcmFtZVJhdGUoQ2FwYWJpbGl0eVZh
bHVlT3JSYW5nZSguMDEsIDMwLjApKTsKLQotICAgICAgICBtX2NhcGFiaWxpdGllcyA9IFdURk1v
dmUoY2FwYWJpbGl0aWVzKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fY2FwYWJpbGl0aWVzLnZhbHVl
KCk7Ci19Ci0KLWNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgRGlzcGxheUNhcHR1
cmVTb3VyY2VDb2NvYTo6c2V0dGluZ3MoKQotewotICAgIGlmICghbV9jdXJyZW50U2V0dGluZ3Mp
IHsKLSAgICAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIHNldHRpbmdzOwotICAgICAg
ICBzZXR0aW5ncy5zZXRGcmFtZVJhdGUoZnJhbWVSYXRlKCkpOwotCi0gICAgICAgIGF1dG8gc2l6
ZSA9IHRoaXMtPnNpemUoKTsKLSAgICAgICAgc2V0dGluZ3Muc2V0V2lkdGgoc2l6ZS53aWR0aCgp
KTsKLSAgICAgICAgc2V0dGluZ3Muc2V0SGVpZ2h0KHNpemUuaGVpZ2h0KCkpOwotCi0gICAgICAg
IHNldHRpbmdzLnNldERpc3BsYXlTdXJmYWNlKG1fY2FwdHVyZXItPnN1cmZhY2VUeXBlKCkpOwot
ICAgICAgICBzZXR0aW5ncy5zZXRMb2dpY2FsU3VyZmFjZShmYWxzZSk7Ci0KLSAgICAgICAgUmVh
bHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzIHN1cHBvcnRlZENvbnN0cmFpbnRz
OwotICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0ZyYW1lUmF0ZSh0cnVl
KTsKLSAgICAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNXaWR0aCh0cnVlKTsK
LSAgICAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNIZWlnaHQodHJ1ZSk7Ci0g
ICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzRGlzcGxheVN1cmZhY2UodHJ1
ZSk7Ci0gICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzTG9naWNhbFN1cmZh
Y2UodHJ1ZSk7Ci0KLSAgICAgICAgc2V0dGluZ3Muc2V0U3VwcG9ydGVkQ29uc3RyYWludHMoc3Vw
cG9ydGVkQ29uc3RyYWludHMpOwotCi0gICAgICAgIG1fY3VycmVudFNldHRpbmdzID0gV1RGTW92
ZShzZXR0aW5ncyk7Ci0gICAgfQotICAgIHJldHVybiBtX2N1cnJlbnRTZXR0aW5ncy52YWx1ZSgp
OwotfQotCi12b2lkIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OnNldHRpbmdzRGlkQ2hhbmdl
KE9wdGlvblNldDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkZsYWc+IHNldHRpbmdzKQot
ewotICAgIGlmIChzZXR0aW5ncy5jb250YWlucyhSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6
OkZsYWc6OkZyYW1lUmF0ZSkgJiYgbV90aW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3RpbWVy
LnN0YXJ0UmVwZWF0aW5nKDFfcyAvIGZyYW1lUmF0ZSgpKTsKLQotICAgIGlmIChzZXR0aW5ncy5j
b250YWluc0FueSh7IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZzo6V2lkdGgsIFJl
YWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZzo6SGVpZ2h0IH0pKQotICAgICAgICBtX2J1
ZmZlckF0dHJpYnV0ZXMgPSBudWxscHRyOwotCi0gICAgbV9jdXJyZW50U2V0dGluZ3MgPSB7IH07
Ci19Ci0KLXZvaWQgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6c3RhcnRQcm9kdWNpbmdEYXRh
KCkKLXsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VD
ZW50ZXI6OnNpbmdsZXRvbigpLmRpc3BsYXlDYXB0dXJlRmFjdG9yeSgpLnNldEFjdGl2ZVNvdXJj
ZSgqdGhpcyk7Ci0jZW5kaWYKLQotICAgIG1fc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93
KCk7Ci0gICAgbV90aW1lci5zdGFydFJlcGVhdGluZygxX3MgLyBmcmFtZVJhdGUoKSk7Ci0KLSAg
ICBpZiAoIW1fY2FwdHVyZXItPnN0YXJ0KGZyYW1lUmF0ZSgpKSkKLSAgICAgICAgY2FwdHVyZUZh
aWxlZCgpOwotfQotCi12b2lkIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OnN0b3BQcm9kdWNp
bmdEYXRhKCkKLXsKLSAgICBtX3RpbWVyLnN0b3AoKTsKLSAgICBtX2VsYXBzZWRUaW1lICs9IE1v
bm90b25pY1RpbWU6Om5vdygpIC0gbV9zdGFydFRpbWU7Ci0gICAgbV9zdGFydFRpbWUgPSBNb25v
dG9uaWNUaW1lOjpuYW4oKTsKLQotICAgIG1fY2FwdHVyZXItPnN0b3AoKTsKLX0KLQotU2Vjb25k
cyBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjplbGFwc2VkVGltZSgpCi17Ci0gICAgaWYgKHN0
ZDo6aXNuYW4obV9zdGFydFRpbWUpKQotICAgICAgICByZXR1cm4gbV9lbGFwc2VkVGltZTsKLQot
ICAgIHJldHVybiBtX2VsYXBzZWRUaW1lICsgKE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9zdGFy
dFRpbWUpOwotfQotCi0vLyBXZSBrZWVwIHRoZSBhc3BlY3QgcmF0aW8gb2YgdGhlIGludHJpbnNp
YyBzaXplIGZvciB0aGUgZnJhbWUgc2l6ZSBhcyBnZXREaXNwbGF5TWVkaWEgYWxsb3dzIG1heCBj
b25zdHJhaW50cyBvbmx5Lgotdm9pZCBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjp1cGRhdGVG
cmFtZVNpemUoKQotewotICAgIGF1dG8gaW50cmluc2ljU2l6ZSA9IHRoaXMtPmludHJpbnNpY1Np
emUoKTsKLQotICAgIGF1dG8gZnJhbWVTaXplID0gc2l6ZSgpOwotICAgIGlmICghZnJhbWVTaXpl
LmhlaWdodCgpKQotICAgICAgICBmcmFtZVNpemUuc2V0SGVpZ2h0KGludHJpbnNpY1NpemUuaGVp
Z2h0KCkpOwotICAgIGlmICghZnJhbWVTaXplLndpZHRoKCkpCi0gICAgICAgIGZyYW1lU2l6ZS5z
ZXRXaWR0aChpbnRyaW5zaWNTaXplLndpZHRoKCkpOwotCi0gICAgYXV0byBtYXhIZWlnaHQgPSBz
dGQ6Om1pbihmcmFtZVNpemUuaGVpZ2h0KCksIGludHJpbnNpY1NpemUuaGVpZ2h0KCkpOwotICAg
IGF1dG8gbWF4V2lkdGggPSBzdGQ6Om1pbihmcmFtZVNpemUud2lkdGgoKSwgaW50cmluc2ljU2l6
ZS53aWR0aCgpKTsKLQotICAgIGF1dG8gaGVpZ2h0Rm9yTWF4V2lkdGggPSBtYXhXaWR0aCAqIGlu
dHJpbnNpY1NpemUuaGVpZ2h0KCkgLyBpbnRyaW5zaWNTaXplLndpZHRoKCk7Ci0gICAgYXV0byB3
aWR0aEZvck1heEhlaWdodCA9IG1heEhlaWdodCAqIGludHJpbnNpY1NpemUud2lkdGgoKSAvIGlu
dHJpbnNpY1NpemUuaGVpZ2h0KCk7Ci0KLSAgICBpZiAoaGVpZ2h0Rm9yTWF4V2lkdGggPD0gbWF4
SGVpZ2h0KSB7Ci0gICAgICAgIHNldFNpemUoeyBtYXhXaWR0aCwgaGVpZ2h0Rm9yTWF4V2lkdGgg
fSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHdpZHRoRm9yTWF4SGVpZ2h0IDw9
IG1heFdpZHRoKSB7Ci0gICAgICAgIHNldFNpemUoeyB3aWR0aEZvck1heEhlaWdodCwgbWF4SGVp
Z2h0IH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNldFNpemUoaW50cmluc2ljU2l6
ZSk7Ci19Ci0KLXZvaWQgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6ZW1pdEZyYW1lKCkKLXsK
LSNpZiBQTEFURk9STShDT0NPQSkgJiYgIVBMQVRGT1JNKElPU19GQU1JTFlfU0lNVUxBVE9SKQot
ICAgIGlmIChtdXRlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1faW1hZ2VUcmFu
c2ZlclNlc3Npb24pCi0gICAgICAgIG1faW1hZ2VUcmFuc2ZlclNlc3Npb24gPSBJbWFnZVRyYW5z
ZmVyU2Vzc2lvblZUOjpjcmVhdGUocHJlZmVyZWRQaXhlbEJ1ZmZlckZvcm1hdCgpKTsKLQotICAg
IGF1dG8gc2FtcGxlVGltZSA9IE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZSgoZWxhcHNlZFRp
bWUoKSArIDEwMF9tcykuc2Vjb25kcygpKTsKLQotICAgIGF1dG8gZnJhbWUgPSBtX2NhcHR1cmVy
LT5nZW5lcmF0ZUZyYW1lKCk7Ci0gICAgYXV0byBpbWFnZVNpemUgPSBXVEY6OnN3aXRjaE9uKGZy
YW1lLAotICAgICAgICBbXShSZXRhaW5QdHI8SU9TdXJmYWNlUmVmPiBzdXJmYWNlKSAtPiBJbnRT
aXplIHsKLSAgICAgICAgICAgIGlmICghc3VyZmFjZSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
eyB9OwotCi0gICAgICAgICAgICByZXR1cm4gSW50U2l6ZShJT1N1cmZhY2VHZXRXaWR0aChzdXJm
YWNlLmdldCgpKSwgSU9TdXJmYWNlR2V0SGVpZ2h0KHN1cmZhY2UuZ2V0KCkpKTsKLSAgICAgICAg
fSwKLSAgICAgICAgW10oUmVmUHRyPE5hdGl2ZUltYWdlPiBpbWFnZSkgLT4gSW50U2l6ZSB7Ci0g
ICAgICAgICAgICBpZiAoIWltYWdlKQotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0KLSAg
ICAgICAgICAgIHJldHVybiBpbWFnZS0+c2l6ZSgpOwotICAgICAgICB9Ci0gICAgKTsKLQotICAg
IEFTU0VSVCghaW1hZ2VTaXplLmlzRW1wdHkoKSk7Ci0gICAgaWYgKGltYWdlU2l6ZS5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChpbnRyaW5zaWNTaXplKCkgIT0gaW1hZ2VT
aXplKSB7Ci0gICAgICAgIHNldEludHJpbnNpY1NpemUoaW1hZ2VTaXplKTsKLSAgICAgICAgdXBk
YXRlRnJhbWVTaXplKCk7Ci0gICAgfQotCi0gICAgYXV0byBzYW1wbGUgPSBXVEY6OnN3aXRjaE9u
KGZyYW1lLAotICAgICAgICBbdGhpcywgc2FtcGxlVGltZV0oUmV0YWluUHRyPElPU3VyZmFjZVJl
Zj4gc3VyZmFjZSkgLT4gUmVmUHRyPE1lZGlhU2FtcGxlPiB7Ci0gICAgICAgICAgICBpZiAoIXN1
cmZhY2UpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgICAgIHJl
dHVybiBtX2ltYWdlVHJhbnNmZXJTZXNzaW9uLT5jcmVhdGVNZWRpYVNhbXBsZShzdXJmYWNlLmdl
dCgpLCBzYW1wbGVUaW1lLCBzaXplKCkpOwotICAgICAgICB9LAotICAgICAgICBbdGhpcywgc2Ft
cGxlVGltZV0oUmVmUHRyPE5hdGl2ZUltYWdlPiBpbWFnZSkgLT4gUmVmUHRyPE1lZGlhU2FtcGxl
PiB7Ci0gICAgICAgICAgICBpZiAoIWltYWdlKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgICAgICAgICByZXR1cm4gbV9pbWFnZVRyYW5zZmVyU2Vzc2lvbi0+Y3JlYXRl
TWVkaWFTYW1wbGUoaW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgc2FtcGxlVGltZSwgc2l6
ZSgpKTsKLSAgICAgICAgfQotICAgICk7Ci0KLSAgICBpZiAoIXNhbXBsZSkgewotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHZpZGVv
U2FtcGxlQXZhaWxhYmxlKCpzYW1wbGUuZ2V0KCkpOwotI2VuZGlmCi19Ci0KLSNpZiAhUkVMRUFT
RV9MT0dfRElTQUJMRUQKLXZvaWQgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6Q2FwdHVyZXI6
OnNldExvZ2dlcihjb25zdCBMb2dnZXImIG5ld0xvZ2dlciwgY29uc3Qgdm9pZCogbmV3TG9nSWRl
bnRpZmllcikKLXsKLSAgICBtX2xvZ2dlciA9ICZuZXdMb2dnZXI7Ci0gICAgbV9sb2dJZGVudGlm
aWVyID0gbmV3TG9nSWRlbnRpZmllcjsKLX0KLQotV1RGTG9nQ2hhbm5lbCYgRGlzcGxheUNhcHR1
cmVTb3VyY2VDb2NvYTo6Q2FwdHVyZXI6OmxvZ0NoYW5uZWwoKSBjb25zdAotewotICAgIHJldHVy
biBMb2dXZWJSVEM7Ci19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VD
b2NvYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGVmNmNmMTdiYzhkNTgxYzNl
NmI5M2FiYTkxOWQ0YzZhMzhhNmRjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNw
bGF5Q2FwdHVyZVNvdXJjZUNvY29hLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotCi0jaW5jbHVkZSAiQ2FwdHVyZURl
dmljZS5oIgotI2luY2x1ZGUgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaCIKLSNpbmNsdWRlICJS
ZWFsdGltZU1lZGlhU291cmNlLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLSNpbmNsdWRlIDx3
dGYvVW5pcXVlUmVmLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLXR5cGVk
ZWYgc3RydWN0IENHSW1hZ2UgKkNHSW1hZ2VSZWY7Ci10eXBlZGVmIHN0cnVjdCBfX0NWQnVmZmVy
ICpDVlBpeGVsQnVmZmVyUmVmOwotdHlwZWRlZiBzdHJ1Y3QgX19JT1N1cmZhY2UgKklPU3VyZmFj
ZVJlZjsKLQotbmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBNZWRpYVRpbWU7Ci19Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgQ2FwdHVyZURldmljZUluZm87Ci1jbGFzcyBJbWFnZVRyYW5z
ZmVyU2Vzc2lvblZUOwotY2xhc3MgUGl4ZWxCdWZmZXJDb25mb3JtZXJDVjsKLQotY2xhc3MgRGlz
cGxheUNhcHR1cmVTb3VyY2VDb2NvYSBmaW5hbCA6IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNl
IHsKLXB1YmxpYzoKLSAgICB1c2luZyBEaXNwbGF5RnJhbWVUeXBlID0gV1RGOjpWYXJpYW50PFJl
ZlB0cjxOYXRpdmVJbWFnZT4sIFJldGFpblB0cjxJT1N1cmZhY2VSZWY+PjsKLSAgICBjbGFzcyBD
YXB0dXJlcgotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgICAgICA6IHB1YmxpYyBMb2dn
ZXJIZWxwZXIKLSNlbmRpZgotICAgIHsKLSAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5DYXB0dXJlcigpID0gZGVmYXVsdDsKLQot
ICAgICAgICB2aXJ0dWFsIGJvb2wgc3RhcnQoZmxvYXQgZnJhbWVSYXRlKSA9IDA7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBzdG9wKCkgPSAwOwotICAgICAgICB2aXJ0dWFsIERpc3BsYXlGcmFtZVR5
cGUgZ2VuZXJhdGVGcmFtZSgpID0gMDsKLSAgICAgICAgdmlydHVhbCBDYXB0dXJlRGV2aWNlOjpE
ZXZpY2VUeXBlIGRldmljZVR5cGUoKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgUmVhbHRp
bWVNZWRpYVNvdXJjZVNldHRpbmdzOjpEaXNwbGF5U3VyZmFjZVR5cGUgc3VyZmFjZVR5cGUoKSBj
b25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb25maWd1cmF0aW9uKGZsb2F0
IGZyYW1lUmF0ZSkgPSAwOwotCi0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgICAgIHZp
cnR1YWwgdm9pZCBzZXRMb2dnZXIoY29uc3QgTG9nZ2VyJiwgY29uc3Qgdm9pZCopOwotICAgICAg
ICBjb25zdCBMb2dnZXIqIGxvZ2dlclB0cigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nZ2VyLmdldCgp
OyB9Ci0gICAgICAgIGNvbnN0IExvZ2dlciYgbG9nZ2VyKCkgY29uc3QgZmluYWwgeyBBU1NFUlQo
bV9sb2dnZXIpOyByZXR1cm4gKm1fbG9nZ2VyLmdldCgpOyB9Ci0gICAgICAgIGNvbnN0IHZvaWQq
IGxvZ0lkZW50aWZpZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2xvZ0lkZW50aWZpZXI7IH0K
LSAgICAgICAgV1RGTG9nQ2hhbm5lbCYgbG9nQ2hhbm5lbCgpIGNvbnN0IGZpbmFsOwotI2VuZGlm
Ci0KLSAgICBwcml2YXRlOgotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgICAgICBSZWZQ
dHI8Y29uc3QgTG9nZ2VyPiBtX2xvZ2dlcjsKLSAgICAgICAgY29uc3Qgdm9pZCogbV9sb2dJZGVu
dGlmaWVyOwotI2VuZGlmCi0gICAgfTsKLQotICAgIHN0YXRpYyBDYXB0dXJlU291cmNlT3JFcnJv
ciBjcmVhdGUoY29uc3QgQ2FwdHVyZURldmljZSYsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMqKTsK
LSAgICBzdGF0aWMgQ2FwdHVyZVNvdXJjZU9yRXJyb3IgY3JlYXRlKEV4cGVjdGVkPFVuaXF1ZVJl
ZjxDYXB0dXJlcj4sIFN0cmluZz4mJiwgY29uc3QgQ2FwdHVyZURldmljZSYsIGNvbnN0IE1lZGlh
Q29uc3RyYWludHMqKTsKLQotICAgIFNlY29uZHMgZWxhcHNlZFRpbWUoKTsKLSAgICB2b2lkIHVw
ZGF0ZUZyYW1lU2l6ZSgpOwotCi1wcml2YXRlOgotICAgIERpc3BsYXlDYXB0dXJlU291cmNlQ29j
b2EoVW5pcXVlUmVmPENhcHR1cmVyPiYmLCBTdHJpbmcmJiBuYW1lKTsKLSAgICB+RGlzcGxheUNh
cHR1cmVTb3VyY2VDb2NvYSgpOwotCi0gICAgdm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoKSBmaW5h
bDsKLSAgICB2b2lkIHN0b3BQcm9kdWNpbmdEYXRhKCkgZmluYWw7Ci0gICAgdm9pZCBzZXR0aW5n
c0RpZENoYW5nZShPcHRpb25TZXQ8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnPikg
ZmluYWw7Ci0gICAgYm9vbCBpc0NhcHR1cmVTb3VyY2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0
cnVlOyB9Ci0gICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgY2FwYWJp
bGl0aWVzKCkgZmluYWw7Ci0gICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBz
ZXR0aW5ncygpIGZpbmFsOwotICAgIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGUgZGV2aWNlVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FwdHVyZXItPmRldmljZVR5cGUoKTsgfQotICAgIHZvaWQg
Y29tbWl0Q29uZmlndXJhdGlvbigpIGZpbmFsIHsgcmV0dXJuIG1fY2FwdHVyZXItPmNvbW1pdENv
bmZpZ3VyYXRpb24oZnJhbWVSYXRlKCkpOyB9Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQK
LSAgICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRGlz
cGxheUNhcHR1cmVTb3VyY2VDb2NvYSI7IH0KLSNlbmRpZgotCi0gICAgdm9pZCBlbWl0RnJhbWUo
KTsKLQotICAgIFVuaXF1ZVJlZjxDYXB0dXJlcj4gbV9jYXB0dXJlcjsKLSAgICBzdGQ6Om9wdGlv
bmFsPFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM+IG1fY2FwYWJpbGl0aWVzOwotICAg
IHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzPiBtX2N1cnJlbnRTZXR0
aW5nczsKLSAgICBSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMgbV9zdXBw
b3J0ZWRDb25zdHJhaW50czsKLQotICAgIE1vbm90b25pY1RpbWUgbV9zdGFydFRpbWUgeyBNb25v
dG9uaWNUaW1lOjpuYW4oKSB9OwotICAgIFNlY29uZHMgbV9lbGFwc2VkVGltZSB7IDBfcyB9Owot
Ci0gICAgUmV0YWluUHRyPENGTXV0YWJsZURpY3Rpb25hcnlSZWY+IG1fYnVmZmVyQXR0cmlidXRl
czsKLSAgICBSdW5Mb29wOjpUaW1lcjxEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hPiBtX3RpbWVy
OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ+IG1faW1hZ2VU
cmFuc2ZlclNlc3Npb247Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZWEzOGM4YTk0NzRkODY5NDM2YzY3YzkyZGU4NTgyNDY2NzA5MTYwNQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5jcHAKQEAgLTAsMCArMSwyNzggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5oIgorCisjaWYgRU5BQkxF
KE1FRElBX1NUUkVBTSkgJiYgUExBVEZPUk0oTUFDKQorCisjaW5jbHVkZSAiQ0dEaXNwbGF5U3Ry
ZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZS5oIgorI2luY2x1ZGUgIkNHV2luZG93Q2FwdHVyZVNvdXJj
ZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNZWRpYVNhbXBsZUFWRk9iakMu
aCIKKyNpbmNsdWRlICJQaXhlbEJ1ZmZlckNvbmZvcm1lckNWLmgiCisjaW5jbHVkZSAiUmVhbHRp
bWVNZWRpYVNvdXJjZS5oIgorI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuaCIK
KyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJSZWFs
dGltZVZpZGVvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiUmVtb3RlVmlkZW9TYW1wbGUuaCIKKyNp
bmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPENvcmVNZWRpYS9DTVN5bmMuaD4KKyNpbmNsdWRl
IDxtYWNoL21hY2hfdGltZS5oPgorI2luY2x1ZGUgPHBhbC9hdmZvdW5kYXRpb24vTWVkaWFUaW1l
QVZGb3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8cGFsL3NwaS9jZi9Db3JlQXVkaW9TUEkuaD4KKyNp
bmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgorI2luY2x1ZGUgPHBhbC9zcGkv
Y29jb2EvSU9TdXJmYWNlU1BJLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCisjaW5j
bHVkZSAiQ29yZVZpZGVvU29mdExpbmsuaCIKKyNpbmNsdWRlIDxwYWwvY2YvQ29yZU1lZGlhU29m
dExpbmsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDYXB0dXJlU291cmNlT3JFcnJvciBE
aXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Y3JlYXRlKGNvbnN0IENhcHR1cmVEZXZpY2UmIGRldmlj
ZSwgY29uc3QgTWVkaWFDb25zdHJhaW50cyogY29uc3RyYWludHMpCit7CisgICAgc3dpdGNoIChk
ZXZpY2UudHlwZSgpKSB7CisgICAgY2FzZSBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpTY3Jl
ZW46CisgICAgICAgIHJldHVybiBjcmVhdGUoQ0dEaXNwbGF5U3RyZWFtU2NyZWVuQ2FwdHVyZVNv
dXJjZTo6Y3JlYXRlKGRldmljZS5wZXJzaXN0ZW50SWQoKSksIGRldmljZSwgY29uc3RyYWludHMp
OworICAgIGNhc2UgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6V2luZG93OgorICAgICAgICBy
ZXR1cm4gY3JlYXRlKENHV2luZG93Q2FwdHVyZVNvdXJjZTo6Y3JlYXRlKGRldmljZS5wZXJzaXN0
ZW50SWQoKSksIGRldmljZSwgY29uc3RyYWludHMpOworICAgIGNhc2UgQ2FwdHVyZURldmljZTo6
RGV2aWNlVHlwZTo6TWljcm9waG9uZToKKyAgICBjYXNlIENhcHR1cmVEZXZpY2U6OkRldmljZVR5
cGU6OlNwZWFrZXI6CisgICAgY2FzZSBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpDYW1lcmE6
CisgICAgY2FzZSBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpVbmtub3duOgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJu
IHsgfTsKK30KKworQ2FwdHVyZVNvdXJjZU9yRXJyb3IgRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6
OmNyZWF0ZShFeHBlY3RlZDxVbmlxdWVSZWY8Q2FwdHVyZXI+LCBTdHJpbmc+JiYgY2FwdHVyZXIs
IGNvbnN0IENhcHR1cmVEZXZpY2UmIGRldmljZSwgY29uc3QgTWVkaWFDb25zdHJhaW50cyogY29u
c3RyYWludHMpCit7CisgICAgaWYgKCFjYXB0dXJlci5oYXNfdmFsdWUoKSkKKyAgICAgICAgcmV0
dXJuIENhcHR1cmVTb3VyY2VPckVycm9yIHsgV1RGTW92ZShjYXB0dXJlci5lcnJvcigpKSB9Owor
CisgICAgYXV0byBzb3VyY2UgPSBhZG9wdFJlZigqbmV3IERpc3BsYXlDYXB0dXJlU291cmNlTWFj
KFdURk1vdmUoY2FwdHVyZXIudmFsdWUoKSksIFN0cmluZyB7IGRldmljZS5sYWJlbCgpIH0pKTsK
KyAgICBpZiAoY29uc3RyYWludHMpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBzb3VyY2UtPmFw
cGx5Q29uc3RyYWludHMoKmNvbnN0cmFpbnRzKTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAg
ICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpLmJhZENvbnN0cmFpbnQpOworICAg
IH0KKworICAgIHJldHVybiBDYXB0dXJlU291cmNlT3JFcnJvcihXVEZNb3ZlKHNvdXJjZSkpOwor
fQorCitEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMoVW5p
cXVlUmVmPENhcHR1cmVyPiYmIGNhcHR1cmVyLCBTdHJpbmcmJiBuYW1lKQorICAgIDogUmVhbHRp
bWVNZWRpYVNvdXJjZShUeXBlOjpWaWRlbywgV1RGTW92ZShuYW1lKSkKKyAgICAsIG1fY2FwdHVy
ZXIoV1RGTW92ZShjYXB0dXJlcikpCisgICAgLCBtX3RpbWVyKFJ1bkxvb3A6OmN1cnJlbnQoKSwg
dGhpcywgJkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjplbWl0RnJhbWUpCit7Cit9CisKK0Rpc3Bs
YXlDYXB0dXJlU291cmNlTWFjOjp+RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMoKQoreworfQorCitj
b25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBEaXNwbGF5Q2FwdHVyZVNvdXJj
ZU1hYzo6Y2FwYWJpbGl0aWVzKCkKK3sKKyAgICBpZiAoIW1fY2FwYWJpbGl0aWVzKSB7CisgICAg
ICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzKHNldHRpbmdz
KCkuc3VwcG9ydGVkQ29uc3RyYWludHMoKSk7CisKKyAgICAgICAgLy8gRklYTUU6IHdoYXQgc2hv
dWxkIHRoZXNlIGJlPworICAgICAgICBjYXBhYmlsaXRpZXMuc2V0V2lkdGgoQ2FwYWJpbGl0eVZh
bHVlT3JSYW5nZSgxLCAzODQwKSk7CisgICAgICAgIGNhcGFiaWxpdGllcy5zZXRIZWlnaHQoQ2Fw
YWJpbGl0eVZhbHVlT3JSYW5nZSgxLCAyMTYwKSk7CisgICAgICAgIGNhcGFiaWxpdGllcy5zZXRG
cmFtZVJhdGUoQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSguMDEsIDMwLjApKTsKKworICAgICAgICBt
X2NhcGFiaWxpdGllcyA9IFdURk1vdmUoY2FwYWJpbGl0aWVzKTsKKyAgICB9CisgICAgcmV0dXJu
IG1fY2FwYWJpbGl0aWVzLnZhbHVlKCk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VT
ZXR0aW5ncyYgRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OnNldHRpbmdzKCkKK3sKKyAgICBpZiAo
IW1fY3VycmVudFNldHRpbmdzKSB7CisgICAgICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5n
cyBzZXR0aW5nczsKKyAgICAgICAgc2V0dGluZ3Muc2V0RnJhbWVSYXRlKGZyYW1lUmF0ZSgpKTsK
KworICAgICAgICBhdXRvIHNpemUgPSB0aGlzLT5zaXplKCk7CisgICAgICAgIHNldHRpbmdzLnNl
dFdpZHRoKHNpemUud2lkdGgoKSk7CisgICAgICAgIHNldHRpbmdzLnNldEhlaWdodChzaXplLmhl
aWdodCgpKTsKKworICAgICAgICBzZXR0aW5ncy5zZXREaXNwbGF5U3VyZmFjZShtX2NhcHR1cmVy
LT5zdXJmYWNlVHlwZSgpKTsKKyAgICAgICAgc2V0dGluZ3Muc2V0TG9naWNhbFN1cmZhY2UoZmFs
c2UpOworCisgICAgICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cyBz
dXBwb3J0ZWRDb25zdHJhaW50czsKKyAgICAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3Vw
cG9ydHNGcmFtZVJhdGUodHJ1ZSk7CisgICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1
cHBvcnRzV2lkdGgodHJ1ZSk7CisgICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBv
cnRzSGVpZ2h0KHRydWUpOworICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0
c0Rpc3BsYXlTdXJmYWNlKHRydWUpOworICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRT
dXBwb3J0c0xvZ2ljYWxTdXJmYWNlKHRydWUpOworCisgICAgICAgIHNldHRpbmdzLnNldFN1cHBv
cnRlZENvbnN0cmFpbnRzKHN1cHBvcnRlZENvbnN0cmFpbnRzKTsKKworICAgICAgICBtX2N1cnJl
bnRTZXR0aW5ncyA9IFdURk1vdmUoc2V0dGluZ3MpOworICAgIH0KKyAgICByZXR1cm4gbV9jdXJy
ZW50U2V0dGluZ3MudmFsdWUoKTsKK30KKwordm9pZCBEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6
c2V0dGluZ3NEaWRDaGFuZ2UoT3B0aW9uU2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6
RmxhZz4gc2V0dGluZ3MpCit7CisgICAgaWYgKHNldHRpbmdzLmNvbnRhaW5zKFJlYWx0aW1lTWVk
aWFTb3VyY2VTZXR0aW5nczo6RmxhZzo6RnJhbWVSYXRlKSAmJiBtX3RpbWVyLmlzQWN0aXZlKCkp
CisgICAgICAgIG1fdGltZXIuc3RhcnRSZXBlYXRpbmcoMV9zIC8gZnJhbWVSYXRlKCkpOworCisg
ICAgaWYgKHNldHRpbmdzLmNvbnRhaW5zQW55KHsgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdz
OjpGbGFnOjpXaWR0aCwgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnOjpIZWlnaHQg
fSkpCisgICAgICAgIG1fYnVmZmVyQXR0cmlidXRlcyA9IG51bGxwdHI7CisKKyAgICBtX2N1cnJl
bnRTZXR0aW5ncyA9IHsgfTsKK30KKwordm9pZCBEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6c3Rh
cnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBtX3N0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5v
dygpOworICAgIG1fdGltZXIuc3RhcnRSZXBlYXRpbmcoMV9zIC8gZnJhbWVSYXRlKCkpOworCisg
ICAgaWYgKCFtX2NhcHR1cmVyLT5zdGFydChmcmFtZVJhdGUoKSkpCisgICAgICAgIGNhcHR1cmVG
YWlsZWQoKTsKK30KKwordm9pZCBEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6c3RvcFByb2R1Y2lu
Z0RhdGEoKQoreworICAgIG1fdGltZXIuc3RvcCgpOworICAgIG1fZWxhcHNlZFRpbWUgKz0gTW9u
b3RvbmljVGltZTo6bm93KCkgLSBtX3N0YXJ0VGltZTsKKyAgICBtX3N0YXJ0VGltZSA9IE1vbm90
b25pY1RpbWU6Om5hbigpOworCisgICAgbV9jYXB0dXJlci0+c3RvcCgpOworfQorCitTZWNvbmRz
IERpc3BsYXlDYXB0dXJlU291cmNlTWFjOjplbGFwc2VkVGltZSgpCit7CisgICAgaWYgKHN0ZDo6
aXNuYW4obV9zdGFydFRpbWUpKQorICAgICAgICByZXR1cm4gbV9lbGFwc2VkVGltZTsKKworICAg
IHJldHVybiBtX2VsYXBzZWRUaW1lICsgKE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9zdGFydFRp
bWUpOworfQorCisvLyBXZSBrZWVwIHRoZSBhc3BlY3QgcmF0aW8gb2YgdGhlIGludHJpbnNpYyBz
aXplIGZvciB0aGUgZnJhbWUgc2l6ZSBhcyBnZXREaXNwbGF5TWVkaWEgYWxsb3dzIG1heCBjb25z
dHJhaW50cyBvbmx5Lgordm9pZCBEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6dXBkYXRlRnJhbWVT
aXplKCkKK3sKKyAgICBhdXRvIGludHJpbnNpY1NpemUgPSB0aGlzLT5pbnRyaW5zaWNTaXplKCk7
CisKKyAgICBhdXRvIGZyYW1lU2l6ZSA9IHNpemUoKTsKKyAgICBpZiAoIWZyYW1lU2l6ZS5oZWln
aHQoKSkKKyAgICAgICAgZnJhbWVTaXplLnNldEhlaWdodChpbnRyaW5zaWNTaXplLmhlaWdodCgp
KTsKKyAgICBpZiAoIWZyYW1lU2l6ZS53aWR0aCgpKQorICAgICAgICBmcmFtZVNpemUuc2V0V2lk
dGgoaW50cmluc2ljU2l6ZS53aWR0aCgpKTsKKworICAgIGF1dG8gbWF4SGVpZ2h0ID0gc3RkOjpt
aW4oZnJhbWVTaXplLmhlaWdodCgpLCBpbnRyaW5zaWNTaXplLmhlaWdodCgpKTsKKyAgICBhdXRv
IG1heFdpZHRoID0gc3RkOjptaW4oZnJhbWVTaXplLndpZHRoKCksIGludHJpbnNpY1NpemUud2lk
dGgoKSk7CisKKyAgICBhdXRvIGhlaWdodEZvck1heFdpZHRoID0gbWF4V2lkdGggKiBpbnRyaW5z
aWNTaXplLmhlaWdodCgpIC8gaW50cmluc2ljU2l6ZS53aWR0aCgpOworICAgIGF1dG8gd2lkdGhG
b3JNYXhIZWlnaHQgPSBtYXhIZWlnaHQgKiBpbnRyaW5zaWNTaXplLndpZHRoKCkgLyBpbnRyaW5z
aWNTaXplLmhlaWdodCgpOworCisgICAgaWYgKGhlaWdodEZvck1heFdpZHRoIDw9IG1heEhlaWdo
dCkgeworICAgICAgICBzZXRTaXplKHsgbWF4V2lkdGgsIGhlaWdodEZvck1heFdpZHRoIH0pOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICh3aWR0aEZvck1heEhlaWdodCA8PSBtYXhX
aWR0aCkgeworICAgICAgICBzZXRTaXplKHsgd2lkdGhGb3JNYXhIZWlnaHQsIG1heEhlaWdodCB9
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzZXRTaXplKGludHJpbnNpY1NpemUpOwor
fQorCit2b2lkIERpc3BsYXlDYXB0dXJlU291cmNlTWFjOjplbWl0RnJhbWUoKQoreworICAgIGlm
IChtdXRlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1faW1hZ2VUcmFuc2ZlclNl
c3Npb24pCisgICAgICAgIG1faW1hZ2VUcmFuc2ZlclNlc3Npb24gPSBJbWFnZVRyYW5zZmVyU2Vz
c2lvblZUOjpjcmVhdGUocHJlZmVyZWRQaXhlbEJ1ZmZlckZvcm1hdCgpKTsKKworICAgIGF1dG8g
c2FtcGxlVGltZSA9IE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZSgoZWxhcHNlZFRpbWUoKSAr
IDEwMF9tcykuc2Vjb25kcygpKTsKKworICAgIGF1dG8gZnJhbWUgPSBtX2NhcHR1cmVyLT5nZW5l
cmF0ZUZyYW1lKCk7CisgICAgYXV0byBpbWFnZVNpemUgPSBXVEY6OnN3aXRjaE9uKGZyYW1lLAor
ICAgICAgICBbXShSZXRhaW5QdHI8SU9TdXJmYWNlUmVmPiBzdXJmYWNlKSAtPiBJbnRTaXplIHsK
KyAgICAgICAgICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9Owor
CisgICAgICAgICAgICByZXR1cm4gSW50U2l6ZShJT1N1cmZhY2VHZXRXaWR0aChzdXJmYWNlLmdl
dCgpKSwgSU9TdXJmYWNlR2V0SGVpZ2h0KHN1cmZhY2UuZ2V0KCkpKTsKKyAgICAgICAgfSwKKyAg
ICAgICAgW10oUmVmUHRyPE5hdGl2ZUltYWdlPiBpbWFnZSkgLT4gSW50U2l6ZSB7CisgICAgICAg
ICAgICBpZiAoIWltYWdlKQorICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAg
ICAgIHJldHVybiBpbWFnZS0+c2l6ZSgpOworICAgICAgICB9CisgICAgKTsKKworICAgIGlmIChp
bWFnZVNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaW50cmluc2lj
U2l6ZSgpICE9IGltYWdlU2l6ZSkgeworICAgICAgICBzZXRJbnRyaW5zaWNTaXplKGltYWdlU2l6
ZSk7CisgICAgICAgIHVwZGF0ZUZyYW1lU2l6ZSgpOworICAgIH0KKworICAgIGF1dG8gc2FtcGxl
ID0gV1RGOjpzd2l0Y2hPbihmcmFtZSwKKyAgICAgICAgW3RoaXMsIHNhbXBsZVRpbWVdKFJldGFp
blB0cjxJT1N1cmZhY2VSZWY+IHN1cmZhY2UpIC0+IFJlZlB0cjxNZWRpYVNhbXBsZT4geworICAg
ICAgICAgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgICAgICAgICByZXR1cm4gbV9pbWFnZVRyYW5zZmVyU2Vzc2lvbi0+Y3JlYXRlTWVkaWFT
YW1wbGUoc3VyZmFjZS5nZXQoKSwgc2FtcGxlVGltZSwgc2l6ZSgpKTsKKyAgICAgICAgfSwKKyAg
ICAgICAgW3RoaXMsIHNhbXBsZVRpbWVdKFJlZlB0cjxOYXRpdmVJbWFnZT4gaW1hZ2UpIC0+IFJl
ZlB0cjxNZWRpYVNhbXBsZT4geworICAgICAgICAgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICAgICAgcmV0dXJuIG1faW1hZ2VUcmFuc2Zl
clNlc3Npb24tPmNyZWF0ZU1lZGlhU2FtcGxlKGltYWdlLT5wbGF0Zm9ybUltYWdlKCkuZ2V0KCks
IHNhbXBsZVRpbWUsIHNpemUoKSk7CisgICAgICAgIH0KKyAgICApOworCisgICAgaWYgKCFzYW1w
bGUpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICB2aWRlb1NhbXBsZUF2YWlsYWJsZSgqc2FtcGxlLmdldCgpKTsKK30KKwordm9p
ZCBEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Q2FwdHVyZXI6OnNldExvZ2dlcihjb25zdCBMb2dn
ZXImIG5ld0xvZ2dlciwgY29uc3Qgdm9pZCogbmV3TG9nSWRlbnRpZmllcikKK3sKKyAgICBtX2xv
Z2dlciA9ICZuZXdMb2dnZXI7CisgICAgbV9sb2dJZGVudGlmaWVyID0gbmV3TG9nSWRlbnRpZmll
cjsKK30KKworV1RGTG9nQ2hhbm5lbCYgRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OkNhcHR1cmVy
Ojpsb2dDaGFubmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gTG9nV2ViUlRDOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBQ
TEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmU0NmFiOGQ5MzhhNjI0ODEyMjYzMDVhYTIwZDk1ODAwMWIxOTgzNTMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1
cmVTb3VyY2VNYWMuaApAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKSAmJiBQTEFURk9STShNQUMpCisKKyNpbmNsdWRlICJDYXB0dXJlRGV2aWNlLmgi
CisjaW5jbHVkZSAiSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oIgorI2luY2x1ZGUgIlJlYWx0aW1l
TWVkaWFTb3VyY2UuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorI2luY2x1ZGUgPHd0Zi9Vbmlx
dWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordHlwZWRlZiBzdHJ1
Y3QgQ0dJbWFnZSAqQ0dJbWFnZVJlZjsKK3R5cGVkZWYgc3RydWN0IF9fQ1ZCdWZmZXIgKkNWUGl4
ZWxCdWZmZXJSZWY7Cit0eXBlZGVmIHN0cnVjdCBfX0lPU3VyZmFjZSAqSU9TdXJmYWNlUmVmOwor
CituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIE1lZGlhVGltZTsKK30KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBDYXB0dXJlRGV2aWNlSW5mbzsKK2NsYXNzIEltYWdlVHJhbnNmZXJTZXNz
aW9uVlQ7CitjbGFzcyBQaXhlbEJ1ZmZlckNvbmZvcm1lckNWOworCitjbGFzcyBEaXNwbGF5Q2Fw
dHVyZVNvdXJjZU1hYyBmaW5hbCA6IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlIHsKK3B1Ymxp
YzoKKyAgICB1c2luZyBEaXNwbGF5RnJhbWVUeXBlID0gV1RGOjpWYXJpYW50PFJlZlB0cjxOYXRp
dmVJbWFnZT4sIFJldGFpblB0cjxJT1N1cmZhY2VSZWY+PjsKKworICAgIGNsYXNzIENhcHR1cmVy
IDogcHVibGljIExvZ2dlckhlbHBlciB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+Q2FwdHVyZXIoKSA9IGRlZmF1bHQ7CisK
KyAgICAgICAgdmlydHVhbCBib29sIHN0YXJ0KGZsb2F0IGZyYW1lUmF0ZSkgPSAwOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgc3RvcCgpID0gMDsKKyAgICAgICAgdmlydHVhbCBEaXNwbGF5RnJhbWVU
eXBlIGdlbmVyYXRlRnJhbWUoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgQ2FwdHVyZURldmljZTo6
RGV2aWNlVHlwZSBkZXZpY2VUeXBlKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIFJlYWx0
aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RGlzcGxheVN1cmZhY2VUeXBlIHN1cmZhY2VUeXBlKCkg
Y29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29uZmlndXJhdGlvbihmbG9h
dCBmcmFtZVJhdGUpID0gMDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0TG9nZ2VyKGNvbnN0
IExvZ2dlciYsIGNvbnN0IHZvaWQqKTsKKyAgICAgICAgY29uc3QgTG9nZ2VyKiBsb2dnZXJQdHIo
KSBjb25zdCB7IHJldHVybiBtX2xvZ2dlci5nZXQoKTsgfQorICAgICAgICBjb25zdCBMb2dnZXIm
IGxvZ2dlcigpIGNvbnN0IGZpbmFsIHsgQVNTRVJUKG1fbG9nZ2VyKTsgcmV0dXJuICptX2xvZ2dl
ci5nZXQoKTsgfQorICAgICAgICBjb25zdCB2b2lkKiBsb2dJZGVudGlmaWVyKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9sb2dJZGVudGlmaWVyOyB9CisgICAgICAgIFdURkxvZ0NoYW5uZWwmIGxv
Z0NoYW5uZWwoKSBjb25zdCBmaW5hbDsKKworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxj
b25zdCBMb2dnZXI+IG1fbG9nZ2VyOworICAgICAgICBjb25zdCB2b2lkKiBtX2xvZ0lkZW50aWZp
ZXI7CisgICAgfTsKKworICAgIHN0YXRpYyBDYXB0dXJlU291cmNlT3JFcnJvciBjcmVhdGUoY29u
c3QgQ2FwdHVyZURldmljZSYsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMqKTsKKyAgICBzdGF0aWMg
Q2FwdHVyZVNvdXJjZU9yRXJyb3IgY3JlYXRlKEV4cGVjdGVkPFVuaXF1ZVJlZjxDYXB0dXJlcj4s
IFN0cmluZz4mJiwgY29uc3QgQ2FwdHVyZURldmljZSYsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMq
KTsKKworICAgIFNlY29uZHMgZWxhcHNlZFRpbWUoKTsKKyAgICB2b2lkIHVwZGF0ZUZyYW1lU2l6
ZSgpOworCitwcml2YXRlOgorICAgIERpc3BsYXlDYXB0dXJlU291cmNlTWFjKFVuaXF1ZVJlZjxD
YXB0dXJlcj4mJiwgU3RyaW5nJiYgbmFtZSk7CisgICAgfkRpc3BsYXlDYXB0dXJlU291cmNlTWFj
KCk7CisKKyAgICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIGZpbmFsOworICAgIHZvaWQgc3Rv
cFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsKKyAgICB2b2lkIHNldHRpbmdzRGlkQ2hhbmdlKE9wdGlv
blNldDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkZsYWc+KSBmaW5hbDsKKyAgICBib29s
IGlzQ2FwdHVyZVNvdXJjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICBjb25z
dCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBjYXBhYmlsaXRpZXMoKSBmaW5hbDsK
KyAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIHNldHRpbmdzKCkgZmluYWw7
CisgICAgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZSBkZXZpY2VUeXBlKCkgY29uc3QgeyByZXR1
cm4gbV9jYXB0dXJlci0+ZGV2aWNlVHlwZSgpOyB9CisgICAgdm9pZCBjb21taXRDb25maWd1cmF0
aW9uKCkgZmluYWwgeyByZXR1cm4gbV9jYXB0dXJlci0+Y29tbWl0Q29uZmlndXJhdGlvbihmcmFt
ZVJhdGUoKSk7IH0KKworICAgIGNvbnN0IGNoYXIqIGxvZ0NsYXNzTmFtZSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuICJEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYyI7IH0KKworICAgIHZvaWQgZW1pdEZy
YW1lKCk7CisKKyAgICBVbmlxdWVSZWY8Q2FwdHVyZXI+IG1fY2FwdHVyZXI7CisgICAgc3RkOjpv
cHRpb25hbDxSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzPiBtX2NhcGFiaWxpdGllczsK
KyAgICBzdGQ6Om9wdGlvbmFsPFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncz4gbV9jdXJyZW50
U2V0dGluZ3M7CisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzIG1f
c3VwcG9ydGVkQ29uc3RyYWludHM7CisKKyAgICBNb25vdG9uaWNUaW1lIG1fc3RhcnRUaW1lIHsg
TW9ub3RvbmljVGltZTo6bmFuKCkgfTsKKyAgICBTZWNvbmRzIG1fZWxhcHNlZFRpbWUgeyAwX3Mg
fTsKKworICAgIFJldGFpblB0cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPiBtX2J1ZmZlckF0dHJp
YnV0ZXM7CisgICAgUnVuTG9vcDo6VGltZXI8RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM+IG1fdGlt
ZXI7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VUcmFuc2ZlclNlc3Npb25WVD4gbV9pbWFn
ZVRyYW5zZmVyU2Vzc2lvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9S
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmNwcAppbmRleCAzZTNhYTRlZDg2ZDViOGZjMjA4
M2UyZTVkZjgwYmY5ZGVkMWI4YzEwLi5jZTQ5MDkxMDNlNmNjYzhjYTI0NGFlN2JmNTg5Yzk1MzI1
NDE5YTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuY3Bw
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMSBBcHBs
ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zNiwxMCArMzYsOSBAQAogI2luY2x1ZGUgIkFWVmlkZW9DYXB0dXJlU291cmNlLmgi
CiAjaW5jbHVkZSAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5oIgogI2luY2x1ZGUgIkRpc3BsYXlD
YXB0dXJlTWFuYWdlckNvY29hLmgiCisjaW5jbHVkZSAiRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMu
aCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1Qcml2YXRlLmgi
Ci0jaW5jbHVkZSAiU2NyZWVuRGlzcGxheUNhcHR1cmVyTWFjLmgiCi0jaW5jbHVkZSAiV2luZG93
RGlzcGxheUNhcHR1cmVyTWFjLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNjUsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIFVOVVNF
RF9QQVJBTShjb25zdHJhaW50cyk7CiAjZW5kaWYKICNpZiBQTEFURk9STShNQUMpCi0gICAgICAg
IHJldHVybiBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpjcmVhdGUoZGV2aWNlLCBjb25zdHJh
aW50cyk7CisgICAgICAgIHJldHVybiBEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Y3JlYXRlKGRl
dmljZSwgY29uc3RyYWludHMpOwogI2Vsc2UKICAgICAgICAgcmV0dXJuIHsgfTsKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVl
bkRpc3BsYXlDYXB0dXJlck1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlck1hYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4NTRjYWJkNmY5YWRhNjM3YzgxOTY2MzAyODk1NmFmYWU4N2U2ZjY4Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9TY3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWMuaAorKysgL2Rl
di9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pICYmIFBMQVRGT1JNKE1BQykKLQotI2luY2x1ZGUgIkRpc3BsYXlDYXB0dXJlU291cmNlQ29j
b2EuaCIKLSNpbmNsdWRlICJJT1N1cmZhY2UuaCIKLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dE
aXNwbGF5Q29uZmlndXJhdGlvbi5oPgotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0Rpc3BsYXlT
dHJlYW0uaD4KLSNpbmNsdWRlIDx3dGYvTG9jay5oPgotI2luY2x1ZGUgPHd0Zi9PU09iamVjdFB0
ci5oPgotCi10eXBlZGVmIHN0cnVjdCBfX0NWQnVmZmVyICpDVlBpeGVsQnVmZmVyUmVmOwotdHlw
ZWRlZiBzdHJ1Y3Qgb3BhcXVlQ01TYW1wbGVCdWZmZXIgKkNNU2FtcGxlQnVmZmVyUmVmOwotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYyBmaW5h
bCA6IHB1YmxpYyBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpDYXB0dXJlciwgcHVibGljIENh
bk1ha2VXZWFrUHRyPFNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYz4gewotcHVibGljOgotICAgIHN0
YXRpYyBFeHBlY3RlZDxVbmlxdWVSZWY8RGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6Q2FwdHVy
ZXI+LCBTdHJpbmc+IGNyZWF0ZShjb25zdCBTdHJpbmcmKTsKLQotICAgIGV4cGxpY2l0IFNjcmVl
bkRpc3BsYXlDYXB0dXJlck1hYyh1aW50MzJfdCk7Ci0gICAgflNjcmVlbkRpc3BsYXlDYXB0dXJl
ck1hYygpOwotCi0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8Q2FwdHVyZURldmljZT4gc2NyZWVu
Q2FwdHVyZURldmljZVdpdGhQZXJzaXN0ZW50SUQoY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGlj
IHZvaWQgc2NyZWVuQ2FwdHVyZURldmljZXMoVmVjdG9yPENhcHR1cmVEZXZpY2U+Jik7Ci0KLXBy
aXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgZGlzcGxheVJlY29uZmlndXJhdGlvbkNhbGxCYWNrKENH
RGlyZWN0RGlzcGxheUlELCBDR0Rpc3BsYXlDaGFuZ2VTdW1tYXJ5RmxhZ3MsIHZvaWQqKTsKLQot
ICAgIC8vIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OkNhcHR1cmVyCi0gICAgYm9vbCBzdGFy
dChmbG9hdCBmcmFtZVJhdGUpIGZpbmFsOwotICAgIHZvaWQgc3RvcCgpIGZpbmFsOwotICAgIERp
c3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OkRpc3BsYXlGcmFtZVR5cGUgZ2VuZXJhdGVGcmFtZSgp
IGZpbmFsOwotICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RGlzcGxheVN1cmZhY2VU
eXBlIHN1cmZhY2VUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJj
ZVNldHRpbmdzOjpEaXNwbGF5U3VyZmFjZVR5cGU6Ok1vbml0b3I7IH0KLSAgICB2b2lkIGNvbW1p
dENvbmZpZ3VyYXRpb24oZmxvYXQgZnJhbWVSYXRlKSBmaW5hbDsKLSAgICBDYXB0dXJlRGV2aWNl
OjpEZXZpY2VUeXBlIGRldmljZVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBDYXB0dXJlRGV2
aWNlOjpEZXZpY2VUeXBlOjpTY3JlZW47IH0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAg
ICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiU2NyZWVu
RGlzcGxheUNhcHR1cmVyTWFjIjsgfQotI2VuZGlmCi0KLSAgICB2b2lkIGRpc3BsYXlXYXNSZWNv
bmZpZ3VyZWQoQ0dEaXJlY3REaXNwbGF5SUQsIENHRGlzcGxheUNoYW5nZVN1bW1hcnlGbGFncyk7
Ci0gICAgYm9vbCBjcmVhdGVEaXNwbGF5U3RyZWFtKGZsb2F0IGZyYW1lUmF0ZSk7Ci0gICAgYm9v
bCBzdGFydERpc3BsYXlTdHJlYW0oZmxvYXQgZnJhbWVSYXRlKTsKLQotICAgIGNsYXNzIERpc3Bs
YXlTdXJmYWNlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIERpc3BsYXlTdXJmYWNlKCkgPSBkZWZh
dWx0OwotICAgICAgICBleHBsaWNpdCBEaXNwbGF5U3VyZmFjZShJT1N1cmZhY2VSZWYgc3VyZmFj
ZSkKLSAgICAgICAgICAgIDogbV9zdXJmYWNlKHN1cmZhY2UpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmIChtX3N1cmZhY2UpCi0gICAgICAgICAgICAgICAgSU9TdXJmYWNlSW5jcmVtZW50VXNl
Q291bnQobV9zdXJmYWNlLmdldCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIH5EaXNwbGF5U3Vy
ZmFjZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX3N1cmZhY2UpCi0gICAgICAgICAg
ICAgICAgSU9TdXJmYWNlRGVjcmVtZW50VXNlQ291bnQobV9zdXJmYWNlLmdldCgpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIERpc3BsYXlTdXJmYWNlJiBvcGVyYXRvcj0oSU9TdXJmYWNlUmVmIHN1
cmZhY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX3N1cmZhY2UpCi0gICAgICAgICAg
ICAgICAgSU9TdXJmYWNlRGVjcmVtZW50VXNlQ291bnQobV9zdXJmYWNlLmdldCgpKTsKLSAgICAg
ICAgICAgIGlmIChzdXJmYWNlKQotICAgICAgICAgICAgICAgIElPU3VyZmFjZUluY3JlbWVudFVz
ZUNvdW50KHN1cmZhY2UpOwotICAgICAgICAgICAgbV9zdXJmYWNlID0gc3VyZmFjZTsKLSAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIElPU3VyZmFjZVJlZiBp
b1N1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2UuZ2V0KCk7IH0KLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIFJldGFpblB0cjxJT1N1cmZhY2VSZWY+IG1fc3VyZmFjZTsKLSAgICB9Owot
Ci0gICAgdm9pZCBuZXdGcmFtZShDR0Rpc3BsYXlTdHJlYW1GcmFtZVN0YXR1cywgRGlzcGxheVN1
cmZhY2UmJik7Ci0KLSAgICBEaXNwbGF5U3VyZmFjZSBtX2N1cnJlbnRGcmFtZTsKLSAgICBSZXRh
aW5QdHI8Q0dEaXNwbGF5U3RyZWFtUmVmPiBtX2Rpc3BsYXlTdHJlYW07Ci0gICAgT1NPYmplY3RQ
dHI8ZGlzcGF0Y2hfcXVldWVfdD4gbV9jYXB0dXJlUXVldWU7Ci0KLSAgICB1aW50MzJfdCBtX2Rp
c3BsYXlJRCB7IDAgfTsKLSAgICBib29sIG1faXNSdW5uaW5nIHsgZmFsc2UgfTsKLSAgICBib29s
IG1fb2JzZXJ2aW5nRGlzcGxheUNoYW5nZXMgeyBmYWxzZSB9OwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgUExBVEZPUk0o
TUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L1NjcmVlbkRpc3BsYXlDYXB0dXJlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9TY3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWMubW0KZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDJkY2U1NDFjY2Y3ODAyYmNhYTNhMzcxNmI1MmExMDRiY2QxNmFmMjEu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlck1hYy5t
bQorKysgL2Rldi9udWxsCkBAIC0xLDMyMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiU2NyZWVuRGlzcGxheUNhcHR1cmVyTWFjLmgiCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFN
KSAmJiBQTEFURk9STShNQUMpCi0KLSNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW1w
b3J0ICJJbWFnZUJ1ZmZlci5oIgotI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiTWVkaWFD
b25zdHJhaW50cy5oIgotI2ltcG9ydCAiTWVkaWFTYW1wbGVBVkZPYmpDLmgiCi0jaW1wb3J0ICJO
b3RJbXBsZW1lbnRlZC5oIgotI2ltcG9ydCAiUGxhdGZvcm1MYXllci5oIgotI2ltcG9ydCAiUGxh
dGZvcm1TY3JlZW4uaCIKLSNpbXBvcnQgIlJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncy5oIgot
I2ltcG9ydCAiUmVhbHRpbWVWaWRlb1V0aWxpdGllcy5oIgotI2ltcG9ydCA8d3RmL3RleHQvU3Ry
aW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oPgotCi0jaW1wb3J0ICJDb3JlVmlkZW9Tb2Z0TGluay5o
IgotCi1leHRlcm4gIkMiIHsKLXNpemVfdCBDR0Rpc3BsYXlNb2RlR2V0UGl4ZWxzV2lkZShDR0Rp
c3BsYXlNb2RlUmVmKTsKLXNpemVfdCBDR0Rpc3BsYXlNb2RlR2V0UGl4ZWxzSGlnaChDR0Rpc3Bs
YXlNb2RlUmVmKTsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgc3RkOjpvcHRp
b25hbDxDR0RpcmVjdERpc3BsYXlJRD4gdXBkYXRlRGlzcGxheUlEKENHRGlyZWN0RGlzcGxheUlE
IGRpc3BsYXlJRCkKLXsKLSAgICB1aW50MzJfdCBkaXNwbGF5Q291bnQgPSAwOwotICAgIGF1dG8g
ZXJyID0gQ0dHZXRBY3RpdmVEaXNwbGF5TGlzdCgwLCBudWxscHRyLCAmZGlzcGxheUNvdW50KTsK
LSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIkNHR2V0QWN0aXZl
RGlzcGxheUxpc3QoKSByZXR1cm5lZCBlcnJvciAlZCB3aGVuIHRyeWluZyB0byBnZXQgZGlzcGxh
eSBjb3VudCIsIHN0YXRpY19jYXN0PGludD4oZXJyKSk7Ci0gICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7Ci0gICAgfQotCi0gICAgaWYgKCFkaXNwbGF5Q291bnQpIHsKLSAgICAgICAgUkVMRUFT
RV9MT0coV2ViUlRDLCAiQ0dHZXRBY3RpdmVEaXNwbGF5TGlzdCgpIHJldHVybmVkIGEgZGlzcGxh
eSBjb3VudCBvZiAwIik7Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgfQotCi0g
ICAgVmVjdG9yPENHRGlyZWN0RGlzcGxheUlEPiBhY3RpdmVEaXNwbGF5cyhkaXNwbGF5Q291bnQp
OwotICAgIGVyciA9IENHR2V0QWN0aXZlRGlzcGxheUxpc3QoZGlzcGxheUNvdW50LCBhY3RpdmVE
aXNwbGF5cy5kYXRhKCksICZkaXNwbGF5Q291bnQpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAg
UkVMRUFTRV9MT0coV2ViUlRDLCAiQ0dHZXRBY3RpdmVEaXNwbGF5TGlzdCgpIHJldHVybmVkIGVy
cm9yICVkIHdoZW4gdHJ5aW5nIHRvIGdldCB0aGUgYWN0aXZlIGRpc3BsYXkgbGlzdCIsIHN0YXRp
Y19jYXN0PGludD4oZXJyKSk7Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgfQot
Ci0gICAgYXV0byBkaXNwbGF5TWFzayA9IENHRGlzcGxheUlEVG9PcGVuR0xEaXNwbGF5TWFzayhk
aXNwbGF5SUQpOwotICAgIGZvciAoYXV0byBkaXNwbGF5IDogYWN0aXZlRGlzcGxheXMpIHsKLSAg
ICAgICAgaWYgKGRpc3BsYXlNYXNrID09IENHRGlzcGxheUlEVG9PcGVuR0xEaXNwbGF5TWFzayhk
aXNwbGF5KSkKLSAgICAgICAgICAgIHJldHVybiBkaXNwbGF5OwotICAgIH0KLQotICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7Ci19Ci0KLUV4cGVjdGVkPFVuaXF1ZVJlZjxEaXNwbGF5Q2FwdHVyZVNv
dXJjZUNvY29hOjpDYXB0dXJlcj4sIFN0cmluZz4gU2NyZWVuRGlzcGxheUNhcHR1cmVyTWFjOjpj
cmVhdGUoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCkKLXsKLSAgICBhdXRvIGRpc3BsYXlJRCA9IHBh
cnNlSW50ZWdlcjx1aW50MzJfdD4oZGV2aWNlSUQpOwotICAgIGlmICghZGlzcGxheUlEKQotICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludmFsaWQgZGlzcGxheSBkZXZpY2UgSUQiX3Mp
OwotICAgIGF1dG8gYWN0dWFsRGlzcGxheUlEID0gdXBkYXRlRGlzcGxheUlEKCpkaXNwbGF5SUQp
OwotICAgIGlmICghYWN0dWFsRGlzcGxheUlEKQotICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIkludmFsaWQgZGlzcGxheSBJRCJfcyk7Ci0gICAgcmV0dXJuIFVuaXF1ZVJlZjxEaXNwbGF5
Q2FwdHVyZVNvdXJjZUNvY29hOjpDYXB0dXJlcj4obWFrZVVuaXF1ZVJlZjxTY3JlZW5EaXNwbGF5
Q2FwdHVyZXJNYWM+KGFjdHVhbERpc3BsYXlJRC52YWx1ZSgpKSk7Ci19Ci0KLVNjcmVlbkRpc3Bs
YXlDYXB0dXJlck1hYzo6U2NyZWVuRGlzcGxheUNhcHR1cmVyTWFjKHVpbnQzMl90IGRpc3BsYXlJ
RCkKLSAgICA6IG1fZGlzcGxheUlEKGRpc3BsYXlJRCkKLXsKLX0KLQotU2NyZWVuRGlzcGxheUNh
cHR1cmVyTWFjOjp+U2NyZWVuRGlzcGxheUNhcHR1cmVyTWFjKCkKLXsKLSAgICBpZiAobV9vYnNl
cnZpbmdEaXNwbGF5Q2hhbmdlcykKLSAgICAgICAgQ0dEaXNwbGF5UmVtb3ZlUmVjb25maWd1cmF0
aW9uQ2FsbGJhY2soZGlzcGxheVJlY29uZmlndXJhdGlvbkNhbGxCYWNrLCB0aGlzKTsKLQotICAg
IG1fY3VycmVudEZyYW1lID0gbnVsbHB0cjsKLX0KLQotYm9vbCBTY3JlZW5EaXNwbGF5Q2FwdHVy
ZXJNYWM6OmNyZWF0ZURpc3BsYXlTdHJlYW0oZmxvYXQgZnJhbWVSYXRlKQotewotICAgIHN0YXRp
YyBjb25zdCBpbnQgc2NyZWVuUXVldWVNYXhpbXVtTGVuZ3RoID0gNjsKLQotICAgIEFMV0FZU19M
T0dfSUYobG9nZ2VyUHRyKCksIExPR0lERU5USUZJRVIpOwotCi0gICAgYXV0byBhY3R1YWxEaXNw
bGF5SUQgPSB1cGRhdGVEaXNwbGF5SUQobV9kaXNwbGF5SUQpOwotICAgIGlmICghYWN0dWFsRGlz
cGxheUlEKSB7Ci0gICAgICAgIEVSUk9SX0xPR19JRihsb2dnZXJQdHIoKSwgTE9HSURFTlRJRklF
UiwgImludmFsaWQgZGlzcGxheSBJRDogIiwgbV9kaXNwbGF5SUQpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1fZGlzcGxheUlEICE9IGFjdHVhbERpc3BsYXlJRC52
YWx1ZSgpKSB7Ci0gICAgICAgIG1fZGlzcGxheUlEID0gYWN0dWFsRGlzcGxheUlELnZhbHVlKCk7
Ci0gICAgICAgIEFMV0FZU19MT0dfSUYobG9nZ2VyUHRyKCksIExPR0lERU5USUZJRVIsICJkaXNw
bGF5IElEIGNoYW5nZWQgdG8gIiwgc3RhdGljX2Nhc3Q8aW50PihtX2Rpc3BsYXlJRCkpOwotICAg
ICAgICBtX2Rpc3BsYXlTdHJlYW0gPSBudWxscHRyOwotICAgIH0KLQotICAgIGlmICghbV9kaXNw
bGF5U3RyZWFtKSB7Ci0gICAgICAgIGF1dG8gZGlzcGxheU1vZGUgPSBhZG9wdENGKENHRGlzcGxh
eUNvcHlEaXNwbGF5TW9kZShtX2Rpc3BsYXlJRCkpOwotICAgICAgICBhdXRvIHNjcmVlbldpZHRo
ID0gQ0dEaXNwbGF5TW9kZUdldFBpeGVsc1dpZGUoZGlzcGxheU1vZGUuZ2V0KCkpOwotICAgICAg
ICBhdXRvIHNjcmVlbkhlaWdodCA9IENHRGlzcGxheU1vZGVHZXRQaXhlbHNIaWdoKGRpc3BsYXlN
b2RlLmdldCgpKTsKLSAgICAgICAgaWYgKCFzY3JlZW5XaWR0aCB8fCAhc2NyZWVuSGVpZ2h0KSB7
Ci0gICAgICAgICAgICBFUlJPUl9MT0dfSUYobG9nZ2VyUHRyKCksIExPR0lERU5USUZJRVIsICJ1
bmFibGUgdG8gZ2V0IHNjcmVlbiB3aWR0aC9oZWlnaHQiKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbV9jYXB0dXJlUXVldWUpCi0gICAgICAg
ICAgICBtX2NhcHR1cmVRdWV1ZSA9IGFkb3B0T1NPYmplY3QoZGlzcGF0Y2hfcXVldWVfY3JlYXRl
KCJTY3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWMgQ2FwdHVyZSBRdWV1ZSIsIERJU1BBVENIX1FVRVVF
X1NFUklBTCkpOwotCi0gICAgICAgIE5TRGljdGlvbmFyeSogc3RyZWFtT3B0aW9ucyA9IEB7Ci0g
ICAgICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ0dEaXNwbGF5U3RyZWFtTWluaW11bUZy
YW1lVGltZSA6IEAoMSAvIGZyYW1lUmF0ZSksCi0gICAgICAgICAgICAoX19icmlkZ2UgTlNTdHJp
bmcgKilrQ0dEaXNwbGF5U3RyZWFtUXVldWVEZXB0aCA6IEAoc2NyZWVuUXVldWVNYXhpbXVtTGVu
Z3RoKSwKLSAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDR0Rpc3BsYXlTdHJlYW1D
b2xvclNwYWNlIDogKF9fYnJpZGdlIGlkKXNSR0JDb2xvclNwYWNlUmVmKCksCi0gICAgICAgICAg
ICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ0dEaXNwbGF5U3RyZWFtU2hvd0N1cnNvciA6IEBZRVMs
Ci0gICAgICAgIH07Ci0KLSAgICAgICAgYXV0byB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlz
KTsKLSAgICAgICAgYXV0byBmcmFtZUF2YWlsYWJsZUJsb2NrID0gXihDR0Rpc3BsYXlTdHJlYW1G
cmFtZVN0YXR1cyBzdGF0dXMsIHVpbnQ2NF90IGRpc3BsYXlUaW1lLCBJT1N1cmZhY2VSZWYgZnJh
bWVTdXJmYWNlLCBDR0Rpc3BsYXlTdHJlYW1VcGRhdGVSZWYgdXBkYXRlUmVmKSB7Ci0KLSAgICAg
ICAgICAgIGlmICghZnJhbWVTdXJmYWNlIHx8ICFkaXNwbGF5VGltZSkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgICAgIHNpemVfdCBjb3VudDsKLSAgICAgICAgICAgIGF1dG8q
IHJlY3RzID0gQ0dEaXNwbGF5U3RyZWFtVXBkYXRlR2V0UmVjdHModXBkYXRlUmVmLCBrQ0dEaXNw
bGF5U3RyZWFtVXBkYXRlRGlydHlSZWN0cywgJmNvdW50KTsKLSAgICAgICAgICAgIGlmICghcmVj
dHMgfHwgIWNvdW50KQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgUnVu
TG9vcDo6bWFpbigpLmRpc3BhdGNoKFt3ZWFrVGhpcywgc3RhdHVzLCBmcmFtZSA9IERpc3BsYXlT
dXJmYWNlIHsgZnJhbWVTdXJmYWNlIH1dKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCF3ZWFrVGhpcykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAg
IHdlYWtUaGlzLT5uZXdGcmFtZShzdGF0dXMsIFdURk1vdmUoZnJhbWUpKTsKLSAgICAgICAgICAg
IH0pOwotICAgICAgICB9OwotCi0gICAgICAgIG1fZGlzcGxheVN0cmVhbSA9IGFkb3B0Q0YoQ0dE
aXNwbGF5U3RyZWFtQ3JlYXRlV2l0aERpc3BhdGNoUXVldWUobV9kaXNwbGF5SUQsIHNjcmVlbldp
ZHRoLCBzY3JlZW5IZWlnaHQsIHByZWZlcmVkUGl4ZWxCdWZmZXJGb3JtYXQoKSwgKF9fYnJpZGdl
IENGRGljdGlvbmFyeVJlZilzdHJlYW1PcHRpb25zLCBtX2NhcHR1cmVRdWV1ZS5nZXQoKSwgZnJh
bWVBdmFpbGFibGVCbG9jaykpOwotICAgICAgICBpZiAoIW1fZGlzcGxheVN0cmVhbSkgewotICAg
ICAgICAgICAgRVJST1JfTE9HX0lGKGxvZ2dlclB0cigpLCBMT0dJREVOVElGSUVSLCAiQ0dEaXNw
bGF5U3RyZWFtQ3JlYXRlIGZhaWxlZCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFtX29ic2VydmluZ0Rpc3BsYXlDaGFuZ2VzKSB7Ci0g
ICAgICAgIENHRGlzcGxheVJlZ2lzdGVyUmVjb25maWd1cmF0aW9uQ2FsbGJhY2soZGlzcGxheVJl
Y29uZmlndXJhdGlvbkNhbGxCYWNrLCB0aGlzKTsKLSAgICAgICAgbV9vYnNlcnZpbmdEaXNwbGF5
Q2hhbmdlcyA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgU2Ny
ZWVuRGlzcGxheUNhcHR1cmVyTWFjOjpzdGFydChmbG9hdCBmcmFtZVJhdGUpCi17Ci0gICAgQUxX
QVlTX0xPR19JRihsb2dnZXJQdHIoKSwgTE9HSURFTlRJRklFUik7Ci0KLSAgICBpZiAobV9pc1J1
bm5pbmcpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIHN0YXJ0RGlzcGxheVN0
cmVhbShmcmFtZVJhdGUpOwotfQotCi12b2lkIFNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYzo6c3Rv
cCgpCi17Ci0gICAgQUxXQVlTX0xPR19JRihsb2dnZXJQdHIoKSwgTE9HSURFTlRJRklFUik7Ci0K
LSAgICBpZiAoIW1faXNSdW5uaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9kaXNw
bGF5U3RyZWFtKQotICAgICAgICBDR0Rpc3BsYXlTdHJlYW1TdG9wKG1fZGlzcGxheVN0cmVhbS5n
ZXQoKSk7Ci0KLSAgICBtX2lzUnVubmluZyA9IGZhbHNlOwotfQotCi1EaXNwbGF5Q2FwdHVyZVNv
dXJjZUNvY29hOjpEaXNwbGF5RnJhbWVUeXBlIFNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYzo6Z2Vu
ZXJhdGVGcmFtZSgpCi17Ci0gICAgcmV0dXJuIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OkRp
c3BsYXlGcmFtZVR5cGUgeyBSZXRhaW5QdHI8SU9TdXJmYWNlUmVmPiB7IG1fY3VycmVudEZyYW1l
LmlvU3VyZmFjZSgpIH0gfTsKLX0KLQotYm9vbCBTY3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWM6OnN0
YXJ0RGlzcGxheVN0cmVhbShmbG9hdCBmcmFtZVJhdGUpCi17Ci0gICAgYXV0byBhY3R1YWxEaXNw
bGF5SUQgPSB1cGRhdGVEaXNwbGF5SUQobV9kaXNwbGF5SUQpOwotICAgIGlmICghYWN0dWFsRGlz
cGxheUlEKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9kaXNwbGF5SUQgIT0g
YWN0dWFsRGlzcGxheUlELnZhbHVlKCkpIHsKLSAgICAgICAgbV9kaXNwbGF5SUQgPSBhY3R1YWxE
aXNwbGF5SUQudmFsdWUoKTsKLSAgICAgICAgQUxXQVlTX0xPR19JRihsb2dnZXJQdHIoKSwgTE9H
SURFTlRJRklFUiwgImRpc3BsYXkgSUQgY2hhbmdlZCB0byAiLCBzdGF0aWNfY2FzdDxpbnQ+KG1f
ZGlzcGxheUlEKSk7Ci0gICAgfQotCi0gICAgaWYgKCFtX2Rpc3BsYXlTdHJlYW0gJiYgIWNyZWF0
ZURpc3BsYXlTdHJlYW0oZnJhbWVSYXRlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
YXV0byBlcnIgPSBDR0Rpc3BsYXlTdHJlYW1TdGFydChtX2Rpc3BsYXlTdHJlYW0uZ2V0KCkpOwot
ICAgIGlmIChlcnIpIHsKLSAgICAgICAgRVJST1JfTE9HX0lGKGxvZ2dlclB0cigpLCBMT0dJREVO
VElGSUVSLCAiQ0dEaXNwbGF5U3RyZWFtU3RhcnQgZmFpbGVkIHdpdGggZXJyb3IgIiwgc3RhdGlj
X2Nhc3Q8aW50PihlcnIpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG1f
aXNSdW5uaW5nID0gdHJ1ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTY3JlZW5EaXNw
bGF5Q2FwdHVyZXJNYWM6OmNvbW1pdENvbmZpZ3VyYXRpb24oZmxvYXQgZnJhbWVSYXRlKQotewot
ICAgIGlmIChtX2lzUnVubmluZyAmJiAhbV9kaXNwbGF5U3RyZWFtKQotICAgICAgICBzdGFydERp
c3BsYXlTdHJlYW0oZnJhbWVSYXRlKTsKLX0KLQotdm9pZCBTY3JlZW5EaXNwbGF5Q2FwdHVyZXJN
YWM6OmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoQ0dEaXJlY3REaXNwbGF5SUQsIENHRGlzcGxheUNo
YW5nZVN1bW1hcnlGbGFncykKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IQotfQotCi12b2lk
IFNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYzo6ZGlzcGxheVJlY29uZmlndXJhdGlvbkNhbGxCYWNr
KENHRGlyZWN0RGlzcGxheUlEIGRpc3BsYXksIENHRGlzcGxheUNoYW5nZVN1bW1hcnlGbGFncyBm
bGFncywgdm9pZCAqdXNlckluZm8pCi17Ci0gICAgaWYgKHVzZXJJbmZvKQotICAgICAgICByZWlu
dGVycHJldF9jYXN0PFNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYyAqPih1c2VySW5mbyktPmRpc3Bs
YXlXYXNSZWNvbmZpZ3VyZWQoZGlzcGxheSwgZmxhZ3MpOwotfQotCi12b2lkIFNjcmVlbkRpc3Bs
YXlDYXB0dXJlck1hYzo6bmV3RnJhbWUoQ0dEaXNwbGF5U3RyZWFtRnJhbWVTdGF0dXMgc3RhdHVz
LCBEaXNwbGF5U3VyZmFjZSYmIG5ld0ZyYW1lKQotewotICAgIHN3aXRjaCAoc3RhdHVzKSB7Ci0g
ICAgY2FzZSBrQ0dEaXNwbGF5U3RyZWFtRnJhbWVTdGF0dXNGcmFtZUNvbXBsZXRlOgotICAgICAg
ICBicmVhazsKLQotICAgIGNhc2Uga0NHRGlzcGxheVN0cmVhbUZyYW1lU3RhdHVzRnJhbWVJZGxl
OgotICAgICAgICBicmVhazsKLQotICAgIGNhc2Uga0NHRGlzcGxheVN0cmVhbUZyYW1lU3RhdHVz
RnJhbWVCbGFuazoKLSAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiU2NyZWVuRGlzcGxheUNh
cHR1cmVyTWFjOjpmcmFtZUF2YWlsYWJsZToga0NHRGlzcGxheVN0cmVhbUZyYW1lU3RhdHVzRnJh
bWVCbGFuayIpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2Uga0NHRGlzcGxheVN0cmVhbUZy
YW1lU3RhdHVzU3RvcHBlZDoKLSAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiU2NyZWVuRGlz
cGxheUNhcHR1cmVyTWFjOjpmcmFtZUF2YWlsYWJsZToga0NHRGlzcGxheVN0cmVhbUZyYW1lU3Rh
dHVzU3RvcHBlZCIpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBtX2N1cnJlbnRGcmFt
ZSA9IFdURk1vdmUobmV3RnJhbWUpOwotfQotCi1zdGQ6Om9wdGlvbmFsPENhcHR1cmVEZXZpY2U+
IFNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYzo6c2NyZWVuQ2FwdHVyZURldmljZVdpdGhQZXJzaXN0
ZW50SUQoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCkKLXsKLSAgICBhdXRvIGRpc3BsYXlJRCA9IHBh
cnNlSW50ZWdlcjx1aW50MzJfdD4oZGV2aWNlSUQpOwotICAgIGlmICghZGlzcGxheUlEKSB7Ci0g
ICAgICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIlNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYzo6c2Ny
ZWVuQ2FwdHVyZURldmljZVdpdGhQZXJzaXN0ZW50SUQ6IGRpc3BsYXkgSUQgZG9lcyBub3QgY29u
dmVydCB0byAzMi1iaXQgaW50ZWdlciIpOwotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
ICAgIH0KLQotICAgIGF1dG8gYWN0dWFsRGlzcGxheUlEID0gdXBkYXRlRGlzcGxheUlEKCpkaXNw
bGF5SUQpOwotICAgIGlmICghYWN0dWFsRGlzcGxheUlEKQotICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwotCi0gICAgYXV0byBkZXZpY2UgPSBDYXB0dXJlRGV2aWNlKFN0cmluZzo6bnVtYmVy
KCphY3R1YWxEaXNwbGF5SUQpLCBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpTY3JlZW4sICJT
Y3JlZW5DYXB0dXJlRGV2aWNlIl9zKTsKLSAgICBkZXZpY2Uuc2V0RW5hYmxlZCh0cnVlKTsKLSAg
ICByZXR1cm4gZGV2aWNlOwotfQotCi12b2lkIFNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYzo6c2Ny
ZWVuQ2FwdHVyZURldmljZXMoVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBkaXNwbGF5cykKLXsKLSAg
ICBhdXRvIHNjcmVlbklEID0gZGlzcGxheUlEKFtOU1NjcmVlbiBtYWluU2NyZWVuXSk7Ci0gICAg
aWYgKENHRGlzcGxheUlEVG9PcGVuR0xEaXNwbGF5TWFzayhzY3JlZW5JRCkpIHsKLSAgICAgICAg
Q2FwdHVyZURldmljZSBkaXNwbGF5RGV2aWNlKFN0cmluZzo6bnVtYmVyKHNjcmVlbklEKSwgQ2Fw
dHVyZURldmljZTo6RGV2aWNlVHlwZTo6U2NyZWVuLCBtYWtlU3RyaW5nKCJTY3JlZW4gMCIpKTsK
LSAgICAgICAgZGlzcGxheURldmljZS5zZXRFbmFibGVkKHRydWUpOwotICAgICAgICBkaXNwbGF5
cy5hcHBlbmQoV1RGTW92ZShkaXNwbGF5RGV2aWNlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICB1aW50MzJfdCBkaXNwbGF5Q291bnQgPSAwOwotICAgIGF1dG8gZXJyID0gQ0dHZXRB
Y3RpdmVEaXNwbGF5TGlzdCgwLCBudWxscHRyLCAmZGlzcGxheUNvdW50KTsKLSAgICBpZiAoZXJy
KSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIkNHR2V0QWN0aXZlRGlzcGxheUxpc3Qo
KSByZXR1cm5lZCBlcnJvciAlZCB3aGVuIHRyeWluZyB0byBnZXQgZGlzcGxheSBjb3VudCIsIChp
bnQpZXJyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghZGlzcGxheUNvdW50
KSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIkNHR2V0QWN0aXZlRGlzcGxheUxpc3Qo
KSByZXR1cm5lZCBhIGRpc3BsYXkgY291bnQgb2YgMCIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgVmVjdG9yPENHRGlyZWN0RGlzcGxheUlEPiBhY3RpdmVEaXNwbGF5cyhkaXNwbGF5
Q291bnQpOwotICAgIGVyciA9IENHR2V0QWN0aXZlRGlzcGxheUxpc3QoZGlzcGxheUNvdW50LCBh
Y3RpdmVEaXNwbGF5cy5kYXRhKCksICZkaXNwbGF5Q291bnQpOwotICAgIGlmIChlcnIpIHsKLSAg
ICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQ0dHZXRBY3RpdmVEaXNwbGF5TGlzdCgpIHJldHVy
bmVkIGVycm9yICVkIHdoZW4gdHJ5aW5nIHRvIGdldCB0aGUgYWN0aXZlIGRpc3BsYXkgbGlzdCIs
IChpbnQpZXJyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGludCBjb3VudCA9IDA7
Ci0gICAgZm9yIChhdXRvIGRpc3BsYXlJRCA6IGFjdGl2ZURpc3BsYXlzKSB7Ci0gICAgICAgIENh
cHR1cmVEZXZpY2UgZGlzcGxheURldmljZShTdHJpbmc6Om51bWJlcihkaXNwbGF5SUQpLCBDYXB0
dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpTY3JlZW4sIG1ha2VTdHJpbmcoIlNjcmVlbiAiLCBTdHJp
bmc6Om51bWJlcihjb3VudCsrKSkpOwotICAgICAgICBkaXNwbGF5RGV2aWNlLnNldEVuYWJsZWQo
Q0dEaXNwbGF5SURUb09wZW5HTERpc3BsYXlNYXNrKGRpc3BsYXlJRCkpOwotICAgICAgICBkaXNw
bGF5cy5hcHBlbmQoV1RGTW92ZShkaXNwbGF5RGV2aWNlKSk7Ci0gICAgfQotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBQTEFU
Rk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVyTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVyTWFjLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGVmOWY0MjhmYWZmYjljMTljY2QyNzhmYWJjYjJjOTdkMGIzYmI5
M2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dpbmRvd0Rpc3BsYXlDYXB0dXJlck1h
Yy5oCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkgJiYgUExBVEZPUk0oTUFDKQotCi0jaW5jbHVkZSAiRGlzcGxheUNhcHR1cmVTb3Vy
Y2VDb2NvYS5oIgotCi10eXBlZGVmIHN0cnVjdCBfX0NWQnVmZmVyICpDVkJ1ZmZlclJlZjsKLXR5
cGVkZWYgQ1ZCdWZmZXJSZWYgQ1ZJbWFnZUJ1ZmZlclJlZjsKLXR5cGVkZWYgQ1ZJbWFnZUJ1ZmZl
clJlZiBDVlBpeGVsQnVmZmVyUmVmOwotdHlwZWRlZiBzdHJ1Y3QgX19DVlBpeGVsQnVmZmVyUG9v
bCAqQ1ZQaXhlbEJ1ZmZlclBvb2xSZWY7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
UGl4ZWxCdWZmZXJDb25mb3JtZXJDVjsKLQotY2xhc3MgV2luZG93RGlzcGxheUNhcHR1cmVyTWFj
IGZpbmFsIDogcHVibGljIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OkNhcHR1cmVyIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgRXhwZWN0ZWQ8VW5pcXVlUmVmPERpc3BsYXlDYXB0dXJlU291cmNl
Q29jb2E6OkNhcHR1cmVyPiwgU3RyaW5nPiBjcmVhdGUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBl
eHBsaWNpdCBXaW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWModWludDMyX3QpOwotICAgIHZpcnR1YWwg
fldpbmRvd0Rpc3BsYXlDYXB0dXJlck1hYygpID0gZGVmYXVsdDsKLQotICAgIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPENhcHR1cmVEZXZpY2U+IHdpbmRvd0NhcHR1cmVEZXZpY2VXaXRoUGVyc2lzdGVu
dElEKGNvbnN0IFN0cmluZyYpOwotICAgIHN0YXRpYyB2b2lkIHdpbmRvd0NhcHR1cmVEZXZpY2Vz
KFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYpOwotCi1wcml2YXRlOgotICAgIC8vIERpc3BsYXlDYXB0
dXJlU291cmNlQ29jb2E6OkNhcHR1cmVyCi0gICAgYm9vbCBzdGFydChmbG9hdCkgZmluYWwgeyBy
ZXR1cm4gdHJ1ZTsgfQotICAgIHZvaWQgc3RvcCgpIGZpbmFsIHsgfQotICAgIERpc3BsYXlDYXB0
dXJlU291cmNlQ29jb2E6OkRpc3BsYXlGcmFtZVR5cGUgZ2VuZXJhdGVGcmFtZSgpIGZpbmFsOwot
ICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RGlzcGxheVN1cmZhY2VUeXBlIHN1cmZh
Y2VUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdz
OjpEaXNwbGF5U3VyZmFjZVR5cGU6OldpbmRvdzsgfQotICAgIENhcHR1cmVEZXZpY2U6OkRldmlj
ZVR5cGUgZGV2aWNlVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIENhcHR1cmVEZXZpY2U6OkRl
dmljZVR5cGU6OldpbmRvdzsgfQotICAgIHZvaWQgY29tbWl0Q29uZmlndXJhdGlvbihmbG9hdCkg
ZmluYWwgeyB9Ci0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgY29uc3QgY2hhciogbG9n
Q2xhc3NOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIldpbmRvd0Rpc3BsYXlDYXB0dXJlck1h
YyI7IH0KLSNlbmRpZgotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHdpbmRvd0ltYWdlKCk7
Ci0KLSAgICBJbnRTaXplIG1fd2luZG93U2l6ZTsKLSAgICBDR1dpbmRvd0lEIG1fd2luZG93SUQg
eyAwIH07Ci0gICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJQb29sUmVmPiBtX2J1ZmZlclBvb2w7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFBpeGVsQnVmZmVyQ29uZm9ybWVyQ1Y+IG1fcGl4ZWxCdWZm
ZXJDb25mb3JtZXI7Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1fbGFzdEltYWdlOwotICAg
IFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBtX2xhc3RQaXhlbEJ1ZmZlcjsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYm
IFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9XaW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVyTWFjLm1tCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDJjZThmZGYwZjBjNThmNDA3MGQ0YjRiNzgxZWRi
NWYxZWMyMWRiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNwbGF5Q2Fw
dHVyZXJNYWMubW0KKysrIC9kZXYvbnVsbApAQCAtMSwxNzYgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiV2luZG93RGlzcGxheUNhcHR1cmVyTWFjLmgiCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RS
RUFNKSAmJiBQTEFURk9STShNQUMpCi0KLSNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0j
aW1wb3J0ICJJbWFnZUJ1ZmZlci5oIgotI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiTWVk
aWFDb25zdHJhaW50cy5oIgotI2ltcG9ydCAiTWVkaWFTYW1wbGVBVkZPYmpDLmgiCi0jaW1wb3J0
ICJOb3RJbXBsZW1lbnRlZC5oIgotI2ltcG9ydCAiUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5oIgot
I2ltcG9ydCAiUGxhdGZvcm1MYXllci5oIgotI2ltcG9ydCAiUmVhbHRpbWVNZWRpYVNvdXJjZVNl
dHRpbmdzLmgiCi0jaW1wb3J0IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2ltcG9y
dCA8d3RmL2NmL1R5cGVDYXN0c0NGLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdUb0ludGVn
ZXJDb252ZXJzaW9uLmg+Ci0KLSNpbXBvcnQgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oPgot
I2ltcG9ydCAiQ29yZVZpZGVvU29mdExpbmsuaCIKLQotV1RGX0RFQ0xBUkVfQ0ZfVFlQRV9UUkFJ
VChDR0ltYWdlKTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgYm9vbCBhbnlPZkNH
V2luZG93KGNvbnN0IEZ1bmN0aW9uPGJvb2woQ0ZEaWN0aW9uYXJ5UmVmIGluZm8sIHVuc2lnbmVk
IGlkLCBjb25zdCBTdHJpbmcmIHRpdGxlKT4mIHByZWRpY2F0ZSkKLXsKLSAgICBhdXRvIHdpbmRv
d3MgPSBhZG9wdENGKENHV2luZG93TGlzdENvcHlXaW5kb3dJbmZvKGtDR1dpbmRvd0xpc3RPcHRp
b25PblNjcmVlbk9ubHkgfCBrQ0dXaW5kb3dMaXN0RXhjbHVkZURlc2t0b3BFbGVtZW50cywga0NH
TnVsbFdpbmRvd0lEKSk7Ci0gICAgaWYgKCF3aW5kb3dzKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9H
KFdlYlJUQywgIkNHV2luZG93TGlzdENvcHlXaW5kb3dJbmZvIHJldHVybmVkIE5VTEwiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGF1dG8gd2luZG93Q291bnQgPSBDRkFy
cmF5R2V0Q291bnQod2luZG93cy5nZXQoKSk7Ci0gICAgZm9yIChhdXRvIGkgPSAwOyBpIDwgd2lu
ZG93Q291bnQ7IGkrKykgewotICAgICAgICBhdXRvIHdpbmRvd0luZm8gPSBjaGVja2VkX2NmX2Nh
c3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KHdpbmRvd3MuZ2V0KCks
IGkpKTsKLSAgICAgICAgaWYgKCF3aW5kb3dJbmZvKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgLy8gTWVudXMsIHRoZSBkb2NrLCBldGMgaGF2ZSBsYXllcnMgZ3JlYXRlciB0aGFu
IDAsIHNraXAgdGhlbS4KLSAgICAgICAgYXV0byB3aW5kb3dMYXllclJlZiA9IGNoZWNrZWRfY2Zf
Y2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUod2luZG93SW5mbywga0NHV2lu
ZG93TGF5ZXIpKTsKLSAgICAgICAgaWYgKCF3aW5kb3dMYXllclJlZikKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB1bnNpZ25lZCB3aW5kb3dMYXllcjsKLSAgICAgICAgQ0ZOdW1iZXJH
ZXRWYWx1ZSh3aW5kb3dMYXllclJlZiwga0NGTnVtYmVySW50VHlwZSwgJndpbmRvd0xheWVyKTsK
LSAgICAgICAgaWYgKHdpbmRvd0xheWVyKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgYXV0byBvblNjcmVlbiA9IGNoZWNrZWRfY2ZfY2FzdDxDRkJvb2xlYW5SZWY+KENGRGljdGlv
bmFyeUdldFZhbHVlKHdpbmRvd0luZm8sIGtDR1dpbmRvd0lzT25zY3JlZW4pKTsKLSAgICAgICAg
aWYgKCFDRkJvb2xlYW5HZXRWYWx1ZShvblNjcmVlbikpCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBhdXRvIHdpbmRvd0lEUmVmID0gY2hlY2tlZF9jZl9jYXN0PENGTnVtYmVyUmVm
PihDRkRpY3Rpb25hcnlHZXRWYWx1ZSh3aW5kb3dJbmZvLCBrQ0dXaW5kb3dOdW1iZXIpKTsKLSAg
ICAgICAgaWYgKCF3aW5kb3dJRFJlZikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB1
bnNpZ25lZCB3aW5kb3dJRDsKLSAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZSh3aW5kb3dJRFJlZiwg
a0NGTnVtYmVySW50VHlwZSwgJndpbmRvd0lEKTsKLSAgICAgICAgaWYgKCF3aW5kb3dJRCkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8gd2luZG93VGl0bGUgPSBjaGVja2Vk
X2NmX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHdpbmRvd0luZm8sIGtD
R1dpbmRvd05hbWUpKTsKLQotICAgICAgICBpZiAocHJlZGljYXRlKHdpbmRvd0luZm8sIHdpbmRv
d0lELCB3aW5kb3dUaXRsZSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiB3
aW5kb3dEZXNjcmlwdGlvbihDR1dpbmRvd0lEIGlkKQotewotICAgIGF1dG8gaWRzID0gYWRvcHRD
RihDRkFycmF5Q3JlYXRlKG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCoqPigm
aWQpLCAxLCBudWxscHRyKSk7Ci0gICAgYXV0byB3aW5kb3dzID0gYWRvcHRDRihDR1dpbmRvd0xp
c3RDcmVhdGVEZXNjcmlwdGlvbkZyb21BcnJheShpZHMuZ2V0KCkpKTsKLSAgICBpZiAoIXdpbmRv
d3MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIGNoZWNrZWRfY2ZfY2Fz
dDxDRkRpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgod2luZG93cy5nZXQoKSwg
MCkpOwotfQotCi1FeHBlY3RlZDxVbmlxdWVSZWY8RGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6
Q2FwdHVyZXI+LCBTdHJpbmc+IFdpbmRvd0Rpc3BsYXlDYXB0dXJlck1hYzo6Y3JlYXRlKGNvbnN0
IFN0cmluZyYgZGV2aWNlSUQpCi17Ci0gICAgYXV0byBkaXNwbGF5SUQgPSBwYXJzZUludGVnZXI8
dWludDMyX3Q+KGRldmljZUlEKTsKLSAgICBpZiAoIWRpc3BsYXlJRCkKLSAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJJbnZhbGlkIHdpbmRvdyBkZXZpY2UgSUQiX3MpOwotCi0gICAgYXV0
byB3aW5kb3dJbmZvID0gd2luZG93RGVzY3JpcHRpb24oKmRpc3BsYXlJRCk7Ci0gICAgaWYgKCF3
aW5kb3dJbmZvKQotICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludmFsaWQgd2luZG93
IElEIl9zKTsKLQotICAgIHJldHVybiBVbmlxdWVSZWY8RGlzcGxheUNhcHR1cmVTb3VyY2VDb2Nv
YTo6Q2FwdHVyZXI+KG1ha2VVbmlxdWVSZWY8V2luZG93RGlzcGxheUNhcHR1cmVyTWFjPigqZGlz
cGxheUlEKSk7Ci19Ci0KLVdpbmRvd0Rpc3BsYXlDYXB0dXJlck1hYzo6V2luZG93RGlzcGxheUNh
cHR1cmVyTWFjKHVpbnQzMl90IHdpbmRvd0lEKQotICAgIDogbV93aW5kb3dJRCh3aW5kb3dJRCkK
LXsKLX0KLQotUmV0YWluUHRyPENHSW1hZ2VSZWY+IFdpbmRvd0Rpc3BsYXlDYXB0dXJlck1hYzo6
d2luZG93SW1hZ2UoKQotewotICAgIGF1dG8gaW1hZ2UgPSBhZG9wdENGKENHV2luZG93TGlzdENy
ZWF0ZUltYWdlKENHUmVjdE51bGwsIGtDR1dpbmRvd0xpc3RPcHRpb25JbmNsdWRpbmdXaW5kb3cs
IG1fd2luZG93SUQsIGtDR1dpbmRvd0ltYWdlQm91bmRzSWdub3JlRnJhbWluZyB8IGtDR1dpbmRv
d0ltYWdlU2hvdWxkQmVPcGFxdWUpKTsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICBSRUxFQVNF
X0xPRyhXZWJSVEMsICJXaW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWM6OndpbmRvd0ltYWdlOiBmYWls
ZWQgdG8gY2FwdHVyZSB3aW5kb3cgaW1hZ2UiKTsKLQotICAgIHJldHVybiBpbWFnZTsKLX0KLQot
RGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6RGlzcGxheUZyYW1lVHlwZSBXaW5kb3dEaXNwbGF5
Q2FwdHVyZXJNYWM6OmdlbmVyYXRlRnJhbWUoKQotewotICAgIHJldHVybiBEaXNwbGF5Q2FwdHVy
ZVNvdXJjZUNvY29hOjpEaXNwbGF5RnJhbWVUeXBlIHsgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHsg
d2luZG93SW1hZ2UoKSB9IH07Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8Q2FwdHVyZURldmljZT4gV2lu
ZG93RGlzcGxheUNhcHR1cmVyTWFjOjp3aW5kb3dDYXB0dXJlRGV2aWNlV2l0aFBlcnNpc3RlbnRJ
RChjb25zdCBTdHJpbmcmIGlkU3RyaW5nKQotewotICAgIGF1dG8gd2luZG93SUQgPSBwYXJzZUlu
dGVnZXI8dWludDMyX3Q+KGlkU3RyaW5nKTsKLSAgICBpZiAoIXdpbmRvd0lEKSB7Ci0gICAgICAg
IFJFTEVBU0VfTE9HKFdlYlJUQywgIldpbmRvd0Rpc3BsYXlDYXB0dXJlck1hYzo6d2luZG93Q2Fw
dHVyZURldmljZVdpdGhQZXJzaXN0ZW50SUQ6IHdpbmRvdyBJRCBkb2VzIG5vdCBjb252ZXJ0IHRv
IDMyLWJpdCBpbnRlZ2VyIik7Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgfQot
Ci0gICAgU3RyaW5nIHdpbmRvd1RpdGxlOwotICAgIGlmICghYW55T2ZDR1dpbmRvdyhbJndpbmRv
d1RpdGxlLCB3aW5kb3dJRF0gKENGRGljdGlvbmFyeVJlZiwgQ0dXaW5kb3dJRCBpZCwgY29uc3Qg
U3RyaW5nJiB0aXRsZSkgewotICAgICAgICBpZiAod2luZG93SUQgIT0gaWQpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgd2luZG93VGl0bGUgPSB0aXRsZTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICB9KSkgewotICAgICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJX
aW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWM6OndpbmRvd0NhcHR1cmVEZXZpY2VXaXRoUGVyc2lzdGVu
dElEOiB3aW5kb3cgSUQgaXMgbm90IHZhbGlkIik7Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7Ci0gICAgfQotCi0gICAgYXV0byBkZXZpY2UgPSBDYXB0dXJlRGV2aWNlKFN0cmluZzo6bnVt
YmVyKCp3aW5kb3dJRCksIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OldpbmRvdywgd2luZG93
VGl0bGUpOwotICAgIGRldmljZS5zZXRFbmFibGVkKHRydWUpOwotCi0gICAgcmV0dXJuIGRldmlj
ZTsKLX0KLQotdm9pZCBXaW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWM6OndpbmRvd0NhcHR1cmVEZXZp
Y2VzKFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYgd2luZG93cykKLXsKLSAgICBhbnlPZkNHV2luZG93
KFsmXSAoQ0ZEaWN0aW9uYXJ5UmVmLCBpbnQgaWQsIGNvbnN0IFN0cmluZyYgdGl0bGUpIG11dGFi
bGUgewotICAgICAgICBDYXB0dXJlRGV2aWNlIGRldmljZShTdHJpbmc6Om51bWJlcihpZCksIENh
cHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OldpbmRvdywgdGl0bGUpOwotICAgICAgICBkZXZpY2Uu
c2V0RW5hYmxlZCh0cnVlKTsKLSAgICAgICAgd2luZG93cy5hcHBlbmQoV1RGTW92ZShkZXZpY2Up
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0pOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBQTEFURk9STShNQUMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCmluZGV4IDQwM2ZmMzkzMjhmZTJlMzY5ZDE0MWZl
ZmIyOWU0OTAxYWI4NTE1Y2YuLmJiZTI1NTliNTYxNmExYTUxMTg3ZTUxMzllZjM4MmRjNDgxZTJi
OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2sv
TW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuY3BwCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDMsNyArNDMsNyBAQAogCiAj
aWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAiQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5oIgot
I2luY2x1ZGUgIkRpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuaCIKKyNpbmNsdWRlICJEaXNwbGF5
Q2FwdHVyZVNvdXJjZU1hYy5oIgogI2luY2x1ZGUgIk1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFj
LmgiCiAjZW5kaWYKIApAQCAtMTE1LDE0ICsxMTUsMTQgQEAgcHJpdmF0ZToKIH07CiAKICNpZiBQ
TEFURk9STShNQUMpCi1jbGFzcyBNb2NrRGlzcGxheUNhcHR1cmVyIGZpbmFsIDogcHVibGljIERp
c3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OkNhcHR1cmVyIHsKK2NsYXNzIE1vY2tEaXNwbGF5Q2Fw
dHVyZXIgZmluYWwgOiBwdWJsaWMgRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OkNhcHR1cmVyIHsK
IHB1YmxpYzoKICAgICBleHBsaWNpdCBNb2NrRGlzcGxheUNhcHR1cmVyKGNvbnN0IENhcHR1cmVE
ZXZpY2UmKTsKIAogcHJpdmF0ZToKICAgICBib29sIHN0YXJ0KGZsb2F0KSBmaW5hbDsKICAgICB2
b2lkIHN0b3AoKSBmaW5hbCAgeyBtX3NvdXJjZS0+c3RvcCgpOyB9Ci0gICAgRGlzcGxheUNhcHR1
cmVTb3VyY2VDb2NvYTo6RGlzcGxheUZyYW1lVHlwZSBnZW5lcmF0ZUZyYW1lKCkgZmluYWw7Cisg
ICAgRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OkRpc3BsYXlGcmFtZVR5cGUgZ2VuZXJhdGVGcmFt
ZSgpIGZpbmFsOwogICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RGlzcGxheVN1cmZh
Y2VUeXBlIHN1cmZhY2VUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gUmVhbHRpbWVNZWRpYVNv
dXJjZVNldHRpbmdzOjpEaXNwbGF5U3VyZmFjZVR5cGU6Ok1vbml0b3I7IH0KICAgICB2b2lkIGNv
bW1pdENvbmZpZ3VyYXRpb24oZmxvYXQpIGZpbmFsIHsgfQogICAgIENhcHR1cmVEZXZpY2U6OkRl
dmljZVR5cGUgZGV2aWNlVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIENhcHR1cmVEZXZpY2U6
OkRldmljZVR5cGU6OlNjcmVlbjsgfQpAQCAtMTQ0LDcgKzE0NCw3IEBAIGJvb2wgTW9ja0Rpc3Bs
YXlDYXB0dXJlcjo6c3RhcnQoZmxvYXQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLURpc3BsYXlD
YXB0dXJlU291cmNlQ29jb2E6OkRpc3BsYXlGcmFtZVR5cGUgTW9ja0Rpc3BsYXlDYXB0dXJlcjo6
Z2VuZXJhdGVGcmFtZSgpCitEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6RGlzcGxheUZyYW1lVHlw
ZSBNb2NrRGlzcGxheUNhcHR1cmVyOjpnZW5lcmF0ZUZyYW1lKCkKIHsKICAgICBpZiAoYXV0byog
aW1hZ2VCdWZmZXIgPSBtX3NvdXJjZS0+aW1hZ2VCdWZmZXIoKSkKICAgICAgICAgcmV0dXJuIGlt
YWdlQnVmZmVyLT5jb3B5TmF0aXZlSW1hZ2UoKTsKQEAgLTE2Myw3ICsxNjMsNyBAQCBwdWJsaWM6
CiAgICAgICAgIGNhc2UgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6U2NyZWVuOgogICAgICAg
ICBjYXNlIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OldpbmRvdzoKICNpZiBQTEFURk9STShN
QUMpCi0gICAgICAgICAgICByZXR1cm4gRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6Y3JlYXRl
KFVuaXF1ZVJlZjxEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpDYXB0dXJlcj4obWFrZVVuaXF1
ZVJlZjxNb2NrRGlzcGxheUNhcHR1cmVyPihkZXZpY2UpKSwgZGV2aWNlLCBjb25zdHJhaW50cyk7
CisgICAgICAgICAgICByZXR1cm4gRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmNyZWF0ZShVbmlx
dWVSZWY8RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OkNhcHR1cmVyPihtYWtlVW5pcXVlUmVmPE1v
Y2tEaXNwbGF5Q2FwdHVyZXI+KGRldmljZSkpLCBkZXZpY2UsIGNvbnN0cmFpbnRzKTsKICNlbGlm
IFVTRShHU1RSRUFNRVIpCiAgICAgICAgICAgICByZXR1cm4gTW9ja1JlYWx0aW1lVmlkZW9Tb3Vy
Y2VHU3RyZWFtZXI6OmNyZWF0ZU1vY2tEaXNwbGF5Q2FwdHVyZVNvdXJjZShTdHJpbmcgeyBkZXZp
Y2UucGVyc2lzdGVudElkKCkgfSwgU3RyaW5nIHsgZGV2aWNlLmxhYmVsKCkgfSwgU3RyaW5nIHsg
fSwgY29uc3RyYWludHMpOwogI2Vsc2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435636</attachid>
            <date>2021-08-16 15:47:41 -0700</date>
            <delta_ts>2021-08-16 16:08:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>screen-capture-base-class-patch.txt</filename>
            <type>text/plain</type>
            <size>76504</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1MmY5ZDQxMTUzNDEuLjk1MGQxNzYzZWM1MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDc0IEBACisyMDIxLTA4LTE2ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBw
bGUuY29tPgorCisgICAgICAgIFttYWNPU10gUmVmYWN0b3Igc2NyZWVuIGNhcHR1cmUgY2xhc3MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTE0Mgor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vODE5ODMzMDY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBSZW5hbWUgY2xhc3NlcyBiYXNlZCBv
biB0aGUgZnJhbWV3b3JrcyB0aGV5IHVzZS4gQ3JlYXRlIENHRGlzcGxheVN0cmVhbSBiYXNlIGNs
YXNzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gZnVuY3Rpb25hbCBjaGFuZ2UuCisKKyAg
ICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ0dEaXNw
bGF5U3RyZWFtQ2FwdHVyZVNvdXJjZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0dE
aXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZTo6fkNHRGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2Up
OgorICAgICAgICAoV2ViQ29yZTo6Q0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZTo6c3RhcnQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZTo6c3RvcCk6
CisgICAgICAgIChXZWJDb3JlOjpDR0Rpc3BsYXlTdHJlYW1DYXB0dXJlU291cmNlOjpnZW5lcmF0
ZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNHRGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2U6
OnN0YXJ0RGlzcGxheVN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpDR0Rpc3BsYXlTdHJlYW1D
YXB0dXJlU291cmNlOjpjb21taXRDb25maWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNH
RGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2U6OmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZTo6ZGlzcGxheVJlY29u
ZmlndXJhdGlvbkNhbGxCYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNHRGlzcGxheVN0cmVhbUNh
cHR1cmVTb3VyY2U6Om5ld0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNHRGlzcGxheVN0cmVh
bUNhcHR1cmVTb3VyY2U6OmZyYW1lQXZhaWxhYmxlSGFuZGxlcik6CisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0NHRGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2UuaDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3Bs
YXlDYXB0dXJlck1hYy5oLgorICAgICAgICAoV2ViQ29yZTo6Q0dEaXNwbGF5U3RyZWFtQ2FwdHVy
ZVNvdXJjZTo6Y2hlY2tEaXNwbGF5U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OkNHRGlzcGxh
eVN0cmVhbUNhcHR1cmVTb3VyY2U6OmRpc3BsYXlTdHJlYW0gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZTo6aW52YWxpZGF0ZURpc3BsYXlTdHJl
YW0pOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9DR0Rpc3BsYXlTdHJlYW1T
Y3JlZW5DYXB0dXJlU291cmNlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVyTWFjLmguCisgICAgICAgICog
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NHRGlzcGxheVN0cmVhbVNjcmVlbkNhcHR1cmVTb3Vy
Y2UubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlRGlzcGxheUlEKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNHRGlzcGxheVN0cmVhbVNjcmVlbkNhcHR1cmVTb3VyY2U6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpDR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNlOjpD
R0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNH
RGlzcGxheVN0cmVhbVNjcmVlbkNhcHR1cmVTb3VyY2U6OmNoZWNrRGlzcGxheVN0cmVhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNlOjpjcmVh
dGVEaXNwbGF5U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OkNHRGlzcGxheVN0cmVhbVNjcmVl
bkNhcHR1cmVTb3VyY2U6OnNjcmVlbkNhcHR1cmVEZXZpY2VXaXRoUGVyc2lzdGVudElEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNHRGlzcGxheVN0cmVhbVNjcmVlbkNhcHR1cmVTb3VyY2U6OnNjcmVl
bkNhcHR1cmVEZXZpY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ0dX
aW5kb3dDYXB0dXJlU291cmNlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVyTWFjLmguCisgICAgICAgICog
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NHV2luZG93Q2FwdHVyZVNvdXJjZS5tbTogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNw
bGF5Q2FwdHVyZXJNYWMubW0uCisgICAgICAgIChXZWJDb3JlOjpDR1dpbmRvd0NhcHR1cmVTb3Vy
Y2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDR1dpbmRvd0NhcHR1cmVTb3VyY2U6OkNH
V2luZG93Q2FwdHVyZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDR1dpbmRvd0NhcHR1cmVT
b3VyY2U6OndpbmRvd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNHV2luZG93Q2FwdHVyZVNv
dXJjZTo6Z2VuZXJhdGVGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDR1dpbmRvd0NhcHR1cmVT
b3VyY2U6OndpbmRvd0NhcHR1cmVEZXZpY2VXaXRoUGVyc2lzdGVudElEKToKKyAgICAgICAgKFdl
YkNvcmU6OkNHV2luZG93Q2FwdHVyZVNvdXJjZTo6d2luZG93Q2FwdHVyZURldmljZXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2Nv
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYTo6dXBk
YXRlRGlzcGxheUNhcHR1cmVEZXZpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDYXB0
dXJlTWFuYWdlckNvY29hOjp1cGRhdGVXaW5kb3dDYXB0dXJlRGV2aWNlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYTo6c2NyZWVuQ2FwdHVyZURldmljZVdp
dGhQZXJzaXN0ZW50SUQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVNYW5hZ2Vy
Q29jb2E6OndpbmRvd0NhcHR1cmVEZXZpY2VXaXRoUGVyc2lzdGVudElEKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuY3BwOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlD
YXB0dXJlU291cmNlQ29jb2EuY3BwLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVT
b3VyY2VNYWM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJj
ZU1hYzo6RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUNhcHR1cmVTb3VyY2VNYWM6On5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYyk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Y2FwYWJpbGl0aWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpzZXR0aW5ncyk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6c2V0dGluZ3NEaWRDaGFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OnN0YXJ0UHJvZHVjaW5nRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6c3RvcFByb2R1
Y2luZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmVs
YXBzZWRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjp1
cGRhdGVGcmFtZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVTb3VyY2VN
YWM6OmVtaXRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJjZU1h
Yzo6Q2FwdHVyZXI6OnNldExvZ2dlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Q2FwdHVy
ZVNvdXJjZU1hYzo6Q2FwdHVyZXI6OmxvZ0NoYW5uZWwgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJl
U291cmNlQ29jb2EuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlck1hYy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlck1hYy5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1vY2tEaXNwbGF5Q2FwdHVyZXI6OmdlbmVyYXRlRnJhbWUpOgorCiAyMDIxLTA4
LTEwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgRG9jdW1lbnQu
YmFzZVVSSSBpcyBpbmFjY3VyYXRlIGZvciBpZnJhbWUgc3JjZG9jIGRvY3VtZW50cwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXNDb2NvYS50eHQKaW5kZXggY2E2MTE3MGMzNGRmLi4yYWZkNGMyMzIwMTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
U291cmNlc0NvY29hLnR4dApAQCAtNTI1LDExICs1MjUsMTQgQEAgcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbGlid2VicnRjL0xpYldlYlJUQ1Byb3ZpZGVyQ29jb2EuY3BwCiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbSBAbm8tdW5pZnkKIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5tbSBAbm8tdW5pZnkKIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9CYXNlQXVkaW9TaGFyZWRVbml0LmNwcAorcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL0NHRGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2UuY3BwCitwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvQ0dEaXNwbGF5U3RyZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZS5tbQorcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0NHV2luZG93Q2FwdHVyZVNvdXJjZS5tbQogcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVEZXZpY2UuY3BwCiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwCiBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9EaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYS5jcHAKLXBsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9EaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmNwcAorcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjLmNwcAogcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL01lZGlhU3RyZWFtVHJhY2tBdWRpb1NvdXJjZVByb3ZpZGVyQ29jb2EuY3BwCiBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvTW9ja0F1ZGlvU2hhcmVkVW5pdC5tbQogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tCkBAIC01NDAsOSArNTQzLDcg
QEAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMu
bW0KIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VD
b2NvYS5jcHAKIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2VDb2NvYS5jcHAKIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZVZpZGVvVXRp
bGl0aWVzLm1tCi1wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVy
TWFjLm1tCiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvV2ViQXVkaW9Tb3VyY2VQcm92aWRlckNv
Y29hLm1tCi1wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVyTWFj
Lm1tCiBwbGF0Zm9ybS9tb2NrL01lZGlhUGxheWJhY2tUYXJnZXRNb2NrLmNwcAogcGxhdGZvcm0v
bW9jay9NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTW9jay5jcHAKIHBsYXRmb3JtL21vY2svTW9j
a0F1ZGlvRGVzdGluYXRpb25Db2NvYS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzNjQxNzExNGYwM2EuLmM2Y2ZhOTY0YjQ3
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtNTc3OCw2ICs1Nzc4LDggQEAKIAkJMDcwRTgxRDAxQkYyNzY1NjAwMUZEQTQ4IC8q
IFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVmlkZW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwNzBGNTQ5NzE3RjEyRjZCMDAxNjlFMDQgLyogTWVkaWFTdHJlYW1Db25z
dHJhaW50c1ZhbGlkYXRpb25DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTWVkaWFTdHJlYW1Db25zdHJhaW50c1ZhbGlkYXRpb25DbGllbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMDcxMTU4OEYxN0RGNjMzNzAwRURGRTJCIC8qIE1lZGlhU3RyZWFt
UHJpdmF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYVN0
cmVhbVByaXZhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzE3NzY1RTI2
QzMwM0I3MDBBNjMyOTkgLyogQ0dEaXNwbGF5U3RyZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3MTc3NjVGMjZDMzAzQjcwMEE2MzI5OSAvKiBDR0Rp
c3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
Q0dEaXNwbGF5U3RyZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZS5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMDcxQTlFQzAxNjhGQjU2QzAwMjYyOUY5IC8qIFRleHRUcmFja0N1ZUdlbmVy
aWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dFRyYWNrQ3Vl
R2VuZXJpYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MUE5RUMxMTY4RkI1
NkMwMDI2MjlGOSAvKiBUZXh0VHJhY2tDdWVHZW5lcmljLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRleHRUcmFja0N1ZUdlbmVyaWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMDcxRTQ5NkQxQUQ1QUEwRDAwOEE1MEI0IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRD
b2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE1lZGlhUGxh
eWJhY2tUYXJnZXRDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU5Njgs
MTAgKzU5NzAsMTAgQEAKIAkJMDc5RjVFNEIwRjNCRUJFQTAwNUUwNzgyIC8qIE1lZGlhUGxheWVy
UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVBsYXllclBy
aXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDdBNkQxRTkxNDkxMTM3NzAw
MDUxRDBDIC8qIE1lZGlhRnJhZ21lbnRVUklQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFGcmFnbWVudFVSSVBhcnNlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTA3QTZEMUVBMTQ5MTEzNzcwMDA1MUQwQyAvKiBNZWRpYUZyYWdt
ZW50VVJJUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRnJh
Z21lbnRVUklQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDdBNkQ4NDcx
RkVCNzAwQjAwNjQ0MURFIC8qIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3QTZEODQ3MUZFQjcwMEIwMDY0NDFE
RSAvKiBEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTA3QTZEODQ4MUZFQjcwMEIwMDY0NDFERSAvKiBEaXNwbGF5Q2FwdHVy
ZU1hbmFnZXJDb2NvYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
aXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTA3QTZEODQ5MUZFQjcwMEMwMDY0NDFERSAvKiBEaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2Nv
YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5Q2FwdHVyZU1hbmFn
ZXJDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwN0E2RDg0QTFGRUI3MDBE
MDA2NDQxREUgLyogRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTA3QTZEODRBMUZFQjcwMEQwMDY0NDFERSAvKiBEaXNwbGF5Q2Fw
dHVyZVNvdXJjZU1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5
Q2FwdHVyZVNvdXJjZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwN0FBNkI2
OTE2NkQwMTk1MDBENDU2NzEgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRk9iakMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRk9i
akMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDdBQTZCNkExNjZEMDE5NTAwRDQ1
NjcxIC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZPYmpDLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRk9iakMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3QUI5OTY1MThEQTNDMDEwMDE4NzcxRSAv
KiBSVENDb25maWd1cmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJU
Q0NvbmZpZ3VyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc4NTIsMTAg
Kzc4NTQsMTAgQEAKIAkJNDE2RURCRkYyNjAwRTc4NzAwMDkyNjc1IC8qIFJUQ0RhdGFDaGFubmVs
SWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENEYXRhQ2hh
bm5lbElkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE2RURDMDEy
NjAwRTdCMDAwMDkyNjc1IC8qIFJUQ0RhdGFDaGFubmVsUmVtb3RlSGFuZGxlckNvbm5lY3Rpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUlRDRGF0YUNoYW5uZWxSZW1vdGVI
YW5kbGVyQ29ubmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTZFREMw
MzI2MDBFODBGMDAwOTI2NzUgLyogUlRDRGF0YUNoYW5uZWxSZW1vdGVTb3VyY2VDb25uZWN0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJUQ0RhdGFDaGFubmVsUmVtb3Rl
U291cmNlQ29ubmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MTZGODA3
OTI0NTA5RjMyMDBCNjhGMDIgLyogV2luZG93RGlzcGxheUNhcHR1cmVyTWFjLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdpbmRvd0Rpc3BsYXlDYXB0dXJlck1hYy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MTZGODA3QTI0NTA5RjMyMDBCNjhGMDIgLyogU2Ny
ZWVuRGlzcGxheUNhcHR1cmVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gU2NyZWVuRGlzcGxheUNhcHR1cmVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk0MTZGODA3QjI0NTA5RjMzMDBCNjhGMDIgLyogV2luZG93RGlzcGxheUNhcHR1
cmVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2luZG93
RGlzcGxheUNhcHR1cmVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MTZG
ODA3QzI0NTA5RjMzMDBCNjhGMDIgLyogU2NyZWVuRGlzcGxheUNhcHR1cmVyTWFjLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTZGODA3OTI0NTA5RjMyMDBCNjhGMDIgLyog
Q0dXaW5kb3dDYXB0dXJlU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENHV2luZG93Q2FwdHVyZVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
MTZGODA3QTI0NTA5RjMyMDBCNjhGMDIgLyogQ0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDR0Rpc3BsYXlTdHJlYW1D
YXB0dXJlU291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDE2RjgwN0Iy
NDUwOUYzMzAwQjY4RjAyIC8qIENHV2luZG93Q2FwdHVyZVNvdXJjZS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENHV2luZG93Q2FwdHVyZVNvdXJjZS5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDE2RjgwN0MyNDUwOUYzMzAwQjY4RjAyIC8qIENH
RGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MTZGRDI1RDI0MEVFMUFFMDA2NjYxRDggLyogTm93UGxheWluZ0luZm8uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm93UGxheWluZ0luZm8uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE3MEEyRTkxRDhDMENDMDAwMzE4NDUyIC8qIEpTRE9N
V3JhcHBlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVdy
YXBwZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTcyNTNBODEzNTRCQkJD
MDAzNjBGMkEgLyogTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUNvbnRyb2xUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3Mzc0
LDYgKzE3Mzc2LDEyIEBACiAJCQkJMDcwMzYzREYxODFBMUNEQzAwQzA3NEE1IC8qIEFWVmlkZW9D
YXB0dXJlU291cmNlLm1tICovLAogCQkJCTQxNzdGNTFDMjM4MjU0NDAwMEMwNDQ4NiAvKiBCYXNl
QXVkaW9TaGFyZWRVbml0LmNwcCAqLywKIAkJCQk0MTc3RjUxRTIzODI1NDVFMDBDMDQ0ODYgLyog
QmFzZUF1ZGlvU2hhcmVkVW5pdC5oICovLAorCQkJCTQxNkY4MDdBMjQ1MDlGMzIwMEI2OEYwMiAv
KiBDR0Rpc3BsYXlTdHJlYW1DYXB0dXJlU291cmNlLmNwcCAqLywKKwkJCQk0MTZGODA3QzI0NTA5
RjMzMDBCNjhGMDIgLyogQ0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZS5oICovLAorCQkJCTA3
MTc3NjVFMjZDMzAzQjcwMEE2MzI5OSAvKiBDR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291
cmNlLmggKi8sCisJCQkJMDcxNzc2NUYyNkMzMDNCNzAwQTYzMjk5IC8qIENHRGlzcGxheVN0cmVh
bVNjcmVlbkNhcHR1cmVTb3VyY2UubW0gKi8sCisJCQkJNDE2RjgwNzkyNDUwOUYzMjAwQjY4RjAy
IC8qIENHV2luZG93Q2FwdHVyZVNvdXJjZS5oICovLAorCQkJCTQxNkY4MDdCMjQ1MDlGMzMwMEI2
OEYwMiAvKiBDR1dpbmRvd0NhcHR1cmVTb3VyY2UubW0gKi8sCiAJCQkJM0Y4MDIwMzExRTlFMzgx
RDAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2UuY3BwICovLAogCQkJCTNGODAyMDMy
MUU5RTM4MUQwMERFQzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlLmggKi8sCiAJCQkJM0Y4
MDIwMzMxRTlFMzgxRDAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmNw
cCAqLywKQEAgLTE3MzgyLDggKzE3MzkwLDggQEAKIAkJCQkzRjNCQjU4MzFFNzA5RUU0MDBDNzAx
RjIgLyogQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5oICovLAogCQkJCTA3QTZEODQ4MUZFQjcwMEIw
MDY0NDFERSAvKiBEaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYS5jcHAgKi8sCiAJCQkJMDdBNkQ4
NDkxRkVCNzAwQzAwNjQ0MURFIC8qIERpc3BsYXlDYXB0dXJlTWFuYWdlckNvY29hLmggKi8sCi0J
CQkJMDdBNkQ4NDcxRkVCNzAwQjAwNjQ0MURFIC8qIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2Eu
Y3BwICovLAotCQkJCTA3QTZEODRBMUZFQjcwMEQwMDY0NDFERSAvKiBEaXNwbGF5Q2FwdHVyZVNv
dXJjZUNvY29hLmggKi8sCisJCQkJMDdBNkQ4NDcxRkVCNzAwQjAwNjQ0MURFIC8qIERpc3BsYXlD
YXB0dXJlU291cmNlTWFjLmNwcCAqLywKKwkJCQkwN0E2RDg0QTFGRUI3MDBEMDA2NDQxREUgLyog
RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuaCAqLywKIAkJCQk0MTc0RTkyMDI1MzVEQ0REMDBGRTQy
MDIgLyogTWVkaWFTdHJlYW1UcmFja0F1ZGlvU291cmNlUHJvdmlkZXJDb2NvYS5jcHAgKi8sCiAJ
CQkJNDE3NEU5MUUyNTM1RENENjAwRkU0MjAyIC8qIE1lZGlhU3RyZWFtVHJhY2tBdWRpb1NvdXJj
ZVByb3ZpZGVyQ29jb2EuaCAqLywKIAkJCQkwNzQ0RUNFQjFFMEM0QUU1MDAwRDA5NDQgLyogTW9j
a0F1ZGlvU2hhcmVkVW5pdC5oICovLApAQCAtMTc0MDMsMTIgKzE3NDExLDggQEAKIAkJCQk0MTky
NDI0NzIxMjdCN0NDMDA2MzRGQ0YgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2Eu
bW0gKi8sCiAJCQkJNDFEMTkzOEYyMTUyQzU2MTAwNkYxNENBIC8qIFJlYWx0aW1lVmlkZW9VdGls
aXRpZXMuaCAqLywKIAkJCQk0MTU4NjQ5RjIzQkY3QjkzMDBBMEE2MUUgLyogUmVhbHRpbWVWaWRl
b1V0aWxpdGllcy5tbSAqLywKLQkJCQk0MTZGODA3QzI0NTA5RjMzMDBCNjhGMDIgLyogU2NyZWVu
RGlzcGxheUNhcHR1cmVyTWFjLmggKi8sCi0JCQkJNDE2RjgwN0EyNDUwOUYzMjAwQjY4RjAyIC8q
IFNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYy5tbSAqLywKIAkJCQkwN0Q2MzczRTFCQjBCMTEzMDAy
NTZDRTkgLyogV2ViQXVkaW9Tb3VyY2VQcm92aWRlckNvY29hLmggKi8sCiAJCQkJMDdENjM3M0Yx
QkIwQjExMzAwMjU2Q0U5IC8qIFdlYkF1ZGlvU291cmNlUHJvdmlkZXJDb2NvYS5tbSAqLywKLQkJ
CQk0MTZGODA3OTI0NTA5RjMyMDBCNjhGMDIgLyogV2luZG93RGlzcGxheUNhcHR1cmVyTWFjLmgg
Ki8sCi0JCQkJNDE2RjgwN0IyNDUwOUYzMzAwQjY4RjAyIC8qIFdpbmRvd0Rpc3BsYXlDYXB0dXJl
ck1hYy5tbSAqLywKIAkJCSk7CiAJCQlwYXRoID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9DR0Rpc3BsYXlTdHJlYW1DYXB0dXJlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9DR0Rpc3BsYXlTdHJlYW1DYXB0dXJlU291cmNlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjM2MzU0OWQ1YjBiOQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9DR0Rp
c3BsYXlTdHJlYW1DYXB0dXJlU291cmNlLmNwcApAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkNHRGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2UuaCIKKworI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pICYmIFBMQVRGT1JNKE1BQykKKworI2ltcG9ydCAiR3JhcGhpY3ND
b250ZXh0Q0cuaCIKKyNpbXBvcnQgIkltYWdlQnVmZmVyLmgiCisjaW1wb3J0ICJMb2dnaW5nLmgi
CisjaW1wb3J0ICJNZWRpYUNvbnN0cmFpbnRzLmgiCisjaW1wb3J0ICJNZWRpYVNhbXBsZUFWRk9i
akMuaCIKKyNpbXBvcnQgIk5vdEltcGxlbWVudGVkLmgiCisjaW1wb3J0ICJQbGF0Zm9ybUxheWVy
LmgiCisjaW1wb3J0ICJQbGF0Zm9ybVNjcmVlbi5oIgorI2ltcG9ydCAiUmVhbHRpbWVNZWRpYVNv
dXJjZVNldHRpbmdzLmgiCisjaW1wb3J0ICJSZWFsdGltZVZpZGVvVXRpbGl0aWVzLmgiCisKKyNp
bXBvcnQgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0dE
aXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZTo6fkNHRGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2Uo
KQoreworICAgIG1fY3VycmVudEZyYW1lID0gbnVsbHB0cjsKK30KKworYm9vbCBDR0Rpc3BsYXlT
dHJlYW1DYXB0dXJlU291cmNlOjpzdGFydChmbG9hdCBmcmFtZVJhdGUpCit7CisgICAgQUxXQVlT
X0xPR19JRihsb2dnZXJQdHIoKSwgTE9HSURFTlRJRklFUik7CisKKyAgICBpZiAobV9pc1J1bm5p
bmcpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIHN0YXJ0RGlzcGxheVN0cmVh
bShmcmFtZVJhdGUpOworfQorCit2b2lkIENHRGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2U6OnN0
b3AoKQoreworICAgIEFMV0FZU19MT0dfSUYobG9nZ2VyUHRyKCksIExPR0lERU5USUZJRVIpOwor
CisgICAgaWYgKCFtX2lzUnVubmluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fZGlz
cGxheVN0cmVhbSkKKyAgICAgICAgQ0dEaXNwbGF5U3RyZWFtU3RvcChtX2Rpc3BsYXlTdHJlYW0u
Z2V0KCkpOworCisgICAgbV9pc1J1bm5pbmcgPSBmYWxzZTsKK30KKworRGlzcGxheUNhcHR1cmVT
b3VyY2VNYWM6OkRpc3BsYXlGcmFtZVR5cGUgQ0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZTo6
Z2VuZXJhdGVGcmFtZSgpCit7CisgICAgcmV0dXJuIERpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpE
aXNwbGF5RnJhbWVUeXBlIHsgUmV0YWluUHRyPElPU3VyZmFjZVJlZj4geyBtX2N1cnJlbnRGcmFt
ZS5pb1N1cmZhY2UoKSB9IH07Cit9CisKK2Jvb2wgQ0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJj
ZTo6c3RhcnREaXNwbGF5U3RyZWFtKGZsb2F0IGZyYW1lUmF0ZSkKK3sKKyAgICBpZiAoIWNoZWNr
RGlzcGxheVN0cmVhbSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fY2Fw
dHVyZVF1ZXVlKQorICAgICAgICBtX2NhcHR1cmVRdWV1ZSA9IGFkb3B0T1NPYmplY3QoZGlzcGF0
Y2hfcXVldWVfY3JlYXRlKCJDR0Rpc3BsYXlTdHJlYW1DYXB0dXJlU291cmNlIENhcHR1cmUgUXVl
dWUiLCBESVNQQVRDSF9RVUVVRV9TRVJJQUwpKTsKKworICAgIGlmICghbV9kaXNwbGF5U3RyZWFt
KSB7CisgICAgICAgIG1fZGlzcGxheVN0cmVhbSA9IGNyZWF0ZURpc3BsYXlTdHJlYW0oZnJhbWVS
YXRlLCBmcmFtZUF2YWlsYWJsZUhhbmRsZXIoKSwgbV9jYXB0dXJlUXVldWUuZ2V0KCkpOworICAg
ICAgICBpZiAoIW1fZGlzcGxheVN0cmVhbSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBpZiAoIW1fb2JzZXJ2aW5nRGlzcGxheUNoYW5nZXMpIHsKKyAgICAgICAgICAgIENH
RGlzcGxheVJlZ2lzdGVyUmVjb25maWd1cmF0aW9uQ2FsbGJhY2soZGlzcGxheVJlY29uZmlndXJh
dGlvbkNhbGxCYWNrLCB0aGlzKTsKKyAgICAgICAgICAgIG1fb2JzZXJ2aW5nRGlzcGxheUNoYW5n
ZXMgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgYXV0byBlcnIgPSBDR0Rpc3BsYXlT
dHJlYW1TdGFydChtX2Rpc3BsYXlTdHJlYW0uZ2V0KCkpOworICAgIGlmIChlcnIpIHsKKyAgICAg
ICAgRVJST1JfTE9HX0lGKGxvZ2dlclB0cigpLCBMT0dJREVOVElGSUVSLCAiQ0dEaXNwbGF5U3Ry
ZWFtU3RhcnQgZmFpbGVkIHdpdGggZXJyb3IgIiwgc3RhdGljX2Nhc3Q8aW50PihlcnIpKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1faXNSdW5uaW5nID0gdHJ1ZTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDR0Rpc3BsYXlTdHJlYW1DYXB0dXJlU291cmNlOjpj
b21taXRDb25maWd1cmF0aW9uKGZsb2F0IGZyYW1lUmF0ZSkKK3sKKyAgICBpZiAobV9pc1J1bm5p
bmcgJiYgIW1fZGlzcGxheVN0cmVhbSkKKyAgICAgICAgc3RhcnREaXNwbGF5U3RyZWFtKGZyYW1l
UmF0ZSk7Cit9CisKK3ZvaWQgQ0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZTo6ZGlzcGxheVdh
c1JlY29uZmlndXJlZChDR0RpcmVjdERpc3BsYXlJRCwgQ0dEaXNwbGF5Q2hhbmdlU3VtbWFyeUZs
YWdzKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQhCit9CisKK3ZvaWQgQ0dEaXNwbGF5U3Ry
ZWFtQ2FwdHVyZVNvdXJjZTo6ZGlzcGxheVJlY29uZmlndXJhdGlvbkNhbGxCYWNrKENHRGlyZWN0
RGlzcGxheUlEIGRpc3BsYXksIENHRGlzcGxheUNoYW5nZVN1bW1hcnlGbGFncyBmbGFncywgdm9p
ZCAqdXNlckluZm8pCit7CisgICAgaWYgKHVzZXJJbmZvKQorICAgICAgICByZWludGVycHJldF9j
YXN0PENHRGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2UgKj4odXNlckluZm8pLT5kaXNwbGF5V2Fz
UmVjb25maWd1cmVkKGRpc3BsYXksIGZsYWdzKTsKK30KKwordm9pZCBDR0Rpc3BsYXlTdHJlYW1D
YXB0dXJlU291cmNlOjpuZXdGcmFtZShDR0Rpc3BsYXlTdHJlYW1GcmFtZVN0YXR1cyBzdGF0dXMs
IERpc3BsYXlTdXJmYWNlJiYgbmV3RnJhbWUpCit7CisgICAgc3dpdGNoIChzdGF0dXMpIHsKKyAg
ICBjYXNlIGtDR0Rpc3BsYXlTdHJlYW1GcmFtZVN0YXR1c0ZyYW1lQ29tcGxldGU6CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBrQ0dEaXNwbGF5U3RyZWFtRnJhbWVTdGF0dXNGcmFtZUlkbGU6
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrQ0dEaXNwbGF5U3RyZWFtRnJhbWVTdGF0dXNG
cmFtZUJsYW5rOgorICAgICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJDR0Rpc3BsYXlTdHJlYW1D
YXB0dXJlU291cmNlOjpmcmFtZUF2YWlsYWJsZToga0NHRGlzcGxheVN0cmVhbUZyYW1lU3RhdHVz
RnJhbWVCbGFuayIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Uga0NHRGlzcGxheVN0cmVh
bUZyYW1lU3RhdHVzU3RvcHBlZDoKKyAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQ0dEaXNw
bGF5U3RyZWFtQ2FwdHVyZVNvdXJjZTo6ZnJhbWVBdmFpbGFibGU6IGtDR0Rpc3BsYXlTdHJlYW1G
cmFtZVN0YXR1c1N0b3BwZWQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9jdXJy
ZW50RnJhbWUgPSBXVEZNb3ZlKG5ld0ZyYW1lKTsKK30KKworQ0dEaXNwbGF5U3RyZWFtRnJhbWVB
dmFpbGFibGVIYW5kbGVyIENHRGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2U6OmZyYW1lQXZhaWxh
YmxlSGFuZGxlcigpCit7CisgICAgaWYgKG1fZnJhbWVBdmFpbGFibGVIYW5kbGVyKQorICAgICAg
ICByZXR1cm4gbV9mcmFtZUF2YWlsYWJsZUhhbmRsZXIuZ2V0KCk7CisKKyAgICBhdXRvIHdlYWtU
aGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpOworICAgIG1fZnJhbWVBdmFpbGFibGVIYW5kbGVyID0g
XihDR0Rpc3BsYXlTdHJlYW1GcmFtZVN0YXR1cyBzdGF0dXMsIHVpbnQ2NF90IGRpc3BsYXlUaW1l
LCBJT1N1cmZhY2VSZWYgZnJhbWVTdXJmYWNlLCBDR0Rpc3BsYXlTdHJlYW1VcGRhdGVSZWYgdXBk
YXRlUmVmKQorICAgIHsKKyAgICAgICAgaWYgKCFmcmFtZVN1cmZhY2UgfHwgIWRpc3BsYXlUaW1l
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHNpemVfdCBjb3VudDsKKyAgICAgICAg
YXV0byogcmVjdHMgPSBDR0Rpc3BsYXlTdHJlYW1VcGRhdGVHZXRSZWN0cyh1cGRhdGVSZWYsIGtD
R0Rpc3BsYXlTdHJlYW1VcGRhdGVEaXJ0eVJlY3RzLCAmY291bnQpOworICAgICAgICBpZiAoIXJl
Y3RzIHx8ICFjb3VudCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goW3dlYWtUaGlzLCBzdGF0dXMsIGZyYW1lID0gRGlzcGxheVN1cmZhY2Ug
eyBmcmFtZVN1cmZhY2UgfV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGlmICghd2Vha1RoaXMp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgd2Vha1RoaXMtPm5ld0ZyYW1l
KHN0YXR1cywgV1RGTW92ZShmcmFtZSkpOworICAgICAgICB9KTsKKyAgICB9OworCisgICAgcmV0
dXJuIG1fZnJhbWVBdmFpbGFibGVIYW5kbGVyLmdldCgpOworCit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFBMQVRGT1JNKE1B
QykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9T
Y3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9DR0Rpc3BsYXlTdHJlYW1DYXB0dXJlU291cmNlLmgKc2ltaWxhcml0eSBpbmRl
eCA3MyUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L1NjcmVlbkRpc3BsYXlDYXB0dXJlck1hYy5oCnJlbmFtZSB0byBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZS5oCmluZGV4
IDg1NGNhYmQ2ZjlhZC4uMWMyMGRmYzAwYWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVyTWFjLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NHRGlzcGxheVN0cmVhbUNh
cHR1cmVTb3VyY2UuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTct
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDEwICsyNywxMSBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkgJiYgUExBVEZPUk0oTUFDKQogCi0jaW5jbHVkZSAiRGlzcGxheUNhcHR1cmVTb3VyY2VD
b2NvYS5oIgorI2luY2x1ZGUgIkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgiCiAjaW5jbHVkZSAi
SU9TdXJmYWNlLmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHRGlzcGxheUNvbmZpZ3VyYXRp
b24uaD4KICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dEaXNwbGF5U3RyZWFtLmg+CisjaW5jbHVk
ZSA8d3RmL0Jsb2NrUHRyLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYv
T1NPYmplY3RQdHIuaD4KIApAQCAtMzksMzMgKzQwLDMxIEBAIHR5cGVkZWYgc3RydWN0IG9wYXF1
ZUNNU2FtcGxlQnVmZmVyICpDTVNhbXBsZUJ1ZmZlclJlZjsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jbGFzcyBTY3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWMgZmluYWwgOiBwdWJsaWMgRGlzcGxh
eUNhcHR1cmVTb3VyY2VDb2NvYTo6Q2FwdHVyZXIsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxTY3Jl
ZW5EaXNwbGF5Q2FwdHVyZXJNYWM+IHsKK2NsYXNzIENHRGlzcGxheVN0cmVhbUNhcHR1cmVTb3Vy
Y2UgOiBwdWJsaWMgRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OkNhcHR1cmVyLCBwdWJsaWMgQ2Fu
TWFrZVdlYWtQdHI8Q0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZT4gewogcHVibGljOgotICAg
IHN0YXRpYyBFeHBlY3RlZDxVbmlxdWVSZWY8RGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6Q2Fw
dHVyZXI+LCBTdHJpbmc+IGNyZWF0ZShjb25zdCBTdHJpbmcmKTsKKyAgICBleHBsaWNpdCBDR0Rp
c3BsYXlTdHJlYW1DYXB0dXJlU291cmNlKCkgPSBkZWZhdWx0OworICAgIH5DR0Rpc3BsYXlTdHJl
YW1DYXB0dXJlU291cmNlKCk7CiAKLSAgICBleHBsaWNpdCBTY3JlZW5EaXNwbGF5Q2FwdHVyZXJN
YWModWludDMyX3QpOwotICAgIH5TY3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWMoKTsKK3Byb3RlY3Rl
ZDoKKyAgICB1c2luZyBGcmFtZUF2YWlsYWJsZUNhbGxiYWNrID0gdm9pZCAoXikoQ0dEaXNwbGF5
U3RyZWFtRnJhbWVTdGF0dXMsIHVpbnQ2NF90LCBJT1N1cmZhY2VSZWYsIENHRGlzcGxheVN0cmVh
bVVwZGF0ZVJlZik7CisgICAgdmlydHVhbCBSZXRhaW5QdHI8Q0dEaXNwbGF5U3RyZWFtUmVmPiBj
cmVhdGVEaXNwbGF5U3RyZWFtKGZsb2F0LCBGcmFtZUF2YWlsYWJsZUNhbGxiYWNrLCBkaXNwYXRj
aF9xdWV1ZV90KSA9IDA7CisgICAgdmlydHVhbCBib29sIGNoZWNrRGlzcGxheVN0cmVhbSgpIHsg
cmV0dXJuIHRydWU7IH0KIAotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENhcHR1cmVEZXZpY2U+
IHNjcmVlbkNhcHR1cmVEZXZpY2VXaXRoUGVyc2lzdGVudElEKGNvbnN0IFN0cmluZyYpOwotICAg
IHN0YXRpYyB2b2lkIHNjcmVlbkNhcHR1cmVEZXZpY2VzKFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYp
OworICAgIENHRGlzcGxheVN0cmVhbVJlZiBkaXNwbGF5U3RyZWFtKCkgY29uc3QgeyByZXR1cm4g
bV9kaXNwbGF5U3RyZWFtLmdldCgpOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlRGlzcGxheVN0cmVh
bSgpIHsgbV9kaXNwbGF5U3RyZWFtID0gbnVsbHB0cjsgfQogCiBwcml2YXRlOgogICAgIHN0YXRp
YyB2b2lkIGRpc3BsYXlSZWNvbmZpZ3VyYXRpb25DYWxsQmFjayhDR0RpcmVjdERpc3BsYXlJRCwg
Q0dEaXNwbGF5Q2hhbmdlU3VtbWFyeUZsYWdzLCB2b2lkKik7CiAKLSAgICAvLyBEaXNwbGF5Q2Fw
dHVyZVNvdXJjZUNvY29hOjpDYXB0dXJlcgorICAgIC8vIERpc3BsYXlDYXB0dXJlU291cmNlTWFj
OjpDYXB0dXJlcgogICAgIGJvb2wgc3RhcnQoZmxvYXQgZnJhbWVSYXRlKSBmaW5hbDsKICAgICB2
b2lkIHN0b3AoKSBmaW5hbDsKLSAgICBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpEaXNwbGF5
RnJhbWVUeXBlIGdlbmVyYXRlRnJhbWUoKSBmaW5hbDsKLSAgICBSZWFsdGltZU1lZGlhU291cmNl
U2V0dGluZ3M6OkRpc3BsYXlTdXJmYWNlVHlwZSBzdXJmYWNlVHlwZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RGlzcGxheVN1cmZhY2VUeXBlOjpN
b25pdG9yOyB9CisgICAgRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OkRpc3BsYXlGcmFtZVR5cGUg
Z2VuZXJhdGVGcmFtZSgpIGZpbmFsOwogICAgIHZvaWQgY29tbWl0Q29uZmlndXJhdGlvbihmbG9h
dCBmcmFtZVJhdGUpIGZpbmFsOwotICAgIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGUgZGV2aWNl
VHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OlNj
cmVlbjsgfQotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgIGNvbnN0IGNoYXIqIGxvZ0Ns
YXNzTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJTY3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWMi
OyB9Ci0jZW5kaWYKIAogICAgIHZvaWQgZGlzcGxheVdhc1JlY29uZmlndXJlZChDR0RpcmVjdERp
c3BsYXlJRCwgQ0dEaXNwbGF5Q2hhbmdlU3VtbWFyeUZsYWdzKTsKLSAgICBib29sIGNyZWF0ZURp
c3BsYXlTdHJlYW0oZmxvYXQgZnJhbWVSYXRlKTsKICAgICBib29sIHN0YXJ0RGlzcGxheVN0cmVh
bShmbG9hdCBmcmFtZVJhdGUpOworICAgIEZyYW1lQXZhaWxhYmxlQ2FsbGJhY2sgZnJhbWVBdmFp
bGFibGVIYW5kbGVyKCk7CiAKICAgICBjbGFzcyBEaXNwbGF5U3VyZmFjZSB7CiAgICAgcHVibGlj
OgpAQCAtMTA0LDggKzEwMyw4IEBAIHByaXZhdGU6CiAgICAgRGlzcGxheVN1cmZhY2UgbV9jdXJy
ZW50RnJhbWU7CiAgICAgUmV0YWluUHRyPENHRGlzcGxheVN0cmVhbVJlZj4gbV9kaXNwbGF5U3Ry
ZWFtOwogICAgIE9TT2JqZWN0UHRyPGRpc3BhdGNoX3F1ZXVlX3Q+IG1fY2FwdHVyZVF1ZXVlOwor
ICAgIEJsb2NrUHRyPHZvaWQoQ0dEaXNwbGF5U3RyZWFtRnJhbWVTdGF0dXMsIHVpbnQ2NF90LCBJ
T1N1cmZhY2VSZWYsIENHRGlzcGxheVN0cmVhbVVwZGF0ZVJlZik+IG1fZnJhbWVBdmFpbGFibGVI
YW5kbGVyOwogCi0gICAgdWludDMyX3QgbV9kaXNwbGF5SUQgeyAwIH07CiAgICAgYm9vbCBtX2lz
UnVubmluZyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX29ic2VydmluZ0Rpc3BsYXlDaGFuZ2VzIHsg
ZmFsc2UgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvQ0dEaXNwbGF5U3RyZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NHRGlzcGxheVN0cmVhbVNjcmVlbkNhcHR1
cmVTb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjY5MmZm
NWE0N2ExMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9DR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNlLmgKQEAgLTAsMCAr
MSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgUExBVEZPUk0o
TUFDKQorCisjaW5jbHVkZSAiQ0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZS5oIgorI2luY2x1
ZGUgIklPU3VyZmFjZS5oIgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0Rpc3BsYXlDb25maWd1
cmF0aW9uLmg+CisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHRGlzcGxheVN0cmVhbS5oPgorI2lu
Y2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL09TT2JqZWN0UHRyLmg+CisKK3R5cGVk
ZWYgc3RydWN0IF9fQ1ZCdWZmZXIgKkNWUGl4ZWxCdWZmZXJSZWY7Cit0eXBlZGVmIHN0cnVjdCBv
cGFxdWVDTVNhbXBsZUJ1ZmZlciAqQ01TYW1wbGVCdWZmZXJSZWY7CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgQ0dEaXNwbGF5U3RyZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZSBmaW5hbCA6
IHB1YmxpYyBDR0Rpc3BsYXlTdHJlYW1DYXB0dXJlU291cmNlIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgRXhwZWN0ZWQ8VW5pcXVlUmVmPERpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpDYXB0dXJlcj4s
IFN0cmluZz4gY3JlYXRlKGNvbnN0IFN0cmluZyYpOworCisgICAgZXhwbGljaXQgQ0dEaXNwbGF5
U3RyZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZSh1aW50MzJfdCk7CisgICAgfkNHRGlzcGxheVN0cmVh
bVNjcmVlbkNhcHR1cmVTb3VyY2UoKSA9IGRlZmF1bHQ7CisKKyAgICBzdGF0aWMgc3RkOjpvcHRp
b25hbDxDYXB0dXJlRGV2aWNlPiBzY3JlZW5DYXB0dXJlRGV2aWNlV2l0aFBlcnNpc3RlbnRJRChj
b25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgdm9pZCBzY3JlZW5DYXB0dXJlRGV2aWNlcyhWZWN0
b3I8Q2FwdHVyZURldmljZT4mKTsKKworcHJpdmF0ZToKKworICAgIC8vIERpc3BsYXlDYXB0dXJl
U291cmNlTWFjOjpDYXB0dXJlcgorICAgIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGUgZGV2aWNl
VHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OlNj
cmVlbjsgfQorICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RGlzcGxheVN1cmZhY2VU
eXBlIHN1cmZhY2VUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJj
ZVNldHRpbmdzOjpEaXNwbGF5U3VyZmFjZVR5cGU6Ok1vbml0b3I7IH0KKyNpZiAhUkVMRUFTRV9M
T0dfRElTQUJMRUQKKyAgICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiAiQ0dEaXNwbGF5U3RyZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZSI7IH0KKyNlbmRpZgor
CisgICAgLy8gQ0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZQorICAgIFJldGFpblB0cjxDR0Rp
c3BsYXlTdHJlYW1SZWY+IGNyZWF0ZURpc3BsYXlTdHJlYW0oZmxvYXQsIEZyYW1lQXZhaWxhYmxl
Q2FsbGJhY2ssIGRpc3BhdGNoX3F1ZXVlX3QpIGZpbmFsOworICAgIGJvb2wgY2hlY2tEaXNwbGF5
U3RyZWFtKCkgZmluYWw7CisKKyAgICBjbGFzcyBEaXNwbGF5U3VyZmFjZSB7CisgICAgcHVibGlj
OgorICAgICAgICBEaXNwbGF5U3VyZmFjZSgpID0gZGVmYXVsdDsKKyAgICAgICAgZXhwbGljaXQg
RGlzcGxheVN1cmZhY2UoSU9TdXJmYWNlUmVmIHN1cmZhY2UpCisgICAgICAgICAgICA6IG1fc3Vy
ZmFjZShzdXJmYWNlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9zdXJmYWNlKQorICAg
ICAgICAgICAgICAgIElPU3VyZmFjZUluY3JlbWVudFVzZUNvdW50KG1fc3VyZmFjZS5nZXQoKSk7
CisgICAgICAgIH0KKworICAgICAgICB+RGlzcGxheVN1cmZhY2UoKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAobV9zdXJmYWNlKQorICAgICAgICAgICAgICAgIElPU3VyZmFjZURlY3JlbWVu
dFVzZUNvdW50KG1fc3VyZmFjZS5nZXQoKSk7CisgICAgICAgIH0KKworICAgICAgICBEaXNwbGF5
U3VyZmFjZSYgb3BlcmF0b3I9KElPU3VyZmFjZVJlZiBzdXJmYWNlKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAobV9zdXJmYWNlKQorICAgICAgICAgICAgICAgIElPU3VyZmFjZURlY3JlbWVu
dFVzZUNvdW50KG1fc3VyZmFjZS5nZXQoKSk7CisgICAgICAgICAgICBpZiAoc3VyZmFjZSkKKyAg
ICAgICAgICAgICAgICBJT1N1cmZhY2VJbmNyZW1lbnRVc2VDb3VudChzdXJmYWNlKTsKKyAgICAg
ICAgICAgIG1fc3VyZmFjZSA9IHN1cmZhY2U7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgICAgIH0KKworICAgICAgICBJT1N1cmZhY2VSZWYgaW9TdXJmYWNlKCkgY29uc3QgeyByZXR1
cm4gbV9zdXJmYWNlLmdldCgpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBSZXRhaW5QdHI8
SU9TdXJmYWNlUmVmPiBtX3N1cmZhY2U7CisgICAgfTsKKworICAgIFJldGFpblB0cjxDR0Rpc3Bs
YXlTdHJlYW1SZWY+IG1fZGlzcGxheVN0cmVhbTsKKworICAgIHVpbnQzMl90IG1fZGlzcGxheUlE
IHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KE1FRElBX1NUUkVBTSkgJiYgUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NHRGlzcGxheVN0cmVhbVNjcmVlbkNhcHR1cmVT
b3VyY2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ0dEaXNw
bGF5U3RyZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAuLmY2OTEyMTg0NTRiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9DR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0
dXJlU291cmNlLm1tCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Q0dEaXNwbGF5U3RyZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZS5oIgorCisjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkgJiYgUExBVEZPUk0oTUFDKQorCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5o
IgorI2ltcG9ydCAiSW1hZ2VCdWZmZXIuaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQg
Ik1lZGlhQ29uc3RyYWludHMuaCIKKyNpbXBvcnQgIk1lZGlhU2FtcGxlQVZGT2JqQy5oIgorI2lt
cG9ydCAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbXBvcnQgIlBsYXRmb3JtTGF5ZXIuaCIKKyNpbXBv
cnQgIlBsYXRmb3JtU2NyZWVuLmgiCisjaW1wb3J0ICJSZWFsdGltZU1lZGlhU291cmNlU2V0dGlu
Z3MuaCIKKyNpbXBvcnQgIlJlYWx0aW1lVmlkZW9VdGlsaXRpZXMuaCIKKyNpbXBvcnQgPHBhbC9z
cGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdUb0ludGVn
ZXJDb252ZXJzaW9uLmg+CisKKyNpbXBvcnQgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8Q0dEaXJlY3REaXNwbGF5SUQ+
IHVwZGF0ZURpc3BsYXlJRChDR0RpcmVjdERpc3BsYXlJRCBkaXNwbGF5SUQpCit7CisgICAgdWlu
dDMyX3QgZGlzcGxheUNvdW50ID0gMDsKKyAgICBhdXRvIGVyciA9IENHR2V0QWN0aXZlRGlzcGxh
eUxpc3QoMCwgbnVsbHB0ciwgJmRpc3BsYXlDb3VudCk7CisgICAgaWYgKGVycikgeworICAgICAg
ICBSRUxFQVNFX0xPRyhXZWJSVEMsICJDR0dldEFjdGl2ZURpc3BsYXlMaXN0KCkgcmV0dXJuZWQg
ZXJyb3IgJWQgd2hlbiB0cnlpbmcgdG8gZ2V0IGRpc3BsYXkgY291bnQiLCBzdGF0aWNfY2FzdDxp
bnQ+KGVycikpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIGlm
ICghZGlzcGxheUNvdW50KSB7CisgICAgICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIkNHR2V0QWN0
aXZlRGlzcGxheUxpc3QoKSByZXR1cm5lZCBhIGRpc3BsYXkgY291bnQgb2YgMCIpOworICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIFZlY3RvcjxDR0RpcmVjdERpc3Bs
YXlJRD4gYWN0aXZlRGlzcGxheXMoZGlzcGxheUNvdW50KTsKKyAgICBlcnIgPSBDR0dldEFjdGl2
ZURpc3BsYXlMaXN0KGRpc3BsYXlDb3VudCwgYWN0aXZlRGlzcGxheXMuZGF0YSgpLCAmZGlzcGxh
eUNvdW50KTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIkNH
R2V0QWN0aXZlRGlzcGxheUxpc3QoKSByZXR1cm5lZCBlcnJvciAlZCB3aGVuIHRyeWluZyB0byBn
ZXQgdGhlIGFjdGl2ZSBkaXNwbGF5IGxpc3QiLCBzdGF0aWNfY2FzdDxpbnQ+KGVycikpOworICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIGF1dG8gZGlzcGxheU1hc2sg
PSBDR0Rpc3BsYXlJRFRvT3BlbkdMRGlzcGxheU1hc2soZGlzcGxheUlEKTsKKyAgICBmb3IgKGF1
dG8gZGlzcGxheSA6IGFjdGl2ZURpc3BsYXlzKSB7CisgICAgICAgIGlmIChkaXNwbGF5TWFzayA9
PSBDR0Rpc3BsYXlJRFRvT3BlbkdMRGlzcGxheU1hc2soZGlzcGxheSkpCisgICAgICAgICAgICBy
ZXR1cm4gZGlzcGxheTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitF
eHBlY3RlZDxVbmlxdWVSZWY8RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OkNhcHR1cmVyPiwgU3Ry
aW5nPiBDR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNlOjpjcmVhdGUoY29uc3QgU3Ry
aW5nJiBkZXZpY2VJRCkKK3sKKyAgICBhdXRvIGRpc3BsYXlJRCA9IHBhcnNlSW50ZWdlcjx1aW50
MzJfdD4oZGV2aWNlSUQpOworICAgIGlmICghZGlzcGxheUlEKQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIkludmFsaWQgZGlzcGxheSBkZXZpY2UgSUQiX3MpOworCisgICAgYXV0byBh
Y3R1YWxEaXNwbGF5SUQgPSB1cGRhdGVEaXNwbGF5SUQoZGlzcGxheUlELnZhbHVlKCkpOworICAg
IGlmICghYWN0dWFsRGlzcGxheUlEKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIklu
dmFsaWQgZGlzcGxheSBJRCJfcyk7CisKKyAgICByZXR1cm4gVW5pcXVlUmVmPERpc3BsYXlDYXB0
dXJlU291cmNlTWFjOjpDYXB0dXJlcj4obWFrZVVuaXF1ZVJlZjxDR0Rpc3BsYXlTdHJlYW1TY3Jl
ZW5DYXB0dXJlU291cmNlPihhY3R1YWxEaXNwbGF5SUQudmFsdWUoKSkpOworfQorCitDR0Rpc3Bs
YXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNlOjpDR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJl
U291cmNlKHVpbnQzMl90IGRpc3BsYXlJRCkKKyAgICA6IENHRGlzcGxheVN0cmVhbUNhcHR1cmVT
b3VyY2UoKQorICAgICwgbV9kaXNwbGF5SUQoZGlzcGxheUlEKQoreworfQorCitib29sIENHRGlz
cGxheVN0cmVhbVNjcmVlbkNhcHR1cmVTb3VyY2U6OmNoZWNrRGlzcGxheVN0cmVhbSgpCit7Cisg
ICAgYXV0byBhY3R1YWxEaXNwbGF5SUQgPSB1cGRhdGVEaXNwbGF5SUQobV9kaXNwbGF5SUQpOwor
ICAgIGlmICghYWN0dWFsRGlzcGxheUlEKSB7CisgICAgICAgIEVSUk9SX0xPR19JRihsb2dnZXJQ
dHIoKSwgTE9HSURFTlRJRklFUiwgImludmFsaWQgZGlzcGxheSBJRDogIiwgbV9kaXNwbGF5SUQp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1fZGlzcGxheUlEICE9
IGFjdHVhbERpc3BsYXlJRC52YWx1ZSgpKSB7CisgICAgICAgIG1fZGlzcGxheUlEID0gYWN0dWFs
RGlzcGxheUlELnZhbHVlKCk7CisgICAgICAgIGludmFsaWRhdGVEaXNwbGF5U3RyZWFtKCk7Cisg
ICAgICAgIEFMV0FZU19MT0dfSUYobG9nZ2VyUHRyKCksIExPR0lERU5USUZJRVIsICJkaXNwbGF5
IElEIGNoYW5nZWQgdG8gIiwgc3RhdGljX2Nhc3Q8aW50PihtX2Rpc3BsYXlJRCkpOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUmV0YWluUHRyPENHRGlzcGxheVN0cmVhbVJl
Zj4gQ0dEaXNwbGF5U3RyZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlRGlzcGxheVN0cmVh
bShmbG9hdCBmcmFtZVJhdGUsIEZyYW1lQXZhaWxhYmxlQ2FsbGJhY2sgZnJhbWVBdmFpbGFibGVI
YW5kbGVyLCBkaXNwYXRjaF9xdWV1ZV90IHF1ZXVlKQoreworICAgIHN0YXRpYyBjb25zdCBpbnQg
c2NyZWVuUXVldWVNYXhpbXVtTGVuZ3RoID0gNjsKKworICAgIEFTU0VSVCghZGlzcGxheVN0cmVh
bSgpKTsKKyAgICBBU1NFUlQobV9kaXNwbGF5SUQgPT0gdXBkYXRlRGlzcGxheUlEKG1fZGlzcGxh
eUlEKSk7CisKKyAgICBBTFdBWVNfTE9HX0lGKGxvZ2dlclB0cigpLCBMT0dJREVOVElGSUVSKTsK
KworICAgIGF1dG8gZGlzcGxheU1vZGUgPSBhZG9wdENGKENHRGlzcGxheUNvcHlEaXNwbGF5TW9k
ZShtX2Rpc3BsYXlJRCkpOworICAgIGF1dG8gc2NyZWVuV2lkdGggPSBDR0Rpc3BsYXlNb2RlR2V0
UGl4ZWxzV2lkZShkaXNwbGF5TW9kZS5nZXQoKSk7CisgICAgYXV0byBzY3JlZW5IZWlnaHQgPSBD
R0Rpc3BsYXlNb2RlR2V0UGl4ZWxzSGlnaChkaXNwbGF5TW9kZS5nZXQoKSk7CisgICAgaWYgKCFz
Y3JlZW5XaWR0aCB8fCAhc2NyZWVuSGVpZ2h0KSB7CisgICAgICAgIEVSUk9SX0xPR19JRihsb2dn
ZXJQdHIoKSwgTE9HSURFTlRJRklFUiwgInVuYWJsZSB0byBnZXQgc2NyZWVuIHdpZHRoL2hlaWdo
dCIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBOU0RpY3Rpb25hcnkq
IHN0cmVhbU9wdGlvbnMgPSBAeworICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ0dEaXNw
bGF5U3RyZWFtTWluaW11bUZyYW1lVGltZSA6IEAoMSAvIGZyYW1lUmF0ZSksCisgICAgICAgIChf
X2JyaWRnZSBOU1N0cmluZyAqKWtDR0Rpc3BsYXlTdHJlYW1RdWV1ZURlcHRoIDogQChzY3JlZW5R
dWV1ZU1heGltdW1MZW5ndGgpLAorICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ0dEaXNw
bGF5U3RyZWFtQ29sb3JTcGFjZSA6IChfX2JyaWRnZSBpZClzUkdCQ29sb3JTcGFjZVJlZigpLAor
ICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ0dEaXNwbGF5U3RyZWFtU2hvd0N1cnNvciA6
IEBZRVMsCisgICAgfTsKKworICAgIHJldHVybiBhZG9wdENGKENHRGlzcGxheVN0cmVhbUNyZWF0
ZVdpdGhEaXNwYXRjaFF1ZXVlKG1fZGlzcGxheUlELCBzY3JlZW5XaWR0aCwgc2NyZWVuSGVpZ2h0
LCBwcmVmZXJlZFBpeGVsQnVmZmVyRm9ybWF0KCksIChfX2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYp
c3RyZWFtT3B0aW9ucywgcXVldWUsIGZyYW1lQXZhaWxhYmxlSGFuZGxlcikpOworfQorCitzdGQ6
Om9wdGlvbmFsPENhcHR1cmVEZXZpY2U+IENHRGlzcGxheVN0cmVhbVNjcmVlbkNhcHR1cmVTb3Vy
Y2U6OnNjcmVlbkNhcHR1cmVEZXZpY2VXaXRoUGVyc2lzdGVudElEKGNvbnN0IFN0cmluZyYgZGV2
aWNlSUQpCit7CisgICAgYXV0byBkaXNwbGF5SUQgPSBwYXJzZUludGVnZXI8dWludDMyX3Q+KGRl
dmljZUlEKTsKKyAgICBpZiAoIWRpc3BsYXlJRCkgeworICAgICAgICBSRUxFQVNFX0xPRyhXZWJS
VEMsICJDR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNlOjpzY3JlZW5DYXB0dXJlRGV2
aWNlV2l0aFBlcnNpc3RlbnRJRDogZGlzcGxheSBJRCBkb2VzIG5vdCBjb252ZXJ0IHRvIDMyLWJp
dCBpbnRlZ2VyIik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAg
YXV0byBhY3R1YWxEaXNwbGF5SUQgPSB1cGRhdGVEaXNwbGF5SUQoZGlzcGxheUlELnZhbHVlKCkp
OworICAgIGlmICghYWN0dWFsRGlzcGxheUlEKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgYXV0byBkZXZpY2UgPSBDYXB0dXJlRGV2aWNlKFN0cmluZzo6bnVtYmVyKGFjdHVh
bERpc3BsYXlJRC52YWx1ZSgpKSwgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6U2NyZWVuLCAi
U2NyZWVuQ2FwdHVyZURldmljZSJfcyk7CisgICAgZGV2aWNlLnNldEVuYWJsZWQodHJ1ZSk7CisK
KyAgICByZXR1cm4gZGV2aWNlOworfQorCit2b2lkIENHRGlzcGxheVN0cmVhbVNjcmVlbkNhcHR1
cmVTb3VyY2U6OnNjcmVlbkNhcHR1cmVEZXZpY2VzKFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYgZGlz
cGxheXMpCit7CisgICAgYXV0byBzY3JlZW5JRCA9IGRpc3BsYXlJRChbTlNTY3JlZW4gbWFpblNj
cmVlbl0pOworICAgIGlmIChDR0Rpc3BsYXlJRFRvT3BlbkdMRGlzcGxheU1hc2soc2NyZWVuSUQp
KSB7CisgICAgICAgIENhcHR1cmVEZXZpY2UgZGlzcGxheURldmljZShTdHJpbmc6Om51bWJlcihz
Y3JlZW5JRCksIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OlNjcmVlbiwgbWFrZVN0cmluZygi
U2NyZWVuIDAiKSk7CisgICAgICAgIGRpc3BsYXlEZXZpY2Uuc2V0RW5hYmxlZCh0cnVlKTsKKyAg
ICAgICAgZGlzcGxheXMuYXBwZW5kKFdURk1vdmUoZGlzcGxheURldmljZSkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgdWludDMyX3QgZGlzcGxheUNvdW50ID0gMDsKKyAgICBhdXRv
IGVyciA9IENHR2V0QWN0aXZlRGlzcGxheUxpc3QoMCwgbnVsbHB0ciwgJmRpc3BsYXlDb3VudCk7
CisgICAgaWYgKGVycikgeworICAgICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJDR0dldEFjdGl2
ZURpc3BsYXlMaXN0KCkgcmV0dXJuZWQgZXJyb3IgJWQgd2hlbiB0cnlpbmcgdG8gZ2V0IGRpc3Bs
YXkgY291bnQiLCAoaW50KWVycik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IWRpc3BsYXlDb3VudCkgeworICAgICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJDR0dldEFjdGl2
ZURpc3BsYXlMaXN0KCkgcmV0dXJuZWQgYSBkaXNwbGF5IGNvdW50IG9mIDAiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxDR0RpcmVjdERpc3BsYXlJRD4gYWN0aXZlRGlz
cGxheXMoZGlzcGxheUNvdW50KTsKKyAgICBlcnIgPSBDR0dldEFjdGl2ZURpc3BsYXlMaXN0KGRp
c3BsYXlDb3VudCwgYWN0aXZlRGlzcGxheXMuZGF0YSgpLCAmZGlzcGxheUNvdW50KTsKKyAgICBp
ZiAoZXJyKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIkNHR2V0QWN0aXZlRGlzcGxh
eUxpc3QoKSByZXR1cm5lZCBlcnJvciAlZCB3aGVuIHRyeWluZyB0byBnZXQgdGhlIGFjdGl2ZSBk
aXNwbGF5IGxpc3QiLCAoaW50KWVycik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
bnQgY291bnQgPSAwOworICAgIGZvciAoYXV0byBkaXNwbGF5SUQgOiBhY3RpdmVEaXNwbGF5cykg
eworICAgICAgICBDYXB0dXJlRGV2aWNlIGRpc3BsYXlEZXZpY2UoU3RyaW5nOjpudW1iZXIoZGlz
cGxheUlEKSwgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6U2NyZWVuLCBtYWtlU3RyaW5nKCJT
Y3JlZW4gIiwgU3RyaW5nOjpudW1iZXIoY291bnQrKykpKTsKKyAgICAgICAgZGlzcGxheURldmlj
ZS5zZXRFbmFibGVkKENHRGlzcGxheUlEVG9PcGVuR0xEaXNwbGF5TWFzayhkaXNwbGF5SUQpKTsK
KyAgICAgICAgZGlzcGxheXMuYXBwZW5kKFdURk1vdmUoZGlzcGxheURldmljZSkpOworICAgIH0K
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NU
UkVBTSkgJiYgUExBVEZPUk0oTUFDKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVyTWFjLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ0dXaW5kb3dDYXB0dXJlU291cmNlLmgK
c2ltaWxhcml0eSBpbmRleCA4MCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL1dpbmRvd0Rpc3BsYXlDYXB0dXJlck1hYy5oCnJlbmFtZSB0byBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ0dXaW5kb3dDYXB0dXJlU291cmNl
LmgKaW5kZXggZWY5ZjQyOGZhZmZiLi5jNDE3M2Y0MzNkZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWMu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ0dXaW5kb3dD
YXB0dXJlU291cmNlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkg
JiYgUExBVEZPUk0oTUFDKQogCi0jaW5jbHVkZSAiRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5o
IgorI2luY2x1ZGUgIkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgiCiAKIHR5cGVkZWYgc3RydWN0
IF9fQ1ZCdWZmZXIgKkNWQnVmZmVyUmVmOwogdHlwZWRlZiBDVkJ1ZmZlclJlZiBDVkltYWdlQnVm
ZmVyUmVmOwpAQCAtMzgsMjcgKzM4LDI1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
UGl4ZWxCdWZmZXJDb25mb3JtZXJDVjsKIAotY2xhc3MgV2luZG93RGlzcGxheUNhcHR1cmVyTWFj
IGZpbmFsIDogcHVibGljIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OkNhcHR1cmVyIHsKK2Ns
YXNzIENHV2luZG93Q2FwdHVyZVNvdXJjZSBmaW5hbCA6IHB1YmxpYyBEaXNwbGF5Q2FwdHVyZVNv
dXJjZU1hYzo6Q2FwdHVyZXIgewogcHVibGljOgotICAgIHN0YXRpYyBFeHBlY3RlZDxVbmlxdWVS
ZWY8RGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6Q2FwdHVyZXI+LCBTdHJpbmc+IGNyZWF0ZShj
b25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgRXhwZWN0ZWQ8VW5pcXVlUmVmPERpc3BsYXlDYXB0
dXJlU291cmNlTWFjOjpDYXB0dXJlcj4sIFN0cmluZz4gY3JlYXRlKGNvbnN0IFN0cmluZyYpOwog
Ci0gICAgZXhwbGljaXQgV2luZG93RGlzcGxheUNhcHR1cmVyTWFjKHVpbnQzMl90KTsKLSAgICB2
aXJ0dWFsIH5XaW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWMoKSA9IGRlZmF1bHQ7CisgICAgZXhwbGlj
aXQgQ0dXaW5kb3dDYXB0dXJlU291cmNlKHVpbnQzMl90KTsKKyAgICB2aXJ0dWFsIH5DR1dpbmRv
d0NhcHR1cmVTb3VyY2UoKSA9IGRlZmF1bHQ7CiAKICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxD
YXB0dXJlRGV2aWNlPiB3aW5kb3dDYXB0dXJlRGV2aWNlV2l0aFBlcnNpc3RlbnRJRChjb25zdCBT
dHJpbmcmKTsKICAgICBzdGF0aWMgdm9pZCB3aW5kb3dDYXB0dXJlRGV2aWNlcyhWZWN0b3I8Q2Fw
dHVyZURldmljZT4mKTsKIAogcHJpdmF0ZToKLSAgICAvLyBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNv
Y29hOjpDYXB0dXJlcgorICAgIC8vIERpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpDYXB0dXJlcgog
ICAgIGJvb2wgc3RhcnQoZmxvYXQpIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KICAgICB2b2lkIHN0
b3AoKSBmaW5hbCB7IH0KLSAgICBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpEaXNwbGF5RnJh
bWVUeXBlIGdlbmVyYXRlRnJhbWUoKSBmaW5hbDsKKyAgICBEaXNwbGF5Q2FwdHVyZVNvdXJjZU1h
Yzo6RGlzcGxheUZyYW1lVHlwZSBnZW5lcmF0ZUZyYW1lKCkgZmluYWw7CiAgICAgUmVhbHRpbWVN
ZWRpYVNvdXJjZVNldHRpbmdzOjpEaXNwbGF5U3VyZmFjZVR5cGUgc3VyZmFjZVR5cGUoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkRpc3BsYXlTdXJm
YWNlVHlwZTo6V2luZG93OyB9CiAgICAgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZSBkZXZpY2VU
eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6V2lu
ZG93OyB9CiAgICAgdm9pZCBjb21taXRDb25maWd1cmF0aW9uKGZsb2F0KSBmaW5hbCB7IH0KLSNp
ZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiAiV2luZG93RGlzcGxheUNhcHR1cmVyTWFjIjsgfQotI2VuZGlm
CisgICAgY29uc3QgY2hhciogbG9nQ2xhc3NOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkNH
V2luZG93Q2FwdHVyZVNvdXJjZSI7IH0KIAogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiB3aW5k
b3dJbWFnZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NHV2luZG93Q2FwdHVyZVNvdXJjZS5tbQpzaW1pbGFyaXR5
IGluZGV4IDgxJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVyTWFjLm1tCnJlbmFtZSB0byBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ0dXaW5kb3dDYXB0dXJlU291cmNlLm1tCmluZGV4
IGYwMmNlOGZkZjBmMC4uMTQyNzU2Zjg0NmZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVyTWFjLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9DR1dpbmRvd0NhcHR1cmVT
b3VyY2UubW0KQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9y
dCAiV2luZG93RGlzcGxheUNhcHR1cmVyTWFjLmgiCisjaW1wb3J0ICJDR1dpbmRvd0NhcHR1cmVT
b3VyY2UuaCIKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFBMQVRGT1JNKE1BQykKIApA
QCAtMTAyLDcgKzEwMiw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiB3aW5k
b3dEZXNjcmlwdGlvbihDR1dpbmRvd0lEIGlkKQogICAgIHJldHVybiBjaGVja2VkX2NmX2Nhc3Q8
Q0ZEaWN0aW9uYXJ5UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KHdpbmRvd3MuZ2V0KCksIDAp
KTsKIH0KIAotRXhwZWN0ZWQ8VW5pcXVlUmVmPERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OkNh
cHR1cmVyPiwgU3RyaW5nPiBXaW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWM6OmNyZWF0ZShjb25zdCBT
dHJpbmcmIGRldmljZUlEKQorRXhwZWN0ZWQ8VW5pcXVlUmVmPERpc3BsYXlDYXB0dXJlU291cmNl
TWFjOjpDYXB0dXJlcj4sIFN0cmluZz4gQ0dXaW5kb3dDYXB0dXJlU291cmNlOjpjcmVhdGUoY29u
c3QgU3RyaW5nJiBkZXZpY2VJRCkKIHsKICAgICBhdXRvIGRpc3BsYXlJRCA9IHBhcnNlSW50ZWdl
cjx1aW50MzJfdD4oZGV2aWNlSUQpOwogICAgIGlmICghZGlzcGxheUlEKQpAQCAtMTEyLDMzICsx
MTIsMzMgQEAgRXhwZWN0ZWQ8VW5pcXVlUmVmPERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OkNh
cHR1cmVyPiwgU3RyaW5nPiBXaW5kb3dEaXNwbGF5Q2EKICAgICBpZiAoIXdpbmRvd0luZm8pCiAg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiSW52YWxpZCB3aW5kb3cgSUQiX3MpOwogCi0g
ICAgcmV0dXJuIFVuaXF1ZVJlZjxEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpDYXB0dXJlcj4o
bWFrZVVuaXF1ZVJlZjxXaW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWM+KCpkaXNwbGF5SUQpKTsKKyAg
ICByZXR1cm4gVW5pcXVlUmVmPERpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpDYXB0dXJlcj4obWFr
ZVVuaXF1ZVJlZjxDR1dpbmRvd0NhcHR1cmVTb3VyY2U+KCpkaXNwbGF5SUQpKTsKIH0KIAotV2lu
ZG93RGlzcGxheUNhcHR1cmVyTWFjOjpXaW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWModWludDMyX3Qg
d2luZG93SUQpCitDR1dpbmRvd0NhcHR1cmVTb3VyY2U6OkNHV2luZG93Q2FwdHVyZVNvdXJjZSh1
aW50MzJfdCB3aW5kb3dJRCkKICAgICA6IG1fd2luZG93SUQod2luZG93SUQpCiB7CiB9CiAKLVJl
dGFpblB0cjxDR0ltYWdlUmVmPiBXaW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWM6OndpbmRvd0ltYWdl
KCkKK1JldGFpblB0cjxDR0ltYWdlUmVmPiBDR1dpbmRvd0NhcHR1cmVTb3VyY2U6OndpbmRvd0lt
YWdlKCkKIHsKICAgICBhdXRvIGltYWdlID0gYWRvcHRDRihDR1dpbmRvd0xpc3RDcmVhdGVJbWFn
ZShDR1JlY3ROdWxsLCBrQ0dXaW5kb3dMaXN0T3B0aW9uSW5jbHVkaW5nV2luZG93LCBtX3dpbmRv
d0lELCBrQ0dXaW5kb3dJbWFnZUJvdW5kc0lnbm9yZUZyYW1pbmcgfCBrQ0dXaW5kb3dJbWFnZVNo
b3VsZEJlT3BhcXVlKSk7CiAgICAgaWYgKCFpbWFnZSkKLSAgICAgICAgUkVMRUFTRV9MT0coV2Vi
UlRDLCAiV2luZG93RGlzcGxheUNhcHR1cmVyTWFjOjp3aW5kb3dJbWFnZTogZmFpbGVkIHRvIGNh
cHR1cmUgd2luZG93IGltYWdlIik7CisgICAgICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIkNHV2lu
ZG93Q2FwdHVyZVNvdXJjZTo6d2luZG93SW1hZ2U6IGZhaWxlZCB0byBjYXB0dXJlIHdpbmRvdyBp
bWFnZSIpOwogCiAgICAgcmV0dXJuIGltYWdlOwogfQogCi1EaXNwbGF5Q2FwdHVyZVNvdXJjZUNv
Y29hOjpEaXNwbGF5RnJhbWVUeXBlIFdpbmRvd0Rpc3BsYXlDYXB0dXJlck1hYzo6Z2VuZXJhdGVG
cmFtZSgpCitEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6RGlzcGxheUZyYW1lVHlwZSBDR1dpbmRv
d0NhcHR1cmVTb3VyY2U6OmdlbmVyYXRlRnJhbWUoKQogewotICAgIHJldHVybiBEaXNwbGF5Q2Fw
dHVyZVNvdXJjZUNvY29hOjpEaXNwbGF5RnJhbWVUeXBlIHsgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IHsgd2luZG93SW1hZ2UoKSB9IH07CisgICAgcmV0dXJuIERpc3BsYXlDYXB0dXJlU291cmNlTWFj
OjpEaXNwbGF5RnJhbWVUeXBlIHsgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHsgd2luZG93SW1hZ2Uo
KSB9IH07CiB9CiAKLXN0ZDo6b3B0aW9uYWw8Q2FwdHVyZURldmljZT4gV2luZG93RGlzcGxheUNh
cHR1cmVyTWFjOjp3aW5kb3dDYXB0dXJlRGV2aWNlV2l0aFBlcnNpc3RlbnRJRChjb25zdCBTdHJp
bmcmIGlkU3RyaW5nKQorc3RkOjpvcHRpb25hbDxDYXB0dXJlRGV2aWNlPiBDR1dpbmRvd0NhcHR1
cmVTb3VyY2U6OndpbmRvd0NhcHR1cmVEZXZpY2VXaXRoUGVyc2lzdGVudElEKGNvbnN0IFN0cmlu
ZyYgaWRTdHJpbmcpCiB7CiAgICAgYXV0byB3aW5kb3dJRCA9IHBhcnNlSW50ZWdlcjx1aW50MzJf
dD4oaWRTdHJpbmcpOwogICAgIGlmICghd2luZG93SUQpIHsKLSAgICAgICAgUkVMRUFTRV9MT0co
V2ViUlRDLCAiV2luZG93RGlzcGxheUNhcHR1cmVyTWFjOjp3aW5kb3dDYXB0dXJlRGV2aWNlV2l0
aFBlcnNpc3RlbnRJRDogd2luZG93IElEIGRvZXMgbm90IGNvbnZlcnQgdG8gMzItYml0IGludGVn
ZXIiKTsKKyAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQ0dXaW5kb3dDYXB0dXJlU291cmNl
Ojp3aW5kb3dDYXB0dXJlRGV2aWNlV2l0aFBlcnNpc3RlbnRJRDogd2luZG93IElEIGRvZXMgbm90
IGNvbnZlcnQgdG8gMzItYml0IGludGVnZXIiKTsKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKICAgICB9CiAKQEAgLTE1MSw3ICsxNTEsNyBAQCBzdGQ6Om9wdGlvbmFsPENhcHR1cmVEZXZp
Y2U+IFdpbmRvd0Rpc3BsYXlDYXB0dXJlck1hYzo6d2luZG93Q2FwdHVyZURldmljZVdpdGhQZQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIH0pKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKFdl
YlJUQywgIldpbmRvd0Rpc3BsYXlDYXB0dXJlck1hYzo6d2luZG93Q2FwdHVyZURldmljZVdpdGhQ
ZXJzaXN0ZW50SUQ6IHdpbmRvdyBJRCBpcyBub3QgdmFsaWQiKTsKKyAgICAgICAgUkVMRUFTRV9M
T0coV2ViUlRDLCAiQ0dXaW5kb3dDYXB0dXJlU291cmNlOjp3aW5kb3dDYXB0dXJlRGV2aWNlV2l0
aFBlcnNpc3RlbnRJRDogd2luZG93IElEIGlzIG5vdCB2YWxpZCIpOwogICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogICAgIH0KIApAQCAtMTYxLDcgKzE2MSw3IEBAIHN0ZDo6b3B0aW9uYWw8
Q2FwdHVyZURldmljZT4gV2luZG93RGlzcGxheUNhcHR1cmVyTWFjOjp3aW5kb3dDYXB0dXJlRGV2
aWNlV2l0aFBlCiAgICAgcmV0dXJuIGRldmljZTsKIH0KIAotdm9pZCBXaW5kb3dEaXNwbGF5Q2Fw
dHVyZXJNYWM6OndpbmRvd0NhcHR1cmVEZXZpY2VzKFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYgd2lu
ZG93cykKK3ZvaWQgQ0dXaW5kb3dDYXB0dXJlU291cmNlOjp3aW5kb3dDYXB0dXJlRGV2aWNlcyhW
ZWN0b3I8Q2FwdHVyZURldmljZT4mIHdpbmRvd3MpCiB7CiAgICAgYW55T2ZDR1dpbmRvdyhbJl0g
KENGRGljdGlvbmFyeVJlZiwgaW50IGlkLCBjb25zdCBTdHJpbmcmIHRpdGxlKSBtdXRhYmxlIHsK
ICAgICAgICAgQ2FwdHVyZURldmljZSBkZXZpY2UoU3RyaW5nOjpudW1iZXIoaWQpLCBDYXB0dXJl
RGV2aWNlOjpEZXZpY2VUeXBlOjpXaW5kb3csIHRpdGxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2Nv
YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNh
cHR1cmVNYW5hZ2VyQ29jb2EuY3BwCmluZGV4IDJmZWY4YmIxNzM3Yy4uMGI2OTRjOWY4OTA1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxh
eUNhcHR1cmVNYW5hZ2VyQ29jb2EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYS5jcHAKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsOCArMzMsOCBA
QAogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiAjaWYgUExBVEZPUk0oTUFDKQot
I2luY2x1ZGUgIlNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYy5oIgotI2luY2x1ZGUgIldpbmRvd0Rp
c3BsYXlDYXB0dXJlck1hYy5oIgorI2luY2x1ZGUgIkNHRGlzcGxheVN0cmVhbVNjcmVlbkNhcHR1
cmVTb3VyY2UuaCIKKyNpbmNsdWRlICJDR1dpbmRvd0NhcHR1cmVTb3VyY2UuaCIKICNpbmNsdWRl
IDxDb3JlR3JhcGhpY3MvQ0dEaXJlY3REaXNwbGF5Lmg+CiAjZW5kaWYKIApAQCAtNjEsMjEgKzYx
LDIxIEBAIGNvbnN0IFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYgRGlzcGxheUNhcHR1cmVNYW5hZ2Vy
Q29jb2E6OmNhcHR1cmVEZXZpY2VzKCkKIHZvaWQgRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2E6
OnVwZGF0ZURpc3BsYXlDYXB0dXJlRGV2aWNlcygpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQotICAg
IFNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYzo6c2NyZWVuQ2FwdHVyZURldmljZXMobV9kZXZpY2Vz
KTsKKyAgICBDR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNlOjpzY3JlZW5DYXB0dXJl
RGV2aWNlcyhtX2RldmljZXMpOwogI2VuZGlmCiB9CiAKIHZvaWQgRGlzcGxheUNhcHR1cmVNYW5h
Z2VyQ29jb2E6OnVwZGF0ZVdpbmRvd0NhcHR1cmVEZXZpY2VzKCkKIHsKICNpZiBQTEFURk9STShN
QUMpCi0gICAgV2luZG93RGlzcGxheUNhcHR1cmVyTWFjOjp3aW5kb3dDYXB0dXJlRGV2aWNlcyht
X2RldmljZXMpOworICAgIENHV2luZG93Q2FwdHVyZVNvdXJjZTo6d2luZG93Q2FwdHVyZURldmlj
ZXMobV9kZXZpY2VzKTsKICNlbmRpZgogfQogCiBzdGQ6Om9wdGlvbmFsPENhcHR1cmVEZXZpY2U+
IERpc3BsYXlDYXB0dXJlTWFuYWdlckNvY29hOjpzY3JlZW5DYXB0dXJlRGV2aWNlV2l0aFBlcnNp
c3RlbnRJRChjb25zdCBTdHJpbmcmIGRldmljZUlEKQogewogI2lmIFBMQVRGT1JNKE1BQykKLSAg
ICByZXR1cm4gU2NyZWVuRGlzcGxheUNhcHR1cmVyTWFjOjpzY3JlZW5DYXB0dXJlRGV2aWNlV2l0
aFBlcnNpc3RlbnRJRChkZXZpY2VJRCk7CisgICAgcmV0dXJuIENHRGlzcGxheVN0cmVhbVNjcmVl
bkNhcHR1cmVTb3VyY2U6OnNjcmVlbkNhcHR1cmVEZXZpY2VXaXRoUGVyc2lzdGVudElEKGRldmlj
ZUlEKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGRldmljZUlEKTsKICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwpAQCAtODUsNyArODUsNyBAQCBzdGQ6Om9wdGlvbmFsPENhcHR1cmVEZXZpY2U+
IERpc3BsYXlDYXB0dXJlTWFuYWdlckNvY29hOjpzY3JlZW5DYXB0dXJlRGV2aWNlV2l0aAogc3Rk
OjpvcHRpb25hbDxDYXB0dXJlRGV2aWNlPiBEaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYTo6d2lu
ZG93Q2FwdHVyZURldmljZVdpdGhQZXJzaXN0ZW50SUQoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCkK
IHsKICNpZiBQTEFURk9STShNQUMpCi0gICAgcmV0dXJuIFdpbmRvd0Rpc3BsYXlDYXB0dXJlck1h
Yzo6d2luZG93Q2FwdHVyZURldmljZVdpdGhQZXJzaXN0ZW50SUQoZGV2aWNlSUQpOworICAgIHJl
dHVybiBDR1dpbmRvd0NhcHR1cmVTb3VyY2U6OndpbmRvd0NhcHR1cmVEZXZpY2VXaXRoUGVyc2lz
dGVudElEKGRldmljZUlEKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGRldmljZUlEKTsKICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlTWFj
LmNwcApzaW1pbGFyaXR5IGluZGV4IDc2JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5jcHAKcmVuYW1l
IHRvIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVy
ZVNvdXJjZU1hYy5jcHAKaW5kZXggNTgyZjRiMjZjZjExLi5lYTM4YzhhOTQ3NGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVy
ZVNvdXJjZUNvY29hLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQsMTAgKzI0LDEyIEBACiAg
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRpc3BsYXlDYXB0dXJlU291cmNl
Q29jb2EuaCIKKyNpbmNsdWRlICJEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5oIgogCi0jaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBQTEFURk9STShN
QUMpCiAKKyNpbmNsdWRlICJDR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNlLmgiCisj
aW5jbHVkZSAiQ0dXaW5kb3dDYXB0dXJlU291cmNlLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgog
I2luY2x1ZGUgIk1lZGlhU2FtcGxlQVZGT2JqQy5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyQ29u
Zm9ybWVyQ1YuaCIKQEAgLTQwLDcgKzQyLDYgQEAKICNpbmNsdWRlIDxDb3JlTWVkaWEvQ01TeW5j
Lmg+CiAjaW5jbHVkZSA8bWFjaC9tYWNoX3RpbWUuaD4KICNpbmNsdWRlIDxwYWwvYXZmb3VuZGF0
aW9uL01lZGlhVGltZUFWRm91bmRhdGlvbi5oPgotI2luY2x1ZGUgPHBhbC9jZi9Db3JlTWVkaWFT
b2Z0TGluay5oPgogI2luY2x1ZGUgPHBhbC9zcGkvY2YvQ29yZUF1ZGlvU1BJLmg+CiAjaW5jbHVk
ZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbmNsdWRlIDxwYWwvc3BpL2NvY29h
L0lPU3VyZmFjZVNQSS5oPgpAQCAtNDgsMjMgKzQ5LDE4IEBACiAjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAotI2lmIFBMQVRGT1JN
KE1BQykKLSNpbmNsdWRlICJTY3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWMuaCIKLSNpbmNsdWRlICJX
aW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWMuaCIKLSNlbmRpZgotCiAjaW5jbHVkZSAiQ29yZVZpZGVv
U29mdExpbmsuaCIKKyNpbmNsdWRlIDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1DYXB0dXJlU291cmNlT3JFcnJvciBEaXNwbGF5Q2FwdHVyZVNv
dXJjZUNvY29hOjpjcmVhdGUoY29uc3QgQ2FwdHVyZURldmljZSYgZGV2aWNlLCBjb25zdCBNZWRp
YUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cykKK0NhcHR1cmVTb3VyY2VPckVycm9yIERpc3BsYXlD
YXB0dXJlU291cmNlTWFjOjpjcmVhdGUoY29uc3QgQ2FwdHVyZURldmljZSYgZGV2aWNlLCBjb25z
dCBNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cykKIHsKLSNpZiBQTEFURk9STShNQUMpCiAg
ICAgc3dpdGNoIChkZXZpY2UudHlwZSgpKSB7CiAgICAgY2FzZSBDYXB0dXJlRGV2aWNlOjpEZXZp
Y2VUeXBlOjpTY3JlZW46Ci0gICAgICAgIHJldHVybiBjcmVhdGUoU2NyZWVuRGlzcGxheUNhcHR1
cmVyTWFjOjpjcmVhdGUoZGV2aWNlLnBlcnNpc3RlbnRJZCgpKSwgZGV2aWNlLCBjb25zdHJhaW50
cyk7CisgICAgICAgIHJldHVybiBjcmVhdGUoQ0dEaXNwbGF5U3RyZWFtU2NyZWVuQ2FwdHVyZVNv
dXJjZTo6Y3JlYXRlKGRldmljZS5wZXJzaXN0ZW50SWQoKSksIGRldmljZSwgY29uc3RyYWludHMp
OwogICAgIGNhc2UgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6V2luZG93OgotICAgICAgICBy
ZXR1cm4gY3JlYXRlKFdpbmRvd0Rpc3BsYXlDYXB0dXJlck1hYzo6Y3JlYXRlKGRldmljZS5wZXJz
aXN0ZW50SWQoKSksIGRldmljZSwgY29uc3RyYWludHMpOworICAgICAgICByZXR1cm4gY3JlYXRl
KENHV2luZG93Q2FwdHVyZVNvdXJjZTo6Y3JlYXRlKGRldmljZS5wZXJzaXN0ZW50SWQoKSksIGRl
dmljZSwgY29uc3RyYWludHMpOwogICAgIGNhc2UgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6
TWljcm9waG9uZToKICAgICBjYXNlIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OlNwZWFrZXI6
CiAgICAgY2FzZSBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpDYW1lcmE6CkBAIC03MiwxOSAr
NjgsMTYgQEAgQ2FwdHVyZVNvdXJjZU9yRXJyb3IgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6
Y3JlYXRlKGNvbnN0IENhcHR1cmVEZXZpY2UmIGRldmkKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGRl
dmljZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGNvbnN0cmFpbnRzKTsKLSNlbmRpZgorCiAgICAgcmV0
dXJuIHsgfTsKIH0KIAotQ2FwdHVyZVNvdXJjZU9yRXJyb3IgRGlzcGxheUNhcHR1cmVTb3VyY2VD
b2NvYTo6Y3JlYXRlKEV4cGVjdGVkPFVuaXF1ZVJlZjxDYXB0dXJlcj4sIFN0cmluZz4mJiBjYXB0
dXJlciwgY29uc3QgQ2FwdHVyZURldmljZSYgZGV2aWNlLCBjb25zdCBNZWRpYUNvbnN0cmFpbnRz
KiBjb25zdHJhaW50cykKK0NhcHR1cmVTb3VyY2VPckVycm9yIERpc3BsYXlDYXB0dXJlU291cmNl
TWFjOjpjcmVhdGUoRXhwZWN0ZWQ8VW5pcXVlUmVmPENhcHR1cmVyPiwgU3RyaW5nPiYmIGNhcHR1
cmVyLCBjb25zdCBDYXB0dXJlRGV2aWNlJiBkZXZpY2UsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMq
IGNvbnN0cmFpbnRzKQogewogICAgIGlmICghY2FwdHVyZXIuaGFzX3ZhbHVlKCkpCiAgICAgICAg
IHJldHVybiBDYXB0dXJlU291cmNlT3JFcnJvciB7IFdURk1vdmUoY2FwdHVyZXIuZXJyb3IoKSkg
fTsKIAotICAgIGF1dG8gc291cmNlID0gYWRvcHRSZWYoKm5ldyBEaXNwbGF5Q2FwdHVyZVNvdXJj
ZUNvY29hKFdURk1vdmUoY2FwdHVyZXIudmFsdWUoKSksIFN0cmluZyB7IGRldmljZS5sYWJlbCgp
IH0pKTsKKyAgICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVmKCpuZXcgRGlzcGxheUNhcHR1cmVTb3Vy
Y2VNYWMoV1RGTW92ZShjYXB0dXJlci52YWx1ZSgpKSwgU3RyaW5nIHsgZGV2aWNlLmxhYmVsKCkg
fSkpOwogICAgIGlmIChjb25zdHJhaW50cykgewogICAgICAgICBhdXRvIHJlc3VsdCA9IHNvdXJj
ZS0+YXBwbHlDb25zdHJhaW50cygqY29uc3RyYWludHMpOwogICAgICAgICBpZiAocmVzdWx0KQpA
QCAtOTQsMjEgKzg3LDE4IEBAIENhcHR1cmVTb3VyY2VPckVycm9yIERpc3BsYXlDYXB0dXJlU291
cmNlQ29jb2E6OmNyZWF0ZShFeHBlY3RlZDxVbmlxdWVSZWY8Q2FwdHVyCiAgICAgcmV0dXJuIENh
cHR1cmVTb3VyY2VPckVycm9yKFdURk1vdmUoc291cmNlKSk7CiB9CiAKLURpc3BsYXlDYXB0dXJl
U291cmNlQ29jb2E6OkRpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EoVW5pcXVlUmVmPENhcHR1cmVy
PiYmIGNhcHR1cmVyLCBTdHJpbmcmJiBuYW1lKQorRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OkRp
c3BsYXlDYXB0dXJlU291cmNlTWFjKFVuaXF1ZVJlZjxDYXB0dXJlcj4mJiBjYXB0dXJlciwgU3Ry
aW5nJiYgbmFtZSkKICAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoVHlwZTo6VmlkZW8sIFdURk1v
dmUobmFtZSkpCiAgICAgLCBtX2NhcHR1cmVyKFdURk1vdmUoY2FwdHVyZXIpKQotICAgICwgbV90
aW1lcihSdW5Mb29wOjpjdXJyZW50KCksIHRoaXMsICZEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29h
OjplbWl0RnJhbWUpCisgICAgLCBtX3RpbWVyKFJ1bkxvb3A6OmN1cnJlbnQoKSwgdGhpcywgJkRp
c3BsYXlDYXB0dXJlU291cmNlTWFjOjplbWl0RnJhbWUpCiB7CiB9CiAKLURpc3BsYXlDYXB0dXJl
U291cmNlQ29jb2E6On5EaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hKCkKK0Rpc3BsYXlDYXB0dXJl
U291cmNlTWFjOjp+RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMoKQogewotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2luZ2xldG9uKCkuZGlz
cGxheUNhcHR1cmVGYWN0b3J5KCkudW5zZXRBY3RpdmVTb3VyY2UoKnRoaXMpOwotI2VuZGlmCiB9
CiAKLWNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIERpc3BsYXlDYXB0dXJl
U291cmNlQ29jb2E6OmNhcGFiaWxpdGllcygpCitjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2Fw
YWJpbGl0aWVzJiBEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Y2FwYWJpbGl0aWVzKCkKIHsKICAg
ICBpZiAoIW1fY2FwYWJpbGl0aWVzKSB7CiAgICAgICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBh
YmlsaXRpZXMgY2FwYWJpbGl0aWVzKHNldHRpbmdzKCkuc3VwcG9ydGVkQ29uc3RyYWludHMoKSk7
CkBAIC0xMjMsNyArMTEzLDcgQEAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGll
cyYgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6Y2FwYWJpbGl0aWVzKCkKICAgICByZXR1cm4g
bV9jYXBhYmlsaXRpZXMudmFsdWUoKTsKIH0KIAotY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNl
dHRpbmdzJiBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpzZXR0aW5ncygpCitjb25zdCBSZWFs
dGltZU1lZGlhU291cmNlU2V0dGluZ3MmIERpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpzZXR0aW5n
cygpCiB7CiAgICAgaWYgKCFtX2N1cnJlbnRTZXR0aW5ncykgewogICAgICAgICBSZWFsdGltZU1l
ZGlhU291cmNlU2V0dGluZ3Mgc2V0dGluZ3M7CkBAIC0xNTAsNyArMTQwLDcgQEAgY29uc3QgUmVh
bHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpzZXR0
aW5ncygpCiAgICAgcmV0dXJuIG1fY3VycmVudFNldHRpbmdzLnZhbHVlKCk7CiB9CiAKLXZvaWQg
RGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6c2V0dGluZ3NEaWRDaGFuZ2UoT3B0aW9uU2V0PFJl
YWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZz4gc2V0dGluZ3MpCit2b2lkIERpc3BsYXlD
YXB0dXJlU291cmNlTWFjOjpzZXR0aW5nc0RpZENoYW5nZShPcHRpb25TZXQ8UmVhbHRpbWVNZWRp
YVNvdXJjZVNldHRpbmdzOjpGbGFnPiBzZXR0aW5ncykKIHsKICAgICBpZiAoc2V0dGluZ3MuY29u
dGFpbnMoUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnOjpGcmFtZVJhdGUpICYmIG1f
dGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV90aW1lci5zdGFydFJlcGVhdGluZygxX3MgLyBm
cmFtZVJhdGUoKSk7CkBAIC0xNjEsMTIgKzE1MSw4IEBAIHZvaWQgRGlzcGxheUNhcHR1cmVTb3Vy
Y2VDb2NvYTo6c2V0dGluZ3NEaWRDaGFuZ2UoT3B0aW9uU2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VT
CiAgICAgbV9jdXJyZW50U2V0dGluZ3MgPSB7IH07CiB9CiAKLXZvaWQgRGlzcGxheUNhcHR1cmVT
b3VyY2VDb2NvYTo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3ZvaWQgRGlzcGxheUNhcHR1cmVTb3Vy
Y2VNYWM6OnN0YXJ0UHJvZHVjaW5nRGF0YSgpCiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LSAgICBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpzaW5nbGV0b24oKS5kaXNwbGF5Q2FwdHVy
ZUZhY3RvcnkoKS5zZXRBY3RpdmVTb3VyY2UoKnRoaXMpOwotI2VuZGlmCi0KICAgICBtX3N0YXJ0
VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogICAgIG1fdGltZXIuc3RhcnRSZXBlYXRpbmco
MV9zIC8gZnJhbWVSYXRlKCkpOwogCkBAIC0xNzQsNyArMTYwLDcgQEAgdm9pZCBEaXNwbGF5Q2Fw
dHVyZVNvdXJjZUNvY29hOjpzdGFydFByb2R1Y2luZ0RhdGEoKQogICAgICAgICBjYXB0dXJlRmFp
bGVkKCk7CiB9CiAKLXZvaWQgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6c3RvcFByb2R1Y2lu
Z0RhdGEoKQordm9pZCBEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6c3RvcFByb2R1Y2luZ0RhdGEo
KQogewogICAgIG1fdGltZXIuc3RvcCgpOwogICAgIG1fZWxhcHNlZFRpbWUgKz0gTW9ub3Rvbmlj
VGltZTo6bm93KCkgLSBtX3N0YXJ0VGltZTsKQEAgLTE4Myw3ICsxNjksNyBAQCB2b2lkIERpc3Bs
YXlDYXB0dXJlU291cmNlQ29jb2E6OnN0b3BQcm9kdWNpbmdEYXRhKCkKICAgICBtX2NhcHR1cmVy
LT5zdG9wKCk7CiB9CiAKLVNlY29uZHMgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6ZWxhcHNl
ZFRpbWUoKQorU2Vjb25kcyBEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6ZWxhcHNlZFRpbWUoKQog
ewogICAgIGlmIChzdGQ6OmlzbmFuKG1fc3RhcnRUaW1lKSkKICAgICAgICAgcmV0dXJuIG1fZWxh
cHNlZFRpbWU7CkBAIC0xOTIsNyArMTc4LDcgQEAgU2Vjb25kcyBEaXNwbGF5Q2FwdHVyZVNvdXJj
ZUNvY29hOjplbGFwc2VkVGltZSgpCiB9CiAKIC8vIFdlIGtlZXAgdGhlIGFzcGVjdCByYXRpbyBv
ZiB0aGUgaW50cmluc2ljIHNpemUgZm9yIHRoZSBmcmFtZSBzaXplIGFzIGdldERpc3BsYXlNZWRp
YSBhbGxvd3MgbWF4IGNvbnN0cmFpbnRzIG9ubHkuCi12b2lkIERpc3BsYXlDYXB0dXJlU291cmNl
Q29jb2E6OnVwZGF0ZUZyYW1lU2l6ZSgpCit2b2lkIERpc3BsYXlDYXB0dXJlU291cmNlTWFjOjp1
cGRhdGVGcmFtZVNpemUoKQogewogICAgIGF1dG8gaW50cmluc2ljU2l6ZSA9IHRoaXMtPmludHJp
bnNpY1NpemUoKTsKIApAQCAtMjE5LDkgKzIwNSw4IEBAIHZvaWQgRGlzcGxheUNhcHR1cmVTb3Vy
Y2VDb2NvYTo6dXBkYXRlRnJhbWVTaXplKCkKICAgICBzZXRTaXplKGludHJpbnNpY1NpemUpOwog
fQogCi12b2lkIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OmVtaXRGcmFtZSgpCit2b2lkIERp
c3BsYXlDYXB0dXJlU291cmNlTWFjOjplbWl0RnJhbWUoKQogewotI2lmIFBMQVRGT1JNKENPQ09B
KSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWV9TSU1VTEFUT1IpCiAgICAgaWYgKG11dGVkKCkpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMjQ2LDcgKzIzMSw2IEBAIHZvaWQgRGlzcGxheUNhcHR1cmVT
b3VyY2VDb2NvYTo6ZW1pdEZyYW1lKCkKICAgICAgICAgfQogICAgICk7CiAKLSAgICBBU1NFUlQo
IWltYWdlU2l6ZS5pc0VtcHR5KCkpOwogICAgIGlmIChpbWFnZVNpemUuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTI3NiwyMiArMjYwLDE5IEBAIHZvaWQgRGlzcGxheUNhcHR1cmVT
b3VyY2VDb2NvYTo6ZW1pdEZyYW1lKCkKICAgICB9CiAKICAgICB2aWRlb1NhbXBsZUF2YWlsYWJs
ZSgqc2FtcGxlLmdldCgpKTsKLSNlbmRpZgogfQogCi0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVE
Ci12b2lkIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OkNhcHR1cmVyOjpzZXRMb2dnZXIoY29u
c3QgTG9nZ2VyJiBuZXdMb2dnZXIsIGNvbnN0IHZvaWQqIG5ld0xvZ0lkZW50aWZpZXIpCit2b2lk
IERpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpDYXB0dXJlcjo6c2V0TG9nZ2VyKGNvbnN0IExvZ2dl
ciYgbmV3TG9nZ2VyLCBjb25zdCB2b2lkKiBuZXdMb2dJZGVudGlmaWVyKQogewogICAgIG1fbG9n
Z2VyID0gJm5ld0xvZ2dlcjsKICAgICBtX2xvZ0lkZW50aWZpZXIgPSBuZXdMb2dJZGVudGlmaWVy
OwogfQogCi1XVEZMb2dDaGFubmVsJiBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpDYXB0dXJl
cjo6bG9nQ2hhbm5lbCgpIGNvbnN0CitXVEZMb2dDaGFubmVsJiBEaXNwbGF5Q2FwdHVyZVNvdXJj
ZU1hYzo6Q2FwdHVyZXI6OmxvZ0NoYW5uZWwoKSBjb25zdAogewogICAgIHJldHVybiBMb2dXZWJS
VEM7CiB9Ci0jZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5B
QkxFKE1FRElBX1NUUkVBTSkKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBQTEFU
Rk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgKc2ltaWxhcml0eSBp
bmRleCA4OCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuaApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgKaW5kZXgg
N2RlZjZjZjE3YmM4Li5lNDZhYjhkOTM4YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291
cmNlTWFjLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNSw3ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxF
KE1FRElBX1NUUkVBTSkKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBQTEFURk9STShNQUMp
CiAKICNpbmNsdWRlICJDYXB0dXJlRGV2aWNlLmgiCiAjaW5jbHVkZSAiSW1hZ2VUcmFuc2ZlclNl
c3Npb25WVC5oIgpAQCAtNTAsMTQgKzUwLDExIEBAIGNsYXNzIENhcHR1cmVEZXZpY2VJbmZvOwog
Y2xhc3MgSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDsKIGNsYXNzIFBpeGVsQnVmZmVyQ29uZm9ybWVy
Q1Y7CiAKLWNsYXNzIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EgZmluYWwgOiBwdWJsaWMgUmVh
bHRpbWVNZWRpYVNvdXJjZSB7CitjbGFzcyBEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYyBmaW5hbCA6
IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlIHsKIHB1YmxpYzoKICAgICB1c2luZyBEaXNwbGF5
RnJhbWVUeXBlID0gV1RGOjpWYXJpYW50PFJlZlB0cjxOYXRpdmVJbWFnZT4sIFJldGFpblB0cjxJ
T1N1cmZhY2VSZWY+PjsKLSAgICBjbGFzcyBDYXB0dXJlcgotI2lmICFSRUxFQVNFX0xPR19ESVNB
QkxFRAotICAgICAgICA6IHB1YmxpYyBMb2dnZXJIZWxwZXIKLSNlbmRpZgotICAgIHsKKworICAg
IGNsYXNzIENhcHR1cmVyIDogcHVibGljIExvZ2dlckhlbHBlciB7CiAgICAgICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+Q2FwdHVyZXIo
KSA9IGRlZmF1bHQ7CkBAIC02OSwxOSArNjYsMTUgQEAgcHVibGljOgogICAgICAgICB2aXJ0dWFs
IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RGlzcGxheVN1cmZhY2VUeXBlIHN1cmZhY2VU
eXBlKCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29uZmlndXJhdGlv
bihmbG9hdCBmcmFtZVJhdGUpID0gMDsKIAotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogICAg
ICAgICB2aXJ0dWFsIHZvaWQgc2V0TG9nZ2VyKGNvbnN0IExvZ2dlciYsIGNvbnN0IHZvaWQqKTsK
ICAgICAgICAgY29uc3QgTG9nZ2VyKiBsb2dnZXJQdHIoKSBjb25zdCB7IHJldHVybiBtX2xvZ2dl
ci5nZXQoKTsgfQogICAgICAgICBjb25zdCBMb2dnZXImIGxvZ2dlcigpIGNvbnN0IGZpbmFsIHsg
QVNTRVJUKG1fbG9nZ2VyKTsgcmV0dXJuICptX2xvZ2dlci5nZXQoKTsgfQogICAgICAgICBjb25z
dCB2b2lkKiBsb2dJZGVudGlmaWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9sb2dJZGVudGlm
aWVyOyB9CiAgICAgICAgIFdURkxvZ0NoYW5uZWwmIGxvZ0NoYW5uZWwoKSBjb25zdCBmaW5hbDsK
LSNlbmRpZgogCiAgICAgcHJpdmF0ZToKLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKICAgICAg
ICAgUmVmUHRyPGNvbnN0IExvZ2dlcj4gbV9sb2dnZXI7CiAgICAgICAgIGNvbnN0IHZvaWQqIG1f
bG9nSWRlbnRpZmllcjsKLSNlbmRpZgogICAgIH07CiAKICAgICBzdGF0aWMgQ2FwdHVyZVNvdXJj
ZU9yRXJyb3IgY3JlYXRlKGNvbnN0IENhcHR1cmVEZXZpY2UmLCBjb25zdCBNZWRpYUNvbnN0cmFp
bnRzKik7CkBAIC05MSw4ICs4NCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZUZyYW1lU2l6
ZSgpOwogCiBwcml2YXRlOgotICAgIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EoVW5pcXVlUmVm
PENhcHR1cmVyPiYmLCBTdHJpbmcmJiBuYW1lKTsKLSAgICB+RGlzcGxheUNhcHR1cmVTb3VyY2VD
b2NvYSgpOworICAgIERpc3BsYXlDYXB0dXJlU291cmNlTWFjKFVuaXF1ZVJlZjxDYXB0dXJlcj4m
JiwgU3RyaW5nJiYgbmFtZSk7CisgICAgfkRpc3BsYXlDYXB0dXJlU291cmNlTWFjKCk7CiAKICAg
ICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIGZpbmFsOwogICAgIHZvaWQgc3RvcFByb2R1Y2lu
Z0RhdGEoKSBmaW5hbDsKQEAgLTEwMyw5ICs5Niw3IEBAIHByaXZhdGU6CiAgICAgQ2FwdHVyZURl
dmljZTo6RGV2aWNlVHlwZSBkZXZpY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jYXB0dXJlci0+
ZGV2aWNlVHlwZSgpOyB9CiAgICAgdm9pZCBjb21taXRDb25maWd1cmF0aW9uKCkgZmluYWwgeyBy
ZXR1cm4gbV9jYXB0dXJlci0+Y29tbWl0Q29uZmlndXJhdGlvbihmcmFtZVJhdGUoKSk7IH0KIAot
I2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgIGNvbnN0IGNoYXIqIGxvZ0NsYXNzTmFtZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuICJEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hIjsgfQotI2Vu
ZGlmCisgICAgY29uc3QgY2hhciogbG9nQ2xhc3NOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
IkRpc3BsYXlDYXB0dXJlU291cmNlTWFjIjsgfQogCiAgICAgdm9pZCBlbWl0RnJhbWUoKTsKIApA
QCAtMTE4LDExICsxMDksMTEgQEAgcHJpdmF0ZToKICAgICBTZWNvbmRzIG1fZWxhcHNlZFRpbWUg
eyAwX3MgfTsKIAogICAgIFJldGFpblB0cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPiBtX2J1ZmZl
ckF0dHJpYnV0ZXM7Ci0gICAgUnVuTG9vcDo6VGltZXI8RGlzcGxheUNhcHR1cmVTb3VyY2VDb2Nv
YT4gbV90aW1lcjsKKyAgICBSdW5Mb29wOjpUaW1lcjxEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYz4g
bV90aW1lcjsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZVRyYW5zZmVyU2Vzc2lvblZUPiBt
X2ltYWdlVHJhbnNmZXJTZXNzaW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0j
ZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RS
RUFNKSAmJiBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVNZWRpYVNvdXJjZUNl
bnRlck1hYy5jcHAKaW5kZXggM2UzYWE0ZWQ4NmQ1Li5jZTQ5MDkxMDNlNmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5jcHAKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDEwICszNiw5
IEBACiAjaW5jbHVkZSAiQVZWaWRlb0NhcHR1cmVTb3VyY2UuaCIKICNpbmNsdWRlICJDb3JlQXVk
aW9DYXB0dXJlU291cmNlLmgiCiAjaW5jbHVkZSAiRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2Eu
aCIKKyNpbmNsdWRlICJEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbVByaXZhdGUuaCIKLSNpbmNsdWRlICJTY3JlZW5E
aXNwbGF5Q2FwdHVyZXJNYWMuaCIKLSNpbmNsdWRlICJXaW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWMu
aCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC02NSw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICAgICAgVU5VU0VEX1BBUkFNKGNvbnN0cmFpbnRz
KTsKICNlbmRpZgogI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgcmV0dXJuIERpc3BsYXlDYXB0
dXJlU291cmNlQ29jb2E6OmNyZWF0ZShkZXZpY2UsIGNvbnN0cmFpbnRzKTsKKyAgICAgICAgcmV0
dXJuIERpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpjcmVhdGUoZGV2aWNlLCBjb25zdHJhaW50cyk7
CiAjZWxzZQogICAgICAgICByZXR1cm4geyB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVyTWFj
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3Bs
YXlDYXB0dXJlck1hYy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRjZTU0MWNj
Zjc4Li4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlck1hYy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDMy
MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2NyZWVuRGlzcGxheUNhcHR1cmVy
TWFjLmgiCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBQTEFURk9STShNQUMpCi0KLSNp
bXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW1wb3J0ICJJbWFnZUJ1ZmZlci5oIgotI2lt
cG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiTWVkaWFDb25zdHJhaW50cy5oIgotI2ltcG9ydCAi
TWVkaWFTYW1wbGVBVkZPYmpDLmgiCi0jaW1wb3J0ICJOb3RJbXBsZW1lbnRlZC5oIgotI2ltcG9y
dCAiUGxhdGZvcm1MYXllci5oIgotI2ltcG9ydCAiUGxhdGZvcm1TY3JlZW4uaCIKLSNpbXBvcnQg
IlJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncy5oIgotI2ltcG9ydCAiUmVhbHRpbWVWaWRlb1V0
aWxpdGllcy5oIgotI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5o
PgotCi0jaW1wb3J0ICJDb3JlVmlkZW9Tb2Z0TGluay5oIgotCi1leHRlcm4gIkMiIHsKLXNpemVf
dCBDR0Rpc3BsYXlNb2RlR2V0UGl4ZWxzV2lkZShDR0Rpc3BsYXlNb2RlUmVmKTsKLXNpemVfdCBD
R0Rpc3BsYXlNb2RlR2V0UGl4ZWxzSGlnaChDR0Rpc3BsYXlNb2RlUmVmKTsKLX0KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxDR0RpcmVjdERpc3BsYXlJRD4g
dXBkYXRlRGlzcGxheUlEKENHRGlyZWN0RGlzcGxheUlEIGRpc3BsYXlJRCkKLXsKLSAgICB1aW50
MzJfdCBkaXNwbGF5Q291bnQgPSAwOwotICAgIGF1dG8gZXJyID0gQ0dHZXRBY3RpdmVEaXNwbGF5
TGlzdCgwLCBudWxscHRyLCAmZGlzcGxheUNvdW50KTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAg
IFJFTEVBU0VfTE9HKFdlYlJUQywgIkNHR2V0QWN0aXZlRGlzcGxheUxpc3QoKSByZXR1cm5lZCBl
cnJvciAlZCB3aGVuIHRyeWluZyB0byBnZXQgZGlzcGxheSBjb3VudCIsIHN0YXRpY19jYXN0PGlu
dD4oZXJyKSk7Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgfQotCi0gICAgaWYg
KCFkaXNwbGF5Q291bnQpIHsKLSAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQ0dHZXRBY3Rp
dmVEaXNwbGF5TGlzdCgpIHJldHVybmVkIGEgZGlzcGxheSBjb3VudCBvZiAwIik7Ci0gICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgfQotCi0gICAgVmVjdG9yPENHRGlyZWN0RGlzcGxh
eUlEPiBhY3RpdmVEaXNwbGF5cyhkaXNwbGF5Q291bnQpOwotICAgIGVyciA9IENHR2V0QWN0aXZl
RGlzcGxheUxpc3QoZGlzcGxheUNvdW50LCBhY3RpdmVEaXNwbGF5cy5kYXRhKCksICZkaXNwbGF5
Q291bnQpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQ0dH
ZXRBY3RpdmVEaXNwbGF5TGlzdCgpIHJldHVybmVkIGVycm9yICVkIHdoZW4gdHJ5aW5nIHRvIGdl
dCB0aGUgYWN0aXZlIGRpc3BsYXkgbGlzdCIsIHN0YXRpY19jYXN0PGludD4oZXJyKSk7Ci0gICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgfQotCi0gICAgYXV0byBkaXNwbGF5TWFzayA9
IENHRGlzcGxheUlEVG9PcGVuR0xEaXNwbGF5TWFzayhkaXNwbGF5SUQpOwotICAgIGZvciAoYXV0
byBkaXNwbGF5IDogYWN0aXZlRGlzcGxheXMpIHsKLSAgICAgICAgaWYgKGRpc3BsYXlNYXNrID09
IENHRGlzcGxheUlEVG9PcGVuR0xEaXNwbGF5TWFzayhkaXNwbGF5KSkKLSAgICAgICAgICAgIHJl
dHVybiBkaXNwbGF5OwotICAgIH0KLQotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19Ci0KLUV4
cGVjdGVkPFVuaXF1ZVJlZjxEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpDYXB0dXJlcj4sIFN0
cmluZz4gU2NyZWVuRGlzcGxheUNhcHR1cmVyTWFjOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBkZXZp
Y2VJRCkKLXsKLSAgICBhdXRvIGRpc3BsYXlJRCA9IHBhcnNlSW50ZWdlcjx1aW50MzJfdD4oZGV2
aWNlSUQpOwotICAgIGlmICghZGlzcGxheUlEKQotICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIkludmFsaWQgZGlzcGxheSBkZXZpY2UgSUQiX3MpOwotICAgIGF1dG8gYWN0dWFsRGlzcGxh
eUlEID0gdXBkYXRlRGlzcGxheUlEKCpkaXNwbGF5SUQpOwotICAgIGlmICghYWN0dWFsRGlzcGxh
eUlEKQotICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludmFsaWQgZGlzcGxheSBJRCJf
cyk7Ci0gICAgcmV0dXJuIFVuaXF1ZVJlZjxEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpDYXB0
dXJlcj4obWFrZVVuaXF1ZVJlZjxTY3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWM+KGFjdHVhbERpc3Bs
YXlJRC52YWx1ZSgpKSk7Ci19Ci0KLVNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYzo6U2NyZWVuRGlz
cGxheUNhcHR1cmVyTWFjKHVpbnQzMl90IGRpc3BsYXlJRCkKLSAgICA6IG1fZGlzcGxheUlEKGRp
c3BsYXlJRCkKLXsKLX0KLQotU2NyZWVuRGlzcGxheUNhcHR1cmVyTWFjOjp+U2NyZWVuRGlzcGxh
eUNhcHR1cmVyTWFjKCkKLXsKLSAgICBpZiAobV9vYnNlcnZpbmdEaXNwbGF5Q2hhbmdlcykKLSAg
ICAgICAgQ0dEaXNwbGF5UmVtb3ZlUmVjb25maWd1cmF0aW9uQ2FsbGJhY2soZGlzcGxheVJlY29u
ZmlndXJhdGlvbkNhbGxCYWNrLCB0aGlzKTsKLQotICAgIG1fY3VycmVudEZyYW1lID0gbnVsbHB0
cjsKLX0KLQotYm9vbCBTY3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWM6OmNyZWF0ZURpc3BsYXlTdHJl
YW0oZmxvYXQgZnJhbWVSYXRlKQotewotICAgIHN0YXRpYyBjb25zdCBpbnQgc2NyZWVuUXVldWVN
YXhpbXVtTGVuZ3RoID0gNjsKLQotICAgIEFMV0FZU19MT0dfSUYobG9nZ2VyUHRyKCksIExPR0lE
RU5USUZJRVIpOwotCi0gICAgYXV0byBhY3R1YWxEaXNwbGF5SUQgPSB1cGRhdGVEaXNwbGF5SUQo
bV9kaXNwbGF5SUQpOwotICAgIGlmICghYWN0dWFsRGlzcGxheUlEKSB7Ci0gICAgICAgIEVSUk9S
X0xPR19JRihsb2dnZXJQdHIoKSwgTE9HSURFTlRJRklFUiwgImludmFsaWQgZGlzcGxheSBJRDog
IiwgbV9kaXNwbGF5SUQpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYg
KG1fZGlzcGxheUlEICE9IGFjdHVhbERpc3BsYXlJRC52YWx1ZSgpKSB7Ci0gICAgICAgIG1fZGlz
cGxheUlEID0gYWN0dWFsRGlzcGxheUlELnZhbHVlKCk7Ci0gICAgICAgIEFMV0FZU19MT0dfSUYo
bG9nZ2VyUHRyKCksIExPR0lERU5USUZJRVIsICJkaXNwbGF5IElEIGNoYW5nZWQgdG8gIiwgc3Rh
dGljX2Nhc3Q8aW50PihtX2Rpc3BsYXlJRCkpOwotICAgICAgICBtX2Rpc3BsYXlTdHJlYW0gPSBu
dWxscHRyOwotICAgIH0KLQotICAgIGlmICghbV9kaXNwbGF5U3RyZWFtKSB7Ci0gICAgICAgIGF1
dG8gZGlzcGxheU1vZGUgPSBhZG9wdENGKENHRGlzcGxheUNvcHlEaXNwbGF5TW9kZShtX2Rpc3Bs
YXlJRCkpOwotICAgICAgICBhdXRvIHNjcmVlbldpZHRoID0gQ0dEaXNwbGF5TW9kZUdldFBpeGVs
c1dpZGUoZGlzcGxheU1vZGUuZ2V0KCkpOwotICAgICAgICBhdXRvIHNjcmVlbkhlaWdodCA9IENH
RGlzcGxheU1vZGVHZXRQaXhlbHNIaWdoKGRpc3BsYXlNb2RlLmdldCgpKTsKLSAgICAgICAgaWYg
KCFzY3JlZW5XaWR0aCB8fCAhc2NyZWVuSGVpZ2h0KSB7Ci0gICAgICAgICAgICBFUlJPUl9MT0df
SUYobG9nZ2VyUHRyKCksIExPR0lERU5USUZJRVIsICJ1bmFibGUgdG8gZ2V0IHNjcmVlbiB3aWR0
aC9oZWlnaHQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmICghbV9jYXB0dXJlUXVldWUpCi0gICAgICAgICAgICBtX2NhcHR1cmVRdWV1ZSA9IGFk
b3B0T1NPYmplY3QoZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJTY3JlZW5EaXNwbGF5Q2FwdHVyZXJN
YWMgQ2FwdHVyZSBRdWV1ZSIsIERJU1BBVENIX1FVRVVFX1NFUklBTCkpOwotCi0gICAgICAgIE5T
RGljdGlvbmFyeSogc3RyZWFtT3B0aW9ucyA9IEB7Ci0gICAgICAgICAgICAoX19icmlkZ2UgTlNT
dHJpbmcgKilrQ0dEaXNwbGF5U3RyZWFtTWluaW11bUZyYW1lVGltZSA6IEAoMSAvIGZyYW1lUmF0
ZSksCi0gICAgICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ0dEaXNwbGF5U3RyZWFtUXVl
dWVEZXB0aCA6IEAoc2NyZWVuUXVldWVNYXhpbXVtTGVuZ3RoKSwKLSAgICAgICAgICAgIChfX2Jy
aWRnZSBOU1N0cmluZyAqKWtDR0Rpc3BsYXlTdHJlYW1Db2xvclNwYWNlIDogKF9fYnJpZGdlIGlk
KXNSR0JDb2xvclNwYWNlUmVmKCksCi0gICAgICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilr
Q0dEaXNwbGF5U3RyZWFtU2hvd0N1cnNvciA6IEBZRVMsCi0gICAgICAgIH07Ci0KLSAgICAgICAg
YXV0byB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKTsKLSAgICAgICAgYXV0byBmcmFtZUF2
YWlsYWJsZUJsb2NrID0gXihDR0Rpc3BsYXlTdHJlYW1GcmFtZVN0YXR1cyBzdGF0dXMsIHVpbnQ2
NF90IGRpc3BsYXlUaW1lLCBJT1N1cmZhY2VSZWYgZnJhbWVTdXJmYWNlLCBDR0Rpc3BsYXlTdHJl
YW1VcGRhdGVSZWYgdXBkYXRlUmVmKSB7Ci0KLSAgICAgICAgICAgIGlmICghZnJhbWVTdXJmYWNl
IHx8ICFkaXNwbGF5VGltZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAg
IHNpemVfdCBjb3VudDsKLSAgICAgICAgICAgIGF1dG8qIHJlY3RzID0gQ0dEaXNwbGF5U3RyZWFt
VXBkYXRlR2V0UmVjdHModXBkYXRlUmVmLCBrQ0dEaXNwbGF5U3RyZWFtVXBkYXRlRGlydHlSZWN0
cywgJmNvdW50KTsKLSAgICAgICAgICAgIGlmICghcmVjdHMgfHwgIWNvdW50KQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt3
ZWFrVGhpcywgc3RhdHVzLCBmcmFtZSA9IERpc3BsYXlTdXJmYWNlIHsgZnJhbWVTdXJmYWNlIH1d
KCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIHdlYWtUaGlzLT5uZXdGcmFtZShzdGF0
dXMsIFdURk1vdmUoZnJhbWUpKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9OwotCi0gICAg
ICAgIG1fZGlzcGxheVN0cmVhbSA9IGFkb3B0Q0YoQ0dEaXNwbGF5U3RyZWFtQ3JlYXRlV2l0aERp
c3BhdGNoUXVldWUobV9kaXNwbGF5SUQsIHNjcmVlbldpZHRoLCBzY3JlZW5IZWlnaHQsIHByZWZl
cmVkUGl4ZWxCdWZmZXJGb3JtYXQoKSwgKF9fYnJpZGdlIENGRGljdGlvbmFyeVJlZilzdHJlYW1P
cHRpb25zLCBtX2NhcHR1cmVRdWV1ZS5nZXQoKSwgZnJhbWVBdmFpbGFibGVCbG9jaykpOwotICAg
ICAgICBpZiAoIW1fZGlzcGxheVN0cmVhbSkgewotICAgICAgICAgICAgRVJST1JfTE9HX0lGKGxv
Z2dlclB0cigpLCBMT0dJREVOVElGSUVSLCAiQ0dEaXNwbGF5U3RyZWFtQ3JlYXRlIGZhaWxlZCIp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KCFtX29ic2VydmluZ0Rpc3BsYXlDaGFuZ2VzKSB7Ci0gICAgICAgIENHRGlzcGxheVJlZ2lzdGVy
UmVjb25maWd1cmF0aW9uQ2FsbGJhY2soZGlzcGxheVJlY29uZmlndXJhdGlvbkNhbGxCYWNrLCB0
aGlzKTsKLSAgICAgICAgbV9vYnNlcnZpbmdEaXNwbGF5Q2hhbmdlcyA9IHRydWU7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgU2NyZWVuRGlzcGxheUNhcHR1cmVyTWFjOjpz
dGFydChmbG9hdCBmcmFtZVJhdGUpCi17Ci0gICAgQUxXQVlTX0xPR19JRihsb2dnZXJQdHIoKSwg
TE9HSURFTlRJRklFUik7Ci0KLSAgICBpZiAobV9pc1J1bm5pbmcpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgcmV0dXJuIHN0YXJ0RGlzcGxheVN0cmVhbShmcmFtZVJhdGUpOwotfQotCi12
b2lkIFNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYzo6c3RvcCgpCi17Ci0gICAgQUxXQVlTX0xPR19J
Rihsb2dnZXJQdHIoKSwgTE9HSURFTlRJRklFUik7Ci0KLSAgICBpZiAoIW1faXNSdW5uaW5nKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9kaXNwbGF5U3RyZWFtKQotICAgICAgICBDR0Rp
c3BsYXlTdHJlYW1TdG9wKG1fZGlzcGxheVN0cmVhbS5nZXQoKSk7Ci0KLSAgICBtX2lzUnVubmlu
ZyA9IGZhbHNlOwotfQotCi1EaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpEaXNwbGF5RnJhbWVU
eXBlIFNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYzo6Z2VuZXJhdGVGcmFtZSgpCi17Ci0gICAgcmV0
dXJuIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OkRpc3BsYXlGcmFtZVR5cGUgeyBSZXRhaW5Q
dHI8SU9TdXJmYWNlUmVmPiB7IG1fY3VycmVudEZyYW1lLmlvU3VyZmFjZSgpIH0gfTsKLX0KLQot
Ym9vbCBTY3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWM6OnN0YXJ0RGlzcGxheVN0cmVhbShmbG9hdCBm
cmFtZVJhdGUpCi17Ci0gICAgYXV0byBhY3R1YWxEaXNwbGF5SUQgPSB1cGRhdGVEaXNwbGF5SUQo
bV9kaXNwbGF5SUQpOwotICAgIGlmICghYWN0dWFsRGlzcGxheUlEKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAobV9kaXNwbGF5SUQgIT0gYWN0dWFsRGlzcGxheUlELnZhbHVlKCkp
IHsKLSAgICAgICAgbV9kaXNwbGF5SUQgPSBhY3R1YWxEaXNwbGF5SUQudmFsdWUoKTsKLSAgICAg
ICAgQUxXQVlTX0xPR19JRihsb2dnZXJQdHIoKSwgTE9HSURFTlRJRklFUiwgImRpc3BsYXkgSUQg
Y2hhbmdlZCB0byAiLCBzdGF0aWNfY2FzdDxpbnQ+KG1fZGlzcGxheUlEKSk7Ci0gICAgfQotCi0g
ICAgaWYgKCFtX2Rpc3BsYXlTdHJlYW0gJiYgIWNyZWF0ZURpc3BsYXlTdHJlYW0oZnJhbWVSYXRl
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBlcnIgPSBDR0Rpc3BsYXlTdHJl
YW1TdGFydChtX2Rpc3BsYXlTdHJlYW0uZ2V0KCkpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAg
RVJST1JfTE9HX0lGKGxvZ2dlclB0cigpLCBMT0dJREVOVElGSUVSLCAiQ0dEaXNwbGF5U3RyZWFt
U3RhcnQgZmFpbGVkIHdpdGggZXJyb3IgIiwgc3RhdGljX2Nhc3Q8aW50PihlcnIpKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG1faXNSdW5uaW5nID0gdHJ1ZTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTY3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWM6OmNvbW1pdENv
bmZpZ3VyYXRpb24oZmxvYXQgZnJhbWVSYXRlKQotewotICAgIGlmIChtX2lzUnVubmluZyAmJiAh
bV9kaXNwbGF5U3RyZWFtKQotICAgICAgICBzdGFydERpc3BsYXlTdHJlYW0oZnJhbWVSYXRlKTsK
LX0KLQotdm9pZCBTY3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWM6OmRpc3BsYXlXYXNSZWNvbmZpZ3Vy
ZWQoQ0dEaXJlY3REaXNwbGF5SUQsIENHRGlzcGxheUNoYW5nZVN1bW1hcnlGbGFncykKLXsKLSAg
ICAvLyBGSVhNRTogaW1wbGVtZW50IQotfQotCi12b2lkIFNjcmVlbkRpc3BsYXlDYXB0dXJlck1h
Yzo6ZGlzcGxheVJlY29uZmlndXJhdGlvbkNhbGxCYWNrKENHRGlyZWN0RGlzcGxheUlEIGRpc3Bs
YXksIENHRGlzcGxheUNoYW5nZVN1bW1hcnlGbGFncyBmbGFncywgdm9pZCAqdXNlckluZm8pCi17
Ci0gICAgaWYgKHVzZXJJbmZvKQotICAgICAgICByZWludGVycHJldF9jYXN0PFNjcmVlbkRpc3Bs
YXlDYXB0dXJlck1hYyAqPih1c2VySW5mbyktPmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoZGlzcGxh
eSwgZmxhZ3MpOwotfQotCi12b2lkIFNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYzo6bmV3RnJhbWUo
Q0dEaXNwbGF5U3RyZWFtRnJhbWVTdGF0dXMgc3RhdHVzLCBEaXNwbGF5U3VyZmFjZSYmIG5ld0Zy
YW1lKQotewotICAgIHN3aXRjaCAoc3RhdHVzKSB7Ci0gICAgY2FzZSBrQ0dEaXNwbGF5U3RyZWFt
RnJhbWVTdGF0dXNGcmFtZUNvbXBsZXRlOgotICAgICAgICBicmVhazsKLQotICAgIGNhc2Uga0NH
RGlzcGxheVN0cmVhbUZyYW1lU3RhdHVzRnJhbWVJZGxlOgotICAgICAgICBicmVhazsKLQotICAg
IGNhc2Uga0NHRGlzcGxheVN0cmVhbUZyYW1lU3RhdHVzRnJhbWVCbGFuazoKLSAgICAgICAgUkVM
RUFTRV9MT0coV2ViUlRDLCAiU2NyZWVuRGlzcGxheUNhcHR1cmVyTWFjOjpmcmFtZUF2YWlsYWJs
ZToga0NHRGlzcGxheVN0cmVhbUZyYW1lU3RhdHVzRnJhbWVCbGFuayIpOwotICAgICAgICBicmVh
azsKLQotICAgIGNhc2Uga0NHRGlzcGxheVN0cmVhbUZyYW1lU3RhdHVzU3RvcHBlZDoKLSAgICAg
ICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiU2NyZWVuRGlzcGxheUNhcHR1cmVyTWFjOjpmcmFtZUF2
YWlsYWJsZToga0NHRGlzcGxheVN0cmVhbUZyYW1lU3RhdHVzU3RvcHBlZCIpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICBtX2N1cnJlbnRGcmFtZSA9IFdURk1vdmUobmV3RnJhbWUpOwot
fQotCi1zdGQ6Om9wdGlvbmFsPENhcHR1cmVEZXZpY2U+IFNjcmVlbkRpc3BsYXlDYXB0dXJlck1h
Yzo6c2NyZWVuQ2FwdHVyZURldmljZVdpdGhQZXJzaXN0ZW50SUQoY29uc3QgU3RyaW5nJiBkZXZp
Y2VJRCkKLXsKLSAgICBhdXRvIGRpc3BsYXlJRCA9IHBhcnNlSW50ZWdlcjx1aW50MzJfdD4oZGV2
aWNlSUQpOwotICAgIGlmICghZGlzcGxheUlEKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKFdlYlJU
QywgIlNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYzo6c2NyZWVuQ2FwdHVyZURldmljZVdpdGhQZXJz
aXN0ZW50SUQ6IGRpc3BsYXkgSUQgZG9lcyBub3QgY29udmVydCB0byAzMi1iaXQgaW50ZWdlciIp
OwotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0KLQotICAgIGF1dG8gYWN0dWFs
RGlzcGxheUlEID0gdXBkYXRlRGlzcGxheUlEKCpkaXNwbGF5SUQpOwotICAgIGlmICghYWN0dWFs
RGlzcGxheUlEKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgYXV0byBkZXZp
Y2UgPSBDYXB0dXJlRGV2aWNlKFN0cmluZzo6bnVtYmVyKCphY3R1YWxEaXNwbGF5SUQpLCBDYXB0
dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpTY3JlZW4sICJTY3JlZW5DYXB0dXJlRGV2aWNlIl9zKTsK
LSAgICBkZXZpY2Uuc2V0RW5hYmxlZCh0cnVlKTsKLSAgICByZXR1cm4gZGV2aWNlOwotfQotCi12
b2lkIFNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYzo6c2NyZWVuQ2FwdHVyZURldmljZXMoVmVjdG9y
PENhcHR1cmVEZXZpY2U+JiBkaXNwbGF5cykKLXsKLSAgICBhdXRvIHNjcmVlbklEID0gZGlzcGxh
eUlEKFtOU1NjcmVlbiBtYWluU2NyZWVuXSk7Ci0gICAgaWYgKENHRGlzcGxheUlEVG9PcGVuR0xE
aXNwbGF5TWFzayhzY3JlZW5JRCkpIHsKLSAgICAgICAgQ2FwdHVyZURldmljZSBkaXNwbGF5RGV2
aWNlKFN0cmluZzo6bnVtYmVyKHNjcmVlbklEKSwgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6
U2NyZWVuLCBtYWtlU3RyaW5nKCJTY3JlZW4gMCIpKTsKLSAgICAgICAgZGlzcGxheURldmljZS5z
ZXRFbmFibGVkKHRydWUpOwotICAgICAgICBkaXNwbGF5cy5hcHBlbmQoV1RGTW92ZShkaXNwbGF5
RGV2aWNlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB1aW50MzJfdCBkaXNwbGF5
Q291bnQgPSAwOwotICAgIGF1dG8gZXJyID0gQ0dHZXRBY3RpdmVEaXNwbGF5TGlzdCgwLCBudWxs
cHRyLCAmZGlzcGxheUNvdW50KTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9H
KFdlYlJUQywgIkNHR2V0QWN0aXZlRGlzcGxheUxpc3QoKSByZXR1cm5lZCBlcnJvciAlZCB3aGVu
IHRyeWluZyB0byBnZXQgZGlzcGxheSBjb3VudCIsIChpbnQpZXJyKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmICghZGlzcGxheUNvdW50KSB7Ci0gICAgICAgIFJFTEVBU0VfTE9H
KFdlYlJUQywgIkNHR2V0QWN0aXZlRGlzcGxheUxpc3QoKSByZXR1cm5lZCBhIGRpc3BsYXkgY291
bnQgb2YgMCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPENHRGlyZWN0
RGlzcGxheUlEPiBhY3RpdmVEaXNwbGF5cyhkaXNwbGF5Q291bnQpOwotICAgIGVyciA9IENHR2V0
QWN0aXZlRGlzcGxheUxpc3QoZGlzcGxheUNvdW50LCBhY3RpdmVEaXNwbGF5cy5kYXRhKCksICZk
aXNwbGF5Q291bnQpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRD
LCAiQ0dHZXRBY3RpdmVEaXNwbGF5TGlzdCgpIHJldHVybmVkIGVycm9yICVkIHdoZW4gdHJ5aW5n
IHRvIGdldCB0aGUgYWN0aXZlIGRpc3BsYXkgbGlzdCIsIChpbnQpZXJyKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGludCBjb3VudCA9IDA7Ci0gICAgZm9yIChhdXRvIGRpc3BsYXlJ
RCA6IGFjdGl2ZURpc3BsYXlzKSB7Ci0gICAgICAgIENhcHR1cmVEZXZpY2UgZGlzcGxheURldmlj
ZShTdHJpbmc6Om51bWJlcihkaXNwbGF5SUQpLCBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpT
Y3JlZW4sIG1ha2VTdHJpbmcoIlNjcmVlbiAiLCBTdHJpbmc6Om51bWJlcihjb3VudCsrKSkpOwot
ICAgICAgICBkaXNwbGF5RGV2aWNlLnNldEVuYWJsZWQoQ0dEaXNwbGF5SURUb09wZW5HTERpc3Bs
YXlNYXNrKGRpc3BsYXlJRCkpOwotICAgICAgICBkaXNwbGF5cy5hcHBlbmQoV1RGTW92ZShkaXNw
bGF5RGV2aWNlKSk7Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXIuY3BwCmluZGV4IDQwM2ZmMzkzMjhmZS4uYmJlMjU1OWI1NjE2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyLmNwcApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KS4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQzLDcgKzQzLDcgQEAKIAogI2lmIFBMQVRGT1JNKENP
Q09BKQogI2luY2x1ZGUgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaCIKLSNpbmNsdWRlICJEaXNw
bGF5Q2FwdHVyZVNvdXJjZUNvY29hLmgiCisjaW5jbHVkZSAiRGlzcGxheUNhcHR1cmVTb3VyY2VN
YWMuaCIKICNpbmNsdWRlICJNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5oIgogI2VuZGlmCiAK
QEAgLTExNSwxNCArMTE1LDE0IEBAIHByaXZhdGU6CiB9OwogCiAjaWYgUExBVEZPUk0oTUFDKQot
Y2xhc3MgTW9ja0Rpc3BsYXlDYXB0dXJlciBmaW5hbCA6IHB1YmxpYyBEaXNwbGF5Q2FwdHVyZVNv
dXJjZUNvY29hOjpDYXB0dXJlciB7CitjbGFzcyBNb2NrRGlzcGxheUNhcHR1cmVyIGZpbmFsIDog
cHVibGljIERpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpDYXB0dXJlciB7CiBwdWJsaWM6CiAgICAg
ZXhwbGljaXQgTW9ja0Rpc3BsYXlDYXB0dXJlcihjb25zdCBDYXB0dXJlRGV2aWNlJik7CiAKIHBy
aXZhdGU6CiAgICAgYm9vbCBzdGFydChmbG9hdCkgZmluYWw7CiAgICAgdm9pZCBzdG9wKCkgZmlu
YWwgIHsgbV9zb3VyY2UtPnN0b3AoKTsgfQotICAgIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6
OkRpc3BsYXlGcmFtZVR5cGUgZ2VuZXJhdGVGcmFtZSgpIGZpbmFsOworICAgIERpc3BsYXlDYXB0
dXJlU291cmNlTWFjOjpEaXNwbGF5RnJhbWVUeXBlIGdlbmVyYXRlRnJhbWUoKSBmaW5hbDsKICAg
ICBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkRpc3BsYXlTdXJmYWNlVHlwZSBzdXJmYWNl
VHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6
RGlzcGxheVN1cmZhY2VUeXBlOjpNb25pdG9yOyB9CiAgICAgdm9pZCBjb21taXRDb25maWd1cmF0
aW9uKGZsb2F0KSBmaW5hbCB7IH0KICAgICBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlIGRldmlj
ZVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpT
Y3JlZW47IH0KQEAgLTE0NCw3ICsxNDQsNyBAQCBib29sIE1vY2tEaXNwbGF5Q2FwdHVyZXI6OnN0
YXJ0KGZsb2F0KQogICAgIHJldHVybiB0cnVlOwogfQogCi1EaXNwbGF5Q2FwdHVyZVNvdXJjZUNv
Y29hOjpEaXNwbGF5RnJhbWVUeXBlIE1vY2tEaXNwbGF5Q2FwdHVyZXI6OmdlbmVyYXRlRnJhbWUo
KQorRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OkRpc3BsYXlGcmFtZVR5cGUgTW9ja0Rpc3BsYXlD
YXB0dXJlcjo6Z2VuZXJhdGVGcmFtZSgpCiB7CiAgICAgaWYgKGF1dG8qIGltYWdlQnVmZmVyID0g
bV9zb3VyY2UtPmltYWdlQnVmZmVyKCkpCiAgICAgICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29w
eU5hdGl2ZUltYWdlKCk7CkBAIC0xNjMsNyArMTYzLDcgQEAgcHVibGljOgogICAgICAgICBjYXNl
IENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OlNjcmVlbjoKICAgICAgICAgY2FzZSBDYXB0dXJl
RGV2aWNlOjpEZXZpY2VUeXBlOjpXaW5kb3c6CiAjaWYgUExBVEZPUk0oTUFDKQotICAgICAgICAg
ICAgcmV0dXJuIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OmNyZWF0ZShVbmlxdWVSZWY8RGlz
cGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6Q2FwdHVyZXI+KG1ha2VVbmlxdWVSZWY8TW9ja0Rpc3Bs
YXlDYXB0dXJlcj4oZGV2aWNlKSksIGRldmljZSwgY29uc3RyYWludHMpOworICAgICAgICAgICAg
cmV0dXJuIERpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpjcmVhdGUoVW5pcXVlUmVmPERpc3BsYXlD
YXB0dXJlU291cmNlTWFjOjpDYXB0dXJlcj4obWFrZVVuaXF1ZVJlZjxNb2NrRGlzcGxheUNhcHR1
cmVyPihkZXZpY2UpKSwgZGV2aWNlLCBjb25zdHJhaW50cyk7CiAjZWxpZiBVU0UoR1NUUkVBTUVS
KQogICAgICAgICAgICAgcmV0dXJuIE1vY2tSZWFsdGltZVZpZGVvU291cmNlR1N0cmVhbWVyOjpj
cmVhdGVNb2NrRGlzcGxheUNhcHR1cmVTb3VyY2UoU3RyaW5nIHsgZGV2aWNlLnBlcnNpc3RlbnRJ
ZCgpIH0sIFN0cmluZyB7IGRldmljZS5sYWJlbCgpIH0sIFN0cmluZyB7IH0sIGNvbnN0cmFpbnRz
KTsKICNlbHNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435640</attachid>
            <date>2021-08-16 16:08:36 -0700</date>
            <delta_ts>2021-09-01 09:03:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>screen-capture-base-class-patch.txt</filename>
            <type>text/plain</type>
            <size>76504</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1MmY5ZDQxMTUzNDEuLjk1MGQxNzYzZWM1MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDc0IEBACisyMDIxLTA4LTE2ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBw
bGUuY29tPgorCisgICAgICAgIFttYWNPU10gUmVmYWN0b3Igc2NyZWVuIGNhcHR1cmUgY2xhc3MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTE0Mgor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vODE5ODMzMDY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBSZW5hbWUgY2xhc3NlcyBiYXNlZCBv
biB0aGUgZnJhbWV3b3JrcyB0aGV5IHVzZS4gQ3JlYXRlIENHRGlzcGxheVN0cmVhbSBiYXNlIGNs
YXNzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gZnVuY3Rpb25hbCBjaGFuZ2UuCisKKyAg
ICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ0dEaXNw
bGF5U3RyZWFtQ2FwdHVyZVNvdXJjZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q0dE
aXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZTo6fkNHRGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2Up
OgorICAgICAgICAoV2ViQ29yZTo6Q0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZTo6c3RhcnQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZTo6c3RvcCk6
CisgICAgICAgIChXZWJDb3JlOjpDR0Rpc3BsYXlTdHJlYW1DYXB0dXJlU291cmNlOjpnZW5lcmF0
ZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNHRGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2U6
OnN0YXJ0RGlzcGxheVN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpDR0Rpc3BsYXlTdHJlYW1D
YXB0dXJlU291cmNlOjpjb21taXRDb25maWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNH
RGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2U6OmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZTo6ZGlzcGxheVJlY29u
ZmlndXJhdGlvbkNhbGxCYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNHRGlzcGxheVN0cmVhbUNh
cHR1cmVTb3VyY2U6Om5ld0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNHRGlzcGxheVN0cmVh
bUNhcHR1cmVTb3VyY2U6OmZyYW1lQXZhaWxhYmxlSGFuZGxlcik6CisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0NHRGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2UuaDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3Bs
YXlDYXB0dXJlck1hYy5oLgorICAgICAgICAoV2ViQ29yZTo6Q0dEaXNwbGF5U3RyZWFtQ2FwdHVy
ZVNvdXJjZTo6Y2hlY2tEaXNwbGF5U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OkNHRGlzcGxh
eVN0cmVhbUNhcHR1cmVTb3VyY2U6OmRpc3BsYXlTdHJlYW0gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZTo6aW52YWxpZGF0ZURpc3BsYXlTdHJl
YW0pOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9DR0Rpc3BsYXlTdHJlYW1T
Y3JlZW5DYXB0dXJlU291cmNlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVyTWFjLmguCisgICAgICAgICog
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NHRGlzcGxheVN0cmVhbVNjcmVlbkNhcHR1cmVTb3Vy
Y2UubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlRGlzcGxheUlEKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNHRGlzcGxheVN0cmVhbVNjcmVlbkNhcHR1cmVTb3VyY2U6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpDR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNlOjpD
R0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNH
RGlzcGxheVN0cmVhbVNjcmVlbkNhcHR1cmVTb3VyY2U6OmNoZWNrRGlzcGxheVN0cmVhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNlOjpjcmVh
dGVEaXNwbGF5U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OkNHRGlzcGxheVN0cmVhbVNjcmVl
bkNhcHR1cmVTb3VyY2U6OnNjcmVlbkNhcHR1cmVEZXZpY2VXaXRoUGVyc2lzdGVudElEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNHRGlzcGxheVN0cmVhbVNjcmVlbkNhcHR1cmVTb3VyY2U6OnNjcmVl
bkNhcHR1cmVEZXZpY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ0dX
aW5kb3dDYXB0dXJlU291cmNlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVyTWFjLmguCisgICAgICAgICog
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NHV2luZG93Q2FwdHVyZVNvdXJjZS5tbTogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNw
bGF5Q2FwdHVyZXJNYWMubW0uCisgICAgICAgIChXZWJDb3JlOjpDR1dpbmRvd0NhcHR1cmVTb3Vy
Y2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDR1dpbmRvd0NhcHR1cmVTb3VyY2U6OkNH
V2luZG93Q2FwdHVyZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDR1dpbmRvd0NhcHR1cmVT
b3VyY2U6OndpbmRvd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNHV2luZG93Q2FwdHVyZVNv
dXJjZTo6Z2VuZXJhdGVGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDR1dpbmRvd0NhcHR1cmVT
b3VyY2U6OndpbmRvd0NhcHR1cmVEZXZpY2VXaXRoUGVyc2lzdGVudElEKToKKyAgICAgICAgKFdl
YkNvcmU6OkNHV2luZG93Q2FwdHVyZVNvdXJjZTo6d2luZG93Q2FwdHVyZURldmljZXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2Nv
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYTo6dXBk
YXRlRGlzcGxheUNhcHR1cmVEZXZpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDYXB0
dXJlTWFuYWdlckNvY29hOjp1cGRhdGVXaW5kb3dDYXB0dXJlRGV2aWNlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYTo6c2NyZWVuQ2FwdHVyZURldmljZVdp
dGhQZXJzaXN0ZW50SUQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVNYW5hZ2Vy
Q29jb2E6OndpbmRvd0NhcHR1cmVEZXZpY2VXaXRoUGVyc2lzdGVudElEKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuY3BwOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlD
YXB0dXJlU291cmNlQ29jb2EuY3BwLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVT
b3VyY2VNYWM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJj
ZU1hYzo6RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUNhcHR1cmVTb3VyY2VNYWM6On5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYyk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Y2FwYWJpbGl0aWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpzZXR0aW5ncyk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6c2V0dGluZ3NEaWRDaGFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OnN0YXJ0UHJvZHVjaW5nRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6c3RvcFByb2R1
Y2luZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmVs
YXBzZWRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjp1
cGRhdGVGcmFtZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVTb3VyY2VN
YWM6OmVtaXRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJjZU1h
Yzo6Q2FwdHVyZXI6OnNldExvZ2dlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Q2FwdHVy
ZVNvdXJjZU1hYzo6Q2FwdHVyZXI6OmxvZ0NoYW5uZWwgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJl
U291cmNlQ29jb2EuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlck1hYy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlck1hYy5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1vY2tEaXNwbGF5Q2FwdHVyZXI6OmdlbmVyYXRlRnJhbWUpOgorCiAyMDIxLTA4
LTEwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgRG9jdW1lbnQu
YmFzZVVSSSBpcyBpbmFjY3VyYXRlIGZvciBpZnJhbWUgc3JjZG9jIGRvY3VtZW50cwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXNDb2NvYS50eHQKaW5kZXggY2E2MTE3MGMzNGRmLi4yYWZkNGMyMzIwMTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
U291cmNlc0NvY29hLnR4dApAQCAtNTI1LDExICs1MjUsMTQgQEAgcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbGlid2VicnRjL0xpYldlYlJUQ1Byb3ZpZGVyQ29jb2EuY3BwCiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbSBAbm8tdW5pZnkKIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5tbSBAbm8tdW5pZnkKIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9CYXNlQXVkaW9TaGFyZWRVbml0LmNwcAorcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL0NHRGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2UuY3BwCitwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvQ0dEaXNwbGF5U3RyZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZS5tbQorcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0NHV2luZG93Q2FwdHVyZVNvdXJjZS5tbQogcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL0NvcmVBdWRpb0NhcHR1cmVEZXZpY2UuY3BwCiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwCiBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5jcHAKIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9EaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYS5jcHAKLXBsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9EaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmNwcAorcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjLmNwcAogcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL01lZGlhU3RyZWFtVHJhY2tBdWRpb1NvdXJjZVByb3ZpZGVyQ29jb2EuY3BwCiBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvTW9ja0F1ZGlvU2hhcmVkVW5pdC5tbQogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tCkBAIC01NDAsOSArNTQzLDcg
QEAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMu
bW0KIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VD
b2NvYS5jcHAKIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2VDb2NvYS5jcHAKIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZVZpZGVvVXRp
bGl0aWVzLm1tCi1wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVy
TWFjLm1tCiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvV2ViQXVkaW9Tb3VyY2VQcm92aWRlckNv
Y29hLm1tCi1wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVyTWFj
Lm1tCiBwbGF0Zm9ybS9tb2NrL01lZGlhUGxheWJhY2tUYXJnZXRNb2NrLmNwcAogcGxhdGZvcm0v
bW9jay9NZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTW9jay5jcHAKIHBsYXRmb3JtL21vY2svTW9j
a0F1ZGlvRGVzdGluYXRpb25Db2NvYS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzNjQxNzExNGYwM2EuLmM2Y2ZhOTY0YjQ3
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtNTc3OCw2ICs1Nzc4LDggQEAKIAkJMDcwRTgxRDAxQkYyNzY1NjAwMUZEQTQ4IC8q
IFZpZGVvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVmlkZW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwNzBGNTQ5NzE3RjEyRjZCMDAxNjlFMDQgLyogTWVkaWFTdHJlYW1Db25z
dHJhaW50c1ZhbGlkYXRpb25DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTWVkaWFTdHJlYW1Db25zdHJhaW50c1ZhbGlkYXRpb25DbGllbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMDcxMTU4OEYxN0RGNjMzNzAwRURGRTJCIC8qIE1lZGlhU3RyZWFt
UHJpdmF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYVN0
cmVhbVByaXZhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzE3NzY1RTI2
QzMwM0I3MDBBNjMyOTkgLyogQ0dEaXNwbGF5U3RyZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3MTc3NjVGMjZDMzAzQjcwMEE2MzI5OSAvKiBDR0Rp
c3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
Q0dEaXNwbGF5U3RyZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZS5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMDcxQTlFQzAxNjhGQjU2QzAwMjYyOUY5IC8qIFRleHRUcmFja0N1ZUdlbmVy
aWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dFRyYWNrQ3Vl
R2VuZXJpYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MUE5RUMxMTY4RkI1
NkMwMDI2MjlGOSAvKiBUZXh0VHJhY2tDdWVHZW5lcmljLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRleHRUcmFja0N1ZUdlbmVyaWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMDcxRTQ5NkQxQUQ1QUEwRDAwOEE1MEI0IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRD
b2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE1lZGlhUGxh
eWJhY2tUYXJnZXRDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU5Njgs
MTAgKzU5NzAsMTAgQEAKIAkJMDc5RjVFNEIwRjNCRUJFQTAwNUUwNzgyIC8qIE1lZGlhUGxheWVy
UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVBsYXllclBy
aXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDdBNkQxRTkxNDkxMTM3NzAw
MDUxRDBDIC8qIE1lZGlhRnJhZ21lbnRVUklQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFGcmFnbWVudFVSSVBhcnNlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTA3QTZEMUVBMTQ5MTEzNzcwMDA1MUQwQyAvKiBNZWRpYUZyYWdt
ZW50VVJJUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRnJh
Z21lbnRVUklQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDdBNkQ4NDcx
RkVCNzAwQjAwNjQ0MURFIC8qIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3QTZEODQ3MUZFQjcwMEIwMDY0NDFE
RSAvKiBEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTA3QTZEODQ4MUZFQjcwMEIwMDY0NDFERSAvKiBEaXNwbGF5Q2FwdHVy
ZU1hbmFnZXJDb2NvYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
aXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTA3QTZEODQ5MUZFQjcwMEMwMDY0NDFERSAvKiBEaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2Nv
YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5Q2FwdHVyZU1hbmFn
ZXJDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwN0E2RDg0QTFGRUI3MDBE
MDA2NDQxREUgLyogRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTA3QTZEODRBMUZFQjcwMEQwMDY0NDFERSAvKiBEaXNwbGF5Q2Fw
dHVyZVNvdXJjZU1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5
Q2FwdHVyZVNvdXJjZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwN0FBNkI2
OTE2NkQwMTk1MDBENDU2NzEgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRk9iakMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRk9i
akMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDdBQTZCNkExNjZEMDE5NTAwRDQ1
NjcxIC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZPYmpDLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRk9iakMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3QUI5OTY1MThEQTNDMDEwMDE4NzcxRSAv
KiBSVENDb25maWd1cmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJU
Q0NvbmZpZ3VyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc4NTIsMTAg
Kzc4NTQsMTAgQEAKIAkJNDE2RURCRkYyNjAwRTc4NzAwMDkyNjc1IC8qIFJUQ0RhdGFDaGFubmVs
SWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENEYXRhQ2hh
bm5lbElkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE2RURDMDEy
NjAwRTdCMDAwMDkyNjc1IC8qIFJUQ0RhdGFDaGFubmVsUmVtb3RlSGFuZGxlckNvbm5lY3Rpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUlRDRGF0YUNoYW5uZWxSZW1vdGVI
YW5kbGVyQ29ubmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTZFREMw
MzI2MDBFODBGMDAwOTI2NzUgLyogUlRDRGF0YUNoYW5uZWxSZW1vdGVTb3VyY2VDb25uZWN0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJUQ0RhdGFDaGFubmVsUmVtb3Rl
U291cmNlQ29ubmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MTZGODA3
OTI0NTA5RjMyMDBCNjhGMDIgLyogV2luZG93RGlzcGxheUNhcHR1cmVyTWFjLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdpbmRvd0Rpc3BsYXlDYXB0dXJlck1hYy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MTZGODA3QTI0NTA5RjMyMDBCNjhGMDIgLyogU2Ny
ZWVuRGlzcGxheUNhcHR1cmVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gU2NyZWVuRGlzcGxheUNhcHR1cmVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk0MTZGODA3QjI0NTA5RjMzMDBCNjhGMDIgLyogV2luZG93RGlzcGxheUNhcHR1
cmVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2luZG93
RGlzcGxheUNhcHR1cmVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MTZG
ODA3QzI0NTA5RjMzMDBCNjhGMDIgLyogU2NyZWVuRGlzcGxheUNhcHR1cmVyTWFjLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTZGODA3OTI0NTA5RjMyMDBCNjhGMDIgLyog
Q0dXaW5kb3dDYXB0dXJlU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENHV2luZG93Q2FwdHVyZVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
MTZGODA3QTI0NTA5RjMyMDBCNjhGMDIgLyogQ0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDR0Rpc3BsYXlTdHJlYW1D
YXB0dXJlU291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDE2RjgwN0Iy
NDUwOUYzMzAwQjY4RjAyIC8qIENHV2luZG93Q2FwdHVyZVNvdXJjZS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENHV2luZG93Q2FwdHVyZVNvdXJjZS5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDE2RjgwN0MyNDUwOUYzMzAwQjY4RjAyIC8qIENH
RGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MTZGRDI1RDI0MEVFMUFFMDA2NjYxRDggLyogTm93UGxheWluZ0luZm8uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm93UGxheWluZ0luZm8uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE3MEEyRTkxRDhDMENDMDAwMzE4NDUyIC8qIEpTRE9N
V3JhcHBlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVdy
YXBwZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTcyNTNBODEzNTRCQkJD
MDAzNjBGMkEgLyogTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUNvbnRyb2xUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3Mzc0
LDYgKzE3Mzc2LDEyIEBACiAJCQkJMDcwMzYzREYxODFBMUNEQzAwQzA3NEE1IC8qIEFWVmlkZW9D
YXB0dXJlU291cmNlLm1tICovLAogCQkJCTQxNzdGNTFDMjM4MjU0NDAwMEMwNDQ4NiAvKiBCYXNl
QXVkaW9TaGFyZWRVbml0LmNwcCAqLywKIAkJCQk0MTc3RjUxRTIzODI1NDVFMDBDMDQ0ODYgLyog
QmFzZUF1ZGlvU2hhcmVkVW5pdC5oICovLAorCQkJCTQxNkY4MDdBMjQ1MDlGMzIwMEI2OEYwMiAv
KiBDR0Rpc3BsYXlTdHJlYW1DYXB0dXJlU291cmNlLmNwcCAqLywKKwkJCQk0MTZGODA3QzI0NTA5
RjMzMDBCNjhGMDIgLyogQ0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZS5oICovLAorCQkJCTA3
MTc3NjVFMjZDMzAzQjcwMEE2MzI5OSAvKiBDR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291
cmNlLmggKi8sCisJCQkJMDcxNzc2NUYyNkMzMDNCNzAwQTYzMjk5IC8qIENHRGlzcGxheVN0cmVh
bVNjcmVlbkNhcHR1cmVTb3VyY2UubW0gKi8sCisJCQkJNDE2RjgwNzkyNDUwOUYzMjAwQjY4RjAy
IC8qIENHV2luZG93Q2FwdHVyZVNvdXJjZS5oICovLAorCQkJCTQxNkY4MDdCMjQ1MDlGMzMwMEI2
OEYwMiAvKiBDR1dpbmRvd0NhcHR1cmVTb3VyY2UubW0gKi8sCiAJCQkJM0Y4MDIwMzExRTlFMzgx
RDAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2UuY3BwICovLAogCQkJCTNGODAyMDMy
MUU5RTM4MUQwMERFQzYxRCAvKiBDb3JlQXVkaW9DYXB0dXJlRGV2aWNlLmggKi8sCiAJCQkJM0Y4
MDIwMzMxRTlFMzgxRDAwREVDNjFEIC8qIENvcmVBdWRpb0NhcHR1cmVEZXZpY2VNYW5hZ2VyLmNw
cCAqLywKQEAgLTE3MzgyLDggKzE3MzkwLDggQEAKIAkJCQkzRjNCQjU4MzFFNzA5RUU0MDBDNzAx
RjIgLyogQ29yZUF1ZGlvQ2FwdHVyZVNvdXJjZS5oICovLAogCQkJCTA3QTZEODQ4MUZFQjcwMEIw
MDY0NDFERSAvKiBEaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYS5jcHAgKi8sCiAJCQkJMDdBNkQ4
NDkxRkVCNzAwQzAwNjQ0MURFIC8qIERpc3BsYXlDYXB0dXJlTWFuYWdlckNvY29hLmggKi8sCi0J
CQkJMDdBNkQ4NDcxRkVCNzAwQjAwNjQ0MURFIC8qIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2Eu
Y3BwICovLAotCQkJCTA3QTZEODRBMUZFQjcwMEQwMDY0NDFERSAvKiBEaXNwbGF5Q2FwdHVyZVNv
dXJjZUNvY29hLmggKi8sCisJCQkJMDdBNkQ4NDcxRkVCNzAwQjAwNjQ0MURFIC8qIERpc3BsYXlD
YXB0dXJlU291cmNlTWFjLmNwcCAqLywKKwkJCQkwN0E2RDg0QTFGRUI3MDBEMDA2NDQxREUgLyog
RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuaCAqLywKIAkJCQk0MTc0RTkyMDI1MzVEQ0REMDBGRTQy
MDIgLyogTWVkaWFTdHJlYW1UcmFja0F1ZGlvU291cmNlUHJvdmlkZXJDb2NvYS5jcHAgKi8sCiAJ
CQkJNDE3NEU5MUUyNTM1RENENjAwRkU0MjAyIC8qIE1lZGlhU3RyZWFtVHJhY2tBdWRpb1NvdXJj
ZVByb3ZpZGVyQ29jb2EuaCAqLywKIAkJCQkwNzQ0RUNFQjFFMEM0QUU1MDAwRDA5NDQgLyogTW9j
a0F1ZGlvU2hhcmVkVW5pdC5oICovLApAQCAtMTc0MDMsMTIgKzE3NDExLDggQEAKIAkJCQk0MTky
NDI0NzIxMjdCN0NDMDA2MzRGQ0YgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlQ29jb2Eu
bW0gKi8sCiAJCQkJNDFEMTkzOEYyMTUyQzU2MTAwNkYxNENBIC8qIFJlYWx0aW1lVmlkZW9VdGls
aXRpZXMuaCAqLywKIAkJCQk0MTU4NjQ5RjIzQkY3QjkzMDBBMEE2MUUgLyogUmVhbHRpbWVWaWRl
b1V0aWxpdGllcy5tbSAqLywKLQkJCQk0MTZGODA3QzI0NTA5RjMzMDBCNjhGMDIgLyogU2NyZWVu
RGlzcGxheUNhcHR1cmVyTWFjLmggKi8sCi0JCQkJNDE2RjgwN0EyNDUwOUYzMjAwQjY4RjAyIC8q
IFNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYy5tbSAqLywKIAkJCQkwN0Q2MzczRTFCQjBCMTEzMDAy
NTZDRTkgLyogV2ViQXVkaW9Tb3VyY2VQcm92aWRlckNvY29hLmggKi8sCiAJCQkJMDdENjM3M0Yx
QkIwQjExMzAwMjU2Q0U5IC8qIFdlYkF1ZGlvU291cmNlUHJvdmlkZXJDb2NvYS5tbSAqLywKLQkJ
CQk0MTZGODA3OTI0NTA5RjMyMDBCNjhGMDIgLyogV2luZG93RGlzcGxheUNhcHR1cmVyTWFjLmgg
Ki8sCi0JCQkJNDE2RjgwN0IyNDUwOUYzMzAwQjY4RjAyIC8qIFdpbmRvd0Rpc3BsYXlDYXB0dXJl
ck1hYy5tbSAqLywKIAkJCSk7CiAJCQlwYXRoID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9DR0Rpc3BsYXlTdHJlYW1DYXB0dXJlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9DR0Rpc3BsYXlTdHJlYW1DYXB0dXJlU291cmNlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjM2MzU0OWQ1YjBiOQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9DR0Rp
c3BsYXlTdHJlYW1DYXB0dXJlU291cmNlLmNwcApAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkNHRGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2UuaCIKKworI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pICYmIFBMQVRGT1JNKE1BQykKKworI2ltcG9ydCAiR3JhcGhpY3ND
b250ZXh0Q0cuaCIKKyNpbXBvcnQgIkltYWdlQnVmZmVyLmgiCisjaW1wb3J0ICJMb2dnaW5nLmgi
CisjaW1wb3J0ICJNZWRpYUNvbnN0cmFpbnRzLmgiCisjaW1wb3J0ICJNZWRpYVNhbXBsZUFWRk9i
akMuaCIKKyNpbXBvcnQgIk5vdEltcGxlbWVudGVkLmgiCisjaW1wb3J0ICJQbGF0Zm9ybUxheWVy
LmgiCisjaW1wb3J0ICJQbGF0Zm9ybVNjcmVlbi5oIgorI2ltcG9ydCAiUmVhbHRpbWVNZWRpYVNv
dXJjZVNldHRpbmdzLmgiCisjaW1wb3J0ICJSZWFsdGltZVZpZGVvVXRpbGl0aWVzLmgiCisKKyNp
bXBvcnQgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0dE
aXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZTo6fkNHRGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2Uo
KQoreworICAgIG1fY3VycmVudEZyYW1lID0gbnVsbHB0cjsKK30KKworYm9vbCBDR0Rpc3BsYXlT
dHJlYW1DYXB0dXJlU291cmNlOjpzdGFydChmbG9hdCBmcmFtZVJhdGUpCit7CisgICAgQUxXQVlT
X0xPR19JRihsb2dnZXJQdHIoKSwgTE9HSURFTlRJRklFUik7CisKKyAgICBpZiAobV9pc1J1bm5p
bmcpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIHN0YXJ0RGlzcGxheVN0cmVh
bShmcmFtZVJhdGUpOworfQorCit2b2lkIENHRGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2U6OnN0
b3AoKQoreworICAgIEFMV0FZU19MT0dfSUYobG9nZ2VyUHRyKCksIExPR0lERU5USUZJRVIpOwor
CisgICAgaWYgKCFtX2lzUnVubmluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fZGlz
cGxheVN0cmVhbSkKKyAgICAgICAgQ0dEaXNwbGF5U3RyZWFtU3RvcChtX2Rpc3BsYXlTdHJlYW0u
Z2V0KCkpOworCisgICAgbV9pc1J1bm5pbmcgPSBmYWxzZTsKK30KKworRGlzcGxheUNhcHR1cmVT
b3VyY2VNYWM6OkRpc3BsYXlGcmFtZVR5cGUgQ0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZTo6
Z2VuZXJhdGVGcmFtZSgpCit7CisgICAgcmV0dXJuIERpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpE
aXNwbGF5RnJhbWVUeXBlIHsgUmV0YWluUHRyPElPU3VyZmFjZVJlZj4geyBtX2N1cnJlbnRGcmFt
ZS5pb1N1cmZhY2UoKSB9IH07Cit9CisKK2Jvb2wgQ0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJj
ZTo6c3RhcnREaXNwbGF5U3RyZWFtKGZsb2F0IGZyYW1lUmF0ZSkKK3sKKyAgICBpZiAoIWNoZWNr
RGlzcGxheVN0cmVhbSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fY2Fw
dHVyZVF1ZXVlKQorICAgICAgICBtX2NhcHR1cmVRdWV1ZSA9IGFkb3B0T1NPYmplY3QoZGlzcGF0
Y2hfcXVldWVfY3JlYXRlKCJDR0Rpc3BsYXlTdHJlYW1DYXB0dXJlU291cmNlIENhcHR1cmUgUXVl
dWUiLCBESVNQQVRDSF9RVUVVRV9TRVJJQUwpKTsKKworICAgIGlmICghbV9kaXNwbGF5U3RyZWFt
KSB7CisgICAgICAgIG1fZGlzcGxheVN0cmVhbSA9IGNyZWF0ZURpc3BsYXlTdHJlYW0oZnJhbWVS
YXRlLCBmcmFtZUF2YWlsYWJsZUhhbmRsZXIoKSwgbV9jYXB0dXJlUXVldWUuZ2V0KCkpOworICAg
ICAgICBpZiAoIW1fZGlzcGxheVN0cmVhbSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBpZiAoIW1fb2JzZXJ2aW5nRGlzcGxheUNoYW5nZXMpIHsKKyAgICAgICAgICAgIENH
RGlzcGxheVJlZ2lzdGVyUmVjb25maWd1cmF0aW9uQ2FsbGJhY2soZGlzcGxheVJlY29uZmlndXJh
dGlvbkNhbGxCYWNrLCB0aGlzKTsKKyAgICAgICAgICAgIG1fb2JzZXJ2aW5nRGlzcGxheUNoYW5n
ZXMgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgYXV0byBlcnIgPSBDR0Rpc3BsYXlT
dHJlYW1TdGFydChtX2Rpc3BsYXlTdHJlYW0uZ2V0KCkpOworICAgIGlmIChlcnIpIHsKKyAgICAg
ICAgRVJST1JfTE9HX0lGKGxvZ2dlclB0cigpLCBMT0dJREVOVElGSUVSLCAiQ0dEaXNwbGF5U3Ry
ZWFtU3RhcnQgZmFpbGVkIHdpdGggZXJyb3IgIiwgc3RhdGljX2Nhc3Q8aW50PihlcnIpKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1faXNSdW5uaW5nID0gdHJ1ZTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDR0Rpc3BsYXlTdHJlYW1DYXB0dXJlU291cmNlOjpj
b21taXRDb25maWd1cmF0aW9uKGZsb2F0IGZyYW1lUmF0ZSkKK3sKKyAgICBpZiAobV9pc1J1bm5p
bmcgJiYgIW1fZGlzcGxheVN0cmVhbSkKKyAgICAgICAgc3RhcnREaXNwbGF5U3RyZWFtKGZyYW1l
UmF0ZSk7Cit9CisKK3ZvaWQgQ0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZTo6ZGlzcGxheVdh
c1JlY29uZmlndXJlZChDR0RpcmVjdERpc3BsYXlJRCwgQ0dEaXNwbGF5Q2hhbmdlU3VtbWFyeUZs
YWdzKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQhCit9CisKK3ZvaWQgQ0dEaXNwbGF5U3Ry
ZWFtQ2FwdHVyZVNvdXJjZTo6ZGlzcGxheVJlY29uZmlndXJhdGlvbkNhbGxCYWNrKENHRGlyZWN0
RGlzcGxheUlEIGRpc3BsYXksIENHRGlzcGxheUNoYW5nZVN1bW1hcnlGbGFncyBmbGFncywgdm9p
ZCAqdXNlckluZm8pCit7CisgICAgaWYgKHVzZXJJbmZvKQorICAgICAgICByZWludGVycHJldF9j
YXN0PENHRGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2UgKj4odXNlckluZm8pLT5kaXNwbGF5V2Fz
UmVjb25maWd1cmVkKGRpc3BsYXksIGZsYWdzKTsKK30KKwordm9pZCBDR0Rpc3BsYXlTdHJlYW1D
YXB0dXJlU291cmNlOjpuZXdGcmFtZShDR0Rpc3BsYXlTdHJlYW1GcmFtZVN0YXR1cyBzdGF0dXMs
IERpc3BsYXlTdXJmYWNlJiYgbmV3RnJhbWUpCit7CisgICAgc3dpdGNoIChzdGF0dXMpIHsKKyAg
ICBjYXNlIGtDR0Rpc3BsYXlTdHJlYW1GcmFtZVN0YXR1c0ZyYW1lQ29tcGxldGU6CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBrQ0dEaXNwbGF5U3RyZWFtRnJhbWVTdGF0dXNGcmFtZUlkbGU6
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBrQ0dEaXNwbGF5U3RyZWFtRnJhbWVTdGF0dXNG
cmFtZUJsYW5rOgorICAgICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJDR0Rpc3BsYXlTdHJlYW1D
YXB0dXJlU291cmNlOjpmcmFtZUF2YWlsYWJsZToga0NHRGlzcGxheVN0cmVhbUZyYW1lU3RhdHVz
RnJhbWVCbGFuayIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Uga0NHRGlzcGxheVN0cmVh
bUZyYW1lU3RhdHVzU3RvcHBlZDoKKyAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQ0dEaXNw
bGF5U3RyZWFtQ2FwdHVyZVNvdXJjZTo6ZnJhbWVBdmFpbGFibGU6IGtDR0Rpc3BsYXlTdHJlYW1G
cmFtZVN0YXR1c1N0b3BwZWQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9jdXJy
ZW50RnJhbWUgPSBXVEZNb3ZlKG5ld0ZyYW1lKTsKK30KKworQ0dEaXNwbGF5U3RyZWFtRnJhbWVB
dmFpbGFibGVIYW5kbGVyIENHRGlzcGxheVN0cmVhbUNhcHR1cmVTb3VyY2U6OmZyYW1lQXZhaWxh
YmxlSGFuZGxlcigpCit7CisgICAgaWYgKG1fZnJhbWVBdmFpbGFibGVIYW5kbGVyKQorICAgICAg
ICByZXR1cm4gbV9mcmFtZUF2YWlsYWJsZUhhbmRsZXIuZ2V0KCk7CisKKyAgICBhdXRvIHdlYWtU
aGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpOworICAgIG1fZnJhbWVBdmFpbGFibGVIYW5kbGVyID0g
XihDR0Rpc3BsYXlTdHJlYW1GcmFtZVN0YXR1cyBzdGF0dXMsIHVpbnQ2NF90IGRpc3BsYXlUaW1l
LCBJT1N1cmZhY2VSZWYgZnJhbWVTdXJmYWNlLCBDR0Rpc3BsYXlTdHJlYW1VcGRhdGVSZWYgdXBk
YXRlUmVmKQorICAgIHsKKyAgICAgICAgaWYgKCFmcmFtZVN1cmZhY2UgfHwgIWRpc3BsYXlUaW1l
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHNpemVfdCBjb3VudDsKKyAgICAgICAg
YXV0byogcmVjdHMgPSBDR0Rpc3BsYXlTdHJlYW1VcGRhdGVHZXRSZWN0cyh1cGRhdGVSZWYsIGtD
R0Rpc3BsYXlTdHJlYW1VcGRhdGVEaXJ0eVJlY3RzLCAmY291bnQpOworICAgICAgICBpZiAoIXJl
Y3RzIHx8ICFjb3VudCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goW3dlYWtUaGlzLCBzdGF0dXMsIGZyYW1lID0gRGlzcGxheVN1cmZhY2Ug
eyBmcmFtZVN1cmZhY2UgfV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGlmICghd2Vha1RoaXMp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgd2Vha1RoaXMtPm5ld0ZyYW1l
KHN0YXR1cywgV1RGTW92ZShmcmFtZSkpOworICAgICAgICB9KTsKKyAgICB9OworCisgICAgcmV0
dXJuIG1fZnJhbWVBdmFpbGFibGVIYW5kbGVyLmdldCgpOworCit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFBMQVRGT1JNKE1B
QykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9T
Y3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9DR0Rpc3BsYXlTdHJlYW1DYXB0dXJlU291cmNlLmgKc2ltaWxhcml0eSBpbmRl
eCA3MyUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L1NjcmVlbkRpc3BsYXlDYXB0dXJlck1hYy5oCnJlbmFtZSB0byBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZS5oCmluZGV4
IDg1NGNhYmQ2ZjlhZC4uMWMyMGRmYzAwYWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVyTWFjLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NHRGlzcGxheVN0cmVhbUNh
cHR1cmVTb3VyY2UuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTct
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDEwICsyNywxMSBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkgJiYgUExBVEZPUk0oTUFDKQogCi0jaW5jbHVkZSAiRGlzcGxheUNhcHR1cmVTb3VyY2VD
b2NvYS5oIgorI2luY2x1ZGUgIkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgiCiAjaW5jbHVkZSAi
SU9TdXJmYWNlLmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHRGlzcGxheUNvbmZpZ3VyYXRp
b24uaD4KICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dEaXNwbGF5U3RyZWFtLmg+CisjaW5jbHVk
ZSA8d3RmL0Jsb2NrUHRyLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYv
T1NPYmplY3RQdHIuaD4KIApAQCAtMzksMzMgKzQwLDMxIEBAIHR5cGVkZWYgc3RydWN0IG9wYXF1
ZUNNU2FtcGxlQnVmZmVyICpDTVNhbXBsZUJ1ZmZlclJlZjsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jbGFzcyBTY3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWMgZmluYWwgOiBwdWJsaWMgRGlzcGxh
eUNhcHR1cmVTb3VyY2VDb2NvYTo6Q2FwdHVyZXIsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxTY3Jl
ZW5EaXNwbGF5Q2FwdHVyZXJNYWM+IHsKK2NsYXNzIENHRGlzcGxheVN0cmVhbUNhcHR1cmVTb3Vy
Y2UgOiBwdWJsaWMgRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OkNhcHR1cmVyLCBwdWJsaWMgQ2Fu
TWFrZVdlYWtQdHI8Q0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZT4gewogcHVibGljOgotICAg
IHN0YXRpYyBFeHBlY3RlZDxVbmlxdWVSZWY8RGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6Q2Fw
dHVyZXI+LCBTdHJpbmc+IGNyZWF0ZShjb25zdCBTdHJpbmcmKTsKKyAgICBleHBsaWNpdCBDR0Rp
c3BsYXlTdHJlYW1DYXB0dXJlU291cmNlKCkgPSBkZWZhdWx0OworICAgIH5DR0Rpc3BsYXlTdHJl
YW1DYXB0dXJlU291cmNlKCk7CiAKLSAgICBleHBsaWNpdCBTY3JlZW5EaXNwbGF5Q2FwdHVyZXJN
YWModWludDMyX3QpOwotICAgIH5TY3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWMoKTsKK3Byb3RlY3Rl
ZDoKKyAgICB1c2luZyBGcmFtZUF2YWlsYWJsZUNhbGxiYWNrID0gdm9pZCAoXikoQ0dEaXNwbGF5
U3RyZWFtRnJhbWVTdGF0dXMsIHVpbnQ2NF90LCBJT1N1cmZhY2VSZWYsIENHRGlzcGxheVN0cmVh
bVVwZGF0ZVJlZik7CisgICAgdmlydHVhbCBSZXRhaW5QdHI8Q0dEaXNwbGF5U3RyZWFtUmVmPiBj
cmVhdGVEaXNwbGF5U3RyZWFtKGZsb2F0LCBGcmFtZUF2YWlsYWJsZUNhbGxiYWNrLCBkaXNwYXRj
aF9xdWV1ZV90KSA9IDA7CisgICAgdmlydHVhbCBib29sIGNoZWNrRGlzcGxheVN0cmVhbSgpIHsg
cmV0dXJuIHRydWU7IH0KIAotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENhcHR1cmVEZXZpY2U+
IHNjcmVlbkNhcHR1cmVEZXZpY2VXaXRoUGVyc2lzdGVudElEKGNvbnN0IFN0cmluZyYpOwotICAg
IHN0YXRpYyB2b2lkIHNjcmVlbkNhcHR1cmVEZXZpY2VzKFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYp
OworICAgIENHRGlzcGxheVN0cmVhbVJlZiBkaXNwbGF5U3RyZWFtKCkgY29uc3QgeyByZXR1cm4g
bV9kaXNwbGF5U3RyZWFtLmdldCgpOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlRGlzcGxheVN0cmVh
bSgpIHsgbV9kaXNwbGF5U3RyZWFtID0gbnVsbHB0cjsgfQogCiBwcml2YXRlOgogICAgIHN0YXRp
YyB2b2lkIGRpc3BsYXlSZWNvbmZpZ3VyYXRpb25DYWxsQmFjayhDR0RpcmVjdERpc3BsYXlJRCwg
Q0dEaXNwbGF5Q2hhbmdlU3VtbWFyeUZsYWdzLCB2b2lkKik7CiAKLSAgICAvLyBEaXNwbGF5Q2Fw
dHVyZVNvdXJjZUNvY29hOjpDYXB0dXJlcgorICAgIC8vIERpc3BsYXlDYXB0dXJlU291cmNlTWFj
OjpDYXB0dXJlcgogICAgIGJvb2wgc3RhcnQoZmxvYXQgZnJhbWVSYXRlKSBmaW5hbDsKICAgICB2
b2lkIHN0b3AoKSBmaW5hbDsKLSAgICBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpEaXNwbGF5
RnJhbWVUeXBlIGdlbmVyYXRlRnJhbWUoKSBmaW5hbDsKLSAgICBSZWFsdGltZU1lZGlhU291cmNl
U2V0dGluZ3M6OkRpc3BsYXlTdXJmYWNlVHlwZSBzdXJmYWNlVHlwZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RGlzcGxheVN1cmZhY2VUeXBlOjpN
b25pdG9yOyB9CisgICAgRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OkRpc3BsYXlGcmFtZVR5cGUg
Z2VuZXJhdGVGcmFtZSgpIGZpbmFsOwogICAgIHZvaWQgY29tbWl0Q29uZmlndXJhdGlvbihmbG9h
dCBmcmFtZVJhdGUpIGZpbmFsOwotICAgIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGUgZGV2aWNl
VHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OlNj
cmVlbjsgfQotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgIGNvbnN0IGNoYXIqIGxvZ0Ns
YXNzTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJTY3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWMi
OyB9Ci0jZW5kaWYKIAogICAgIHZvaWQgZGlzcGxheVdhc1JlY29uZmlndXJlZChDR0RpcmVjdERp
c3BsYXlJRCwgQ0dEaXNwbGF5Q2hhbmdlU3VtbWFyeUZsYWdzKTsKLSAgICBib29sIGNyZWF0ZURp
c3BsYXlTdHJlYW0oZmxvYXQgZnJhbWVSYXRlKTsKICAgICBib29sIHN0YXJ0RGlzcGxheVN0cmVh
bShmbG9hdCBmcmFtZVJhdGUpOworICAgIEZyYW1lQXZhaWxhYmxlQ2FsbGJhY2sgZnJhbWVBdmFp
bGFibGVIYW5kbGVyKCk7CiAKICAgICBjbGFzcyBEaXNwbGF5U3VyZmFjZSB7CiAgICAgcHVibGlj
OgpAQCAtMTA0LDggKzEwMyw4IEBAIHByaXZhdGU6CiAgICAgRGlzcGxheVN1cmZhY2UgbV9jdXJy
ZW50RnJhbWU7CiAgICAgUmV0YWluUHRyPENHRGlzcGxheVN0cmVhbVJlZj4gbV9kaXNwbGF5U3Ry
ZWFtOwogICAgIE9TT2JqZWN0UHRyPGRpc3BhdGNoX3F1ZXVlX3Q+IG1fY2FwdHVyZVF1ZXVlOwor
ICAgIEJsb2NrUHRyPHZvaWQoQ0dEaXNwbGF5U3RyZWFtRnJhbWVTdGF0dXMsIHVpbnQ2NF90LCBJ
T1N1cmZhY2VSZWYsIENHRGlzcGxheVN0cmVhbVVwZGF0ZVJlZik+IG1fZnJhbWVBdmFpbGFibGVI
YW5kbGVyOwogCi0gICAgdWludDMyX3QgbV9kaXNwbGF5SUQgeyAwIH07CiAgICAgYm9vbCBtX2lz
UnVubmluZyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX29ic2VydmluZ0Rpc3BsYXlDaGFuZ2VzIHsg
ZmFsc2UgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvQ0dEaXNwbGF5U3RyZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NHRGlzcGxheVN0cmVhbVNjcmVlbkNhcHR1
cmVTb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjY5MmZm
NWE0N2ExMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9DR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNlLmgKQEAgLTAsMCAr
MSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgUExBVEZPUk0o
TUFDKQorCisjaW5jbHVkZSAiQ0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZS5oIgorI2luY2x1
ZGUgIklPU3VyZmFjZS5oIgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0Rpc3BsYXlDb25maWd1
cmF0aW9uLmg+CisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHRGlzcGxheVN0cmVhbS5oPgorI2lu
Y2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL09TT2JqZWN0UHRyLmg+CisKK3R5cGVk
ZWYgc3RydWN0IF9fQ1ZCdWZmZXIgKkNWUGl4ZWxCdWZmZXJSZWY7Cit0eXBlZGVmIHN0cnVjdCBv
cGFxdWVDTVNhbXBsZUJ1ZmZlciAqQ01TYW1wbGVCdWZmZXJSZWY7CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgQ0dEaXNwbGF5U3RyZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZSBmaW5hbCA6
IHB1YmxpYyBDR0Rpc3BsYXlTdHJlYW1DYXB0dXJlU291cmNlIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgRXhwZWN0ZWQ8VW5pcXVlUmVmPERpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpDYXB0dXJlcj4s
IFN0cmluZz4gY3JlYXRlKGNvbnN0IFN0cmluZyYpOworCisgICAgZXhwbGljaXQgQ0dEaXNwbGF5
U3RyZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZSh1aW50MzJfdCk7CisgICAgfkNHRGlzcGxheVN0cmVh
bVNjcmVlbkNhcHR1cmVTb3VyY2UoKSA9IGRlZmF1bHQ7CisKKyAgICBzdGF0aWMgc3RkOjpvcHRp
b25hbDxDYXB0dXJlRGV2aWNlPiBzY3JlZW5DYXB0dXJlRGV2aWNlV2l0aFBlcnNpc3RlbnRJRChj
b25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgdm9pZCBzY3JlZW5DYXB0dXJlRGV2aWNlcyhWZWN0
b3I8Q2FwdHVyZURldmljZT4mKTsKKworcHJpdmF0ZToKKworICAgIC8vIERpc3BsYXlDYXB0dXJl
U291cmNlTWFjOjpDYXB0dXJlcgorICAgIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGUgZGV2aWNl
VHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OlNj
cmVlbjsgfQorICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RGlzcGxheVN1cmZhY2VU
eXBlIHN1cmZhY2VUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJj
ZVNldHRpbmdzOjpEaXNwbGF5U3VyZmFjZVR5cGU6Ok1vbml0b3I7IH0KKyNpZiAhUkVMRUFTRV9M
T0dfRElTQUJMRUQKKyAgICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiAiQ0dEaXNwbGF5U3RyZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZSI7IH0KKyNlbmRpZgor
CisgICAgLy8gQ0dEaXNwbGF5U3RyZWFtQ2FwdHVyZVNvdXJjZQorICAgIFJldGFpblB0cjxDR0Rp
c3BsYXlTdHJlYW1SZWY+IGNyZWF0ZURpc3BsYXlTdHJlYW0oZmxvYXQsIEZyYW1lQXZhaWxhYmxl
Q2FsbGJhY2ssIGRpc3BhdGNoX3F1ZXVlX3QpIGZpbmFsOworICAgIGJvb2wgY2hlY2tEaXNwbGF5
U3RyZWFtKCkgZmluYWw7CisKKyAgICBjbGFzcyBEaXNwbGF5U3VyZmFjZSB7CisgICAgcHVibGlj
OgorICAgICAgICBEaXNwbGF5U3VyZmFjZSgpID0gZGVmYXVsdDsKKyAgICAgICAgZXhwbGljaXQg
RGlzcGxheVN1cmZhY2UoSU9TdXJmYWNlUmVmIHN1cmZhY2UpCisgICAgICAgICAgICA6IG1fc3Vy
ZmFjZShzdXJmYWNlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9zdXJmYWNlKQorICAg
ICAgICAgICAgICAgIElPU3VyZmFjZUluY3JlbWVudFVzZUNvdW50KG1fc3VyZmFjZS5nZXQoKSk7
CisgICAgICAgIH0KKworICAgICAgICB+RGlzcGxheVN1cmZhY2UoKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAobV9zdXJmYWNlKQorICAgICAgICAgICAgICAgIElPU3VyZmFjZURlY3JlbWVu
dFVzZUNvdW50KG1fc3VyZmFjZS5nZXQoKSk7CisgICAgICAgIH0KKworICAgICAgICBEaXNwbGF5
U3VyZmFjZSYgb3BlcmF0b3I9KElPU3VyZmFjZVJlZiBzdXJmYWNlKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAobV9zdXJmYWNlKQorICAgICAgICAgICAgICAgIElPU3VyZmFjZURlY3JlbWVu
dFVzZUNvdW50KG1fc3VyZmFjZS5nZXQoKSk7CisgICAgICAgICAgICBpZiAoc3VyZmFjZSkKKyAg
ICAgICAgICAgICAgICBJT1N1cmZhY2VJbmNyZW1lbnRVc2VDb3VudChzdXJmYWNlKTsKKyAgICAg
ICAgICAgIG1fc3VyZmFjZSA9IHN1cmZhY2U7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgICAgIH0KKworICAgICAgICBJT1N1cmZhY2VSZWYgaW9TdXJmYWNlKCkgY29uc3QgeyByZXR1
cm4gbV9zdXJmYWNlLmdldCgpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBSZXRhaW5QdHI8
SU9TdXJmYWNlUmVmPiBtX3N1cmZhY2U7CisgICAgfTsKKworICAgIFJldGFpblB0cjxDR0Rpc3Bs
YXlTdHJlYW1SZWY+IG1fZGlzcGxheVN0cmVhbTsKKworICAgIHVpbnQzMl90IG1fZGlzcGxheUlE
IHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KE1FRElBX1NUUkVBTSkgJiYgUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NHRGlzcGxheVN0cmVhbVNjcmVlbkNhcHR1cmVT
b3VyY2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ0dEaXNw
bGF5U3RyZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAuLmY2OTEyMTg0NTRiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9DR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0
dXJlU291cmNlLm1tCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Q0dEaXNwbGF5U3RyZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZS5oIgorCisjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkgJiYgUExBVEZPUk0oTUFDKQorCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5o
IgorI2ltcG9ydCAiSW1hZ2VCdWZmZXIuaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQg
Ik1lZGlhQ29uc3RyYWludHMuaCIKKyNpbXBvcnQgIk1lZGlhU2FtcGxlQVZGT2JqQy5oIgorI2lt
cG9ydCAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbXBvcnQgIlBsYXRmb3JtTGF5ZXIuaCIKKyNpbXBv
cnQgIlBsYXRmb3JtU2NyZWVuLmgiCisjaW1wb3J0ICJSZWFsdGltZU1lZGlhU291cmNlU2V0dGlu
Z3MuaCIKKyNpbXBvcnQgIlJlYWx0aW1lVmlkZW9VdGlsaXRpZXMuaCIKKyNpbXBvcnQgPHBhbC9z
cGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdUb0ludGVn
ZXJDb252ZXJzaW9uLmg+CisKKyNpbXBvcnQgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8Q0dEaXJlY3REaXNwbGF5SUQ+
IHVwZGF0ZURpc3BsYXlJRChDR0RpcmVjdERpc3BsYXlJRCBkaXNwbGF5SUQpCit7CisgICAgdWlu
dDMyX3QgZGlzcGxheUNvdW50ID0gMDsKKyAgICBhdXRvIGVyciA9IENHR2V0QWN0aXZlRGlzcGxh
eUxpc3QoMCwgbnVsbHB0ciwgJmRpc3BsYXlDb3VudCk7CisgICAgaWYgKGVycikgeworICAgICAg
ICBSRUxFQVNFX0xPRyhXZWJSVEMsICJDR0dldEFjdGl2ZURpc3BsYXlMaXN0KCkgcmV0dXJuZWQg
ZXJyb3IgJWQgd2hlbiB0cnlpbmcgdG8gZ2V0IGRpc3BsYXkgY291bnQiLCBzdGF0aWNfY2FzdDxp
bnQ+KGVycikpOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIGlm
ICghZGlzcGxheUNvdW50KSB7CisgICAgICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIkNHR2V0QWN0
aXZlRGlzcGxheUxpc3QoKSByZXR1cm5lZCBhIGRpc3BsYXkgY291bnQgb2YgMCIpOworICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIFZlY3RvcjxDR0RpcmVjdERpc3Bs
YXlJRD4gYWN0aXZlRGlzcGxheXMoZGlzcGxheUNvdW50KTsKKyAgICBlcnIgPSBDR0dldEFjdGl2
ZURpc3BsYXlMaXN0KGRpc3BsYXlDb3VudCwgYWN0aXZlRGlzcGxheXMuZGF0YSgpLCAmZGlzcGxh
eUNvdW50KTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIkNH
R2V0QWN0aXZlRGlzcGxheUxpc3QoKSByZXR1cm5lZCBlcnJvciAlZCB3aGVuIHRyeWluZyB0byBn
ZXQgdGhlIGFjdGl2ZSBkaXNwbGF5IGxpc3QiLCBzdGF0aWNfY2FzdDxpbnQ+KGVycikpOworICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIGF1dG8gZGlzcGxheU1hc2sg
PSBDR0Rpc3BsYXlJRFRvT3BlbkdMRGlzcGxheU1hc2soZGlzcGxheUlEKTsKKyAgICBmb3IgKGF1
dG8gZGlzcGxheSA6IGFjdGl2ZURpc3BsYXlzKSB7CisgICAgICAgIGlmIChkaXNwbGF5TWFzayA9
PSBDR0Rpc3BsYXlJRFRvT3BlbkdMRGlzcGxheU1hc2soZGlzcGxheSkpCisgICAgICAgICAgICBy
ZXR1cm4gZGlzcGxheTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OworfQorCitF
eHBlY3RlZDxVbmlxdWVSZWY8RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OkNhcHR1cmVyPiwgU3Ry
aW5nPiBDR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNlOjpjcmVhdGUoY29uc3QgU3Ry
aW5nJiBkZXZpY2VJRCkKK3sKKyAgICBhdXRvIGRpc3BsYXlJRCA9IHBhcnNlSW50ZWdlcjx1aW50
MzJfdD4oZGV2aWNlSUQpOworICAgIGlmICghZGlzcGxheUlEKQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIkludmFsaWQgZGlzcGxheSBkZXZpY2UgSUQiX3MpOworCisgICAgYXV0byBh
Y3R1YWxEaXNwbGF5SUQgPSB1cGRhdGVEaXNwbGF5SUQoZGlzcGxheUlELnZhbHVlKCkpOworICAg
IGlmICghYWN0dWFsRGlzcGxheUlEKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIklu
dmFsaWQgZGlzcGxheSBJRCJfcyk7CisKKyAgICByZXR1cm4gVW5pcXVlUmVmPERpc3BsYXlDYXB0
dXJlU291cmNlTWFjOjpDYXB0dXJlcj4obWFrZVVuaXF1ZVJlZjxDR0Rpc3BsYXlTdHJlYW1TY3Jl
ZW5DYXB0dXJlU291cmNlPihhY3R1YWxEaXNwbGF5SUQudmFsdWUoKSkpOworfQorCitDR0Rpc3Bs
YXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNlOjpDR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJl
U291cmNlKHVpbnQzMl90IGRpc3BsYXlJRCkKKyAgICA6IENHRGlzcGxheVN0cmVhbUNhcHR1cmVT
b3VyY2UoKQorICAgICwgbV9kaXNwbGF5SUQoZGlzcGxheUlEKQoreworfQorCitib29sIENHRGlz
cGxheVN0cmVhbVNjcmVlbkNhcHR1cmVTb3VyY2U6OmNoZWNrRGlzcGxheVN0cmVhbSgpCit7Cisg
ICAgYXV0byBhY3R1YWxEaXNwbGF5SUQgPSB1cGRhdGVEaXNwbGF5SUQobV9kaXNwbGF5SUQpOwor
ICAgIGlmICghYWN0dWFsRGlzcGxheUlEKSB7CisgICAgICAgIEVSUk9SX0xPR19JRihsb2dnZXJQ
dHIoKSwgTE9HSURFTlRJRklFUiwgImludmFsaWQgZGlzcGxheSBJRDogIiwgbV9kaXNwbGF5SUQp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1fZGlzcGxheUlEICE9
IGFjdHVhbERpc3BsYXlJRC52YWx1ZSgpKSB7CisgICAgICAgIG1fZGlzcGxheUlEID0gYWN0dWFs
RGlzcGxheUlELnZhbHVlKCk7CisgICAgICAgIGludmFsaWRhdGVEaXNwbGF5U3RyZWFtKCk7Cisg
ICAgICAgIEFMV0FZU19MT0dfSUYobG9nZ2VyUHRyKCksIExPR0lERU5USUZJRVIsICJkaXNwbGF5
IElEIGNoYW5nZWQgdG8gIiwgc3RhdGljX2Nhc3Q8aW50PihtX2Rpc3BsYXlJRCkpOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUmV0YWluUHRyPENHRGlzcGxheVN0cmVhbVJl
Zj4gQ0dEaXNwbGF5U3RyZWFtU2NyZWVuQ2FwdHVyZVNvdXJjZTo6Y3JlYXRlRGlzcGxheVN0cmVh
bShmbG9hdCBmcmFtZVJhdGUsIEZyYW1lQXZhaWxhYmxlQ2FsbGJhY2sgZnJhbWVBdmFpbGFibGVI
YW5kbGVyLCBkaXNwYXRjaF9xdWV1ZV90IHF1ZXVlKQoreworICAgIHN0YXRpYyBjb25zdCBpbnQg
c2NyZWVuUXVldWVNYXhpbXVtTGVuZ3RoID0gNjsKKworICAgIEFTU0VSVCghZGlzcGxheVN0cmVh
bSgpKTsKKyAgICBBU1NFUlQobV9kaXNwbGF5SUQgPT0gdXBkYXRlRGlzcGxheUlEKG1fZGlzcGxh
eUlEKSk7CisKKyAgICBBTFdBWVNfTE9HX0lGKGxvZ2dlclB0cigpLCBMT0dJREVOVElGSUVSKTsK
KworICAgIGF1dG8gZGlzcGxheU1vZGUgPSBhZG9wdENGKENHRGlzcGxheUNvcHlEaXNwbGF5TW9k
ZShtX2Rpc3BsYXlJRCkpOworICAgIGF1dG8gc2NyZWVuV2lkdGggPSBDR0Rpc3BsYXlNb2RlR2V0
UGl4ZWxzV2lkZShkaXNwbGF5TW9kZS5nZXQoKSk7CisgICAgYXV0byBzY3JlZW5IZWlnaHQgPSBD
R0Rpc3BsYXlNb2RlR2V0UGl4ZWxzSGlnaChkaXNwbGF5TW9kZS5nZXQoKSk7CisgICAgaWYgKCFz
Y3JlZW5XaWR0aCB8fCAhc2NyZWVuSGVpZ2h0KSB7CisgICAgICAgIEVSUk9SX0xPR19JRihsb2dn
ZXJQdHIoKSwgTE9HSURFTlRJRklFUiwgInVuYWJsZSB0byBnZXQgc2NyZWVuIHdpZHRoL2hlaWdo
dCIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBOU0RpY3Rpb25hcnkq
IHN0cmVhbU9wdGlvbnMgPSBAeworICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ0dEaXNw
bGF5U3RyZWFtTWluaW11bUZyYW1lVGltZSA6IEAoMSAvIGZyYW1lUmF0ZSksCisgICAgICAgIChf
X2JyaWRnZSBOU1N0cmluZyAqKWtDR0Rpc3BsYXlTdHJlYW1RdWV1ZURlcHRoIDogQChzY3JlZW5R
dWV1ZU1heGltdW1MZW5ndGgpLAorICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ0dEaXNw
bGF5U3RyZWFtQ29sb3JTcGFjZSA6IChfX2JyaWRnZSBpZClzUkdCQ29sb3JTcGFjZVJlZigpLAor
ICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ0dEaXNwbGF5U3RyZWFtU2hvd0N1cnNvciA6
IEBZRVMsCisgICAgfTsKKworICAgIHJldHVybiBhZG9wdENGKENHRGlzcGxheVN0cmVhbUNyZWF0
ZVdpdGhEaXNwYXRjaFF1ZXVlKG1fZGlzcGxheUlELCBzY3JlZW5XaWR0aCwgc2NyZWVuSGVpZ2h0
LCBwcmVmZXJlZFBpeGVsQnVmZmVyRm9ybWF0KCksIChfX2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYp
c3RyZWFtT3B0aW9ucywgcXVldWUsIGZyYW1lQXZhaWxhYmxlSGFuZGxlcikpOworfQorCitzdGQ6
Om9wdGlvbmFsPENhcHR1cmVEZXZpY2U+IENHRGlzcGxheVN0cmVhbVNjcmVlbkNhcHR1cmVTb3Vy
Y2U6OnNjcmVlbkNhcHR1cmVEZXZpY2VXaXRoUGVyc2lzdGVudElEKGNvbnN0IFN0cmluZyYgZGV2
aWNlSUQpCit7CisgICAgYXV0byBkaXNwbGF5SUQgPSBwYXJzZUludGVnZXI8dWludDMyX3Q+KGRl
dmljZUlEKTsKKyAgICBpZiAoIWRpc3BsYXlJRCkgeworICAgICAgICBSRUxFQVNFX0xPRyhXZWJS
VEMsICJDR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNlOjpzY3JlZW5DYXB0dXJlRGV2
aWNlV2l0aFBlcnNpc3RlbnRJRDogZGlzcGxheSBJRCBkb2VzIG5vdCBjb252ZXJ0IHRvIDMyLWJp
dCBpbnRlZ2VyIik7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAg
YXV0byBhY3R1YWxEaXNwbGF5SUQgPSB1cGRhdGVEaXNwbGF5SUQoZGlzcGxheUlELnZhbHVlKCkp
OworICAgIGlmICghYWN0dWFsRGlzcGxheUlEKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgYXV0byBkZXZpY2UgPSBDYXB0dXJlRGV2aWNlKFN0cmluZzo6bnVtYmVyKGFjdHVh
bERpc3BsYXlJRC52YWx1ZSgpKSwgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6U2NyZWVuLCAi
U2NyZWVuQ2FwdHVyZURldmljZSJfcyk7CisgICAgZGV2aWNlLnNldEVuYWJsZWQodHJ1ZSk7CisK
KyAgICByZXR1cm4gZGV2aWNlOworfQorCit2b2lkIENHRGlzcGxheVN0cmVhbVNjcmVlbkNhcHR1
cmVTb3VyY2U6OnNjcmVlbkNhcHR1cmVEZXZpY2VzKFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYgZGlz
cGxheXMpCit7CisgICAgYXV0byBzY3JlZW5JRCA9IGRpc3BsYXlJRChbTlNTY3JlZW4gbWFpblNj
cmVlbl0pOworICAgIGlmIChDR0Rpc3BsYXlJRFRvT3BlbkdMRGlzcGxheU1hc2soc2NyZWVuSUQp
KSB7CisgICAgICAgIENhcHR1cmVEZXZpY2UgZGlzcGxheURldmljZShTdHJpbmc6Om51bWJlcihz
Y3JlZW5JRCksIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OlNjcmVlbiwgbWFrZVN0cmluZygi
U2NyZWVuIDAiKSk7CisgICAgICAgIGRpc3BsYXlEZXZpY2Uuc2V0RW5hYmxlZCh0cnVlKTsKKyAg
ICAgICAgZGlzcGxheXMuYXBwZW5kKFdURk1vdmUoZGlzcGxheURldmljZSkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgdWludDMyX3QgZGlzcGxheUNvdW50ID0gMDsKKyAgICBhdXRv
IGVyciA9IENHR2V0QWN0aXZlRGlzcGxheUxpc3QoMCwgbnVsbHB0ciwgJmRpc3BsYXlDb3VudCk7
CisgICAgaWYgKGVycikgeworICAgICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJDR0dldEFjdGl2
ZURpc3BsYXlMaXN0KCkgcmV0dXJuZWQgZXJyb3IgJWQgd2hlbiB0cnlpbmcgdG8gZ2V0IGRpc3Bs
YXkgY291bnQiLCAoaW50KWVycik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IWRpc3BsYXlDb3VudCkgeworICAgICAgICBSRUxFQVNFX0xPRyhXZWJSVEMsICJDR0dldEFjdGl2
ZURpc3BsYXlMaXN0KCkgcmV0dXJuZWQgYSBkaXNwbGF5IGNvdW50IG9mIDAiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxDR0RpcmVjdERpc3BsYXlJRD4gYWN0aXZlRGlz
cGxheXMoZGlzcGxheUNvdW50KTsKKyAgICBlcnIgPSBDR0dldEFjdGl2ZURpc3BsYXlMaXN0KGRp
c3BsYXlDb3VudCwgYWN0aXZlRGlzcGxheXMuZGF0YSgpLCAmZGlzcGxheUNvdW50KTsKKyAgICBp
ZiAoZXJyKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIkNHR2V0QWN0aXZlRGlzcGxh
eUxpc3QoKSByZXR1cm5lZCBlcnJvciAlZCB3aGVuIHRyeWluZyB0byBnZXQgdGhlIGFjdGl2ZSBk
aXNwbGF5IGxpc3QiLCAoaW50KWVycik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
bnQgY291bnQgPSAwOworICAgIGZvciAoYXV0byBkaXNwbGF5SUQgOiBhY3RpdmVEaXNwbGF5cykg
eworICAgICAgICBDYXB0dXJlRGV2aWNlIGRpc3BsYXlEZXZpY2UoU3RyaW5nOjpudW1iZXIoZGlz
cGxheUlEKSwgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6U2NyZWVuLCBtYWtlU3RyaW5nKCJT
Y3JlZW4gIiwgU3RyaW5nOjpudW1iZXIoY291bnQrKykpKTsKKyAgICAgICAgZGlzcGxheURldmlj
ZS5zZXRFbmFibGVkKENHRGlzcGxheUlEVG9PcGVuR0xEaXNwbGF5TWFzayhkaXNwbGF5SUQpKTsK
KyAgICAgICAgZGlzcGxheXMuYXBwZW5kKFdURk1vdmUoZGlzcGxheURldmljZSkpOworICAgIH0K
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NU
UkVBTSkgJiYgUExBVEZPUk0oTUFDKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVyTWFjLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ0dXaW5kb3dDYXB0dXJlU291cmNlLmgK
c2ltaWxhcml0eSBpbmRleCA4MCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL1dpbmRvd0Rpc3BsYXlDYXB0dXJlck1hYy5oCnJlbmFtZSB0byBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ0dXaW5kb3dDYXB0dXJlU291cmNl
LmgKaW5kZXggZWY5ZjQyOGZhZmZiLi5jNDE3M2Y0MzNkZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWMu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ0dXaW5kb3dD
YXB0dXJlU291cmNlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkg
JiYgUExBVEZPUk0oTUFDKQogCi0jaW5jbHVkZSAiRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5o
IgorI2luY2x1ZGUgIkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgiCiAKIHR5cGVkZWYgc3RydWN0
IF9fQ1ZCdWZmZXIgKkNWQnVmZmVyUmVmOwogdHlwZWRlZiBDVkJ1ZmZlclJlZiBDVkltYWdlQnVm
ZmVyUmVmOwpAQCAtMzgsMjcgKzM4LDI1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
UGl4ZWxCdWZmZXJDb25mb3JtZXJDVjsKIAotY2xhc3MgV2luZG93RGlzcGxheUNhcHR1cmVyTWFj
IGZpbmFsIDogcHVibGljIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OkNhcHR1cmVyIHsKK2Ns
YXNzIENHV2luZG93Q2FwdHVyZVNvdXJjZSBmaW5hbCA6IHB1YmxpYyBEaXNwbGF5Q2FwdHVyZVNv
dXJjZU1hYzo6Q2FwdHVyZXIgewogcHVibGljOgotICAgIHN0YXRpYyBFeHBlY3RlZDxVbmlxdWVS
ZWY8RGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6Q2FwdHVyZXI+LCBTdHJpbmc+IGNyZWF0ZShj
b25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgRXhwZWN0ZWQ8VW5pcXVlUmVmPERpc3BsYXlDYXB0
dXJlU291cmNlTWFjOjpDYXB0dXJlcj4sIFN0cmluZz4gY3JlYXRlKGNvbnN0IFN0cmluZyYpOwog
Ci0gICAgZXhwbGljaXQgV2luZG93RGlzcGxheUNhcHR1cmVyTWFjKHVpbnQzMl90KTsKLSAgICB2
aXJ0dWFsIH5XaW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWMoKSA9IGRlZmF1bHQ7CisgICAgZXhwbGlj
aXQgQ0dXaW5kb3dDYXB0dXJlU291cmNlKHVpbnQzMl90KTsKKyAgICB2aXJ0dWFsIH5DR1dpbmRv
d0NhcHR1cmVTb3VyY2UoKSA9IGRlZmF1bHQ7CiAKICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxD
YXB0dXJlRGV2aWNlPiB3aW5kb3dDYXB0dXJlRGV2aWNlV2l0aFBlcnNpc3RlbnRJRChjb25zdCBT
dHJpbmcmKTsKICAgICBzdGF0aWMgdm9pZCB3aW5kb3dDYXB0dXJlRGV2aWNlcyhWZWN0b3I8Q2Fw
dHVyZURldmljZT4mKTsKIAogcHJpdmF0ZToKLSAgICAvLyBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNv
Y29hOjpDYXB0dXJlcgorICAgIC8vIERpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpDYXB0dXJlcgog
ICAgIGJvb2wgc3RhcnQoZmxvYXQpIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KICAgICB2b2lkIHN0
b3AoKSBmaW5hbCB7IH0KLSAgICBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpEaXNwbGF5RnJh
bWVUeXBlIGdlbmVyYXRlRnJhbWUoKSBmaW5hbDsKKyAgICBEaXNwbGF5Q2FwdHVyZVNvdXJjZU1h
Yzo6RGlzcGxheUZyYW1lVHlwZSBnZW5lcmF0ZUZyYW1lKCkgZmluYWw7CiAgICAgUmVhbHRpbWVN
ZWRpYVNvdXJjZVNldHRpbmdzOjpEaXNwbGF5U3VyZmFjZVR5cGUgc3VyZmFjZVR5cGUoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkRpc3BsYXlTdXJm
YWNlVHlwZTo6V2luZG93OyB9CiAgICAgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZSBkZXZpY2VU
eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6V2lu
ZG93OyB9CiAgICAgdm9pZCBjb21taXRDb25maWd1cmF0aW9uKGZsb2F0KSBmaW5hbCB7IH0KLSNp
ZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiAiV2luZG93RGlzcGxheUNhcHR1cmVyTWFjIjsgfQotI2VuZGlm
CisgICAgY29uc3QgY2hhciogbG9nQ2xhc3NOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkNH
V2luZG93Q2FwdHVyZVNvdXJjZSI7IH0KIAogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiB3aW5k
b3dJbWFnZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL0NHV2luZG93Q2FwdHVyZVNvdXJjZS5tbQpzaW1pbGFyaXR5
IGluZGV4IDgxJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVyTWFjLm1tCnJlbmFtZSB0byBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQ0dXaW5kb3dDYXB0dXJlU291cmNlLm1tCmluZGV4
IGYwMmNlOGZkZjBmMC4uMTQyNzU2Zjg0NmZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVyTWFjLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9DR1dpbmRvd0NhcHR1cmVT
b3VyY2UubW0KQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9y
dCAiV2luZG93RGlzcGxheUNhcHR1cmVyTWFjLmgiCisjaW1wb3J0ICJDR1dpbmRvd0NhcHR1cmVT
b3VyY2UuaCIKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFBMQVRGT1JNKE1BQykKIApA
QCAtMTAyLDcgKzEwMiw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiB3aW5k
b3dEZXNjcmlwdGlvbihDR1dpbmRvd0lEIGlkKQogICAgIHJldHVybiBjaGVja2VkX2NmX2Nhc3Q8
Q0ZEaWN0aW9uYXJ5UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KHdpbmRvd3MuZ2V0KCksIDAp
KTsKIH0KIAotRXhwZWN0ZWQ8VW5pcXVlUmVmPERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OkNh
cHR1cmVyPiwgU3RyaW5nPiBXaW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWM6OmNyZWF0ZShjb25zdCBT
dHJpbmcmIGRldmljZUlEKQorRXhwZWN0ZWQ8VW5pcXVlUmVmPERpc3BsYXlDYXB0dXJlU291cmNl
TWFjOjpDYXB0dXJlcj4sIFN0cmluZz4gQ0dXaW5kb3dDYXB0dXJlU291cmNlOjpjcmVhdGUoY29u
c3QgU3RyaW5nJiBkZXZpY2VJRCkKIHsKICAgICBhdXRvIGRpc3BsYXlJRCA9IHBhcnNlSW50ZWdl
cjx1aW50MzJfdD4oZGV2aWNlSUQpOwogICAgIGlmICghZGlzcGxheUlEKQpAQCAtMTEyLDMzICsx
MTIsMzMgQEAgRXhwZWN0ZWQ8VW5pcXVlUmVmPERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OkNh
cHR1cmVyPiwgU3RyaW5nPiBXaW5kb3dEaXNwbGF5Q2EKICAgICBpZiAoIXdpbmRvd0luZm8pCiAg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiSW52YWxpZCB3aW5kb3cgSUQiX3MpOwogCi0g
ICAgcmV0dXJuIFVuaXF1ZVJlZjxEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpDYXB0dXJlcj4o
bWFrZVVuaXF1ZVJlZjxXaW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWM+KCpkaXNwbGF5SUQpKTsKKyAg
ICByZXR1cm4gVW5pcXVlUmVmPERpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpDYXB0dXJlcj4obWFr
ZVVuaXF1ZVJlZjxDR1dpbmRvd0NhcHR1cmVTb3VyY2U+KCpkaXNwbGF5SUQpKTsKIH0KIAotV2lu
ZG93RGlzcGxheUNhcHR1cmVyTWFjOjpXaW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWModWludDMyX3Qg
d2luZG93SUQpCitDR1dpbmRvd0NhcHR1cmVTb3VyY2U6OkNHV2luZG93Q2FwdHVyZVNvdXJjZSh1
aW50MzJfdCB3aW5kb3dJRCkKICAgICA6IG1fd2luZG93SUQod2luZG93SUQpCiB7CiB9CiAKLVJl
dGFpblB0cjxDR0ltYWdlUmVmPiBXaW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWM6OndpbmRvd0ltYWdl
KCkKK1JldGFpblB0cjxDR0ltYWdlUmVmPiBDR1dpbmRvd0NhcHR1cmVTb3VyY2U6OndpbmRvd0lt
YWdlKCkKIHsKICAgICBhdXRvIGltYWdlID0gYWRvcHRDRihDR1dpbmRvd0xpc3RDcmVhdGVJbWFn
ZShDR1JlY3ROdWxsLCBrQ0dXaW5kb3dMaXN0T3B0aW9uSW5jbHVkaW5nV2luZG93LCBtX3dpbmRv
d0lELCBrQ0dXaW5kb3dJbWFnZUJvdW5kc0lnbm9yZUZyYW1pbmcgfCBrQ0dXaW5kb3dJbWFnZVNo
b3VsZEJlT3BhcXVlKSk7CiAgICAgaWYgKCFpbWFnZSkKLSAgICAgICAgUkVMRUFTRV9MT0coV2Vi
UlRDLCAiV2luZG93RGlzcGxheUNhcHR1cmVyTWFjOjp3aW5kb3dJbWFnZTogZmFpbGVkIHRvIGNh
cHR1cmUgd2luZG93IGltYWdlIik7CisgICAgICAgIFJFTEVBU0VfTE9HKFdlYlJUQywgIkNHV2lu
ZG93Q2FwdHVyZVNvdXJjZTo6d2luZG93SW1hZ2U6IGZhaWxlZCB0byBjYXB0dXJlIHdpbmRvdyBp
bWFnZSIpOwogCiAgICAgcmV0dXJuIGltYWdlOwogfQogCi1EaXNwbGF5Q2FwdHVyZVNvdXJjZUNv
Y29hOjpEaXNwbGF5RnJhbWVUeXBlIFdpbmRvd0Rpc3BsYXlDYXB0dXJlck1hYzo6Z2VuZXJhdGVG
cmFtZSgpCitEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6RGlzcGxheUZyYW1lVHlwZSBDR1dpbmRv
d0NhcHR1cmVTb3VyY2U6OmdlbmVyYXRlRnJhbWUoKQogewotICAgIHJldHVybiBEaXNwbGF5Q2Fw
dHVyZVNvdXJjZUNvY29hOjpEaXNwbGF5RnJhbWVUeXBlIHsgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IHsgd2luZG93SW1hZ2UoKSB9IH07CisgICAgcmV0dXJuIERpc3BsYXlDYXB0dXJlU291cmNlTWFj
OjpEaXNwbGF5RnJhbWVUeXBlIHsgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHsgd2luZG93SW1hZ2Uo
KSB9IH07CiB9CiAKLXN0ZDo6b3B0aW9uYWw8Q2FwdHVyZURldmljZT4gV2luZG93RGlzcGxheUNh
cHR1cmVyTWFjOjp3aW5kb3dDYXB0dXJlRGV2aWNlV2l0aFBlcnNpc3RlbnRJRChjb25zdCBTdHJp
bmcmIGlkU3RyaW5nKQorc3RkOjpvcHRpb25hbDxDYXB0dXJlRGV2aWNlPiBDR1dpbmRvd0NhcHR1
cmVTb3VyY2U6OndpbmRvd0NhcHR1cmVEZXZpY2VXaXRoUGVyc2lzdGVudElEKGNvbnN0IFN0cmlu
ZyYgaWRTdHJpbmcpCiB7CiAgICAgYXV0byB3aW5kb3dJRCA9IHBhcnNlSW50ZWdlcjx1aW50MzJf
dD4oaWRTdHJpbmcpOwogICAgIGlmICghd2luZG93SUQpIHsKLSAgICAgICAgUkVMRUFTRV9MT0co
V2ViUlRDLCAiV2luZG93RGlzcGxheUNhcHR1cmVyTWFjOjp3aW5kb3dDYXB0dXJlRGV2aWNlV2l0
aFBlcnNpc3RlbnRJRDogd2luZG93IElEIGRvZXMgbm90IGNvbnZlcnQgdG8gMzItYml0IGludGVn
ZXIiKTsKKyAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQ0dXaW5kb3dDYXB0dXJlU291cmNl
Ojp3aW5kb3dDYXB0dXJlRGV2aWNlV2l0aFBlcnNpc3RlbnRJRDogd2luZG93IElEIGRvZXMgbm90
IGNvbnZlcnQgdG8gMzItYml0IGludGVnZXIiKTsKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKICAgICB9CiAKQEAgLTE1MSw3ICsxNTEsNyBAQCBzdGQ6Om9wdGlvbmFsPENhcHR1cmVEZXZp
Y2U+IFdpbmRvd0Rpc3BsYXlDYXB0dXJlck1hYzo6d2luZG93Q2FwdHVyZURldmljZVdpdGhQZQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIH0pKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKFdl
YlJUQywgIldpbmRvd0Rpc3BsYXlDYXB0dXJlck1hYzo6d2luZG93Q2FwdHVyZURldmljZVdpdGhQ
ZXJzaXN0ZW50SUQ6IHdpbmRvdyBJRCBpcyBub3QgdmFsaWQiKTsKKyAgICAgICAgUkVMRUFTRV9M
T0coV2ViUlRDLCAiQ0dXaW5kb3dDYXB0dXJlU291cmNlOjp3aW5kb3dDYXB0dXJlRGV2aWNlV2l0
aFBlcnNpc3RlbnRJRDogd2luZG93IElEIGlzIG5vdCB2YWxpZCIpOwogICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogICAgIH0KIApAQCAtMTYxLDcgKzE2MSw3IEBAIHN0ZDo6b3B0aW9uYWw8
Q2FwdHVyZURldmljZT4gV2luZG93RGlzcGxheUNhcHR1cmVyTWFjOjp3aW5kb3dDYXB0dXJlRGV2
aWNlV2l0aFBlCiAgICAgcmV0dXJuIGRldmljZTsKIH0KIAotdm9pZCBXaW5kb3dEaXNwbGF5Q2Fw
dHVyZXJNYWM6OndpbmRvd0NhcHR1cmVEZXZpY2VzKFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYgd2lu
ZG93cykKK3ZvaWQgQ0dXaW5kb3dDYXB0dXJlU291cmNlOjp3aW5kb3dDYXB0dXJlRGV2aWNlcyhW
ZWN0b3I8Q2FwdHVyZURldmljZT4mIHdpbmRvd3MpCiB7CiAgICAgYW55T2ZDR1dpbmRvdyhbJl0g
KENGRGljdGlvbmFyeVJlZiwgaW50IGlkLCBjb25zdCBTdHJpbmcmIHRpdGxlKSBtdXRhYmxlIHsK
ICAgICAgICAgQ2FwdHVyZURldmljZSBkZXZpY2UoU3RyaW5nOjpudW1iZXIoaWQpLCBDYXB0dXJl
RGV2aWNlOjpEZXZpY2VUeXBlOjpXaW5kb3csIHRpdGxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2Nv
YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNh
cHR1cmVNYW5hZ2VyQ29jb2EuY3BwCmluZGV4IDJmZWY4YmIxNzM3Yy4uMGI2OTRjOWY4OTA1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxh
eUNhcHR1cmVNYW5hZ2VyQ29jb2EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYS5jcHAKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsOCArMzMsOCBA
QAogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiAjaWYgUExBVEZPUk0oTUFDKQot
I2luY2x1ZGUgIlNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYy5oIgotI2luY2x1ZGUgIldpbmRvd0Rp
c3BsYXlDYXB0dXJlck1hYy5oIgorI2luY2x1ZGUgIkNHRGlzcGxheVN0cmVhbVNjcmVlbkNhcHR1
cmVTb3VyY2UuaCIKKyNpbmNsdWRlICJDR1dpbmRvd0NhcHR1cmVTb3VyY2UuaCIKICNpbmNsdWRl
IDxDb3JlR3JhcGhpY3MvQ0dEaXJlY3REaXNwbGF5Lmg+CiAjZW5kaWYKIApAQCAtNjEsMjEgKzYx
LDIxIEBAIGNvbnN0IFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYgRGlzcGxheUNhcHR1cmVNYW5hZ2Vy
Q29jb2E6OmNhcHR1cmVEZXZpY2VzKCkKIHZvaWQgRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2E6
OnVwZGF0ZURpc3BsYXlDYXB0dXJlRGV2aWNlcygpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQotICAg
IFNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYzo6c2NyZWVuQ2FwdHVyZURldmljZXMobV9kZXZpY2Vz
KTsKKyAgICBDR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNlOjpzY3JlZW5DYXB0dXJl
RGV2aWNlcyhtX2RldmljZXMpOwogI2VuZGlmCiB9CiAKIHZvaWQgRGlzcGxheUNhcHR1cmVNYW5h
Z2VyQ29jb2E6OnVwZGF0ZVdpbmRvd0NhcHR1cmVEZXZpY2VzKCkKIHsKICNpZiBQTEFURk9STShN
QUMpCi0gICAgV2luZG93RGlzcGxheUNhcHR1cmVyTWFjOjp3aW5kb3dDYXB0dXJlRGV2aWNlcyht
X2RldmljZXMpOworICAgIENHV2luZG93Q2FwdHVyZVNvdXJjZTo6d2luZG93Q2FwdHVyZURldmlj
ZXMobV9kZXZpY2VzKTsKICNlbmRpZgogfQogCiBzdGQ6Om9wdGlvbmFsPENhcHR1cmVEZXZpY2U+
IERpc3BsYXlDYXB0dXJlTWFuYWdlckNvY29hOjpzY3JlZW5DYXB0dXJlRGV2aWNlV2l0aFBlcnNp
c3RlbnRJRChjb25zdCBTdHJpbmcmIGRldmljZUlEKQogewogI2lmIFBMQVRGT1JNKE1BQykKLSAg
ICByZXR1cm4gU2NyZWVuRGlzcGxheUNhcHR1cmVyTWFjOjpzY3JlZW5DYXB0dXJlRGV2aWNlV2l0
aFBlcnNpc3RlbnRJRChkZXZpY2VJRCk7CisgICAgcmV0dXJuIENHRGlzcGxheVN0cmVhbVNjcmVl
bkNhcHR1cmVTb3VyY2U6OnNjcmVlbkNhcHR1cmVEZXZpY2VXaXRoUGVyc2lzdGVudElEKGRldmlj
ZUlEKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGRldmljZUlEKTsKICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwpAQCAtODUsNyArODUsNyBAQCBzdGQ6Om9wdGlvbmFsPENhcHR1cmVEZXZpY2U+
IERpc3BsYXlDYXB0dXJlTWFuYWdlckNvY29hOjpzY3JlZW5DYXB0dXJlRGV2aWNlV2l0aAogc3Rk
OjpvcHRpb25hbDxDYXB0dXJlRGV2aWNlPiBEaXNwbGF5Q2FwdHVyZU1hbmFnZXJDb2NvYTo6d2lu
ZG93Q2FwdHVyZURldmljZVdpdGhQZXJzaXN0ZW50SUQoY29uc3QgU3RyaW5nJiBkZXZpY2VJRCkK
IHsKICNpZiBQTEFURk9STShNQUMpCi0gICAgcmV0dXJuIFdpbmRvd0Rpc3BsYXlDYXB0dXJlck1h
Yzo6d2luZG93Q2FwdHVyZURldmljZVdpdGhQZXJzaXN0ZW50SUQoZGV2aWNlSUQpOworICAgIHJl
dHVybiBDR1dpbmRvd0NhcHR1cmVTb3VyY2U6OndpbmRvd0NhcHR1cmVEZXZpY2VXaXRoUGVyc2lz
dGVudElEKGRldmljZUlEKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGRldmljZUlEKTsKICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlTWFj
LmNwcApzaW1pbGFyaXR5IGluZGV4IDc2JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5jcHAKcmVuYW1l
IHRvIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVy
ZVNvdXJjZU1hYy5jcHAKaW5kZXggNTgyZjRiMjZjZjExLi5lYTM4YzhhOTQ3NGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVy
ZVNvdXJjZUNvY29hLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQsMTAgKzI0LDEyIEBACiAg
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRpc3BsYXlDYXB0dXJlU291cmNl
Q29jb2EuaCIKKyNpbmNsdWRlICJEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5oIgogCi0jaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBQTEFURk9STShN
QUMpCiAKKyNpbmNsdWRlICJDR0Rpc3BsYXlTdHJlYW1TY3JlZW5DYXB0dXJlU291cmNlLmgiCisj
aW5jbHVkZSAiQ0dXaW5kb3dDYXB0dXJlU291cmNlLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgog
I2luY2x1ZGUgIk1lZGlhU2FtcGxlQVZGT2JqQy5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyQ29u
Zm9ybWVyQ1YuaCIKQEAgLTQwLDcgKzQyLDYgQEAKICNpbmNsdWRlIDxDb3JlTWVkaWEvQ01TeW5j
Lmg+CiAjaW5jbHVkZSA8bWFjaC9tYWNoX3RpbWUuaD4KICNpbmNsdWRlIDxwYWwvYXZmb3VuZGF0
aW9uL01lZGlhVGltZUFWRm91bmRhdGlvbi5oPgotI2luY2x1ZGUgPHBhbC9jZi9Db3JlTWVkaWFT
b2Z0TGluay5oPgogI2luY2x1ZGUgPHBhbC9zcGkvY2YvQ29yZUF1ZGlvU1BJLmg+CiAjaW5jbHVk
ZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbmNsdWRlIDxwYWwvc3BpL2NvY29h
L0lPU3VyZmFjZVNQSS5oPgpAQCAtNDgsMjMgKzQ5LDE4IEBACiAjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAotI2lmIFBMQVRGT1JN
KE1BQykKLSNpbmNsdWRlICJTY3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWMuaCIKLSNpbmNsdWRlICJX
aW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWMuaCIKLSNlbmRpZgotCiAjaW5jbHVkZSAiQ29yZVZpZGVv
U29mdExpbmsuaCIKKyNpbmNsdWRlIDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1DYXB0dXJlU291cmNlT3JFcnJvciBEaXNwbGF5Q2FwdHVyZVNv
dXJjZUNvY29hOjpjcmVhdGUoY29uc3QgQ2FwdHVyZURldmljZSYgZGV2aWNlLCBjb25zdCBNZWRp
YUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cykKK0NhcHR1cmVTb3VyY2VPckVycm9yIERpc3BsYXlD
YXB0dXJlU291cmNlTWFjOjpjcmVhdGUoY29uc3QgQ2FwdHVyZURldmljZSYgZGV2aWNlLCBjb25z
dCBNZWRpYUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cykKIHsKLSNpZiBQTEFURk9STShNQUMpCiAg
ICAgc3dpdGNoIChkZXZpY2UudHlwZSgpKSB7CiAgICAgY2FzZSBDYXB0dXJlRGV2aWNlOjpEZXZp
Y2VUeXBlOjpTY3JlZW46Ci0gICAgICAgIHJldHVybiBjcmVhdGUoU2NyZWVuRGlzcGxheUNhcHR1
cmVyTWFjOjpjcmVhdGUoZGV2aWNlLnBlcnNpc3RlbnRJZCgpKSwgZGV2aWNlLCBjb25zdHJhaW50
cyk7CisgICAgICAgIHJldHVybiBjcmVhdGUoQ0dEaXNwbGF5U3RyZWFtU2NyZWVuQ2FwdHVyZVNv
dXJjZTo6Y3JlYXRlKGRldmljZS5wZXJzaXN0ZW50SWQoKSksIGRldmljZSwgY29uc3RyYWludHMp
OwogICAgIGNhc2UgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6V2luZG93OgotICAgICAgICBy
ZXR1cm4gY3JlYXRlKFdpbmRvd0Rpc3BsYXlDYXB0dXJlck1hYzo6Y3JlYXRlKGRldmljZS5wZXJz
aXN0ZW50SWQoKSksIGRldmljZSwgY29uc3RyYWludHMpOworICAgICAgICByZXR1cm4gY3JlYXRl
KENHV2luZG93Q2FwdHVyZVNvdXJjZTo6Y3JlYXRlKGRldmljZS5wZXJzaXN0ZW50SWQoKSksIGRl
dmljZSwgY29uc3RyYWludHMpOwogICAgIGNhc2UgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6
TWljcm9waG9uZToKICAgICBjYXNlIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OlNwZWFrZXI6
CiAgICAgY2FzZSBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpDYW1lcmE6CkBAIC03MiwxOSAr
NjgsMTYgQEAgQ2FwdHVyZVNvdXJjZU9yRXJyb3IgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6
Y3JlYXRlKGNvbnN0IENhcHR1cmVEZXZpY2UmIGRldmkKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGRl
dmljZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGNvbnN0cmFpbnRzKTsKLSNlbmRpZgorCiAgICAgcmV0
dXJuIHsgfTsKIH0KIAotQ2FwdHVyZVNvdXJjZU9yRXJyb3IgRGlzcGxheUNhcHR1cmVTb3VyY2VD
b2NvYTo6Y3JlYXRlKEV4cGVjdGVkPFVuaXF1ZVJlZjxDYXB0dXJlcj4sIFN0cmluZz4mJiBjYXB0
dXJlciwgY29uc3QgQ2FwdHVyZURldmljZSYgZGV2aWNlLCBjb25zdCBNZWRpYUNvbnN0cmFpbnRz
KiBjb25zdHJhaW50cykKK0NhcHR1cmVTb3VyY2VPckVycm9yIERpc3BsYXlDYXB0dXJlU291cmNl
TWFjOjpjcmVhdGUoRXhwZWN0ZWQ8VW5pcXVlUmVmPENhcHR1cmVyPiwgU3RyaW5nPiYmIGNhcHR1
cmVyLCBjb25zdCBDYXB0dXJlRGV2aWNlJiBkZXZpY2UsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMq
IGNvbnN0cmFpbnRzKQogewogICAgIGlmICghY2FwdHVyZXIuaGFzX3ZhbHVlKCkpCiAgICAgICAg
IHJldHVybiBDYXB0dXJlU291cmNlT3JFcnJvciB7IFdURk1vdmUoY2FwdHVyZXIuZXJyb3IoKSkg
fTsKIAotICAgIGF1dG8gc291cmNlID0gYWRvcHRSZWYoKm5ldyBEaXNwbGF5Q2FwdHVyZVNvdXJj
ZUNvY29hKFdURk1vdmUoY2FwdHVyZXIudmFsdWUoKSksIFN0cmluZyB7IGRldmljZS5sYWJlbCgp
IH0pKTsKKyAgICBhdXRvIHNvdXJjZSA9IGFkb3B0UmVmKCpuZXcgRGlzcGxheUNhcHR1cmVTb3Vy
Y2VNYWMoV1RGTW92ZShjYXB0dXJlci52YWx1ZSgpKSwgU3RyaW5nIHsgZGV2aWNlLmxhYmVsKCkg
fSkpOwogICAgIGlmIChjb25zdHJhaW50cykgewogICAgICAgICBhdXRvIHJlc3VsdCA9IHNvdXJj
ZS0+YXBwbHlDb25zdHJhaW50cygqY29uc3RyYWludHMpOwogICAgICAgICBpZiAocmVzdWx0KQpA
QCAtOTQsMjEgKzg3LDE4IEBAIENhcHR1cmVTb3VyY2VPckVycm9yIERpc3BsYXlDYXB0dXJlU291
cmNlQ29jb2E6OmNyZWF0ZShFeHBlY3RlZDxVbmlxdWVSZWY8Q2FwdHVyCiAgICAgcmV0dXJuIENh
cHR1cmVTb3VyY2VPckVycm9yKFdURk1vdmUoc291cmNlKSk7CiB9CiAKLURpc3BsYXlDYXB0dXJl
U291cmNlQ29jb2E6OkRpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EoVW5pcXVlUmVmPENhcHR1cmVy
PiYmIGNhcHR1cmVyLCBTdHJpbmcmJiBuYW1lKQorRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OkRp
c3BsYXlDYXB0dXJlU291cmNlTWFjKFVuaXF1ZVJlZjxDYXB0dXJlcj4mJiBjYXB0dXJlciwgU3Ry
aW5nJiYgbmFtZSkKICAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoVHlwZTo6VmlkZW8sIFdURk1v
dmUobmFtZSkpCiAgICAgLCBtX2NhcHR1cmVyKFdURk1vdmUoY2FwdHVyZXIpKQotICAgICwgbV90
aW1lcihSdW5Mb29wOjpjdXJyZW50KCksIHRoaXMsICZEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29h
OjplbWl0RnJhbWUpCisgICAgLCBtX3RpbWVyKFJ1bkxvb3A6OmN1cnJlbnQoKSwgdGhpcywgJkRp
c3BsYXlDYXB0dXJlU291cmNlTWFjOjplbWl0RnJhbWUpCiB7CiB9CiAKLURpc3BsYXlDYXB0dXJl
U291cmNlQ29jb2E6On5EaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hKCkKK0Rpc3BsYXlDYXB0dXJl
U291cmNlTWFjOjp+RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMoKQogewotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2luZ2xldG9uKCkuZGlz
cGxheUNhcHR1cmVGYWN0b3J5KCkudW5zZXRBY3RpdmVTb3VyY2UoKnRoaXMpOwotI2VuZGlmCiB9
CiAKLWNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIERpc3BsYXlDYXB0dXJl
U291cmNlQ29jb2E6OmNhcGFiaWxpdGllcygpCitjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2Fw
YWJpbGl0aWVzJiBEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Y2FwYWJpbGl0aWVzKCkKIHsKICAg
ICBpZiAoIW1fY2FwYWJpbGl0aWVzKSB7CiAgICAgICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBh
YmlsaXRpZXMgY2FwYWJpbGl0aWVzKHNldHRpbmdzKCkuc3VwcG9ydGVkQ29uc3RyYWludHMoKSk7
CkBAIC0xMjMsNyArMTEzLDcgQEAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGll
cyYgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6Y2FwYWJpbGl0aWVzKCkKICAgICByZXR1cm4g
bV9jYXBhYmlsaXRpZXMudmFsdWUoKTsKIH0KIAotY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNl
dHRpbmdzJiBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpzZXR0aW5ncygpCitjb25zdCBSZWFs
dGltZU1lZGlhU291cmNlU2V0dGluZ3MmIERpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpzZXR0aW5n
cygpCiB7CiAgICAgaWYgKCFtX2N1cnJlbnRTZXR0aW5ncykgewogICAgICAgICBSZWFsdGltZU1l
ZGlhU291cmNlU2V0dGluZ3Mgc2V0dGluZ3M7CkBAIC0xNTAsNyArMTQwLDcgQEAgY29uc3QgUmVh
bHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpzZXR0
aW5ncygpCiAgICAgcmV0dXJuIG1fY3VycmVudFNldHRpbmdzLnZhbHVlKCk7CiB9CiAKLXZvaWQg
RGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6c2V0dGluZ3NEaWRDaGFuZ2UoT3B0aW9uU2V0PFJl
YWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZz4gc2V0dGluZ3MpCit2b2lkIERpc3BsYXlD
YXB0dXJlU291cmNlTWFjOjpzZXR0aW5nc0RpZENoYW5nZShPcHRpb25TZXQ8UmVhbHRpbWVNZWRp
YVNvdXJjZVNldHRpbmdzOjpGbGFnPiBzZXR0aW5ncykKIHsKICAgICBpZiAoc2V0dGluZ3MuY29u
dGFpbnMoUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnOjpGcmFtZVJhdGUpICYmIG1f
dGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV90aW1lci5zdGFydFJlcGVhdGluZygxX3MgLyBm
cmFtZVJhdGUoKSk7CkBAIC0xNjEsMTIgKzE1MSw4IEBAIHZvaWQgRGlzcGxheUNhcHR1cmVTb3Vy
Y2VDb2NvYTo6c2V0dGluZ3NEaWRDaGFuZ2UoT3B0aW9uU2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VT
CiAgICAgbV9jdXJyZW50U2V0dGluZ3MgPSB7IH07CiB9CiAKLXZvaWQgRGlzcGxheUNhcHR1cmVT
b3VyY2VDb2NvYTo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3ZvaWQgRGlzcGxheUNhcHR1cmVTb3Vy
Y2VNYWM6OnN0YXJ0UHJvZHVjaW5nRGF0YSgpCiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LSAgICBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpzaW5nbGV0b24oKS5kaXNwbGF5Q2FwdHVy
ZUZhY3RvcnkoKS5zZXRBY3RpdmVTb3VyY2UoKnRoaXMpOwotI2VuZGlmCi0KICAgICBtX3N0YXJ0
VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogICAgIG1fdGltZXIuc3RhcnRSZXBlYXRpbmco
MV9zIC8gZnJhbWVSYXRlKCkpOwogCkBAIC0xNzQsNyArMTYwLDcgQEAgdm9pZCBEaXNwbGF5Q2Fw
dHVyZVNvdXJjZUNvY29hOjpzdGFydFByb2R1Y2luZ0RhdGEoKQogICAgICAgICBjYXB0dXJlRmFp
bGVkKCk7CiB9CiAKLXZvaWQgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6c3RvcFByb2R1Y2lu
Z0RhdGEoKQordm9pZCBEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6c3RvcFByb2R1Y2luZ0RhdGEo
KQogewogICAgIG1fdGltZXIuc3RvcCgpOwogICAgIG1fZWxhcHNlZFRpbWUgKz0gTW9ub3Rvbmlj
VGltZTo6bm93KCkgLSBtX3N0YXJ0VGltZTsKQEAgLTE4Myw3ICsxNjksNyBAQCB2b2lkIERpc3Bs
YXlDYXB0dXJlU291cmNlQ29jb2E6OnN0b3BQcm9kdWNpbmdEYXRhKCkKICAgICBtX2NhcHR1cmVy
LT5zdG9wKCk7CiB9CiAKLVNlY29uZHMgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6ZWxhcHNl
ZFRpbWUoKQorU2Vjb25kcyBEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6ZWxhcHNlZFRpbWUoKQog
ewogICAgIGlmIChzdGQ6OmlzbmFuKG1fc3RhcnRUaW1lKSkKICAgICAgICAgcmV0dXJuIG1fZWxh
cHNlZFRpbWU7CkBAIC0xOTIsNyArMTc4LDcgQEAgU2Vjb25kcyBEaXNwbGF5Q2FwdHVyZVNvdXJj
ZUNvY29hOjplbGFwc2VkVGltZSgpCiB9CiAKIC8vIFdlIGtlZXAgdGhlIGFzcGVjdCByYXRpbyBv
ZiB0aGUgaW50cmluc2ljIHNpemUgZm9yIHRoZSBmcmFtZSBzaXplIGFzIGdldERpc3BsYXlNZWRp
YSBhbGxvd3MgbWF4IGNvbnN0cmFpbnRzIG9ubHkuCi12b2lkIERpc3BsYXlDYXB0dXJlU291cmNl
Q29jb2E6OnVwZGF0ZUZyYW1lU2l6ZSgpCit2b2lkIERpc3BsYXlDYXB0dXJlU291cmNlTWFjOjp1
cGRhdGVGcmFtZVNpemUoKQogewogICAgIGF1dG8gaW50cmluc2ljU2l6ZSA9IHRoaXMtPmludHJp
bnNpY1NpemUoKTsKIApAQCAtMjE5LDkgKzIwNSw4IEBAIHZvaWQgRGlzcGxheUNhcHR1cmVTb3Vy
Y2VDb2NvYTo6dXBkYXRlRnJhbWVTaXplKCkKICAgICBzZXRTaXplKGludHJpbnNpY1NpemUpOwog
fQogCi12b2lkIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OmVtaXRGcmFtZSgpCit2b2lkIERp
c3BsYXlDYXB0dXJlU291cmNlTWFjOjplbWl0RnJhbWUoKQogewotI2lmIFBMQVRGT1JNKENPQ09B
KSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWV9TSU1VTEFUT1IpCiAgICAgaWYgKG11dGVkKCkpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMjQ2LDcgKzIzMSw2IEBAIHZvaWQgRGlzcGxheUNhcHR1cmVT
b3VyY2VDb2NvYTo6ZW1pdEZyYW1lKCkKICAgICAgICAgfQogICAgICk7CiAKLSAgICBBU1NFUlQo
IWltYWdlU2l6ZS5pc0VtcHR5KCkpOwogICAgIGlmIChpbWFnZVNpemUuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTI3NiwyMiArMjYwLDE5IEBAIHZvaWQgRGlzcGxheUNhcHR1cmVT
b3VyY2VDb2NvYTo6ZW1pdEZyYW1lKCkKICAgICB9CiAKICAgICB2aWRlb1NhbXBsZUF2YWlsYWJs
ZSgqc2FtcGxlLmdldCgpKTsKLSNlbmRpZgogfQogCi0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVE
Ci12b2lkIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OkNhcHR1cmVyOjpzZXRMb2dnZXIoY29u
c3QgTG9nZ2VyJiBuZXdMb2dnZXIsIGNvbnN0IHZvaWQqIG5ld0xvZ0lkZW50aWZpZXIpCit2b2lk
IERpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpDYXB0dXJlcjo6c2V0TG9nZ2VyKGNvbnN0IExvZ2dl
ciYgbmV3TG9nZ2VyLCBjb25zdCB2b2lkKiBuZXdMb2dJZGVudGlmaWVyKQogewogICAgIG1fbG9n
Z2VyID0gJm5ld0xvZ2dlcjsKICAgICBtX2xvZ0lkZW50aWZpZXIgPSBuZXdMb2dJZGVudGlmaWVy
OwogfQogCi1XVEZMb2dDaGFubmVsJiBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpDYXB0dXJl
cjo6bG9nQ2hhbm5lbCgpIGNvbnN0CitXVEZMb2dDaGFubmVsJiBEaXNwbGF5Q2FwdHVyZVNvdXJj
ZU1hYzo6Q2FwdHVyZXI6OmxvZ0NoYW5uZWwoKSBjb25zdAogewogICAgIHJldHVybiBMb2dXZWJS
VEM7CiB9Ci0jZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5B
QkxFKE1FRElBX1NUUkVBTSkKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBQTEFU
Rk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgKc2ltaWxhcml0eSBp
bmRleCA4OCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuaApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgKaW5kZXgg
N2RlZjZjZjE3YmM4Li5lNDZhYjhkOTM4YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291
cmNlTWFjLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNSw3ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxF
KE1FRElBX1NUUkVBTSkKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBQTEFURk9STShNQUMp
CiAKICNpbmNsdWRlICJDYXB0dXJlRGV2aWNlLmgiCiAjaW5jbHVkZSAiSW1hZ2VUcmFuc2ZlclNl
c3Npb25WVC5oIgpAQCAtNTAsMTQgKzUwLDExIEBAIGNsYXNzIENhcHR1cmVEZXZpY2VJbmZvOwog
Y2xhc3MgSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDsKIGNsYXNzIFBpeGVsQnVmZmVyQ29uZm9ybWVy
Q1Y7CiAKLWNsYXNzIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EgZmluYWwgOiBwdWJsaWMgUmVh
bHRpbWVNZWRpYVNvdXJjZSB7CitjbGFzcyBEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYyBmaW5hbCA6
IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlIHsKIHB1YmxpYzoKICAgICB1c2luZyBEaXNwbGF5
RnJhbWVUeXBlID0gV1RGOjpWYXJpYW50PFJlZlB0cjxOYXRpdmVJbWFnZT4sIFJldGFpblB0cjxJ
T1N1cmZhY2VSZWY+PjsKLSAgICBjbGFzcyBDYXB0dXJlcgotI2lmICFSRUxFQVNFX0xPR19ESVNB
QkxFRAotICAgICAgICA6IHB1YmxpYyBMb2dnZXJIZWxwZXIKLSNlbmRpZgotICAgIHsKKworICAg
IGNsYXNzIENhcHR1cmVyIDogcHVibGljIExvZ2dlckhlbHBlciB7CiAgICAgICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+Q2FwdHVyZXIo
KSA9IGRlZmF1bHQ7CkBAIC02OSwxOSArNjYsMTUgQEAgcHVibGljOgogICAgICAgICB2aXJ0dWFs
IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RGlzcGxheVN1cmZhY2VUeXBlIHN1cmZhY2VU
eXBlKCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29uZmlndXJhdGlv
bihmbG9hdCBmcmFtZVJhdGUpID0gMDsKIAotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogICAg
ICAgICB2aXJ0dWFsIHZvaWQgc2V0TG9nZ2VyKGNvbnN0IExvZ2dlciYsIGNvbnN0IHZvaWQqKTsK
ICAgICAgICAgY29uc3QgTG9nZ2VyKiBsb2dnZXJQdHIoKSBjb25zdCB7IHJldHVybiBtX2xvZ2dl
ci5nZXQoKTsgfQogICAgICAgICBjb25zdCBMb2dnZXImIGxvZ2dlcigpIGNvbnN0IGZpbmFsIHsg
QVNTRVJUKG1fbG9nZ2VyKTsgcmV0dXJuICptX2xvZ2dlci5nZXQoKTsgfQogICAgICAgICBjb25z
dCB2b2lkKiBsb2dJZGVudGlmaWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9sb2dJZGVudGlm
aWVyOyB9CiAgICAgICAgIFdURkxvZ0NoYW5uZWwmIGxvZ0NoYW5uZWwoKSBjb25zdCBmaW5hbDsK
LSNlbmRpZgogCiAgICAgcHJpdmF0ZToKLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKICAgICAg
ICAgUmVmUHRyPGNvbnN0IExvZ2dlcj4gbV9sb2dnZXI7CiAgICAgICAgIGNvbnN0IHZvaWQqIG1f
bG9nSWRlbnRpZmllcjsKLSNlbmRpZgogICAgIH07CiAKICAgICBzdGF0aWMgQ2FwdHVyZVNvdXJj
ZU9yRXJyb3IgY3JlYXRlKGNvbnN0IENhcHR1cmVEZXZpY2UmLCBjb25zdCBNZWRpYUNvbnN0cmFp
bnRzKik7CkBAIC05MSw4ICs4NCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZUZyYW1lU2l6
ZSgpOwogCiBwcml2YXRlOgotICAgIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EoVW5pcXVlUmVm
PENhcHR1cmVyPiYmLCBTdHJpbmcmJiBuYW1lKTsKLSAgICB+RGlzcGxheUNhcHR1cmVTb3VyY2VD
b2NvYSgpOworICAgIERpc3BsYXlDYXB0dXJlU291cmNlTWFjKFVuaXF1ZVJlZjxDYXB0dXJlcj4m
JiwgU3RyaW5nJiYgbmFtZSk7CisgICAgfkRpc3BsYXlDYXB0dXJlU291cmNlTWFjKCk7CiAKICAg
ICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIGZpbmFsOwogICAgIHZvaWQgc3RvcFByb2R1Y2lu
Z0RhdGEoKSBmaW5hbDsKQEAgLTEwMyw5ICs5Niw3IEBAIHByaXZhdGU6CiAgICAgQ2FwdHVyZURl
dmljZTo6RGV2aWNlVHlwZSBkZXZpY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jYXB0dXJlci0+
ZGV2aWNlVHlwZSgpOyB9CiAgICAgdm9pZCBjb21taXRDb25maWd1cmF0aW9uKCkgZmluYWwgeyBy
ZXR1cm4gbV9jYXB0dXJlci0+Y29tbWl0Q29uZmlndXJhdGlvbihmcmFtZVJhdGUoKSk7IH0KIAot
I2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgIGNvbnN0IGNoYXIqIGxvZ0NsYXNzTmFtZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuICJEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hIjsgfQotI2Vu
ZGlmCisgICAgY29uc3QgY2hhciogbG9nQ2xhc3NOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
IkRpc3BsYXlDYXB0dXJlU291cmNlTWFjIjsgfQogCiAgICAgdm9pZCBlbWl0RnJhbWUoKTsKIApA
QCAtMTE4LDExICsxMDksMTEgQEAgcHJpdmF0ZToKICAgICBTZWNvbmRzIG1fZWxhcHNlZFRpbWUg
eyAwX3MgfTsKIAogICAgIFJldGFpblB0cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPiBtX2J1ZmZl
ckF0dHJpYnV0ZXM7Ci0gICAgUnVuTG9vcDo6VGltZXI8RGlzcGxheUNhcHR1cmVTb3VyY2VDb2Nv
YT4gbV90aW1lcjsKKyAgICBSdW5Mb29wOjpUaW1lcjxEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYz4g
bV90aW1lcjsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZVRyYW5zZmVyU2Vzc2lvblZUPiBt
X2ltYWdlVHJhbnNmZXJTZXNzaW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0j
ZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RS
RUFNKSAmJiBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVNZWRpYVNvdXJjZUNl
bnRlck1hYy5jcHAKaW5kZXggM2UzYWE0ZWQ4NmQ1Li5jZTQ5MDkxMDNlNmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5jcHAKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDIxIEFwcGxlLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDEwICszNiw5
IEBACiAjaW5jbHVkZSAiQVZWaWRlb0NhcHR1cmVTb3VyY2UuaCIKICNpbmNsdWRlICJDb3JlQXVk
aW9DYXB0dXJlU291cmNlLmgiCiAjaW5jbHVkZSAiRGlzcGxheUNhcHR1cmVNYW5hZ2VyQ29jb2Eu
aCIKKyNpbmNsdWRlICJEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbVByaXZhdGUuaCIKLSNpbmNsdWRlICJTY3JlZW5E
aXNwbGF5Q2FwdHVyZXJNYWMuaCIKLSNpbmNsdWRlICJXaW5kb3dEaXNwbGF5Q2FwdHVyZXJNYWMu
aCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC02NSw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICAgICAgVU5VU0VEX1BBUkFNKGNvbnN0cmFpbnRz
KTsKICNlbmRpZgogI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgcmV0dXJuIERpc3BsYXlDYXB0
dXJlU291cmNlQ29jb2E6OmNyZWF0ZShkZXZpY2UsIGNvbnN0cmFpbnRzKTsKKyAgICAgICAgcmV0
dXJuIERpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpjcmVhdGUoZGV2aWNlLCBjb25zdHJhaW50cyk7
CiAjZWxzZQogICAgICAgICByZXR1cm4geyB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVyTWFj
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3Bs
YXlDYXB0dXJlck1hYy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRjZTU0MWNj
Zjc4Li4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlck1hYy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDMy
MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2NyZWVuRGlzcGxheUNhcHR1cmVy
TWFjLmgiCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBQTEFURk9STShNQUMpCi0KLSNp
bXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW1wb3J0ICJJbWFnZUJ1ZmZlci5oIgotI2lt
cG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiTWVkaWFDb25zdHJhaW50cy5oIgotI2ltcG9ydCAi
TWVkaWFTYW1wbGVBVkZPYmpDLmgiCi0jaW1wb3J0ICJOb3RJbXBsZW1lbnRlZC5oIgotI2ltcG9y
dCAiUGxhdGZvcm1MYXllci5oIgotI2ltcG9ydCAiUGxhdGZvcm1TY3JlZW4uaCIKLSNpbXBvcnQg
IlJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncy5oIgotI2ltcG9ydCAiUmVhbHRpbWVWaWRlb1V0
aWxpdGllcy5oIgotI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5o
PgotCi0jaW1wb3J0ICJDb3JlVmlkZW9Tb2Z0TGluay5oIgotCi1leHRlcm4gIkMiIHsKLXNpemVf
dCBDR0Rpc3BsYXlNb2RlR2V0UGl4ZWxzV2lkZShDR0Rpc3BsYXlNb2RlUmVmKTsKLXNpemVfdCBD
R0Rpc3BsYXlNb2RlR2V0UGl4ZWxzSGlnaChDR0Rpc3BsYXlNb2RlUmVmKTsKLX0KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxDR0RpcmVjdERpc3BsYXlJRD4g
dXBkYXRlRGlzcGxheUlEKENHRGlyZWN0RGlzcGxheUlEIGRpc3BsYXlJRCkKLXsKLSAgICB1aW50
MzJfdCBkaXNwbGF5Q291bnQgPSAwOwotICAgIGF1dG8gZXJyID0gQ0dHZXRBY3RpdmVEaXNwbGF5
TGlzdCgwLCBudWxscHRyLCAmZGlzcGxheUNvdW50KTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAg
IFJFTEVBU0VfTE9HKFdlYlJUQywgIkNHR2V0QWN0aXZlRGlzcGxheUxpc3QoKSByZXR1cm5lZCBl
cnJvciAlZCB3aGVuIHRyeWluZyB0byBnZXQgZGlzcGxheSBjb3VudCIsIHN0YXRpY19jYXN0PGlu
dD4oZXJyKSk7Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgfQotCi0gICAgaWYg
KCFkaXNwbGF5Q291bnQpIHsKLSAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQ0dHZXRBY3Rp
dmVEaXNwbGF5TGlzdCgpIHJldHVybmVkIGEgZGlzcGxheSBjb3VudCBvZiAwIik7Ci0gICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgfQotCi0gICAgVmVjdG9yPENHRGlyZWN0RGlzcGxh
eUlEPiBhY3RpdmVEaXNwbGF5cyhkaXNwbGF5Q291bnQpOwotICAgIGVyciA9IENHR2V0QWN0aXZl
RGlzcGxheUxpc3QoZGlzcGxheUNvdW50LCBhY3RpdmVEaXNwbGF5cy5kYXRhKCksICZkaXNwbGF5
Q291bnQpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiQ0dH
ZXRBY3RpdmVEaXNwbGF5TGlzdCgpIHJldHVybmVkIGVycm9yICVkIHdoZW4gdHJ5aW5nIHRvIGdl
dCB0aGUgYWN0aXZlIGRpc3BsYXkgbGlzdCIsIHN0YXRpY19jYXN0PGludD4oZXJyKSk7Ci0gICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgfQotCi0gICAgYXV0byBkaXNwbGF5TWFzayA9
IENHRGlzcGxheUlEVG9PcGVuR0xEaXNwbGF5TWFzayhkaXNwbGF5SUQpOwotICAgIGZvciAoYXV0
byBkaXNwbGF5IDogYWN0aXZlRGlzcGxheXMpIHsKLSAgICAgICAgaWYgKGRpc3BsYXlNYXNrID09
IENHRGlzcGxheUlEVG9PcGVuR0xEaXNwbGF5TWFzayhkaXNwbGF5KSkKLSAgICAgICAgICAgIHJl
dHVybiBkaXNwbGF5OwotICAgIH0KLQotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19Ci0KLUV4
cGVjdGVkPFVuaXF1ZVJlZjxEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpDYXB0dXJlcj4sIFN0
cmluZz4gU2NyZWVuRGlzcGxheUNhcHR1cmVyTWFjOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBkZXZp
Y2VJRCkKLXsKLSAgICBhdXRvIGRpc3BsYXlJRCA9IHBhcnNlSW50ZWdlcjx1aW50MzJfdD4oZGV2
aWNlSUQpOwotICAgIGlmICghZGlzcGxheUlEKQotICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIkludmFsaWQgZGlzcGxheSBkZXZpY2UgSUQiX3MpOwotICAgIGF1dG8gYWN0dWFsRGlzcGxh
eUlEID0gdXBkYXRlRGlzcGxheUlEKCpkaXNwbGF5SUQpOwotICAgIGlmICghYWN0dWFsRGlzcGxh
eUlEKQotICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludmFsaWQgZGlzcGxheSBJRCJf
cyk7Ci0gICAgcmV0dXJuIFVuaXF1ZVJlZjxEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpDYXB0
dXJlcj4obWFrZVVuaXF1ZVJlZjxTY3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWM+KGFjdHVhbERpc3Bs
YXlJRC52YWx1ZSgpKSk7Ci19Ci0KLVNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYzo6U2NyZWVuRGlz
cGxheUNhcHR1cmVyTWFjKHVpbnQzMl90IGRpc3BsYXlJRCkKLSAgICA6IG1fZGlzcGxheUlEKGRp
c3BsYXlJRCkKLXsKLX0KLQotU2NyZWVuRGlzcGxheUNhcHR1cmVyTWFjOjp+U2NyZWVuRGlzcGxh
eUNhcHR1cmVyTWFjKCkKLXsKLSAgICBpZiAobV9vYnNlcnZpbmdEaXNwbGF5Q2hhbmdlcykKLSAg
ICAgICAgQ0dEaXNwbGF5UmVtb3ZlUmVjb25maWd1cmF0aW9uQ2FsbGJhY2soZGlzcGxheVJlY29u
ZmlndXJhdGlvbkNhbGxCYWNrLCB0aGlzKTsKLQotICAgIG1fY3VycmVudEZyYW1lID0gbnVsbHB0
cjsKLX0KLQotYm9vbCBTY3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWM6OmNyZWF0ZURpc3BsYXlTdHJl
YW0oZmxvYXQgZnJhbWVSYXRlKQotewotICAgIHN0YXRpYyBjb25zdCBpbnQgc2NyZWVuUXVldWVN
YXhpbXVtTGVuZ3RoID0gNjsKLQotICAgIEFMV0FZU19MT0dfSUYobG9nZ2VyUHRyKCksIExPR0lE
RU5USUZJRVIpOwotCi0gICAgYXV0byBhY3R1YWxEaXNwbGF5SUQgPSB1cGRhdGVEaXNwbGF5SUQo
bV9kaXNwbGF5SUQpOwotICAgIGlmICghYWN0dWFsRGlzcGxheUlEKSB7Ci0gICAgICAgIEVSUk9S
X0xPR19JRihsb2dnZXJQdHIoKSwgTE9HSURFTlRJRklFUiwgImludmFsaWQgZGlzcGxheSBJRDog
IiwgbV9kaXNwbGF5SUQpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYg
KG1fZGlzcGxheUlEICE9IGFjdHVhbERpc3BsYXlJRC52YWx1ZSgpKSB7Ci0gICAgICAgIG1fZGlz
cGxheUlEID0gYWN0dWFsRGlzcGxheUlELnZhbHVlKCk7Ci0gICAgICAgIEFMV0FZU19MT0dfSUYo
bG9nZ2VyUHRyKCksIExPR0lERU5USUZJRVIsICJkaXNwbGF5IElEIGNoYW5nZWQgdG8gIiwgc3Rh
dGljX2Nhc3Q8aW50PihtX2Rpc3BsYXlJRCkpOwotICAgICAgICBtX2Rpc3BsYXlTdHJlYW0gPSBu
dWxscHRyOwotICAgIH0KLQotICAgIGlmICghbV9kaXNwbGF5U3RyZWFtKSB7Ci0gICAgICAgIGF1
dG8gZGlzcGxheU1vZGUgPSBhZG9wdENGKENHRGlzcGxheUNvcHlEaXNwbGF5TW9kZShtX2Rpc3Bs
YXlJRCkpOwotICAgICAgICBhdXRvIHNjcmVlbldpZHRoID0gQ0dEaXNwbGF5TW9kZUdldFBpeGVs
c1dpZGUoZGlzcGxheU1vZGUuZ2V0KCkpOwotICAgICAgICBhdXRvIHNjcmVlbkhlaWdodCA9IENH
RGlzcGxheU1vZGVHZXRQaXhlbHNIaWdoKGRpc3BsYXlNb2RlLmdldCgpKTsKLSAgICAgICAgaWYg
KCFzY3JlZW5XaWR0aCB8fCAhc2NyZWVuSGVpZ2h0KSB7Ci0gICAgICAgICAgICBFUlJPUl9MT0df
SUYobG9nZ2VyUHRyKCksIExPR0lERU5USUZJRVIsICJ1bmFibGUgdG8gZ2V0IHNjcmVlbiB3aWR0
aC9oZWlnaHQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmICghbV9jYXB0dXJlUXVldWUpCi0gICAgICAgICAgICBtX2NhcHR1cmVRdWV1ZSA9IGFk
b3B0T1NPYmplY3QoZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJTY3JlZW5EaXNwbGF5Q2FwdHVyZXJN
YWMgQ2FwdHVyZSBRdWV1ZSIsIERJU1BBVENIX1FVRVVFX1NFUklBTCkpOwotCi0gICAgICAgIE5T
RGljdGlvbmFyeSogc3RyZWFtT3B0aW9ucyA9IEB7Ci0gICAgICAgICAgICAoX19icmlkZ2UgTlNT
dHJpbmcgKilrQ0dEaXNwbGF5U3RyZWFtTWluaW11bUZyYW1lVGltZSA6IEAoMSAvIGZyYW1lUmF0
ZSksCi0gICAgICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ0dEaXNwbGF5U3RyZWFtUXVl
dWVEZXB0aCA6IEAoc2NyZWVuUXVldWVNYXhpbXVtTGVuZ3RoKSwKLSAgICAgICAgICAgIChfX2Jy
aWRnZSBOU1N0cmluZyAqKWtDR0Rpc3BsYXlTdHJlYW1Db2xvclNwYWNlIDogKF9fYnJpZGdlIGlk
KXNSR0JDb2xvclNwYWNlUmVmKCksCi0gICAgICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilr
Q0dEaXNwbGF5U3RyZWFtU2hvd0N1cnNvciA6IEBZRVMsCi0gICAgICAgIH07Ci0KLSAgICAgICAg
YXV0byB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKTsKLSAgICAgICAgYXV0byBmcmFtZUF2
YWlsYWJsZUJsb2NrID0gXihDR0Rpc3BsYXlTdHJlYW1GcmFtZVN0YXR1cyBzdGF0dXMsIHVpbnQ2
NF90IGRpc3BsYXlUaW1lLCBJT1N1cmZhY2VSZWYgZnJhbWVTdXJmYWNlLCBDR0Rpc3BsYXlTdHJl
YW1VcGRhdGVSZWYgdXBkYXRlUmVmKSB7Ci0KLSAgICAgICAgICAgIGlmICghZnJhbWVTdXJmYWNl
IHx8ICFkaXNwbGF5VGltZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAg
IHNpemVfdCBjb3VudDsKLSAgICAgICAgICAgIGF1dG8qIHJlY3RzID0gQ0dEaXNwbGF5U3RyZWFt
VXBkYXRlR2V0UmVjdHModXBkYXRlUmVmLCBrQ0dEaXNwbGF5U3RyZWFtVXBkYXRlRGlydHlSZWN0
cywgJmNvdW50KTsKLSAgICAgICAgICAgIGlmICghcmVjdHMgfHwgIWNvdW50KQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt3
ZWFrVGhpcywgc3RhdHVzLCBmcmFtZSA9IERpc3BsYXlTdXJmYWNlIHsgZnJhbWVTdXJmYWNlIH1d
KCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIHdlYWtUaGlzLT5uZXdGcmFtZShzdGF0
dXMsIFdURk1vdmUoZnJhbWUpKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9OwotCi0gICAg
ICAgIG1fZGlzcGxheVN0cmVhbSA9IGFkb3B0Q0YoQ0dEaXNwbGF5U3RyZWFtQ3JlYXRlV2l0aERp
c3BhdGNoUXVldWUobV9kaXNwbGF5SUQsIHNjcmVlbldpZHRoLCBzY3JlZW5IZWlnaHQsIHByZWZl
cmVkUGl4ZWxCdWZmZXJGb3JtYXQoKSwgKF9fYnJpZGdlIENGRGljdGlvbmFyeVJlZilzdHJlYW1P
cHRpb25zLCBtX2NhcHR1cmVRdWV1ZS5nZXQoKSwgZnJhbWVBdmFpbGFibGVCbG9jaykpOwotICAg
ICAgICBpZiAoIW1fZGlzcGxheVN0cmVhbSkgewotICAgICAgICAgICAgRVJST1JfTE9HX0lGKGxv
Z2dlclB0cigpLCBMT0dJREVOVElGSUVSLCAiQ0dEaXNwbGF5U3RyZWFtQ3JlYXRlIGZhaWxlZCIp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KCFtX29ic2VydmluZ0Rpc3BsYXlDaGFuZ2VzKSB7Ci0gICAgICAgIENHRGlzcGxheVJlZ2lzdGVy
UmVjb25maWd1cmF0aW9uQ2FsbGJhY2soZGlzcGxheVJlY29uZmlndXJhdGlvbkNhbGxCYWNrLCB0
aGlzKTsKLSAgICAgICAgbV9vYnNlcnZpbmdEaXNwbGF5Q2hhbmdlcyA9IHRydWU7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgU2NyZWVuRGlzcGxheUNhcHR1cmVyTWFjOjpz
dGFydChmbG9hdCBmcmFtZVJhdGUpCi17Ci0gICAgQUxXQVlTX0xPR19JRihsb2dnZXJQdHIoKSwg
TE9HSURFTlRJRklFUik7Ci0KLSAgICBpZiAobV9pc1J1bm5pbmcpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgcmV0dXJuIHN0YXJ0RGlzcGxheVN0cmVhbShmcmFtZVJhdGUpOwotfQotCi12
b2lkIFNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYzo6c3RvcCgpCi17Ci0gICAgQUxXQVlTX0xPR19J
Rihsb2dnZXJQdHIoKSwgTE9HSURFTlRJRklFUik7Ci0KLSAgICBpZiAoIW1faXNSdW5uaW5nKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9kaXNwbGF5U3RyZWFtKQotICAgICAgICBDR0Rp
c3BsYXlTdHJlYW1TdG9wKG1fZGlzcGxheVN0cmVhbS5nZXQoKSk7Ci0KLSAgICBtX2lzUnVubmlu
ZyA9IGZhbHNlOwotfQotCi1EaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpEaXNwbGF5RnJhbWVU
eXBlIFNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYzo6Z2VuZXJhdGVGcmFtZSgpCi17Ci0gICAgcmV0
dXJuIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OkRpc3BsYXlGcmFtZVR5cGUgeyBSZXRhaW5Q
dHI8SU9TdXJmYWNlUmVmPiB7IG1fY3VycmVudEZyYW1lLmlvU3VyZmFjZSgpIH0gfTsKLX0KLQot
Ym9vbCBTY3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWM6OnN0YXJ0RGlzcGxheVN0cmVhbShmbG9hdCBm
cmFtZVJhdGUpCi17Ci0gICAgYXV0byBhY3R1YWxEaXNwbGF5SUQgPSB1cGRhdGVEaXNwbGF5SUQo
bV9kaXNwbGF5SUQpOwotICAgIGlmICghYWN0dWFsRGlzcGxheUlEKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAobV9kaXNwbGF5SUQgIT0gYWN0dWFsRGlzcGxheUlELnZhbHVlKCkp
IHsKLSAgICAgICAgbV9kaXNwbGF5SUQgPSBhY3R1YWxEaXNwbGF5SUQudmFsdWUoKTsKLSAgICAg
ICAgQUxXQVlTX0xPR19JRihsb2dnZXJQdHIoKSwgTE9HSURFTlRJRklFUiwgImRpc3BsYXkgSUQg
Y2hhbmdlZCB0byAiLCBzdGF0aWNfY2FzdDxpbnQ+KG1fZGlzcGxheUlEKSk7Ci0gICAgfQotCi0g
ICAgaWYgKCFtX2Rpc3BsYXlTdHJlYW0gJiYgIWNyZWF0ZURpc3BsYXlTdHJlYW0oZnJhbWVSYXRl
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBlcnIgPSBDR0Rpc3BsYXlTdHJl
YW1TdGFydChtX2Rpc3BsYXlTdHJlYW0uZ2V0KCkpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAg
RVJST1JfTE9HX0lGKGxvZ2dlclB0cigpLCBMT0dJREVOVElGSUVSLCAiQ0dEaXNwbGF5U3RyZWFt
U3RhcnQgZmFpbGVkIHdpdGggZXJyb3IgIiwgc3RhdGljX2Nhc3Q8aW50PihlcnIpKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG1faXNSdW5uaW5nID0gdHJ1ZTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTY3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWM6OmNvbW1pdENv
bmZpZ3VyYXRpb24oZmxvYXQgZnJhbWVSYXRlKQotewotICAgIGlmIChtX2lzUnVubmluZyAmJiAh
bV9kaXNwbGF5U3RyZWFtKQotICAgICAgICBzdGFydERpc3BsYXlTdHJlYW0oZnJhbWVSYXRlKTsK
LX0KLQotdm9pZCBTY3JlZW5EaXNwbGF5Q2FwdHVyZXJNYWM6OmRpc3BsYXlXYXNSZWNvbmZpZ3Vy
ZWQoQ0dEaXJlY3REaXNwbGF5SUQsIENHRGlzcGxheUNoYW5nZVN1bW1hcnlGbGFncykKLXsKLSAg
ICAvLyBGSVhNRTogaW1wbGVtZW50IQotfQotCi12b2lkIFNjcmVlbkRpc3BsYXlDYXB0dXJlck1h
Yzo6ZGlzcGxheVJlY29uZmlndXJhdGlvbkNhbGxCYWNrKENHRGlyZWN0RGlzcGxheUlEIGRpc3Bs
YXksIENHRGlzcGxheUNoYW5nZVN1bW1hcnlGbGFncyBmbGFncywgdm9pZCAqdXNlckluZm8pCi17
Ci0gICAgaWYgKHVzZXJJbmZvKQotICAgICAgICByZWludGVycHJldF9jYXN0PFNjcmVlbkRpc3Bs
YXlDYXB0dXJlck1hYyAqPih1c2VySW5mbyktPmRpc3BsYXlXYXNSZWNvbmZpZ3VyZWQoZGlzcGxh
eSwgZmxhZ3MpOwotfQotCi12b2lkIFNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYzo6bmV3RnJhbWUo
Q0dEaXNwbGF5U3RyZWFtRnJhbWVTdGF0dXMgc3RhdHVzLCBEaXNwbGF5U3VyZmFjZSYmIG5ld0Zy
YW1lKQotewotICAgIHN3aXRjaCAoc3RhdHVzKSB7Ci0gICAgY2FzZSBrQ0dEaXNwbGF5U3RyZWFt
RnJhbWVTdGF0dXNGcmFtZUNvbXBsZXRlOgotICAgICAgICBicmVhazsKLQotICAgIGNhc2Uga0NH
RGlzcGxheVN0cmVhbUZyYW1lU3RhdHVzRnJhbWVJZGxlOgotICAgICAgICBicmVhazsKLQotICAg
IGNhc2Uga0NHRGlzcGxheVN0cmVhbUZyYW1lU3RhdHVzRnJhbWVCbGFuazoKLSAgICAgICAgUkVM
RUFTRV9MT0coV2ViUlRDLCAiU2NyZWVuRGlzcGxheUNhcHR1cmVyTWFjOjpmcmFtZUF2YWlsYWJs
ZToga0NHRGlzcGxheVN0cmVhbUZyYW1lU3RhdHVzRnJhbWVCbGFuayIpOwotICAgICAgICBicmVh
azsKLQotICAgIGNhc2Uga0NHRGlzcGxheVN0cmVhbUZyYW1lU3RhdHVzU3RvcHBlZDoKLSAgICAg
ICAgUkVMRUFTRV9MT0coV2ViUlRDLCAiU2NyZWVuRGlzcGxheUNhcHR1cmVyTWFjOjpmcmFtZUF2
YWlsYWJsZToga0NHRGlzcGxheVN0cmVhbUZyYW1lU3RhdHVzU3RvcHBlZCIpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICBtX2N1cnJlbnRGcmFtZSA9IFdURk1vdmUobmV3RnJhbWUpOwot
fQotCi1zdGQ6Om9wdGlvbmFsPENhcHR1cmVEZXZpY2U+IFNjcmVlbkRpc3BsYXlDYXB0dXJlck1h
Yzo6c2NyZWVuQ2FwdHVyZURldmljZVdpdGhQZXJzaXN0ZW50SUQoY29uc3QgU3RyaW5nJiBkZXZp
Y2VJRCkKLXsKLSAgICBhdXRvIGRpc3BsYXlJRCA9IHBhcnNlSW50ZWdlcjx1aW50MzJfdD4oZGV2
aWNlSUQpOwotICAgIGlmICghZGlzcGxheUlEKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKFdlYlJU
QywgIlNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYzo6c2NyZWVuQ2FwdHVyZURldmljZVdpdGhQZXJz
aXN0ZW50SUQ6IGRpc3BsYXkgSUQgZG9lcyBub3QgY29udmVydCB0byAzMi1iaXQgaW50ZWdlciIp
OwotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0KLQotICAgIGF1dG8gYWN0dWFs
RGlzcGxheUlEID0gdXBkYXRlRGlzcGxheUlEKCpkaXNwbGF5SUQpOwotICAgIGlmICghYWN0dWFs
RGlzcGxheUlEKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgYXV0byBkZXZp
Y2UgPSBDYXB0dXJlRGV2aWNlKFN0cmluZzo6bnVtYmVyKCphY3R1YWxEaXNwbGF5SUQpLCBDYXB0
dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpTY3JlZW4sICJTY3JlZW5DYXB0dXJlRGV2aWNlIl9zKTsK
LSAgICBkZXZpY2Uuc2V0RW5hYmxlZCh0cnVlKTsKLSAgICByZXR1cm4gZGV2aWNlOwotfQotCi12
b2lkIFNjcmVlbkRpc3BsYXlDYXB0dXJlck1hYzo6c2NyZWVuQ2FwdHVyZURldmljZXMoVmVjdG9y
PENhcHR1cmVEZXZpY2U+JiBkaXNwbGF5cykKLXsKLSAgICBhdXRvIHNjcmVlbklEID0gZGlzcGxh
eUlEKFtOU1NjcmVlbiBtYWluU2NyZWVuXSk7Ci0gICAgaWYgKENHRGlzcGxheUlEVG9PcGVuR0xE
aXNwbGF5TWFzayhzY3JlZW5JRCkpIHsKLSAgICAgICAgQ2FwdHVyZURldmljZSBkaXNwbGF5RGV2
aWNlKFN0cmluZzo6bnVtYmVyKHNjcmVlbklEKSwgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6
U2NyZWVuLCBtYWtlU3RyaW5nKCJTY3JlZW4gMCIpKTsKLSAgICAgICAgZGlzcGxheURldmljZS5z
ZXRFbmFibGVkKHRydWUpOwotICAgICAgICBkaXNwbGF5cy5hcHBlbmQoV1RGTW92ZShkaXNwbGF5
RGV2aWNlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB1aW50MzJfdCBkaXNwbGF5
Q291bnQgPSAwOwotICAgIGF1dG8gZXJyID0gQ0dHZXRBY3RpdmVEaXNwbGF5TGlzdCgwLCBudWxs
cHRyLCAmZGlzcGxheUNvdW50KTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9H
KFdlYlJUQywgIkNHR2V0QWN0aXZlRGlzcGxheUxpc3QoKSByZXR1cm5lZCBlcnJvciAlZCB3aGVu
IHRyeWluZyB0byBnZXQgZGlzcGxheSBjb3VudCIsIChpbnQpZXJyKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmICghZGlzcGxheUNvdW50KSB7Ci0gICAgICAgIFJFTEVBU0VfTE9H
KFdlYlJUQywgIkNHR2V0QWN0aXZlRGlzcGxheUxpc3QoKSByZXR1cm5lZCBhIGRpc3BsYXkgY291
bnQgb2YgMCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPENHRGlyZWN0
RGlzcGxheUlEPiBhY3RpdmVEaXNwbGF5cyhkaXNwbGF5Q291bnQpOwotICAgIGVyciA9IENHR2V0
QWN0aXZlRGlzcGxheUxpc3QoZGlzcGxheUNvdW50LCBhY3RpdmVEaXNwbGF5cy5kYXRhKCksICZk
aXNwbGF5Q291bnQpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgUkVMRUFTRV9MT0coV2ViUlRD
LCAiQ0dHZXRBY3RpdmVEaXNwbGF5TGlzdCgpIHJldHVybmVkIGVycm9yICVkIHdoZW4gdHJ5aW5n
IHRvIGdldCB0aGUgYWN0aXZlIGRpc3BsYXkgbGlzdCIsIChpbnQpZXJyKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGludCBjb3VudCA9IDA7Ci0gICAgZm9yIChhdXRvIGRpc3BsYXlJ
RCA6IGFjdGl2ZURpc3BsYXlzKSB7Ci0gICAgICAgIENhcHR1cmVEZXZpY2UgZGlzcGxheURldmlj
ZShTdHJpbmc6Om51bWJlcihkaXNwbGF5SUQpLCBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpT
Y3JlZW4sIG1ha2VTdHJpbmcoIlNjcmVlbiAiLCBTdHJpbmc6Om51bWJlcihjb3VudCsrKSkpOwot
ICAgICAgICBkaXNwbGF5RGV2aWNlLnNldEVuYWJsZWQoQ0dEaXNwbGF5SURUb09wZW5HTERpc3Bs
YXlNYXNrKGRpc3BsYXlJRCkpOwotICAgICAgICBkaXNwbGF5cy5hcHBlbmQoV1RGTW92ZShkaXNw
bGF5RGV2aWNlKSk7Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXIuY3BwCmluZGV4IDQwM2ZmMzkzMjhmZS4uYmJlMjU1OWI1NjE2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyLmNwcApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KS4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQzLDcgKzQzLDcgQEAKIAogI2lmIFBMQVRGT1JNKENP
Q09BKQogI2luY2x1ZGUgIkNvcmVBdWRpb0NhcHR1cmVTb3VyY2UuaCIKLSNpbmNsdWRlICJEaXNw
bGF5Q2FwdHVyZVNvdXJjZUNvY29hLmgiCisjaW5jbHVkZSAiRGlzcGxheUNhcHR1cmVTb3VyY2VN
YWMuaCIKICNpbmNsdWRlICJNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5oIgogI2VuZGlmCiAK
QEAgLTExNSwxNCArMTE1LDE0IEBAIHByaXZhdGU6CiB9OwogCiAjaWYgUExBVEZPUk0oTUFDKQot
Y2xhc3MgTW9ja0Rpc3BsYXlDYXB0dXJlciBmaW5hbCA6IHB1YmxpYyBEaXNwbGF5Q2FwdHVyZVNv
dXJjZUNvY29hOjpDYXB0dXJlciB7CitjbGFzcyBNb2NrRGlzcGxheUNhcHR1cmVyIGZpbmFsIDog
cHVibGljIERpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpDYXB0dXJlciB7CiBwdWJsaWM6CiAgICAg
ZXhwbGljaXQgTW9ja0Rpc3BsYXlDYXB0dXJlcihjb25zdCBDYXB0dXJlRGV2aWNlJik7CiAKIHBy
aXZhdGU6CiAgICAgYm9vbCBzdGFydChmbG9hdCkgZmluYWw7CiAgICAgdm9pZCBzdG9wKCkgZmlu
YWwgIHsgbV9zb3VyY2UtPnN0b3AoKTsgfQotICAgIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6
OkRpc3BsYXlGcmFtZVR5cGUgZ2VuZXJhdGVGcmFtZSgpIGZpbmFsOworICAgIERpc3BsYXlDYXB0
dXJlU291cmNlTWFjOjpEaXNwbGF5RnJhbWVUeXBlIGdlbmVyYXRlRnJhbWUoKSBmaW5hbDsKICAg
ICBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkRpc3BsYXlTdXJmYWNlVHlwZSBzdXJmYWNl
VHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6
RGlzcGxheVN1cmZhY2VUeXBlOjpNb25pdG9yOyB9CiAgICAgdm9pZCBjb21taXRDb25maWd1cmF0
aW9uKGZsb2F0KSBmaW5hbCB7IH0KICAgICBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlIGRldmlj
ZVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpT
Y3JlZW47IH0KQEAgLTE0NCw3ICsxNDQsNyBAQCBib29sIE1vY2tEaXNwbGF5Q2FwdHVyZXI6OnN0
YXJ0KGZsb2F0KQogICAgIHJldHVybiB0cnVlOwogfQogCi1EaXNwbGF5Q2FwdHVyZVNvdXJjZUNv
Y29hOjpEaXNwbGF5RnJhbWVUeXBlIE1vY2tEaXNwbGF5Q2FwdHVyZXI6OmdlbmVyYXRlRnJhbWUo
KQorRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OkRpc3BsYXlGcmFtZVR5cGUgTW9ja0Rpc3BsYXlD
YXB0dXJlcjo6Z2VuZXJhdGVGcmFtZSgpCiB7CiAgICAgaWYgKGF1dG8qIGltYWdlQnVmZmVyID0g
bV9zb3VyY2UtPmltYWdlQnVmZmVyKCkpCiAgICAgICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29w
eU5hdGl2ZUltYWdlKCk7CkBAIC0xNjMsNyArMTYzLDcgQEAgcHVibGljOgogICAgICAgICBjYXNl
IENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OlNjcmVlbjoKICAgICAgICAgY2FzZSBDYXB0dXJl
RGV2aWNlOjpEZXZpY2VUeXBlOjpXaW5kb3c6CiAjaWYgUExBVEZPUk0oTUFDKQotICAgICAgICAg
ICAgcmV0dXJuIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OmNyZWF0ZShVbmlxdWVSZWY8RGlz
cGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6Q2FwdHVyZXI+KG1ha2VVbmlxdWVSZWY8TW9ja0Rpc3Bs
YXlDYXB0dXJlcj4oZGV2aWNlKSksIGRldmljZSwgY29uc3RyYWludHMpOworICAgICAgICAgICAg
cmV0dXJuIERpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpjcmVhdGUoVW5pcXVlUmVmPERpc3BsYXlD
YXB0dXJlU291cmNlTWFjOjpDYXB0dXJlcj4obWFrZVVuaXF1ZVJlZjxNb2NrRGlzcGxheUNhcHR1
cmVyPihkZXZpY2UpKSwgZGV2aWNlLCBjb25zdHJhaW50cyk7CiAjZWxpZiBVU0UoR1NUUkVBTUVS
KQogICAgICAgICAgICAgcmV0dXJuIE1vY2tSZWFsdGltZVZpZGVvU291cmNlR1N0cmVhbWVyOjpj
cmVhdGVNb2NrRGlzcGxheUNhcHR1cmVTb3VyY2UoU3RyaW5nIHsgZGV2aWNlLnBlcnNpc3RlbnRJ
ZCgpIH0sIFN0cmluZyB7IGRldmljZS5sYWJlbCgpIH0sIFN0cmluZyB7IH0sIGNvbnN0cmFpbnRz
KTsKICNlbHNlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>