<?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>140447</bug_id>
          
          <creation_ts>2015-01-14 10:09:41 -0800</creation_ts>
          <short_desc>Web Replay: use framework prefixes for framework-specific replay input code</short_desc>
          <delta_ts>2017-07-10 13:59:35 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>LATER</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>136294</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brian Burg">burg</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bburg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1061201</commentid>
    <comment_count>0</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2015-01-14 10:09:41 -0800</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061230</commentid>
    <comment_count>1</comment_count>
      <attachid>244616</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2015-01-14 10:54:56 -0800</bug_when>
    <thetext>Created attachment 244616
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327156</commentid>
    <comment_count>2</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-07-10 13:59:35 -0700</bug_when>
    <thetext>Closing web replay-related bugs until we resume working on the feature again.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244616</attachid>
            <date>2015-01-14 10:54:56 -0800</date>
            <delta_ts>2015-01-14 10:54:56 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-140447-20150114105428.patch</filename>
            <type>text/plain</type>
            <size>153280</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc4NDI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
NzhjMDEwYTE5NDE3ZjZiOWEwN2ViYTgxYTMzMmViMDIyOWM0NzEwLi4zYjUxYjMzNTFhNDkyZWE5
OGQwNDJmMjYxYjI0ZDM1ZGQzODlhYmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAxNC0wOC0yMCAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rv
bi5lZHU+CisKKyAgICAgICAgV2ViIFJlcGxheTogVXNlIGZyYW1ld29yayBwcmVmaXhlcyBmb3Ig
ZnJhbWV3b3JrLXNwZWNpZmljIHJlcGxheSBpbnB1dCBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDA0NDcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgU2VyaWFsaXphdGlvbk1ldGhvZHMg
dG8gUmVwbGF5SW5wdXRDb2RlcnMgdG8gbWF0Y2ggV2ViS2l0MiBuYW1pbmcgc2NoZW1lcy4KKwor
ICAgICAgICAqIHJlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JSZXBsYXlJbnB1dHMucHk6CisK
IDIwMTUtMDEtMDkgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgogCiAg
ICAgICAgIFdlYiBSZXBsYXk6IHN1cHBvcnQgZ2VuZXJhdGluZyByZXBsYXkgaW5wdXRzIGZvciBX
ZWJLaXQgZnJhbWV3b3JrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDJmMjAwNmNjNzRmODk2ZjgzMzViMzIyMDQ4
YWNlNTUwNDJkZjU5Ni4uOWQ3YjgyOWUzYjljYjMyZTgzY2FlNzY3MTIzODVmMWJmY2MwMmM3NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE0LTA4LTIwICBCcmlhbiBKLiBCdXJnICA8
YnVyZ0Bjcy53YXNoaW5ndG9uLmVkdT4KKworICAgICAgICBXZWIgUmVwbGF5OiBVc2UgZnJhbWV3
b3JrIHByZWZpeGVzIGZvciBmcmFtZXdvcmstc3BlY2lmaWMgcmVwbGF5IGlucHV0IGNvZGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MDQ0NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHByZXBhcmF0
aW9uIGZvciBtb3Zpbmcgc29tZSBpbnB1dHMgdG8gV2ViS2l0MiwgYWRkIHRoZSAnV2ViJyBwcmVm
aXggdG8gc29tZQorICAgICAgICBmaWxlcyB0aGF0IGFyZSBzcGVjaWZpYyB0byBXZWJDb3JlIGlu
cHV0cy4gVGhpcyBpbmNsdWRlcyBlbmNvZGUvZGVjb2RlIG1ldGhvZHMsCisgICAgICAgIGZhY3Rv
cnkgbWV0aG9kcywgYW5kIGlucHV0IGRpc3BhdGNoIGltcGxlbWVudGF0aW9ucy4KKworICAgICAg
ICBBbHNvIHJlbmFtZSBTZXJpYWxpemF0aW9uTWV0aG9kcyB0byBSZXBsYXlJbnB1dENvZGVycyB0
byBtYXRjaCBXZWJLaXQyIG5hbWluZyBzY2hlbWVzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5jcHA6CisgICAgICAgICogbG9hZGVy
L1N1YnJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKiBwYWdlL0RPTVRpbWVyLmNwcDoKKyAg
ICAgICAgKiByZXBsYXkvRXZlbnRMb29wSW5wdXREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKiBy
ZXBsYXkvTWVtb2l6ZWRET01SZXN1bHQuY3BwOgorICAgICAgICAqIHJlcGxheS9SZXBsYXlDb250
cm9sbGVyLmNwcDoKKyAgICAgICAgKiByZXBsYXkvUmVwbGF5YWJsZVRpbWVyLmNwcDoKKyAgICAg
ICAgKiByZXBsYXkvUmVwbGF5aW5nSW5wdXRDdXJzb3IuY3BwOgorICAgICAgICAqIHJlcGxheS9T
ZWdtZW50ZWRJbnB1dFN0b3JhZ2UuY3BwOgorICAgICAgICAqIHJlcGxheS9Vc2VySW5wdXRCcmlk
Z2UuY3BwOgorICAgICAgICAqIHJlcGxheS9XZWJSZXBsYXlJbnB1dENvZGVycy5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZXBsYXkvU2VyaWFsaXphdGlvbk1ldGhvZHMuY3BwLgor
ICAgICAgICAqIHJlcGxheS9XZWJSZXBsYXlJbnB1dENvZGVycy5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcmVwbGF5L1NlcmlhbGl6YXRpb25NZXRob2RzLmguCisgICAgICAgICogcmVw
bGF5L1dlYlJlcGxheUlucHV0Q3JlYXRpb25NZXRob2RzLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlJbnB1dENyZWF0aW9uTWV0aG9kcy5jcHAuCisgICAgICAg
ICogcmVwbGF5L1dlYlJlcGxheUlucHV0RGlzcGF0Y2hNZXRob2RzLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlJbnB1dERpc3BhdGNoTWV0aG9kcy5jcHAuCisK
IDIwMTUtMDEtMDkgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgogCiAg
ICAgICAgIFdlYiBSZXBsYXk6IHN1cHBvcnQgZ2VuZXJhdGluZyByZXBsYXkgaW5wdXRzIGZvciBX
ZWJLaXQgZnJhbWV3b3JrCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclJlcGxheUlucHV0cy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9yUmVwbGF5SW5wdXRzLnB5CmluZGV4IDMz
N2E1MGI5MTgyNzc2MjgyOGMyZWI3MTdlZTJiYWI1YTc2ODg1N2EuLjVlZDI2YjkwOWUxMzZiZDU2
MDg2ODg5M2I4OWMzMDAyNmI1ZjllN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9yUmVwbGF5SW5wdXRzLnB5CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9yUmVwbGF5SW5wdXRz
LnB5CkBAIC03Miw3ICs3Miw3IEBAIEdMT0JBTF9DT05GSUcgPSB7CiAKICAgICAiaW1wbEluY2x1
ZGVzIjogWwogICAgICAgICAoWyJXZWJLaXQiLCAiV2ViQ29yZSJdLAotICAgICAgICAgICAgKCJX
ZWJDb3JlIiwgInJlcGxheS9TZXJpYWxpemF0aW9uTWV0aG9kcy5oIikKKyAgICAgICAgICAgICgi
V2ViQ29yZSIsICJyZXBsYXkvV2ViUmVwbGF5SW5wdXRDb2RlcnMuaCIpCiAgICAgICAgICksCiAg
ICAgICAgIChbIldlYktpdCIsICJXZWJDb3JlIiwgIkphdmFTY3JpcHRDb3JlIl0sCiAgICAgICAg
ICAgICAoIkphdmFTY3JpcHRDb3JlIiwgImluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCIpCkBA
IC02MjksNiArNjI5LDE2IEBAIGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAgcmV0dXJuIFRlbXBs
YXRlKFRlbXBsYXRlcy5Db3B5cmlnaHRCbG9jaykuc3Vic3RpdHV0ZShOb25lLCBpbnB1dEZpbGVu
YW1lPW9zLnBhdGguYmFzZW5hbWUoc2VsZi5faW5wdXRfZmlsZXBhdGgpKQogCiAgICAgZGVmIGdl
bmVyYXRlX2luY2x1ZGVfc3RyaW5nKHNlbGYsIGZyYW1ld29ya19uYW1lLCBoZWFkZXJfcGF0aCk6
CisgICAgICAgIGRlZiBjaG9tcF9sZWFkaW5nX3BhdGhfY29tcG9uZW50KHBhdGgpOgorICAgICAg
ICAgICAgY29tcG9uZW50cyA9IFtwYXRoXQorICAgICAgICAgICAgd2hpbGUgY29tcG9uZW50c1sw
XSBpcyBub3Qgb3MucGF0aC5iYXNlbmFtZShjb21wb25lbnRzWzBdKToKKyAgICAgICAgICAgICAg
ICAoaGVhZCwgdGFpbCkgPSBvcy5wYXRoLnNwbGl0KGNvbXBvbmVudHNbMF0pCisgICAgICAgICAg
ICAgICAgY29tcG9uZW50c1swOjFdID0gW2hlYWQsIHRhaWxdCisgICAgICAgICAgICBpZiBsZW4o
Y29tcG9uZW50cykgPiAxOgorICAgICAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oKmNv
bXBvbmVudHNbMTpdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4g
cGF0aAorCiAgICAgICAgIGlmIHNlbGYudGFyZ2V0X2ZyYW1ld29yay5uYW1lID09IGZyYW1ld29y
a19uYW1lOgogICAgICAgICAgICAgcmV0dXJuICIjaW5jbHVkZSBcIiVzXCIiICUgb3MucGF0aC5i
YXNlbmFtZShoZWFkZXJfcGF0aCkKICAgICAgICAgZWxpZiBzZWxmLnRhcmdldF9mcmFtZXdvcmsg
aXMgRnJhbWV3b3Jrcy5XZWJLaXQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDcwZjc5OWM1YmFh
NmUwMzEyN2E5MWM1MmZmZTVmZmVkMjEzOGNiMmYuLmIzMzA2M2RjOWM4ZmQxMDc0ZWRmNzE1YTJi
NjZkZDJlYmRiNmVkMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0zMDYzLDEzICszMDYzLDEz
IEBAIGlmIChFTkFCTEVfV0VCX1JFUExBWSkKICAgICAgICAgcmVwbGF5L01lbW9pemVkRE9NUmVz
dWx0LmNwcAogICAgICAgICByZXBsYXkvUmVwbGF5Q29udHJvbGxlci5jcHAKICAgICAgICAgcmVw
bGF5L1JlcGxheWluZ0lucHV0Q3Vyc29yLmNwcAotICAgICAgICByZXBsYXkvUmVwbGF5SW5wdXRD
cmVhdGlvbk1ldGhvZHMuY3BwCi0gICAgICAgIHJlcGxheS9SZXBsYXlJbnB1dERpc3BhdGNoTWV0
aG9kcy5jcHAKICAgICAgICAgcmVwbGF5L1JlcGxheVNlc3Npb24uY3BwCiAgICAgICAgIHJlcGxh
eS9SZXBsYXlTZXNzaW9uU2VnbWVudC5jcHAKICAgICAgICAgcmVwbGF5L1NlZ21lbnRlZElucHV0
U3RvcmFnZS5jcHAKLSAgICAgICAgcmVwbGF5L1NlcmlhbGl6YXRpb25NZXRob2RzLmNwcAogICAg
ICAgICByZXBsYXkvVXNlcklucHV0QnJpZGdlLmNwcAorICAgICAgICByZXBsYXkvV2ViUmVwbGF5
SW5wdXRDb2RlcnMuY3BwCisgICAgICAgIHJlcGxheS9XZWJSZXBsYXlJbnB1dENyZWF0aW9uTWV0
aG9kcy5jcHAKKyAgICAgICAgcmVwbGF5L1dlYlJlcGxheUlucHV0RGlzcGF0Y2hNZXRob2RzLmNw
cAogCiAgICAgICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9XZWJSZXBsYXlJbnB1
dHMuY3BwCiAgICAgKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IDM5YzA4ZjIzZTYwODRmYzM0OWRkNmNlYzU2Y2Q5ZDA1Njk4NDU1
NWEuLjg5MmIxZWY2MzRlNzA3MGIzOTlmZTEyODA3Zjg5MDE3OGY3YzU0Y2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM2NTYs
MTYgKzM2NTYsMTQgQEAKIAkJOTlDQzBCNTQxOEJFOTg0OTAwNkNFQkNDIC8qIFJlcGxheUNvbnRy
b2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5
Q0MwQjNGMThCRTk4NDkwMDZDRUJDQyAvKiBSZXBsYXlDb250cm9sbGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTlDQzBCNTUxOEJFOTg0OTAw
NkNFQkNDIC8qIFJlcGxheWluZ0lucHV0Q3Vyc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5Q0MwQjQwMThCRTk4NDkwMDZDRUJDQyAvKiBSZXBs
YXlpbmdJbnB1dEN1cnNvci5jcHAgKi87IH07CiAJCTk5Q0MwQjU2MThCRTk4NEEwMDZDRUJDQyAv
KiBSZXBsYXlpbmdJbnB1dEN1cnNvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTlDQzBCNDExOEJFOTg0OTAwNkNFQkNDIC8qIFJlcGxheWluZ0lucHV0
Q3Vyc29yLmggKi87IH07Ci0JCTk5Q0MwQjU3MThCRTk4NEEwMDZDRUJDQyAvKiBSZXBsYXlJbnB1
dENyZWF0aW9uTWV0aG9kcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5OUNDMEI0MjE4QkU5ODQ5MDA2Q0VCQ0MgLyogUmVwbGF5SW5wdXRDcmVhdGlv
bk1ldGhvZHMuY3BwICovOyB9OwotCQk5OUNDMEI1ODE4QkU5ODRBMDA2Q0VCQ0MgLyogUmVwbGF5
SW5wdXREaXNwYXRjaE1ldGhvZHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTlDQzBCNDMxOEJFOTg0OTAwNkNFQkNDIC8qIFJlcGxheUlucHV0RGlz
cGF0Y2hNZXRob2RzLmNwcCAqLzsgfTsKIAkJOTlDQzBCNTkxOEJFOTg0QTAwNkNFQkNDIC8qIFJl
cGxheVNlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTlDQzBCNDQxOEJFOTg0OTAwNkNFQkNDIC8qIFJlcGxheVNlc3Npb24uY3BwICovOyB9
OwogCQk5OUNDMEI1QTE4QkU5ODRBMDA2Q0VCQ0MgLyogUmVwbGF5U2Vzc2lvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTlDQzBCNDUxOEJFOTg0OTAw
NkNFQkNDIC8qIFJlcGxheVNlc3Npb24uaCAqLzsgfTsKIAkJOTlDQzBCNUIxOEJFOTg0QTAwNkNF
QkNDIC8qIFJlcGxheVNlc3Npb25TZWdtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5Q0MwQjQ2MThCRTk4NDkwMDZDRUJDQyAvKiBSZXBsYXlT
ZXNzaW9uU2VnbWVudC5jcHAgKi87IH07CiAJCTk5Q0MwQjVDMThCRTk4NEEwMDZDRUJDQyAvKiBS
ZXBsYXlTZXNzaW9uU2VnbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTlDQzBCNDcxOEJFOTg0OTAwNkNFQkNDIC8qIFJlcGxheVNlc3Npb25TZWdt
ZW50LmggKi87IH07CiAJCTk5Q0MwQjVEMThCRTk4NEEwMDZDRUJDQyAvKiBTZWdtZW50ZWRJbnB1
dFN0b3JhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTlDQzBCNDgxOEJFOTg0OTAwNkNFQkNDIC8qIFNlZ21lbnRlZElucHV0U3RvcmFnZS5jcHAg
Ki87IH07CiAJCTk5Q0MwQjVFMThCRTk4NEEwMDZDRUJDQyAvKiBTZWdtZW50ZWRJbnB1dFN0b3Jh
Z2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5Q0Mw
QjQ5MThCRTk4NDkwMDZDRUJDQyAvKiBTZWdtZW50ZWRJbnB1dFN0b3JhZ2UuaCAqLzsgfTsKLQkJ
OTlDQzBCNUYxOEJFOTg0QTAwNkNFQkNDIC8qIFNlcmlhbGl6YXRpb25NZXRob2RzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5Q0MwQjRBMThCRTk4
NDkwMDZDRUJDQyAvKiBTZXJpYWxpemF0aW9uTWV0aG9kcy5jcHAgKi87IH07Ci0JCTk5Q0MwQjYw
MThCRTk4NEEwMDZDRUJDQyAvKiBTZXJpYWxpemF0aW9uTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTlDQzBCNEIxOEJFOTg0OTAwNkNFQkND
IC8qIFNlcmlhbGl6YXRpb25NZXRob2RzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJOTlDQzBCNUYxOEJFOTg0QTAwNkNFQkNDIC8qIFdlYlJlcGxh
eUlucHV0Q29kZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk5Q0MwQjRBMThCRTk4NDkwMDZDRUJDQyAvKiBXZWJSZXBsYXlJbnB1dENvZGVycy5j
cHAgKi87IH07CisJCTk5Q0MwQjYwMThCRTk4NEEwMDZDRUJDQyAvKiBXZWJSZXBsYXlJbnB1dENv
ZGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTlD
QzBCNEIxOEJFOTg0OTAwNkNFQkNDIC8qIFdlYlJlcGxheUlucHV0Q29kZXJzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTlDQzBCNjYxOEJFOUYx
NTAwNkNFQkNDIC8qIEluc3BlY3RvclJlcGxheUFnZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5Q0MwQjY0MThCRTlGMTUwMDZDRUJDQyAvKiBJ
bnNwZWN0b3JSZXBsYXlBZ2VudC5jcHAgKi87IH07CiAJCTk5Q0MwQjY3MThCRTlGMTUwMDZDRUJD
QyAvKiBJbnNwZWN0b3JSZXBsYXlBZ2VudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTlDQzBCNjUxOEJFOUYxNTAwNkNFQkNDIC8qIEluc3BlY3RvclJl
cGxheUFnZW50LmggKi87IH07CiAJCTk5Q0MwQjZBMThCRUExRkYwMDZDRUJDQyAvKiBXZWJSZXBs
YXlJbnB1dHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTlDQzBCNjgxOEJFQTFGRjAwNkNFQkNDIC8qIFdlYlJlcGxheUlucHV0cy5jcHAgKi87IH07
CkBAIC01NTQwLDYgKzU1MzgsOCBAQAogCQlDM0NGMTdBNjE1QjAwNjNGMDAyNzZEMzkgLyogSWRU
YXJnZXRPYnNlcnZlclJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEMzQ0YxN0EyMTVCMDA2M0YwMDI3NkQzOSAvKiBJZFRhcmdldE9ic2Vy
dmVyUmVnaXN0cnkuY3BwICovOyB9OwogCQlDM0NGMTdBNzE1QjAwNjNGMDAyNzZEMzkgLyogSWRU
YXJnZXRPYnNlcnZlclJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDM0NGMTdBMzE1QjAwNjNGMDAyNzZEMzkgLyogSWRUYXJnZXRPYnNlcnZl
clJlZ2lzdHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQzQwMEQxMDkxOEYxQzhGNjAwOTBEODYzIC8qIEV2ZW50TG9vcElucHV0LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0MDBEMTA4MThGMUM4
RjYwMDkwRDg2MyAvKiBFdmVudExvb3BJbnB1dC5jcHAgKi87IH07CisJCUM0Njg3MUI2MUE2NkUw
NzEwMDg2MEM4NyAvKiBXZWJSZXBsYXlJbnB1dENyZWF0aW9uTWV0aG9kcy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OUNDMEI0MjE4QkU5ODQ5MDA2
Q0VCQ0MgLyogV2ViUmVwbGF5SW5wdXRDcmVhdGlvbk1ldGhvZHMuY3BwICovOyB9OworCQlDNDY4
NzFCNzFBNjZFMDcxMDA4NjBDODcgLyogV2ViUmVwbGF5SW5wdXREaXNwYXRjaE1ldGhvZHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTlDQzBCNDMx
OEJFOTg0OTAwNkNFQkNDIC8qIFdlYlJlcGxheUlucHV0RGlzcGF0Y2hNZXRob2RzLmNwcCAqLzsg
fTsKIAkJQzQ5NDc0QTExOUEyODQ3QzAwOUIzREU4IC8qIFNoYXJlZEV2ZW50U2VuZGVycy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ5NDc0QTAxOUEy
ODQ3QzAwOUIzREU4IC8qIFNoYXJlZEV2ZW50U2VuZGVycy5oICovOyB9OwogCQlDNDk0NzRBODE5
QTJENjEyMDA5QjNERTggLyogRXZlbnRTZW5kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFNUNCMUIzMTRFREFCNkYwMEJCMjc5NSAvKiBFdmVudFNl
bmRlci5oICovOyB9OwogCQlDNDk0NzRBQTE5QTJFMkU1MDA5QjNERTggLyogU2hhcmVkRXZlbnRT
ZW5kZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEM0OTQ3NEE5MTlBMkUyRTUwMDlCM0RFOCAvKiBTaGFyZWRFdmVudFNlbmRlcnMuY3BwICovOyB9
OwpAQCAtMTA4MjgsMTYgKzEwODI4LDE2IEBACiAJCTk5Q0MwQjNGMThCRTk4NDkwMDZDRUJDQyAv
KiBSZXBsYXlDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
cGxheUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTlDQzBCNDAx
OEJFOTg0OTAwNkNFQkNDIC8qIFJlcGxheWluZ0lucHV0Q3Vyc29yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlcGxheWluZ0lucHV0Q3Vyc29yLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTlDQzBCNDExOEJFOTg0OTAwNkNFQkNDIC8qIFJlcGxh
eWluZ0lucHV0Q3Vyc29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlcGxh
eWluZ0lucHV0Q3Vyc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk5Q0MwQjQy
MThCRTk4NDkwMDZDRUJDQyAvKiBSZXBsYXlJbnB1dENyZWF0aW9uTWV0aG9kcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXBsYXlJbnB1dENyZWF0aW9uTWV0aG9k
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk5Q0MwQjQzMThCRTk4NDkwMDZD
RUJDQyAvKiBSZXBsYXlJbnB1dERpc3BhdGNoTWV0aG9kcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBSZXBsYXlJbnB1dERpc3BhdGNoTWV0aG9kcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk5Q0MwQjQyMThCRTk4NDkwMDZDRUJDQyAvKiBXZWJS
ZXBsYXlJbnB1dENyZWF0aW9uTWV0aG9kcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXZWJSZXBsYXlJbnB1dENyZWF0aW9uTWV0aG9kcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTk5Q0MwQjQzMThCRTk4NDkwMDZDRUJDQyAvKiBXZWJSZXBsYXlJ
bnB1dERpc3BhdGNoTWV0aG9kcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXZWJSZXBsYXlJbnB1dERpc3BhdGNoTWV0aG9kcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTk5Q0MwQjQ0MThCRTk4NDkwMDZDRUJDQyAvKiBSZXBsYXlTZXNzaW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlcGxheVNlc3Npb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OUNDMEI0NTE4QkU5ODQ5MDA2Q0VCQ0Mg
LyogUmVwbGF5U2Vzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXBs
YXlTZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5Q0MwQjQ2MThCRTk4
NDkwMDZDRUJDQyAvKiBSZXBsYXlTZXNzaW9uU2VnbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBSZXBsYXlTZXNzaW9uU2VnbWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTk5Q0MwQjQ3MThCRTk4NDkwMDZDRUJDQyAvKiBSZXBsYXlTZXNz
aW9uU2VnbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXBsYXlTZXNz
aW9uU2VnbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OUNDMEI0ODE4QkU5
ODQ5MDA2Q0VCQ0MgLyogU2VnbWVudGVkSW5wdXRTdG9yYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlZ21lbnRlZElucHV0U3RvcmFnZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5Q0MwQjQ5MThCRTk4NDkwMDZDRUJDQyAvKiBTZWdtZW50
ZWRJbnB1dFN0b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VnbWVu
dGVkSW5wdXRTdG9yYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk5Q0MwQjRB
MThCRTk4NDkwMDZDRUJDQyAvKiBTZXJpYWxpemF0aW9uTWV0aG9kcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZXJpYWxpemF0aW9uTWV0aG9kcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk5Q0MwQjRCMThCRTk4NDkwMDZDRUJDQyAvKiBTZXJp
YWxpemF0aW9uTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZXJp
YWxpemF0aW9uTWV0aG9kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OUNDMEI0
QTE4QkU5ODQ5MDA2Q0VCQ0MgLyogV2ViUmVwbGF5SW5wdXRDb2RlcnMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUmVwbGF5SW5wdXRDb2RlcnMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5OUNDMEI0QjE4QkU5ODQ5MDA2Q0VCQ0MgLyogV2Vi
UmVwbGF5SW5wdXRDb2RlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
UmVwbGF5SW5wdXRDb2RlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTlDQzBC
NEMxOEJFOTg0OTAwNkNFQkNDIC8qIFdlYklucHV0cy5qc29uICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5qc29u
OyBwYXRoID0gV2ViSW5wdXRzLmpzb247IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5
Q0MwQjY0MThCRTlGMTUwMDZDRUJDQyAvKiBJbnNwZWN0b3JSZXBsYXlBZ2VudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JSZXBsYXlBZ2VudC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5Q0MwQjY1MThCRTlGMTUwMDZDRUJDQyAv
KiBJbnNwZWN0b3JSZXBsYXlBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbnNwZWN0b3JSZXBsYXlBZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTg0MTcsMTAgKzE4NDE3LDYgQEAKIAkJCQk5OUNDMEIzRjE4QkU5ODQ5MDA2Q0VCQ0MgLyogUmVw
bGF5Q29udHJvbGxlci5oICovLAogCQkJCTk5Q0MwQjQwMThCRTk4NDkwMDZDRUJDQyAvKiBSZXBs
YXlpbmdJbnB1dEN1cnNvci5jcHAgKi8sCiAJCQkJOTlDQzBCNDExOEJFOTg0OTAwNkNFQkNDIC8q
IFJlcGxheWluZ0lucHV0Q3Vyc29yLmggKi8sCi0JCQkJOTlDQzBCNDIxOEJFOTg0OTAwNkNFQkND
IC8qIFJlcGxheUlucHV0Q3JlYXRpb25NZXRob2RzLmNwcCAqLywKLQkJCQk5OUNDMEI0MzE4QkU5
ODQ5MDA2Q0VCQ0MgLyogUmVwbGF5SW5wdXREaXNwYXRjaE1ldGhvZHMuY3BwICovLAotCQkJCTk5
MEExOUY0MThBREE0ODQwMDE4M0ZEMSAvKiBSZXBsYXlJbnB1dFR5cGVzLmNwcCAqLywKLQkJCQk5
OTBBMTlGNTE4QURBNDg0MDAxODNGRDEgLyogUmVwbGF5SW5wdXRUeXBlcy5oICovLAogCQkJCUM0
OTQ3NEFCMTlBM0Y3QTIwMDlCM0RFOCAvKiBSZXBsYXlDbGllbnQuaCAqLywKIAkJCQk5OUNDMEI0
NDE4QkU5ODQ5MDA2Q0VCQ0MgLyogUmVwbGF5U2Vzc2lvbi5jcHAgKi8sCiAJCQkJOTlDQzBCNDUx
OEJFOTg0OTAwNkNFQkNDIC8qIFJlcGxheVNlc3Npb24uaCAqLywKQEAgLTE4NDI4LDExICsxODQy
NCwxMyBAQAogCQkJCTk5Q0MwQjQ3MThCRTk4NDkwMDZDRUJDQyAvKiBSZXBsYXlTZXNzaW9uU2Vn
bWVudC5oICovLAogCQkJCTk5Q0MwQjQ4MThCRTk4NDkwMDZDRUJDQyAvKiBTZWdtZW50ZWRJbnB1
dFN0b3JhZ2UuY3BwICovLAogCQkJCTk5Q0MwQjQ5MThCRTk4NDkwMDZDRUJDQyAvKiBTZWdtZW50
ZWRJbnB1dFN0b3JhZ2UuaCAqLywKLQkJCQk5OUNDMEI0QTE4QkU5ODQ5MDA2Q0VCQ0MgLyogU2Vy
aWFsaXphdGlvbk1ldGhvZHMuY3BwICovLAotCQkJCTk5Q0MwQjRCMThCRTk4NDkwMDZDRUJDQyAv
KiBTZXJpYWxpemF0aW9uTWV0aG9kcy5oICovLAogCQkJCTk5MjAzOTgwMThCOTVCQzYwMEIzOUFG
OSAvKiBVc2VySW5wdXRCcmlkZ2UuY3BwICovLAogCQkJCTk5MjAzOTgxMThCOTVCQzYwMEIzOUFG
OSAvKiBVc2VySW5wdXRCcmlkZ2UuaCAqLywKIAkJCQk5OUNDMEI0QzE4QkU5ODQ5MDA2Q0VCQ0Mg
LyogV2ViSW5wdXRzLmpzb24gKi8sCisJCQkJOTlDQzBCNEExOEJFOTg0OTAwNkNFQkNDIC8qIFdl
YlJlcGxheUlucHV0Q29kZXJzLmNwcCAqLywKKwkJCQk5OUNDMEI0QjE4QkU5ODQ5MDA2Q0VCQ0Mg
LyogV2ViUmVwbGF5SW5wdXRDb2RlcnMuaCAqLywKKwkJCQk5OUNDMEI0MjE4QkU5ODQ5MDA2Q0VC
Q0MgLyogV2ViUmVwbGF5SW5wdXRDcmVhdGlvbk1ldGhvZHMuY3BwICovLAorCQkJCTk5Q0MwQjQz
MThCRTk4NDkwMDZDRUJDQyAvKiBXZWJSZXBsYXlJbnB1dERpc3BhdGNoTWV0aG9kcy5jcHAgKi8s
CiAJCQkpOwogCQkJcGF0aCA9IHJlcGxheTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBA
IC0yNTk5NCw3ICsyNTk5Miw2IEBACiAJCQkJNDE1MDcxNTgxNjg1MDY3MzAwQzNDN0IzIC8qIFNl
bGVjdG9yRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzEwN0JFMjE4Q0MxOURFMDBDQzE4
RTggLyogU2VsZWN0b3JQc2V1ZG9UeXBlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDUzMjJB
QzE0MENFMjY3MDA1QTBGOTIgLyogU2VsZWN0b3JRdWVyeS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
OTlDQzBCNjAxOEJFOTg0QTAwNkNFQkNDIC8qIFNlcmlhbGl6YXRpb25NZXRob2RzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMThERjMzNTE4QUFGMTJDMDA3NzNFNTkgLyogU2VyaWFsaXplZENyeXB0
b0tleVdyYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3N0FGMTQwMThGNEFFNDAwMDAxRUQ2MSAv
KiBTZXJpYWxpemVkUGxhdGZvcm1SZXByZXNlbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MDc3QUYxNDMxOEY0QjFCQjAwMDFFRDYxIC8qIFNlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0
aW9uTWFjLmggaW4gSGVhZGVycyAqLywKQEAgLTI2Njc5LDYgKzI2Njc2LDcgQEAKIAkJCQkwRkNG
MzMyRjBGMkI5QTI1MDA0QjY3OTUgLyogV2ViTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUx
QTMxNjJEMTM0QkMzMkQwMDdDOUE0RiAvKiBXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTk5Q0MwQjZCMThCRUExRkYwMDZDRUJDQyAvKiBXZWJSZXBsYXlJ
bnB1dHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTk5Q0MwQjYwMThCRTk4NEEwMDZDRUJDQyAvKiBX
ZWJSZXBsYXlJbnB1dENvZGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUwMkM1REYxMzA0OUIz
NTAwRkM3RDUzIC8qIFdlYlNhZmVHQ0FjdGl2aXR5Q2FsbGJhY2tJT1MuaCBpbiBIZWFkZXJzICov
LAogCQkJCUNFOTUyMDhBMTgxMUI0NzUwMDdBNTM5MiAvKiBXZWJTYWZlSW5jcmVtZW50YWxTd2Vl
cGVySU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQ0FGMzQ4MTBBNkM0MDUyMDBBQkUwNkUgLyog
V2ViU2NyaXB0T2JqZWN0LmggaW4gSGVhZGVycyAqLywKQEAgLTI3MDkyLDYgKzI3MDkwLDggQEAK
IAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0
NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCUM0Njg3MUI2MUE2NkUwNzEwMDg2MEM4NyAvKiBX
ZWJSZXBsYXlJbnB1dENyZWF0aW9uTWV0aG9kcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDNDY4
NzFCNzFBNjZFMDcxMDA4NjBDODcgLyogV2ViUmVwbGF5SW5wdXREaXNwYXRjaE1ldGhvZHMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNDFFMUIxRDAwRkY1OTg2OTAwNTc2QjNCIC8qIEFic3RyYWN0
V29ya2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3RjU3QUI5MUE1MDcyNjkwMDg3NkY5OCAv
KiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzdGNTdBQkEx
QTUwNzI2RjAwODc2Rjk4IC8qIEFjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC0yNzQ5MSw2ICsyNzQ5MSw3IEBACiAJCQkJMzFGQjFBNUMxMjBBNUQwNjAwREMw
MkEwIC8qIERldmljZU1vdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxNDAzNzlF
MTI0QkVBN0YwMEFGNDBFNCAvKiBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTU5MzA5QTExMTFGNEFFNTgwMDI1MDYwMyAvKiBEZXZpY2VPcmllbnRhdGlv
bkNsaWVudE1vY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMjY3NzI1RkMxQTVCM0FEOTAwM0My
NEREIC8qIERGQS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyNjkzOTcyNjFBNEE1RkJEMDBFODM0
OUQgLyogTkZBLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTU5QThGMUQ0MTFBNjk1MDgwMDFBQzM0
QSAvKiBEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTlEMUMxMDQxMUVCNURDRjAwQjYzOEM4IC8qIERldmljZU9yaWVudGF0aW9uRGF0YS5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTI5MjgzLDkgKzI5Mjg0LDYgQEAKIAkJCQlDNEQ0RjUyRDE5NzVDODhC
MDAzRUY1QkMgLyogUmVwbGF5YWJsZVRpbWVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OUND
MEI1MzE4QkU5ODQ5MDA2Q0VCQ0MgLyogUmVwbGF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5OUNDMEI1NTE4QkU5ODQ5MDA2Q0VCQ0MgLyogUmVwbGF5aW5nSW5wdXRDdXJzb3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMjY3NzI1RkMxQTVCM0FEOTAwM0MyNEREIC8qIERGQS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQk5OUNDMEI1NzE4QkU5ODRBMDA2Q0VCQ0MgLyogUmVwbGF5
SW5wdXRDcmVhdGlvbk1ldGhvZHMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTlDQzBCNTgxOEJF
OTg0QTAwNkNFQkNDIC8qIFJlcGxheUlucHV0RGlzcGF0Y2hNZXRob2RzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTk5Q0MwQjU5MThCRTk4NEEwMDZDRUJDQyAvKiBSZXBsYXlTZXNzaW9uLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTk5Q0MwQjVCMThCRTk4NEEwMDZDRUJDQyAvKiBSZXBsYXlTZXNz
aW9uU2VnbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNTVCM0RDRjEyNTFGMTJEMDAzRUYy
NjkgLyogUmVzZXRJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTQyNyw3ICsyOTQy
NSw2IEBACiAJCQkJNDNCODVFRDQxOENCRUM1MjAwRTMxQUY0IC8qIFNlbGVjdG9yUHNldWRvQ2xh
c3NBbmRDb21wYXRpYmlsaXR5RWxlbWVudE1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyNkFB
MEY5RTE4RDJBMThCMDA0MTkzODEgLyogU2VsZWN0b3JQc2V1ZG9FbGVtZW50VHlwZU1hcC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlFNDUzMjJBQjE0MENFMjY3MDA1QTBGOTIgLyogU2VsZWN0b3JR
dWVyeS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5OUNDMEI1RjE4QkU5ODRBMDA2Q0VCQ0MgLyog
U2VyaWFsaXphdGlvbk1ldGhvZHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE4REYzMzgxOEFB
RjE0RDAwNzczRTU5IC8qIFNlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMDc3QUYxNDQxOEY0QjFCQjAwMDFFRDYxIC8qIFNlcmlhbGl6ZWRQbGF0Zm9ybVJl
cHJlc2VudGF0aW9uTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc1RTQ5NzcxMDc1MkFDQjAw
QzlCODk2IC8qIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5
OTcwLDYgKzI5OTY3LDcgQEAKIAkJCQkwRkNGMzMyRTBGMkI5QTI1MDA0QjY3OTUgLyogV2ViTGF5
ZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQlFMUEzMTYyRTEzNEJDMzJEMDA3QzlBNEYgLyogV2Vi
TlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTlDQzBCNkEx
OEJFQTFGRjAwNkNFQkNDIC8qIFdlYlJlcGxheUlucHV0cy5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk5OUNDMEI1RjE4QkU5ODRBMDA2Q0VCQ0MgLyogV2ViUmVwbGF5SW5wdXRDb2RlcnMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUNBRjM0ODIwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9i
amVjdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTk3QUFCRDFBMTRGQTA5RDUwMDc0NTdBRSAvKiBX
ZWJTb2NrZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdBQUJEMUQxNEZBMDlENTAwNzQ1N0FF
IC8qIFdlYlNvY2tldENoYW5uZWwuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50LmNwcAppbmRleCA4ZmM0NDFlMTMx
ZjBhZGZiN2I5Y2JkMjI0ZDVlMWJjYjdlMmIyY2RjLi45YzM1MDY1MjAzNjFiNzk2MDYyODc3NTdl
N2VhYWZiMDdkOTUxNTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUmVwbGF5QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JSZXBsYXlBZ2VudC5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAKICNpbmNsdWRlICJSZXBsYXlD
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUmVwbGF5U2Vzc2lvbi5oIgogI2luY2x1ZGUgIlJlcGxh
eVNlc3Npb25TZWdtZW50LmgiCi0jaW5jbHVkZSAiU2VyaWFsaXphdGlvbk1ldGhvZHMuaCIKKyNp
bmNsdWRlICJXZWJSZXBsYXlJbnB1dENvZGVycy5oIgogI2luY2x1ZGUgIldlYlJlcGxheUlucHV0
cy5oIiAvLyBGb3IgRW5jb2RpbmdUcmFpdHM8SW5wdXRRdWV1ZT4uCiAjaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvclZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IDI4YzE3ODVk
YzUyNTcyOWM5ZjU2ZGRkNWY5MGUyNWFjYjRiZjkxYzIuLmZjYTIzM2QwNTI5NDAyYzFiMDI1NjUz
NjFjNzVhNzY5NWY1NTY2YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJy
ZXNvdXJjZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNl
TG9hZGVyLmNwcApAQCAtNTEsNyArNTEsNyBAQAogI2luY2x1ZGUgIkNhcHR1cmluZ0lucHV0Q3Vy
c29yLmgiCiAjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCiAjaW5jbHVkZSAiUmVwbGF5Q29udHJvbGxl
ci5oIgotI2luY2x1ZGUgIlNlcmlhbGl6YXRpb25NZXRob2RzLmgiCisjaW5jbHVkZSAiV2ViUmVw
bGF5SW5wdXRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJSZXBsYXlJbnB1dHMuaCIKICNlbmRpZgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVRpbWVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRE9NVGltZXIuY3BwCmluZGV4IDAyYzQzNDBlZmEwYmQxOGI2NjZiNzNmYWNl
NTQwYjJhZWQwODkyNDAuLjNlMWIwYWNlNTU5NDJjNmNlOTc2NjI1ZmViNjU1ZmZjZGM0ZWRjNmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NVGltZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRE9NVGltZXIuY3BwCkBAIC01Myw3ICs1Myw3IEBACiAKICNpZiBFTkFC
TEUoV0VCX1JFUExBWSkKICNpbmNsdWRlICJDYXB0dXJpbmdJbnB1dEN1cnNvci5oIgotI2luY2x1
ZGUgIlNlcmlhbGl6YXRpb25NZXRob2RzLmgiCisjaW5jbHVkZSAiV2ViUmVwbGF5SW5wdXRDb2Rl
cnMuaCIKICNpbmNsdWRlICJXZWJSZXBsYXlJbnB1dHMuaCIKICNlbmRpZgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvRXZlbnRMb29wSW5wdXREaXNwYXRjaGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlcGxheS9FdmVudExvb3BJbnB1dERpc3BhdGNoZXIuY3BwCmluZGV4IDc0
YjFiMmM3MmEwNmM3ODJjMWI0Mzc1NGE3NTJiNDYyNGM5M2MyMWIuLmYwZjM0NTllNDdiNzVjM2M1
MGNiOWQ5NzhjZDJhYzliNTVlN2RmYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlcGxh
eS9FdmVudExvb3BJbnB1dERpc3BhdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlcGxh
eS9FdmVudExvb3BJbnB1dERpc3BhdGNoZXIuY3BwCkBAIC0zOSw3ICszOSw3IEBACiAKICNpZiAh
TE9HX0RJU0FCTEVECiAjaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlNlcmlhbGl6YXRp
b25NZXRob2RzLmgiCisjaW5jbHVkZSAiV2ViUmVwbGF5SW5wdXRDb2RlcnMuaCIKICNpbmNsdWRl
IDxyZXBsYXkvRW5jb2RlZFZhbHVlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgog
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvTWVtb2l6ZWRET01SZXN1
bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5L01lbW9pemVkRE9NUmVzdWx0LmNwcAppbmRl
eCBkMmI1NzRhYWZjZjZlNjJiN2FjNDU5ZmFmZGFiOWU2Y2Q0MDdjYjMwLi5jNTcwOTc1YzkxZGRl
YjBiNjQyYTk2YmI4OGZhM2MzNmE5ZTJmMmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZXBsYXkvTWVtb2l6ZWRET01SZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9N
ZW1vaXplZERPTVJlc3VsdC5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2lmIEVOQUJMRShXRUJf
UkVQTEFZKQogCi0jaW5jbHVkZSAiU2VyaWFsaXphdGlvbk1ldGhvZHMuaCIKKyNpbmNsdWRlICJX
ZWJSZXBsYXlJbnB1dENvZGVycy5oIgogI2luY2x1ZGUgIldlYlJlcGxheUlucHV0cy5oIgogI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZXBsYXkvUmVwbGF5Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVw
bGF5Q29udHJvbGxlci5jcHAKaW5kZXggYjExY2UzMzVjOWRmMGMyZGFmNTUwZjQ1YmMyMDMyZGUx
ZDdiYzhjOS4uZTM3NGYxMGRmOGJmMDY2ZjU3MzkzMjQxZmJmN2IzNTNjY2QyZTQwNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxheUNvbnRyb2xsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlDb250cm9sbGVyLmNwcApAQCAtNDYsNyArNDYsNyBA
QAogI2luY2x1ZGUgIlJlcGxheVNlc3Npb25TZWdtZW50LmgiCiAjaW5jbHVkZSAiUmVwbGF5aW5n
SW5wdXRDdXJzb3IuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAi
U2VyaWFsaXphdGlvbk1ldGhvZHMuaCIKKyNpbmNsdWRlICJXZWJSZXBsYXlJbnB1dENvZGVycy5o
IgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVXNlcklucHV0QnJpZGdlLmgiCiAj
aW5jbHVkZSAiV2ViUmVwbGF5SW5wdXRzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZXBsYXkvUmVwbGF5SW5wdXRDcmVhdGlvbk1ldGhvZHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVw
bGF5L1JlcGxheUlucHV0Q3JlYXRpb25NZXRob2RzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOThjNWVmMGRmZjE0NzJjNDFmYTBkNDViZGJhZDAzNDFlMjExMDY0Ny4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZXBsYXkvUmVwbGF5SW5wdXRDcmVhdGlvbk1ldGhvZHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMKLSAqIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RAotICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBCi0gKiBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aWYgRU5BQkxFKFdFQl9SRVBMQVkpCi0KLSNpbmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXIu
aCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIk1haW5GcmFtZS5oIgotI2luY2x1
ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgIlNlcmlh
bGl6YXRpb25NZXRob2RzLmgiCi0jaW5jbHVkZSAiV2ViUmVwbGF5SW5wdXRzLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotc3RkOjp1bmlxdWVfcHRyPEluaXRpYWxOYXZpZ2F0aW9uPiBJbml0
aWFsTmF2aWdhdGlvbjo6Y3JlYXRlRnJvbVBhZ2UoY29uc3QgUGFnZSYgcGFnZSkKLXsKLSAgICBj
b25zdCBNYWluRnJhbWUmIG1haW5GcmFtZSA9IHBhZ2UubWFpbkZyYW1lKCk7Ci0gICAgQVNTRVJU
KG1haW5GcmFtZS5kb2N1bWVudCgpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoaXMgaXMg
aW4gc3luYyB3aXRoIFJlcGxheUNvbnRyb2xsZXI6OmJlZ2luQ2FwdHVyaW5nKCkuCi0gICAgUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW5Db3B5ID0gbWFpbkZyYW1lLmRvY3VtZW50KCktPnNl
Y3VyaXR5T3JpZ2luKCktPmlzb2xhdGVkQ29weSgpOwotICAgIFVSTCB1cmwgPSBtYWluRnJhbWUu
ZG9jdW1lbnQoKS0+dXJsKCk7Ci0gICAgU3RyaW5nIHJlZmVycmVyID0gbWFpbkZyYW1lLmxvYWRl
cigpLnJlZmVycmVyKCk7Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8SW5pdGlhbE5hdmln
YXRpb24+KFdURjo6bW92ZShvcmlnaW5Db3B5KSwgdXJsLCByZWZlcnJlcik7Ci19Ci0KLXN0ZDo6
dW5pcXVlX3B0cjxJbml0aWFsaXplSGlzdG9yeT4gSW5pdGlhbGl6ZUhpc3Rvcnk6OmNyZWF0ZUZy
b21QYWdlKGNvbnN0IFBhZ2UmIHBhZ2UpCi17Ci0gICAgaW50IGJhY2tDb3VudCA9IHBhZ2UuYmFj
a0ZvcndhcmQoKS5iYWNrQ291bnQoKTsKLSAgICBWZWN0b3I8UmVmUHRyPEhpc3RvcnlJdGVtPj4g
ZW50cmllcyhiYWNrQ291bnQgKyAxKTsKLQotICAgIC8vIE9ubHkgc2F2ZSBiYWNrd2FyZCBlbnRy
aWVzOyB0aGUgaW5pdGlhbCBuYXZpZ2F0aW9uIHdpbGwgdHJ1bmNhdGUgYW55IGZvcndhcmQgZW50
cmllcy4KLSAgICBmb3IgKGludCBpID0gLWJhY2tDb3VudDsgaSA8PSAwOyArK2kpCi0gICAgICAg
IGVudHJpZXNbaSArIGJhY2tDb3VudF0gPSBwYWdlLmJhY2tGb3J3YXJkKCkuaXRlbUF0SW5kZXgo
aSktPmNvcHkoKTsKLQotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEluaXRpYWxpemVIaXN0
b3J5PihlbnRyaWVzKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RU5BQkxFKFdFQl9SRVBMQVkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVw
bGF5SW5wdXREaXNwYXRjaE1ldGhvZHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxh
eUlucHV0RGlzcGF0Y2hNZXRob2RzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
Mjk1MDhjODQxODAyZDY3YjQ5ZjNhZjEzODQ1N2ExNjgxMTQ0ZWZjZS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVw
bGF5SW5wdXREaXNwYXRjaE1ldGhvZHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjE2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTCi0gKiBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLSAqIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQQotICogUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJM
RShXRUJfUkVQTEFZKQotCi0jaW5jbHVkZSAiQWxsUmVwbGF5SW5wdXRzLmgiCi0jaW5jbHVkZSAi
QmFja0ZvcndhcmRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiRE9NVGltZXIuaCIKLSNpbmNsdWRl
ICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJh
bWVMb2FkUmVxdWVzdC5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiSGlz
dG9yeUNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJNYWluRnJhbWUuaCIKLSNpbmNsdWRlICJOYXZp
Z2F0aW9uU2NoZWR1bGVyLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlJlcGxheUNv
bnRyb2xsZXIuaCIKLSNpbmNsdWRlICJSZXBsYXlhYmxlVGltZXJzLmgiCi0jaW5jbHVkZSAiUmVz
b3VyY2VFcnJvci5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgiCi0jaW5jbHVkZSAiUmVz
b3VyY2VSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiU2VyaWFsaXphdGlvbk1ldGhvZHMuaCIKLSNpbmNs
dWRlICJVUkwuaCIKLSNpbmNsdWRlICJVc2VySW5wdXRCcmlkZ2UuaCIKLSNpbmNsdWRlIDxjaW50
dHlwZXM+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIFJlc291cmNlTG9hZGVyKiBy
ZXNvdXJjZUxvYWRlckZvck9yZGluYWwoUGFnZSYgcGFnZSwgdW5zaWduZWQgbG9uZyBvcmRpbmFs
LCBpbnQgZnJhbWVJbmRleCkKLXsKLSAgICBGcmFtZSogZnJhbWUgPSBmcmFtZUZyb21GcmFtZUlu
ZGV4KCZwYWdlLCBmcmFtZUluZGV4KTsKLSAgICBBU1NFUlQoZnJhbWUpOwotCi0gICAgY29uc3Qg
VmVjdG9yPHVuc2lnbmVkIGxvbmc+JiB1c2VkSWRlbnRpZmllcnMgPSBmcmFtZS0+bWFpbkZyYW1l
KCkubG9hZGVyKCkuYWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+dXNlZElkZW50aWZpZXJzKCk7Ci0g
ICAgQVNTRVJUKG9yZGluYWwgPCB1c2VkSWRlbnRpZmllcnMuc2l6ZSgpKTsKLQotICAgIFJlZlB0
cjxSZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gZnJhbWUtPmxvYWRlcigpLmFjdGl2ZURvY3VtZW50
TG9hZGVyKCktPmxvYWRlckZvcklkZW50aWZpZXIodXNlZElkZW50aWZpZXJzLmF0KG9yZGluYWwp
KTsKLSAgICByZXR1cm4gbG9hZGVyID8gbG9hZGVyLmdldCgpIDogbnVsbHB0cjsKLX0KLQotLy8g
U2VudGluZWwgaW5wdXRzLgotdm9pZCBCZWdpblNlZ21lbnRTZW50aW5lbDo6ZGlzcGF0Y2goUGFn
ZSYpCi17Ci19Ci0KLXZvaWQgRW5kU2VnbWVudFNlbnRpbmVsOjpkaXNwYXRjaChQYWdlJikKLXsK
LX0KLQotLy8gTmF2aWdhdGlvbiBpbnB1dHMuCi12b2lkIEluaXRpYWxOYXZpZ2F0aW9uOjpkaXNw
YXRjaChQYWdlJiBwYWdlKQotewotICAgIHBhZ2UubWFpbkZyYW1lKCkubmF2aWdhdGlvblNjaGVk
dWxlcigpLnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UobV9zZWN1cml0eU9yaWdpbi5nZXQoKSwgbV91
cmwsIG1fcmVmZXJyZXIpOwotfQotCi12b2lkIExvYWRVUkxSZXF1ZXN0OjpkaXNwYXRjaChQYWdl
JiBwYWdlKQotewotICAgIHBhZ2UudXNlcklucHV0QnJpZGdlKCkubG9hZFJlcXVlc3QoKm1fbG9h
ZFJlcXVlc3QpOwotfQotCi12b2lkIFJlbG9hZEZyYW1lOjpkaXNwYXRjaChQYWdlJiBwYWdlKQot
ewotICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lSW5kZXgoJnBhZ2UsIG1fZnJhbWVJ
bmRleCk7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLQotICAgIHBhZ2UudXNlcklucHV0QnJpZGdlKCku
cmVsb2FkRnJhbWUoZnJhbWUsIG1fZW5kVG9FbmRSZWxvYWQsIElucHV0U291cmNlOjpTeW50aGV0
aWMpOwotfQotCi12b2lkIFN0b3BMb2FkaW5nRnJhbWU6OmRpc3BhdGNoKFBhZ2UmIHBhZ2UpCi17
Ci0gICAgRnJhbWUqIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVJbmRleCgmcGFnZSwgbV9mcmFtZUlu
ZGV4KTsKLSAgICBBU1NFUlQoZnJhbWUpOwotCi0gICAgcGFnZS51c2VySW5wdXRCcmlkZ2UoKS5z
dG9wTG9hZGluZ0ZyYW1lKGZyYW1lLCBJbnB1dFNvdXJjZTo6U3ludGhldGljKTsKLX0KLQotdm9p
ZCBUcnlDbG9zZVBhZ2U6OmRpc3BhdGNoKFBhZ2UmIHBhZ2UpCi17Ci0gICAgcGFnZS51c2VySW5w
dXRCcmlkZ2UoKS50cnlDbG9zZVBhZ2UoSW5wdXRTb3VyY2U6OlN5bnRoZXRpYyk7Ci19Ci0KLXZv
aWQgSW5pdGlhbGl6ZUhpc3Rvcnk6OmRpc3BhdGNoKFBhZ2UmIHBhZ2UpCi17Ci0gICAgcmV0dXJu
OyAvLyBIQUNLCi0KLSAgICAvLyBGSVhNRTogTG9hZCB0aGUgZW1wdHkgZG9jdW1lbnQsIHNvIHRo
YXQgd2hlbiB3ZSBwcnVuZSB0aGUgYmFjay1mb3J3YXJkIGxpc3QgaXQKLSAgICAvLyBpcyB0aGUg
c2luZ2xlIHJlbWFpbmluZyBlbnRyeS4gPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEzMTk4OT4KLSAg
ICBwYWdlLmJhY2tGb3J3YXJkKCkuY2xlYXIoKTsKLQotICAgIGZvciAoUmVmUHRyPEhpc3RvcnlJ
dGVtPiBoaXN0b3J5RW50cnkgOiBtX2VudHJpZXMpCi0gICAgICAgIHBhZ2UuYmFja0ZvcndhcmQo
KS5hZGRJdGVtKGhpc3RvcnlFbnRyeS0+Y29weSgpKTsKLQotICAgIHBhZ2UubWFpbkZyYW1lKCku
bG9hZGVyKCkuaGlzdG9yeSgpLnNldEN1cnJlbnRJdGVtKHBhZ2UuYmFja0ZvcndhcmQoKS5jdXJy
ZW50SXRlbSgpKTsKLX0KLQotdm9pZCBIYW5kbGVLZXlQcmVzczo6ZGlzcGF0Y2goUGFnZSYgcGFn
ZSkKLXsKLSAgICBwYWdlLnVzZXJJbnB1dEJyaWRnZSgpLmhhbmRsZUtleUV2ZW50KHBsYXRmb3Jt
RXZlbnQoKSwgSW5wdXRTb3VyY2U6OlN5bnRoZXRpYyk7Ci19Ci0KLS8vIFVzZXIgaW50ZXJhY3Rp
b24gaW5wdXRzLgotdm9pZCBIYW5kbGVNb3VzZU1vdmU6OmRpc3BhdGNoKFBhZ2UmIHBhZ2UpCi17
Ci0gICAgaWYgKG1fc2Nyb2xsYmFyVGFyZ2V0ZWQpCi0gICAgICAgIHBhZ2UudXNlcklucHV0QnJp
ZGdlKCkuaGFuZGxlTW91c2VNb3ZlT25TY3JvbGxiYXJFdmVudChwbGF0Zm9ybUV2ZW50KCksIElu
cHV0U291cmNlOjpTeW50aGV0aWMpOwotICAgIGVsc2UKLSAgICAgICAgcGFnZS51c2VySW5wdXRC
cmlkZ2UoKS5oYW5kbGVNb3VzZU1vdmVFdmVudChwbGF0Zm9ybUV2ZW50KCksIElucHV0U291cmNl
OjpTeW50aGV0aWMpOwotfQotCi12b2lkIEhhbmRsZU1vdXNlUHJlc3M6OmRpc3BhdGNoKFBhZ2Um
IHBhZ2UpCi17Ci0gICAgcGFnZS51c2VySW5wdXRCcmlkZ2UoKS5oYW5kbGVNb3VzZVByZXNzRXZl
bnQocGxhdGZvcm1FdmVudCgpLCBJbnB1dFNvdXJjZTo6U3ludGhldGljKTsKLX0KLQotdm9pZCBI
YW5kbGVNb3VzZVJlbGVhc2U6OmRpc3BhdGNoKFBhZ2UmIHBhZ2UpCi17Ci0gICAgcGFnZS51c2Vy
SW5wdXRCcmlkZ2UoKS5oYW5kbGVNb3VzZVJlbGVhc2VFdmVudChwbGF0Zm9ybUV2ZW50KCksIElu
cHV0U291cmNlOjpTeW50aGV0aWMpOwotfQotCi12b2lkIEhhbmRsZVdoZWVsRXZlbnQ6OmRpc3Bh
dGNoKFBhZ2UmIHBhZ2UpCi17Ci0gICAgcGFnZS51c2VySW5wdXRCcmlkZ2UoKS5oYW5kbGVXaGVl
bEV2ZW50KHBsYXRmb3JtRXZlbnQoKSwgSW5wdXRTb3VyY2U6OlN5bnRoZXRpYyk7Ci19Ci0KLXZv
aWQgTG9naWNhbFNjcm9sbFBhZ2U6OmRpc3BhdGNoKFBhZ2UmIHBhZ2UpCi17Ci0gICAgcGFnZS51
c2VySW5wdXRCcmlkZ2UoKS5sb2dpY2FsU2Nyb2xsUmVjdXJzaXZlbHkoZGlyZWN0aW9uKCksIGdy
YW51bGFyaXR5KCksIElucHV0U291cmNlOjpTeW50aGV0aWMpOwotfQotCi12b2lkIFNjcm9sbFBh
Z2U6OmRpc3BhdGNoKFBhZ2UmIHBhZ2UpCi17Ci0gICAgcGFnZS51c2VySW5wdXRCcmlkZ2UoKS5z
Y3JvbGxSZWN1cnNpdmVseShkaXJlY3Rpb24oKSwgZ3JhbnVsYXJpdHkoKSwgSW5wdXRTb3VyY2U6
OlN5bnRoZXRpYyk7Ci19Ci0KLS8vIE5ldHdvcmsgaW5wdXRzLgotdm9pZCBSZXNvdXJjZUxvYWRl
ckRpZEZhaWw6OmRpc3BhdGNoKFBhZ2UmIHBhZ2UpCi17Ci0gICAgaWYgKFJlc291cmNlTG9hZGVy
KiBsb2FkZXIgPSByZXNvdXJjZUxvYWRlckZvck9yZGluYWwocGFnZSwgb3JkaW5hbCgpLCBmcmFt
ZUluZGV4KCkpKQotICAgICAgICBsb2FkZXItPmRpZEZhaWwobV9lcnJvci0+Y29weSgpKTsKLSAg
ICAvLyBGSVhNRTogc2lnbmFsIGVycm9yIGlmIHRoZSBjYWxsYmFjayBjb3VsZG4ndCBiZSBmaXJl
ZC4KLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRlckRpZEZpbmlzaExvYWRpbmc6OmRpc3BhdGNoKFBh
Z2UmIHBhZ2UpCi17Ci0gICAgaWYgKFJlc291cmNlTG9hZGVyKiBsb2FkZXIgPSByZXNvdXJjZUxv
YWRlckZvck9yZGluYWwocGFnZSwgb3JkaW5hbCgpLCBmcmFtZUluZGV4KCkpKQotICAgICAgICBs
b2FkZXItPmRpZEZpbmlzaExvYWRpbmcobV9maW5pc2hUaW1lKTsKLSAgICAvLyBGSVhNRTogc2ln
bmFsIGVycm9yIGlmIHRoZSBjYWxsYmFjayBjb3VsZG4ndCBiZSBmaXJlZC4KLX0KLQotdm9pZCBS
ZXNvdXJjZUxvYWRlckRpZFJlY2VpdmVEYXRhOjpkaXNwYXRjaChQYWdlJiBwYWdlKQotewotICAg
IGlmIChSZXNvdXJjZUxvYWRlciogbG9hZGVyID0gcmVzb3VyY2VMb2FkZXJGb3JPcmRpbmFsKHBh
Z2UsIG9yZGluYWwoKSwgZnJhbWVJbmRleCgpKSkKLSAgICAgICAgbG9hZGVyLT5kaWRSZWNlaXZl
RGF0YShidWZmZXIoKS0+ZGF0YSgpLCBidWZmZXIoKS0+c2l6ZSgpLCBlbmNvZGVkTGVuZ3RoKCks
IERhdGFQYXlsb2FkQnl0ZXMpOwotICAgIC8vIEZJWE1FOiBzaWduYWwgZXJyb3IgaWYgdGhlIGNh
bGxiYWNrIGNvdWxkbid0IGJlIGZpcmVkLgotfQotCi12b2lkIFJlc291cmNlTG9hZGVyRGlkUmVj
ZWl2ZVJlc3BvbnNlOjpkaXNwYXRjaChQYWdlJiBwYWdlKQotewotICAgIGlmIChSZXNvdXJjZUxv
YWRlciogbG9hZGVyID0gcmVzb3VyY2VMb2FkZXJGb3JPcmRpbmFsKHBhZ2UsIG9yZGluYWwoKSwg
ZnJhbWVJbmRleCgpKSkKLSAgICAgICAgbG9hZGVyLT5kaWRSZWNlaXZlUmVzcG9uc2UoKm1fcmVz
cG9uc2UpOwotICAgIC8vIEZJWE1FOiBzaWduYWwgZXJyb3IgaWYgdGhlIGNhbGxiYWNrIGNvdWxk
bid0IGJlIGZpcmVkLgotfQotCi12b2lkIFJlc291cmNlTG9hZGVyRGlkU2VuZERhdGE6OmRpc3Bh
dGNoKFBhZ2UmIHBhZ2UpCi17Ci0gICAgaWYgKFJlc291cmNlTG9hZGVyKiBsb2FkZXIgPSByZXNv
dXJjZUxvYWRlckZvck9yZGluYWwocGFnZSwgb3JkaW5hbCgpLCBmcmFtZUluZGV4KCkpKQotICAg
ICAgICBsb2FkZXItPmRpZFNlbmREYXRhKG1fYnl0ZXNTZW50LCBtX3RvdGFsQnl0ZXNUb0JlU2Vu
dCk7Ci0gICAgLy8gRklYTUU6IHNpZ25hbCBlcnJvciBpZiB0aGUgY2FsbGJhY2sgY291bGRuJ3Qg
YmUgZmlyZWQuCi19Ci0KLS8vIE90aGVyIGV2ZW50IGxvb3AgaW5wdXRzLgotdm9pZCBBc3luY1Rp
bWVyRmlyZWQ6OmRpc3BhdGNoKFBhZ2UmIHBhZ2UpCi17Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gZG9jdW1lbnRGcm9tRnJhbWVJbmRleCgmcGFnZSwgbV9mcmFtZUluZGV4KTsKLSAgICBpZiAo
IWRvY3VtZW50IHx8ICFkb2N1bWVudC0+cmVwbGF5YWJsZVRpbWVycygpLmZpcmVUaW1lcihtX29y
ZGluYWwpKQotICAgICAgICBMT0dfRVJST1IoIiUtMzBzIFJFUExBWSBESVZFUkdFTkNFISBDb3Vs
ZG4ndCBmaW5kIGFzeW5jIHRpbWVyICVkLyUiIFBSSXU2NCAiLlxuIiwgIltSZXBsYXlDb250cm9s
bGVyXSIsIG1fZnJhbWVJbmRleCwgbV9vcmRpbmFsKTsKLX0KLQotdm9pZCBET01UaW1lckZpcmVk
OjpkaXNwYXRjaChQYWdlJiBwYWdlKQotewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGRvY3Vt
ZW50RnJvbUZyYW1lSW5kZXgoJnBhZ2UsIG1fZnJhbWVJbmRleCk7Ci0gICAgRE9NVGltZXIqIHRp
bWVyID0gZG9jdW1lbnQtPmZpbmRUaW1lb3V0KG1fdGltZXJJZGVudGlmaWVyKTsKLSAgICBpZiAo
dGltZXIpCi0gICAgICAgIHRpbWVyLT5maXJlZCgpOwotICAgIGVsc2UKLSAgICAgICBMT0dfRVJS
T1IoIlJFUExBWSBESVZFUkdFTkNFISBDb3VsZG4ndCBmaW5kIGFuZCBmaXJlIERPTSB0aW1lciAl
IiBQUkl1MzIgIi8lIiBQUkl1MzIgIi5cbiIsIG1fZnJhbWVJbmRleCwgbV90aW1lcklkZW50aWZp
ZXIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VC
X1JFUExBWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlhYmxlVGlt
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxheWFibGVUaW1lci5jcHAKaW5kZXgg
MzdmYWYyY2VlZDYyOGU4MzIyNzM3NjlkNjFmMTEzYWU1NjBlODVjMC4uNmU2YmVlOWI2YWE0Y2M0
NWRlM2U3YWEyMmI1NjY1M2IyYjcwYzg3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVw
bGF5L1JlcGxheWFibGVUaW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxh
eWFibGVUaW1lci5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJSZXBsYXlhYmxlVGltZXJzLmgiCi0jaW5j
bHVkZSAiU2VyaWFsaXphdGlvbk1ldGhvZHMuaCIKKyNpbmNsdWRlICJXZWJSZXBsYXlJbnB1dENv
ZGVycy5oIgogI2luY2x1ZGUgIldlYlJlcGxheUlucHV0cy5oIgogI2luY2x1ZGUgPHJlcGxheS9J
bnB1dEN1cnNvci5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5
aW5nSW5wdXRDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxheWluZ0lucHV0
Q3Vyc29yLmNwcAppbmRleCAwYmEzNzBhMWEzNDMwM2NmZWYyNzJkNjJiMGUwODZmNjVkNjc3MjZm
Li44NWQ3NDQyYTc5NGUxMzYxMDc4N2M0ZDM4N2UyOTJjOTczMDg1ZjQ3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5aW5nSW5wdXRDdXJzb3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlpbmdJbnB1dEN1cnNvci5jcHAKQEAgLTMzLDcgKzMzLDcg
QEAKICNpbmNsdWRlICJFdmVudExvb3BJbnB1dERpc3BhdGNoZXIuaCIKICNpbmNsdWRlICJSZXBs
YXlTZXNzaW9uU2VnbWVudC5oIgogI2luY2x1ZGUgIlNlZ21lbnRlZElucHV0U3RvcmFnZS5oIgot
I2luY2x1ZGUgIlNlcmlhbGl6YXRpb25NZXRob2RzLmgiCisjaW5jbHVkZSAiV2ViUmVwbGF5SW5w
dXRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJSZXBsYXlJbnB1dHMuaCIKICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9TZWdt
ZW50ZWRJbnB1dFN0b3JhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5L1NlZ21lbnRlZElu
cHV0U3RvcmFnZS5jcHAKaW5kZXggOTNmZWU4Y2JhZTNkMDJkOWU3YWU5MmEyOTNmNDEyODdmY2Fj
NmJmYS4uYjllOWM3YjM0NTNhZjg1N2IxYTkwYzc4MTU3MzdjOTkyNTI4YjdlNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVwbGF5L1NlZ21lbnRlZElucHV0U3RvcmFnZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVwbGF5L1NlZ21lbnRlZElucHV0U3RvcmFnZS5jcHAKQEAgLTMyLDcg
KzMyLDcgQEAKIAogI2lmICFMT0dfRElTQUJMRUQKICNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5j
bHVkZSAiU2VyaWFsaXphdGlvbk1ldGhvZHMuaCIKKyNpbmNsdWRlICJXZWJSZXBsYXlJbnB1dENv
ZGVycy5oIgogI2luY2x1ZGUgPHJlcGxheS9FbmNvZGVkVmFsdWUuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvU2VyaWFsaXphdGlvbk1ldGhvZHMuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVwbGF5L1NlcmlhbGl6YXRpb25NZXRob2RzLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOWMzOWY0YTJlNzZhZTdiMzEzZDYzM2EzMzMzOWVmYzg3NzdmYjAy
Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZXBsYXkvU2VyaWFsaXphdGlvbk1ldGhvZHMuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTAyNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUyAiQVMKLSAqIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotICogVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCi0gKiBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNlcmlhbGl6YXRpb25NZXRob2Rz
LmgiCi0KLSNpZiBFTkFCTEUoV0VCX1JFUExBWSkKLQotI2luY2x1ZGUgIkFsbFJlcGxheUlucHV0
cy5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRm9ybURhdGEuaCIKLSNpbmNs
dWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKLSNpbmNsdWRlICJG
cmFtZVRyZWUuaCIKLSNpbmNsdWRlICJIVFRQSGVhZGVyTWFwLmgiCi0jaW5jbHVkZSAiSGlzdG9y
eUl0ZW0uaCIKLSNpbmNsdWRlICJNYWluRnJhbWUuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5j
bHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2
ZW50LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCi0jaW5jbHVkZSAiUGx1Z2lu
RGF0YS5oIgotI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxv
YWRUaW1pbmcuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJSZXNv
dXJjZVJlc3BvbnNlLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJT
ZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNs
dWRlICJTdWJzdGl0dXRlRGF0YS5oIgotI2luY2x1ZGUgIlVSTC5oIgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0Jhc2U2NC5oPgotCi11c2luZyBXZWJDb3JlOjpGb3JtRGF0YTsKLXVzaW5nIFdlYkNvcmU6
OkZvcm1EYXRhRWxlbWVudDsKLXVzaW5nIFdlYkNvcmU6OkZyYW1lTG9hZFJlcXVlc3Q7Ci11c2lu
ZyBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwOwotdXNpbmcgV2ViQ29yZTo6SGlzdG9yeUl0ZW07Ci11
c2luZyBXZWJDb3JlOjpJbnRQb2ludDsKLXVzaW5nIFdlYkNvcmU6Ok1pbWVDbGFzc0luZm87Ci11
c2luZyBXZWJDb3JlOjpNb3VzZUJ1dHRvbjsKLXVzaW5nIFdlYkNvcmU6OlBsYXRmb3JtRXZlbnQ7
Ci11c2luZyBXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQ7Ci11c2luZyBXZWJDb3JlOjpQ
bGF0Zm9ybU1vdXNlRXZlbnQ7Ci11c2luZyBXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQ7Ci11
c2luZyBXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRHcmFudWxhcml0eTsKLXVzaW5nIFdlYkNv
cmU6OlBsdWdpbkRhdGE7Ci11c2luZyBXZWJDb3JlOjpQbHVnaW5JbmZvOwotdXNpbmcgV2ViQ29y
ZTo6UmVzb3VyY2VFcnJvcjsKLXVzaW5nIFdlYkNvcmU6OlJlc291cmNlTG9hZFRpbWluZzsKLXVz
aW5nIFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5OwotdXNpbmcgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0OwotdXNpbmcgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3k7Ci11
c2luZyBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOwotdXNpbmcgV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW47Ci11c2luZyBXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU7Ci11c2luZyBXZWJD
b3JlOjpTaGFyZWRCdWZmZXI7Ci11c2luZyBXZWJDb3JlOjpTdWJzdGl0dXRlRGF0YTsKLXVzaW5n
IFdlYkNvcmU6OlVSTDsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotdXNpbmcgV2ViQ29yZTo6S2V5
cHJlc3NDb21tYW5kOwotdXNpbmcgV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2U7Ci0j
ZW5kaWYKLQotI2RlZmluZSBJTVBPUlRfRlJPTV9XRUJDT1JFX05BTUVTUEFDRShuYW1lKSBcCi11
c2luZyBXZWJDb3JlOjpuYW1lOyBcCi0KLVdFQl9SRVBMQVlfSU5QVVRfTkFNRVNfRk9SX0VBQ0go
SU1QT1JUX0ZST01fV0VCQ09SRV9OQU1FU1BBQ0UpCi0jdW5kZWYgSU1QT1JUX0ZST01fV0VCQ09S
RV9OQU1FU1BBQ0UKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11aW50MzJfdCBmcmFtZUluZGV4
RnJvbURvY3VtZW50KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBBU1NFUlQoZG9j
dW1lbnQpOwotICAgIEFTU0VSVChkb2N1bWVudC0+ZnJhbWUoKSk7Ci0gICAgcmV0dXJuIGZyYW1l
SW5kZXhGcm9tRnJhbWUoZG9jdW1lbnQtPmZyYW1lKCkpOwotfQotCi11aW50MzJfdCBmcmFtZUlu
ZGV4RnJvbUZyYW1lKGNvbnN0IEZyYW1lKiB0YXJnZXRGcmFtZSkKLXsKLSAgICBBU1NFUlQodGFy
Z2V0RnJhbWUpOwotCi0gICAgdWludDMyX3QgY3VycmVudEluZGV4ID0gMDsKLSAgICBmb3IgKGNv
bnN0IEZyYW1lKiBmcmFtZSA9ICZ0YXJnZXRGcmFtZS0+dHJlZSgpLnRvcCgpOyBmcmFtZTsgKytj
dXJyZW50SW5kZXgsIGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAg
ICAgICBpZiAoZnJhbWUgPT0gdGFyZ2V0RnJhbWUpCi0gICAgICAgICAgICByZXR1cm4gY3VycmVu
dEluZGV4OwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAw
OwotfQotCi1Eb2N1bWVudCogZG9jdW1lbnRGcm9tRnJhbWVJbmRleChQYWdlKiBwYWdlLCB1aW50
MzJfdCBmcmFtZUluZGV4KQotewotICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lSW5k
ZXgocGFnZSwgZnJhbWVJbmRleCk7Ci0gICAgcmV0dXJuIGZyYW1lID8gZnJhbWUtPmRvY3VtZW50
KCkgOiBudWxscHRyOwotfQotCi1GcmFtZSogZnJhbWVGcm9tRnJhbWVJbmRleChQYWdlKiBwYWdl
LCB1aW50MzJfdCBmcmFtZUluZGV4KQotewotICAgIEFTU0VSVChwYWdlKTsKLSAgICBBU1NFUlQo
ZnJhbWVJbmRleCA+PSAwKTsKLQotICAgIEZyYW1lKiBmcmFtZSA9ICZwYWdlLT5tYWluRnJhbWUo
KTsKLSAgICB1aW50MzJfdCBjdXJyZW50SW5kZXggPSAwOwotICAgIGZvciAoOyBjdXJyZW50SW5k
ZXggPCBmcmFtZUluZGV4ICYmIGZyYW1lOyArK2N1cnJlbnRJbmRleCwgZnJhbWUgPSBmcmFtZS0+
dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7IH0KLQotICAgIHJldHVybiBmcmFtZTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZGVmaW5lIEVOQ09ERV9UWVBFX1dJVEhfS0VZKF9lbmNv
ZGVkVmFsdWUsIF90eXBlLCBfa2V5LCBfdmFsdWUpIFwKLSAgICBfZW5jb2RlZFZhbHVlLnB1dDxf
dHlwZT4oQVNDSUlMaXRlcmFsKCNfa2V5KSwgX3ZhbHVlKQotCi0jZGVmaW5lIEVOQ09ERV9PUFRJ
T05BTF9UWVBFX1dJVEhfS0VZKF9lbmNvZGVkVmFsdWUsIF90eXBlLCBfa2V5LCBfdmFsdWUsIGNv
bmRpdGlvbikgXAotICAgIGlmIChjb25kaXRpb24pIFwKLSAgICAgICAgRU5DT0RFX1RZUEVfV0lU
SF9LRVkoX2VuY29kZWRWYWx1ZSwgX3R5cGUsIF9rZXksIF92YWx1ZSkKLQotI2RlZmluZSBERUNP
REVfVFlQRV9XSVRIX0tFWV9UT19MVkFMVUUoX2VuY29kZWRWYWx1ZSwgX3R5cGUsIF9rZXksIF9s
dmFsdWUpIFwKLSAgICBpZiAoIV9lbmNvZGVkVmFsdWUuZ2V0PF90eXBlPihBU0NJSUxpdGVyYWwo
I19rZXkpLCBfbHZhbHVlKSkgXAotICAgICAgICByZXR1cm4gZmFsc2UKLQotI2RlZmluZSBERUNP
REVfVFlQRV9XSVRIX0tFWShfZW5jb2RlZFZhbHVlLCBfdHlwZSwgX2tleSkgXAotICAgIEVuY29k
aW5nVHJhaXRzPF90eXBlPjo6RGVjb2RlZFR5cGUgX2tleTsgXAotICAgIERFQ09ERV9UWVBFX1dJ
VEhfS0VZX1RPX0xWQUxVRShfZW5jb2RlZFZhbHVlLCBfdHlwZSwgX2tleSwgX2tleSkKLQotI2Rl
ZmluZSBERUNPREVfT1BUSU9OQUxfVFlQRV9XSVRIX0tFWV9UT19MVkFMVUUoX2VuY29kZWRWYWx1
ZSwgX3R5cGUsIF9rZXksIF9sdmFsdWUpIFwKLSAgICBib29sIF9rZXkgIyMgV2FzRGVjb2RlZCA9
IF9lbmNvZGVkVmFsdWUuZ2V0PF90eXBlPihBU0NJSUxpdGVyYWwoI19rZXkpLCBfbHZhbHVlKQot
Ci0jZGVmaW5lIERFQ09ERV9PUFRJT05BTF9UWVBFX1dJVEhfS0VZKF9lbmNvZGVkVmFsdWUsIF90
eXBlLCBfa2V5KSBcCi0gICAgRW5jb2RpbmdUcmFpdHM8X3R5cGU+OjpEZWNvZGVkVHlwZSBfa2V5
OyBcCi0gICAgREVDT0RFX09QVElPTkFMX1RZUEVfV0lUSF9LRVlfVE9fTFZBTFVFKF9lbmNvZGVk
VmFsdWUsIF90eXBlLCBfa2V5LCBfa2V5KQotCi1uYW1lc3BhY2UgSlNDIHsKLQotRW5jb2RlZFZh
bHVlIEVuY29kaW5nVHJhaXRzPEZvcm1EYXRhPjo6ZW5jb2RlVmFsdWUoUmVmUHRyPEZvcm1EYXRh
PiBkYXRhKQotewotICAgIEVuY29kZWRWYWx1ZSBlbmNvZGVkRGF0YSA9IEVuY29kZWRWYWx1ZTo6
Y3JlYXRlT2JqZWN0KCk7Ci0KLSAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwg
Ym9vbCwgYWx3YXlzU3RyZWFtLCBkYXRhLT5hbHdheXNTdHJlYW0oKSk7Ci0gICAgRU5DT0RFX1RZ
UEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFZlY3RvcjxjaGFyPiwgYm91bmRhcnksIGRhdGEtPmJv
dW5kYXJ5KCkpOwotICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBWZWN0b3I8
Rm9ybURhdGFFbGVtZW50PiwgZWxlbWVudHMsIGRhdGEtPmVsZW1lbnRzKCkpOwotICAgIEVOQ09E
RV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBpbnQ2NF90LCBpZGVudGlmaWVyLCBkYXRhLT5p
ZGVudGlmaWVyKCkpOwotCi0gICAgcmV0dXJuIGVuY29kZWREYXRhOwotfQotCi1jbGFzcyBEZXNl
cmlhbGl6ZWRGb3JtRGF0YSA6IHB1YmxpYyBGb3JtRGF0YSB7Ci1wdWJsaWM6Ci0gICAgRGVzZXJp
YWxpemVkRm9ybURhdGEoYm9vbCBhbHdheXNTdHJlYW0sIFZlY3RvcjxjaGFyPiBib3VuZGFyeSwg
VmVjdG9yPEZvcm1EYXRhRWxlbWVudD4gZWxlbWVudHMsIGludDY0X3QgaWRlbnRpZmllcikKLSAg
ICB7Ci0gICAgICAgIG1fYWx3YXlzU3RyZWFtID0gYWx3YXlzU3RyZWFtOwotICAgICAgICBtX2Jv
dW5kYXJ5ID0gYm91bmRhcnk7Ci0gICAgICAgIG1fZWxlbWVudHMgPSBlbGVtZW50czsKLSAgICAg
ICAgbV9pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKLSAgICB9Ci19OwotCi1ib29sIEVuY29kaW5n
VHJhaXRzPEZvcm1EYXRhPjo6ZGVjb2RlVmFsdWUoRW5jb2RlZFZhbHVlJiBlbmNvZGVkRGF0YSwg
UmVmUHRyPEZvcm1EYXRhPiYgZm9ybURhdGEpCi17Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVko
ZW5jb2RlZERhdGEsIGJvb2wsIGFsd2F5c1N0cmVhbSk7Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9L
RVkoZW5jb2RlZERhdGEsIFZlY3RvcjxjaGFyPiwgYm91bmRhcnkpOwotICAgIERFQ09ERV9UWVBF
X1dJVEhfS0VZKGVuY29kZWREYXRhLCBWZWN0b3I8Rm9ybURhdGFFbGVtZW50PiwgZWxlbWVudHMp
OwotICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBpbnQ2NF90LCBpZGVudGlm
aWVyKTsKLQotICAgIGZvcm1EYXRhID0gYWRvcHRSZWYobmV3IERlc2VyaWFsaXplZEZvcm1EYXRh
KGFsd2F5c1N0cmVhbSwgYm91bmRhcnksIGVsZW1lbnRzLCBpZGVudGlmaWVyKSk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlPD4KLUVuY29kZWRWYWx1ZSBFbmNvZGluZ1RyYWl0czxG
b3JtRGF0YUVsZW1lbnQ+OjplbmNvZGVWYWx1ZShjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGVsZW1l
bnQpCi17Ci0gICAgRW5jb2RlZFZhbHVlIGVuY29kZWREYXRhID0gRW5jb2RlZFZhbHVlOjpjcmVh
dGVPYmplY3QoKTsKLQotICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBGb3Jt
RGF0YUVsZW1lbnQ6OlR5cGUsIHR5cGUsIGVsZW1lbnQubV90eXBlKTsKLSAgICBzd2l0Y2ggKGVs
ZW1lbnQubV90eXBlKSB7Ci0gICAgY2FzZSBGb3JtRGF0YUVsZW1lbnQ6OlR5cGU6OkRhdGE6Ci0g
ICAgICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBWZWN0b3I8Y2hhcj4sIGRh
dGEsIGVsZW1lbnQubV9kYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb3JtRGF0YUVs
ZW1lbnQ6OlR5cGU6OkVuY29kZWRGaWxlOgotICAgICAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShl
bmNvZGVkRGF0YSwgU3RyaW5nLCBmaWxlbmFtZSwgZWxlbWVudC5tX2ZpbGVuYW1lKTsKLSAgICAg
ICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGJvb2wsIHNob3VsZEdlbmVyYXRl
RmlsZSwgZWxlbWVudC5tX3Nob3VsZEdlbmVyYXRlRmlsZSk7Ci0gICAgICAgIEVOQ09ERV9UWVBF
X1dJVEhfS0VZKGVuY29kZWREYXRhLCBsb25nIGxvbmcsIGZpbGVTdGFydCwgZWxlbWVudC5tX2Zp
bGVTdGFydCk7Ci0gICAgICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBsb25n
IGxvbmcsIGZpbGVMZW5ndGgsIGVsZW1lbnQubV9maWxlTGVuZ3RoKTsKLSAgICAgICAgRU5DT0RF
X1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGRvdWJsZSwgZXhwZWN0ZWRGaWxlTW9kaWZpY2F0
aW9uVGltZSwgZWxlbWVudC5tX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEZvcm1EYXRhRWxlbWVudDo6VHlwZTo6RW5jb2RlZEJsb2I6Ci0g
ICAgICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBVUkwsIGJsb2JVUkwsIGVs
ZW1lbnQubV91cmwpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gZW5jb2Rl
ZERhdGE7Ci19Ci0KLXRlbXBsYXRlPD4KLWJvb2wgRW5jb2RpbmdUcmFpdHM8Rm9ybURhdGFFbGVt
ZW50Pjo6ZGVjb2RlVmFsdWUoRW5jb2RlZFZhbHVlJiBlbmNvZGVkRGF0YSwgRm9ybURhdGFFbGVt
ZW50JiBlbGVtZW50KQotewotICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZX1RPX0xWQUxVRShlbmNv
ZGVkRGF0YSwgRm9ybURhdGFFbGVtZW50OjpUeXBlLCB0eXBlLCBlbGVtZW50Lm1fdHlwZSk7Ci0g
ICAgc3dpdGNoIChlbGVtZW50Lm1fdHlwZSkgewotICAgIGNhc2UgRm9ybURhdGFFbGVtZW50OjpU
eXBlOjpEYXRhOgotICAgICAgICBERUNPREVfVFlQRV9XSVRIX0tFWV9UT19MVkFMVUUoZW5jb2Rl
ZERhdGEsIFZlY3RvcjxjaGFyPiwgZGF0YSwgZWxlbWVudC5tX2RhdGEpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZvcm1EYXRhRWxlbWVudDo6VHlwZTo6RW5jb2RlZEZpbGU6Ci0gICAgICAg
IERFQ09ERV9UWVBFX1dJVEhfS0VZX1RPX0xWQUxVRShlbmNvZGVkRGF0YSwgU3RyaW5nLCBmaWxl
bmFtZSwgZWxlbWVudC5tX2ZpbGVuYW1lKTsKLSAgICAgICAgREVDT0RFX1RZUEVfV0lUSF9LRVlf
VE9fTFZBTFVFKGVuY29kZWREYXRhLCBib29sLCBzaG91bGRHZW5lcmF0ZUZpbGUsIGVsZW1lbnQu
bV9zaG91bGRHZW5lcmF0ZUZpbGUpOwotICAgICAgICBERUNPREVfVFlQRV9XSVRIX0tFWV9UT19M
VkFMVUUoZW5jb2RlZERhdGEsIGxvbmcgbG9uZywgZmlsZVN0YXJ0LCBlbGVtZW50Lm1fZmlsZVN0
YXJ0KTsKLSAgICAgICAgREVDT0RFX1RZUEVfV0lUSF9LRVlfVE9fTFZBTFVFKGVuY29kZWREYXRh
LCBsb25nIGxvbmcsIGZpbGVMZW5ndGgsIGVsZW1lbnQubV9maWxlTGVuZ3RoKTsKLSAgICAgICAg
REVDT0RFX1RZUEVfV0lUSF9LRVlfVE9fTFZBTFVFKGVuY29kZWREYXRhLCBkb3VibGUsIGV4cGVj
dGVkRmlsZU1vZGlmaWNhdGlvblRpbWUsIGVsZW1lbnQubV9leHBlY3RlZEZpbGVNb2RpZmljYXRp
b25UaW1lKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb3JtRGF0YUVsZW1lbnQ6OlR5cGU6
OkVuY29kZWRCbG9iOgotICAgICAgICBERUNPREVfVFlQRV9XSVRIX0tFWV9UT19MVkFMVUUoZW5j
b2RlZERhdGEsIFVSTCwgYmxvYlVSTCwgZWxlbWVudC5tX3VybCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1FbmNvZGVkVmFsdWUgRW5jb2RpbmdUcmFp
dHM8RnJhbWVMb2FkUmVxdWVzdD46OmVuY29kZVZhbHVlKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3Qm
IHJlcXVlc3QpCi17Ci0gICAgRW5jb2RlZFZhbHVlIGVuY29kZWREYXRhID0gRW5jb2RlZFZhbHVl
OjpjcmVhdGVPYmplY3QoKTsKLQotICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRh
LCBTdHJpbmcsIHNlY3VyaXR5T3JpZ2luLCByZXF1ZXN0LnJlcXVlc3RlcigpID8gcmVxdWVzdC5y
ZXF1ZXN0ZXIoKS0+dG9TdHJpbmcoKSA6ICIiKTsKLSAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShl
bmNvZGVkRGF0YSwgUmVzb3VyY2VSZXF1ZXN0LCByZXNvdXJjZVJlcXVlc3QsIHJlcXVlc3QucmVz
b3VyY2VSZXF1ZXN0KCkpOwotICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBT
dHJpbmcsIGZyYW1lTmFtZSwgcmVxdWVzdC5mcmFtZU5hbWUoKSk7Ci0gICAgRU5DT0RFX1RZUEVf
V0lUSF9LRVkoZW5jb2RlZERhdGEsIGJvb2wsIHNob3VsZENoZWNrTmV3V2luZG93UG9saWN5LCBy
ZXF1ZXN0LnNob3VsZENoZWNrTmV3V2luZG93UG9saWN5KCkpOwotICAgIEVOQ09ERV9PUFRJT05B
TF9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBTdWJzdGl0dXRlRGF0YSwgc3Vic3RpdHV0ZURh
dGEsIHJlcXVlc3Quc3Vic3RpdHV0ZURhdGEoKSwgcmVxdWVzdC5oYXNTdWJzdGl0dXRlRGF0YSgp
KTsKLQotICAgIHJldHVybiBlbmNvZGVkRGF0YTsKLX0KLQotYm9vbCBFbmNvZGluZ1RyYWl0czxG
cmFtZUxvYWRSZXF1ZXN0Pjo6ZGVjb2RlVmFsdWUoRW5jb2RlZFZhbHVlJiBlbmNvZGVkRGF0YSwg
c3RkOjp1bmlxdWVfcHRyPEZyYW1lTG9hZFJlcXVlc3Q+JiBkZWNvZGVkUmVxdWVzdCkKLXsKLSAg
ICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgU2VjdXJpdHlPcmlnaW4sIHNlY3Vy
aXR5T3JpZ2luKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVzb3VyY2VSZXF1ZXN0PiByZXNvdXJj
ZVJlcXVlc3Q7Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVlfVE9fTFZBTFVFKGVuY29kZWREYXRh
LCBSZXNvdXJjZVJlcXVlc3QsIHJlc291cmNlUmVxdWVzdCwgcmVzb3VyY2VSZXF1ZXN0KTsKLSAg
ICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgU3RyaW5nLCBmcmFtZU5hbWUpOwot
ICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBib29sLCBzaG91bGRDaGVja05l
d1dpbmRvd1BvbGljeSk7Ci0gICAgREVDT0RFX09QVElPTkFMX1RZUEVfV0lUSF9LRVkoZW5jb2Rl
ZERhdGEsIFN1YnN0aXR1dGVEYXRhLCBzdWJzdGl0dXRlRGF0YSk7Ci0KLSAgICBkZWNvZGVkUmVx
dWVzdCA9IHN0ZDo6bWFrZV91bmlxdWU8RnJhbWVMb2FkUmVxdWVzdD4oc2VjdXJpdHlPcmlnaW4u
Z2V0KCksICpyZXNvdXJjZVJlcXVlc3QpOwotICAgIGRlY29kZWRSZXF1ZXN0LT5zZXRGcmFtZU5h
bWUoZnJhbWVOYW1lKTsKLSAgICBkZWNvZGVkUmVxdWVzdC0+c2V0U2hvdWxkQ2hlY2tOZXdXaW5k
b3dQb2xpY3koc2hvdWxkQ2hlY2tOZXdXaW5kb3dQb2xpY3kpOwotCi0gICAgaWYgKHN1YnN0aXR1
dGVEYXRhV2FzRGVjb2RlZCkKLSAgICAgICAgZGVjb2RlZFJlcXVlc3QtPnNldFN1YnN0aXR1dGVE
YXRhKHN1YnN0aXR1dGVEYXRhKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1FbmNvZGVkVmFs
dWUgRW5jb2RpbmdUcmFpdHM8SFRUUEhlYWRlck1hcD46OmVuY29kZVZhbHVlKGNvbnN0IEhUVFBI
ZWFkZXJNYXAmIGhlYWRlck1hcCkKLXsKLSAgICBFbmNvZGVkVmFsdWUgZW5jb2RlZERhdGEgPSBF
bmNvZGVkVmFsdWU6OmNyZWF0ZU9iamVjdCgpOwotICAgIEVuY29kZWRWYWx1ZSBlbmNvZGVkS2V5
cyA9IEVuY29kZWRWYWx1ZTo6Y3JlYXRlQXJyYXkoKTsKLSAgICBFbmNvZGVkVmFsdWUgZW5jb2Rl
ZFZhbHVlcyA9IEVuY29kZWRWYWx1ZTo6Y3JlYXRlQXJyYXkoKTsKLQotICAgIGZvciAoYXV0byBp
dCA9IGhlYWRlck1hcC5iZWdpbigpOyBpdCAhPSBoZWFkZXJNYXAuZW5kKCk7ICsraXQpIHsKLSAg
ICAgICAgZW5jb2RlZEtleXMuYXBwZW5kPFN0cmluZz4oaXQtPmtleSk7Ci0gICAgICAgIGVuY29k
ZWRWYWx1ZXMuYXBwZW5kPFN0cmluZz4oaXQtPnZhbHVlKTsKLSAgICB9Ci0KLSAgICBFTkNPREVf
VFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgRW5jb2RlZFZhbHVlLCBrZXlzLCBlbmNvZGVkS2V5
cyk7Ci0gICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIEVuY29kZWRWYWx1ZSwg
dmFsdWVzLCBlbmNvZGVkVmFsdWVzKTsKLQotICAgIHJldHVybiBlbmNvZGVkRGF0YTsKLX0KLQot
Ym9vbCBFbmNvZGluZ1RyYWl0czxIVFRQSGVhZGVyTWFwPjo6ZGVjb2RlVmFsdWUoRW5jb2RlZFZh
bHVlJiBlbmNvZGVkRGF0YSwgc3RkOjp1bmlxdWVfcHRyPEhUVFBIZWFkZXJNYXA+JiBkZWNvZGVk
VmFsdWUpCi17Ci0gICAgYXV0byBkZWNvZGVkSGVhZGVyTWFwID0gc3RkOjptYWtlX3VuaXF1ZTxI
VFRQSGVhZGVyTWFwPigpOwotCi0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEs
IFZlY3RvcjxTdHJpbmc+LCBrZXlzKTsKLSAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVk
RGF0YSwgVmVjdG9yPFN0cmluZz4sIHZhbHVlcyk7Ci0KLSAgICBpZiAoa2V5cy5zaXplKCkgIT0g
dmFsdWVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKQotICAgICAgICBkZWNvZGVkSGVhZGVyTWFwLT5h
ZGQoa2V5c1tpXSwgdmFsdWVzW2ldKTsKLQotICAgIGRlY29kZWRWYWx1ZSA9IHN0ZDo6bW92ZShk
ZWNvZGVkSGVhZGVyTWFwKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGU8PgotRW5j
b2RlZFZhbHVlIEVuY29kaW5nVHJhaXRzPE1pbWVDbGFzc0luZm8+OjplbmNvZGVWYWx1ZShjb25z
dCBNaW1lQ2xhc3NJbmZvJiBpbnB1dCkKLXsKLSAgICBFbmNvZGVkVmFsdWUgZW5jb2RlZERhdGEg
PSBFbmNvZGVkVmFsdWU6OmNyZWF0ZU9iamVjdCgpOwotCi0gICAgRU5DT0RFX1RZUEVfV0lUSF9L
RVkoZW5jb2RlZERhdGEsIFN0cmluZywgdHlwZSwgaW5wdXQudHlwZSk7Ci0gICAgRU5DT0RFX1RZ
UEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFN0cmluZywgZGVzYywgaW5wdXQuZGVzYyk7Ci0gICAg
RU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFZlY3RvcjxTdHJpbmc+LCBleHRlbnNp
b25zLCBpbnB1dC5leHRlbnNpb25zKTsKLQotICAgIHJldHVybiBlbmNvZGVkRGF0YTsKLX0KLQot
dGVtcGxhdGU8PgotYm9vbCBFbmNvZGluZ1RyYWl0czxNaW1lQ2xhc3NJbmZvPjo6ZGVjb2RlVmFs
dWUoRW5jb2RlZFZhbHVlJiBlbmNvZGVkRGF0YSwgTWltZUNsYXNzSW5mbyYgaW5wdXQpCi17Ci0g
ICAgTWltZUNsYXNzSW5mbyBpbmZvOwotCi0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVlfVE9fTFZB
TFVFKGVuY29kZWREYXRhLCBTdHJpbmcsIHR5cGUsIGluZm8udHlwZSk7Ci0gICAgREVDT0RFX1RZ
UEVfV0lUSF9LRVlfVE9fTFZBTFVFKGVuY29kZWREYXRhLCBTdHJpbmcsIGRlc2MsIGluZm8uZGVz
Yyk7Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVlfVE9fTFZBTFVFKGVuY29kZWREYXRhLCBWZWN0
b3I8U3RyaW5nPiwgZXh0ZW5zaW9ucywgaW5mby5leHRlbnNpb25zKTsKLQotICAgIGlucHV0ID0g
aW5mbzsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotRW5jb2RlZFZhbHVlIEVuY29kaW5nVHJhaXRz
PE5vbmRldGVybWluaXN0aWNJbnB1dEJhc2U+OjplbmNvZGVWYWx1ZShjb25zdCBOb25kZXRlcm1p
bmlzdGljSW5wdXRCYXNlJiBpbnB1dCkKLXsKLSAgICBFbmNvZGVkVmFsdWUgZW5jb2RlZFZhbHVl
ID0gRW5jb2RlZFZhbHVlOjpjcmVhdGVPYmplY3QoKTsKLSAgICBFTkNPREVfVFlQRV9XSVRIX0tF
WShlbmNvZGVkVmFsdWUsIFN0cmluZywgdHlwZSwgaW5wdXQudHlwZSgpKTsKLQotI2RlZmluZSBF
TkNPREVfSUZfVFlQRV9UQUdfTUFUQ0hFUyhuYW1lKSBcCi0gICAgaWYgKGlucHV0LnR5cGUoKSA9
PSBJbnB1dFRyYWl0czxuYW1lPjo6dHlwZSgpKSB7IFwKLSAgICAgICAgSW5wdXRUcmFpdHM8bmFt
ZT46OmVuY29kZShlbmNvZGVkVmFsdWUsIHN0YXRpY19jYXN0PGNvbnN0IG5hbWUmPihpbnB1dCkp
OyBcCi0gICAgICAgIHJldHVybiBlbmNvZGVkVmFsdWU7IFwKLSAgICB9IFwKLQotICAgIEpTX1JF
UExBWV9JTlBVVF9OQU1FU19GT1JfRUFDSChFTkNPREVfSUZfVFlQRV9UQUdfTUFUQ0hFUykKLSAg
ICBXRUJfUkVQTEFZX0lOUFVUX05BTUVTX0ZPUl9FQUNIKEVOQ09ERV9JRl9UWVBFX1RBR19NQVRD
SEVTKQotI3VuZGVmIEVOQ09ERV9JRl9UWVBFX1RBR19NQVRDSEVTCi0KLSAgICAvLyBUaGUgbWFj
cm8gd29uJ3Qgd29yayBoZXJlIGJlY2F1c2Ugb2YgdGhlIGNsYXNzIHRlbXBsYXRlIGFyZ3VtZW50
LgotICAgIGlmIChpbnB1dC50eXBlKCkgPT0gSW5wdXRUcmFpdHM8TWVtb2l6ZWRET01SZXN1bHRC
YXNlPjo6dHlwZSgpKSB7Ci0gICAgICAgIElucHV0VHJhaXRzPE1lbW9pemVkRE9NUmVzdWx0QmFz
ZT46OmVuY29kZShlbmNvZGVkVmFsdWUsIHN0YXRpY19jYXN0PGNvbnN0IE1lbW9pemVkRE9NUmVz
dWx0QmFzZSY+KGlucHV0KSk7Ci0gICAgICAgIHJldHVybiBlbmNvZGVkVmFsdWU7Ci0gICAgfQot
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEVuY29kZWRWYWx1ZSgpOwot
fQotCi1FbmNvZGVkVmFsdWUgRW5jb2RpbmdUcmFpdHM8SGlzdG9yeUl0ZW0+OjplbmNvZGVWYWx1
ZShSZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0pCi17Ci0gICAgRW5jb2RlZFZhbHVlIGVuY29kZWRW
YWx1ZSA9IEVuY29kZWRWYWx1ZTo6Y3JlYXRlT2JqZWN0KCk7Ci0KLSAgICBFTkNPREVfVFlQRV9X
SVRIX0tFWShlbmNvZGVkVmFsdWUsIFN0cmluZywgb3JpZ2luYWxVUkxTdHJpbmcsIGl0ZW0tPm9y
aWdpbmFsVVJMU3RyaW5nKCkpOwotICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1
ZSwgU3RyaW5nLCB1cmxTdHJpbmcsIGl0ZW0tPnVybFN0cmluZygpKTsKLSAgICBFTkNPREVfVFlQ
RV9XSVRIX0tFWShlbmNvZGVkVmFsdWUsIFN0cmluZywgdGl0bGUsIGl0ZW0tPnRpdGxlKCkpOwot
ICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgU3RyaW5nLCBwYXJlbnQsIGl0
ZW0tPnBhcmVudCgpKTsKLSAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkVmFsdWUsIGlu
dDY0X3QsIGRvY3VtZW50U2VxdWVuY2VOdW1iZXIsIGl0ZW0tPmRvY3VtZW50U2VxdWVuY2VOdW1i
ZXIoKSk7Ci0gICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBWZWN0b3I8U3Ry
aW5nPiwgZG9jdW1lbnRTdGF0ZSwgaXRlbS0+ZG9jdW1lbnRTdGF0ZSgpKTsKLSAgICBFTkNPREVf
VFlQRV9XSVRIX0tFWShlbmNvZGVkVmFsdWUsIFN0cmluZywgZm9ybUNvbnRlbnRUeXBlLCBpdGVt
LT5mb3JtQ29udGVudFR5cGUoKSk7Ci0gICAgRU5DT0RFX09QVElPTkFMX1RZUEVfV0lUSF9LRVko
ZW5jb2RlZFZhbHVlLCBGb3JtRGF0YSwgZm9ybURhdGEsIGFkb3B0UmVmKGl0ZW0tPmZvcm1EYXRh
KCkpLCBpdGVtLT5mb3JtRGF0YSgpKTsKLSAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVk
VmFsdWUsIGludDY0X3QsIGl0ZW1TZXF1ZW5jZU51bWJlciwgaXRlbS0+aXRlbVNlcXVlbmNlTnVt
YmVyKCkpOwotICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgU3RyaW5nLCBy
ZWZlcnJlciwgaXRlbS0+cmVmZXJyZXIoKSk7Ci0gICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5j
b2RlZFZhbHVlLCBJbnRQb2ludCwgc2Nyb2xsUG9pbnQsIGl0ZW0tPnNjcm9sbFBvaW50KCkpOwot
ICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgZmxvYXQsIHBhZ2VTY2FsZUZh
Y3RvciwgaXRlbS0+cGFnZVNjYWxlRmFjdG9yKCkpOwotICAgIEVOQ09ERV9PUFRJT05BTF9UWVBF
X1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgU2VyaWFsaXplZFNjcmlwdFZhbHVlLCBzdGF0ZU9iamVj
dCwgaXRlbS0+c3RhdGVPYmplY3QoKSwgaXRlbS0+c3RhdGVPYmplY3QoKS5nZXQoKSk7Ci0gICAg
RU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBTdHJpbmcsIHRhcmdldCwgaXRlbS0+
dGFyZ2V0KCkpOwotICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgVmVjdG9y
PEhpc3RvcnlJdGVtPiwgY2hpbGRyZW4sIGl0ZW0tPmNoaWxkcmVuKCkpOwotCi0gICAgcmV0dXJu
IGVuY29kZWRWYWx1ZTsKLX0KLQotYm9vbCBFbmNvZGluZ1RyYWl0czxIaXN0b3J5SXRlbT46OmRl
Y29kZVZhbHVlKEVuY29kZWRWYWx1ZSYgZW5jb2RlZERhdGEsIFJlZlB0cjxIaXN0b3J5SXRlbT4m
IGRlY29kZWRJdGVtKQotewotICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBT
dHJpbmcsIG9yaWdpbmFsVVJMU3RyaW5nKTsKLSAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNv
ZGVkRGF0YSwgU3RyaW5nLCB1cmxTdHJpbmcpOwotICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVu
Y29kZWREYXRhLCBTdHJpbmcsIHRpdGxlKTsKLSAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNv
ZGVkRGF0YSwgU3RyaW5nLCBwYXJlbnQpOwotICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29k
ZWREYXRhLCBpbnQ2NF90LCBkb2N1bWVudFNlcXVlbmNlTnVtYmVyKTsKLSAgICBERUNPREVfVFlQ
RV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgVmVjdG9yPFN0cmluZz4sIGRvY3VtZW50U3RhdGUpOwot
ICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBTdHJpbmcsIGZvcm1Db250ZW50
VHlwZSk7Ci0gICAgREVDT0RFX09QVElPTkFMX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIEZv
cm1EYXRhLCBmb3JtRGF0YSk7Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEs
IGludDY0X3QsIGl0ZW1TZXF1ZW5jZU51bWJlcik7Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVko
ZW5jb2RlZERhdGEsIFN0cmluZywgcmVmZXJyZXIpOwotICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZ
KGVuY29kZWREYXRhLCBJbnRQb2ludCwgc2Nyb2xsUG9pbnQpOwotICAgIERFQ09ERV9UWVBFX1dJ
VEhfS0VZKGVuY29kZWREYXRhLCBmbG9hdCwgcGFnZVNjYWxlRmFjdG9yKTsKLSAgICBERUNPREVf
T1BUSU9OQUxfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgU2VyaWFsaXplZFNjcmlwdFZhbHVl
LCBzdGF0ZU9iamVjdCk7Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFN0
cmluZywgdGFyZ2V0KTsKLSAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgVmVj
dG9yPEhpc3RvcnlJdGVtPiwgY2hpbGRyZW4pOwotCi0gICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBp
dGVtID0gSGlzdG9yeUl0ZW06OmNyZWF0ZSgpOwotICAgIGl0ZW0tPnNldE9yaWdpbmFsVVJMU3Ry
aW5nKG9yaWdpbmFsVVJMU3RyaW5nKTsKLSAgICBpdGVtLT5zZXRVUkxTdHJpbmcodXJsU3RyaW5n
KTsKLSAgICBpdGVtLT5zZXRUaXRsZSh0aXRsZSk7Ci0gICAgaXRlbS0+c2V0UGFyZW50KHBhcmVu
dCk7Ci0gICAgaXRlbS0+c2V0RG9jdW1lbnRTZXF1ZW5jZU51bWJlcihkb2N1bWVudFNlcXVlbmNl
TnVtYmVyKTsKLSAgICBpdGVtLT5zZXREb2N1bWVudFN0YXRlKGRvY3VtZW50U3RhdGUpOwotICAg
IGl0ZW0tPnNldEZvcm1Db250ZW50VHlwZShmb3JtQ29udGVudFR5cGUpOwotICAgIGlmIChmb3Jt
RGF0YVdhc0RlY29kZWQpCi0gICAgICAgIGl0ZW0tPnNldEZvcm1EYXRhKGZvcm1EYXRhLnJlbGVh
c2UoKSk7Ci0gICAgaXRlbS0+c2V0SXRlbVNlcXVlbmNlTnVtYmVyKGl0ZW1TZXF1ZW5jZU51bWJl
cik7Ci0gICAgaXRlbS0+c2V0UmVmZXJyZXIocmVmZXJyZXIpOwotICAgIGl0ZW0tPnNldFNjcm9s
bFBvaW50KHNjcm9sbFBvaW50KTsKLSAgICBpdGVtLT5zZXRQYWdlU2NhbGVGYWN0b3IocGFnZVNj
YWxlRmFjdG9yKTsKLSAgICBpdGVtLT5zZXRUYXJnZXQodGFyZ2V0KTsKLSAgICBmb3IgKGF1dG8m
IGNoaWxkIDogY2hpbGRyZW4pCi0gICAgICAgIGl0ZW0tPmFkZENoaWxkSXRlbShjaGlsZCk7Ci0g
ICAgaWYgKHN0YXRlT2JqZWN0V2FzRGVjb2RlZCkKLSAgICAgICAgaXRlbS0+c2V0U3RhdGVPYmpl
Y3Qoc3RhdGVPYmplY3QucmVsZWFzZSgpKTsKLQotICAgIGRlY29kZWRJdGVtID0gaXRlbS5yZWxl
YXNlKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlPD4KLUVuY29kZWRWYWx1ZSBF
bmNvZGluZ1RyYWl0czxJbnRQb2ludD46OmVuY29kZVZhbHVlKGNvbnN0IEludFBvaW50JiBwb2lu
dCkKLXsKLSAgICBFbmNvZGVkVmFsdWUgZW5jb2RlZERhdGEgPSBFbmNvZGVkVmFsdWU6OmNyZWF0
ZU9iamVjdCgpOwotCi0gICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGludCwg
eCwgcG9pbnQueCgpKTsKLSAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgaW50
LCB5LCBwb2ludC55KCkpOwotCi0gICAgcmV0dXJuIGVuY29kZWREYXRhOwotfQotCi10ZW1wbGF0
ZTw+Ci1ib29sIEVuY29kaW5nVHJhaXRzPEludFBvaW50Pjo6ZGVjb2RlVmFsdWUoRW5jb2RlZFZh
bHVlJiBlbmNvZGVkRGF0YSwgSW50UG9pbnQmIHBvaW50KQotewotICAgIEludFBvaW50IGRlY29k
ZWRQb2ludDsKLQotICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBpbnQsIHgp
OwotICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBpbnQsIHkpOwotCi0gICAg
cG9pbnQgPSBJbnRQb2ludCh4LCB5KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBFbmNv
ZGluZ1RyYWl0czxOb25kZXRlcm1pbmlzdGljSW5wdXRCYXNlPjo6ZGVjb2RlVmFsdWUoRW5jb2Rl
ZFZhbHVlJiBlbmNvZGVkVmFsdWUsIHN0ZDo6dW5pcXVlX3B0cjxOb25kZXRlcm1pbmlzdGljSW5w
dXRCYXNlPiYgaW5wdXQpCi17Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVl
LCBTdHJpbmcsIHR5cGUpOwotCi0jZGVmaW5lIERFQ09ERV9JRl9UWVBFX1RBR19NQVRDSEVTKG5h
bWUpIFwKLSAgICBpZiAodHlwZSA9PSBJbnB1dFRyYWl0czxuYW1lPjo6dHlwZSgpKSB7IFwKLSAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPG5hbWU+IGRlY29kZWRJbnB1dDsgXAotICAgICAgICBpZiAo
IUlucHV0VHJhaXRzPG5hbWU+OjpkZWNvZGUoZW5jb2RlZFZhbHVlLCBkZWNvZGVkSW5wdXQpKSBc
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IFwKLSAgICAgICAgXAotICAgICAgICBpbnB1dCA9
IFdURjo6bW92ZShkZWNvZGVkSW5wdXQpOyBcCi0gICAgICAgIHJldHVybiB0cnVlOyBcCi0gICAg
fSBcCi0KLSAgICBKU19SRVBMQVlfSU5QVVRfTkFNRVNfRk9SX0VBQ0goREVDT0RFX0lGX1RZUEVf
VEFHX01BVENIRVMpCi0gICAgV0VCX1JFUExBWV9JTlBVVF9OQU1FU19GT1JfRUFDSChERUNPREVf
SUZfVFlQRV9UQUdfTUFUQ0hFUykKLSN1bmRlZiBERUNPREVfSUZfVFlQRV9UQUdfTUFUQ0hFUwot
Ci0gICAgaWYgKHR5cGUgPT0gSW5wdXRUcmFpdHM8TWVtb2l6ZWRET01SZXN1bHRCYXNlPjo6dHlw
ZSgpKSB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxNZW1vaXplZERPTVJlc3VsdEJhc2U+IGRl
Y29kZWRJbnB1dDsKLSAgICAgICAgaWYgKCFJbnB1dFRyYWl0czxNZW1vaXplZERPTVJlc3VsdEJh
c2U+OjpkZWNvZGUoZW5jb2RlZFZhbHVlLCBkZWNvZGVkSW5wdXQpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIGlucHV0ID0gV1RGOjptb3ZlKGRlY29kZWRJbnB1dCk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2lm
IFVTRShBUFBLSVQpCi1FbmNvZGVkVmFsdWUgRW5jb2RpbmdUcmFpdHM8S2V5cHJlc3NDb21tYW5k
Pjo6ZW5jb2RlVmFsdWUoY29uc3QgS2V5cHJlc3NDb21tYW5kJiBjb21tYW5kKQotewotICAgIEVu
Y29kZWRWYWx1ZSBlbmNvZGVkVmFsdWUgPSBFbmNvZGVkVmFsdWU6OmNyZWF0ZU9iamVjdCgpOwot
Ci0gICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBTdHJpbmcsIGNvbW1hbmRO
YW1lLCBjb21tYW5kLmNvbW1hbmROYW1lKTsKLSAgICBFTkNPREVfT1BUSU9OQUxfVFlQRV9XSVRI
X0tFWShlbmNvZGVkVmFsdWUsIFN0cmluZywgdGV4dCwgY29tbWFuZC50ZXh0LCAhY29tbWFuZC50
ZXh0LmlzRW1wdHkoKSk7Ci0KLSAgICByZXR1cm4gZW5jb2RlZFZhbHVlOwotfQotCi1ib29sIEVu
Y29kaW5nVHJhaXRzPEtleXByZXNzQ29tbWFuZD46OmRlY29kZVZhbHVlKEVuY29kZWRWYWx1ZSYg
ZW5jb2RlZFZhbHVlLCBLZXlwcmVzc0NvbW1hbmQmIGRlY29kZWRWYWx1ZSkKLXsKLSAgICBERUNP
REVfVFlQRV9XSVRIX0tFWShlbmNvZGVkVmFsdWUsIFN0cmluZywgY29tbWFuZE5hbWUpOwotICAg
IERFQ09ERV9PUFRJT05BTF9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgU3RyaW5nLCB0ZXh0
KTsKLQotICAgIGRlY29kZWRWYWx1ZSA9IHRleHRXYXNEZWNvZGVkID8gS2V5cHJlc3NDb21tYW5k
KGNvbW1hbmROYW1lLCB0ZXh0KSA6IEtleXByZXNzQ29tbWFuZChjb21tYW5kTmFtZSk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWNsYXNzIFBsYXRmb3JtS2V5Ym9hcmRFdmVudEFwcEtpdCA6IHB1
YmxpYyBXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQgewotcHVibGljOgotICAgIFBsYXRm
b3JtS2V5Ym9hcmRFdmVudEFwcEtpdChjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmIGV2ZW50
LCBib29sIGhhbmRsZWRCeUlucHV0TWV0aG9kLCBWZWN0b3I8S2V5cHJlc3NDb21tYW5kPiYgY29t
bWFuZHMpCi0gICAgICAgIDogUGxhdGZvcm1LZXlib2FyZEV2ZW50KGV2ZW50KQotICAgIHsKLSAg
ICAgICAgbV9oYW5kbGVkQnlJbnB1dE1ldGhvZCA9IGhhbmRsZWRCeUlucHV0TWV0aG9kOwotICAg
ICAgICBtX2NvbW1hbmRzID0gY29tbWFuZHM7Ci0gICAgfQotfTsKLSNlbmRpZiAvLyBVU0UoQVBQ
S0lUKQotCi1FbmNvZGVkVmFsdWUgRW5jb2RpbmdUcmFpdHM8UGxhdGZvcm1LZXlib2FyZEV2ZW50
Pjo6ZW5jb2RlVmFsdWUoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiBpbnB1dCkKLXsKLSAg
ICBFbmNvZGVkVmFsdWUgZW5jb2RlZFZhbHVlID0gRW5jb2RlZFZhbHVlOjpjcmVhdGVPYmplY3Qo
KTsKLQotICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgZG91YmxlLCB0aW1l
c3RhbXAsIGlucHV0LnRpbWVzdGFtcCgpKTsKLSAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNv
ZGVkVmFsdWUsIFBsYXRmb3JtRXZlbnQ6OlR5cGUsIHR5cGUsIGlucHV0LnR5cGUoKSk7Ci0gICAg
RU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBQbGF0Zm9ybUV2ZW50OjpNb2RpZmll
cnMsIG1vZGlmaWVycywgc3RhdGljX2Nhc3Q8UGxhdGZvcm1FdmVudDo6TW9kaWZpZXJzPihpbnB1
dC5tb2RpZmllcnMoKSkpOwotICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwg
U3RyaW5nLCB0ZXh0LCBpbnB1dC50ZXh0KCkpOwotICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVu
Y29kZWRWYWx1ZSwgU3RyaW5nLCB1bm1vZGlmaWVkVGV4dCwgaW5wdXQudW5tb2RpZmllZFRleHQo
KSk7Ci0gICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBTdHJpbmcsIGtleUlk
ZW50aWZpZXIsIGlucHV0LmtleUlkZW50aWZpZXIoKSk7Ci0gICAgRU5DT0RFX1RZUEVfV0lUSF9L
RVkoZW5jb2RlZFZhbHVlLCBpbnQsIHdpbmRvd3NWaXJ0dWFsS2V5Q29kZSwgaW5wdXQud2luZG93
c1ZpcnR1YWxLZXlDb2RlKCkpOwotICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1
ZSwgaW50LCBuYXRpdmVWaXJ0dWFsS2V5Q29kZSwgaW5wdXQubmF0aXZlVmlydHVhbEtleUNvZGUo
KSk7Ci0gICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBpbnQsIG1hY0NoYXJD
b2RlLCBpbnB1dC5tYWNDaGFyQ29kZSgpKTsKLSAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNv
ZGVkVmFsdWUsIGJvb2wsIGF1dG9SZXBlYXQsIGlucHV0LmlzQXV0b1JlcGVhdCgpKTsKLSAgICBF
TkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkVmFsdWUsIGJvb2wsIGtleXBhZCwgaW5wdXQuaXNL
ZXlwYWQoKSk7Ci0gICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBib29sLCBz
eXN0ZW1LZXksIGlucHV0LmlzU3lzdGVtS2V5KCkpOwotI2lmIFVTRShBUFBLSVQpCi0gICAgRU5D
T0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBib29sLCBoYW5kbGVkQnlJbnB1dE1ldGhv
ZCwgaW5wdXQuaGFuZGxlZEJ5SW5wdXRNZXRob2QoKSk7Ci0gICAgRU5DT0RFX1RZUEVfV0lUSF9L
RVkoZW5jb2RlZFZhbHVlLCBWZWN0b3I8S2V5cHJlc3NDb21tYW5kPiwgY29tbWFuZHMsIGlucHV0
LmNvbW1hbmRzKCkpOwotI2VuZGlmCi0gICAgcmV0dXJuIGVuY29kZWRWYWx1ZTsKLX0KLQotYm9v
bCBFbmNvZGluZ1RyYWl0czxQbGF0Zm9ybUtleWJvYXJkRXZlbnQ+OjpkZWNvZGVWYWx1ZShFbmNv
ZGVkVmFsdWUmIGVuY29kZWRWYWx1ZSwgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtS2V5Ym9hcmRF
dmVudD4mIGlucHV0KQotewotICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwg
ZG91YmxlLCB0aW1lc3RhbXApOwotICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1
ZSwgUGxhdGZvcm1FdmVudDo6VHlwZSwgdHlwZSk7Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVko
ZW5jb2RlZFZhbHVlLCBQbGF0Zm9ybUV2ZW50OjpNb2RpZmllcnMsIG1vZGlmaWVycyk7Ci0gICAg
REVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBTdHJpbmcsIHRleHQpOwotICAgIERF
Q09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgU3RyaW5nLCB1bm1vZGlmaWVkVGV4dCk7
Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBTdHJpbmcsIGtleUlkZW50
aWZpZXIpOwotICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgaW50LCB3aW5k
b3dzVmlydHVhbEtleUNvZGUpOwotICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1
ZSwgaW50LCBuYXRpdmVWaXJ0dWFsS2V5Q29kZSk7Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVko
ZW5jb2RlZFZhbHVlLCBpbnQsIG1hY0NoYXJDb2RlKTsKLSAgICBERUNPREVfVFlQRV9XSVRIX0tF
WShlbmNvZGVkVmFsdWUsIGJvb2wsIGF1dG9SZXBlYXQpOwotICAgIERFQ09ERV9UWVBFX1dJVEhf
S0VZKGVuY29kZWRWYWx1ZSwgYm9vbCwga2V5cGFkKTsKLSAgICBERUNPREVfVFlQRV9XSVRIX0tF
WShlbmNvZGVkVmFsdWUsIGJvb2wsIHN5c3RlbUtleSk7Ci0jaWYgVVNFKEFQUEtJVCkKLSAgICBE
RUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkVmFsdWUsIGJvb2wsIGhhbmRsZWRCeUlucHV0TWV0
aG9kKTsKLSAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkVmFsdWUsIFZlY3RvcjxLZXlw
cmVzc0NvbW1hbmQ+LCBjb21tYW5kcyk7Ci0jZW5kaWYKLQotICAgIFBsYXRmb3JtS2V5Ym9hcmRF
dmVudCBwbGF0Zm9ybUV2ZW50ID0gUGxhdGZvcm1LZXlib2FyZEV2ZW50KHR5cGUsIHRleHQsIHVu
bW9kaWZpZWRUZXh0LCBrZXlJZGVudGlmaWVyLCBXVEY6OnNhZmVDYXN0PGludD4od2luZG93c1Zp
cnR1YWxLZXlDb2RlKSwgV1RGOjpzYWZlQ2FzdDxpbnQ+KG5hdGl2ZVZpcnR1YWxLZXlDb2RlKSwg
V1RGOjpzYWZlQ2FzdDxpbnQ+KG1hY0NoYXJDb2RlKSwgYXV0b1JlcGVhdCwga2V5cGFkLCBzeXN0
ZW1LZXksIG1vZGlmaWVycywgdGltZXN0YW1wKTsKLSNpZiBVU0UoQVBQS0lUKQotICAgIGlucHV0
ID0gc3RkOjptYWtlX3VuaXF1ZTxQbGF0Zm9ybUtleWJvYXJkRXZlbnRBcHBLaXQ+KHBsYXRmb3Jt
RXZlbnQsIGhhbmRsZWRCeUlucHV0TWV0aG9kLCBjb21tYW5kcyk7Ci0jZWxzZQotICAgIGlucHV0
ID0gc3RkOjptYWtlX3VuaXF1ZTxQbGF0Zm9ybUtleWJvYXJkRXZlbnQ+KHBsYXRmb3JtRXZlbnQp
OwotI2VuZGlmCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUVuY29kZWRWYWx1ZSBFbmNvZGluZ1Ry
YWl0czxQbGF0Zm9ybU1vdXNlRXZlbnQ+OjplbmNvZGVWYWx1ZShjb25zdCBQbGF0Zm9ybU1vdXNl
RXZlbnQmIGlucHV0KQotewotICAgIEVuY29kZWRWYWx1ZSBlbmNvZGVkVmFsdWUgPSBFbmNvZGVk
VmFsdWU6OmNyZWF0ZU9iamVjdCgpOwotCi0gICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2Rl
ZFZhbHVlLCBpbnQsIHBvc2l0aW9uWCwgaW5wdXQucG9zaXRpb24oKS54KCkpOwotICAgIEVOQ09E
RV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgaW50LCBwb3NpdGlvblksIGlucHV0LnBvc2l0
aW9uKCkueSgpKTsKLSAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkVmFsdWUsIGludCwg
Z2xvYmFsUG9zaXRpb25YLCBpbnB1dC5nbG9iYWxQb3NpdGlvbigpLngoKSk7Ci0gICAgRU5DT0RF
X1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBpbnQsIGdsb2JhbFBvc2l0aW9uWSwgaW5wdXQu
Z2xvYmFsUG9zaXRpb24oKS55KCkpOwotICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRW
YWx1ZSwgTW91c2VCdXR0b24sIGJ1dHRvbiwgaW5wdXQuYnV0dG9uKCkpOwotICAgIEVOQ09ERV9U
WVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgUGxhdGZvcm1FdmVudDo6VHlwZSwgdHlwZSwgaW5w
dXQudHlwZSgpKTsKLSAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkVmFsdWUsIGludCwg
Y2xpY2tDb3VudCwgaW5wdXQuY2xpY2tDb3VudCgpKTsKLSAgICBFTkNPREVfVFlQRV9XSVRIX0tF
WShlbmNvZGVkVmFsdWUsIGJvb2wsIHNoaWZ0S2V5LCBpbnB1dC5zaGlmdEtleSgpKTsKLSAgICBF
TkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkVmFsdWUsIGJvb2wsIGN0cmxLZXksIGlucHV0LmN0
cmxLZXkoKSk7Ci0gICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBib29sLCBh
bHRLZXksIGlucHV0LmFsdEtleSgpKTsKLSAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVk
VmFsdWUsIGJvb2wsIG1ldGFLZXksIGlucHV0Lm1ldGFLZXkoKSk7Ci0gICAgRU5DT0RFX1RZUEVf
V0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBpbnQsIHRpbWVzdGFtcCwgaW5wdXQudGltZXN0YW1wKCkp
OwotCi0gICAgcmV0dXJuIGVuY29kZWRWYWx1ZTsKLX0KLQotYm9vbCBFbmNvZGluZ1RyYWl0czxQ
bGF0Zm9ybU1vdXNlRXZlbnQ+OjpkZWNvZGVWYWx1ZShFbmNvZGVkVmFsdWUmIGVuY29kZWRWYWx1
ZSwgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtTW91c2VFdmVudD4mIGlucHV0KQotewotICAgIERF
Q09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgaW50LCBwb3NpdGlvblgpOwotICAgIERF
Q09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgaW50LCBwb3NpdGlvblkpOwotICAgIERF
Q09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgaW50LCBnbG9iYWxQb3NpdGlvblgpOwot
ICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgaW50LCBnbG9iYWxQb3NpdGlv
blkpOwotICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgTW91c2VCdXR0b24s
IGJ1dHRvbik7Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBQbGF0Zm9y
bUV2ZW50OjpUeXBlLCB0eXBlKTsKLSAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkVmFs
dWUsIGludCwgY2xpY2tDb3VudCk7Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZh
bHVlLCBib29sLCBzaGlmdEtleSk7Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZh
bHVlLCBib29sLCBjdHJsS2V5KTsKLSAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkVmFs
dWUsIGJvb2wsIGFsdEtleSk7Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVl
LCBib29sLCBtZXRhS2V5KTsKLSAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkVmFsdWUs
IGludCwgdGltZXN0YW1wKTsKLQotICAgIGlucHV0ID0gc3RkOjptYWtlX3VuaXF1ZTxQbGF0Zm9y
bU1vdXNlRXZlbnQ+KEludFBvaW50KHBvc2l0aW9uWCwgcG9zaXRpb25ZKSwKLSAgICAgICAgSW50
UG9pbnQoZ2xvYmFsUG9zaXRpb25YLCBnbG9iYWxQb3NpdGlvblkpLAotICAgICAgICBidXR0b24s
IHR5cGUsIGNsaWNrQ291bnQsCi0gICAgICAgIHNoaWZ0S2V5LCBjdHJsS2V5LCBhbHRLZXksIG1l
dGFLZXksIHRpbWVzdGFtcCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLSNpZiBQTEFURk9STShD
T0NPQSkKLXN0cnVjdCBQbGF0Zm9ybVdoZWVsRXZlbnRDb2NvYUFyZ3VtZW50cyB7Ci0gICAgYm9v
bCBkaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2U7Ci0gICAgYm9vbCBoYXNQcmVjaXNlU2Nyb2xs
aW5nRGVsdGFzOwotICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIHBoYXNlOwotICAgIFBsYXRm
b3JtV2hlZWxFdmVudFBoYXNlIG1vbWVudHVtUGhhc2U7Ci0gICAgaW50IHNjcm9sbENvdW50Owot
ICAgIGZsb2F0IHVuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVg7Ci0gICAgZmxvYXQgdW5hY2Nl
bGVyYXRlZFNjcm9sbGluZ0RlbHRhWTsKLX07Ci0KLWNsYXNzIFBsYXRmb3JtV2hlZWxFdmVudENv
Y29hIDogcHVibGljIFBsYXRmb3JtV2hlZWxFdmVudCB7Ci1wdWJsaWM6Ci0gICAgUGxhdGZvcm1X
aGVlbEV2ZW50Q29jb2EoUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCwgUGxhdGZvcm1XaGVlbEV2
ZW50Q29jb2FBcmd1bWVudHMmIGFyZ3VtZW50cykKLSAgICAgICAgOiBQbGF0Zm9ybVdoZWVsRXZl
bnQoZXZlbnQpCi0gICAgewotICAgICAgICBtX2RpcmVjdGlvbkludmVydGVkRnJvbURldmljZSA9
IGFyZ3VtZW50cy5kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2U7Ci0gICAgICAgIG1faGFzUHJl
Y2lzZVNjcm9sbGluZ0RlbHRhcyA9IGFyZ3VtZW50cy5oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFz
OwotICAgICAgICBtX3BoYXNlID0gYXJndW1lbnRzLnBoYXNlOwotICAgICAgICBtX21vbWVudHVt
UGhhc2UgPSBhcmd1bWVudHMubW9tZW50dW1QaGFzZTsKLSAgICAgICAgbV9zY3JvbGxDb3VudCA9
IGFyZ3VtZW50cy5zY3JvbGxDb3VudDsKLSAgICAgICAgbV91bmFjY2VsZXJhdGVkU2Nyb2xsaW5n
RGVsdGFYID0gYXJndW1lbnRzLnVuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVg7Ci0gICAgICAg
IG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhWSA9IGFyZ3VtZW50cy51bmFjY2VsZXJhdGVk
U2Nyb2xsaW5nRGVsdGFZOwotICAgIH0KLX07Ci0jZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCi0K
LUVuY29kZWRWYWx1ZSBFbmNvZGluZ1RyYWl0czxQbGF0Zm9ybVdoZWVsRXZlbnQ+OjplbmNvZGVW
YWx1ZShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGlucHV0KQotewotICAgIEVuY29kZWRWYWx1
ZSBlbmNvZGVkRGF0YSA9IEVuY29kZWRWYWx1ZTo6Y3JlYXRlT2JqZWN0KCk7Ci0KLSAgICBFTkNP
REVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgaW50LCBwb3NpdGlvblgsIGlucHV0LnBvc2l0
aW9uKCkueCgpKTsKLSAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgaW50LCBw
b3NpdGlvblksIGlucHV0LnBvc2l0aW9uKCkueSgpKTsKLSAgICBFTkNPREVfVFlQRV9XSVRIX0tF
WShlbmNvZGVkRGF0YSwgaW50LCBnbG9iYWxQb3NpdGlvblgsIGlucHV0Lmdsb2JhbFBvc2l0aW9u
KCkueCgpKTsKLSAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgaW50LCBnbG9i
YWxQb3NpdGlvblksIGlucHV0Lmdsb2JhbFBvc2l0aW9uKCkueSgpKTsKLSAgICBFTkNPREVfVFlQ
RV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgYm9vbCwgc2hpZnRLZXksIGlucHV0LnNoaWZ0S2V5KCkp
OwotICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBib29sLCBjdHJsS2V5LCBp
bnB1dC5jdHJsS2V5KCkpOwotICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBi
b29sLCBhbHRLZXksIGlucHV0LmFsdEtleSgpKTsKLSAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShl
bmNvZGVkRGF0YSwgYm9vbCwgbWV0YUtleSwgaW5wdXQubWV0YUtleSgpKTsKLSAgICBFTkNPREVf
VFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgZmxvYXQsIGRlbHRhWCwgaW5wdXQuZGVsdGFYKCkp
OwotICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBmbG9hdCwgZGVsdGFZLCBp
bnB1dC5kZWx0YVkoKSk7Ci0gICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGZs
b2F0LCB3aGVlbFRpY2tzWCwgaW5wdXQud2hlZWxUaWNrc1goKSk7Ci0gICAgRU5DT0RFX1RZUEVf
V0lUSF9LRVkoZW5jb2RlZERhdGEsIGZsb2F0LCB3aGVlbFRpY2tzWSwgaW5wdXQud2hlZWxUaWNr
c1koKSk7Ci0gICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFBsYXRmb3JtV2hl
ZWxFdmVudEdyYW51bGFyaXR5LCBncmFudWxhcml0eSwgc3RhdGljX2Nhc3Q8UGxhdGZvcm1XaGVl
bEV2ZW50R3JhbnVsYXJpdHk+KGlucHV0LmdyYW51bGFyaXR5KCkpKTsKLQotI2lmIFBMQVRGT1JN
KENPQ09BKQotICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBib29sLCBkaXJl
Y3Rpb25JbnZlcnRlZEZyb21EZXZpY2UsIGlucHV0LmRpcmVjdGlvbkludmVydGVkRnJvbURldmlj
ZSgpKTsKLSAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgYm9vbCwgaGFzUHJl
Y2lzZVNjcm9sbGluZ0RlbHRhcywgaW5wdXQuaGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcygpKTsK
LSAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgUGxhdGZvcm1XaGVlbEV2ZW50
UGhhc2UsIHBoYXNlLCBzdGF0aWNfY2FzdDxQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZT4oaW5wdXQu
cGhhc2UoKSkpOwotICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBQbGF0Zm9y
bVdoZWVsRXZlbnRQaGFzZSwgbW9tZW50dW1QaGFzZSwgc3RhdGljX2Nhc3Q8UGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2U+KGlucHV0Lm1vbWVudHVtUGhhc2UoKSkpOwotICAgIEVOQ09ERV9UWVBFX1dJ
VEhfS0VZKGVuY29kZWREYXRhLCBpbnQsIHNjcm9sbENvdW50LCBpbnB1dC5zY3JvbGxDb3VudCgp
KTsKLSAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgZmxvYXQsIHVuYWNjZWxl
cmF0ZWRTY3JvbGxpbmdEZWx0YVgsIGlucHV0LnVuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVgo
KSk7Ci0gICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGZsb2F0LCB1bmFjY2Vs
ZXJhdGVkU2Nyb2xsaW5nRGVsdGFZLCBpbnB1dC51bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFZ
KCkpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gZW5jb2RlZERhdGE7Ci19Ci0KLWJvb2wgRW5jb2Rp
bmdUcmFpdHM8UGxhdGZvcm1XaGVlbEV2ZW50Pjo6ZGVjb2RlVmFsdWUoRW5jb2RlZFZhbHVlJiBl
bmNvZGVkRGF0YSwgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtV2hlZWxFdmVudD4mIGlucHV0KQot
ewotICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBpbnQsIHBvc2l0aW9uWCk7
Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGludCwgcG9zaXRpb25ZKTsK
LSAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgaW50LCBnbG9iYWxQb3NpdGlv
blgpOwotICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBpbnQsIGdsb2JhbFBv
c2l0aW9uWSk7Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGJvb2wsIHNo
aWZ0S2V5KTsKLSAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgYm9vbCwgY3Ry
bEtleSk7Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGJvb2wsIGFsdEtl
eSk7Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGJvb2wsIG1ldGFLZXkp
OwotICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBmbG9hdCwgZGVsdGFYKTsK
LSAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgZmxvYXQsIGRlbHRhWSk7Ci0g
ICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGZsb2F0LCB3aGVlbFRpY2tzWCk7
Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGZsb2F0LCB3aGVlbFRpY2tz
WSk7Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFBsYXRmb3JtV2hlZWxF
dmVudEdyYW51bGFyaXR5LCBncmFudWxhcml0eSk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAg
ICBQbGF0Zm9ybVdoZWVsRXZlbnRDb2NvYUFyZ3VtZW50cyBhcmd1bWVudHM7Ci0gICAgREVDT0RF
X1RZUEVfV0lUSF9LRVlfVE9fTFZBTFVFKGVuY29kZWREYXRhLCBib29sLCBkaXJlY3Rpb25JbnZl
cnRlZEZyb21EZXZpY2UsIGFyZ3VtZW50cy5kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UpOwot
ICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZX1RPX0xWQUxVRShlbmNvZGVkRGF0YSwgYm9vbCwgaGFz
UHJlY2lzZVNjcm9sbGluZ0RlbHRhcywgYXJndW1lbnRzLmhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0
YXMpOwotICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZX1RPX0xWQUxVRShlbmNvZGVkRGF0YSwgUGxh
dGZvcm1XaGVlbEV2ZW50UGhhc2UsIHBoYXNlLCBhcmd1bWVudHMucGhhc2UpOwotICAgIERFQ09E
RV9UWVBFX1dJVEhfS0VZX1RPX0xWQUxVRShlbmNvZGVkRGF0YSwgUGxhdGZvcm1XaGVlbEV2ZW50
UGhhc2UsIG1vbWVudHVtUGhhc2UsIGFyZ3VtZW50cy5tb21lbnR1bVBoYXNlKTsKLSAgICBERUNP
REVfVFlQRV9XSVRIX0tFWV9UT19MVkFMVUUoZW5jb2RlZERhdGEsIGludCwgc2Nyb2xsQ291bnQs
IGFyZ3VtZW50cy5zY3JvbGxDb3VudCk7Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVlfVE9fTFZB
TFVFKGVuY29kZWREYXRhLCBmbG9hdCwgdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhWCwgYXJn
dW1lbnRzLnVuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVgpOwotICAgIERFQ09ERV9UWVBFX1dJ
VEhfS0VZX1RPX0xWQUxVRShlbmNvZGVkRGF0YSwgZmxvYXQsIHVuYWNjZWxlcmF0ZWRTY3JvbGxp
bmdEZWx0YVksIGFyZ3VtZW50cy51bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFZKTsKLSNlbmRp
ZgotCi0gICAgUGxhdGZvcm1XaGVlbEV2ZW50IGV2ZW50KEludFBvaW50KHBvc2l0aW9uWCwgcG9z
aXRpb25ZKSwgSW50UG9pbnQoZ2xvYmFsUG9zaXRpb25YLCBnbG9iYWxQb3NpdGlvblkpLAotICAg
ICAgICBkZWx0YVgsIGRlbHRhWSwgd2hlZWxUaWNrc1gsIHdoZWVsVGlja3NZLCBncmFudWxhcml0
eSwgc2hpZnRLZXksIGN0cmxLZXksIGFsdEtleSwgbWV0YUtleSk7Ci0KLSNpZiBQTEFURk9STShD
T0NPQSkKLSAgICBpbnB1dCA9IHN0ZDo6bWFrZV91bmlxdWU8UGxhdGZvcm1XaGVlbEV2ZW50Q29j
b2E+KGV2ZW50LCBhcmd1bWVudHMpOwotI2Vsc2UKLSAgICBpbnB1dCA9IHN0ZDo6bWFrZV91bmlx
dWU8UGxhdGZvcm1XaGVlbEV2ZW50PihldmVudCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotRW5jb2RlZFZhbHVlIEVuY29kaW5nVHJhaXRzPFBsdWdpbkRhdGE+OjplbmNvZGVWYWx1
ZShSZWZQdHI8UGx1Z2luRGF0YT4gaW5wdXQpCi17Ci0gICAgRW5jb2RlZFZhbHVlIGVuY29kZWRE
YXRhID0gRW5jb2RlZFZhbHVlOjpjcmVhdGVPYmplY3QoKTsKLQotICAgIFZlY3Rvcjx1aW50MzJf
dD4gY2FzdGVkTWltZVBsdWdpbkluZGljZXMoaW5wdXQtPm1pbWVQbHVnaW5JbmRpY2VzKCkuc2l6
ZSgpKTsKLSAgICBmb3IgKHVpbnQzMl90IGluZGV4IDogaW5wdXQtPm1pbWVQbHVnaW5JbmRpY2Vz
KCkpCi0gICAgICAgIGNhc3RlZE1pbWVQbHVnaW5JbmRpY2VzLmFwcGVuZChXVEY6OnNhZmVDYXN0
PHVpbnQzMl90PihpbmRleCkpOwotCi0gICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERh
dGEsIFZlY3RvcjxQbHVnaW5JbmZvPiwgcGx1Z2lucywgaW5wdXQtPnBsdWdpbnMoKSk7Ci0gICAg
RU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiwg
bWltZXMsIGlucHV0LT5taW1lcygpKTsKLSAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVk
RGF0YSwgVmVjdG9yPHVpbnQzMl90PiwgbWltZVBsdWdpbkluZGljZXMsIGNhc3RlZE1pbWVQbHVn
aW5JbmRpY2VzKTsKLQotICAgIHJldHVybiBlbmNvZGVkRGF0YTsKLX0KLQotY2xhc3MgRGVzZXJp
YWxpemVkUGx1Z2luRGF0YSA6IHB1YmxpYyBQbHVnaW5EYXRhIHsKLXB1YmxpYzoKLSAgICBEZXNl
cmlhbGl6ZWRQbHVnaW5EYXRhKFZlY3RvcjxQbHVnaW5JbmZvPiBwbHVnaW5zLCBWZWN0b3I8TWlt
ZUNsYXNzSW5mbz4gbWltZXMsIFZlY3RvcjxzaXplX3Q+IGluZGljZXMpCi0gICAgICAgIDogUGx1
Z2luRGF0YShwbHVnaW5zLCBtaW1lcywgaW5kaWNlcykKLSAgICB7Ci0gICAgfQotfTsKLQotYm9v
bCBFbmNvZGluZ1RyYWl0czxQbHVnaW5EYXRhPjo6ZGVjb2RlVmFsdWUoRW5jb2RlZFZhbHVlJiBl
bmNvZGVkRGF0YSwgUmVmUHRyPFBsdWdpbkRhdGE+JiBpbnB1dCkKLXsKLSAgICBERUNPREVfVFlQ
RV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgVmVjdG9yPFBsdWdpbkluZm8+LCBwbHVnaW5zKTsKLSAg
ICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgVmVjdG9yPE1pbWVDbGFzc0luZm8+
LCBtaW1lcyk7Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFZlY3Rvcjx1
aW50MzJfdD4sIG1pbWVQbHVnaW5JbmRpY2VzKTsKLQotICAgIFZlY3RvcjxzaXplX3Q+IGNhc3Rl
ZE1pbWVQbHVnaW5JbmRpY2VzKG1pbWVQbHVnaW5JbmRpY2VzLnNpemUoKSk7Ci0gICAgZm9yICh1
aW50MzJfdCBpbmRleCA6IG1pbWVQbHVnaW5JbmRpY2VzKQotICAgICAgICBjYXN0ZWRNaW1lUGx1
Z2luSW5kaWNlcy5hcHBlbmQoV1RGOjpzYWZlQ2FzdDxzaXplX3Q+KGluZGV4KSk7Ci0KLSAgICBp
bnB1dCA9IGFkb3B0UmVmKG5ldyBEZXNlcmlhbGl6ZWRQbHVnaW5EYXRhKHBsdWdpbnMsIG1pbWVz
LCBjYXN0ZWRNaW1lUGx1Z2luSW5kaWNlcykpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRl
bXBsYXRlPD4KLUVuY29kZWRWYWx1ZSBFbmNvZGluZ1RyYWl0czxQbHVnaW5JbmZvPjo6ZW5jb2Rl
VmFsdWUoY29uc3QgUGx1Z2luSW5mbyYgaW5wdXQpCi17Ci0gICAgRW5jb2RlZFZhbHVlIGVuY29k
ZWREYXRhID0gRW5jb2RlZFZhbHVlOjpjcmVhdGVPYmplY3QoKTsKLQotICAgIEVOQ09ERV9UWVBF
X1dJVEhfS0VZKGVuY29kZWREYXRhLCBTdHJpbmcsIG5hbWUsIGlucHV0Lm5hbWUpOwotICAgIEVO
Q09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBTdHJpbmcsIGZpbGUsIGlucHV0LmZpbGUp
OwotICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBTdHJpbmcsIGRlc2MsIGlu
cHV0LmRlc2MpOwotICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBWZWN0b3I8
TWltZUNsYXNzSW5mbz4sIG1pbWVzLCBpbnB1dC5taW1lcyk7Ci0gICAgRU5DT0RFX1RZUEVfV0lU
SF9LRVkoZW5jb2RlZERhdGEsIGJvb2wsIGlzQXBwbGljYXRpb25QbHVnaW4sIGlucHV0LmlzQXBw
bGljYXRpb25QbHVnaW4pOwotCi0gICAgcmV0dXJuIGVuY29kZWREYXRhOwotfQotCi10ZW1wbGF0
ZTw+Ci1ib29sIEVuY29kaW5nVHJhaXRzPFBsdWdpbkluZm8+OjpkZWNvZGVWYWx1ZShFbmNvZGVk
VmFsdWUmIGVuY29kZWREYXRhLCBQbHVnaW5JbmZvJiBpbnB1dCkKLXsKLSAgICBQbHVnaW5JbmZv
IGluZm87Ci0KLSAgICBERUNPREVfVFlQRV9XSVRIX0tFWV9UT19MVkFMVUUoZW5jb2RlZERhdGEs
IFN0cmluZywgbmFtZSwgaW5mby5uYW1lKTsKLSAgICBERUNPREVfVFlQRV9XSVRIX0tFWV9UT19M
VkFMVUUoZW5jb2RlZERhdGEsIFN0cmluZywgZmlsZSwgaW5mby5maWxlKTsKLSAgICBERUNPREVf
VFlQRV9XSVRIX0tFWV9UT19MVkFMVUUoZW5jb2RlZERhdGEsIFN0cmluZywgZGVzYywgaW5mby5k
ZXNjKTsKLSAgICBERUNPREVfVFlQRV9XSVRIX0tFWV9UT19MVkFMVUUoZW5jb2RlZERhdGEsIFZl
Y3RvcjxNaW1lQ2xhc3NJbmZvPiwgbWltZXMsIGluZm8ubWltZXMpOwotICAgIERFQ09ERV9UWVBF
X1dJVEhfS0VZX1RPX0xWQUxVRShlbmNvZGVkRGF0YSwgYm9vbCwgaXNBcHBsaWNhdGlvblBsdWdp
biwgaW5mby5pc0FwcGxpY2F0aW9uUGx1Z2luKTsKLQotICAgIGlucHV0ID0gaW5mbzsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotRW5jb2RlZFZhbHVlIEVuY29kaW5nVHJhaXRzPFJlc291cmNlRXJy
b3I+OjplbmNvZGVWYWx1ZShjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKLXsKLSAgICBFbmNv
ZGVkVmFsdWUgZW5jb2RlZERhdGEgPSBFbmNvZGVkVmFsdWU6OmNyZWF0ZU9iamVjdCgpOwotCi0g
ICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFN0cmluZywgZG9tYWluLCBlcnJv
ci5kb21haW4oKSk7Ci0gICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGludCwg
ZXJyb3JDb2RlLCBlcnJvci5lcnJvckNvZGUoKSk7Ci0gICAgRU5DT0RFX1RZUEVfV0lUSF9LRVko
ZW5jb2RlZERhdGEsIFN0cmluZywgZmFpbGluZ1VSTCwgZXJyb3IuZmFpbGluZ1VSTCgpKTsKLSAg
ICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgU3RyaW5nLCBsb2NhbGl6ZWREZXNj
cmlwdGlvbiwgZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKSk7Ci0KLSAgICByZXR1cm4gZW5j
b2RlZERhdGE7Ci19Ci0KLWJvb2wgRW5jb2RpbmdUcmFpdHM8UmVzb3VyY2VFcnJvcj46OmRlY29k
ZVZhbHVlKEVuY29kZWRWYWx1ZSYgZW5jb2RlZERhdGEsIHN0ZDo6dW5pcXVlX3B0cjxSZXNvdXJj
ZUVycm9yPiYgZGVjb2RlZEVycm9yKQotewotICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29k
ZWREYXRhLCBTdHJpbmcsIGRvbWFpbik7Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2Rl
ZERhdGEsIGludCwgZXJyb3JDb2RlKTsKLSAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVk
RGF0YSwgU3RyaW5nLCBmYWlsaW5nVVJMKTsKLSAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNv
ZGVkRGF0YSwgU3RyaW5nLCBsb2NhbGl6ZWREZXNjcmlwdGlvbik7Ci0KLSAgICBkZWNvZGVkRXJy
b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlc291cmNlRXJyb3I+KGRvbWFpbiwgZXJyb3JDb2RlLCBm
YWlsaW5nVVJMLCBsb2NhbGl6ZWREZXNjcmlwdGlvbik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXRlbXBsYXRlPD4KLUVuY29kZWRWYWx1ZSBFbmNvZGluZ1RyYWl0czxSZXNvdXJjZUxvYWRUaW1p
bmc+OjplbmNvZGVWYWx1ZShjb25zdCBSZXNvdXJjZUxvYWRUaW1pbmcmIHRpbWluZ0RhdGEpCi17
Ci0gICAgRW5jb2RlZFZhbHVlIGVuY29kZWREYXRhID0gRW5jb2RlZFZhbHVlOjpjcmVhdGVPYmpl
Y3QoKTsKLQotICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBpbnQsIGRvbWFp
bkxvb2t1cFN0YXJ0LCB0aW1pbmdEYXRhLmRvbWFpbkxvb2t1cFN0YXJ0KTsKLSAgICBFTkNPREVf
VFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgaW50LCBkb21haW5Mb29rdXBFbmQsIHRpbWluZ0Rh
dGEuZG9tYWluTG9va3VwRW5kKTsKLSAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0
YSwgaW50LCBjb25uZWN0U3RhcnQsIHRpbWluZ0RhdGEuY29ubmVjdFN0YXJ0KTsKLSAgICBFTkNP
REVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgaW50LCBjb25uZWN0RW5kLCB0aW1pbmdEYXRh
LmNvbm5lY3RFbmQpOwotICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBpbnQs
IHJlcXVlc3RTdGFydCwgdGltaW5nRGF0YS5yZXF1ZXN0U3RhcnQpOwotICAgIEVOQ09ERV9UWVBF
X1dJVEhfS0VZKGVuY29kZWREYXRhLCBpbnQsIHJlc3BvbnNlU3RhcnQsIHRpbWluZ0RhdGEucmVz
cG9uc2VTdGFydCk7Ci0gICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGludCwg
c2VjdXJlQ29ubmVjdGlvblN0YXJ0LCB0aW1pbmdEYXRhLnNlY3VyZUNvbm5lY3Rpb25TdGFydCk7
Ci0KLSAgICByZXR1cm4gZW5jb2RlZERhdGE7Ci19Ci0KLXRlbXBsYXRlPD4KLWJvb2wgRW5jb2Rp
bmdUcmFpdHM8UmVzb3VyY2VMb2FkVGltaW5nPjo6ZGVjb2RlVmFsdWUoRW5jb2RlZFZhbHVlJiBl
bmNvZGVkRGF0YSwgUmVzb3VyY2VMb2FkVGltaW5nJiBkZWNvZGVkVGltaW5ncykKLXsKLSAgICBS
ZXNvdXJjZUxvYWRUaW1pbmcgdGltaW5nRGF0YTsKLQotICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZ
X1RPX0xWQUxVRShlbmNvZGVkRGF0YSwgaW50LCBkb21haW5Mb29rdXBTdGFydCwgdGltaW5nRGF0
YS5kb21haW5Mb29rdXBTdGFydCk7Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVlfVE9fTFZBTFVF
KGVuY29kZWREYXRhLCBpbnQsIGRvbWFpbkxvb2t1cEVuZCwgdGltaW5nRGF0YS5kb21haW5Mb29r
dXBFbmQpOwotICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZX1RPX0xWQUxVRShlbmNvZGVkRGF0YSwg
aW50LCBjb25uZWN0U3RhcnQsIHRpbWluZ0RhdGEuY29ubmVjdFN0YXJ0KTsKLSAgICBERUNPREVf
VFlQRV9XSVRIX0tFWV9UT19MVkFMVUUoZW5jb2RlZERhdGEsIGludCwgY29ubmVjdEVuZCwgdGlt
aW5nRGF0YS5jb25uZWN0RW5kKTsKLSAgICBERUNPREVfVFlQRV9XSVRIX0tFWV9UT19MVkFMVUUo
ZW5jb2RlZERhdGEsIGludCwgcmVxdWVzdFN0YXJ0LCB0aW1pbmdEYXRhLnJlcXVlc3RTdGFydCk7
Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVlfVE9fTFZBTFVFKGVuY29kZWREYXRhLCBpbnQsIHJl
c3BvbnNlU3RhcnQsIHRpbWluZ0RhdGEucmVzcG9uc2VTdGFydCk7Ci0gICAgREVDT0RFX1RZUEVf
V0lUSF9LRVlfVE9fTFZBTFVFKGVuY29kZWREYXRhLCBpbnQsIHNlY3VyZUNvbm5lY3Rpb25TdGFy
dCwgdGltaW5nRGF0YS5zZWN1cmVDb25uZWN0aW9uU3RhcnQpOwotCi0gICAgZGVjb2RlZFRpbWlu
Z3MgPSB0aW1pbmdEYXRhOwotICAgIHJldHVybiB0cnVlOwotfQotCi1FbmNvZGVkVmFsdWUgRW5j
b2RpbmdUcmFpdHM8UmVzb3VyY2VSZXF1ZXN0Pjo6ZW5jb2RlVmFsdWUoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIEVuY29kZWRWYWx1ZSBlbmNvZGVkRGF0YSA9IEVuY29k
ZWRWYWx1ZTo6Y3JlYXRlT2JqZWN0KCk7Ci0KLSAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNv
ZGVkRGF0YSwgVVJMLCB1cmwsIHJlcXVlc3QudXJsKCkpOwotICAgIEVOQ09ERV9UWVBFX1dJVEhf
S0VZKGVuY29kZWREYXRhLCBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeSwgY2FjaGVQb2xpY3ks
IHJlcXVlc3QuY2FjaGVQb2xpY3koKSk7Ci0gICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2Rl
ZERhdGEsIGRvdWJsZSwgdGltZW91dEludGVydmFsLCByZXF1ZXN0LnRpbWVvdXRJbnRlcnZhbCgp
KTsKLSAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgVVJMLCBmaXJzdFBhcnR5
Rm9yQ29va2llcywgcmVxdWVzdC5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKLSAgICBFTkNPREVf
VFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgU3RyaW5nLCBodHRwTWV0aG9kLCByZXF1ZXN0Lmh0
dHBNZXRob2QoKSk7Ci0gICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIEhUVFBI
ZWFkZXJNYXAsIGh0dHBIZWFkZXJzLCByZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKSk7Ci0gICAg
RU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFZlY3RvcjxTdHJpbmc+LCByZXNwb25z
ZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheSwgcmVxdWVzdC5yZXNwb25z
ZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheSgpKTsKLSAgICBFTkNPREVf
T1BUSU9OQUxfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgRm9ybURhdGEsIGh0dHBCb2R5LCBy
ZXF1ZXN0Lmh0dHBCb2R5KCksIHJlcXVlc3QuaHR0cEJvZHkoKSk7Ci0gICAgRU5DT0RFX1RZUEVf
V0lUSF9LRVkoZW5jb2RlZERhdGEsIGJvb2wsIGFsbG93Q29va2llcywgcmVxdWVzdC5hbGxvd0Nv
b2tpZXMoKSk7Ci0gICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFJlc291cmNl
TG9hZFByaW9yaXR5LCBsb2FkUHJpb3JpdHksIHJlcXVlc3QucHJpb3JpdHkoKSk7Ci0KLSAgICBy
ZXR1cm4gZW5jb2RlZERhdGE7Ci19Ci0KLWNsYXNzIERlc2VyaWFsaXplZFJlc291cmNlUmVxdWVz
dCA6IHB1YmxpYyBSZXNvdXJjZVJlcXVlc3QgewotcHVibGljOgotICAgIERlc2VyaWFsaXplZFJl
c291cmNlUmVxdWVzdChjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzKQotICAgIHsKLSAgICAg
ICAgbV9odHRwSGVhZGVyRmllbGRzID0gaGVhZGVyczsKLSAgICB9Ci19OwotCi1ib29sIEVuY29k
aW5nVHJhaXRzPFJlc291cmNlUmVxdWVzdD46OmRlY29kZVZhbHVlKEVuY29kZWRWYWx1ZSYgZW5j
b2RlZERhdGEsIHN0ZDo6dW5pcXVlX3B0cjxSZXNvdXJjZVJlcXVlc3Q+JiBkZWNvZGVkUmVxdWVz
dCkKLXsKLSAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgVVJMLCB1cmwpOwot
ICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBSZXNvdXJjZVJlcXVlc3RDYWNo
ZVBvbGljeSwgY2FjaGVQb2xpY3kpOwotICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRE
YXRhLCBkb3VibGUsIHRpbWVvdXRJbnRlcnZhbCk7Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVko
ZW5jb2RlZERhdGEsIFVSTCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMpOwotICAgIERFQ09ERV9UWVBF
X1dJVEhfS0VZKGVuY29kZWREYXRhLCBTdHJpbmcsIGh0dHBNZXRob2QpOwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxIVFRQSGVhZGVyTWFwPiBodHRwSGVhZGVyczsKLSAgICBERUNPREVfVFlQRV9XSVRI
X0tFWV9UT19MVkFMVUUoZW5jb2RlZERhdGEsIEhUVFBIZWFkZXJNYXAsIGh0dHBIZWFkZXJzLCBo
dHRwSGVhZGVycyk7Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFZlY3Rv
cjxTdHJpbmc+LCByZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJh
eSk7Ci0gICAgREVDT0RFX09QVElPTkFMX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIEZvcm1E
YXRhLCBodHRwQm9keSk7Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGJv
b2wsIGFsbG93Q29va2llcyk7Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEs
IFJlc291cmNlTG9hZFByaW9yaXR5LCBsb2FkUHJpb3JpdHkpOwotCi0gICAgc3RkOjp1bmlxdWVf
cHRyPFJlc291cmNlUmVxdWVzdD4gcmVxdWVzdCA9IHN0ZDo6bWFrZV91bmlxdWU8UmVzb3VyY2VS
ZXF1ZXN0PigpOwotICAgIHJlcXVlc3QtPnNldEhUVFBIZWFkZXJGaWVsZHMoKmh0dHBIZWFkZXJz
KTsKLSAgICByZXF1ZXN0LT5zZXRDYWNoZVBvbGljeShjYWNoZVBvbGljeSk7Ci0gICAgcmVxdWVz
dC0+c2V0VGltZW91dEludGVydmFsKHRpbWVvdXRJbnRlcnZhbCk7Ci0gICAgcmVxdWVzdC0+c2V0
Rmlyc3RQYXJ0eUZvckNvb2tpZXMoZmlyc3RQYXJ0eUZvckNvb2tpZXMpOwotICAgIHJlcXVlc3Qt
PnNldEhUVFBNZXRob2QoaHR0cE1ldGhvZCk7Ci0gICAgcmVxdWVzdC0+c2V0UHJpb3JpdHkobG9h
ZFByaW9yaXR5KTsKLSAgICByZXF1ZXN0LT5zZXRBbGxvd0Nvb2tpZXMoYWxsb3dDb29raWVzKTsK
LQotICAgIGludCBmYWxsYmFja0VuY29kaW5nQ291bnQgPSByZXNwb25zZUNvbnRlbnREaXNwb3Np
dGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCk7Ci0gICAgaWYgKGZhbGxiYWNrRW5jb2Rp
bmdDb3VudCA8IDAgfHwgZmFsbGJhY2tFbmNvZGluZ0NvdW50ID4gMykKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgU3RyaW5nIGVuY29kaW5nMTsKLSAgICBTdHJpbmcgZW5jb2RpbmcyOwot
ICAgIFN0cmluZyBlbmNvZGluZzM7Ci0gICAgaWYgKGZhbGxiYWNrRW5jb2RpbmdDb3VudCA+PSAx
KQotICAgICAgICBlbmNvZGluZzEgPSByZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5n
RmFsbGJhY2tBcnJheVswXTsKLSAgICBpZiAoZmFsbGJhY2tFbmNvZGluZ0NvdW50ID49IDIpCi0g
ICAgICAgIGVuY29kaW5nMiA9IHJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxs
YmFja0FycmF5WzFdOwotICAgIGlmIChmYWxsYmFja0VuY29kaW5nQ291bnQgPj0gMykKLSAgICAg
ICAgZW5jb2RpbmczID0gcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNr
QXJyYXlbMl07Ci0gICAgaWYgKGZhbGxiYWNrRW5jb2RpbmdDb3VudCA+IDApCi0gICAgICAgIHJl
cXVlc3QtPnNldFJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5
KGVuY29kaW5nMSwgZW5jb2RpbmcyLCBlbmNvZGluZzMpOwotCi0gICAgaWYgKGh0dHBCb2R5V2Fz
RGVjb2RlZCkKLSAgICAgICAgcmVxdWVzdC0+c2V0SFRUUEJvZHkoaHR0cEJvZHkpOwotCi0gICAg
ZGVjb2RlZFJlcXVlc3QgPSBzdGQ6Om1vdmUocmVxdWVzdCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLUVuY29kZWRWYWx1ZSBFbmNvZGluZ1RyYWl0czxSZXNvdXJjZVJlc3BvbnNlPjo6ZW5jb2Rl
VmFsdWUoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgRW5jb2RlZFZh
bHVlIGVuY29kZWREYXRhID0gRW5jb2RlZFZhbHVlOjpjcmVhdGVPYmplY3QoKTsKLQotICAgIEVO
Q09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBVUkwsIHVybCwgcmVzcG9uc2UudXJsKCkp
OwotICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBTdHJpbmcsIG1pbWVUeXBl
LCByZXNwb25zZS5taW1lVHlwZSgpKTsKLSAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVk
RGF0YSwgbG9uZyBsb25nLCBleHBlY3RlZENvbnRlbnRMZW5ndGgsIHJlc3BvbnNlLmV4cGVjdGVk
Q29udGVudExlbmd0aCgpKTsKLSAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwg
U3RyaW5nLCB0ZXh0RW5jb2RpbmdOYW1lLCByZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCkpOwot
ICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBpbnQsIGh0dHBTdGF0dXNDb2Rl
LCByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpKTsKLSAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShl
bmNvZGVkRGF0YSwgU3RyaW5nLCBodHRwU3RhdHVzVGV4dCwgcmVzcG9uc2UuaHR0cFN0YXR1c1Rl
eHQoKSk7Ci0gICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIEhUVFBIZWFkZXJN
YXAsIGh0dHBIZWFkZXJzLCByZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkpOwotICAgIEVOQ09E
RV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBSZXNvdXJjZUxvYWRUaW1pbmcsIGxvYWRUaW1p
bmcsIHJlc3BvbnNlLnJlc291cmNlTG9hZFRpbWluZygpKTsKLQotICAgIHJldHVybiBlbmNvZGVk
RGF0YTsKLX0KLQotYm9vbCBFbmNvZGluZ1RyYWl0czxSZXNvdXJjZVJlc3BvbnNlPjo6ZGVjb2Rl
VmFsdWUoRW5jb2RlZFZhbHVlJiBlbmNvZGVkRGF0YSwgc3RkOjp1bmlxdWVfcHRyPFJlc291cmNl
UmVzcG9uc2U+JiBkZWNvZGVkUmVzcG9uc2UpCi17Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVko
ZW5jb2RlZERhdGEsIFVSTCwgdXJsKTsKLSAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVk
RGF0YSwgU3RyaW5nLCBtaW1lVHlwZSk7Ci0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2Rl
ZERhdGEsIGxvbmcgbG9uZywgZXhwZWN0ZWRDb250ZW50TGVuZ3RoKTsKLSAgICBERUNPREVfVFlQ
RV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgU3RyaW5nLCB0ZXh0RW5jb2RpbmdOYW1lKTsKLQotICAg
IGF1dG8gcmVzcG9uc2UgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlc291cmNlUmVzcG9uc2U+KHVybCwg
bWltZVR5cGUsIGV4cGVjdGVkQ29udGVudExlbmd0aCwgdGV4dEVuY29kaW5nTmFtZSk7Ci0KLSAg
ICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgaW50LCBodHRwU3RhdHVzQ29kZSk7
Ci0gICAgcmVzcG9uc2UtPnNldEhUVFBTdGF0dXNDb2RlKGh0dHBTdGF0dXNDb2RlKTsKLQotICAg
IERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBTdHJpbmcsIGh0dHBTdGF0dXNUZXh0
KTsKLSAgICByZXNwb25zZS0+c2V0SFRUUFN0YXR1c1RleHQoaHR0cFN0YXR1c1RleHQpOwotCi0g
ICAgLy8gTWFudWFsbHkgZGVjb2RlIHNvIHdlIGNhbiBwYXNzIG93bmVyc2hpcCBvZiB0aGUgZGVj
b2RlZCBoZWFkZXJzLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxIVFRQSGVhZGVyTWFwPiBodHRwSGVh
ZGVyczsKLSAgICBpZiAoIUVuY29kaW5nVHJhaXRzPEhUVFBIZWFkZXJNYXA+OjpkZWNvZGVWYWx1
ZShlbmNvZGVkRGF0YSwgaHR0cEhlYWRlcnMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBmb3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFpciA6ICpodHRwSGVhZGVycykKLSAgICAgICAg
cmVzcG9uc2UtPnNldEhUVFBIZWFkZXJGaWVsZChrZXlWYWx1ZVBhaXIua2V5LCBrZXlWYWx1ZVBh
aXIudmFsdWUpOwotCi0gICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFJlc291
cmNlTG9hZFRpbWluZywgbG9hZFRpbWluZyk7Ci0gICAgcmVzcG9uc2UtPnJlc291cmNlTG9hZFRp
bWluZygpLmRvbWFpbkxvb2t1cFN0YXJ0ID0gbG9hZFRpbWluZy5kb21haW5Mb29rdXBTdGFydDsK
LSAgICByZXNwb25zZS0+cmVzb3VyY2VMb2FkVGltaW5nKCkuZG9tYWluTG9va3VwRW5kID0gbG9h
ZFRpbWluZy5kb21haW5Mb29rdXBFbmQ7Ci0gICAgcmVzcG9uc2UtPnJlc291cmNlTG9hZFRpbWlu
ZygpLmNvbm5lY3RTdGFydCA9IGxvYWRUaW1pbmcuY29ubmVjdFN0YXJ0OwotICAgIHJlc3BvbnNl
LT5yZXNvdXJjZUxvYWRUaW1pbmcoKS5zZWN1cmVDb25uZWN0aW9uU3RhcnQgPSBsb2FkVGltaW5n
LnNlY3VyZUNvbm5lY3Rpb25TdGFydDsKLSAgICByZXNwb25zZS0+cmVzb3VyY2VMb2FkVGltaW5n
KCkuY29ubmVjdEVuZCA9IGxvYWRUaW1pbmcuY29ubmVjdEVuZDsKLSAgICByZXNwb25zZS0+cmVz
b3VyY2VMb2FkVGltaW5nKCkucmVxdWVzdFN0YXJ0ID0gbG9hZFRpbWluZy5yZXF1ZXN0U3RhcnQ7
Ci0gICAgcmVzcG9uc2UtPnJlc291cmNlTG9hZFRpbWluZygpLnJlc3BvbnNlU3RhcnQgPSBsb2Fk
VGltaW5nLnJlc3BvbnNlU3RhcnQ7Ci0KLSAgICBkZWNvZGVkUmVzcG9uc2UgPSBzdGQ6Om1vdmUo
cmVzcG9uc2UpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1FbmNvZGVkVmFsdWUgRW5jb2RpbmdU
cmFpdHM8U2VjdXJpdHlPcmlnaW4+OjplbmNvZGVWYWx1ZShSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
IGlucHV0KQotewotICAgIHJldHVybiBFbmNvZGVkVmFsdWU6OmNyZWF0ZVN0cmluZyhpbnB1dC0+
dG9TdHJpbmcoKSk7Ci19Ci0KLWJvb2wgRW5jb2RpbmdUcmFpdHM8U2VjdXJpdHlPcmlnaW4+Ojpk
ZWNvZGVWYWx1ZShFbmNvZGVkVmFsdWUmIGVuY29kZWRWYWx1ZSwgUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiYgaW5wdXQpCi17Ci0gICAgaW5wdXQgPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0
cmluZyhlbmNvZGVkVmFsdWUuY29udmVydFRvPFN0cmluZz4oKSk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLUVuY29kZWRWYWx1ZSBFbmNvZGluZ1RyYWl0czxTaGFyZWRCdWZmZXI+OjplbmNvZGVW
YWx1ZShSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIpCi17Ci0gICAgcmV0dXJuIEVuY29kZWRW
YWx1ZTo6Y3JlYXRlU3RyaW5nKGJhc2U2NEVuY29kZShidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5z
aXplKCkpKTsKLX0KLQotYm9vbCBFbmNvZGluZ1RyYWl0czxTaGFyZWRCdWZmZXI+OjpkZWNvZGVW
YWx1ZShFbmNvZGVkVmFsdWUmIGVuY29kZWRCdWZmZXIsIFJlZlB0cjxTaGFyZWRCdWZmZXI+JiBk
ZWNvZGVkQnVmZmVyKQotewotICAgIFZlY3RvcjxjaGFyLCAwPiBkYXRhOwotICAgIGlmICghYmFz
ZTY0RGVjb2RlKGVuY29kZWRCdWZmZXIuY29udmVydFRvPFN0cmluZz4oKSwgZGF0YSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGRlY29kZWRCdWZmZXIgPSBTaGFyZWRCdWZmZXI6OmFk
b3B0VmVjdG9yKGRhdGEpOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTw+Ci1FbmNv
ZGVkVmFsdWUgRW5jb2RpbmdUcmFpdHM8U3Vic3RpdHV0ZURhdGE+OjplbmNvZGVWYWx1ZShjb25z
dCBTdWJzdGl0dXRlRGF0YSYgZGF0YSkKLXsKLSAgICBFbmNvZGVkVmFsdWUgZW5jb2RlZERhdGEg
PSBFbmNvZGVkVmFsdWU6OmNyZWF0ZU9iamVjdCgpOwotCi0gICAgRU5DT0RFX1RZUEVfV0lUSF9L
RVkoZW5jb2RlZERhdGEsIFNoYXJlZEJ1ZmZlciwgY29udGVudCwgZGF0YS5jb250ZW50KCktPmNv
cHkoKSk7Ci0gICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFN0cmluZywgbWlt
ZVR5cGUsIGRhdGEubWltZVR5cGUoKSk7Ci0gICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2Rl
ZERhdGEsIFN0cmluZywgdGV4dEVuY29kaW5nLCBkYXRhLnRleHRFbmNvZGluZygpKTsKLSAgICBF
TkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgVVJMLCBmYWlsaW5nVVJMLCBkYXRhLmZh
aWxpbmdVUkwoKSk7Ci0gICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFVSTCwg
cmVzcG9uc2VVUkwsIGRhdGEucmVzcG9uc2VVUkwoKSk7Ci0gICAgRU5DT0RFX1RZUEVfV0lUSF9L
RVkoZW5jb2RlZERhdGEsIGJvb2wsIHNob3VsZFJldmVhbFRvU2Vzc2lvbkhpc3RvcnksIGRhdGEu
c2hvdWxkUmV2ZWFsVG9TZXNzaW9uSGlzdG9yeSgpKTsKLQotICAgIHJldHVybiBlbmNvZGVkRGF0
YTsKLX0KLQotdGVtcGxhdGU8PgotYm9vbCBFbmNvZGluZ1RyYWl0czxTdWJzdGl0dXRlRGF0YT46
OmRlY29kZVZhbHVlKEVuY29kZWRWYWx1ZSYgZW5jb2RlZERhdGEsIFN1YnN0aXR1dGVEYXRhJiBk
ZWNvZGVkRGF0YSkKLXsKLQotICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBT
aGFyZWRCdWZmZXIsIGNvbnRlbnQpOwotICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRE
YXRhLCBTdHJpbmcsIG1pbWVUeXBlKTsKLSAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVk
RGF0YSwgU3RyaW5nLCB0ZXh0RW5jb2RpbmcpOwotICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVu
Y29kZWREYXRhLCBVUkwsIGZhaWxpbmdVUkwpOwotICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVu
Y29kZWREYXRhLCBVUkwsIHJlc3BvbnNlVVJMKTsKLSAgICBERUNPREVfVFlQRV9XSVRIX0tFWShl
bmNvZGVkRGF0YSwgYm9vbCwgc2hvdWxkUmV2ZWFsVG9TZXNzaW9uSGlzdG9yeSk7Ci0KLSAgICBk
ZWNvZGVkRGF0YSA9IFN1YnN0aXR1dGVEYXRhKGNvbnRlbnQsIG1pbWVUeXBlLCB0ZXh0RW5jb2Rp
bmcsIGZhaWxpbmdVUkwsIHJlc3BvbnNlVVJMLCBzaG91bGRSZXZlYWxUb1Nlc3Npb25IaXN0b3J5
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotRW5jb2RlZFZhbHVlIEVuY29kaW5nVHJhaXRzPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT46OmVuY29kZVZhbHVlKFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IGlucHV0KQotewotICAgIHJldHVybiBFbmNvZGVkVmFsdWU6OmNyZWF0ZVN0cmluZyhp
bnB1dC0+dG9TdHJpbmcoKSk7Ci19Ci0KLWJvb2wgRW5jb2RpbmdUcmFpdHM8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPjo6ZGVjb2RlVmFsdWUoRW5jb2RlZFZhbHVlJiBlbmNvZGVkVmFsdWUsIFJlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+JiBpbnB1dCkKLXsKLSAgICBpbnB1dCA9IFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGVuY29kZWRWYWx1ZS5jb252ZXJ0VG88U3RyaW5nPigpKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotRW5jb2RlZFZhbHVlIEVuY29kaW5nVHJhaXRzPFVSTD46
OmVuY29kZVZhbHVlKGNvbnN0IFVSTCYgaW5wdXQpCi17Ci0gICAgcmV0dXJuIEVuY29kZWRWYWx1
ZTo6Y3JlYXRlU3RyaW5nKGlucHV0LnN0cmluZygpKTsKLX0KLQotYm9vbCBFbmNvZGluZ1RyYWl0
czxVUkw+OjpkZWNvZGVWYWx1ZShFbmNvZGVkVmFsdWUmIGVuY29kZWRWYWx1ZSwgVVJMJiBpbnB1
dCkKLXsKLSAgICBpbnB1dCA9IFVSTChXZWJDb3JlOjpQYXJzZWRVUkxTdHJpbmcsIGVuY29kZWRW
YWx1ZS5jb252ZXJ0VG88U3RyaW5nPigpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX1JFUExBWSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlcGxheS9TZXJpYWxpemF0aW9uTWV0aG9kcy5oIGIvU291cmNlL1dl
YkNvcmUvcmVwbGF5L1NlcmlhbGl6YXRpb25NZXRob2RzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGZhZTUzMTljOTIxYTUzOWMyZmRmOThhNjNlM2YwMGRkOTlhOWIwYzcuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVwbGF5L1NlcmlhbGl6YXRpb25NZXRob2RzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOTggKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMg
IkFTCi0gKiBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQKLSAqIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQotICogUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBIT0xERVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgU2VyaWFsaXphdGlvbk1ldGhvZHNfaAotI2RlZmluZSBTZXJpYWxpemF0aW9uTWV0aG9kc19o
Ci0KLSNpZiBFTkFCTEUoV0VCX1JFUExBWSkKLQotI2luY2x1ZGUgPHJlcGxheS9FbmNvZGVkVmFs
dWUuaD4KLSNpbmNsdWRlIDxyZXBsYXkvTm9uZGV0ZXJtaW5pc3RpY0lucHV0Lmg+Ci0jaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBGcmFtZUxv
YWRSZXF1ZXN0OwotCi1jbGFzcyBEb2N1bWVudDsKLWNsYXNzIEZvcm1EYXRhOwotY2xhc3MgRnJh
bWU7Ci1jbGFzcyBIVFRQSGVhZGVyTWFwOwotY2xhc3MgSGlzdG9yeUl0ZW07Ci1jbGFzcyBQYWdl
OwotY2xhc3MgUGxhdGZvcm1LZXlib2FyZEV2ZW50OwotY2xhc3MgUGxhdGZvcm1Nb3VzZUV2ZW50
OwotY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50OwotY2xhc3MgUGx1Z2luRGF0YTsKLWNsYXNzIFJl
c291cmNlRXJyb3I7Ci1jbGFzcyBSZXNvdXJjZVJlcXVlc3Q7Ci1jbGFzcyBSZXNvdXJjZVJlc3Bv
bnNlOwotY2xhc3MgU2VjdXJpdHlPcmlnaW47Ci1jbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7
Ci1jbGFzcyBTaGFyZWRCdWZmZXI7Ci1jbGFzcyBVUkw7Ci0KLSNpZiBVU0UoQVBQS0lUKQotc3Ry
dWN0IEtleXByZXNzQ29tbWFuZDsKLSNlbmRpZgotCi11aW50MzJfdCBmcmFtZUluZGV4RnJvbURv
Y3VtZW50KGNvbnN0IERvY3VtZW50Kik7Ci11aW50MzJfdCBmcmFtZUluZGV4RnJvbUZyYW1lKGNv
bnN0IEZyYW1lKik7Ci1Eb2N1bWVudCogZG9jdW1lbnRGcm9tRnJhbWVJbmRleChQYWdlKiwgdWlu
dDMyX3QgZnJhbWVJbmRleCk7Ci1GcmFtZSogZnJhbWVGcm9tRnJhbWVJbmRleChQYWdlKiwgdWlu
dDMyX3QgZnJhbWVJbmRleCk7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotLy8gVGVtcGxh
dGUgc3BlY2lhbGl6YXRpb25zIG11c3QgYmUgZGVmaW5lZCBpbiB0aGUgc2FtZSBuYW1lc3BhY2Ug
YXMgdGhlIHRlbXBsYXRlIGRlY2xhcmF0aW9uLgotbmFtZXNwYWNlIEpTQyB7Ci0KLXRlbXBsYXRl
PD4gc3RydWN0IEVuY29kaW5nVHJhaXRzPFdlYkNvcmU6OkZvcm1EYXRhPiB7Ci0gICAgdHlwZWRl
ZiBSZWZQdHI8V2ViQ29yZTo6Rm9ybURhdGE+IERlY29kZWRUeXBlOwotCi0gICAgc3RhdGljIEVu
Y29kZWRWYWx1ZSBlbmNvZGVWYWx1ZShSZWZQdHI8V2ViQ29yZTo6Rm9ybURhdGE+KTsKLSAgICBz
dGF0aWMgYm9vbCBkZWNvZGVWYWx1ZShFbmNvZGVkVmFsdWUmLCBSZWZQdHI8V2ViQ29yZTo6Rm9y
bURhdGE+Jik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbmNvZGluZ1RyYWl0czxXZWJDb3Jl
OjpGcmFtZUxvYWRSZXF1ZXN0PiB7Ci0gICAgdHlwZWRlZiBXZWJDb3JlOjpGcmFtZUxvYWRSZXF1
ZXN0IERlY29kZWRUeXBlOwotCi0gICAgc3RhdGljIEVuY29kZWRWYWx1ZSBlbmNvZGVWYWx1ZShj
b25zdCBXZWJDb3JlOjpGcmFtZUxvYWRSZXF1ZXN0JiB2YWx1ZSk7Ci0gICAgc3RhdGljIGJvb2wg
ZGVjb2RlVmFsdWUoRW5jb2RlZFZhbHVlJiwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkZyYW1l
TG9hZFJlcXVlc3Q+JiB2YWx1ZSk7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBFbmNvZGluZ1Ry
YWl0czxXZWJDb3JlOjpIVFRQSGVhZGVyTWFwPiB7Ci0gICAgdHlwZWRlZiBXZWJDb3JlOjpIVFRQ
SGVhZGVyTWFwIERlY29kZWRUeXBlOwotCi0gICAgc3RhdGljIEVuY29kZWRWYWx1ZSBlbmNvZGVW
YWx1ZShjb25zdCBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwJiB2YWx1ZSk7Ci0gICAgc3RhdGljIGJv
b2wgZGVjb2RlVmFsdWUoRW5jb2RlZFZhbHVlJiwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkhU
VFBIZWFkZXJNYXA+JiB2YWx1ZSk7Ci19OwotCi0jaWYgVVNFKEFQUEtJVCkKLXRlbXBsYXRlPD4g
c3RydWN0IEVuY29kaW5nVHJhaXRzPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4gewotICAgIHR5
cGVkZWYgV2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kIERlY29kZWRUeXBlOwotCi0gICAgc3RhdGlj
IEVuY29kZWRWYWx1ZSBlbmNvZGVWYWx1ZShjb25zdCBXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQm
IHZhbHVlKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGVWYWx1ZShFbmNvZGVkVmFsdWUmLCBXZWJD
b3JlOjpLZXlwcmVzc0NvbW1hbmQmIHZhbHVlKTsKLX07Ci0jZW5kaWYgLy8gVVNFKEFQUEtJVCkK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW5jb2RpbmdUcmFpdHM8V2ViQ29yZTo6SGlzdG9yeUl0ZW0+
IHsKLSAgICB0eXBlZGVmIFJlZlB0cjxXZWJDb3JlOjpIaXN0b3J5SXRlbT4gRGVjb2RlZFR5cGU7
Ci0KLSAgICBzdGF0aWMgRW5jb2RlZFZhbHVlIGVuY29kZVZhbHVlKFJlZlB0cjxXZWJDb3JlOjpI
aXN0b3J5SXRlbT4pOwotICAgIHN0YXRpYyBib29sIGRlY29kZVZhbHVlKEVuY29kZWRWYWx1ZSYs
IFJlZlB0cjxXZWJDb3JlOjpIaXN0b3J5SXRlbT4mKTsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0
IEVuY29kaW5nVHJhaXRzPE5vbmRldGVybWluaXN0aWNJbnB1dEJhc2U+IHsKLSAgICB0eXBlZGVm
IE5vbmRldGVybWluaXN0aWNJbnB1dEJhc2UgRGVjb2RlZFR5cGU7Ci0KLSAgICBzdGF0aWMgRW5j
b2RlZFZhbHVlIGVuY29kZVZhbHVlKGNvbnN0IE5vbmRldGVybWluaXN0aWNJbnB1dEJhc2UmIHZh
bHVlKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGVWYWx1ZShFbmNvZGVkVmFsdWUmLCBzdGQ6OnVu
aXF1ZV9wdHI8Tm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFzZT4mIHZhbHVlKTsKLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IEVuY29kaW5nVHJhaXRzPFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVu
dD4gewotICAgIHR5cGVkZWYgV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50IERlY29kZWRU
eXBlOwotCi0gICAgc3RhdGljIEVuY29kZWRWYWx1ZSBlbmNvZGVWYWx1ZShjb25zdCBXZWJDb3Jl
OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQmIHZhbHVlKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGVW
YWx1ZShFbmNvZGVkVmFsdWUmLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6UGxhdGZvcm1LZXli
b2FyZEV2ZW50PiYgdmFsdWUpOwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW5jb2RpbmdUcmFp
dHM8V2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50PiB7Ci0gICAgdHlwZWRlZiBXZWJDb3JlOjpQ
bGF0Zm9ybU1vdXNlRXZlbnQgRGVjb2RlZFR5cGU7Ci0KLSAgICBzdGF0aWMgRW5jb2RlZFZhbHVl
IGVuY29kZVZhbHVlKGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudCYgdmFsdWUpOwot
ICAgIHN0YXRpYyBib29sIGRlY29kZVZhbHVlKEVuY29kZWRWYWx1ZSYsIHN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQ+JiB2YWx1ZSk7Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBFbmNvZGluZ1RyYWl0czxXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQ+IHsKLSAg
ICB0eXBlZGVmIFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudCBEZWNvZGVkVHlwZTsKLQotICAg
IHN0YXRpYyBFbmNvZGVkVmFsdWUgZW5jb2RlVmFsdWUoY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1X
aGVlbEV2ZW50JiB2YWx1ZSk7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlVmFsdWUoRW5jb2RlZFZh
bHVlJiwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudD4mIHZhbHVl
KTsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVuY29kaW5nVHJhaXRzPFdlYkNvcmU6OlBsdWdp
bkRhdGE+IHsKLSAgICB0eXBlZGVmIFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5EYXRhPiBEZWNvZGVk
VHlwZTsKLQotICAgIHN0YXRpYyBFbmNvZGVkVmFsdWUgZW5jb2RlVmFsdWUoUmVmUHRyPFdlYkNv
cmU6OlBsdWdpbkRhdGE+IHZhbHVlKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGVWYWx1ZShFbmNv
ZGVkVmFsdWUmLCBSZWZQdHI8V2ViQ29yZTo6UGx1Z2luRGF0YT4mIHZhbHVlKTsKLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IEVuY29kaW5nVHJhaXRzPFdlYkNvcmU6OlJlc291cmNlRXJyb3I+IHsK
LSAgICB0eXBlZGVmIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgRGVjb2RlZFR5cGU7Ci0KLSAgICBz
dGF0aWMgRW5jb2RlZFZhbHVlIGVuY29kZVZhbHVlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJy
b3ImIHZhbHVlKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGVWYWx1ZShFbmNvZGVkVmFsdWUmLCBz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6UmVzb3VyY2VFcnJvcj4mIHZhbHVlKTsKLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IEVuY29kaW5nVHJhaXRzPFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdD4g
ewotICAgIHR5cGVkZWYgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IERlY29kZWRUeXBlOwotCi0g
ICAgc3RhdGljIEVuY29kZWRWYWx1ZSBlbmNvZGVWYWx1ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmIHZhbHVlKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGVWYWx1ZShFbmNvZGVkVmFs
dWUmLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0PiYgdmFsdWUpOwot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW5jb2RpbmdUcmFpdHM8V2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZT4gewotICAgIHR5cGVkZWYgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSBEZWNvZGVk
VHlwZTsKLQotICAgIHN0YXRpYyBFbmNvZGVkVmFsdWUgZW5jb2RlVmFsdWUoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSYgdmFsdWUpOwotICAgIHN0YXRpYyBib29sIGRlY29kZVZhbHVl
KEVuY29kZWRWYWx1ZSYsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
PiYgdmFsdWUpOwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW5jb2RpbmdUcmFpdHM8V2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW4+IHsKLSAgICB0eXBlZGVmIFJlZlB0cjxXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbj4gRGVjb2RlZFR5cGU7Ci0KLSAgICBzdGF0aWMgRW5jb2RlZFZhbHVlIGVuY29kZVZh
bHVlKFJlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4gdmFsdWUpOwotICAgIHN0YXRpYyBi
b29sIGRlY29kZVZhbHVlKEVuY29kZWRWYWx1ZSYsIFJlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbj4mIHZhbHVlKTsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEVuY29kaW5nVHJhaXRzPFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcj4gewotICAgIHR5cGVkZWYgUmVmUHRyPFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlcj4gRGVjb2RlZFR5cGU7Ci0KLSAgICBzdGF0aWMgRW5jb2RlZFZhbHVlIGVuY29kZVZh
bHVlKFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IHZhbHVlKTsKLSAgICBzdGF0aWMgYm9v
bCBkZWNvZGVWYWx1ZShFbmNvZGVkVmFsdWUmLCBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVy
PiYgdmFsdWUpOwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW5jb2RpbmdUcmFpdHM8V2ViQ29y
ZTo6VVJMPiB7Ci0gICAgdHlwZWRlZiBXZWJDb3JlOjpVUkwgRGVjb2RlZFR5cGU7Ci0KLSAgICBz
dGF0aWMgRW5jb2RlZFZhbHVlIGVuY29kZVZhbHVlKGNvbnN0IFdlYkNvcmU6OlVSTCYgdmFsdWUp
OwotICAgIHN0YXRpYyBib29sIGRlY29kZVZhbHVlKEVuY29kZWRWYWx1ZSYsIFdlYkNvcmU6OlVS
TCYgdmFsdWUpOwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgRW5jb2RpbmdUcmFpdHM8V2ViQ29y
ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB7Ci0gICAgdHlwZWRlZiBSZWZQdHI8V2ViQ29yZTo6
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBEZWNvZGVkVHlwZTsKLQotICAgIHN0YXRpYyBFbmNvZGVk
VmFsdWUgZW5jb2RlVmFsdWUoUmVmUHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4p
OwotICAgIHN0YXRpYyBib29sIGRlY29kZVZhbHVlKEVuY29kZWRWYWx1ZSYsIFJlZlB0cjxXZWJD
b3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+Jik7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MK
LQotI2VuZGlmIC8vIEVOQUJMRShXRUJfUkVQTEFZKQotCi0jZW5kaWYgLy8gU2VyaWFsaXphdGlv
bk1ldGhvZHNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVwbGF5L1VzZXJJbnB1dEJy
aWRnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvVXNlcklucHV0QnJpZGdlLmNwcAppbmRl
eCBiYzgxNDViZWM2NmU2OWZjNzI1YjY2ZGU3MWE2ZTNlYzM1NzNmYjZlLi5mMWI1YzkzN2I2N2Rj
YzEzZjQxNzk5N2I1Yzg3ODIxMzk2ODczN2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZXBsYXkvVXNlcklucHV0QnJpZGdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvVXNl
cklucHV0QnJpZGdlLmNwcApAQCAtNDAsNyArNDAsNyBAQAogCiAjaWYgRU5BQkxFKFdFQl9SRVBM
QVkpCiAjaW5jbHVkZSAiUmVwbGF5Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIlNlcmlhbGl6YXRp
b25NZXRob2RzLmgiCisjaW5jbHVkZSAiV2ViUmVwbGF5SW5wdXRDb2RlcnMuaCIKICNpbmNsdWRl
ICJXZWJSZXBsYXlJbnB1dHMuaCIKICNpbmNsdWRlIDxyZXBsYXkvSW5wdXRDdXJzb3IuaD4KICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVwbGF5L1dlYlJlcGxheUlucHV0Q29k
ZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9XZWJSZXBsYXlJbnB1dENvZGVycy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMjE2M2Q5OGI3MDRkZTUwN2M4MzhjYzJiNTk4ZDdhNzVkOThiYWYyNQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9XZWJSZXBsYXlJbnB1dENvZGVy
cy5jcHAKQEAgLTAsMCArMSwxMDI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUyAiQVMKKyAqIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCisgKiBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlJlcGxheUlu
cHV0Q29kZXJzLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JFUExBWSkKKworI2luY2x1ZGUgIkFsbFJl
cGxheUlucHV0cy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRm9ybURhdGEu
aCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNp
bmNsdWRlICJGcmFtZVRyZWUuaCIKKyNpbmNsdWRlICJIVFRQSGVhZGVyTWFwLmgiCisjaW5jbHVk
ZSAiSGlzdG9yeUl0ZW0uaCIKKyNpbmNsdWRlICJNYWluRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdl
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVk
ZSAiUGx1Z2luRGF0YS5oIgorI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZUxvYWRUaW1pbmcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNs
dWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNp
bmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKKyNpbmNsdWRlICJTdWJzdGl0dXRlRGF0YS5oIgorI2luY2x1ZGUgIlVSTC5oIgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCit1c2luZyBXZWJDb3JlOjpGb3JtRGF0YTsKK3VzaW5n
IFdlYkNvcmU6OkZvcm1EYXRhRWxlbWVudDsKK3VzaW5nIFdlYkNvcmU6OkZyYW1lTG9hZFJlcXVl
c3Q7Cit1c2luZyBXZWJDb3JlOjpIVFRQSGVhZGVyTWFwOwordXNpbmcgV2ViQ29yZTo6SGlzdG9y
eUl0ZW07Cit1c2luZyBXZWJDb3JlOjpJbnRQb2ludDsKK3VzaW5nIFdlYkNvcmU6Ok1pbWVDbGFz
c0luZm87Cit1c2luZyBXZWJDb3JlOjpNb3VzZUJ1dHRvbjsKK3VzaW5nIFdlYkNvcmU6OlBsYXRm
b3JtRXZlbnQ7Cit1c2luZyBXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQ7Cit1c2luZyBX
ZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQ7Cit1c2luZyBXZWJDb3JlOjpQbGF0Zm9ybVdoZWVs
RXZlbnQ7Cit1c2luZyBXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnRHcmFudWxhcml0eTsKK3Vz
aW5nIFdlYkNvcmU6OlBsdWdpbkRhdGE7Cit1c2luZyBXZWJDb3JlOjpQbHVnaW5JbmZvOwordXNp
bmcgV2ViQ29yZTo6UmVzb3VyY2VFcnJvcjsKK3VzaW5nIFdlYkNvcmU6OlJlc291cmNlTG9hZFRp
bWluZzsKK3VzaW5nIFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5OwordXNpbmcgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0OwordXNpbmcgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Q2FjaGVQ
b2xpY3k7Cit1c2luZyBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOwordXNpbmcgV2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW47Cit1c2luZyBXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU7Cit1
c2luZyBXZWJDb3JlOjpTaGFyZWRCdWZmZXI7Cit1c2luZyBXZWJDb3JlOjpTdWJzdGl0dXRlRGF0
YTsKK3VzaW5nIFdlYkNvcmU6OlVSTDsKKworI2lmIFBMQVRGT1JNKENPQ09BKQordXNpbmcgV2Vi
Q29yZTo6S2V5cHJlc3NDb21tYW5kOwordXNpbmcgV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50
UGhhc2U7CisjZW5kaWYKKworI2RlZmluZSBJTVBPUlRfRlJPTV9XRUJDT1JFX05BTUVTUEFDRShu
YW1lKSBcCit1c2luZyBXZWJDb3JlOjpuYW1lOyBcCisKK1dFQl9SRVBMQVlfSU5QVVRfTkFNRVNf
Rk9SX0VBQ0goSU1QT1JUX0ZST01fV0VCQ09SRV9OQU1FU1BBQ0UpCisjdW5kZWYgSU1QT1JUX0ZS
T01fV0VCQ09SRV9OQU1FU1BBQ0UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1aW50MzJfdCBm
cmFtZUluZGV4RnJvbURvY3VtZW50KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBB
U1NFUlQoZG9jdW1lbnQpOworICAgIEFTU0VSVChkb2N1bWVudC0+ZnJhbWUoKSk7CisgICAgcmV0
dXJuIGZyYW1lSW5kZXhGcm9tRnJhbWUoZG9jdW1lbnQtPmZyYW1lKCkpOworfQorCit1aW50MzJf
dCBmcmFtZUluZGV4RnJvbUZyYW1lKGNvbnN0IEZyYW1lKiB0YXJnZXRGcmFtZSkKK3sKKyAgICBB
U1NFUlQodGFyZ2V0RnJhbWUpOworCisgICAgdWludDMyX3QgY3VycmVudEluZGV4ID0gMDsKKyAg
ICBmb3IgKGNvbnN0IEZyYW1lKiBmcmFtZSA9ICZ0YXJnZXRGcmFtZS0+dHJlZSgpLnRvcCgpOyBm
cmFtZTsgKytjdXJyZW50SW5kZXgsIGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQo
KSkgeworICAgICAgICBpZiAoZnJhbWUgPT0gdGFyZ2V0RnJhbWUpCisgICAgICAgICAgICByZXR1
cm4gY3VycmVudEluZGV4OworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiAwOworfQorCitEb2N1bWVudCogZG9jdW1lbnRGcm9tRnJhbWVJbmRleChQYWdlKiBw
YWdlLCB1aW50MzJfdCBmcmFtZUluZGV4KQoreworICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lRnJv
bUZyYW1lSW5kZXgocGFnZSwgZnJhbWVJbmRleCk7CisgICAgcmV0dXJuIGZyYW1lID8gZnJhbWUt
PmRvY3VtZW50KCkgOiBudWxscHRyOworfQorCitGcmFtZSogZnJhbWVGcm9tRnJhbWVJbmRleChQ
YWdlKiBwYWdlLCB1aW50MzJfdCBmcmFtZUluZGV4KQoreworICAgIEFTU0VSVChwYWdlKTsKKyAg
ICBBU1NFUlQoZnJhbWVJbmRleCA+PSAwKTsKKworICAgIEZyYW1lKiBmcmFtZSA9ICZwYWdlLT5t
YWluRnJhbWUoKTsKKyAgICB1aW50MzJfdCBjdXJyZW50SW5kZXggPSAwOworICAgIGZvciAoOyBj
dXJyZW50SW5kZXggPCBmcmFtZUluZGV4ICYmIGZyYW1lOyArK2N1cnJlbnRJbmRleCwgZnJhbWUg
PSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7IH0KKworICAgIHJldHVybiBmcmFtZTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZGVmaW5lIEVOQ09ERV9UWVBFX1dJVEhf
S0VZKF9lbmNvZGVkVmFsdWUsIF90eXBlLCBfa2V5LCBfdmFsdWUpIFwKKyAgICBfZW5jb2RlZFZh
bHVlLnB1dDxfdHlwZT4oQVNDSUlMaXRlcmFsKCNfa2V5KSwgX3ZhbHVlKQorCisjZGVmaW5lIEVO
Q09ERV9PUFRJT05BTF9UWVBFX1dJVEhfS0VZKF9lbmNvZGVkVmFsdWUsIF90eXBlLCBfa2V5LCBf
dmFsdWUsIGNvbmRpdGlvbikgXAorICAgIGlmIChjb25kaXRpb24pIFwKKyAgICAgICAgRU5DT0RF
X1RZUEVfV0lUSF9LRVkoX2VuY29kZWRWYWx1ZSwgX3R5cGUsIF9rZXksIF92YWx1ZSkKKworI2Rl
ZmluZSBERUNPREVfVFlQRV9XSVRIX0tFWV9UT19MVkFMVUUoX2VuY29kZWRWYWx1ZSwgX3R5cGUs
IF9rZXksIF9sdmFsdWUpIFwKKyAgICBpZiAoIV9lbmNvZGVkVmFsdWUuZ2V0PF90eXBlPihBU0NJ
SUxpdGVyYWwoI19rZXkpLCBfbHZhbHVlKSkgXAorICAgICAgICByZXR1cm4gZmFsc2UKKworI2Rl
ZmluZSBERUNPREVfVFlQRV9XSVRIX0tFWShfZW5jb2RlZFZhbHVlLCBfdHlwZSwgX2tleSkgXAor
ICAgIEVuY29kaW5nVHJhaXRzPF90eXBlPjo6RGVjb2RlZFR5cGUgX2tleTsgXAorICAgIERFQ09E
RV9UWVBFX1dJVEhfS0VZX1RPX0xWQUxVRShfZW5jb2RlZFZhbHVlLCBfdHlwZSwgX2tleSwgX2tl
eSkKKworI2RlZmluZSBERUNPREVfT1BUSU9OQUxfVFlQRV9XSVRIX0tFWV9UT19MVkFMVUUoX2Vu
Y29kZWRWYWx1ZSwgX3R5cGUsIF9rZXksIF9sdmFsdWUpIFwKKyAgICBib29sIF9rZXkgIyMgV2Fz
RGVjb2RlZCA9IF9lbmNvZGVkVmFsdWUuZ2V0PF90eXBlPihBU0NJSUxpdGVyYWwoI19rZXkpLCBf
bHZhbHVlKQorCisjZGVmaW5lIERFQ09ERV9PUFRJT05BTF9UWVBFX1dJVEhfS0VZKF9lbmNvZGVk
VmFsdWUsIF90eXBlLCBfa2V5KSBcCisgICAgRW5jb2RpbmdUcmFpdHM8X3R5cGU+OjpEZWNvZGVk
VHlwZSBfa2V5OyBcCisgICAgREVDT0RFX09QVElPTkFMX1RZUEVfV0lUSF9LRVlfVE9fTFZBTFVF
KF9lbmNvZGVkVmFsdWUsIF90eXBlLCBfa2V5LCBfa2V5KQorCituYW1lc3BhY2UgSlNDIHsKKwor
RW5jb2RlZFZhbHVlIEVuY29kaW5nVHJhaXRzPEZvcm1EYXRhPjo6ZW5jb2RlVmFsdWUoUmVmUHRy
PEZvcm1EYXRhPiBkYXRhKQoreworICAgIEVuY29kZWRWYWx1ZSBlbmNvZGVkRGF0YSA9IEVuY29k
ZWRWYWx1ZTo6Y3JlYXRlT2JqZWN0KCk7CisKKyAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNv
ZGVkRGF0YSwgYm9vbCwgYWx3YXlzU3RyZWFtLCBkYXRhLT5hbHdheXNTdHJlYW0oKSk7CisgICAg
RU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFZlY3RvcjxjaGFyPiwgYm91bmRhcnks
IGRhdGEtPmJvdW5kYXJ5KCkpOworICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRh
LCBWZWN0b3I8Rm9ybURhdGFFbGVtZW50PiwgZWxlbWVudHMsIGRhdGEtPmVsZW1lbnRzKCkpOwor
ICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBpbnQ2NF90LCBpZGVudGlmaWVy
LCBkYXRhLT5pZGVudGlmaWVyKCkpOworCisgICAgcmV0dXJuIGVuY29kZWREYXRhOworfQorCitj
bGFzcyBEZXNlcmlhbGl6ZWRGb3JtRGF0YSA6IHB1YmxpYyBGb3JtRGF0YSB7CitwdWJsaWM6Cisg
ICAgRGVzZXJpYWxpemVkRm9ybURhdGEoYm9vbCBhbHdheXNTdHJlYW0sIFZlY3RvcjxjaGFyPiBi
b3VuZGFyeSwgVmVjdG9yPEZvcm1EYXRhRWxlbWVudD4gZWxlbWVudHMsIGludDY0X3QgaWRlbnRp
ZmllcikKKyAgICB7CisgICAgICAgIG1fYWx3YXlzU3RyZWFtID0gYWx3YXlzU3RyZWFtOworICAg
ICAgICBtX2JvdW5kYXJ5ID0gYm91bmRhcnk7CisgICAgICAgIG1fZWxlbWVudHMgPSBlbGVtZW50
czsKKyAgICAgICAgbV9pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKKyAgICB9Cit9OworCitib29s
IEVuY29kaW5nVHJhaXRzPEZvcm1EYXRhPjo6ZGVjb2RlVmFsdWUoRW5jb2RlZFZhbHVlJiBlbmNv
ZGVkRGF0YSwgUmVmUHRyPEZvcm1EYXRhPiYgZm9ybURhdGEpCit7CisgICAgREVDT0RFX1RZUEVf
V0lUSF9LRVkoZW5jb2RlZERhdGEsIGJvb2wsIGFsd2F5c1N0cmVhbSk7CisgICAgREVDT0RFX1RZ
UEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFZlY3RvcjxjaGFyPiwgYm91bmRhcnkpOworICAgIERF
Q09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBWZWN0b3I8Rm9ybURhdGFFbGVtZW50Piwg
ZWxlbWVudHMpOworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBpbnQ2NF90
LCBpZGVudGlmaWVyKTsKKworICAgIGZvcm1EYXRhID0gYWRvcHRSZWYobmV3IERlc2VyaWFsaXpl
ZEZvcm1EYXRhKGFsd2F5c1N0cmVhbSwgYm91bmRhcnksIGVsZW1lbnRzLCBpZGVudGlmaWVyKSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPD4KK0VuY29kZWRWYWx1ZSBFbmNvZGlu
Z1RyYWl0czxGb3JtRGF0YUVsZW1lbnQ+OjplbmNvZGVWYWx1ZShjb25zdCBGb3JtRGF0YUVsZW1l
bnQmIGVsZW1lbnQpCit7CisgICAgRW5jb2RlZFZhbHVlIGVuY29kZWREYXRhID0gRW5jb2RlZFZh
bHVlOjpjcmVhdGVPYmplY3QoKTsKKworICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRE
YXRhLCBGb3JtRGF0YUVsZW1lbnQ6OlR5cGUsIHR5cGUsIGVsZW1lbnQubV90eXBlKTsKKyAgICBz
d2l0Y2ggKGVsZW1lbnQubV90eXBlKSB7CisgICAgY2FzZSBGb3JtRGF0YUVsZW1lbnQ6OlR5cGU6
OkRhdGE6CisgICAgICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBWZWN0b3I8
Y2hhcj4sIGRhdGEsIGVsZW1lbnQubV9kYXRhKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBG
b3JtRGF0YUVsZW1lbnQ6OlR5cGU6OkVuY29kZWRGaWxlOgorICAgICAgICBFTkNPREVfVFlQRV9X
SVRIX0tFWShlbmNvZGVkRGF0YSwgU3RyaW5nLCBmaWxlbmFtZSwgZWxlbWVudC5tX2ZpbGVuYW1l
KTsKKyAgICAgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGJvb2wsIHNob3Vs
ZEdlbmVyYXRlRmlsZSwgZWxlbWVudC5tX3Nob3VsZEdlbmVyYXRlRmlsZSk7CisgICAgICAgIEVO
Q09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBsb25nIGxvbmcsIGZpbGVTdGFydCwgZWxl
bWVudC5tX2ZpbGVTdGFydCk7CisgICAgICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRE
YXRhLCBsb25nIGxvbmcsIGZpbGVMZW5ndGgsIGVsZW1lbnQubV9maWxlTGVuZ3RoKTsKKyAgICAg
ICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGRvdWJsZSwgZXhwZWN0ZWRGaWxl
TW9kaWZpY2F0aW9uVGltZSwgZWxlbWVudC5tX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvcm1EYXRhRWxlbWVudDo6VHlwZTo6RW5jb2Rl
ZEJsb2I6CisgICAgICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBVUkwsIGJs
b2JVUkwsIGVsZW1lbnQubV91cmwpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1
cm4gZW5jb2RlZERhdGE7Cit9CisKK3RlbXBsYXRlPD4KK2Jvb2wgRW5jb2RpbmdUcmFpdHM8Rm9y
bURhdGFFbGVtZW50Pjo6ZGVjb2RlVmFsdWUoRW5jb2RlZFZhbHVlJiBlbmNvZGVkRGF0YSwgRm9y
bURhdGFFbGVtZW50JiBlbGVtZW50KQoreworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZX1RPX0xW
QUxVRShlbmNvZGVkRGF0YSwgRm9ybURhdGFFbGVtZW50OjpUeXBlLCB0eXBlLCBlbGVtZW50Lm1f
dHlwZSk7CisgICAgc3dpdGNoIChlbGVtZW50Lm1fdHlwZSkgeworICAgIGNhc2UgRm9ybURhdGFF
bGVtZW50OjpUeXBlOjpEYXRhOgorICAgICAgICBERUNPREVfVFlQRV9XSVRIX0tFWV9UT19MVkFM
VUUoZW5jb2RlZERhdGEsIFZlY3RvcjxjaGFyPiwgZGF0YSwgZWxlbWVudC5tX2RhdGEpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEZvcm1EYXRhRWxlbWVudDo6VHlwZTo6RW5jb2RlZEZpbGU6
CisgICAgICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZX1RPX0xWQUxVRShlbmNvZGVkRGF0YSwgU3Ry
aW5nLCBmaWxlbmFtZSwgZWxlbWVudC5tX2ZpbGVuYW1lKTsKKyAgICAgICAgREVDT0RFX1RZUEVf
V0lUSF9LRVlfVE9fTFZBTFVFKGVuY29kZWREYXRhLCBib29sLCBzaG91bGRHZW5lcmF0ZUZpbGUs
IGVsZW1lbnQubV9zaG91bGRHZW5lcmF0ZUZpbGUpOworICAgICAgICBERUNPREVfVFlQRV9XSVRI
X0tFWV9UT19MVkFMVUUoZW5jb2RlZERhdGEsIGxvbmcgbG9uZywgZmlsZVN0YXJ0LCBlbGVtZW50
Lm1fZmlsZVN0YXJ0KTsKKyAgICAgICAgREVDT0RFX1RZUEVfV0lUSF9LRVlfVE9fTFZBTFVFKGVu
Y29kZWREYXRhLCBsb25nIGxvbmcsIGZpbGVMZW5ndGgsIGVsZW1lbnQubV9maWxlTGVuZ3RoKTsK
KyAgICAgICAgREVDT0RFX1RZUEVfV0lUSF9LRVlfVE9fTFZBTFVFKGVuY29kZWREYXRhLCBkb3Vi
bGUsIGV4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUsIGVsZW1lbnQubV9leHBlY3RlZEZpbGVN
b2RpZmljYXRpb25UaW1lKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb3JtRGF0YUVsZW1l
bnQ6OlR5cGU6OkVuY29kZWRCbG9iOgorICAgICAgICBERUNPREVfVFlQRV9XSVRIX0tFWV9UT19M
VkFMVUUoZW5jb2RlZERhdGEsIFVSTCwgYmxvYlVSTCwgZWxlbWVudC5tX3VybCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitFbmNvZGVkVmFsdWUgRW5j
b2RpbmdUcmFpdHM8RnJhbWVMb2FkUmVxdWVzdD46OmVuY29kZVZhbHVlKGNvbnN0IEZyYW1lTG9h
ZFJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgRW5jb2RlZFZhbHVlIGVuY29kZWREYXRhID0gRW5j
b2RlZFZhbHVlOjpjcmVhdGVPYmplY3QoKTsKKworICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVu
Y29kZWREYXRhLCBTdHJpbmcsIHNlY3VyaXR5T3JpZ2luLCByZXF1ZXN0LnJlcXVlc3RlcigpID8g
cmVxdWVzdC5yZXF1ZXN0ZXIoKS0+dG9TdHJpbmcoKSA6ICIiKTsKKyAgICBFTkNPREVfVFlQRV9X
SVRIX0tFWShlbmNvZGVkRGF0YSwgUmVzb3VyY2VSZXF1ZXN0LCByZXNvdXJjZVJlcXVlc3QsIHJl
cXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkpOworICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29k
ZWREYXRhLCBTdHJpbmcsIGZyYW1lTmFtZSwgcmVxdWVzdC5mcmFtZU5hbWUoKSk7CisgICAgRU5D
T0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGJvb2wsIHNob3VsZENoZWNrTmV3V2luZG93
UG9saWN5LCByZXF1ZXN0LnNob3VsZENoZWNrTmV3V2luZG93UG9saWN5KCkpOworICAgIEVOQ09E
RV9PUFRJT05BTF9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBTdWJzdGl0dXRlRGF0YSwgc3Vi
c3RpdHV0ZURhdGEsIHJlcXVlc3Quc3Vic3RpdHV0ZURhdGEoKSwgcmVxdWVzdC5oYXNTdWJzdGl0
dXRlRGF0YSgpKTsKKworICAgIHJldHVybiBlbmNvZGVkRGF0YTsKK30KKworYm9vbCBFbmNvZGlu
Z1RyYWl0czxGcmFtZUxvYWRSZXF1ZXN0Pjo6ZGVjb2RlVmFsdWUoRW5jb2RlZFZhbHVlJiBlbmNv
ZGVkRGF0YSwgc3RkOjp1bmlxdWVfcHRyPEZyYW1lTG9hZFJlcXVlc3Q+JiBkZWNvZGVkUmVxdWVz
dCkKK3sKKyAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgU2VjdXJpdHlPcmln
aW4sIHNlY3VyaXR5T3JpZ2luKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVzb3VyY2VSZXF1ZXN0
PiByZXNvdXJjZVJlcXVlc3Q7CisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVlfVE9fTFZBTFVFKGVu
Y29kZWREYXRhLCBSZXNvdXJjZVJlcXVlc3QsIHJlc291cmNlUmVxdWVzdCwgcmVzb3VyY2VSZXF1
ZXN0KTsKKyAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgU3RyaW5nLCBmcmFt
ZU5hbWUpOworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBib29sLCBzaG91
bGRDaGVja05ld1dpbmRvd1BvbGljeSk7CisgICAgREVDT0RFX09QVElPTkFMX1RZUEVfV0lUSF9L
RVkoZW5jb2RlZERhdGEsIFN1YnN0aXR1dGVEYXRhLCBzdWJzdGl0dXRlRGF0YSk7CisKKyAgICBk
ZWNvZGVkUmVxdWVzdCA9IHN0ZDo6bWFrZV91bmlxdWU8RnJhbWVMb2FkUmVxdWVzdD4oc2VjdXJp
dHlPcmlnaW4uZ2V0KCksICpyZXNvdXJjZVJlcXVlc3QpOworICAgIGRlY29kZWRSZXF1ZXN0LT5z
ZXRGcmFtZU5hbWUoZnJhbWVOYW1lKTsKKyAgICBkZWNvZGVkUmVxdWVzdC0+c2V0U2hvdWxkQ2hl
Y2tOZXdXaW5kb3dQb2xpY3koc2hvdWxkQ2hlY2tOZXdXaW5kb3dQb2xpY3kpOworCisgICAgaWYg
KHN1YnN0aXR1dGVEYXRhV2FzRGVjb2RlZCkKKyAgICAgICAgZGVjb2RlZFJlcXVlc3QtPnNldFN1
YnN0aXR1dGVEYXRhKHN1YnN0aXR1dGVEYXRhKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitF
bmNvZGVkVmFsdWUgRW5jb2RpbmdUcmFpdHM8SFRUUEhlYWRlck1hcD46OmVuY29kZVZhbHVlKGNv
bnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRlck1hcCkKK3sKKyAgICBFbmNvZGVkVmFsdWUgZW5jb2Rl
ZERhdGEgPSBFbmNvZGVkVmFsdWU6OmNyZWF0ZU9iamVjdCgpOworICAgIEVuY29kZWRWYWx1ZSBl
bmNvZGVkS2V5cyA9IEVuY29kZWRWYWx1ZTo6Y3JlYXRlQXJyYXkoKTsKKyAgICBFbmNvZGVkVmFs
dWUgZW5jb2RlZFZhbHVlcyA9IEVuY29kZWRWYWx1ZTo6Y3JlYXRlQXJyYXkoKTsKKworICAgIGZv
ciAoYXV0byBpdCA9IGhlYWRlck1hcC5iZWdpbigpOyBpdCAhPSBoZWFkZXJNYXAuZW5kKCk7ICsr
aXQpIHsKKyAgICAgICAgZW5jb2RlZEtleXMuYXBwZW5kPFN0cmluZz4oaXQtPmtleSk7CisgICAg
ICAgIGVuY29kZWRWYWx1ZXMuYXBwZW5kPFN0cmluZz4oaXQtPnZhbHVlKTsKKyAgICB9CisKKyAg
ICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgRW5jb2RlZFZhbHVlLCBrZXlzLCBl
bmNvZGVkS2V5cyk7CisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIEVuY29k
ZWRWYWx1ZSwgdmFsdWVzLCBlbmNvZGVkVmFsdWVzKTsKKworICAgIHJldHVybiBlbmNvZGVkRGF0
YTsKK30KKworYm9vbCBFbmNvZGluZ1RyYWl0czxIVFRQSGVhZGVyTWFwPjo6ZGVjb2RlVmFsdWUo
RW5jb2RlZFZhbHVlJiBlbmNvZGVkRGF0YSwgc3RkOjp1bmlxdWVfcHRyPEhUVFBIZWFkZXJNYXA+
JiBkZWNvZGVkVmFsdWUpCit7CisgICAgYXV0byBkZWNvZGVkSGVhZGVyTWFwID0gc3RkOjptYWtl
X3VuaXF1ZTxIVFRQSGVhZGVyTWFwPigpOworCisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5j
b2RlZERhdGEsIFZlY3RvcjxTdHJpbmc+LCBrZXlzKTsKKyAgICBERUNPREVfVFlQRV9XSVRIX0tF
WShlbmNvZGVkRGF0YSwgVmVjdG9yPFN0cmluZz4sIHZhbHVlcyk7CisKKyAgICBpZiAoa2V5cy5z
aXplKCkgIT0gdmFsdWVzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKQorICAgICAgICBkZWNvZGVkSGVh
ZGVyTWFwLT5hZGQoa2V5c1tpXSwgdmFsdWVzW2ldKTsKKworICAgIGRlY29kZWRWYWx1ZSA9IHN0
ZDo6bW92ZShkZWNvZGVkSGVhZGVyTWFwKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxh
dGU8PgorRW5jb2RlZFZhbHVlIEVuY29kaW5nVHJhaXRzPE1pbWVDbGFzc0luZm8+OjplbmNvZGVW
YWx1ZShjb25zdCBNaW1lQ2xhc3NJbmZvJiBpbnB1dCkKK3sKKyAgICBFbmNvZGVkVmFsdWUgZW5j
b2RlZERhdGEgPSBFbmNvZGVkVmFsdWU6OmNyZWF0ZU9iamVjdCgpOworCisgICAgRU5DT0RFX1RZ
UEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFN0cmluZywgdHlwZSwgaW5wdXQudHlwZSk7CisgICAg
RU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFN0cmluZywgZGVzYywgaW5wdXQuZGVz
Yyk7CisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFZlY3RvcjxTdHJpbmc+
LCBleHRlbnNpb25zLCBpbnB1dC5leHRlbnNpb25zKTsKKworICAgIHJldHVybiBlbmNvZGVkRGF0
YTsKK30KKwordGVtcGxhdGU8PgorYm9vbCBFbmNvZGluZ1RyYWl0czxNaW1lQ2xhc3NJbmZvPjo6
ZGVjb2RlVmFsdWUoRW5jb2RlZFZhbHVlJiBlbmNvZGVkRGF0YSwgTWltZUNsYXNzSW5mbyYgaW5w
dXQpCit7CisgICAgTWltZUNsYXNzSW5mbyBpbmZvOworCisgICAgREVDT0RFX1RZUEVfV0lUSF9L
RVlfVE9fTFZBTFVFKGVuY29kZWREYXRhLCBTdHJpbmcsIHR5cGUsIGluZm8udHlwZSk7CisgICAg
REVDT0RFX1RZUEVfV0lUSF9LRVlfVE9fTFZBTFVFKGVuY29kZWREYXRhLCBTdHJpbmcsIGRlc2Ms
IGluZm8uZGVzYyk7CisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVlfVE9fTFZBTFVFKGVuY29kZWRE
YXRhLCBWZWN0b3I8U3RyaW5nPiwgZXh0ZW5zaW9ucywgaW5mby5leHRlbnNpb25zKTsKKworICAg
IGlucHV0ID0gaW5mbzsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRW5jb2RlZFZhbHVlIEVuY29k
aW5nVHJhaXRzPE5vbmRldGVybWluaXN0aWNJbnB1dEJhc2U+OjplbmNvZGVWYWx1ZShjb25zdCBO
b25kZXRlcm1pbmlzdGljSW5wdXRCYXNlJiBpbnB1dCkKK3sKKyAgICBFbmNvZGVkVmFsdWUgZW5j
b2RlZFZhbHVlID0gRW5jb2RlZFZhbHVlOjpjcmVhdGVPYmplY3QoKTsKKyAgICBFTkNPREVfVFlQ
RV9XSVRIX0tFWShlbmNvZGVkVmFsdWUsIFN0cmluZywgdHlwZSwgaW5wdXQudHlwZSgpKTsKKwor
I2RlZmluZSBFTkNPREVfSUZfVFlQRV9UQUdfTUFUQ0hFUyhuYW1lKSBcCisgICAgaWYgKGlucHV0
LnR5cGUoKSA9PSBJbnB1dFRyYWl0czxuYW1lPjo6dHlwZSgpKSB7IFwKKyAgICAgICAgSW5wdXRU
cmFpdHM8bmFtZT46OmVuY29kZShlbmNvZGVkVmFsdWUsIHN0YXRpY19jYXN0PGNvbnN0IG5hbWUm
PihpbnB1dCkpOyBcCisgICAgICAgIHJldHVybiBlbmNvZGVkVmFsdWU7IFwKKyAgICB9IFwKKwor
ICAgIEpTX1JFUExBWV9JTlBVVF9OQU1FU19GT1JfRUFDSChFTkNPREVfSUZfVFlQRV9UQUdfTUFU
Q0hFUykKKyAgICBXRUJfUkVQTEFZX0lOUFVUX05BTUVTX0ZPUl9FQUNIKEVOQ09ERV9JRl9UWVBF
X1RBR19NQVRDSEVTKQorI3VuZGVmIEVOQ09ERV9JRl9UWVBFX1RBR19NQVRDSEVTCisKKyAgICAv
LyBUaGUgbWFjcm8gd29uJ3Qgd29yayBoZXJlIGJlY2F1c2Ugb2YgdGhlIGNsYXNzIHRlbXBsYXRl
IGFyZ3VtZW50LgorICAgIGlmIChpbnB1dC50eXBlKCkgPT0gSW5wdXRUcmFpdHM8TWVtb2l6ZWRE
T01SZXN1bHRCYXNlPjo6dHlwZSgpKSB7CisgICAgICAgIElucHV0VHJhaXRzPE1lbW9pemVkRE9N
UmVzdWx0QmFzZT46OmVuY29kZShlbmNvZGVkVmFsdWUsIHN0YXRpY19jYXN0PGNvbnN0IE1lbW9p
emVkRE9NUmVzdWx0QmFzZSY+KGlucHV0KSk7CisgICAgICAgIHJldHVybiBlbmNvZGVkVmFsdWU7
CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEVuY29kZWRW
YWx1ZSgpOworfQorCitFbmNvZGVkVmFsdWUgRW5jb2RpbmdUcmFpdHM8SGlzdG9yeUl0ZW0+Ojpl
bmNvZGVWYWx1ZShSZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0pCit7CisgICAgRW5jb2RlZFZhbHVl
IGVuY29kZWRWYWx1ZSA9IEVuY29kZWRWYWx1ZTo6Y3JlYXRlT2JqZWN0KCk7CisKKyAgICBFTkNP
REVfVFlQRV9XSVRIX0tFWShlbmNvZGVkVmFsdWUsIFN0cmluZywgb3JpZ2luYWxVUkxTdHJpbmcs
IGl0ZW0tPm9yaWdpbmFsVVJMU3RyaW5nKCkpOworICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVu
Y29kZWRWYWx1ZSwgU3RyaW5nLCB1cmxTdHJpbmcsIGl0ZW0tPnVybFN0cmluZygpKTsKKyAgICBF
TkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkVmFsdWUsIFN0cmluZywgdGl0bGUsIGl0ZW0tPnRp
dGxlKCkpOworICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgU3RyaW5nLCBw
YXJlbnQsIGl0ZW0tPnBhcmVudCgpKTsKKyAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVk
VmFsdWUsIGludDY0X3QsIGRvY3VtZW50U2VxdWVuY2VOdW1iZXIsIGl0ZW0tPmRvY3VtZW50U2Vx
dWVuY2VOdW1iZXIoKSk7CisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBW
ZWN0b3I8U3RyaW5nPiwgZG9jdW1lbnRTdGF0ZSwgaXRlbS0+ZG9jdW1lbnRTdGF0ZSgpKTsKKyAg
ICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkVmFsdWUsIFN0cmluZywgZm9ybUNvbnRlbnRU
eXBlLCBpdGVtLT5mb3JtQ29udGVudFR5cGUoKSk7CisgICAgRU5DT0RFX09QVElPTkFMX1RZUEVf
V0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBGb3JtRGF0YSwgZm9ybURhdGEsIGFkb3B0UmVmKGl0ZW0t
PmZvcm1EYXRhKCkpLCBpdGVtLT5mb3JtRGF0YSgpKTsKKyAgICBFTkNPREVfVFlQRV9XSVRIX0tF
WShlbmNvZGVkVmFsdWUsIGludDY0X3QsIGl0ZW1TZXF1ZW5jZU51bWJlciwgaXRlbS0+aXRlbVNl
cXVlbmNlTnVtYmVyKCkpOworICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwg
U3RyaW5nLCByZWZlcnJlciwgaXRlbS0+cmVmZXJyZXIoKSk7CisgICAgRU5DT0RFX1RZUEVfV0lU
SF9LRVkoZW5jb2RlZFZhbHVlLCBJbnRQb2ludCwgc2Nyb2xsUG9pbnQsIGl0ZW0tPnNjcm9sbFBv
aW50KCkpOworICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgZmxvYXQsIHBh
Z2VTY2FsZUZhY3RvciwgaXRlbS0+cGFnZVNjYWxlRmFjdG9yKCkpOworICAgIEVOQ09ERV9PUFRJ
T05BTF9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgU2VyaWFsaXplZFNjcmlwdFZhbHVlLCBz
dGF0ZU9iamVjdCwgaXRlbS0+c3RhdGVPYmplY3QoKSwgaXRlbS0+c3RhdGVPYmplY3QoKS5nZXQo
KSk7CisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBTdHJpbmcsIHRhcmdl
dCwgaXRlbS0+dGFyZ2V0KCkpOworICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1
ZSwgVmVjdG9yPEhpc3RvcnlJdGVtPiwgY2hpbGRyZW4sIGl0ZW0tPmNoaWxkcmVuKCkpOworCisg
ICAgcmV0dXJuIGVuY29kZWRWYWx1ZTsKK30KKworYm9vbCBFbmNvZGluZ1RyYWl0czxIaXN0b3J5
SXRlbT46OmRlY29kZVZhbHVlKEVuY29kZWRWYWx1ZSYgZW5jb2RlZERhdGEsIFJlZlB0cjxIaXN0
b3J5SXRlbT4mIGRlY29kZWRJdGVtKQoreworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29k
ZWREYXRhLCBTdHJpbmcsIG9yaWdpbmFsVVJMU3RyaW5nKTsKKyAgICBERUNPREVfVFlQRV9XSVRI
X0tFWShlbmNvZGVkRGF0YSwgU3RyaW5nLCB1cmxTdHJpbmcpOworICAgIERFQ09ERV9UWVBFX1dJ
VEhfS0VZKGVuY29kZWREYXRhLCBTdHJpbmcsIHRpdGxlKTsKKyAgICBERUNPREVfVFlQRV9XSVRI
X0tFWShlbmNvZGVkRGF0YSwgU3RyaW5nLCBwYXJlbnQpOworICAgIERFQ09ERV9UWVBFX1dJVEhf
S0VZKGVuY29kZWREYXRhLCBpbnQ2NF90LCBkb2N1bWVudFNlcXVlbmNlTnVtYmVyKTsKKyAgICBE
RUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgVmVjdG9yPFN0cmluZz4sIGRvY3VtZW50
U3RhdGUpOworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBTdHJpbmcsIGZv
cm1Db250ZW50VHlwZSk7CisgICAgREVDT0RFX09QVElPTkFMX1RZUEVfV0lUSF9LRVkoZW5jb2Rl
ZERhdGEsIEZvcm1EYXRhLCBmb3JtRGF0YSk7CisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5j
b2RlZERhdGEsIGludDY0X3QsIGl0ZW1TZXF1ZW5jZU51bWJlcik7CisgICAgREVDT0RFX1RZUEVf
V0lUSF9LRVkoZW5jb2RlZERhdGEsIFN0cmluZywgcmVmZXJyZXIpOworICAgIERFQ09ERV9UWVBF
X1dJVEhfS0VZKGVuY29kZWREYXRhLCBJbnRQb2ludCwgc2Nyb2xsUG9pbnQpOworICAgIERFQ09E
RV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBmbG9hdCwgcGFnZVNjYWxlRmFjdG9yKTsKKyAg
ICBERUNPREVfT1BUSU9OQUxfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgU2VyaWFsaXplZFNj
cmlwdFZhbHVlLCBzdGF0ZU9iamVjdCk7CisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2Rl
ZERhdGEsIFN0cmluZywgdGFyZ2V0KTsKKyAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVk
RGF0YSwgVmVjdG9yPEhpc3RvcnlJdGVtPiwgY2hpbGRyZW4pOworCisgICAgUmVmUHRyPEhpc3Rv
cnlJdGVtPiBpdGVtID0gSGlzdG9yeUl0ZW06OmNyZWF0ZSgpOworICAgIGl0ZW0tPnNldE9yaWdp
bmFsVVJMU3RyaW5nKG9yaWdpbmFsVVJMU3RyaW5nKTsKKyAgICBpdGVtLT5zZXRVUkxTdHJpbmco
dXJsU3RyaW5nKTsKKyAgICBpdGVtLT5zZXRUaXRsZSh0aXRsZSk7CisgICAgaXRlbS0+c2V0UGFy
ZW50KHBhcmVudCk7CisgICAgaXRlbS0+c2V0RG9jdW1lbnRTZXF1ZW5jZU51bWJlcihkb2N1bWVu
dFNlcXVlbmNlTnVtYmVyKTsKKyAgICBpdGVtLT5zZXREb2N1bWVudFN0YXRlKGRvY3VtZW50U3Rh
dGUpOworICAgIGl0ZW0tPnNldEZvcm1Db250ZW50VHlwZShmb3JtQ29udGVudFR5cGUpOworICAg
IGlmIChmb3JtRGF0YVdhc0RlY29kZWQpCisgICAgICAgIGl0ZW0tPnNldEZvcm1EYXRhKGZvcm1E
YXRhLnJlbGVhc2UoKSk7CisgICAgaXRlbS0+c2V0SXRlbVNlcXVlbmNlTnVtYmVyKGl0ZW1TZXF1
ZW5jZU51bWJlcik7CisgICAgaXRlbS0+c2V0UmVmZXJyZXIocmVmZXJyZXIpOworICAgIGl0ZW0t
PnNldFNjcm9sbFBvaW50KHNjcm9sbFBvaW50KTsKKyAgICBpdGVtLT5zZXRQYWdlU2NhbGVGYWN0
b3IocGFnZVNjYWxlRmFjdG9yKTsKKyAgICBpdGVtLT5zZXRUYXJnZXQodGFyZ2V0KTsKKyAgICBm
b3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW4pCisgICAgICAgIGl0ZW0tPmFkZENoaWxkSXRlbShj
aGlsZCk7CisgICAgaWYgKHN0YXRlT2JqZWN0V2FzRGVjb2RlZCkKKyAgICAgICAgaXRlbS0+c2V0
U3RhdGVPYmplY3Qoc3RhdGVPYmplY3QucmVsZWFzZSgpKTsKKworICAgIGRlY29kZWRJdGVtID0g
aXRlbS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPD4KK0VuY29k
ZWRWYWx1ZSBFbmNvZGluZ1RyYWl0czxJbnRQb2ludD46OmVuY29kZVZhbHVlKGNvbnN0IEludFBv
aW50JiBwb2ludCkKK3sKKyAgICBFbmNvZGVkVmFsdWUgZW5jb2RlZERhdGEgPSBFbmNvZGVkVmFs
dWU6OmNyZWF0ZU9iamVjdCgpOworCisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERh
dGEsIGludCwgeCwgcG9pbnQueCgpKTsKKyAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVk
RGF0YSwgaW50LCB5LCBwb2ludC55KCkpOworCisgICAgcmV0dXJuIGVuY29kZWREYXRhOworfQor
Cit0ZW1wbGF0ZTw+Citib29sIEVuY29kaW5nVHJhaXRzPEludFBvaW50Pjo6ZGVjb2RlVmFsdWUo
RW5jb2RlZFZhbHVlJiBlbmNvZGVkRGF0YSwgSW50UG9pbnQmIHBvaW50KQoreworICAgIEludFBv
aW50IGRlY29kZWRQb2ludDsKKworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRh
LCBpbnQsIHgpOworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBpbnQsIHkp
OworCisgICAgcG9pbnQgPSBJbnRQb2ludCh4LCB5KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBFbmNvZGluZ1RyYWl0czxOb25kZXRlcm1pbmlzdGljSW5wdXRCYXNlPjo6ZGVjb2RlVmFs
dWUoRW5jb2RlZFZhbHVlJiBlbmNvZGVkVmFsdWUsIHN0ZDo6dW5pcXVlX3B0cjxOb25kZXRlcm1p
bmlzdGljSW5wdXRCYXNlPiYgaW5wdXQpCit7CisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5j
b2RlZFZhbHVlLCBTdHJpbmcsIHR5cGUpOworCisjZGVmaW5lIERFQ09ERV9JRl9UWVBFX1RBR19N
QVRDSEVTKG5hbWUpIFwKKyAgICBpZiAodHlwZSA9PSBJbnB1dFRyYWl0czxuYW1lPjo6dHlwZSgp
KSB7IFwKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPG5hbWU+IGRlY29kZWRJbnB1dDsgXAorICAg
ICAgICBpZiAoIUlucHV0VHJhaXRzPG5hbWU+OjpkZWNvZGUoZW5jb2RlZFZhbHVlLCBkZWNvZGVk
SW5wdXQpKSBcCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IFwKKyAgICAgICAgXAorICAgICAg
ICBpbnB1dCA9IFdURjo6bW92ZShkZWNvZGVkSW5wdXQpOyBcCisgICAgICAgIHJldHVybiB0cnVl
OyBcCisgICAgfSBcCisKKyAgICBKU19SRVBMQVlfSU5QVVRfTkFNRVNfRk9SX0VBQ0goREVDT0RF
X0lGX1RZUEVfVEFHX01BVENIRVMpCisgICAgV0VCX1JFUExBWV9JTlBVVF9OQU1FU19GT1JfRUFD
SChERUNPREVfSUZfVFlQRV9UQUdfTUFUQ0hFUykKKyN1bmRlZiBERUNPREVfSUZfVFlQRV9UQUdf
TUFUQ0hFUworCisgICAgaWYgKHR5cGUgPT0gSW5wdXRUcmFpdHM8TWVtb2l6ZWRET01SZXN1bHRC
YXNlPjo6dHlwZSgpKSB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxNZW1vaXplZERPTVJlc3Vs
dEJhc2U+IGRlY29kZWRJbnB1dDsKKyAgICAgICAgaWYgKCFJbnB1dFRyYWl0czxNZW1vaXplZERP
TVJlc3VsdEJhc2U+OjpkZWNvZGUoZW5jb2RlZFZhbHVlLCBkZWNvZGVkSW5wdXQpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlucHV0ID0gV1RGOjptb3ZlKGRlY29kZWRJ
bnB1dCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsK
K30KKworI2lmIFVTRShBUFBLSVQpCitFbmNvZGVkVmFsdWUgRW5jb2RpbmdUcmFpdHM8S2V5cHJl
c3NDb21tYW5kPjo6ZW5jb2RlVmFsdWUoY29uc3QgS2V5cHJlc3NDb21tYW5kJiBjb21tYW5kKQor
eworICAgIEVuY29kZWRWYWx1ZSBlbmNvZGVkVmFsdWUgPSBFbmNvZGVkVmFsdWU6OmNyZWF0ZU9i
amVjdCgpOworCisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBTdHJpbmcs
IGNvbW1hbmROYW1lLCBjb21tYW5kLmNvbW1hbmROYW1lKTsKKyAgICBFTkNPREVfT1BUSU9OQUxf
VFlQRV9XSVRIX0tFWShlbmNvZGVkVmFsdWUsIFN0cmluZywgdGV4dCwgY29tbWFuZC50ZXh0LCAh
Y29tbWFuZC50ZXh0LmlzRW1wdHkoKSk7CisKKyAgICByZXR1cm4gZW5jb2RlZFZhbHVlOworfQor
Citib29sIEVuY29kaW5nVHJhaXRzPEtleXByZXNzQ29tbWFuZD46OmRlY29kZVZhbHVlKEVuY29k
ZWRWYWx1ZSYgZW5jb2RlZFZhbHVlLCBLZXlwcmVzc0NvbW1hbmQmIGRlY29kZWRWYWx1ZSkKK3sK
KyAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkVmFsdWUsIFN0cmluZywgY29tbWFuZE5h
bWUpOworICAgIERFQ09ERV9PUFRJT05BTF9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgU3Ry
aW5nLCB0ZXh0KTsKKworICAgIGRlY29kZWRWYWx1ZSA9IHRleHRXYXNEZWNvZGVkID8gS2V5cHJl
c3NDb21tYW5kKGNvbW1hbmROYW1lLCB0ZXh0KSA6IEtleXByZXNzQ29tbWFuZChjb21tYW5kTmFt
ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2NsYXNzIFBsYXRmb3JtS2V5Ym9hcmRFdmVudEFw
cEtpdCA6IHB1YmxpYyBXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQgeworcHVibGljOgor
ICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudEFwcEtpdChjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZl
bnQmIGV2ZW50LCBib29sIGhhbmRsZWRCeUlucHV0TWV0aG9kLCBWZWN0b3I8S2V5cHJlc3NDb21t
YW5kPiYgY29tbWFuZHMpCisgICAgICAgIDogUGxhdGZvcm1LZXlib2FyZEV2ZW50KGV2ZW50KQor
ICAgIHsKKyAgICAgICAgbV9oYW5kbGVkQnlJbnB1dE1ldGhvZCA9IGhhbmRsZWRCeUlucHV0TWV0
aG9kOworICAgICAgICBtX2NvbW1hbmRzID0gY29tbWFuZHM7CisgICAgfQorfTsKKyNlbmRpZiAv
LyBVU0UoQVBQS0lUKQorCitFbmNvZGVkVmFsdWUgRW5jb2RpbmdUcmFpdHM8UGxhdGZvcm1LZXli
b2FyZEV2ZW50Pjo6ZW5jb2RlVmFsdWUoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiBpbnB1
dCkKK3sKKyAgICBFbmNvZGVkVmFsdWUgZW5jb2RlZFZhbHVlID0gRW5jb2RlZFZhbHVlOjpjcmVh
dGVPYmplY3QoKTsKKworICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgZG91
YmxlLCB0aW1lc3RhbXAsIGlucHV0LnRpbWVzdGFtcCgpKTsKKyAgICBFTkNPREVfVFlQRV9XSVRI
X0tFWShlbmNvZGVkVmFsdWUsIFBsYXRmb3JtRXZlbnQ6OlR5cGUsIHR5cGUsIGlucHV0LnR5cGUo
KSk7CisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBQbGF0Zm9ybUV2ZW50
OjpNb2RpZmllcnMsIG1vZGlmaWVycywgc3RhdGljX2Nhc3Q8UGxhdGZvcm1FdmVudDo6TW9kaWZp
ZXJzPihpbnB1dC5tb2RpZmllcnMoKSkpOworICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29k
ZWRWYWx1ZSwgU3RyaW5nLCB0ZXh0LCBpbnB1dC50ZXh0KCkpOworICAgIEVOQ09ERV9UWVBFX1dJ
VEhfS0VZKGVuY29kZWRWYWx1ZSwgU3RyaW5nLCB1bm1vZGlmaWVkVGV4dCwgaW5wdXQudW5tb2Rp
ZmllZFRleHQoKSk7CisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBTdHJp
bmcsIGtleUlkZW50aWZpZXIsIGlucHV0LmtleUlkZW50aWZpZXIoKSk7CisgICAgRU5DT0RFX1RZ
UEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBpbnQsIHdpbmRvd3NWaXJ0dWFsS2V5Q29kZSwgaW5w
dXQud2luZG93c1ZpcnR1YWxLZXlDb2RlKCkpOworICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVu
Y29kZWRWYWx1ZSwgaW50LCBuYXRpdmVWaXJ0dWFsS2V5Q29kZSwgaW5wdXQubmF0aXZlVmlydHVh
bEtleUNvZGUoKSk7CisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBpbnQs
IG1hY0NoYXJDb2RlLCBpbnB1dC5tYWNDaGFyQ29kZSgpKTsKKyAgICBFTkNPREVfVFlQRV9XSVRI
X0tFWShlbmNvZGVkVmFsdWUsIGJvb2wsIGF1dG9SZXBlYXQsIGlucHV0LmlzQXV0b1JlcGVhdCgp
KTsKKyAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkVmFsdWUsIGJvb2wsIGtleXBhZCwg
aW5wdXQuaXNLZXlwYWQoKSk7CisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVl
LCBib29sLCBzeXN0ZW1LZXksIGlucHV0LmlzU3lzdGVtS2V5KCkpOworI2lmIFVTRShBUFBLSVQp
CisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBib29sLCBoYW5kbGVkQnlJ
bnB1dE1ldGhvZCwgaW5wdXQuaGFuZGxlZEJ5SW5wdXRNZXRob2QoKSk7CisgICAgRU5DT0RFX1RZ
UEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBWZWN0b3I8S2V5cHJlc3NDb21tYW5kPiwgY29tbWFu
ZHMsIGlucHV0LmNvbW1hbmRzKCkpOworI2VuZGlmCisgICAgcmV0dXJuIGVuY29kZWRWYWx1ZTsK
K30KKworYm9vbCBFbmNvZGluZ1RyYWl0czxQbGF0Zm9ybUtleWJvYXJkRXZlbnQ+OjpkZWNvZGVW
YWx1ZShFbmNvZGVkVmFsdWUmIGVuY29kZWRWYWx1ZSwgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3Jt
S2V5Ym9hcmRFdmVudD4mIGlucHV0KQoreworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29k
ZWRWYWx1ZSwgZG91YmxlLCB0aW1lc3RhbXApOworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVu
Y29kZWRWYWx1ZSwgUGxhdGZvcm1FdmVudDo6VHlwZSwgdHlwZSk7CisgICAgREVDT0RFX1RZUEVf
V0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBQbGF0Zm9ybUV2ZW50OjpNb2RpZmllcnMsIG1vZGlmaWVy
cyk7CisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBTdHJpbmcsIHRleHQp
OworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgU3RyaW5nLCB1bm1vZGlm
aWVkVGV4dCk7CisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBTdHJpbmcs
IGtleUlkZW50aWZpZXIpOworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwg
aW50LCB3aW5kb3dzVmlydHVhbEtleUNvZGUpOworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVu
Y29kZWRWYWx1ZSwgaW50LCBuYXRpdmVWaXJ0dWFsS2V5Q29kZSk7CisgICAgREVDT0RFX1RZUEVf
V0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBpbnQsIG1hY0NoYXJDb2RlKTsKKyAgICBERUNPREVfVFlQ
RV9XSVRIX0tFWShlbmNvZGVkVmFsdWUsIGJvb2wsIGF1dG9SZXBlYXQpOworICAgIERFQ09ERV9U
WVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgYm9vbCwga2V5cGFkKTsKKyAgICBERUNPREVfVFlQ
RV9XSVRIX0tFWShlbmNvZGVkVmFsdWUsIGJvb2wsIHN5c3RlbUtleSk7CisjaWYgVVNFKEFQUEtJ
VCkKKyAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkVmFsdWUsIGJvb2wsIGhhbmRsZWRC
eUlucHV0TWV0aG9kKTsKKyAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkVmFsdWUsIFZl
Y3RvcjxLZXlwcmVzc0NvbW1hbmQ+LCBjb21tYW5kcyk7CisjZW5kaWYKKworICAgIFBsYXRmb3Jt
S2V5Ym9hcmRFdmVudCBwbGF0Zm9ybUV2ZW50ID0gUGxhdGZvcm1LZXlib2FyZEV2ZW50KHR5cGUs
IHRleHQsIHVubW9kaWZpZWRUZXh0LCBrZXlJZGVudGlmaWVyLCBXVEY6OnNhZmVDYXN0PGludD4o
d2luZG93c1ZpcnR1YWxLZXlDb2RlKSwgV1RGOjpzYWZlQ2FzdDxpbnQ+KG5hdGl2ZVZpcnR1YWxL
ZXlDb2RlKSwgV1RGOjpzYWZlQ2FzdDxpbnQ+KG1hY0NoYXJDb2RlKSwgYXV0b1JlcGVhdCwga2V5
cGFkLCBzeXN0ZW1LZXksIG1vZGlmaWVycywgdGltZXN0YW1wKTsKKyNpZiBVU0UoQVBQS0lUKQor
ICAgIGlucHV0ID0gc3RkOjptYWtlX3VuaXF1ZTxQbGF0Zm9ybUtleWJvYXJkRXZlbnRBcHBLaXQ+
KHBsYXRmb3JtRXZlbnQsIGhhbmRsZWRCeUlucHV0TWV0aG9kLCBjb21tYW5kcyk7CisjZWxzZQor
ICAgIGlucHV0ID0gc3RkOjptYWtlX3VuaXF1ZTxQbGF0Zm9ybUtleWJvYXJkRXZlbnQ+KHBsYXRm
b3JtRXZlbnQpOworI2VuZGlmCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0VuY29kZWRWYWx1ZSBF
bmNvZGluZ1RyYWl0czxQbGF0Zm9ybU1vdXNlRXZlbnQ+OjplbmNvZGVWYWx1ZShjb25zdCBQbGF0
Zm9ybU1vdXNlRXZlbnQmIGlucHV0KQoreworICAgIEVuY29kZWRWYWx1ZSBlbmNvZGVkVmFsdWUg
PSBFbmNvZGVkVmFsdWU6OmNyZWF0ZU9iamVjdCgpOworCisgICAgRU5DT0RFX1RZUEVfV0lUSF9L
RVkoZW5jb2RlZFZhbHVlLCBpbnQsIHBvc2l0aW9uWCwgaW5wdXQucG9zaXRpb24oKS54KCkpOwor
ICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgaW50LCBwb3NpdGlvblksIGlu
cHV0LnBvc2l0aW9uKCkueSgpKTsKKyAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkVmFs
dWUsIGludCwgZ2xvYmFsUG9zaXRpb25YLCBpbnB1dC5nbG9iYWxQb3NpdGlvbigpLngoKSk7Cisg
ICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBpbnQsIGdsb2JhbFBvc2l0aW9u
WSwgaW5wdXQuZ2xvYmFsUG9zaXRpb24oKS55KCkpOworICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZ
KGVuY29kZWRWYWx1ZSwgTW91c2VCdXR0b24sIGJ1dHRvbiwgaW5wdXQuYnV0dG9uKCkpOworICAg
IEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgUGxhdGZvcm1FdmVudDo6VHlwZSwg
dHlwZSwgaW5wdXQudHlwZSgpKTsKKyAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkVmFs
dWUsIGludCwgY2xpY2tDb3VudCwgaW5wdXQuY2xpY2tDb3VudCgpKTsKKyAgICBFTkNPREVfVFlQ
RV9XSVRIX0tFWShlbmNvZGVkVmFsdWUsIGJvb2wsIHNoaWZ0S2V5LCBpbnB1dC5zaGlmdEtleSgp
KTsKKyAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkVmFsdWUsIGJvb2wsIGN0cmxLZXks
IGlucHV0LmN0cmxLZXkoKSk7CisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVl
LCBib29sLCBhbHRLZXksIGlucHV0LmFsdEtleSgpKTsKKyAgICBFTkNPREVfVFlQRV9XSVRIX0tF
WShlbmNvZGVkVmFsdWUsIGJvb2wsIG1ldGFLZXksIGlucHV0Lm1ldGFLZXkoKSk7CisgICAgRU5D
T0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVlLCBpbnQsIHRpbWVzdGFtcCwgaW5wdXQudGlt
ZXN0YW1wKCkpOworCisgICAgcmV0dXJuIGVuY29kZWRWYWx1ZTsKK30KKworYm9vbCBFbmNvZGlu
Z1RyYWl0czxQbGF0Zm9ybU1vdXNlRXZlbnQ+OjpkZWNvZGVWYWx1ZShFbmNvZGVkVmFsdWUmIGVu
Y29kZWRWYWx1ZSwgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtTW91c2VFdmVudD4mIGlucHV0KQor
eworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgaW50LCBwb3NpdGlvblgp
OworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgaW50LCBwb3NpdGlvblkp
OworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgaW50LCBnbG9iYWxQb3Np
dGlvblgpOworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgaW50LCBnbG9i
YWxQb3NpdGlvblkpOworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRWYWx1ZSwgTW91
c2VCdXR0b24sIGJ1dHRvbik7CisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZFZhbHVl
LCBQbGF0Zm9ybUV2ZW50OjpUeXBlLCB0eXBlKTsKKyAgICBERUNPREVfVFlQRV9XSVRIX0tFWShl
bmNvZGVkVmFsdWUsIGludCwgY2xpY2tDb3VudCk7CisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVko
ZW5jb2RlZFZhbHVlLCBib29sLCBzaGlmdEtleSk7CisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVko
ZW5jb2RlZFZhbHVlLCBib29sLCBjdHJsS2V5KTsKKyAgICBERUNPREVfVFlQRV9XSVRIX0tFWShl
bmNvZGVkVmFsdWUsIGJvb2wsIGFsdEtleSk7CisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5j
b2RlZFZhbHVlLCBib29sLCBtZXRhS2V5KTsKKyAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNv
ZGVkVmFsdWUsIGludCwgdGltZXN0YW1wKTsKKworICAgIGlucHV0ID0gc3RkOjptYWtlX3VuaXF1
ZTxQbGF0Zm9ybU1vdXNlRXZlbnQ+KEludFBvaW50KHBvc2l0aW9uWCwgcG9zaXRpb25ZKSwKKyAg
ICAgICAgSW50UG9pbnQoZ2xvYmFsUG9zaXRpb25YLCBnbG9iYWxQb3NpdGlvblkpLAorICAgICAg
ICBidXR0b24sIHR5cGUsIGNsaWNrQ291bnQsCisgICAgICAgIHNoaWZ0S2V5LCBjdHJsS2V5LCBh
bHRLZXksIG1ldGFLZXksIHRpbWVzdGFtcCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiBQ
TEFURk9STShDT0NPQSkKK3N0cnVjdCBQbGF0Zm9ybVdoZWVsRXZlbnRDb2NvYUFyZ3VtZW50cyB7
CisgICAgYm9vbCBkaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2U7CisgICAgYm9vbCBoYXNQcmVj
aXNlU2Nyb2xsaW5nRGVsdGFzOworICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIHBoYXNlOwor
ICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIG1vbWVudHVtUGhhc2U7CisgICAgaW50IHNjcm9s
bENvdW50OworICAgIGZsb2F0IHVuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVg7CisgICAgZmxv
YXQgdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhWTsKK307CisKK2NsYXNzIFBsYXRmb3JtV2hl
ZWxFdmVudENvY29hIDogcHVibGljIFBsYXRmb3JtV2hlZWxFdmVudCB7CitwdWJsaWM6CisgICAg
UGxhdGZvcm1XaGVlbEV2ZW50Q29jb2EoUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCwgUGxhdGZv
cm1XaGVlbEV2ZW50Q29jb2FBcmd1bWVudHMmIGFyZ3VtZW50cykKKyAgICAgICAgOiBQbGF0Zm9y
bVdoZWVsRXZlbnQoZXZlbnQpCisgICAgeworICAgICAgICBtX2RpcmVjdGlvbkludmVydGVkRnJv
bURldmljZSA9IGFyZ3VtZW50cy5kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2U7CisgICAgICAg
IG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcyA9IGFyZ3VtZW50cy5oYXNQcmVjaXNlU2Nyb2xs
aW5nRGVsdGFzOworICAgICAgICBtX3BoYXNlID0gYXJndW1lbnRzLnBoYXNlOworICAgICAgICBt
X21vbWVudHVtUGhhc2UgPSBhcmd1bWVudHMubW9tZW50dW1QaGFzZTsKKyAgICAgICAgbV9zY3Jv
bGxDb3VudCA9IGFyZ3VtZW50cy5zY3JvbGxDb3VudDsKKyAgICAgICAgbV91bmFjY2VsZXJhdGVk
U2Nyb2xsaW5nRGVsdGFYID0gYXJndW1lbnRzLnVuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVg7
CisgICAgICAgIG1fdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhWSA9IGFyZ3VtZW50cy51bmFj
Y2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFZOworICAgIH0KK307CisjZW5kaWYgLy8gUExBVEZPUk0o
Q09DT0EpCisKK0VuY29kZWRWYWx1ZSBFbmNvZGluZ1RyYWl0czxQbGF0Zm9ybVdoZWVsRXZlbnQ+
OjplbmNvZGVWYWx1ZShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGlucHV0KQoreworICAgIEVu
Y29kZWRWYWx1ZSBlbmNvZGVkRGF0YSA9IEVuY29kZWRWYWx1ZTo6Y3JlYXRlT2JqZWN0KCk7CisK
KyAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgaW50LCBwb3NpdGlvblgsIGlu
cHV0LnBvc2l0aW9uKCkueCgpKTsKKyAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0
YSwgaW50LCBwb3NpdGlvblksIGlucHV0LnBvc2l0aW9uKCkueSgpKTsKKyAgICBFTkNPREVfVFlQ
RV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgaW50LCBnbG9iYWxQb3NpdGlvblgsIGlucHV0Lmdsb2Jh
bFBvc2l0aW9uKCkueCgpKTsKKyAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwg
aW50LCBnbG9iYWxQb3NpdGlvblksIGlucHV0Lmdsb2JhbFBvc2l0aW9uKCkueSgpKTsKKyAgICBF
TkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgYm9vbCwgc2hpZnRLZXksIGlucHV0LnNo
aWZ0S2V5KCkpOworICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBib29sLCBj
dHJsS2V5LCBpbnB1dC5jdHJsS2V5KCkpOworICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29k
ZWREYXRhLCBib29sLCBhbHRLZXksIGlucHV0LmFsdEtleSgpKTsKKyAgICBFTkNPREVfVFlQRV9X
SVRIX0tFWShlbmNvZGVkRGF0YSwgYm9vbCwgbWV0YUtleSwgaW5wdXQubWV0YUtleSgpKTsKKyAg
ICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgZmxvYXQsIGRlbHRhWCwgaW5wdXQu
ZGVsdGFYKCkpOworICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBmbG9hdCwg
ZGVsdGFZLCBpbnB1dC5kZWx0YVkoKSk7CisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2Rl
ZERhdGEsIGZsb2F0LCB3aGVlbFRpY2tzWCwgaW5wdXQud2hlZWxUaWNrc1goKSk7CisgICAgRU5D
T0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGZsb2F0LCB3aGVlbFRpY2tzWSwgaW5wdXQu
d2hlZWxUaWNrc1koKSk7CisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFBs
YXRmb3JtV2hlZWxFdmVudEdyYW51bGFyaXR5LCBncmFudWxhcml0eSwgc3RhdGljX2Nhc3Q8UGxh
dGZvcm1XaGVlbEV2ZW50R3JhbnVsYXJpdHk+KGlucHV0LmdyYW51bGFyaXR5KCkpKTsKKworI2lm
IFBMQVRGT1JNKENPQ09BKQorICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBi
b29sLCBkaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UsIGlucHV0LmRpcmVjdGlvbkludmVydGVk
RnJvbURldmljZSgpKTsKKyAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgYm9v
bCwgaGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcywgaW5wdXQuaGFzUHJlY2lzZVNjcm9sbGluZ0Rl
bHRhcygpKTsKKyAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgUGxhdGZvcm1X
aGVlbEV2ZW50UGhhc2UsIHBoYXNlLCBzdGF0aWNfY2FzdDxQbGF0Zm9ybVdoZWVsRXZlbnRQaGFz
ZT4oaW5wdXQucGhhc2UoKSkpOworICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRh
LCBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSwgbW9tZW50dW1QaGFzZSwgc3RhdGljX2Nhc3Q8UGxh
dGZvcm1XaGVlbEV2ZW50UGhhc2U+KGlucHV0Lm1vbWVudHVtUGhhc2UoKSkpOworICAgIEVOQ09E
RV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBpbnQsIHNjcm9sbENvdW50LCBpbnB1dC5zY3Jv
bGxDb3VudCgpKTsKKyAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgZmxvYXQs
IHVuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVgsIGlucHV0LnVuYWNjZWxlcmF0ZWRTY3JvbGxp
bmdEZWx0YVgoKSk7CisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGZsb2F0
LCB1bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFZLCBpbnB1dC51bmFjY2VsZXJhdGVkU2Nyb2xs
aW5nRGVsdGFZKCkpOworI2VuZGlmCisKKyAgICByZXR1cm4gZW5jb2RlZERhdGE7Cit9CisKK2Jv
b2wgRW5jb2RpbmdUcmFpdHM8UGxhdGZvcm1XaGVlbEV2ZW50Pjo6ZGVjb2RlVmFsdWUoRW5jb2Rl
ZFZhbHVlJiBlbmNvZGVkRGF0YSwgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtV2hlZWxFdmVudD4m
IGlucHV0KQoreworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBpbnQsIHBv
c2l0aW9uWCk7CisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGludCwgcG9z
aXRpb25ZKTsKKyAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgaW50LCBnbG9i
YWxQb3NpdGlvblgpOworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBpbnQs
IGdsb2JhbFBvc2l0aW9uWSk7CisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEs
IGJvb2wsIHNoaWZ0S2V5KTsKKyAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwg
Ym9vbCwgY3RybEtleSk7CisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGJv
b2wsIGFsdEtleSk7CisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGJvb2ws
IG1ldGFLZXkpOworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBmbG9hdCwg
ZGVsdGFYKTsKKyAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgZmxvYXQsIGRl
bHRhWSk7CisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGZsb2F0LCB3aGVl
bFRpY2tzWCk7CisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGZsb2F0LCB3
aGVlbFRpY2tzWSk7CisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFBsYXRm
b3JtV2hlZWxFdmVudEdyYW51bGFyaXR5LCBncmFudWxhcml0eSk7CisKKyNpZiBQTEFURk9STShD
T0NPQSkKKyAgICBQbGF0Zm9ybVdoZWVsRXZlbnRDb2NvYUFyZ3VtZW50cyBhcmd1bWVudHM7Cisg
ICAgREVDT0RFX1RZUEVfV0lUSF9LRVlfVE9fTFZBTFVFKGVuY29kZWREYXRhLCBib29sLCBkaXJl
Y3Rpb25JbnZlcnRlZEZyb21EZXZpY2UsIGFyZ3VtZW50cy5kaXJlY3Rpb25JbnZlcnRlZEZyb21E
ZXZpY2UpOworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZX1RPX0xWQUxVRShlbmNvZGVkRGF0YSwg
Ym9vbCwgaGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcywgYXJndW1lbnRzLmhhc1ByZWNpc2VTY3Jv
bGxpbmdEZWx0YXMpOworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZX1RPX0xWQUxVRShlbmNvZGVk
RGF0YSwgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UsIHBoYXNlLCBhcmd1bWVudHMucGhhc2UpOwor
ICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZX1RPX0xWQUxVRShlbmNvZGVkRGF0YSwgUGxhdGZvcm1X
aGVlbEV2ZW50UGhhc2UsIG1vbWVudHVtUGhhc2UsIGFyZ3VtZW50cy5tb21lbnR1bVBoYXNlKTsK
KyAgICBERUNPREVfVFlQRV9XSVRIX0tFWV9UT19MVkFMVUUoZW5jb2RlZERhdGEsIGludCwgc2Ny
b2xsQ291bnQsIGFyZ3VtZW50cy5zY3JvbGxDb3VudCk7CisgICAgREVDT0RFX1RZUEVfV0lUSF9L
RVlfVE9fTFZBTFVFKGVuY29kZWREYXRhLCBmbG9hdCwgdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0Rl
bHRhWCwgYXJndW1lbnRzLnVuYWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVgpOworICAgIERFQ09E
RV9UWVBFX1dJVEhfS0VZX1RPX0xWQUxVRShlbmNvZGVkRGF0YSwgZmxvYXQsIHVuYWNjZWxlcmF0
ZWRTY3JvbGxpbmdEZWx0YVksIGFyZ3VtZW50cy51bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFZ
KTsKKyNlbmRpZgorCisgICAgUGxhdGZvcm1XaGVlbEV2ZW50IGV2ZW50KEludFBvaW50KHBvc2l0
aW9uWCwgcG9zaXRpb25ZKSwgSW50UG9pbnQoZ2xvYmFsUG9zaXRpb25YLCBnbG9iYWxQb3NpdGlv
blkpLAorICAgICAgICBkZWx0YVgsIGRlbHRhWSwgd2hlZWxUaWNrc1gsIHdoZWVsVGlja3NZLCBn
cmFudWxhcml0eSwgc2hpZnRLZXksIGN0cmxLZXksIGFsdEtleSwgbWV0YUtleSk7CisKKyNpZiBQ
TEFURk9STShDT0NPQSkKKyAgICBpbnB1dCA9IHN0ZDo6bWFrZV91bmlxdWU8UGxhdGZvcm1XaGVl
bEV2ZW50Q29jb2E+KGV2ZW50LCBhcmd1bWVudHMpOworI2Vsc2UKKyAgICBpbnB1dCA9IHN0ZDo6
bWFrZV91bmlxdWU8UGxhdGZvcm1XaGVlbEV2ZW50PihldmVudCk7CisjZW5kaWYKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworRW5jb2RlZFZhbHVlIEVuY29kaW5nVHJhaXRzPFBsdWdpbkRhdGE+Ojpl
bmNvZGVWYWx1ZShSZWZQdHI8UGx1Z2luRGF0YT4gaW5wdXQpCit7CisgICAgRW5jb2RlZFZhbHVl
IGVuY29kZWREYXRhID0gRW5jb2RlZFZhbHVlOjpjcmVhdGVPYmplY3QoKTsKKworICAgIFZlY3Rv
cjx1aW50MzJfdD4gY2FzdGVkTWltZVBsdWdpbkluZGljZXMoaW5wdXQtPm1pbWVQbHVnaW5JbmRp
Y2VzKCkuc2l6ZSgpKTsKKyAgICBmb3IgKHVpbnQzMl90IGluZGV4IDogaW5wdXQtPm1pbWVQbHVn
aW5JbmRpY2VzKCkpCisgICAgICAgIGNhc3RlZE1pbWVQbHVnaW5JbmRpY2VzLmFwcGVuZChXVEY6
OnNhZmVDYXN0PHVpbnQzMl90PihpbmRleCkpOworCisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVko
ZW5jb2RlZERhdGEsIFZlY3RvcjxQbHVnaW5JbmZvPiwgcGx1Z2lucywgaW5wdXQtPnBsdWdpbnMo
KSk7CisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFZlY3RvcjxNaW1lQ2xh
c3NJbmZvPiwgbWltZXMsIGlucHV0LT5taW1lcygpKTsKKyAgICBFTkNPREVfVFlQRV9XSVRIX0tF
WShlbmNvZGVkRGF0YSwgVmVjdG9yPHVpbnQzMl90PiwgbWltZVBsdWdpbkluZGljZXMsIGNhc3Rl
ZE1pbWVQbHVnaW5JbmRpY2VzKTsKKworICAgIHJldHVybiBlbmNvZGVkRGF0YTsKK30KKworY2xh
c3MgRGVzZXJpYWxpemVkUGx1Z2luRGF0YSA6IHB1YmxpYyBQbHVnaW5EYXRhIHsKK3B1YmxpYzoK
KyAgICBEZXNlcmlhbGl6ZWRQbHVnaW5EYXRhKFZlY3RvcjxQbHVnaW5JbmZvPiBwbHVnaW5zLCBW
ZWN0b3I8TWltZUNsYXNzSW5mbz4gbWltZXMsIFZlY3RvcjxzaXplX3Q+IGluZGljZXMpCisgICAg
ICAgIDogUGx1Z2luRGF0YShwbHVnaW5zLCBtaW1lcywgaW5kaWNlcykKKyAgICB7CisgICAgfQor
fTsKKworYm9vbCBFbmNvZGluZ1RyYWl0czxQbHVnaW5EYXRhPjo6ZGVjb2RlVmFsdWUoRW5jb2Rl
ZFZhbHVlJiBlbmNvZGVkRGF0YSwgUmVmUHRyPFBsdWdpbkRhdGE+JiBpbnB1dCkKK3sKKyAgICBE
RUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgVmVjdG9yPFBsdWdpbkluZm8+LCBwbHVn
aW5zKTsKKyAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgVmVjdG9yPE1pbWVD
bGFzc0luZm8+LCBtaW1lcyk7CisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEs
IFZlY3Rvcjx1aW50MzJfdD4sIG1pbWVQbHVnaW5JbmRpY2VzKTsKKworICAgIFZlY3RvcjxzaXpl
X3Q+IGNhc3RlZE1pbWVQbHVnaW5JbmRpY2VzKG1pbWVQbHVnaW5JbmRpY2VzLnNpemUoKSk7Cisg
ICAgZm9yICh1aW50MzJfdCBpbmRleCA6IG1pbWVQbHVnaW5JbmRpY2VzKQorICAgICAgICBjYXN0
ZWRNaW1lUGx1Z2luSW5kaWNlcy5hcHBlbmQoV1RGOjpzYWZlQ2FzdDxzaXplX3Q+KGluZGV4KSk7
CisKKyAgICBpbnB1dCA9IGFkb3B0UmVmKG5ldyBEZXNlcmlhbGl6ZWRQbHVnaW5EYXRhKHBsdWdp
bnMsIG1pbWVzLCBjYXN0ZWRNaW1lUGx1Z2luSW5kaWNlcykpOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3RlbXBsYXRlPD4KK0VuY29kZWRWYWx1ZSBFbmNvZGluZ1RyYWl0czxQbHVnaW5JbmZv
Pjo6ZW5jb2RlVmFsdWUoY29uc3QgUGx1Z2luSW5mbyYgaW5wdXQpCit7CisgICAgRW5jb2RlZFZh
bHVlIGVuY29kZWREYXRhID0gRW5jb2RlZFZhbHVlOjpjcmVhdGVPYmplY3QoKTsKKworICAgIEVO
Q09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBTdHJpbmcsIG5hbWUsIGlucHV0Lm5hbWUp
OworICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBTdHJpbmcsIGZpbGUsIGlu
cHV0LmZpbGUpOworICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBTdHJpbmcs
IGRlc2MsIGlucHV0LmRlc2MpOworICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRh
LCBWZWN0b3I8TWltZUNsYXNzSW5mbz4sIG1pbWVzLCBpbnB1dC5taW1lcyk7CisgICAgRU5DT0RF
X1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGJvb2wsIGlzQXBwbGljYXRpb25QbHVnaW4sIGlu
cHV0LmlzQXBwbGljYXRpb25QbHVnaW4pOworCisgICAgcmV0dXJuIGVuY29kZWREYXRhOworfQor
Cit0ZW1wbGF0ZTw+Citib29sIEVuY29kaW5nVHJhaXRzPFBsdWdpbkluZm8+OjpkZWNvZGVWYWx1
ZShFbmNvZGVkVmFsdWUmIGVuY29kZWREYXRhLCBQbHVnaW5JbmZvJiBpbnB1dCkKK3sKKyAgICBQ
bHVnaW5JbmZvIGluZm87CisKKyAgICBERUNPREVfVFlQRV9XSVRIX0tFWV9UT19MVkFMVUUoZW5j
b2RlZERhdGEsIFN0cmluZywgbmFtZSwgaW5mby5uYW1lKTsKKyAgICBERUNPREVfVFlQRV9XSVRI
X0tFWV9UT19MVkFMVUUoZW5jb2RlZERhdGEsIFN0cmluZywgZmlsZSwgaW5mby5maWxlKTsKKyAg
ICBERUNPREVfVFlQRV9XSVRIX0tFWV9UT19MVkFMVUUoZW5jb2RlZERhdGEsIFN0cmluZywgZGVz
YywgaW5mby5kZXNjKTsKKyAgICBERUNPREVfVFlQRV9XSVRIX0tFWV9UT19MVkFMVUUoZW5jb2Rl
ZERhdGEsIFZlY3RvcjxNaW1lQ2xhc3NJbmZvPiwgbWltZXMsIGluZm8ubWltZXMpOworICAgIERF
Q09ERV9UWVBFX1dJVEhfS0VZX1RPX0xWQUxVRShlbmNvZGVkRGF0YSwgYm9vbCwgaXNBcHBsaWNh
dGlvblBsdWdpbiwgaW5mby5pc0FwcGxpY2F0aW9uUGx1Z2luKTsKKworICAgIGlucHV0ID0gaW5m
bzsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRW5jb2RlZFZhbHVlIEVuY29kaW5nVHJhaXRzPFJl
c291cmNlRXJyb3I+OjplbmNvZGVWYWx1ZShjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sK
KyAgICBFbmNvZGVkVmFsdWUgZW5jb2RlZERhdGEgPSBFbmNvZGVkVmFsdWU6OmNyZWF0ZU9iamVj
dCgpOworCisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFN0cmluZywgZG9t
YWluLCBlcnJvci5kb21haW4oKSk7CisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERh
dGEsIGludCwgZXJyb3JDb2RlLCBlcnJvci5lcnJvckNvZGUoKSk7CisgICAgRU5DT0RFX1RZUEVf
V0lUSF9LRVkoZW5jb2RlZERhdGEsIFN0cmluZywgZmFpbGluZ1VSTCwgZXJyb3IuZmFpbGluZ1VS
TCgpKTsKKyAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgU3RyaW5nLCBsb2Nh
bGl6ZWREZXNjcmlwdGlvbiwgZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKSk7CisKKyAgICBy
ZXR1cm4gZW5jb2RlZERhdGE7Cit9CisKK2Jvb2wgRW5jb2RpbmdUcmFpdHM8UmVzb3VyY2VFcnJv
cj46OmRlY29kZVZhbHVlKEVuY29kZWRWYWx1ZSYgZW5jb2RlZERhdGEsIHN0ZDo6dW5pcXVlX3B0
cjxSZXNvdXJjZUVycm9yPiYgZGVjb2RlZEVycm9yKQoreworICAgIERFQ09ERV9UWVBFX1dJVEhf
S0VZKGVuY29kZWREYXRhLCBTdHJpbmcsIGRvbWFpbik7CisgICAgREVDT0RFX1RZUEVfV0lUSF9L
RVkoZW5jb2RlZERhdGEsIGludCwgZXJyb3JDb2RlKTsKKyAgICBERUNPREVfVFlQRV9XSVRIX0tF
WShlbmNvZGVkRGF0YSwgU3RyaW5nLCBmYWlsaW5nVVJMKTsKKyAgICBERUNPREVfVFlQRV9XSVRI
X0tFWShlbmNvZGVkRGF0YSwgU3RyaW5nLCBsb2NhbGl6ZWREZXNjcmlwdGlvbik7CisKKyAgICBk
ZWNvZGVkRXJyb3IgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlc291cmNlRXJyb3I+KGRvbWFpbiwgZXJy
b3JDb2RlLCBmYWlsaW5nVVJMLCBsb2NhbGl6ZWREZXNjcmlwdGlvbik7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3RlbXBsYXRlPD4KK0VuY29kZWRWYWx1ZSBFbmNvZGluZ1RyYWl0czxSZXNvdXJj
ZUxvYWRUaW1pbmc+OjplbmNvZGVWYWx1ZShjb25zdCBSZXNvdXJjZUxvYWRUaW1pbmcmIHRpbWlu
Z0RhdGEpCit7CisgICAgRW5jb2RlZFZhbHVlIGVuY29kZWREYXRhID0gRW5jb2RlZFZhbHVlOjpj
cmVhdGVPYmplY3QoKTsKKworICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBp
bnQsIGRvbWFpbkxvb2t1cFN0YXJ0LCB0aW1pbmdEYXRhLmRvbWFpbkxvb2t1cFN0YXJ0KTsKKyAg
ICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgaW50LCBkb21haW5Mb29rdXBFbmQs
IHRpbWluZ0RhdGEuZG9tYWluTG9va3VwRW5kKTsKKyAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShl
bmNvZGVkRGF0YSwgaW50LCBjb25uZWN0U3RhcnQsIHRpbWluZ0RhdGEuY29ubmVjdFN0YXJ0KTsK
KyAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgaW50LCBjb25uZWN0RW5kLCB0
aW1pbmdEYXRhLmNvbm5lY3RFbmQpOworICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWRE
YXRhLCBpbnQsIHJlcXVlc3RTdGFydCwgdGltaW5nRGF0YS5yZXF1ZXN0U3RhcnQpOworICAgIEVO
Q09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBpbnQsIHJlc3BvbnNlU3RhcnQsIHRpbWlu
Z0RhdGEucmVzcG9uc2VTdGFydCk7CisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERh
dGEsIGludCwgc2VjdXJlQ29ubmVjdGlvblN0YXJ0LCB0aW1pbmdEYXRhLnNlY3VyZUNvbm5lY3Rp
b25TdGFydCk7CisKKyAgICByZXR1cm4gZW5jb2RlZERhdGE7Cit9CisKK3RlbXBsYXRlPD4KK2Jv
b2wgRW5jb2RpbmdUcmFpdHM8UmVzb3VyY2VMb2FkVGltaW5nPjo6ZGVjb2RlVmFsdWUoRW5jb2Rl
ZFZhbHVlJiBlbmNvZGVkRGF0YSwgUmVzb3VyY2VMb2FkVGltaW5nJiBkZWNvZGVkVGltaW5ncykK
K3sKKyAgICBSZXNvdXJjZUxvYWRUaW1pbmcgdGltaW5nRGF0YTsKKworICAgIERFQ09ERV9UWVBF
X1dJVEhfS0VZX1RPX0xWQUxVRShlbmNvZGVkRGF0YSwgaW50LCBkb21haW5Mb29rdXBTdGFydCwg
dGltaW5nRGF0YS5kb21haW5Mb29rdXBTdGFydCk7CisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVlf
VE9fTFZBTFVFKGVuY29kZWREYXRhLCBpbnQsIGRvbWFpbkxvb2t1cEVuZCwgdGltaW5nRGF0YS5k
b21haW5Mb29rdXBFbmQpOworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZX1RPX0xWQUxVRShlbmNv
ZGVkRGF0YSwgaW50LCBjb25uZWN0U3RhcnQsIHRpbWluZ0RhdGEuY29ubmVjdFN0YXJ0KTsKKyAg
ICBERUNPREVfVFlQRV9XSVRIX0tFWV9UT19MVkFMVUUoZW5jb2RlZERhdGEsIGludCwgY29ubmVj
dEVuZCwgdGltaW5nRGF0YS5jb25uZWN0RW5kKTsKKyAgICBERUNPREVfVFlQRV9XSVRIX0tFWV9U
T19MVkFMVUUoZW5jb2RlZERhdGEsIGludCwgcmVxdWVzdFN0YXJ0LCB0aW1pbmdEYXRhLnJlcXVl
c3RTdGFydCk7CisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVlfVE9fTFZBTFVFKGVuY29kZWREYXRh
LCBpbnQsIHJlc3BvbnNlU3RhcnQsIHRpbWluZ0RhdGEucmVzcG9uc2VTdGFydCk7CisgICAgREVD
T0RFX1RZUEVfV0lUSF9LRVlfVE9fTFZBTFVFKGVuY29kZWREYXRhLCBpbnQsIHNlY3VyZUNvbm5l
Y3Rpb25TdGFydCwgdGltaW5nRGF0YS5zZWN1cmVDb25uZWN0aW9uU3RhcnQpOworCisgICAgZGVj
b2RlZFRpbWluZ3MgPSB0aW1pbmdEYXRhOworICAgIHJldHVybiB0cnVlOworfQorCitFbmNvZGVk
VmFsdWUgRW5jb2RpbmdUcmFpdHM8UmVzb3VyY2VSZXF1ZXN0Pjo6ZW5jb2RlVmFsdWUoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIEVuY29kZWRWYWx1ZSBlbmNvZGVkRGF0
YSA9IEVuY29kZWRWYWx1ZTo6Y3JlYXRlT2JqZWN0KCk7CisKKyAgICBFTkNPREVfVFlQRV9XSVRI
X0tFWShlbmNvZGVkRGF0YSwgVVJMLCB1cmwsIHJlcXVlc3QudXJsKCkpOworICAgIEVOQ09ERV9U
WVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeSwgY2Fj
aGVQb2xpY3ksIHJlcXVlc3QuY2FjaGVQb2xpY3koKSk7CisgICAgRU5DT0RFX1RZUEVfV0lUSF9L
RVkoZW5jb2RlZERhdGEsIGRvdWJsZSwgdGltZW91dEludGVydmFsLCByZXF1ZXN0LnRpbWVvdXRJ
bnRlcnZhbCgpKTsKKyAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgVVJMLCBm
aXJzdFBhcnR5Rm9yQ29va2llcywgcmVxdWVzdC5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKKyAg
ICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgU3RyaW5nLCBodHRwTWV0aG9kLCBy
ZXF1ZXN0Lmh0dHBNZXRob2QoKSk7CisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERh
dGEsIEhUVFBIZWFkZXJNYXAsIGh0dHBIZWFkZXJzLCByZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMo
KSk7CisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFZlY3RvcjxTdHJpbmc+
LCByZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheSwgcmVxdWVz
dC5yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheSgpKTsKKyAg
ICBFTkNPREVfT1BUSU9OQUxfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgRm9ybURhdGEsIGh0
dHBCb2R5LCByZXF1ZXN0Lmh0dHBCb2R5KCksIHJlcXVlc3QuaHR0cEJvZHkoKSk7CisgICAgRU5D
T0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGJvb2wsIGFsbG93Q29va2llcywgcmVxdWVz
dC5hbGxvd0Nvb2tpZXMoKSk7CisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEs
IFJlc291cmNlTG9hZFByaW9yaXR5LCBsb2FkUHJpb3JpdHksIHJlcXVlc3QucHJpb3JpdHkoKSk7
CisKKyAgICByZXR1cm4gZW5jb2RlZERhdGE7Cit9CisKK2NsYXNzIERlc2VyaWFsaXplZFJlc291
cmNlUmVxdWVzdCA6IHB1YmxpYyBSZXNvdXJjZVJlcXVlc3QgeworcHVibGljOgorICAgIERlc2Vy
aWFsaXplZFJlc291cmNlUmVxdWVzdChjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzKQorICAg
IHsKKyAgICAgICAgbV9odHRwSGVhZGVyRmllbGRzID0gaGVhZGVyczsKKyAgICB9Cit9OworCiti
b29sIEVuY29kaW5nVHJhaXRzPFJlc291cmNlUmVxdWVzdD46OmRlY29kZVZhbHVlKEVuY29kZWRW
YWx1ZSYgZW5jb2RlZERhdGEsIHN0ZDo6dW5pcXVlX3B0cjxSZXNvdXJjZVJlcXVlc3Q+JiBkZWNv
ZGVkUmVxdWVzdCkKK3sKKyAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgVVJM
LCB1cmwpOworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBSZXNvdXJjZVJl
cXVlc3RDYWNoZVBvbGljeSwgY2FjaGVQb2xpY3kpOworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZ
KGVuY29kZWREYXRhLCBkb3VibGUsIHRpbWVvdXRJbnRlcnZhbCk7CisgICAgREVDT0RFX1RZUEVf
V0lUSF9LRVkoZW5jb2RlZERhdGEsIFVSTCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMpOworICAgIERF
Q09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBTdHJpbmcsIGh0dHBNZXRob2QpOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxIVFRQSGVhZGVyTWFwPiBodHRwSGVhZGVyczsKKyAgICBERUNPREVf
VFlQRV9XSVRIX0tFWV9UT19MVkFMVUUoZW5jb2RlZERhdGEsIEhUVFBIZWFkZXJNYXAsIGh0dHBI
ZWFkZXJzLCBodHRwSGVhZGVycyk7CisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERh
dGEsIFZlY3RvcjxTdHJpbmc+LCByZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFs
bGJhY2tBcnJheSk7CisgICAgREVDT0RFX09QVElPTkFMX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERh
dGEsIEZvcm1EYXRhLCBodHRwQm9keSk7CisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2Rl
ZERhdGEsIGJvb2wsIGFsbG93Q29va2llcyk7CisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5j
b2RlZERhdGEsIFJlc291cmNlTG9hZFByaW9yaXR5LCBsb2FkUHJpb3JpdHkpOworCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlc291cmNlUmVxdWVzdD4gcmVxdWVzdCA9IHN0ZDo6bWFrZV91bmlxdWU8
UmVzb3VyY2VSZXF1ZXN0PigpOworICAgIHJlcXVlc3QtPnNldEhUVFBIZWFkZXJGaWVsZHMoKmh0
dHBIZWFkZXJzKTsKKyAgICByZXF1ZXN0LT5zZXRDYWNoZVBvbGljeShjYWNoZVBvbGljeSk7Cisg
ICAgcmVxdWVzdC0+c2V0VGltZW91dEludGVydmFsKHRpbWVvdXRJbnRlcnZhbCk7CisgICAgcmVx
dWVzdC0+c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoZmlyc3RQYXJ0eUZvckNvb2tpZXMpOworICAg
IHJlcXVlc3QtPnNldEhUVFBNZXRob2QoaHR0cE1ldGhvZCk7CisgICAgcmVxdWVzdC0+c2V0UHJp
b3JpdHkobG9hZFByaW9yaXR5KTsKKyAgICByZXF1ZXN0LT5zZXRBbGxvd0Nvb2tpZXMoYWxsb3dD
b29raWVzKTsKKworICAgIGludCBmYWxsYmFja0VuY29kaW5nQ291bnQgPSByZXNwb25zZUNvbnRl
bnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCk7CisgICAgaWYgKGZhbGxi
YWNrRW5jb2RpbmdDb3VudCA8IDAgfHwgZmFsbGJhY2tFbmNvZGluZ0NvdW50ID4gMykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgU3RyaW5nIGVuY29kaW5nMTsKKyAgICBTdHJpbmcgZW5j
b2RpbmcyOworICAgIFN0cmluZyBlbmNvZGluZzM7CisgICAgaWYgKGZhbGxiYWNrRW5jb2RpbmdD
b3VudCA+PSAxKQorICAgICAgICBlbmNvZGluZzEgPSByZXNwb25zZUNvbnRlbnREaXNwb3NpdGlv
bkVuY29kaW5nRmFsbGJhY2tBcnJheVswXTsKKyAgICBpZiAoZmFsbGJhY2tFbmNvZGluZ0NvdW50
ID49IDIpCisgICAgICAgIGVuY29kaW5nMiA9IHJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5j
b2RpbmdGYWxsYmFja0FycmF5WzFdOworICAgIGlmIChmYWxsYmFja0VuY29kaW5nQ291bnQgPj0g
MykKKyAgICAgICAgZW5jb2RpbmczID0gcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGlu
Z0ZhbGxiYWNrQXJyYXlbMl07CisgICAgaWYgKGZhbGxiYWNrRW5jb2RpbmdDb3VudCA+IDApCisg
ICAgICAgIHJlcXVlc3QtPnNldFJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxs
YmFja0FycmF5KGVuY29kaW5nMSwgZW5jb2RpbmcyLCBlbmNvZGluZzMpOworCisgICAgaWYgKGh0
dHBCb2R5V2FzRGVjb2RlZCkKKyAgICAgICAgcmVxdWVzdC0+c2V0SFRUUEJvZHkoaHR0cEJvZHkp
OworCisgICAgZGVjb2RlZFJlcXVlc3QgPSBzdGQ6Om1vdmUocmVxdWVzdCk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK0VuY29kZWRWYWx1ZSBFbmNvZGluZ1RyYWl0czxSZXNvdXJjZVJlc3BvbnNl
Pjo6ZW5jb2RlVmFsdWUoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAg
RW5jb2RlZFZhbHVlIGVuY29kZWREYXRhID0gRW5jb2RlZFZhbHVlOjpjcmVhdGVPYmplY3QoKTsK
KworICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBVUkwsIHVybCwgcmVzcG9u
c2UudXJsKCkpOworICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBTdHJpbmcs
IG1pbWVUeXBlLCByZXNwb25zZS5taW1lVHlwZSgpKTsKKyAgICBFTkNPREVfVFlQRV9XSVRIX0tF
WShlbmNvZGVkRGF0YSwgbG9uZyBsb25nLCBleHBlY3RlZENvbnRlbnRMZW5ndGgsIHJlc3BvbnNl
LmV4cGVjdGVkQ29udGVudExlbmd0aCgpKTsKKyAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNv
ZGVkRGF0YSwgU3RyaW5nLCB0ZXh0RW5jb2RpbmdOYW1lLCByZXNwb25zZS50ZXh0RW5jb2RpbmdO
YW1lKCkpOworICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBpbnQsIGh0dHBT
dGF0dXNDb2RlLCByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpKTsKKyAgICBFTkNPREVfVFlQRV9X
SVRIX0tFWShlbmNvZGVkRGF0YSwgU3RyaW5nLCBodHRwU3RhdHVzVGV4dCwgcmVzcG9uc2UuaHR0
cFN0YXR1c1RleHQoKSk7CisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIEhU
VFBIZWFkZXJNYXAsIGh0dHBIZWFkZXJzLCByZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkpOwor
ICAgIEVOQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBSZXNvdXJjZUxvYWRUaW1pbmcs
IGxvYWRUaW1pbmcsIHJlc3BvbnNlLnJlc291cmNlTG9hZFRpbWluZygpKTsKKworICAgIHJldHVy
biBlbmNvZGVkRGF0YTsKK30KKworYm9vbCBFbmNvZGluZ1RyYWl0czxSZXNvdXJjZVJlc3BvbnNl
Pjo6ZGVjb2RlVmFsdWUoRW5jb2RlZFZhbHVlJiBlbmNvZGVkRGF0YSwgc3RkOjp1bmlxdWVfcHRy
PFJlc291cmNlUmVzcG9uc2U+JiBkZWNvZGVkUmVzcG9uc2UpCit7CisgICAgREVDT0RFX1RZUEVf
V0lUSF9LRVkoZW5jb2RlZERhdGEsIFVSTCwgdXJsKTsKKyAgICBERUNPREVfVFlQRV9XSVRIX0tF
WShlbmNvZGVkRGF0YSwgU3RyaW5nLCBtaW1lVHlwZSk7CisgICAgREVDT0RFX1RZUEVfV0lUSF9L
RVkoZW5jb2RlZERhdGEsIGxvbmcgbG9uZywgZXhwZWN0ZWRDb250ZW50TGVuZ3RoKTsKKyAgICBE
RUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgU3RyaW5nLCB0ZXh0RW5jb2RpbmdOYW1l
KTsKKworICAgIGF1dG8gcmVzcG9uc2UgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlc291cmNlUmVzcG9u
c2U+KHVybCwgbWltZVR5cGUsIGV4cGVjdGVkQ29udGVudExlbmd0aCwgdGV4dEVuY29kaW5nTmFt
ZSk7CisKKyAgICBERUNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgaW50LCBodHRwU3Rh
dHVzQ29kZSk7CisgICAgcmVzcG9uc2UtPnNldEhUVFBTdGF0dXNDb2RlKGh0dHBTdGF0dXNDb2Rl
KTsKKworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29kZWREYXRhLCBTdHJpbmcsIGh0dHBT
dGF0dXNUZXh0KTsKKyAgICByZXNwb25zZS0+c2V0SFRUUFN0YXR1c1RleHQoaHR0cFN0YXR1c1Rl
eHQpOworCisgICAgLy8gTWFudWFsbHkgZGVjb2RlIHNvIHdlIGNhbiBwYXNzIG93bmVyc2hpcCBv
ZiB0aGUgZGVjb2RlZCBoZWFkZXJzLgorICAgIHN0ZDo6dW5pcXVlX3B0cjxIVFRQSGVhZGVyTWFw
PiBodHRwSGVhZGVyczsKKyAgICBpZiAoIUVuY29kaW5nVHJhaXRzPEhUVFBIZWFkZXJNYXA+Ojpk
ZWNvZGVWYWx1ZShlbmNvZGVkRGF0YSwgaHR0cEhlYWRlcnMpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFpciA6ICpodHRwSGVhZGVycykK
KyAgICAgICAgcmVzcG9uc2UtPnNldEhUVFBIZWFkZXJGaWVsZChrZXlWYWx1ZVBhaXIua2V5LCBr
ZXlWYWx1ZVBhaXIudmFsdWUpOworCisgICAgREVDT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERh
dGEsIFJlc291cmNlTG9hZFRpbWluZywgbG9hZFRpbWluZyk7CisgICAgcmVzcG9uc2UtPnJlc291
cmNlTG9hZFRpbWluZygpLmRvbWFpbkxvb2t1cFN0YXJ0ID0gbG9hZFRpbWluZy5kb21haW5Mb29r
dXBTdGFydDsKKyAgICByZXNwb25zZS0+cmVzb3VyY2VMb2FkVGltaW5nKCkuZG9tYWluTG9va3Vw
RW5kID0gbG9hZFRpbWluZy5kb21haW5Mb29rdXBFbmQ7CisgICAgcmVzcG9uc2UtPnJlc291cmNl
TG9hZFRpbWluZygpLmNvbm5lY3RTdGFydCA9IGxvYWRUaW1pbmcuY29ubmVjdFN0YXJ0OworICAg
IHJlc3BvbnNlLT5yZXNvdXJjZUxvYWRUaW1pbmcoKS5zZWN1cmVDb25uZWN0aW9uU3RhcnQgPSBs
b2FkVGltaW5nLnNlY3VyZUNvbm5lY3Rpb25TdGFydDsKKyAgICByZXNwb25zZS0+cmVzb3VyY2VM
b2FkVGltaW5nKCkuY29ubmVjdEVuZCA9IGxvYWRUaW1pbmcuY29ubmVjdEVuZDsKKyAgICByZXNw
b25zZS0+cmVzb3VyY2VMb2FkVGltaW5nKCkucmVxdWVzdFN0YXJ0ID0gbG9hZFRpbWluZy5yZXF1
ZXN0U3RhcnQ7CisgICAgcmVzcG9uc2UtPnJlc291cmNlTG9hZFRpbWluZygpLnJlc3BvbnNlU3Rh
cnQgPSBsb2FkVGltaW5nLnJlc3BvbnNlU3RhcnQ7CisKKyAgICBkZWNvZGVkUmVzcG9uc2UgPSBz
dGQ6Om1vdmUocmVzcG9uc2UpOworICAgIHJldHVybiB0cnVlOworfQorCitFbmNvZGVkVmFsdWUg
RW5jb2RpbmdUcmFpdHM8U2VjdXJpdHlPcmlnaW4+OjplbmNvZGVWYWx1ZShSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+IGlucHV0KQoreworICAgIHJldHVybiBFbmNvZGVkVmFsdWU6OmNyZWF0ZVN0cmlu
ZyhpbnB1dC0+dG9TdHJpbmcoKSk7Cit9CisKK2Jvb2wgRW5jb2RpbmdUcmFpdHM8U2VjdXJpdHlP
cmlnaW4+OjpkZWNvZGVWYWx1ZShFbmNvZGVkVmFsdWUmIGVuY29kZWRWYWx1ZSwgUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiYgaW5wdXQpCit7CisgICAgaW5wdXQgPSBTZWN1cml0eU9yaWdpbjo6Y3Jl
YXRlRnJvbVN0cmluZyhlbmNvZGVkVmFsdWUuY29udmVydFRvPFN0cmluZz4oKSk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK0VuY29kZWRWYWx1ZSBFbmNvZGluZ1RyYWl0czxTaGFyZWRCdWZmZXI+
OjplbmNvZGVWYWx1ZShSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIpCit7CisgICAgcmV0dXJu
IEVuY29kZWRWYWx1ZTo6Y3JlYXRlU3RyaW5nKGJhc2U2NEVuY29kZShidWZmZXItPmRhdGEoKSwg
YnVmZmVyLT5zaXplKCkpKTsKK30KKworYm9vbCBFbmNvZGluZ1RyYWl0czxTaGFyZWRCdWZmZXI+
OjpkZWNvZGVWYWx1ZShFbmNvZGVkVmFsdWUmIGVuY29kZWRCdWZmZXIsIFJlZlB0cjxTaGFyZWRC
dWZmZXI+JiBkZWNvZGVkQnVmZmVyKQoreworICAgIFZlY3RvcjxjaGFyLCAwPiBkYXRhOworICAg
IGlmICghYmFzZTY0RGVjb2RlKGVuY29kZWRCdWZmZXIuY29udmVydFRvPFN0cmluZz4oKSwgZGF0
YSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGRlY29kZWRCdWZmZXIgPSBTaGFyZWRC
dWZmZXI6OmFkb3B0VmVjdG9yKGRhdGEpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0
ZTw+CitFbmNvZGVkVmFsdWUgRW5jb2RpbmdUcmFpdHM8U3Vic3RpdHV0ZURhdGE+OjplbmNvZGVW
YWx1ZShjb25zdCBTdWJzdGl0dXRlRGF0YSYgZGF0YSkKK3sKKyAgICBFbmNvZGVkVmFsdWUgZW5j
b2RlZERhdGEgPSBFbmNvZGVkVmFsdWU6OmNyZWF0ZU9iamVjdCgpOworCisgICAgRU5DT0RFX1RZ
UEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFNoYXJlZEJ1ZmZlciwgY29udGVudCwgZGF0YS5jb250
ZW50KCktPmNvcHkoKSk7CisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIFN0
cmluZywgbWltZVR5cGUsIGRhdGEubWltZVR5cGUoKSk7CisgICAgRU5DT0RFX1RZUEVfV0lUSF9L
RVkoZW5jb2RlZERhdGEsIFN0cmluZywgdGV4dEVuY29kaW5nLCBkYXRhLnRleHRFbmNvZGluZygp
KTsKKyAgICBFTkNPREVfVFlQRV9XSVRIX0tFWShlbmNvZGVkRGF0YSwgVVJMLCBmYWlsaW5nVVJM
LCBkYXRhLmZhaWxpbmdVUkwoKSk7CisgICAgRU5DT0RFX1RZUEVfV0lUSF9LRVkoZW5jb2RlZERh
dGEsIFVSTCwgcmVzcG9uc2VVUkwsIGRhdGEucmVzcG9uc2VVUkwoKSk7CisgICAgRU5DT0RFX1RZ
UEVfV0lUSF9LRVkoZW5jb2RlZERhdGEsIGJvb2wsIHNob3VsZFJldmVhbFRvU2Vzc2lvbkhpc3Rv
cnksIGRhdGEuc2hvdWxkUmV2ZWFsVG9TZXNzaW9uSGlzdG9yeSgpKTsKKworICAgIHJldHVybiBl
bmNvZGVkRGF0YTsKK30KKwordGVtcGxhdGU8PgorYm9vbCBFbmNvZGluZ1RyYWl0czxTdWJzdGl0
dXRlRGF0YT46OmRlY29kZVZhbHVlKEVuY29kZWRWYWx1ZSYgZW5jb2RlZERhdGEsIFN1YnN0aXR1
dGVEYXRhJiBkZWNvZGVkRGF0YSkKK3sKKworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZKGVuY29k
ZWREYXRhLCBTaGFyZWRCdWZmZXIsIGNvbnRlbnQpOworICAgIERFQ09ERV9UWVBFX1dJVEhfS0VZ
KGVuY29kZWREYXRhLCBTdHJpbmcsIG1pbWVUeXBlKTsKKyAgICBERUNPREVfVFlQRV9XSVRIX0tF
WShlbmNvZGVkRGF0YSwgU3RyaW5nLCB0ZXh0RW5jb2RpbmcpOworICAgIERFQ09ERV9UWVBFX1dJ
VEhfS0VZKGVuY29kZWREYXRhLCBVUkwsIGZhaWxpbmdVUkwpOworICAgIERFQ09ERV9UWVBFX1dJ
VEhfS0VZKGVuY29kZWREYXRhLCBVUkwsIHJlc3BvbnNlVVJMKTsKKyAgICBERUNPREVfVFlQRV9X
SVRIX0tFWShlbmNvZGVkRGF0YSwgYm9vbCwgc2hvdWxkUmV2ZWFsVG9TZXNzaW9uSGlzdG9yeSk7
CisKKyAgICBkZWNvZGVkRGF0YSA9IFN1YnN0aXR1dGVEYXRhKGNvbnRlbnQsIG1pbWVUeXBlLCB0
ZXh0RW5jb2RpbmcsIGZhaWxpbmdVUkwsIHJlc3BvbnNlVVJMLCBzaG91bGRSZXZlYWxUb1Nlc3Np
b25IaXN0b3J5KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRW5jb2RlZFZhbHVlIEVuY29kaW5n
VHJhaXRzPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT46OmVuY29kZVZhbHVlKFJlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IGlucHV0KQoreworICAgIHJldHVybiBFbmNvZGVkVmFsdWU6OmNyZWF0
ZVN0cmluZyhpbnB1dC0+dG9TdHJpbmcoKSk7Cit9CisKK2Jvb2wgRW5jb2RpbmdUcmFpdHM8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPjo6ZGVjb2RlVmFsdWUoRW5jb2RlZFZhbHVlJiBlbmNvZGVkVmFs
dWUsIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+JiBpbnB1dCkKK3sKKyAgICBpbnB1dCA9
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGVuY29kZWRWYWx1ZS5jb252ZXJ0VG88U3Ry
aW5nPigpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRW5jb2RlZFZhbHVlIEVuY29kaW5nVHJh
aXRzPFVSTD46OmVuY29kZVZhbHVlKGNvbnN0IFVSTCYgaW5wdXQpCit7CisgICAgcmV0dXJuIEVu
Y29kZWRWYWx1ZTo6Y3JlYXRlU3RyaW5nKGlucHV0LnN0cmluZygpKTsKK30KKworYm9vbCBFbmNv
ZGluZ1RyYWl0czxVUkw+OjpkZWNvZGVWYWx1ZShFbmNvZGVkVmFsdWUmIGVuY29kZWRWYWx1ZSwg
VVJMJiBpbnB1dCkKK3sKKyAgICBpbnB1dCA9IFVSTChXZWJDb3JlOjpQYXJzZWRVUkxTdHJpbmcs
IGVuY29kZWRWYWx1ZS5jb252ZXJ0VG88U3RyaW5nPigpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JFUExBWSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9XZWJSZXBsYXlJbnB1dENvZGVycy5oIGIv
U291cmNlL1dlYkNvcmUvcmVwbGF5L1dlYlJlcGxheUlucHV0Q29kZXJzLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NTlmNWNiNjcyNDAyMzcyMWI1ZTIxYjk5MmQ4ODUwOGU5MmNiMGEzMwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9XZWJSZXBsYXlJbnB1dENvZGVycy5oCkBAIC0wLDAg
KzEsMTk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUyAiQVMKKyAqIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCisgKiBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhP
TERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXZWJSZXBsYXlJbnB1dENvZGVyc19oCisjZGVmaW5lIFdlYlJlcGxheUlucHV0Q29k
ZXJzX2gKKworI2lmIEVOQUJMRShXRUJfUkVQTEFZKQorCisjaW5jbHVkZSA8cmVwbGF5L0VuY29k
ZWRWYWx1ZS5oPgorI2luY2x1ZGUgPHJlcGxheS9Ob25kZXRlcm1pbmlzdGljSW5wdXQuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEZy
YW1lTG9hZFJlcXVlc3Q7CisKK2NsYXNzIERvY3VtZW50OworY2xhc3MgRm9ybURhdGE7CitjbGFz
cyBGcmFtZTsKK2NsYXNzIEhUVFBIZWFkZXJNYXA7CitjbGFzcyBIaXN0b3J5SXRlbTsKK2NsYXNz
IFBhZ2U7CitjbGFzcyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ7CitjbGFzcyBQbGF0Zm9ybU1vdXNl
RXZlbnQ7CitjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CitjbGFzcyBQbHVnaW5EYXRhOworY2xh
c3MgUmVzb3VyY2VFcnJvcjsKK2NsYXNzIFJlc291cmNlUmVxdWVzdDsKK2NsYXNzIFJlc291cmNl
UmVzcG9uc2U7CitjbGFzcyBTZWN1cml0eU9yaWdpbjsKK2NsYXNzIFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKK2NsYXNzIFVSTDsKKworI2lmIFVTRShBUFBLSVQp
CitzdHJ1Y3QgS2V5cHJlc3NDb21tYW5kOworI2VuZGlmCisKK3VpbnQzMl90IGZyYW1lSW5kZXhG
cm9tRG9jdW1lbnQoY29uc3QgRG9jdW1lbnQqKTsKK3VpbnQzMl90IGZyYW1lSW5kZXhGcm9tRnJh
bWUoY29uc3QgRnJhbWUqKTsKK0RvY3VtZW50KiBkb2N1bWVudEZyb21GcmFtZUluZGV4KFBhZ2Uq
LCB1aW50MzJfdCBmcmFtZUluZGV4KTsKK0ZyYW1lKiBmcmFtZUZyb21GcmFtZUluZGV4KFBhZ2Uq
LCB1aW50MzJfdCBmcmFtZUluZGV4KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisvLyBU
ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbnMgbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBzYW1lIG5hbWVz
cGFjZSBhcyB0aGUgdGVtcGxhdGUgZGVjbGFyYXRpb24uCituYW1lc3BhY2UgSlNDIHsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgRW5jb2RpbmdUcmFpdHM8V2ViQ29yZTo6Rm9ybURhdGE+IHsKKyAgICB0
eXBlZGVmIFJlZlB0cjxXZWJDb3JlOjpGb3JtRGF0YT4gRGVjb2RlZFR5cGU7CisKKyAgICBzdGF0
aWMgRW5jb2RlZFZhbHVlIGVuY29kZVZhbHVlKFJlZlB0cjxXZWJDb3JlOjpGb3JtRGF0YT4pOwor
ICAgIHN0YXRpYyBib29sIGRlY29kZVZhbHVlKEVuY29kZWRWYWx1ZSYsIFJlZlB0cjxXZWJDb3Jl
OjpGb3JtRGF0YT4mKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEVuY29kaW5nVHJhaXRzPFdl
YkNvcmU6OkZyYW1lTG9hZFJlcXVlc3Q+IHsKKyAgICB0eXBlZGVmIFdlYkNvcmU6OkZyYW1lTG9h
ZFJlcXVlc3QgRGVjb2RlZFR5cGU7CisKKyAgICBzdGF0aWMgRW5jb2RlZFZhbHVlIGVuY29kZVZh
bHVlKGNvbnN0IFdlYkNvcmU6OkZyYW1lTG9hZFJlcXVlc3QmIHZhbHVlKTsKKyAgICBzdGF0aWMg
Ym9vbCBkZWNvZGVWYWx1ZShFbmNvZGVkVmFsdWUmLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
RnJhbWVMb2FkUmVxdWVzdD4mIHZhbHVlKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEVuY29k
aW5nVHJhaXRzPFdlYkNvcmU6OkhUVFBIZWFkZXJNYXA+IHsKKyAgICB0eXBlZGVmIFdlYkNvcmU6
OkhUVFBIZWFkZXJNYXAgRGVjb2RlZFR5cGU7CisKKyAgICBzdGF0aWMgRW5jb2RlZFZhbHVlIGVu
Y29kZVZhbHVlKGNvbnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAmIHZhbHVlKTsKKyAgICBzdGF0
aWMgYm9vbCBkZWNvZGVWYWx1ZShFbmNvZGVkVmFsdWUmLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6SFRUUEhlYWRlck1hcD4mIHZhbHVlKTsKK307CisKKyNpZiBVU0UoQVBQS0lUKQordGVtcGxh
dGU8PiBzdHJ1Y3QgRW5jb2RpbmdUcmFpdHM8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiB7Cisg
ICAgdHlwZWRlZiBXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQgRGVjb2RlZFR5cGU7CisKKyAgICBz
dGF0aWMgRW5jb2RlZFZhbHVlIGVuY29kZVZhbHVlKGNvbnN0IFdlYkNvcmU6OktleXByZXNzQ29t
bWFuZCYgdmFsdWUpOworICAgIHN0YXRpYyBib29sIGRlY29kZVZhbHVlKEVuY29kZWRWYWx1ZSYs
IFdlYkNvcmU6OktleXByZXNzQ29tbWFuZCYgdmFsdWUpOworfTsKKyNlbmRpZiAvLyBVU0UoQVBQ
S0lUKQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbmNvZGluZ1RyYWl0czxXZWJDb3JlOjpIaXN0b3J5
SXRlbT4geworICAgIHR5cGVkZWYgUmVmUHRyPFdlYkNvcmU6Okhpc3RvcnlJdGVtPiBEZWNvZGVk
VHlwZTsKKworICAgIHN0YXRpYyBFbmNvZGVkVmFsdWUgZW5jb2RlVmFsdWUoUmVmUHRyPFdlYkNv
cmU6Okhpc3RvcnlJdGVtPik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlVmFsdWUoRW5jb2RlZFZh
bHVlJiwgUmVmUHRyPFdlYkNvcmU6Okhpc3RvcnlJdGVtPiYpOworfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgRW5jb2RpbmdUcmFpdHM8Tm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFzZT4geworICAgIHR5
cGVkZWYgTm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFzZSBEZWNvZGVkVHlwZTsKKworICAgIHN0YXRp
YyBFbmNvZGVkVmFsdWUgZW5jb2RlVmFsdWUoY29uc3QgTm9uZGV0ZXJtaW5pc3RpY0lucHV0QmFz
ZSYgdmFsdWUpOworICAgIHN0YXRpYyBib29sIGRlY29kZVZhbHVlKEVuY29kZWRWYWx1ZSYsIHN0
ZDo6dW5pcXVlX3B0cjxOb25kZXRlcm1pbmlzdGljSW5wdXRCYXNlPiYgdmFsdWUpOworfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgRW5jb2RpbmdUcmFpdHM8V2ViQ29yZTo6UGxhdGZvcm1LZXlib2Fy
ZEV2ZW50PiB7CisgICAgdHlwZWRlZiBXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQgRGVj
b2RlZFR5cGU7CisKKyAgICBzdGF0aWMgRW5jb2RlZFZhbHVlIGVuY29kZVZhbHVlKGNvbnN0IFdl
YkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudCYgdmFsdWUpOworICAgIHN0YXRpYyBib29sIGRl
Y29kZVZhbHVlKEVuY29kZWRWYWx1ZSYsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpQbGF0Zm9y
bUtleWJvYXJkRXZlbnQ+JiB2YWx1ZSk7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbmNvZGlu
Z1RyYWl0czxXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQ+IHsKKyAgICB0eXBlZGVmIFdlYkNv
cmU6OlBsYXRmb3JtTW91c2VFdmVudCBEZWNvZGVkVHlwZTsKKworICAgIHN0YXRpYyBFbmNvZGVk
VmFsdWUgZW5jb2RlVmFsdWUoY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50JiB2YWx1
ZSk7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlVmFsdWUoRW5jb2RlZFZhbHVlJiwgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudD4mIHZhbHVlKTsKK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IEVuY29kaW5nVHJhaXRzPFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudD4g
eworICAgIHR5cGVkZWYgV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50IERlY29kZWRUeXBlOwor
CisgICAgc3RhdGljIEVuY29kZWRWYWx1ZSBlbmNvZGVWYWx1ZShjb25zdCBXZWJDb3JlOjpQbGF0
Zm9ybVdoZWVsRXZlbnQmIHZhbHVlKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGVWYWx1ZShFbmNv
ZGVkVmFsdWUmLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50PiYg
dmFsdWUpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW5jb2RpbmdUcmFpdHM8V2ViQ29yZTo6
UGx1Z2luRGF0YT4geworICAgIHR5cGVkZWYgUmVmUHRyPFdlYkNvcmU6OlBsdWdpbkRhdGE+IERl
Y29kZWRUeXBlOworCisgICAgc3RhdGljIEVuY29kZWRWYWx1ZSBlbmNvZGVWYWx1ZShSZWZQdHI8
V2ViQ29yZTo6UGx1Z2luRGF0YT4gdmFsdWUpOworICAgIHN0YXRpYyBib29sIGRlY29kZVZhbHVl
KEVuY29kZWRWYWx1ZSYsIFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5EYXRhPiYgdmFsdWUpOworfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgRW5jb2RpbmdUcmFpdHM8V2ViQ29yZTo6UmVzb3VyY2VFcnJv
cj4geworICAgIHR5cGVkZWYgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBEZWNvZGVkVHlwZTsKKwor
ICAgIHN0YXRpYyBFbmNvZGVkVmFsdWUgZW5jb2RlVmFsdWUoY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VFcnJvciYgdmFsdWUpOworICAgIHN0YXRpYyBib29sIGRlY29kZVZhbHVlKEVuY29kZWRWYWx1
ZSYsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpSZXNvdXJjZUVycm9yPiYgdmFsdWUpOworfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgRW5jb2RpbmdUcmFpdHM8V2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0PiB7CisgICAgdHlwZWRlZiBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgRGVjb2RlZFR5cGU7
CisKKyAgICBzdGF0aWMgRW5jb2RlZFZhbHVlIGVuY29kZVZhbHVlKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYgdmFsdWUpOworICAgIHN0YXRpYyBib29sIGRlY29kZVZhbHVlKEVuY29k
ZWRWYWx1ZSYsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q+JiB2YWx1
ZSk7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbmNvZGluZ1RyYWl0czxXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlPiB7CisgICAgdHlwZWRlZiBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIERl
Y29kZWRUeXBlOworCisgICAgc3RhdGljIEVuY29kZWRWYWx1ZSBlbmNvZGVWYWx1ZShjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiB2YWx1ZSk7CisgICAgc3RhdGljIGJvb2wgZGVjb2Rl
VmFsdWUoRW5jb2RlZFZhbHVlJiwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2U+JiB2YWx1ZSk7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbmNvZGluZ1RyYWl0czxX
ZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4geworICAgIHR5cGVkZWYgUmVmUHRyPFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luPiBEZWNvZGVkVHlwZTsKKworICAgIHN0YXRpYyBFbmNvZGVkVmFsdWUgZW5j
b2RlVmFsdWUoUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiB2YWx1ZSk7CisgICAgc3Rh
dGljIGJvb2wgZGVjb2RlVmFsdWUoRW5jb2RlZFZhbHVlJiwgUmVmUHRyPFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luPiYgdmFsdWUpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW5jb2RpbmdUcmFp
dHM8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiB7CisgICAgdHlwZWRlZiBSZWZQdHI8V2ViQ29yZTo6
U2hhcmVkQnVmZmVyPiBEZWNvZGVkVHlwZTsKKworICAgIHN0YXRpYyBFbmNvZGVkVmFsdWUgZW5j
b2RlVmFsdWUoUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gdmFsdWUpOworICAgIHN0YXRp
YyBib29sIGRlY29kZVZhbHVlKEVuY29kZWRWYWx1ZSYsIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRC
dWZmZXI+JiB2YWx1ZSk7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbmNvZGluZ1RyYWl0czxX
ZWJDb3JlOjpVUkw+IHsKKyAgICB0eXBlZGVmIFdlYkNvcmU6OlVSTCBEZWNvZGVkVHlwZTsKKwor
ICAgIHN0YXRpYyBFbmNvZGVkVmFsdWUgZW5jb2RlVmFsdWUoY29uc3QgV2ViQ29yZTo6VVJMJiB2
YWx1ZSk7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlVmFsdWUoRW5jb2RlZFZhbHVlJiwgV2ViQ29y
ZTo6VVJMJiB2YWx1ZSk7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbmNvZGluZ1RyYWl0czxX
ZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHsKKyAgICB0eXBlZGVmIFJlZlB0cjxXZWJD
b3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+IERlY29kZWRUeXBlOworCisgICAgc3RhdGljIEVu
Y29kZWRWYWx1ZSBlbmNvZGVWYWx1ZShSZWZQdHI8V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZh
bHVlPik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlVmFsdWUoRW5jb2RlZFZhbHVlJiwgUmVmUHRy
PFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mKTsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SRVBMQVkpCisKKyNlbmRpZiAvLyBXZWJSZXBs
YXlJbnB1dENvZGVyc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvV2ViUmVw
bGF5SW5wdXRDcmVhdGlvbk1ldGhvZHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5L1dlYlJl
cGxheUlucHV0Q3JlYXRpb25NZXRob2RzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZWUxOTIzN2E4YTBiYTI4
M2U1NDE5NGNjNmExMTM1MmIyMzUyYmVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVwbGF5L1dlYlJlcGxheUlucHV0Q3JlYXRpb25NZXRob2RzLmNwcApAQCAtMCwwICsxLDY3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUworICogSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEKKyAqIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFC
TEUoV0VCX1JFUExBWSkKKworI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ29udHJvbGxlci5oIgorI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCisjaW5jbHVkZSAiUGFn
ZS5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiV2ViUmVwbGF5SW5w
dXRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJSZXBsYXlJbnB1dHMuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGQ6OnVuaXF1ZV9wdHI8SW5pdGlhbE5hdmlnYXRpb24+IEluaXRpYWxOYXZp
Z2F0aW9uOjpjcmVhdGVGcm9tUGFnZShjb25zdCBQYWdlJiBwYWdlKQoreworICAgIGNvbnN0IE1h
aW5GcmFtZSYgbWFpbkZyYW1lID0gcGFnZS5tYWluRnJhbWUoKTsKKyAgICBBU1NFUlQobWFpbkZy
YW1lLmRvY3VtZW50KCkpOworCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhpcyBpcyBpbiBzeW5j
IHdpdGggUmVwbGF5Q29udHJvbGxlcjo6YmVnaW5DYXB0dXJpbmcoKS4KKyAgICBSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+IG9yaWdpbkNvcHkgPSBtYWluRnJhbWUuZG9jdW1lbnQoKS0+c2VjdXJpdHlP
cmlnaW4oKS0+aXNvbGF0ZWRDb3B5KCk7CisgICAgVVJMIHVybCA9IG1haW5GcmFtZS5kb2N1bWVu
dCgpLT51cmwoKTsKKyAgICBTdHJpbmcgcmVmZXJyZXIgPSBtYWluRnJhbWUubG9hZGVyKCkucmVm
ZXJyZXIoKTsKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxJbml0aWFsTmF2aWdhdGlvbj4o
V1RGOjptb3ZlKG9yaWdpbkNvcHkpLCB1cmwsIHJlZmVycmVyKTsKK30KKworc3RkOjp1bmlxdWVf
cHRyPEluaXRpYWxpemVIaXN0b3J5PiBJbml0aWFsaXplSGlzdG9yeTo6Y3JlYXRlRnJvbVBhZ2Uo
Y29uc3QgUGFnZSYgcGFnZSkKK3sKKyAgICBpbnQgYmFja0NvdW50ID0gcGFnZS5iYWNrRm9yd2Fy
ZCgpLmJhY2tDb3VudCgpOworICAgIFZlY3RvcjxSZWZQdHI8SGlzdG9yeUl0ZW0+PiBlbnRyaWVz
KGJhY2tDb3VudCArIDEpOworCisgICAgLy8gT25seSBzYXZlIGJhY2t3YXJkIGVudHJpZXM7IHRo
ZSBpbml0aWFsIG5hdmlnYXRpb24gd2lsbCB0cnVuY2F0ZSBhbnkgZm9yd2FyZCBlbnRyaWVzLgor
ICAgIGZvciAoaW50IGkgPSAtYmFja0NvdW50OyBpIDw9IDA7ICsraSkKKyAgICAgICAgZW50cmll
c1tpICsgYmFja0NvdW50XSA9IHBhZ2UuYmFja0ZvcndhcmQoKS5pdGVtQXRJbmRleChpKS0+Y29w
eSgpOworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8SW5pdGlhbGl6ZUhpc3Rvcnk+KGVu
dHJpZXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCX1JFUExBWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9XZWJSZXBsYXlJ
bnB1dERpc3BhdGNoTWV0aG9kcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvV2ViUmVwbGF5
SW5wdXREaXNwYXRjaE1ldGhvZHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVhNDUyZTZiNTkxZGQ5ZWZjMjdl
ZTZjMWUwZmRkNWZlMTRkNDEwMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZXBsYXkvV2ViUmVwbGF5SW5wdXREaXNwYXRjaE1ldGhvZHMuY3BwCkBAIC0wLDAgKzEsMjE2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUworICogSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEKKyAqIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUo
V0VCX1JFUExBWSkKKworI2luY2x1ZGUgIkFsbFJlcGxheUlucHV0cy5oIgorI2luY2x1ZGUgIkJh
Y2tGb3J3YXJkQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkRPTVRpbWVyLmgiCisjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1l
TG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkhpc3Rv
cnlDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCisjaW5jbHVkZSAiTmF2aWdh
dGlvblNjaGVkdWxlci5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJSZXBsYXlDb250
cm9sbGVyLmgiCisjaW5jbHVkZSAiUmVwbGF5YWJsZVRpbWVycy5oIgorI2luY2x1ZGUgIlJlc291
cmNlRXJyb3IuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIlJlc291
cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIldlYlJlcGxheUlucHV0Q29kZXJzLmgiCisjaW5jbHVk
ZSAiVVJMLmgiCisjaW5jbHVkZSAiVXNlcklucHV0QnJpZGdlLmgiCisjaW5jbHVkZSA8Y2ludHR5
cGVzPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBSZXNvdXJjZUxvYWRlciogcmVz
b3VyY2VMb2FkZXJGb3JPcmRpbmFsKFBhZ2UmIHBhZ2UsIHVuc2lnbmVkIGxvbmcgb3JkaW5hbCwg
aW50IGZyYW1lSW5kZXgpCit7CisgICAgRnJhbWUqIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVJbmRl
eCgmcGFnZSwgZnJhbWVJbmRleCk7CisgICAgQVNTRVJUKGZyYW1lKTsKKworICAgIGNvbnN0IFZl
Y3Rvcjx1bnNpZ25lZCBsb25nPiYgdXNlZElkZW50aWZpZXJzID0gZnJhbWUtPm1haW5GcmFtZSgp
LmxvYWRlcigpLmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPnVzZWRJZGVudGlmaWVycygpOworICAg
IEFTU0VSVChvcmRpbmFsIDwgdXNlZElkZW50aWZpZXJzLnNpemUoKSk7CisKKyAgICBSZWZQdHI8
UmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS5hY3RpdmVEb2N1bWVudExv
YWRlcigpLT5sb2FkZXJGb3JJZGVudGlmaWVyKHVzZWRJZGVudGlmaWVycy5hdChvcmRpbmFsKSk7
CisgICAgcmV0dXJuIGxvYWRlciA/IGxvYWRlci5nZXQoKSA6IG51bGxwdHI7Cit9CisKKy8vIFNl
bnRpbmVsIGlucHV0cy4KK3ZvaWQgQmVnaW5TZWdtZW50U2VudGluZWw6OmRpc3BhdGNoKFBhZ2Um
KQoreworfQorCit2b2lkIEVuZFNlZ21lbnRTZW50aW5lbDo6ZGlzcGF0Y2goUGFnZSYpCit7Cit9
CisKKy8vIE5hdmlnYXRpb24gaW5wdXRzLgordm9pZCBJbml0aWFsTmF2aWdhdGlvbjo6ZGlzcGF0
Y2goUGFnZSYgcGFnZSkKK3sKKyAgICBwYWdlLm1haW5GcmFtZSgpLm5hdmlnYXRpb25TY2hlZHVs
ZXIoKS5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKG1fc2VjdXJpdHlPcmlnaW4uZ2V0KCksIG1fdXJs
LCBtX3JlZmVycmVyKTsKK30KKwordm9pZCBMb2FkVVJMUmVxdWVzdDo6ZGlzcGF0Y2goUGFnZSYg
cGFnZSkKK3sKKyAgICBwYWdlLnVzZXJJbnB1dEJyaWRnZSgpLmxvYWRSZXF1ZXN0KCptX2xvYWRS
ZXF1ZXN0KTsKK30KKwordm9pZCBSZWxvYWRGcmFtZTo6ZGlzcGF0Y2goUGFnZSYgcGFnZSkKK3sK
KyAgICBGcmFtZSogZnJhbWUgPSBmcmFtZUZyb21GcmFtZUluZGV4KCZwYWdlLCBtX2ZyYW1lSW5k
ZXgpOworICAgIEFTU0VSVChmcmFtZSk7CisKKyAgICBwYWdlLnVzZXJJbnB1dEJyaWRnZSgpLnJl
bG9hZEZyYW1lKGZyYW1lLCBtX2VuZFRvRW5kUmVsb2FkLCBJbnB1dFNvdXJjZTo6U3ludGhldGlj
KTsKK30KKwordm9pZCBTdG9wTG9hZGluZ0ZyYW1lOjpkaXNwYXRjaChQYWdlJiBwYWdlKQorewor
ICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lSW5kZXgoJnBhZ2UsIG1fZnJhbWVJbmRl
eCk7CisgICAgQVNTRVJUKGZyYW1lKTsKKworICAgIHBhZ2UudXNlcklucHV0QnJpZGdlKCkuc3Rv
cExvYWRpbmdGcmFtZShmcmFtZSwgSW5wdXRTb3VyY2U6OlN5bnRoZXRpYyk7Cit9CisKK3ZvaWQg
VHJ5Q2xvc2VQYWdlOjpkaXNwYXRjaChQYWdlJiBwYWdlKQoreworICAgIHBhZ2UudXNlcklucHV0
QnJpZGdlKCkudHJ5Q2xvc2VQYWdlKElucHV0U291cmNlOjpTeW50aGV0aWMpOworfQorCit2b2lk
IEluaXRpYWxpemVIaXN0b3J5OjpkaXNwYXRjaChQYWdlJiBwYWdlKQoreworICAgIHJldHVybjsg
Ly8gSEFDSworCisgICAgLy8gRklYTUU6IExvYWQgdGhlIGVtcHR5IGRvY3VtZW50LCBzbyB0aGF0
IHdoZW4gd2UgcHJ1bmUgdGhlIGJhY2stZm9yd2FyZCBsaXN0IGl0CisgICAgLy8gaXMgdGhlIHNp
bmdsZSByZW1haW5pbmcgZW50cnkuIDxodHRwczovL3dlYmtpdC5vcmcvYi8xMzE5ODk+CisgICAg
cGFnZS5iYWNrRm9yd2FyZCgpLmNsZWFyKCk7CisKKyAgICBmb3IgKFJlZlB0cjxIaXN0b3J5SXRl
bT4gaGlzdG9yeUVudHJ5IDogbV9lbnRyaWVzKQorICAgICAgICBwYWdlLmJhY2tGb3J3YXJkKCku
YWRkSXRlbShoaXN0b3J5RW50cnktPmNvcHkoKSk7CisKKyAgICBwYWdlLm1haW5GcmFtZSgpLmxv
YWRlcigpLmhpc3RvcnkoKS5zZXRDdXJyZW50SXRlbShwYWdlLmJhY2tGb3J3YXJkKCkuY3VycmVu
dEl0ZW0oKSk7Cit9CisKK3ZvaWQgSGFuZGxlS2V5UHJlc3M6OmRpc3BhdGNoKFBhZ2UmIHBhZ2Up
Cit7CisgICAgcGFnZS51c2VySW5wdXRCcmlkZ2UoKS5oYW5kbGVLZXlFdmVudChwbGF0Zm9ybUV2
ZW50KCksIElucHV0U291cmNlOjpTeW50aGV0aWMpOworfQorCisvLyBVc2VyIGludGVyYWN0aW9u
IGlucHV0cy4KK3ZvaWQgSGFuZGxlTW91c2VNb3ZlOjpkaXNwYXRjaChQYWdlJiBwYWdlKQorewor
ICAgIGlmIChtX3Njcm9sbGJhclRhcmdldGVkKQorICAgICAgICBwYWdlLnVzZXJJbnB1dEJyaWRn
ZSgpLmhhbmRsZU1vdXNlTW92ZU9uU2Nyb2xsYmFyRXZlbnQocGxhdGZvcm1FdmVudCgpLCBJbnB1
dFNvdXJjZTo6U3ludGhldGljKTsKKyAgICBlbHNlCisgICAgICAgIHBhZ2UudXNlcklucHV0QnJp
ZGdlKCkuaGFuZGxlTW91c2VNb3ZlRXZlbnQocGxhdGZvcm1FdmVudCgpLCBJbnB1dFNvdXJjZTo6
U3ludGhldGljKTsKK30KKwordm9pZCBIYW5kbGVNb3VzZVByZXNzOjpkaXNwYXRjaChQYWdlJiBw
YWdlKQoreworICAgIHBhZ2UudXNlcklucHV0QnJpZGdlKCkuaGFuZGxlTW91c2VQcmVzc0V2ZW50
KHBsYXRmb3JtRXZlbnQoKSwgSW5wdXRTb3VyY2U6OlN5bnRoZXRpYyk7Cit9CisKK3ZvaWQgSGFu
ZGxlTW91c2VSZWxlYXNlOjpkaXNwYXRjaChQYWdlJiBwYWdlKQoreworICAgIHBhZ2UudXNlcklu
cHV0QnJpZGdlKCkuaGFuZGxlTW91c2VSZWxlYXNlRXZlbnQocGxhdGZvcm1FdmVudCgpLCBJbnB1
dFNvdXJjZTo6U3ludGhldGljKTsKK30KKwordm9pZCBIYW5kbGVXaGVlbEV2ZW50OjpkaXNwYXRj
aChQYWdlJiBwYWdlKQoreworICAgIHBhZ2UudXNlcklucHV0QnJpZGdlKCkuaGFuZGxlV2hlZWxF
dmVudChwbGF0Zm9ybUV2ZW50KCksIElucHV0U291cmNlOjpTeW50aGV0aWMpOworfQorCit2b2lk
IExvZ2ljYWxTY3JvbGxQYWdlOjpkaXNwYXRjaChQYWdlJiBwYWdlKQoreworICAgIHBhZ2UudXNl
cklucHV0QnJpZGdlKCkubG9naWNhbFNjcm9sbFJlY3Vyc2l2ZWx5KGRpcmVjdGlvbigpLCBncmFu
dWxhcml0eSgpLCBJbnB1dFNvdXJjZTo6U3ludGhldGljKTsKK30KKwordm9pZCBTY3JvbGxQYWdl
OjpkaXNwYXRjaChQYWdlJiBwYWdlKQoreworICAgIHBhZ2UudXNlcklucHV0QnJpZGdlKCkuc2Ny
b2xsUmVjdXJzaXZlbHkoZGlyZWN0aW9uKCksIGdyYW51bGFyaXR5KCksIElucHV0U291cmNlOjpT
eW50aGV0aWMpOworfQorCisvLyBOZXR3b3JrIGlucHV0cy4KK3ZvaWQgUmVzb3VyY2VMb2FkZXJE
aWRGYWlsOjpkaXNwYXRjaChQYWdlJiBwYWdlKQoreworICAgIGlmIChSZXNvdXJjZUxvYWRlciog
bG9hZGVyID0gcmVzb3VyY2VMb2FkZXJGb3JPcmRpbmFsKHBhZ2UsIG9yZGluYWwoKSwgZnJhbWVJ
bmRleCgpKSkKKyAgICAgICAgbG9hZGVyLT5kaWRGYWlsKG1fZXJyb3ItPmNvcHkoKSk7CisgICAg
Ly8gRklYTUU6IHNpZ25hbCBlcnJvciBpZiB0aGUgY2FsbGJhY2sgY291bGRuJ3QgYmUgZmlyZWQu
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkZXJEaWRGaW5pc2hMb2FkaW5nOjpkaXNwYXRjaChQYWdl
JiBwYWdlKQoreworICAgIGlmIChSZXNvdXJjZUxvYWRlciogbG9hZGVyID0gcmVzb3VyY2VMb2Fk
ZXJGb3JPcmRpbmFsKHBhZ2UsIG9yZGluYWwoKSwgZnJhbWVJbmRleCgpKSkKKyAgICAgICAgbG9h
ZGVyLT5kaWRGaW5pc2hMb2FkaW5nKG1fZmluaXNoVGltZSk7CisgICAgLy8gRklYTUU6IHNpZ25h
bCBlcnJvciBpZiB0aGUgY2FsbGJhY2sgY291bGRuJ3QgYmUgZmlyZWQuCit9CisKK3ZvaWQgUmVz
b3VyY2VMb2FkZXJEaWRSZWNlaXZlRGF0YTo6ZGlzcGF0Y2goUGFnZSYgcGFnZSkKK3sKKyAgICBp
ZiAoUmVzb3VyY2VMb2FkZXIqIGxvYWRlciA9IHJlc291cmNlTG9hZGVyRm9yT3JkaW5hbChwYWdl
LCBvcmRpbmFsKCksIGZyYW1lSW5kZXgoKSkpCisgICAgICAgIGxvYWRlci0+ZGlkUmVjZWl2ZURh
dGEoYnVmZmVyKCktPmRhdGEoKSwgYnVmZmVyKCktPnNpemUoKSwgZW5jb2RlZExlbmd0aCgpLCBE
YXRhUGF5bG9hZEJ5dGVzKTsKKyAgICAvLyBGSVhNRTogc2lnbmFsIGVycm9yIGlmIHRoZSBjYWxs
YmFjayBjb3VsZG4ndCBiZSBmaXJlZC4KK30KKwordm9pZCBSZXNvdXJjZUxvYWRlckRpZFJlY2Vp
dmVSZXNwb25zZTo6ZGlzcGF0Y2goUGFnZSYgcGFnZSkKK3sKKyAgICBpZiAoUmVzb3VyY2VMb2Fk
ZXIqIGxvYWRlciA9IHJlc291cmNlTG9hZGVyRm9yT3JkaW5hbChwYWdlLCBvcmRpbmFsKCksIGZy
YW1lSW5kZXgoKSkpCisgICAgICAgIGxvYWRlci0+ZGlkUmVjZWl2ZVJlc3BvbnNlKCptX3Jlc3Bv
bnNlKTsKKyAgICAvLyBGSVhNRTogc2lnbmFsIGVycm9yIGlmIHRoZSBjYWxsYmFjayBjb3VsZG4n
dCBiZSBmaXJlZC4KK30KKwordm9pZCBSZXNvdXJjZUxvYWRlckRpZFNlbmREYXRhOjpkaXNwYXRj
aChQYWdlJiBwYWdlKQoreworICAgIGlmIChSZXNvdXJjZUxvYWRlciogbG9hZGVyID0gcmVzb3Vy
Y2VMb2FkZXJGb3JPcmRpbmFsKHBhZ2UsIG9yZGluYWwoKSwgZnJhbWVJbmRleCgpKSkKKyAgICAg
ICAgbG9hZGVyLT5kaWRTZW5kRGF0YShtX2J5dGVzU2VudCwgbV90b3RhbEJ5dGVzVG9CZVNlbnQp
OworICAgIC8vIEZJWE1FOiBzaWduYWwgZXJyb3IgaWYgdGhlIGNhbGxiYWNrIGNvdWxkbid0IGJl
IGZpcmVkLgorfQorCisvLyBPdGhlciBldmVudCBsb29wIGlucHV0cy4KK3ZvaWQgQXN5bmNUaW1l
ckZpcmVkOjpkaXNwYXRjaChQYWdlJiBwYWdlKQoreworICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IGRvY3VtZW50RnJvbUZyYW1lSW5kZXgoJnBhZ2UsIG1fZnJhbWVJbmRleCk7CisgICAgaWYgKCFk
b2N1bWVudCB8fCAhZG9jdW1lbnQtPnJlcGxheWFibGVUaW1lcnMoKS5maXJlVGltZXIobV9vcmRp
bmFsKSkKKyAgICAgICAgTE9HX0VSUk9SKCIlLTMwcyBSRVBMQVkgRElWRVJHRU5DRSEgQ291bGRu
J3QgZmluZCBhc3luYyB0aW1lciAlZC8lIiBQUkl1NjQgIi5cbiIsICJbUmVwbGF5Q29udHJvbGxl
cl0iLCBtX2ZyYW1lSW5kZXgsIG1fb3JkaW5hbCk7Cit9CisKK3ZvaWQgRE9NVGltZXJGaXJlZDo6
ZGlzcGF0Y2goUGFnZSYgcGFnZSkKK3sKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBkb2N1bWVu
dEZyb21GcmFtZUluZGV4KCZwYWdlLCBtX2ZyYW1lSW5kZXgpOworICAgIERPTVRpbWVyKiB0aW1l
ciA9IGRvY3VtZW50LT5maW5kVGltZW91dChtX3RpbWVySWRlbnRpZmllcik7CisgICAgaWYgKHRp
bWVyKQorICAgICAgICB0aW1lci0+ZmlyZWQoKTsKKyAgICBlbHNlCisgICAgICAgTE9HX0VSUk9S
KCJSRVBMQVkgRElWRVJHRU5DRSEgQ291bGRuJ3QgZmluZCBhbmQgZmlyZSBET00gdGltZXIgJSIg
UFJJdTMyICIvJSIgUFJJdTMyICIuXG4iLCBtX2ZyYW1lSW5kZXgsIG1fdGltZXJJZGVudGlmaWVy
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9S
RVBMQVkpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>