<?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>276993</bug_id>
          
          <creation_ts>2024-07-24 05:09:06 -0700</creation_ts>
          <short_desc>REGRESSION(281277@main): Broke wincairo build</short_desc>
          <delta_ts>2024-07-24 05:14:14 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>276963</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>keith_miller</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>2047995</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2024-07-24 05:09:06 -0700</bug_when>
    <thetext>https://commits.webkit.org/281277@main introduced a regression:
Broke wincairo build

This is an automatic bug report generated by webkitbot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2047997</commentid>
    <comment_count>1</comment_count>
      <attachid>471952</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2024-07-24 05:09:14 -0700</bug_when>
    <thetext>Created attachment 471952
REVERT of 281277@main

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the revert will be successful.  This process takes approximately 15 minutes.

If you would like to land the revert faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2047999</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2024-07-24 05:13:10 -0700</bug_when>
    <thetext>Committed 281287@main (60c1750fb257): &lt;https://commits.webkit.org/281287@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 471952.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2048000</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2024-07-24 05:14:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/132397449&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>471952</attachid>
            <date>2024-07-24 05:09:14 -0700</date>
            <delta_ts>2024-07-24 05:13:10 -0700</delta_ts>
            <desc>REVERT of 281277@main</desc>
            <filename>bug-276993-20240724120913.patch</filename>
            <type>text/plain</type>
            <size>378348</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">RnJvbSBmNmY1YjhhYzU3ZTRmYzYyNjhhMzY4MGQwNWJiYzJhODQ2ZTE4ODRiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDb21taXQgUXVldWUgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3Jn
PgpEYXRlOiBXZWQsIDI0IEp1bCAyMDI0IDEyOjA5OjEwICswMDAwClN1YmplY3Q6IFtQQVRDSF0g
VW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIDI4MTI3N0BtYWluLgogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI3Njk5MwoKQnJva2Ugd2luY2Fpcm8gYnVpbGQKClJldmVydGVk
IGNoYW5nZXNldDoKCiJNZXJnZSBXYXNtOjpJbnN0YW5jZSBpbnRvIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSIKaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3Njk2MwpodHRw
czovL2NvbW1pdHMud2Via2l0Lm9yZy8yODEyNzdAbWFpbgotLS0KIC4uLi9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICB8ICAgNiArCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU291cmNlcy50eHQgICAgICAgICAgICAgfCAgIDIgKwogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oICAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgfCAgMjMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NlbGxBdHRyaWJ1dGVzLmggICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAgICAgICAgICAgIHwgICAyICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Jc29DZWxsU2V0LmNwcCAgICAgfCAgIDEgLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SXNvQ2VsbFNldC5oICAgICAgIHwgICA0ICstCiAuLi4vSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29D
ZWxsU2V0SW5saW5lcy5oICAgfCAgMTYgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lz
b1N1YnNwYWNlLmNwcCAgICB8ICA0MCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNv
U3Vic3BhY2UuaCAgICAgIHwgIDE0ICstCiAuLi4vSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJz
cGFjZUlubGluZXMuaCAgfCAgIDggKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNw
YWNlUGVyVk0uY3BwICB8ICAgNCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxB
bGxvY2F0b3IuY3BwIHwgICA2ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRC
bG9jay5oICAgICAgfCAgIDQgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNw
YWNlLmNwcCAgICB8ICAgNiArLQogLi4uL0phdmFTY3JpcHRDb3JlL2hlYXAvUHJlY2lzZUFsbG9j
YXRpb24uY3BwIHwgIDE1ICstCiAuLi4vSmF2YVNjcmlwdENvcmUvaGVhcC9QcmVjaXNlQWxsb2Nh
dGlvbi5oICAgfCAgMTMgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N1YnNwYWNlLmgg
ICAgICAgICB8ICAgNCArLQogLi4uL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFt
ZS5jcHAgIHwgIDE2ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZy
YW1lLmggfCAgIDcgKy0KIC4uLi9pbnRlcnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmggICAgICAg
ICAgICB8ICAxMCArLQogLi4uL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCAgICAgICAgICAg
ICAgIHwgICAyICstCiAuLi4vaW50ZXJwcmV0ZXIvUHJvdG9DYWxsRnJhbWUuaCAgICAgICAgICAg
ICAgfCAgMTAgKy0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNw
cCB8ICAxMCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmggICAgICAgICAg
IHwgICA0ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCAgICAgICAgICAgICAgICAg
fCAgIDQgKy0KIC4uLi9sbGludC9JblBsYWNlSW50ZXJwcmV0ZXIuYXNtICAgICAgICAgICAgICB8
ICAzMSArLQogLi4uL2xsaW50L0luUGxhY2VJbnRlcnByZXRlcjY0LmFzbSAgICAgICAgICAgIHwg
IDMxICstCiAuLi4vbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcCAgICAgICAgICAgfCAg
IDEgKwogLi4uL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtICAgICAgICAgICAgIHwgICA0
ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvV2ViQXNzZW1ibHkuYXNtICAgfCAgMzAg
Ky0KIC4uLi9KYXZhU2NyaXB0Q29yZS9sbGludC9XZWJBc3NlbWJseTMyXzY0LmFzbSB8ICAxOCAr
LQogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L1dlYkFzc2VtYmx5NjQuYXNtIHwgICA4ICst
CiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwICAgICAgfCAgIDIgKy0K
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oICAgICAgICB8ICAgMyArLQog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmggICAgIHwgICAyICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgICAgICAgICAgfCAgMjIgKy0KIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggICAgICAgICAgICB8ICAxMCArCiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NTZXQuaCAgICAgfCAgNDggKy0KIC4uLi9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ1NldElubGluZXMuaCB8ICAyMiArCiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRSklULmNwcCAgICAgfCAgMjYgKy0KIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFKSVQuaCAgICAgICB8ICAgNiArLQogLi4uL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUJCUUpJVDMyXzY0LmNwcCAgIHwgIDEyICstCiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRSklUNjQuY3BwICAgfCAgMTUgKy0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcCAgICB8ICAxNyArLQogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZS5jcHAgICAgIHwgICA4ICstCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmggICAgICAgfCAgIDQgKy0KIC4uLi93YXNtL1dhc21D
b25zdEV4cHJHZW5lcmF0b3IuY3BwICAgICAgICAgICB8ICAxMiArLQogLi4uL3dhc20vV2FzbUNv
bnN0RXhwckdlbmVyYXRvci5oICAgICAgICAgICAgIHwgICA5ICstCiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQ29udGV4dC5oICAgICAgfCAgIDIgKwogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUdsb2JhbC5oICAgICAgIHwgICAyICsKIC4uLi9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21IYW5kbGVySW5mby5jcHAgICB8ICAgNiArLQogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUhhbmRsZXJJbmZvLmggIHwgICA3ICstCiAuLi4vd2FzbS9XYXNtSVBJbnRTbG93
UGF0aHMuY3BwICAgICAgICAgICAgICAgfCAgMTEgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21JUEludFNsb3dQYXRocy5oICB8ICAxMCArLQogLi4uL3dhc20vV2FzbUlSR2VuZXJhdG9y
SGVscGVycy5oICAgICAgICAgICAgIHwgIDEzICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtSW5zdGFuY2UuY3BwICAgfCA0MjYgKysrKysrKysrKysrKysrKysKIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oICAgICB8IDI5MiArKysrKysrKysrKysKIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21KUy5oICAgICAgICAgICB8ICAgMyArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAgICAgIHwgIDU5ICstLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oICAgICAgIHwgIDIzICstCiAuLi4v
d2FzbS9XYXNtT01HSVJHZW5lcmF0b3IuY3BwICAgICAgICAgICAgICAgfCAgNjAgKystCiAuLi4v
d2FzbS9XYXNtT01HSVJHZW5lcmF0b3IzMl82NC5jcHAgICAgICAgICAgfCAgNjkgKy0tCiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAgfCAxMTIgKystLS0KIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmggICB8IDEwOSArKy0tLQog
Li4uL3dhc20vV2FzbU9wZXJhdGlvbnNJbmxpbmVzLmggICAgICAgICAgICAgIHwgIDk1ICsrLS0K
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwICB8ICAyMyArLQog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5oICAgIHwgIDEyICstCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3BwICAgICAgfCAgIDIgKy0KIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5oICAgICAgICB8ICAgOSArLQogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAgICAgIHwgICA3ICstCiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAgICAgfCAgIDggKy0KIC4uLi9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwICB8ICAgMiArLQogLi4uL3dh
c20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcCAgICAgICAgIHwgNDQ4ICsrLS0tLS0tLS0t
LS0tLS0tLQogLi4uL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmggICAgICAgICAgIHwg
MjU3ICstLS0tLS0tLS0KIC4uLi93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwICAgICAg
ICAgICB8ICAgMiArLQogLi4uL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5oICAgICAgICAg
ICAgIHwgIDEwICstCiAuLi4vd2FzbS9qcy9KU1dlYkFzc2VtYmx5U3RydWN0LmNwcCAgICAgICAg
ICAgfCAgIDIgKy0KIC4uLi93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAgICAgICAgICAg
ICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwICAg
IHwgIDI5ICstCiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5oICAgICAg
fCAgIDEgKwogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAgICAgICAgICAgIHwg
IDI2ICstCiAuLi4vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcCAgICAgfCAg
IDIgKy0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcCAgICAgICB8IDEw
OCArKy0tLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICAgIHwg
ICAyICstCiAuLi4vYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCAgICAgfCAg
IDQgKy0KIDg3IGZpbGVzIGNoYW5nZWQsIDE0ODEgaW5zZXJ0aW9ucygrKSwgMTM1MCBkZWxldGlv
bnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
SW5zdGFuY2UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUluc3RhbmNlLmgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGU5OTZl
NTA3OTE2ZC4uZTE0ZTg4YjNjYTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MTY5OSw2ICsxNjk5LDcgQEAKIAkJQUQ0QjFERkExREYyNDRFMjAwNzFBRTMyIC8qIFdhc21CaW5k
aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDRC
MURGODFERjI0NEQ3MDA3MUFFMzIgLyogV2FzbUJpbmRpbmcuaCAqLzsgfTsKIAkJQUQ1QjQxNkYx
RUJBRkI3NzAwOEVGQTQzIC8qIFdhc21OYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBRDVCNDE2RTFFQkFGQjY1MDA4RUZBNDMgLyogV2FzbU5hbWUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBRDVD
MzZERDFGNjg4QjY1MDAwQkNBQUYgLyogV2FzbUpTLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDVDMzZEQzFGNjg4QjVGMDAwQkNBQUYgLyogV2FzbUpT
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQUQ1
QzM2RTIxRjY5OUVDMDAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ1QzM2REYxRjY5OUVCNjAwMEJDQUFGIC8q
IFdhc21JbnN0YW5jZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUFENUMzNkU2MUY2OUVDOTEwMDBCQ0FBRiAvKiBXYXNtVGFibGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENUMzNkU0MUY2OUVDOEIw
MDBCQ0FBRiAvKiBXYXNtVGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlBRDVDMzZFQTFGNzVBRDZBMDAwQkNBQUYgLyogSlNUb1dhc20uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEOERENkNGMUY2
NzA4OUYwMDA0RUI1MiAvKiBKU1RvV2FzbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUFENUMzNkVCMUY3NUFENzMwMDBCQ0FBRiAvKiBKU1dlYkFz
c2VtYmx5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
REQwOUFGMzFGNjI0ODJFMDAxMzEzQzIgLyogSlNXZWJBc3NlbWJseS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01MjI4LDYgKzUyMjksOCBAQAog
CQlBRDRCMURGODFERjI0NEQ3MDA3MUFFMzIgLyogV2FzbUJpbmRpbmcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUJpbmRpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQUQ1QjQxNkUxRUJBRkI2NTAwOEVGQTQzIC8qIFdhc21OYW1lLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21OYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUFENUMzNkRDMUY2ODhCNUYwMDBCQ0FBRiAvKiBXYXNtSlMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2FzbUpTLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFENUMzNkRFMUY2
OTlFQjYwMDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Fz
bUluc3RhbmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQ1QzM2REYxRjY5
OUVCNjAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtSW5zdGFu
Y2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ1QzM2RTMxRjY5RUM4QjAwMEJD
QUFGIC8qIFdhc21UYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtVGFibGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDVDMzZFNDFGNjlFQzhCMDAwQkNBQUYgLyog
V2FzbVRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21UYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBRDc0MzhCRTFFMDQ1NzkyMDBGRDBDMkEgLyogV2FzbVR5cGVEZWZpbml0
aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21UeXBlRGVm
aW5pdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NzMyLDYgKzc3MzUs
OCBAQAogCQkJCTE0ODUyMUQ3MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFuZGxlckluZm8uaCAq
LywKIAkJCQlBRDhGRjM5NjFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmNwcCAq
LywKIAkJCQlBRDhGRjM5NTFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmggKi8s
CisJCQkJQUQ1QzM2REUxRjY5OUVCNjAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5jcHAgKi8sCisJ
CQkJQUQ1QzM2REYxRjY5OUVCNjAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5oICovLAogCQkJCUYz
RDlDMjM4MkE0MjZDQjcwMDZFRTE1MiAvKiBXYXNtSVBJbnRHZW5lcmF0b3IuY3BwICovLAogCQkJ
CUYzRDlDMjM1MkE0MjZDQjcwMDZFRTE1MiAvKiBXYXNtSVBJbnRHZW5lcmF0b3IuaCAqLywKIAkJ
CQlGM0Q5QzIzNjJBNDI2Q0I3MDA2RUUxNTIgLyogV2FzbUlQSW50UGxhbi5jcHAgKi8sCkBAIC0x
MTg1NSw2ICsxMTg2MCw3IEBACiAJCQkJRTM4MzUwMEEyMzkwRDkzQjAwMzYzMTZEIC8qIFdhc21H
bG9iYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0ODUyMUQ4MjZFQUVCRkUwMENDMUQxQSAvKiBX
YXNtSGFuZGxlckluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUFEOEZGMzk4MUVCNUJEQjIwMDg3
RkY4MiAvKiBXYXNtSW5kZXhPck5hbWUuaCBpbiBIZWFkZXJzICovLAorCQkJCUFENUMzNkUyMUY2
OTlFQzAwMDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzRDlD
MjM5MkE0MjZDQjgwMDZFRTE1MiAvKiBXYXNtSVBJbnRHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCUYzRDlDMjNCMkE0MjZDQjgwMDZFRTE1MiAvKiBXYXNtSVBJbnRQbGFuLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MzA5MUY5QTJBQkUxRjU3MDA3NkNCQzQgLyogV2FzbUlQSW50U2xvd1Bh
dGhzLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
b3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCA4ODQ2
OGFjM2M4NmUuLjlmZWNlMmVjZmVkOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAt
MTE0NCw2ICsxMTQ0LDggQEAgd2FzbS9XYXNtRnVuY3Rpb25JUEludE1ldGFkYXRhR2VuZXJhdG9y
LmNwcAogd2FzbS9XYXNtR2xvYmFsLmNwcAogd2FzbS9XYXNtSGFuZGxlckluZm8uY3BwCiB3YXNt
L1dhc21JbmRleE9yTmFtZS5jcHAKK3dhc20vV2FzbUluc3RhbmNlLmNwcAord2FzbS9XYXNtSW5z
dGFuY2UuaAogd2FzbS9XYXNtSVBJbnRHZW5lcmF0b3IuY3BwCiB3YXNtL1dhc21JUEludFBsYW4u
Y3BwCiB3YXNtL1dhc21JUEludFNsb3dQYXRocy5jcHAgQG5vLXVuaWZ5CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5kZXggZGVkNGI5Y2RlNGZiLi41MDU3N2Q4
YWRhZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKQEAg
LTEyNCw3ICsxMjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgfQogICAgIC8vIEdDIHN0cm9uZ2x5IGFzc3VtZXMgQ29kZUJsb2NrIGlzIG5v
dCBhIFByZWNpc2VBbGxvY2F0aW9uIGZvciBub3cuCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1aW50
OF90IG51bWJlck9mTG93ZXJUaWVyUHJlY2lzZUNlbGxzID0gMDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVpbnQ4X3QgbnVtYmVyT2ZMb3dlclRpZXJDZWxscyA9IDA7CiAKICAgICBERUNMQVJFX0lO
Rk87CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApp
bmRleCBjYzhkYWI1NjNmNzkuLmUwNzUwNzNjNDg0MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApAQCAtMTA0LDYgKzEwNCw3IEBACiAjaW5jbHVk
ZSAiU3VwZXJTYW1wbGVyLmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCiAjaW5jbHVk
ZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisjaW5jbHVkZSAiV2FzbUluc3RhbmNlLmgiCiAjaW5jbHVk
ZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlv
bi5oIgogI2luY2x1ZGUgIllhcnJKSVRSZWdpc3RlcnMuaCIKQEAgLTEyNTEwLDE2ICsxMjUxMSwx
NiBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgIGJvb2wgd2FzbUJvdW5kc0No
ZWNraW5nU2l6ZVJlZ2lzdGVyQ29uZmlndXJlZEFzSW5wdXRDb250cmFpbnRzID0gZmFsc2U7CiAg
ICAgICAgIGJvb2wgd2FzbUJhc2VNZW1vcnlQb2ludGVyQ29uZmlndXJlZEFzSW5wdXRDb250cmFp
bnRzID0gZmFsc2U7CiAgICAgICAgIGF1dG8qIGpzSW5zdGFuY2UgPSB3YXNtRnVuY3Rpb24tPmlu
c3RhbmNlKCk7Ci0gICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShmcm96
ZW5Qb2ludGVyKG1fZ3JhcGguZnJlZXplKGpzSW5zdGFuY2UpKSwgVmFsdWVSZXA6OnJlZyhHUFJJ
bmZvOjp3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcikpKTsKLSAgICAgICAgaWYgKCEhanNJbnN0
YW5jZS0+bW9kdWxlKCkubW9kdWxlSW5mb3JtYXRpb24oKS5tZW1vcnkpIHsKKyAgICAgICAgYXJn
dW1lbnRzLmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKG1fb3V0LmNvbnN0SW50UHRyKCZqc0luc3Rh
bmNlLT5pbnN0YW5jZSgpKSwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjp3YXNtQ29udGV4dEluc3Rh
bmNlUG9pbnRlcikpKTsKKyAgICAgICAgaWYgKCEhanNJbnN0YW5jZS0+aW5zdGFuY2UoKS5tb2R1
bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpLm1lbW9yeSkgewogICAgICAgICAgICAgYXV0byBtb2Rl
ID0ganNJbnN0YW5jZS0+bWVtb3J5TW9kZSgpOwotICAgICAgICAgICAgaWYgKG1vZGUgPT0gTWVt
b3J5TW9kZTo6U2lnbmFsaW5nIHx8IChtb2RlID09IE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5n
ICYmIGpzSW5zdGFuY2UtPm1lbW9yeSgpLT5zaGFyaW5nTW9kZSgpID09IE1lbW9yeVNoYXJpbmdN
b2RlOjpTaGFyZWQpKSB7CisgICAgICAgICAgICBpZiAobW9kZSA9PSBNZW1vcnlNb2RlOjpTaWdu
YWxpbmcgfHwgKG1vZGUgPT0gTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcgJiYganNJbnN0YW5j
ZS0+aW5zdGFuY2UoKS5tZW1vcnkoKS0+c2hhcmluZ01vZGUoKSA9PSBNZW1vcnlTaGFyaW5nTW9k
ZTo6U2hhcmVkKSkgewogICAgICAgICAgICAgICAgIC8vIENhcGFjaXR5IGFuZCBiYXNlUG9pbnRl
ciB3aWxsIG5vdCBiZSBjaGFuZ2VkLgogICAgICAgICAgICAgICAgIGlmIChtb2RlID09IE1lbW9y
eU1vZGU6OkJvdW5kc0NoZWNraW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5h
cHBlbmQoQ29uc3RyYWluZWRWYWx1ZShtX291dC5jb25zdEludDY0KGpzSW5zdGFuY2UtPm1lbW9y
eSgpLT5tYXBwZWRDYXBhY2l0eSgpKSwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjp3YXNtQm91bmRz
Q2hlY2tpbmdTaXplUmVnaXN0ZXIpKSk7CisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5h
cHBlbmQoQ29uc3RyYWluZWRWYWx1ZShtX291dC5jb25zdEludDY0KGpzSW5zdGFuY2UtPmluc3Rh
bmNlKCkubWVtb3J5KCktPm1hcHBlZENhcGFjaXR5KCkpLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86
Ondhc21Cb3VuZHNDaGVja2luZ1NpemVSZWdpc3RlcikpKTsKICAgICAgICAgICAgICAgICAgICAg
d2FzbUJvdW5kc0NoZWNraW5nU2l6ZVJlZ2lzdGVyQ29uZmlndXJlZEFzSW5wdXRDb250cmFpbnRz
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYXJndW1lbnRzLmFw
cGVuZChDb25zdHJhaW5lZFZhbHVlKG1fb3V0LmNvbnN0SW50UHRyKGpzSW5zdGFuY2UtPm1lbW9y
eSgpLT5iYXNlUG9pbnRlcigpKSwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjp3YXNtQmFzZU1lbW9y
eVBvaW50ZXIpKSk7CisgICAgICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChDb25zdHJhaW5l
ZFZhbHVlKG1fb3V0LmNvbnN0SW50UHRyKGpzSW5zdGFuY2UtPmluc3RhbmNlKCkubWVtb3J5KCkt
PmJhc2VQb2ludGVyKCkpLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86Ondhc21CYXNlTWVtb3J5UG9p
bnRlcikpKTsKICAgICAgICAgICAgICAgICB3YXNtQmFzZU1lbW9yeVBvaW50ZXJDb25maWd1cmVk
QXNJbnB1dENvbnRyYWludHMgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0x
MjU3NSw3ICsxMjU3Niw3IEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgICAg
IGNsb2JiZXIuYWRkKEdQUkluZm86Ondhc21CYXNlTWVtb3J5UG9pbnRlciwgSWdub3JlVmVjdG9y
cyk7CiAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoV1RGTW92ZShjbG9iYmVyKSk7CiAgICAg
ICAgIGF1dG8gY2xvYmJlckxhdGUgPSBSZWdpc3RlclNldEJ1aWxkZXI6OnJlZ2lzdGVyc1RvU2F2
ZUZvckNDYWxsKFJlZ2lzdGVyU2V0QnVpbGRlcjo6YWxsU2NhbGFyUmVnaXN0ZXJzKCkpOwotICAg
ICAgICBjbG9iYmVyTGF0ZS5hZGQoR1BSSW5mbzo6d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIs
IElnbm9yZVZlY3RvcnMpOyAvLyBCZWNhdXNlIGl0IGlzIGFscmVhZHkgdGllZCB0byBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqIGluIHBhdGNocG9pbnQncyBpbnB1dCBjb25zdHJhaW50LCB3ZSBzaG91
bGQgc2F5IGl0IGlzIGxhdGUgY2xvYmJlcmVkLgorICAgICAgICBjbG9iYmVyTGF0ZS5hZGQoR1BS
SW5mbzo6d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIsIElnbm9yZVZlY3RvcnMpOyAvLyBCZWNh
dXNlIGl0IGlzIGFscmVhZHkgdGllZCB0byBXYXNtOjpJbnN0YW5jZSogaW4gcGF0Y2hwb2ludCdz
IGlucHV0IGNvbnN0cmFpbnQsIHdlIHNob3VsZCBzYXkgaXQgaXMgbGF0ZSBjbG9iYmVyZWQuCiAg
ICAgICAgIGlmICh3YXNtQm91bmRzQ2hlY2tpbmdTaXplUmVnaXN0ZXJDb25maWd1cmVkQXNJbnB1
dENvbnRyYWludHMpCiAgICAgICAgICAgICBjbG9iYmVyTGF0ZS5hZGQoR1BSSW5mbzo6d2FzbUJv
dW5kc0NoZWNraW5nU2l6ZVJlZ2lzdGVyLCBJZ25vcmVWZWN0b3JzKTsKICAgICAgICAgaWYgKHdh
c21CYXNlTWVtb3J5UG9pbnRlckNvbmZpZ3VyZWRBc0lucHV0Q29udHJhaW50cykKQEAgLTEyNTk4
LDE3ICsxMjU5OSwxNyBAQCBJR05PUkVfQ0xBTkdfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9u
QXJndW1lbnRHUFIwOwogICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKEdQ
UkluZm86Ondhc21Cb3VuZHNDaGVja2luZ1NpemVSZWdpc3RlciwgR1BSSW5mbzo6d2FzbUJhc2VN
ZW1vcnlQb2ludGVyLCBzY3JhdGNoR1BSKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFSZWdp
c3RlclNldEJ1aWxkZXI6Om1hY3JvQ2xvYmJlcmVkR1BScygpLmNvbnRhaW5zKHNjcmF0Y2hHUFIs
IElnbm9yZVZlY3RvcnMpKTsKLSAgICAgICAgICAgICAgICBpZiAoISFqc0luc3RhbmNlLT5tb2R1
bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpLm1lbW9yeSkgeworICAgICAgICAgICAgICAgIGlmICgh
IWpzSW5zdGFuY2UtPmluc3RhbmNlKCkubW9kdWxlKCkubW9kdWxlSW5mb3JtYXRpb24oKS5tZW1v
cnkpIHsKICAgICAgICAgICAgICAgICAgICAgYXV0byBtb2RlID0ganNJbnN0YW5jZS0+bWVtb3J5
TW9kZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIShtb2RlID09IE1lbW9yeU1vZGU6OlNp
Z25hbGluZyB8fCAobW9kZSA9PSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyAmJiBqc0luc3Rh
bmNlLT5tZW1vcnkoKS0+c2hhcmluZ01vZGUoKSA9PSBNZW1vcnlTaGFyaW5nTW9kZTo6U2hhcmVk
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCEobW9kZSA9PSBNZW1vcnlNb2RlOjpTaWdu
YWxpbmcgfHwgKG1vZGUgPT0gTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcgJiYganNJbnN0YW5j
ZS0+aW5zdGFuY2UoKS5tZW1vcnkoKS0+c2hhcmluZ01vZGUoKSA9PSBNZW1vcnlTaGFyaW5nTW9k
ZTo6U2hhcmVkKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGFsd2F5cyBjbG9i
YmVyIEdQUkluZm86Ondhc21Cb3VuZHNDaGVja2luZ1NpemVSZWdpc3RlciByZWdhcmRsZXNzIG9m
IG1vZGUuIEl0IGlzIE9LIHNpbmNlIHBhdGNocG9pbnQgYWxyZWFkeSBzYWlkIGl0IGlzIGNsb2Ji
ZXJlZC4KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FSTTY0RSgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUGFpclB0cihHUFJJbmZvOjp3YXNtQ29udGV4dElu
c3RhbmNlUG9pbnRlciwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNXZWJBc3NlbWJseUlu
c3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgR1BSSW5mbzo6d2FzbUJhc2VNZW1vcnlQ
b2ludGVyLCBHUFJJbmZvOjp3YXNtQm91bmRzQ2hlY2tpbmdTaXplUmVnaXN0ZXIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUGFpclB0cihHUFJJbmZvOjp3YXNtQ29udGV4
dEluc3RhbmNlUG9pbnRlciwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoV2FzbTo6SW5zdGFu
Y2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBHUFJJbmZvOjp3YXNtQmFzZU1lbW9yeVBvaW50
ZXIsIEdQUkluZm86Ondhc21Cb3VuZHNDaGVja2luZ1NpemVSZWdpc3Rlcik7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9k
ZSA9PSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaml0LmxvYWRQYWlyUHRyKEdQUkluZm86Ondhc21Db250ZXh0SW5zdGFuY2VQb2lu
dGVyLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9m
ZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBHUFJJbmZvOjp3YXNtQmFzZU1lbW9yeVBvaW50ZXIsIEdQ
UkluZm86Ondhc21Cb3VuZHNDaGVja2luZ1NpemVSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5sb2FkUGFpclB0cihHUFJJbmZvOjp3YXNtQ29udGV4dEluc3Rh
bmNlUG9pbnRlciwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoV2FzbTo6SW5zdGFuY2U6Om9m
ZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBHUFJJbmZvOjp3YXNtQmFzZU1lbW9yeVBvaW50ZXIsIEdQ
UkluZm86Ondhc21Cb3VuZHNDaGVja2luZ1NpemVSZWdpc3Rlcik7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6d2FzbUNvbnRleHRJbnN0YW5jZVBv
aW50ZXIsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIEdQ
UkluZm86Ondhc21CYXNlTWVtb3J5UG9pbnRlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjp3YXNtQ29u
dGV4dEluc3RhbmNlUG9pbnRlciwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5
KCkpLCBHUFJJbmZvOjp3YXNtQmFzZU1lbW9yeVBvaW50ZXIpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmNhZ2VDb25kaXRpb25hbGx5KEdp
Z2FjYWdlOjpQcmltaXRpdmUsIEdQUkluZm86Ondhc21CYXNlTWVtb3J5UG9pbnRlciwgR1BSSW5m
bzo6d2FzbUJvdW5kc0NoZWNraW5nU2l6ZVJlZ2lzdGVyLCBzY3JhdGNoR1BSKTsKICAgICAgICAg
ICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2Vs
bEF0dHJpYnV0ZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxBdHRyaWJ1dGVz
LmgKaW5kZXggMjdlODk4NjljZDY3Li41MWI1MzY4M2E2NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxBdHRyaWJ1dGVzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ2VsbEF0dHJpYnV0ZXMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAyNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAKaW5kZXggMmJhNDY4ZjJiOGZlLi45MmUxYzAwYjJmYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCkBAIC0yNzEsNyArMjcxLDcgQEAgcHJpdmF0ZToKICAgICAsIG5hbWUgSVNP
X1NVQlNQQUNFX0lOSVQoKnRoaXMsIGhlYXBDZWxsVHlwZSwgdHlwZSkKIAogI2RlZmluZSBJTklU
X1NFUlZFUl9TVFJVQ1RVUkVfSVNPX1NVQlNQQUNFKG5hbWUsIGhlYXBDZWxsVHlwZSwgdHlwZSkg
XAotICAgICwgbmFtZSgiSXNvU3Vic3BhY2UiICNuYW1lLCAqdGhpcywgaGVhcENlbGxUeXBlLCBX
VEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8dHlwZTo6YXRvbVNpemU+KHNpemVvZih0eXBlKSksIHR5
cGU6OnVzZVByZWNpc2VBbGxvY2F0aW9uc09ubHksIHR5cGU6Om51bWJlck9mTG93ZXJUaWVyUHJl
Y2lzZUNlbGxzLCBtYWtlVW5pcXVlPFN0cnVjdHVyZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I+KCJT
dHJ1Y3R1cmUiKSkKKyAgICAsIG5hbWUoIklzb1N1YnNwYWNlIiAjbmFtZSwgKnRoaXMsIGhlYXBD
ZWxsVHlwZSwgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHR5cGU6OmF0b21TaXplPihzaXplb2Yo
dHlwZSkpLCB0eXBlOjpudW1iZXJPZkxvd2VyVGllckNlbGxzLCBtYWtlVW5pcXVlPFN0cnVjdHVy
ZUFsaWduZWRNZW1vcnlBbGxvY2F0b3I+KCJTdHJ1Y3R1cmUiKSkKIAogSGVhcDo6SGVhcChWTSYg
dm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIDogbV9oZWFwVHlwZShoZWFwVHlwZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvQ2VsbFNldC5jcHAKaW5kZXggYzI4MThhMmI4YWZlLi4z
ZjI4ZjA4MWVlNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0Nl
bGxTZXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuY3Bw
CkBAIC0zMyw3ICszMyw2IEBAIG5hbWVzcGFjZSBKU0MgewogSXNvQ2VsbFNldDo6SXNvQ2VsbFNl
dChJc29TdWJzcGFjZSYgc3Vic3BhY2UpCiAgICAgOiBtX3N1YnNwYWNlKHN1YnNwYWNlKQogewot
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIXN1YnNwYWNlLmlzUHJlY2lzZU9ubHkoKSwgIklzb1N1
YnNwYWNlcyB3aXRoIHByZWNpc2Utb25seSBhbGxvY2F0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCBi
eSBJc29DZWxsU2V0Iik7CiAgICAgc2l6ZV90IHNpemUgPSBzdWJzcGFjZS5tX2RpcmVjdG9yeS5t
X2Jsb2Nrcy5zaXplKCk7CiAgICAgbV9ibG9ja3NXaXRoQml0cy5yZXNpemUoc2l6ZSk7CiAgICAg
bV9iaXRzLmdyb3coc2l6ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Jc29DZWxsU2V0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgK
aW5kZXggZGVkN2M4ZTNjYTg5Li4zN2Y5NmUyYmZkOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Jc29DZWxsU2V0LmgKQEAgLTc2LDkgKzc2LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRp
ZFJlc2l6ZUJpdHModW5zaWduZWQgbmV3U2l6ZSk7CiAgICAgdm9pZCBkaWRSZW1vdmVCbG9jayh1
bnNpZ25lZCBibG9ja0luZGV4KTsKICAgICB2b2lkIHN3ZWVwVG9GcmVlTGlzdChNYXJrZWRCbG9j
azo6SGFuZGxlKik7Ci0gICAgdm9pZCBjbGVhckxvd2VyVGllclByZWNpc2VDZWxsKHVuc2lnbmVk
KTsKKyAgICB2b2lkIGNsZWFyTG93ZXJUaWVyQ2VsbCh1bnNpZ25lZCk7CiAgICAgCi0gICAgV1RG
OjpCaXRTZXQ8TWFya2VkQmxvY2s6Om1heE51bWJlck9mTG93ZXJUaWVyUHJlY2lzZUNlbGxzPiBt
X2xvd2VyVGllclByZWNpc2VCaXRzOworICAgIFdURjo6Qml0U2V0PE1hcmtlZEJsb2NrOjptYXhO
dW1iZXJPZkxvd2VyVGllckNlbGxzPiBtX2xvd2VyVGllckJpdHM7CiAKICAgICBJc29TdWJzcGFj
ZSYgbV9zdWJzcGFjZTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29D
ZWxsU2V0SW5saW5lcy5oCmluZGV4IDZjZDhkNmYxNzQ0Zi4uZWM4N2RkNTlmMTU5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0SW5saW5lcy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXRJbmxpbmVzLmgKQEAgLTM4LDcg
KzM4LDcgQEAgaW5saW5lIGJvb2wgSXNvQ2VsbFNldDo6YWRkKEhlYXBDZWxsKiBjZWxsKQogICAg
IC8vIG5ld2x5IGFkZGVkIG9ubHkgaWYgdGhlIHByZXZpb3VzIGJpdCB3YXMgbm90IHNldC4gSGVu
Y2UsIG91ciByZXN1bHQgd2lsbCBiZSB0aGUKICAgICAvLyBpbnZlcnNlIG9mIHRoZSBjb25jdXJy
ZW50VGVzdEFuZFNldCgpIHJlc3VsdC4KICAgICBpZiAoY2VsbC0+aXNQcmVjaXNlQWxsb2NhdGlv
bigpKQotICAgICAgICByZXR1cm4gIW1fbG93ZXJUaWVyUHJlY2lzZUJpdHMuY29uY3VycmVudFRl
c3RBbmRTZXQoY2VsbC0+cHJlY2lzZUFsbG9jYXRpb24oKS5sb3dlclRpZXJQcmVjaXNlSW5kZXgo
KSk7CisgICAgICAgIHJldHVybiAhbV9sb3dlclRpZXJCaXRzLmNvbmN1cnJlbnRUZXN0QW5kU2V0
KGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCkubG93ZXJUaWVySW5kZXgoKSk7CiAgICAgQXRvbUlu
ZGljZXMgYXRvbUluZGljZXMoY2VsbCk7CiAgICAgYXV0byYgYml0c1B0clJlZiA9IG1fYml0c1th
dG9tSW5kaWNlcy5ibG9ja0luZGV4XTsKICAgICBhdXRvKiBiaXRzID0gYml0c1B0clJlZi5nZXQo
KTsKQEAgLTU0LDcgKzU0LDcgQEAgaW5saW5lIGJvb2wgSXNvQ2VsbFNldDo6cmVtb3ZlKEhlYXBD
ZWxsKiBjZWxsKQogICAgIC8vIHRoZSBiaXQgZm9yIHRoaXMgcmVtb3ZlLCB0aGUgY2VsbCB3b3Vs
ZCBiZSBuZXdseSByZW1vdmVkIG9ubHkgaWYgdGhlIHByZXZpb3VzIGJpdAogICAgIC8vIHdhcyBz
ZXQuIEhlbmNlLCBvdXIgcmVzdWx0IG1hdGNoZXMgdGhlIGNvbmN1cnJlbnRUZXN0QW5kQ2xlYXIo
KSByZXN1bHQuCiAgICAgaWYgKGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRpb24oKSkKLSAgICAgICAg
cmV0dXJuIG1fbG93ZXJUaWVyUHJlY2lzZUJpdHMuY29uY3VycmVudFRlc3RBbmRDbGVhcihjZWxs
LT5wcmVjaXNlQWxsb2NhdGlvbigpLmxvd2VyVGllclByZWNpc2VJbmRleCgpKTsKKyAgICAgICAg
cmV0dXJuIG1fbG93ZXJUaWVyQml0cy5jb25jdXJyZW50VGVzdEFuZENsZWFyKGNlbGwtPnByZWNp
c2VBbGxvY2F0aW9uKCkubG93ZXJUaWVySW5kZXgoKSk7CiAgICAgQXRvbUluZGljZXMgYXRvbUlu
ZGljZXMoY2VsbCk7CiAgICAgYXV0byYgYml0c1B0clJlZiA9IG1fYml0c1thdG9tSW5kaWNlcy5i
bG9ja0luZGV4XTsKICAgICBhdXRvKiBiaXRzID0gYml0c1B0clJlZi5nZXQoKTsKQEAgLTY2LDcg
KzY2LDcgQEAgaW5saW5lIGJvb2wgSXNvQ2VsbFNldDo6cmVtb3ZlKEhlYXBDZWxsKiBjZWxsKQog
aW5saW5lIGJvb2wgSXNvQ2VsbFNldDo6Y29udGFpbnMoSGVhcENlbGwqIGNlbGwpIGNvbnN0CiB7
CiAgICAgaWYgKGNlbGwtPmlzUHJlY2lzZUFsbG9jYXRpb24oKSkKLSAgICAgICAgcmV0dXJuICFt
X2xvd2VyVGllclByZWNpc2VCaXRzLmdldChjZWxsLT5wcmVjaXNlQWxsb2NhdGlvbigpLmxvd2Vy
VGllclByZWNpc2VJbmRleCgpKTsKKyAgICAgICAgcmV0dXJuICFtX2xvd2VyVGllckJpdHMuZ2V0
KGNlbGwtPnByZWNpc2VBbGxvY2F0aW9uKCkubG93ZXJUaWVySW5kZXgoKSk7CiAgICAgQXRvbUlu
ZGljZXMgYXRvbUluZGljZXMoY2VsbCk7CiAgICAgYXV0byogYml0cyA9IG1fYml0c1thdG9tSW5k
aWNlcy5ibG9ja0luZGV4XS5nZXQoKTsKICAgICBpZiAoYml0cykKQEAgLTk1LDcgKzk1LDcgQEAg
dm9pZCBJc29DZWxsU2V0Ojpmb3JFYWNoTWFya2VkQ2VsbChjb25zdCBGdW5jJiBmdW5jKQogICAg
IENlbGxBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMgPSBtX3N1YnNwYWNlLmF0dHJpYnV0ZXMoKTsKICAg
ICBtX3N1YnNwYWNlLmZvckVhY2hQcmVjaXNlQWxsb2NhdGlvbigKICAgICAgICAgWyZdIChQcmVj
aXNlQWxsb2NhdGlvbiogYWxsb2NhdGlvbikgewotICAgICAgICAgICAgaWYgKG1fbG93ZXJUaWVy
UHJlY2lzZUJpdHMuZ2V0KGFsbG9jYXRpb24tPmxvd2VyVGllclByZWNpc2VJbmRleCgpKSAmJiBh
bGxvY2F0aW9uLT5pc01hcmtlZCgpKQorICAgICAgICAgICAgaWYgKG1fbG93ZXJUaWVyQml0cy5n
ZXQoYWxsb2NhdGlvbi0+bG93ZXJUaWVySW5kZXgoKSkgJiYgYWxsb2NhdGlvbi0+aXNNYXJrZWQo
KSkKICAgICAgICAgICAgICAgICBmdW5jKGFsbG9jYXRpb24tPmNlbGwoKSwgYXR0cmlidXRlcy5j
ZWxsS2luZCk7CiAgICAgICAgIH0pOwogfQpAQCAtMTMxLDcgKzEzMSw3IEBAIFJlZjxTaGFyZWRU
YXNrPHZvaWQoVmlzaXRvciYpPj4gSXNvQ2VsbFNldDo6Zm9yRWFjaE1hcmtlZENlbGxJblBhcmFs
bGVsKGNvbnN0IEZ1CiAgICAgICAgICAgICBDZWxsQXR0cmlidXRlcyBhdHRyaWJ1dGVzID0gbV9z
ZXQubV9zdWJzcGFjZS5hdHRyaWJ1dGVzKCk7CiAgICAgICAgICAgICBtX3NldC5tX3N1YnNwYWNl
LmZvckVhY2hQcmVjaXNlQWxsb2NhdGlvbigKICAgICAgICAgICAgICAgICBbJl0gKFByZWNpc2VB
bGxvY2F0aW9uKiBhbGxvY2F0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3NldC5t
X2xvd2VyVGllclByZWNpc2VCaXRzLmdldChhbGxvY2F0aW9uLT5sb3dlclRpZXJQcmVjaXNlSW5k
ZXgoKSkgJiYgYWxsb2NhdGlvbi0+aXNNYXJrZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG1fc2V0Lm1fbG93ZXJUaWVyQml0cy5nZXQoYWxsb2NhdGlvbi0+bG93ZXJUaWVySW5kZXgoKSkg
JiYgYWxsb2NhdGlvbi0+aXNNYXJrZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZnVu
Yyh2aXNpdG9yLCBhbGxvY2F0aW9uLT5jZWxsKCksIGF0dHJpYnV0ZXMuY2VsbEtpbmQpOwogICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICB9CkBAIC0xNjYsMTQgKzE2NiwxNCBAQCB2b2lkIElz
b0NlbGxTZXQ6OmZvckVhY2hMaXZlQ2VsbChjb25zdCBGdW5jJiBmdW5jKQogICAgIENlbGxBdHRy
aWJ1dGVzIGF0dHJpYnV0ZXMgPSBtX3N1YnNwYWNlLmF0dHJpYnV0ZXMoKTsKICAgICBtX3N1YnNw
YWNlLmZvckVhY2hQcmVjaXNlQWxsb2NhdGlvbigKICAgICAgICAgWyZdIChQcmVjaXNlQWxsb2Nh
dGlvbiogYWxsb2NhdGlvbikgewotICAgICAgICAgICAgaWYgKG1fbG93ZXJUaWVyUHJlY2lzZUJp
dHMuZ2V0KGFsbG9jYXRpb24tPmxvd2VyVGllclByZWNpc2VJbmRleCgpKSAmJiBhbGxvY2F0aW9u
LT5pc0xpdmUoKSkKKyAgICAgICAgICAgIGlmIChtX2xvd2VyVGllckJpdHMuZ2V0KGFsbG9jYXRp
b24tPmxvd2VyVGllckluZGV4KCkpICYmIGFsbG9jYXRpb24tPmlzTGl2ZSgpKQogICAgICAgICAg
ICAgICAgIGZ1bmMoYWxsb2NhdGlvbi0+Y2VsbCgpLCBhdHRyaWJ1dGVzLmNlbGxLaW5kKTsKICAg
ICAgICAgfSk7CiB9CiAKLWlubGluZSB2b2lkIElzb0NlbGxTZXQ6OmNsZWFyTG93ZXJUaWVyUHJl
Y2lzZUNlbGwodW5zaWduZWQgaW5kZXgpCitpbmxpbmUgdm9pZCBJc29DZWxsU2V0OjpjbGVhckxv
d2VyVGllckNlbGwodW5zaWduZWQgaW5kZXgpCiB7Ci0gICAgbV9sb3dlclRpZXJQcmVjaXNlQml0
cy5jb25jdXJyZW50VGVzdEFuZENsZWFyKGluZGV4KTsKKyAgICBtX2xvd2VyVGllckJpdHMuY29u
Y3VycmVudFRlc3RBbmRDbGVhcihpbmRleCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwCmluZGV4IDQwMmU5NDQ1ZDk5
MS4uYTdhYWJmZDc2NDgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9J
c29TdWJzcGFjZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3Bh
Y2UuY3BwCkBAIC0zNiwxOSArMzYsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIFdURl9NQUtFX1Ra
T05FX0FMTE9DQVRFRF9JTVBMKElzb1N1YnNwYWNlKTsKIAotSXNvU3Vic3BhY2U6Oklzb1N1YnNw
YWNlKENTdHJpbmcgbmFtZSwgSlNDOjpIZWFwJiBoZWFwLCBjb25zdCBIZWFwQ2VsbFR5cGUmIGhl
YXBDZWxsVHlwZSwgc2l6ZV90IHNpemUsIGJvb2wgcHJlY2lzZU9ubHksIHVpbnQ4X3QgbnVtYmVy
T2ZMb3dlclRpZXJQcmVjaXNlQ2VsbHMsIHN0ZDo6dW5pcXVlX3B0cjxJc29NZW1vcnlBbGxvY2F0
b3JCYXNlPiYmIGFsbG9jYXRvcikKK0lzb1N1YnNwYWNlOjpJc29TdWJzcGFjZShDU3RyaW5nIG5h
bWUsIEpTQzo6SGVhcCYgaGVhcCwgY29uc3QgSGVhcENlbGxUeXBlJiBoZWFwQ2VsbFR5cGUsIHNp
emVfdCBzaXplLCB1aW50OF90IG51bWJlck9mTG93ZXJUaWVyQ2VsbHMsIHN0ZDo6dW5pcXVlX3B0
cjxJc29NZW1vcnlBbGxvY2F0b3JCYXNlPiYmIGFsbG9jYXRvcikKICAgICA6IFN1YnNwYWNlKG5h
bWUsIGhlYXApCiAgICAgLCBtX2RpcmVjdG9yeShXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFy
a2VkQmxvY2s6OmF0b21TaXplPihzaXplKSkKICAgICAsIG1faXNvQWxpZ25lZE1lbW9yeUFsbG9j
YXRvcihhbGxvY2F0b3IgPyBXVEZNb3ZlKGFsbG9jYXRvcikgOiBtYWtlVW5pcXVlPElzb0FsaWdu
ZWRNZW1vcnlBbGxvY2F0b3I+KG5hbWUpKQogewotICAgIGlmIChwcmVjaXNlT25seSkKLSAgICAg
ICAgbV9pc1ByZWNpc2VPbmx5ID0gdHJ1ZTsKLSAgICBlbHNlIHsKLSAgICAgICAgbV9yZW1haW5p
bmdMb3dlclRpZXJQcmVjaXNlQ291bnQgPSBudW1iZXJPZkxvd2VyVGllclByZWNpc2VDZWxsczsK
LSAgICAgICAgQVNTRVJUKFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRv
bVNpemU+KHNpemUpID09IGNlbGxTaXplKCkpOwotICAgICAgICBBU1NFUlQobV9yZW1haW5pbmdM
b3dlclRpZXJQcmVjaXNlQ291bnQgPD0gTWFya2VkQmxvY2s6Om1heE51bWJlck9mTG93ZXJUaWVy
UHJlY2lzZUNlbGxzKTsKLSAgICB9Ci0KKyAgICBtX3JlbWFpbmluZ0xvd2VyVGllckNlbGxDb3Vu
dCA9IG51bWJlck9mTG93ZXJUaWVyQ2VsbHM7CisgICAgQVNTRVJUKFdURjo6cm91bmRVcFRvTXVs
dGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KHNpemUpID09IGNlbGxTaXplKCkpOworICAg
IEFTU0VSVChudW1iZXJPZkxvd2VyVGllckNlbGxzIDw9IE1hcmtlZEJsb2NrOjptYXhOdW1iZXJP
Zkxvd2VyVGllckNlbGxzKTsKICAgICBtX2lzSXNvU3Vic3BhY2UgPSB0cnVlOwogICAgIGluaXRp
YWxpemUoaGVhcENlbGxUeXBlLCBtX2lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuZ2V0KCkpOwog
CkBAIC04NSw3ICs4MCw3IEBAIHZvaWQgSXNvU3Vic3BhY2U6OmRpZEJlZ2luU3dlZXBpbmdUb0Zy
ZWVMaXN0KE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQogICAgICAgICB9KTsKIH0KIAotdm9p
ZCogSXNvU3Vic3BhY2U6OnRyeUFsbG9jYXRlUHJlY2lzZU9yTG93ZXJUaWVyUHJlY2lzZShzaXpl
X3Qgc2l6ZSkKK3ZvaWQqIElzb1N1YnNwYWNlOjp0cnlBbGxvY2F0ZUZyb21Mb3dlclRpZXIoKQog
ewogICAgIGF1dG8gcmV2aXZlID0gWyZdIChQcmVjaXNlQWxsb2NhdGlvbiogYWxsb2NhdGlvbikg
ewogICAgICAgICBhbGxvY2F0aW9uLT5zZXRJbmRleEluU3BhY2UobV9zcGFjZS5tX3ByZWNpc2VB
bGxvY2F0aW9ucy5zaXplKCkpOwpAQCAtOTgsMzUgKzkzLDI4IEBAIHZvaWQqIElzb1N1YnNwYWNl
Ojp0cnlBbGxvY2F0ZVByZWNpc2VPckxvd2VyVGllclByZWNpc2Uoc2l6ZV90IHNpemUpCiAgICAg
ICAgIHJldHVybiBhbGxvY2F0aW9uLT5jZWxsKCk7CiAgICAgfTsKIAotICAgIGlmIChVTkxJS0VM
WShtX2lzUHJlY2lzZU9ubHkpKSB7Ci0gICAgICAgIFByZWNpc2VBbGxvY2F0aW9uKiBhbGxvY2F0
aW9uID0gUHJlY2lzZUFsbG9jYXRpb246OnRyeUNyZWF0ZShtX3NwYWNlLmhlYXAoKSwgc2l6ZSwg
dGhpcywgMCk7Ci0gICAgICAgIHJldHVybiBhbGxvY2F0aW9uID8gcmV2aXZlKGFsbG9jYXRpb24p
IDogbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGNlbGxTaXplKCkg
PT0gc2l6ZSwgIm5vbi1wcmVjaXNlT25seSBJc29TdWJzcGFjZXMgc2hvdWxkbid0IGhhdmUgdmFy
aWFibGUgc2l6ZSIpOwotICAgIGlmICghbV9sb3dlclRpZXJQcmVjaXNlRnJlZUxpc3QuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIFByZWNpc2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9uID0gJiptX2xvd2Vy
VGllclByZWNpc2VGcmVlTGlzdC5iZWdpbigpOworICAgIGlmICghbV9sb3dlclRpZXJGcmVlTGlz
dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgUHJlY2lzZUFsbG9jYXRpb24qIGFsbG9jYXRpb24gPSAm
Km1fbG93ZXJUaWVyRnJlZUxpc3QuYmVnaW4oKTsKICAgICAgICAgYWxsb2NhdGlvbi0+cmVtb3Zl
KCk7CiAgICAgICAgIHJldHVybiByZXZpdmUoYWxsb2NhdGlvbik7CiAgICAgfQotICAgIGlmICht
X3JlbWFpbmluZ0xvd2VyVGllclByZWNpc2VDb3VudCkgewotICAgICAgICBQcmVjaXNlQWxsb2Nh
dGlvbiogYWxsb2NhdGlvbiA9IFByZWNpc2VBbGxvY2F0aW9uOjp0cnlDcmVhdGVGb3JMb3dlclRp
ZXJQcmVjaXNlKG1fc3BhY2UuaGVhcCgpLCBzaXplLCB0aGlzLCAtLW1fcmVtYWluaW5nTG93ZXJU
aWVyUHJlY2lzZUNvdW50KTsKKyAgICBpZiAobV9yZW1haW5pbmdMb3dlclRpZXJDZWxsQ291bnQp
IHsKKyAgICAgICAgUHJlY2lzZUFsbG9jYXRpb24qIGFsbG9jYXRpb24gPSBQcmVjaXNlQWxsb2Nh
dGlvbjo6dHJ5Q3JlYXRlRm9yTG93ZXJUaWVyKG1fc3BhY2UuaGVhcCgpLCBjZWxsU2l6ZSgpLCB0
aGlzLCAtLW1fcmVtYWluaW5nTG93ZXJUaWVyQ2VsbENvdW50KTsKICAgICAgICAgaWYgKGFsbG9j
YXRpb24pCiAgICAgICAgICAgICByZXR1cm4gcmV2aXZlKGFsbG9jYXRpb24pOwogICAgIH0KICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBJc29TdWJzcGFjZTo6c3dlZXBMb3dlclRpZXJQ
cmVjaXNlQ2VsbChQcmVjaXNlQWxsb2NhdGlvbiogcHJlY2lzZUFsbG9jYXRpb24pCit2b2lkIElz
b1N1YnNwYWNlOjpzd2VlcExvd2VyVGllckNlbGwoUHJlY2lzZUFsbG9jYXRpb24qIHByZWNpc2VB
bGxvY2F0aW9uKQogewotICAgIEFTU0VSVCghbV9pc1ByZWNpc2VPbmx5KTsKLSAgICBwcmVjaXNl
QWxsb2NhdGlvbiA9IHByZWNpc2VBbGxvY2F0aW9uLT5yZXVzZUZvckxvd2VyVGllclByZWNpc2Uo
KTsKLSAgICBtX2xvd2VyVGllclByZWNpc2VGcmVlTGlzdC5hcHBlbmQocHJlY2lzZUFsbG9jYXRp
b24pOworICAgIHByZWNpc2VBbGxvY2F0aW9uID0gcHJlY2lzZUFsbG9jYXRpb24tPnJldXNlRm9y
TG93ZXJUaWVyKCk7CisgICAgbV9sb3dlclRpZXJGcmVlTGlzdC5hcHBlbmQocHJlY2lzZUFsbG9j
YXRpb24pOwogfQogCi12b2lkIElzb1N1YnNwYWNlOjpkZXN0cm95TG93ZXJUaWVyUHJlY2lzZUZy
ZWVMaXN0KCkKK3ZvaWQgSXNvU3Vic3BhY2U6OmRlc3Ryb3lMb3dlclRpZXJGcmVlTGlzdCgpCiB7
Ci0gICAgbV9sb3dlclRpZXJQcmVjaXNlRnJlZUxpc3QuZm9yRWFjaChbJl0oUHJlY2lzZUFsbG9j
YXRpb24qIGFsbG9jYXRpb24pIHsKKyAgICBtX2xvd2VyVGllckZyZWVMaXN0LmZvckVhY2goWyZd
KFByZWNpc2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9uKSB7CiAgICAgICAgIGFsbG9jYXRpb24tPmRl
c3Ryb3koKTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0lzb1N1YnNwYWNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFj
ZS5oCmluZGV4IDdhZWMyZGI2OTE1Ni4uMTA2YTMwNDk4YjRiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgKQEAgLTQzLDIwICs0MywyMCBAQCBjbGFzcyBJc29TdWJz
cGFjZTsKIGNsYXNzIElzb1N1YnNwYWNlIDogcHVibGljIFN1YnNwYWNlIHsKICAgICBXVEZfTUFL
RV9UWk9ORV9BTExPQ0FURURfRVhQT1JUKElzb1N1YnNwYWNlLCBKU19FWFBPUlRfUFJJVkFURSk7
CiBwdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSXNvU3Vic3BhY2UoQ1N0cmluZyBuYW1l
LCBIZWFwJiwgY29uc3QgSGVhcENlbGxUeXBlJiwgc2l6ZV90IHNpemUsIGJvb2wgcHJlY2lzZU9u
bHksIHVpbnQ4X3QgbnVtYmVyT2ZMb3dlclRpZXJQcmVjaXNlQ2VsbHMsIHN0ZDo6dW5pcXVlX3B0
cjxJc29NZW1vcnlBbGxvY2F0b3JCYXNlPiYmID0gbnVsbHB0cik7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgSXNvU3Vic3BhY2UoQ1N0cmluZyBuYW1lLCBIZWFwJiwgY29uc3QgSGVhcENlbGxUeXBl
Jiwgc2l6ZV90IHNpemUsIHVpbnQ4X3QgbnVtYmVyT2ZMb3dlclRpZXJDZWxscywgc3RkOjp1bmlx
dWVfcHRyPElzb01lbW9yeUFsbG9jYXRvckJhc2U+JiYgPSBudWxscHRyKTsKICAgICBKU19FWFBP
UlRfUFJJVkFURSB+SXNvU3Vic3BhY2UoKSBvdmVycmlkZTsKIAogICAgIHNpemVfdCBjZWxsU2l6
ZSgpIHsgcmV0dXJuIG1fZGlyZWN0b3J5LmNlbGxTaXplKCk7IH0KIAotICAgIHZvaWQgc3dlZXBM
b3dlclRpZXJQcmVjaXNlQ2VsbChQcmVjaXNlQWxsb2NhdGlvbiopOworICAgIHZvaWQgc3dlZXBM
b3dlclRpZXJDZWxsKFByZWNpc2VBbGxvY2F0aW9uKik7CiAgICAgdm9pZCBjbGVhcklzb0NlbGxT
ZXRCaXQoUHJlY2lzZUFsbG9jYXRpb24qKTsKIAotICAgIHZvaWQqIHRyeUFsbG9jYXRlUHJlY2lz
ZU9yTG93ZXJUaWVyUHJlY2lzZShzaXplX3QgY2VsbFNpemUpOwotICAgIHZvaWQgZGVzdHJveUxv
d2VyVGllclByZWNpc2VGcmVlTGlzdCgpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlRnJvbUxvd2Vy
VGllcigpOworICAgIHZvaWQgZGVzdHJveUxvd2VyVGllckZyZWVMaXN0KCk7CiAKICAgICB2b2lk
IHN3ZWVwKCk7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPiB2b2lkIGZvckVhY2hMb3dl
clRpZXJQcmVjaXNlRnJlZUxpc3RlZFByZWNpc2VBbGxvY2F0aW9uKGNvbnN0IEZ1bmMmKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPiB2b2lkIGZvckVhY2hMb3dlclRpZXJGcmVlTGlzdGVk
UHJlY2lzZUFsbG9jYXRpb24oY29uc3QgRnVuYyYpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBJc29DZWxsU2V0OwpAQCAtNjgsNyArNjgsNyBAQCBwcml2YXRlOgogCiAgICAgQmxvY2tE
aXJlY3RvcnkgbV9kaXJlY3Rvcnk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElzb01lbW9yeUFsbG9j
YXRvckJhc2U+IG1faXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKLSAgICBTZW50aW5lbExpbmtl
ZExpc3Q8UHJlY2lzZUFsbG9jYXRpb24sIEJhc2ljUmF3U2VudGluZWxOb2RlPFByZWNpc2VBbGxv
Y2F0aW9uPj4gbV9sb3dlclRpZXJQcmVjaXNlRnJlZUxpc3Q7CisgICAgU2VudGluZWxMaW5rZWRM
aXN0PFByZWNpc2VBbGxvY2F0aW9uLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxQcmVjaXNlQWxsb2Nh
dGlvbj4+IG1fbG93ZXJUaWVyRnJlZUxpc3Q7CiAgICAgU2VudGluZWxMaW5rZWRMaXN0PElzb0Nl
bGxTZXQsIEJhc2ljUmF3U2VudGluZWxOb2RlPElzb0NlbGxTZXQ+PiBtX2NlbGxTZXRzOwogfTsK
IApAQCAtMTAwLDcgKzEwMCw3IEBAIEFMV0FZU19JTkxJTkUgQWxsb2NhdG9yIElzb1N1YnNwYWNl
OjphbGxvY2F0b3JGb3Ioc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUpCiAKIH0gLy8gbmFt
ZXNwYWNlIEdDQ2xpZW50CiAKLSNkZWZpbmUgSVNPX1NVQlNQQUNFX0lOSVQoaGVhcCwgaGVhcENl
bGxUeXBlLCB0eXBlKSAoIklzb1NwYWNlICIgI3R5cGUsIChoZWFwKSwgKGhlYXBDZWxsVHlwZSks
IHNpemVvZih0eXBlKSwgdHlwZTo6dXNlUHJlY2lzZUFsbG9jYXRpb25zT25seSwgdHlwZTo6bnVt
YmVyT2ZMb3dlclRpZXJQcmVjaXNlQ2VsbHMpCisjZGVmaW5lIElTT19TVUJTUEFDRV9JTklUKGhl
YXAsIGhlYXBDZWxsVHlwZSwgdHlwZSkgKCJJc29TcGFjZSAiICN0eXBlLCAoaGVhcCksIChoZWFw
Q2VsbFR5cGUpLCBzaXplb2YodHlwZSksIHR5cGU6Om51bWJlck9mTG93ZXJUaWVyQ2VsbHMpCiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Jc29TdWJzcGFjZUlubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lz
b1N1YnNwYWNlSW5saW5lcy5oCmluZGV4IDQzZjBlYTMyNDc1ZC4uYTRkNjlhYjgwOWMxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZUlubGluZXMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZUlubGluZXMuaApAQCAt
MzgsMTAgKzM4LDEwIEBAIEFMV0FZU19JTkxJTkUgdm9pZCogSXNvU3Vic3BhY2U6OmFsbG9jYXRl
KFZNJiB2bSwgc2l6ZV90IGNlbGxTaXplLCBHQ0RlZmVycmFsQ29uCiAKIGlubGluZSB2b2lkIElz
b1N1YnNwYWNlOjpjbGVhcklzb0NlbGxTZXRCaXQoUHJlY2lzZUFsbG9jYXRpb24qIHByZWNpc2VB
bGxvY2F0aW9uKQogewotICAgIHVuc2lnbmVkIGxvd2VyVGllclByZWNpc2VJbmRleCA9IHByZWNp
c2VBbGxvY2F0aW9uLT5sb3dlclRpZXJQcmVjaXNlSW5kZXgoKTsKKyAgICB1bnNpZ25lZCBsb3dl
clRpZXJJbmRleCA9IHByZWNpc2VBbGxvY2F0aW9uLT5sb3dlclRpZXJJbmRleCgpOwogICAgIG1f
Y2VsbFNldHMuZm9yRWFjaCgKICAgICAgICAgWyZdKElzb0NlbGxTZXQqIHNldCkgewotICAgICAg
ICAgICAgc2V0LT5jbGVhckxvd2VyVGllclByZWNpc2VDZWxsKGxvd2VyVGllclByZWNpc2VJbmRl
eCk7CisgICAgICAgICAgICBzZXQtPmNsZWFyTG93ZXJUaWVyQ2VsbChsb3dlclRpZXJJbmRleCk7
CiAgICAgICAgIH0pOwogfQogCkBAIC01Niw5ICs1Niw5IEBAIGlubGluZSB2b2lkIElzb1N1YnNw
YWNlOjpzd2VlcCgpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIElzb1N1YnNw
YWNlOjpmb3JFYWNoTG93ZXJUaWVyUHJlY2lzZUZyZWVMaXN0ZWRQcmVjaXNlQWxsb2NhdGlvbihj
b25zdCBGdW5jJiBmdW5jKQordm9pZCBJc29TdWJzcGFjZTo6Zm9yRWFjaExvd2VyVGllckZyZWVM
aXN0ZWRQcmVjaXNlQWxsb2NhdGlvbihjb25zdCBGdW5jJiBmdW5jKQogewotICAgIG1fbG93ZXJU
aWVyUHJlY2lzZUZyZWVMaXN0LmZvckVhY2goZnVuYyk7CisgICAgbV9sb3dlclRpZXJGcmVlTGlz
dC5mb3JFYWNoKGZ1bmMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlUGVyVk0uY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2VQZXJWTS5jcHAKaW5kZXggOGE1NGFiMzg3N2Qx
Li5iMDUxZjI5N2QxYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lz
b1N1YnNwYWNlUGVyVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1
YnNwYWNlUGVyVk0uY3BwCkBAIC00Niw5ICs0Niw3IEBAIElzb1N1YnNwYWNlJiBJc29TdWJzcGFj
ZVBlclZNOjppc29TdWJzcGFjZWZvckhlYXAoTG9ja2VyPExvY2s+JiwgSlNDOjpIZWFwJiBoZWFw
CiAgICAgYXV0byByZXN1bHQgPSBtX3N1YnNwYWNlUGVySGVhcC5hZGQoJmhlYXAsIG51bGxwdHIp
OwogICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICBTdWJzcGFjZVBhcmFtZXRl
cnMgcGFyYW1zID0gbV9zdWJzcGFjZVBhcmFtZXRlcnMoaGVhcCk7Ci0gICAgICAgIGNvbnN0ZXhw
ciBib29sIHVzZVByZWNpc2VBbGxvY2F0aW9uc09ubHkgPSBmYWxzZTsKLSAgICAgICAgY29uc3Rl
eHByIHVpbnQ4X3QgbnVtYmVyT2ZMb3dlclRpZXJQcmVjaXNlQ2VsbHMgPSAwOwotICAgICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbmV3IElzb1N1YnNwYWNlKHBhcmFtcy5uYW1lLCBoZWFw
LCAqcGFyYW1zLmhlYXBDZWxsVHlwZSwgcGFyYW1zLnNpemUsIHVzZVByZWNpc2VBbGxvY2F0aW9u
c09ubHksIG51bWJlck9mTG93ZXJUaWVyUHJlY2lzZUNlbGxzKTsKKyAgICAgICAgcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSA9IG5ldyBJc29TdWJzcGFjZShwYXJhbXMubmFtZSwgaGVhcCwgKnBhcmFt
cy5oZWFwQ2VsbFR5cGUsIHBhcmFtcy5zaXplLCAwKTsKIAogICAgICAgICBMb2NrZXIgbG9ja2Vy
IHsgaGVhcC5sb2NrKCkgfTsKICAgICAgICAgaGVhcC5wZXJWTUlzb1N1YnNwYWNlcy5hcHBlbmQo
dGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9j
YXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAK
aW5kZXggZTMwZGNhOTk3NDUzLi4wYmNlZjY4ZjY5MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAKQEAgLTEzOCwxMiArMTM4LDEwIEBAIHZvaWQq
IExvY2FsQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKEpTQzo6SGVhcCYgaGVhcCwgc2l6ZV90
IGNlbGxTaXplLCBHQ0RlZmVyCiAKICAgICBTdWJzcGFjZSogc3Vic3BhY2UgPSBtX2RpcmVjdG9y
eS0+bV9zdWJzcGFjZTsKICAgICBpZiAoc3Vic3BhY2UtPmlzSXNvU3Vic3BhY2UoKSkgewotICAg
ICAgICBpZiAodm9pZCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8SXNvU3Vic3BhY2UqPihzdWJzcGFj
ZSktPnRyeUFsbG9jYXRlUHJlY2lzZU9yTG93ZXJUaWVyUHJlY2lzZShjZWxsU2l6ZSkpCisgICAg
ICAgIGlmICh2b2lkKiByZXN1bHQgPSBzdGF0aWNfY2FzdDxJc29TdWJzcGFjZSo+KHN1YnNwYWNl
KS0+dHJ5QWxsb2NhdGVGcm9tTG93ZXJUaWVyKCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KLQotICAgIEFTU0VSVCghc3Vic3BhY2UtPmlzUHJlY2lzZU9ubHkoKSk7Ci0gICAg
QVNTRVJUX1dJVEhfTUVTU0FHRShjZWxsU2l6ZSA9PSBtX2RpcmVjdG9yeS0+Y2VsbFNpemUoKSwg
Im5vbi1wcmVjaXNlT25seSBhbGxvY2F0aW9ucyBzaG91bGQgbWF0Y2ggYWxsb2NhdG9yJ3MgdGhl
IHNpemUgY2xhc3MiKTsKKyAgICAKICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IG1f
ZGlyZWN0b3J5LT50cnlBbGxvY2F0ZUJsb2NrKGhlYXApOwogICAgIGlmICghYmxvY2spIHsKICAg
ICAgICAgaWYgKGZhaWx1cmVNb2RlID09IEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKaW5kZXggZjg1MmRmMmIyMjY3
Li5kZDI1MDg5M2Q4YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2su
aApAQCAtODMsOCArODMsOCBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQXRvbU51bWJlclR5cGUgPSBz
dGQ6OmNvbmRpdGlvbmFsPGF0b21zUGVyQmxvY2sgPCBVSU5UMTZfTUFYLCB1aW50MTZfdCwgdWlu
dDMyX3Q+Ojp0eXBlOwogICAgIHN0YXRpY19hc3NlcnQoc3RkOjpudW1lcmljX2xpbWl0czxBdG9t
TnVtYmVyVHlwZT46Om1heCgpID49IGF0b21zUGVyQmxvY2spOwogCi0gICAgc3RhdGljIGNvbnN0
ZXhwciBzaXplX3QgbWF4TnVtYmVyT2ZMb3dlclRpZXJQcmVjaXNlQ2VsbHMgPSA4OwotICAgIHN0
YXRpY19hc3NlcnQobWF4TnVtYmVyT2ZMb3dlclRpZXJQcmVjaXNlQ2VsbHMgPD0gMjU2KTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBtYXhOdW1iZXJPZkxvd2VyVGllckNlbGxzID0gODsK
KyAgICBzdGF0aWNfYXNzZXJ0KG1heE51bWJlck9mTG93ZXJUaWVyQ2VsbHMgPD0gMjU2KTsKICAg
ICAKICAgICBzdGF0aWNfYXNzZXJ0KCEoYXRvbVNpemUgJiAoYXRvbVNpemUgLSAxKSksICJNYXJr
ZWRCbG9jazo6YXRvbVNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4iKTsKICAgICBzdGF0aWNf
YXNzZXJ0KCEoYmxvY2tTaXplICYgKGJsb2NrU2l6ZSAtIDEpKSwgIk1hcmtlZEJsb2NrOjpibG9j
a1NpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZFNwYWNlLmNwcAppbmRleCBhZGM1NDAwZGU4YWMuLmQ0NmQ0YWQyZjU2YyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcApAQCAtMTk4LDcgKzE5
OCw3IEBAIHZvaWQgTWFya2VkU3BhY2U6OmZyZWVNZW1vcnkoKQogICAgICAgICBhbGxvY2F0aW9u
LT5kZXN0cm95KCk7CiAgICAgZm9yRWFjaFN1YnNwYWNlKFsmXShTdWJzcGFjZSYgc3Vic3BhY2Up
IHsKICAgICAgICAgaWYgKHN1YnNwYWNlLmlzSXNvU3Vic3BhY2UoKSkKLSAgICAgICAgICAgIHN0
YXRpY19jYXN0PElzb1N1YnNwYWNlJj4oc3Vic3BhY2UpLmRlc3Ryb3lMb3dlclRpZXJQcmVjaXNl
RnJlZUxpc3QoKTsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PElzb1N1YnNwYWNlJj4oc3Vic3Bh
Y2UpLmRlc3Ryb3lMb3dlclRpZXJGcmVlTGlzdCgpOwogICAgICAgICByZXR1cm4gSXRlcmF0aW9u
U3RhdHVzOjpDb250aW51ZTsKICAgICB9KTsKIH0KQEAgLTIzNiw4ICsyMzYsOCBAQCB2b2lkIE1h
cmtlZFNwYWNlOjpzd2VlcFByZWNpc2VBbGxvY2F0aW9ucygpCiAgICAgICAgIGlmIChhbGxvY2F0
aW9uLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGlmIChhdXRvKiBzZXQgPSBwcmVjaXNlQWxs
b2NhdGlvblNldCgpKQogICAgICAgICAgICAgICAgIHNldC0+cmVtb3ZlKGFsbG9jYXRpb24tPmNl
bGwoKSk7Ci0gICAgICAgICAgICBpZiAoYWxsb2NhdGlvbi0+aXNMb3dlclRpZXJQcmVjaXNlKCkp
Ci0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SXNvU3Vic3BhY2UqPihhbGxvY2F0aW9uLT5z
dWJzcGFjZSgpKS0+c3dlZXBMb3dlclRpZXJQcmVjaXNlQ2VsbChhbGxvY2F0aW9uKTsKKyAgICAg
ICAgICAgIGlmIChhbGxvY2F0aW9uLT5pc0xvd2VyVGllcigpKQorICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PElzb1N1YnNwYWNlKj4oYWxsb2NhdGlvbi0+c3Vic3BhY2UoKSktPnN3ZWVwTG93
ZXJUaWVyQ2VsbChhbGxvY2F0aW9uKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
ICAgIG1fY2FwYWNpdHkgLT0gYWxsb2NhdGlvbi0+Y2VsbFNpemUoKTsKICAgICAgICAgICAgICAg
ICBhbGxvY2F0aW9uLT5kZXN0cm95KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9QcmVjaXNlQWxsb2NhdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9QcmVjaXNlQWxsb2NhdGlvbi5jcHAKaW5kZXggYzlhYmQzMWYyYThhLi4yZTg0N2I5MzVkMGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ByZWNpc2VBbGxvY2F0aW9u
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QcmVjaXNlQWxsb2NhdGlvbi5j
cHAKQEAgLTExMSw3ICsxMTEsNyBAQCBQcmVjaXNlQWxsb2NhdGlvbiogUHJlY2lzZUFsbG9jYXRp
b246OnRyeUNyZWF0ZShKU0M6OkhlYXAmIGhlYXAsIHNpemVfdCBzaXplLCBTdQogCiBQcmVjaXNl
QWxsb2NhdGlvbiogUHJlY2lzZUFsbG9jYXRpb246OnRyeVJlYWxsb2NhdGUoc2l6ZV90IHNpemUs
IFN1YnNwYWNlKiBzdWJzcGFjZSkKIHsKLSAgICBBU1NFUlQoIWlzTG93ZXJUaWVyUHJlY2lzZSgp
KTsKKyAgICBBU1NFUlQoIWlzTG93ZXJUaWVyKCkpOwogICAgIHNpemVfdCBhZGp1c3RlZEFsaWdu
bWVudEFsbG9jYXRpb25TaXplID0gaGVhZGVyU2l6ZSgpICsgc2l6ZSArIGhhbGZBbGlnbm1lbnQg
KyBjYWNoZUxpbmVBZGp1c3RtZW50OwogICAgIHN0YXRpY19hc3NlcnQoaGFsZkFsaWdubWVudCA9
PSA4LCAiV2UgYXNzdW1lIHRoYXQgbWVtb3J5IHJldHVybmVkIGJ5IG1hbGxvYyBoYXMgYWxpZ25t
ZW50ID49IDguIik7CiAKQEAgLTE1MywxMiArMTUzLDExIEBAIFByZWNpc2VBbGxvY2F0aW9uKiBQ
cmVjaXNlQWxsb2NhdGlvbjo6dHJ5UmVhbGxvY2F0ZShzaXplX3Qgc2l6ZSwgU3Vic3BhY2UqIHN1
YnNwCiB9CiAKIAotUHJlY2lzZUFsbG9jYXRpb24qIFByZWNpc2VBbGxvY2F0aW9uOjp0cnlDcmVh
dGVGb3JMb3dlclRpZXJQcmVjaXNlKEpTQzo6SGVhcCYgaGVhcCwgc2l6ZV90IHNpemUsIFN1YnNw
YWNlKiBzdWJzcGFjZSwgdWludDhfdCBsb3dlclRpZXJQcmVjaXNlSW5kZXgpCitQcmVjaXNlQWxs
b2NhdGlvbiogUHJlY2lzZUFsbG9jYXRpb246OnRyeUNyZWF0ZUZvckxvd2VyVGllcihKU0M6Okhl
YXAmIGhlYXAsIHNpemVfdCBzaXplLCBTdWJzcGFjZSogc3Vic3BhY2UsIHVpbnQ4X3QgbG93ZXJU
aWVySW5kZXgpCiB7CiAgICAgaWYgY29uc3RleHByICh2YWxpZGF0ZURGR0RvZXNHQykKICAgICAg
ICAgaGVhcC52bSgpLnZlcmlmeUNhbkdDKCk7CiAKLQogICAgIHNpemVfdCBhZGp1c3RlZEFsaWdu
bWVudEFsbG9jYXRpb25TaXplID0gaGVhZGVyU2l6ZSgpICsgc2l6ZSArIGhhbGZBbGlnbm1lbnQg
KyBjYWNoZUxpbmVBZGp1c3RtZW50OwogICAgIHN0YXRpY19hc3NlcnQoaGFsZkFsaWdubWVudCA9
PSA4LCAiV2UgYXNzdW1lIHRoYXQgbWVtb3J5IHJldHVybmVkIGJ5IG1hbGxvYyBoYXMgYWxpZ25t
ZW50ID49IDguIik7CiAKQEAgLTE4MywxNyArMTgyLDE3IEBAIFByZWNpc2VBbGxvY2F0aW9uKiBQ
cmVjaXNlQWxsb2NhdGlvbjo6dHJ5Q3JlYXRlRm9yTG93ZXJUaWVyUHJlY2lzZShKU0M6OkhlYXAm
IGhlCiAgICAgaWYgKFVOTElLRUxZKHNjcmliYmxlRnJlZUNlbGxzKCkpKQogICAgICAgICBzY3Jp
YmJsZShzcGFjZSwgc2l6ZSk7CiAgICAgUHJlY2lzZUFsbG9jYXRpb24qIHByZWNpc2VBbGxvY2F0
aW9uID0gbmV3IChOb3ROdWxsLCBzcGFjZSkgUHJlY2lzZUFsbG9jYXRpb24oaGVhcCwgc2l6ZSwg
c3Vic3BhY2UsIDAsIGFkanVzdG1lbnQpOwotICAgIHByZWNpc2VBbGxvY2F0aW9uLT5tX2xvd2Vy
VGllclByZWNpc2VJbmRleCA9IGxvd2VyVGllclByZWNpc2VJbmRleDsKKyAgICBwcmVjaXNlQWxs
b2NhdGlvbi0+bV9sb3dlclRpZXJJbmRleCA9IGxvd2VyVGllckluZGV4OwogICAgIHJldHVybiBw
cmVjaXNlQWxsb2NhdGlvbjsKIH0KIAotUHJlY2lzZUFsbG9jYXRpb24qIFByZWNpc2VBbGxvY2F0
aW9uOjpyZXVzZUZvckxvd2VyVGllclByZWNpc2UoKQorUHJlY2lzZUFsbG9jYXRpb24qIFByZWNp
c2VBbGxvY2F0aW9uOjpyZXVzZUZvckxvd2VyVGllcigpCiB7CiAgICAgSlNDOjpIZWFwJiBoZWFw
ID0gKnRoaXMtPmhlYXAoKTsKICAgICBzaXplX3Qgc2l6ZSA9IG1fY2VsbFNpemU7CiAgICAgU3Vi
c3BhY2UqIHN1YnNwYWNlID0gbV9zdWJzcGFjZTsKICAgICB1bnNpZ25lZCBhZGp1c3RtZW50ID0g
bV9hZGp1c3RtZW50OwotICAgIHVpbnQ4X3QgbG93ZXJUaWVyUHJlY2lzZUluZGV4ID0gbV9sb3dl
clRpZXJQcmVjaXNlSW5kZXg7CisgICAgdWludDhfdCBsb3dlclRpZXJJbmRleCA9IG1fbG93ZXJU
aWVySW5kZXg7CiAgICAgdm9pZCogYmFzZVBvaW50ZXIgPSB0aGlzLT5iYXNlUG9pbnRlcigpOwog
CiAgICAgdGhpcy0+flByZWNpc2VBbGxvY2F0aW9uKCk7CkBAIC0yMDEsNyArMjAwLDcgQEAgUHJl
Y2lzZUFsbG9jYXRpb24qIFByZWNpc2VBbGxvY2F0aW9uOjpyZXVzZUZvckxvd2VyVGllclByZWNp
c2UoKQogICAgIHZvaWQqIHNwYWNlID0gYml0d2lzZV9jYXN0PHZvaWQqPihiaXR3aXNlX2Nhc3Q8
dWludHB0cl90PihiYXNlUG9pbnRlcikgKyBhZGp1c3RtZW50KTsKIAogICAgIFByZWNpc2VBbGxv
Y2F0aW9uKiBwcmVjaXNlQWxsb2NhdGlvbiA9IG5ldyAoTm90TnVsbCwgc3BhY2UpIFByZWNpc2VB
bGxvY2F0aW9uKGhlYXAsIHNpemUsIHN1YnNwYWNlLCAwLCBhZGp1c3RtZW50KTsKLSAgICBwcmVj
aXNlQWxsb2NhdGlvbi0+bV9sb3dlclRpZXJQcmVjaXNlSW5kZXggPSBsb3dlclRpZXJQcmVjaXNl
SW5kZXg7CisgICAgcHJlY2lzZUFsbG9jYXRpb24tPm1fbG93ZXJUaWVySW5kZXggPSBsb3dlclRp
ZXJJbmRleDsKICAgICBwcmVjaXNlQWxsb2NhdGlvbi0+bV9oYXNWYWxpZENlbGwgPSBmYWxzZTsK
ICAgICByZXR1cm4gcHJlY2lzZUFsbG9jYXRpb247CiB9CkBAIC0yNzQsNyArMjczLDcgQEAgdm9p
ZCBQcmVjaXNlQWxsb2NhdGlvbjo6c3dlZXAoKQogICAgICAgICAgICAgbV9zdWJzcGFjZS0+ZGVz
dHJveSh2bSgpLCBzdGF0aWNfY2FzdDxKU0NlbGwqPihjZWxsKCkpKTsKICAgICAgICAgLy8gV2Ug
c2hvdWxkIGNsZWFyIElzb0NlbGxTZXQncyBiaXQgYmVmb3JlIGFjdHVhbGx5IGRlc3Ryb3lpbmcg
UHJlY2lzZUFsbG9jYXRpb24KICAgICAgICAgLy8gc2luY2UgUHJlY2lzZUFsbG9jYXRpb24ncyBk
ZXN0cnVjdGlvbiBjYW4gYmUgZGVsYXllZCB1bnRpbCBpdHMgV2Vha1NldCBpcyBjbGVhcmVkLgot
ICAgICAgICBpZiAoaXNMb3dlclRpZXJQcmVjaXNlKCkpCisgICAgICAgIGlmIChpc0xvd2VyVGll
cigpKQogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SXNvU3Vic3BhY2UqPihtX3N1YnNwYWNlKS0+
Y2xlYXJJc29DZWxsU2V0Qml0KHRoaXMpOwogICAgICAgICBtX2hhc1ZhbGlkQ2VsbCA9IGZhbHNl
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1ByZWNpc2VB
bGxvY2F0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9QcmVjaXNlQWxsb2NhdGlv
bi5oCmluZGV4IGZlNWFjYTczNTgwNi4uYjRlMjJkMzNlYTdlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9QcmVjaXNlQWxsb2NhdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1ByZWNpc2VBbGxvY2F0aW9uLmgKQEAgLTQ1LDkgKzQ1LDkgQEAgcHVi
bGljOgogICAgIGZyaWVuZCBjbGFzcyBJc29TdWJzcGFjZTsKIAogICAgIHN0YXRpYyBQcmVjaXNl
QWxsb2NhdGlvbiogdHJ5Q3JlYXRlKEhlYXAmLCBzaXplX3QsIFN1YnNwYWNlKiwgdW5zaWduZWQg
aW5kZXhJblNwYWNlKTsKLSAgICBzdGF0aWMgUHJlY2lzZUFsbG9jYXRpb24qIHRyeUNyZWF0ZUZv
ckxvd2VyVGllclByZWNpc2UoSGVhcCYsIHNpemVfdCwgU3Vic3BhY2UqLCB1aW50OF90IGxvd2Vy
VGllclByZWNpc2VJbmRleCk7CiAKLSAgICBQcmVjaXNlQWxsb2NhdGlvbiogcmV1c2VGb3JMb3dl
clRpZXJQcmVjaXNlKCk7CisgICAgc3RhdGljIFByZWNpc2VBbGxvY2F0aW9uKiB0cnlDcmVhdGVG
b3JMb3dlclRpZXIoSGVhcCYsIHNpemVfdCwgU3Vic3BhY2UqLCB1aW50OF90IGxvd2VyVGllcklu
ZGV4KTsKKyAgICBQcmVjaXNlQWxsb2NhdGlvbiogcmV1c2VGb3JMb3dlclRpZXIoKTsKIAogICAg
IFByZWNpc2VBbGxvY2F0aW9uKiB0cnlSZWFsbG9jYXRlKHNpemVfdCwgU3Vic3BhY2UqKTsKICAg
ICAKQEAgLTk3LDYgKzk3LDggQEAgcHVibGljOgogICAgIAogICAgIHNpemVfdCBjZWxsU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY2VsbFNpemU7IH0KIAorICAgIHVpbnQ4X3QgbG93ZXJUaWVySW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX2xvd2VyVGllckluZGV4OyB9CisgICAgCiAgICAgYm9vbCBh
Ym92ZUxvd2VyQm91bmQoY29uc3Qgdm9pZCogcmF3UHRyKQogICAgIHsKICAgICAgICAgY2hhciog
cHRyID0gYml0d2lzZV9jYXN0PGNoYXIqPihyYXdQdHIpOwpAQCAtMTUwLDkgKzE1Miw4IEBAIHB1
YmxpYzoKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAotICAgIGJv
b2wgaXNMb3dlclRpZXJQcmVjaXNlKCkgY29uc3QgeyByZXR1cm4gbV9sb3dlclRpZXJQcmVjaXNl
SW5kZXggIT0gVUlOVDhfTUFYOyB9Ci0gICAgdWludDhfdCBsb3dlclRpZXJQcmVjaXNlSW5kZXgo
KSBjb25zdCB7IHJldHVybiBtX2xvd2VyVGllclByZWNpc2VJbmRleDsgfQotCisgICAgYm9vbCBp
c0xvd2VyVGllcigpIGNvbnN0IHsgcmV0dXJuIG1fbG93ZXJUaWVySW5kZXggIT0gVUlOVDhfTUFY
OyB9CisgICAgCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBhbGlnbm1lbnQgPSBNYXJr
ZWRCbG9jazo6YXRvbVNpemU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBoYWxmQWxp
Z25tZW50ID0gYWxpZ25tZW50IC8gMjsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNh
Y2hlTGluZUFkanVzdG1lbnQgPSAyICogaGFsZkFsaWdubWVudDsKQEAgLTE3Nyw3ICsxNzgsNyBA
QCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fYWRqdXN0bWVudCA6IDU7CiAgICAgQXRvbWljPGJv
b2w+IG1faXNNYXJrZWQ7CiAgICAgQ2VsbEF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOwotICAgIHVp
bnQ4X3QgbV9sb3dlclRpZXJQcmVjaXNlSW5kZXggeyBVSU5UOF9NQVggfTsKKyAgICB1aW50OF90
IG1fbG93ZXJUaWVySW5kZXggeyBVSU5UOF9NQVggfTsKICAgICBTdWJzcGFjZSogbV9zdWJzcGFj
ZTsKICAgICBXZWFrU2V0IG1fd2Vha1NldDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vi
c3BhY2UuaAppbmRleCAzODBjOGIyOWRmOTcuLjkyYmEyZWJjYTE4NCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TdWJzcGFjZS5oCkBAIC05OSw3ICs5OSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QoTWFya2VkQmxvY2s6OkhhbmRsZSop
OwogCiAgICAgYm9vbCBpc0lzb1N1YnNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9pc0lzb1N1YnNw
YWNlOyB9Ci0gICAgYm9vbCBpc1ByZWNpc2VPbmx5KCkgY29uc3QgeyByZXR1cm4gbV9pc1ByZWNp
c2VPbmx5OyB9CiAKIHByb3RlY3RlZDoKICAgICBTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAm
KTsKQEAgLTExNiw4ICsxMTUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgU2VudGluZWxMaW5rZWRMaXN0
PFByZWNpc2VBbGxvY2F0aW9uLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxQcmVjaXNlQWxsb2NhdGlv
bj4+IG1fcHJlY2lzZUFsbG9jYXRpb25zOwogCiAgICAgYm9vbCBtX2lzSXNvU3Vic3BhY2UgeyBm
YWxzZSB9OwotICAgIGJvb2wgbV9pc1ByZWNpc2VPbmx5IHsgZmFsc2UgfTsKLSAgICB1aW50OF90
IG1fcmVtYWluaW5nTG93ZXJUaWVyUHJlY2lzZUNvdW50IHsgMCB9OyAvLyBMb3dlciB0aWVyIGlz
IGEgcHJlY2lzZSBhbGxvY2F0aW9uIGJ1dCB3ZSB1c2UgdGhlIHRlcm0gbG93ZXIgdG8gYXZvaWQg
Y29uZnVzaW9uIHdpdGggcHJlY2lzZS1vbmx5LgorICAgIHVpbnQ4X3QgbV9yZW1haW5pbmdMb3dl
clRpZXJDZWxsQ291bnQgeyAwIH07CiAKICAgICBTdWJzcGFjZSogbV9uZXh0U3Vic3BhY2VJbkFs
aWduZWRNZW1vcnlBbGxvY2F0b3IgeyBudWxscHRyIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKaW5kZXggMmJiZDk0NGI5ZjQ2Li41YzBm
ODVhMjU2MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
YWxsRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxs
RnJhbWUuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDI0
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDIyIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIlZNRW50cnlSZWNvcmQuaCIK
ICNpbmNsdWRlICJWTUVudHJ5U2NvcGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHQu
aCIKKyNpbmNsdWRlICJXYXNtSW5zdGFuY2UuaCIKICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRT
dHJlYW0uaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0yODYsNyArMjg3LDcgQEAgdm9pZCBDYWxs
RnJhbWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAgICAgICAgICAgICBhdXRvKiB3YXNtQ2FsbGVlID0gc3RhdGljX2Nhc3Q8V2FzbTo6Q2Fs
bGVlKj4obmF0aXZlQ2FsbGVlKTsKICAgICAgICAgICAgIG91dC5wcmludChXYXNtOjptYWtlU3Ry
aW5nKHdhc21DYWxsZWUtPmluZGV4T3JOYW1lKCkpLCAiIFsiLCBXYXNtOjptYWtlU3RyaW5nKHdh
c21DYWxsZWUtPmNvbXBpbGF0aW9uTW9kZSgpKSwgIl0iKTsKLSAgICAgICAgICAgIG91dC5wcmlu
dCgiKEpTV2ViQXNzZW1ibHlJbnN0YW5jZTogIiwgUmF3UG9pbnRlcih3YXNtSW5zdGFuY2UoKSks
ICIpIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIihXYXNtOjpJbnN0YW5jZTogIiwgUmF3UG9p
bnRlcih3YXNtSW5zdGFuY2UoKSksICIpIik7CiAjZWxzZQogICAgICAgICAgICAgb3V0LnByaW50
KFJhd1BvaW50ZXIocmV0dXJuUENGb3JJbnNwZWN0aW9uKCkpKTsKICNlbmRpZgpAQCAtMzg1LDcg
KzM4Niw3IEBAIEpTQ2VsbCogQ2FsbEZyYW1lOjpjb2RlT3duZXJDZWxsU2xvdygpIGNvbnN0CiAg
ICAgc3dpdGNoIChuYXRpdmVDYWxsZWUtPmNhdGVnb3J5KCkpIHsKICAgICBjYXNlIE5hdGl2ZUNh
bGxlZTo6Q2F0ZWdvcnk6Oldhc206IHsKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgICAg
IHJldHVybiB3YXNtSW5zdGFuY2UoKS0+anNNb2R1bGUoKTsKKyAgICAgICAgcmV0dXJuIGpzQ2Fz
dDxKU1dlYkFzc2VtYmx5SW5zdGFuY2UqPih3YXNtSW5zdGFuY2UoKS0+b3duZXIoKSktPm1vZHVs
ZSgpOwogI2Vsc2UKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAjZW5kaWYKQEAgLTQxMCwxMyAr
NDExLDQgQEAgYm9vbCBpc0Zyb21KU0NvZGUodm9pZCogcmV0dXJuQWRkcmVzcykKICNlbmRpZgog
fQogCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotSlNXZWJBc3NlbWJseUluc3RhbmNlKiBDYWxs
RnJhbWU6Ondhc21JbnN0YW5jZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGNhbGxlZSgpLmlzTmF0
aXZlQ2FsbGVlKCkpOwotICAgIHJldHVybiBqc0Nhc3Q8SlNXZWJBc3NlbWJseUluc3RhbmNlKj4o
dGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayldLmpzVmFsdWUo
KSk7Ci19Ci0jZW5kaWYKLQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAppbmRleCA0ZjJmY2U5MWVjYzIuLjMyMGQz
MzFkMmE1MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Nh
bGxGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJh
bWUuaApAQCAtMzEsOCArMzEsOSBAQAogI2luY2x1ZGUgPHd0Zi9FbnVtQ2xhc3NPcGVyYXRvck92
ZXJsb2Fkcy5oPgogCiBuYW1lc3BhY2UgSlNDICB7Ci0KLWNsYXNzIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTsKK25hbWVzcGFjZSBXYXNtIHsKK2NsYXNzIEluc3RhbmNlOworfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZT4gc3RydWN0IEJhc2VJbnN0cnVjdGlvbjsKIHN0cnVjdCBKU09wY29kZVRyYWl0czsK
QEAgLTIyMCw3ICsyMjEsNyBAQCB1c2luZyBKU0luc3RydWN0aW9uID0gQmFzZUluc3RydWN0aW9u
PEpTT3Bjb2RlVHJhaXRzPjsKICAgICAgICAgdm9pZCBzZXRDYWxsU2l0ZUluZGV4KENhbGxTaXRl
SW5kZXgpOwogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgICAgICBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqIHdhc21JbnN0YW5jZSgpIGNvbnN0OworICAgICAgICBXYXNtOjpJbnN0YW5jZSog
d2FzbUluc3RhbmNlKCkgY29uc3Q7CiAjZW5kaWYKIAogICAgICAgICBKU0NlbGwqIGNvZGVPd25l
ckNlbGwoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9DYWxsRnJhbWVJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lSW5saW5lcy5oCmluZGV4IGU4Y2ZiOWQ5ZWY3MS4uYjNkYjkwMTIyMGMzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5s
aW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVJ
bmxpbmVzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC03NCw2ICs3NCwxNCBAQCBpbmxpbmUgSlNHbG9iYWxPYmplY3QqIENhbGxG
cmFtZTo6bGV4aWNhbEdsb2JhbE9iamVjdChWTSYgdm0pIGNvbnN0CiAgICAgcmV0dXJuIGpzQ2Fs
bGVlKCktPmdsb2JhbE9iamVjdCgpOwogfQogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQoraW5s
aW5lIFdhc206Okluc3RhbmNlKiBDYWxsRnJhbWU6Ondhc21JbnN0YW5jZSgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKGNhbGxlZSgpLmlzTmF0aXZlQ2FsbGVlKCkpOworICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8V2FzbTo6SW5zdGFuY2UqPihjb25zdF9jYXN0PENhbGxGcmFtZSo+KHRoaXMpLT51bmNo
ZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykuYXNhblVuc2FmZVBvaW50ZXIoKSk7Cit9
CisjZW5kaWYKKwogaW5saW5lIEpTQ2VsbCogQ2FsbEZyYW1lOjpjb2RlT3duZXJDZWxsKCkgY29u
c3QKIHsKICAgICBpZiAoY2FsbGVlKCkuaXNOYXRpdmVDYWxsZWUoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCmluZGV4IDc1OGJhZDNl
M2FjNi4uMjg2ZjI4NzkzYWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAKQEAgLTcwNCw3ICs3MDQsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgaWYgKG1fY2F0Y2hhYmxlRnJvbVdhc20pIHsKICAgICAgICAgICAgICAgICAg
ICAgYXV0byogd2FzbUNhbGxlZSA9IHN0YXRpY19jYXN0PFdhc206OkNhbGxlZSo+KG5hdGl2ZUNh
bGxlZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh3YXNtQ2FsbGVlLT5oYXNFeGNlcHRpb25I
YW5kbGVycygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqIGluc3RhbmNlID0gbV9jYWxsRnJhbWUtPndhc21JbnN0YW5jZSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgV2FzbTo6SW5zdGFuY2UqIGluc3RhbmNlID0gbV9jYWxsRnJhbWUtPndhc21J
bnN0YW5jZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZXhjZXB0aW9uSGFu
ZGxlckluZGV4ID0gbV9jYWxsRnJhbWUtPmNhbGxTaXRlSW5kZXgoKS5iaXRzKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2hhbmRsZXIgPSB7IHdhc21DYWxsZWUtPmhhbmRsZXJGb3JJbmRl
eCgqaW5zdGFuY2UsIGV4Y2VwdGlvbkhhbmRsZXJJbmRleCwgbV93YXNtVGFnKSwgd2FzbUNhbGxl
ZSB9OwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1faGFuZGxlci5tX3ZhbGlkKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1Byb3RvQ2FsbEZyYW1l
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUHJvdG9DYWxsRnJhbWUuaApp
bmRleCAzNWFiN2M3YzIwZDkuLjVmMDUyN2YxMjM0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1Byb3RvQ2FsbEZyYW1lLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1Byb3RvQ2FsbEZyYW1lLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjQgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjMgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxMCArMzAsNiBA
QAogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcmJpZEhlYXBB
bGxvY2F0aW9uLmg+CiAKLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0jaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUluc3RhbmNlLmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIEpTQyB7CiAKIHN0cnVjdCBK
U19FWFBPUlRfUFJJVkFURSBQcm90b0NhbGxGcmFtZSB7CkBAIC03Myw5ICs2OSw5IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldFRoaXNWYWx1ZShKU1ZhbHVlIHZhbHVlKSB7IHRoaXNBcmcgPSB2YWx1
ZTsgfQogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIHZvaWQgc2V0V2FzbUluc3RhbmNl
KEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCisgICAgdm9pZCBzZXRXYXNtSW5zdGFu
Y2UoV2FzbTo6SW5zdGFuY2UqIGluc3RhbmNlKQogICAgIHsKLSAgICAgICAgY29kZUJsb2NrVmFs
dWUgPSBpbnN0YW5jZTsKKyAgICAgICAgY29kZUJsb2NrVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8Q2Fs
bEZyYW1lKj4oaW5zdGFuY2UpOwogICAgIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKaW5kZXggMjc1OTVhYWU5ZjAyLi5lOTQwODdh
MzI0OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5j
cHAKQEAgLTQ0LDkgKzQ0LDkgQEAKICNpbmNsdWRlIDx3dGYvVFpvbmVNYWxsb2NJbmxpbmVzLmg+
CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3Rh
bmNlLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5SW5m
b3JtYXRpb24uaCIKKyNpbmNsdWRlICJXYXNtSW5zdGFuY2UuaCIKICNlbmRpZgogCiBuYW1lc3Bh
Y2UgSlNDIHsKQEAgLTE0ODAsNyArMTQ4MCw3IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpwcmVw
YXJlV2FzbUNhbGxPcGVyYXRpb24oR1BSUmVnIGluc3RhbmNlR1BSKQogewogICAgIFVOVVNFRF9Q
QVJBTShpbnN0YW5jZUdQUik7CiAjaWYgIVVTRShCVUlMVElOX0ZSQU1FX0FERFJFU1MpIHx8IEFT
U0VSVF9FTkFCTEVECi0gICAgc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEFk
ZHJlc3MoaW5zdGFuY2VHUFIsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZUZW1wb3Jh
cnlDYWxsRnJhbWUoKSkpOworICAgIHN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBBZGRyZXNzKGluc3RhbmNlR1BSLCBXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0T2ZUZW1wb3JhcnlD
YWxsRnJhbWUoKSkpOwogI2VuZGlmCiB9CiAKQEAgLTIwMTYsMjEgKzIwMTYsMjEgQEAgdm9pZCBB
c3NlbWJseUhlbHBlcnM6OmxvYWRUeXBlZEFycmF5TGVuZ3RoKEdQUlJlZyBiYXNlR1BSLCBHUFJS
ZWcgdmFsdWVHUFIsIEdQUlIKIEFzc2VtYmx5SGVscGVyczo6SnVtcExpc3QgQXNzZW1ibHlIZWxw
ZXJzOjpjaGVja1dhc21TdGFja092ZXJmbG93KEdQUlJlZyBpbnN0YW5jZUdQUiwgVHJ1c3RlZElt
bTMyIGNoZWNrU2l6ZSwgR1BSUmVnIGZyYW1lUG9pbnRlckdQUikKIHsKICNpZiBDUFUoQVJNNjQp
Ci0gICAgbG9hZFB0cihBZGRyZXNzKGluc3RhbmNlR1BSLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
Om9mZnNldE9mU29mdFN0YWNrTGltaXQoKSksIGdldENhY2hlZE1lbW9yeVRlbXBSZWdpc3RlcklE
QW5kSW52YWxpZGF0ZSgpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoaW5zdGFuY2VHUFIsIFdhc206
Okluc3RhbmNlOjpvZmZzZXRPZlNvZnRTdGFja0xpbWl0KCkpLCBnZXRDYWNoZWRNZW1vcnlUZW1w
UmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKSk7CiAgICAgSnVtcExpc3Qgb3ZlcmZsb3c7CiAgICAg
Ly8gQmVjYXVzZSBhZGRyZXNzIGlzIHdpdGhpbiA0OGJpdCwgdGhpcyBhZGRpdGlvbiBuZXZlciBj
YXVzZXMgb3ZlcmZsb3cuCiAgICAgYWRkUHRyKGNoZWNrU2l6ZSwgbWVtb3J5VGVtcFJlZ2lzdGVy
KTsgLy8gVHJ1c3RlZEltbTMyIHdvdWxkIHVzZSBkYXRhVGVtcFJlZ2lzdGVyLiBUaHVzIGxldCdz
IGhhdmUgbGltaXQgaW4gbWVtb3J5VGVtcFJlZ2lzdGVyLgogICAgIG92ZXJmbG93LmFwcGVuZChi
cmFuY2hQdHIoQmVsb3csIGZyYW1lUG9pbnRlckdQUiwgbWVtb3J5VGVtcFJlZ2lzdGVyKSk7CiAg
ICAgcmV0dXJuIG92ZXJmbG93OwogI2VsaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTSkKLSAgICBs
b2FkUHRyKEFkZHJlc3MoaW5zdGFuY2VHUFIsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0
T2ZTb2Z0U3RhY2tMaW1pdCgpKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOworICAgIGxvYWRQdHIoQWRk
cmVzcyhpbnN0YW5jZUdQUiwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mU29mdFN0YWNrTGltaXQo
KSksIHNjcmF0Y2hSZWdpc3RlcigpKTsKICAgICBKdW1wTGlzdCBvdmVyZmxvdzsKICAgICAvLyBC
ZWNhdXNlIGFkZHJlc3MgaXMgd2l0aGluIDQ4Yml0LCB0aGlzIGFkZGl0aW9uIG5ldmVyIGNhdXNl
cyBvdmVyZmxvdy4KICAgICBhZGRQdHIoY2hlY2tTaXplLCBzY3JhdGNoUmVnaXN0ZXIoKSk7CiAg
ICAgb3ZlcmZsb3cuYXBwZW5kKGJyYW5jaFB0cihCZWxvdywgZnJhbWVQb2ludGVyR1BSLCBzY3Jh
dGNoUmVnaXN0ZXIoKSkpOwogICAgIHJldHVybiBvdmVyZmxvdzsKICNlbGlmIENQVShSSVNDVjY0
KQotICAgIGxvYWRQdHIoQWRkcmVzcyhpbnN0YW5jZUdQUiwgSlNXZWJBc3NlbWJseUluc3RhbmNl
OjpvZmZzZXRPZlNvZnRTdGFja0xpbWl0KCkpLCBtZW1vcnlUZW1wUmVnaXN0ZXIpOworICAgIGxv
YWRQdHIoQWRkcmVzcyhpbnN0YW5jZUdQUiwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mU29mdFN0
YWNrTGltaXQoKSksIG1lbW9yeVRlbXBSZWdpc3Rlcik7CiAgICAgSnVtcExpc3Qgb3ZlcmZsb3c7
CiAgICAgLy8gQmVjYXVzZSBhZGRyZXNzIGlzIHdpdGhpbiA0OGJpdCwgdGhpcyBhZGRpdGlvbiBu
ZXZlciBjYXVzZXMgb3ZlcmZsb3cuCiAgICAgYWRkUHRyKGNoZWNrU2l6ZSwgbWVtb3J5VGVtcFJl
Z2lzdGVyKTsgLy8gVHJ1c3RlZEltbTMyIHdvdWxkIHVzZSBkYXRhVGVtcFJlZ2lzdGVyLiBUaHVz
IGxldCdzIGhhdmUgbGltaXQgaW4gbWVtb3J5VGVtcFJlZ2lzdGVyLgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENvZGUuaAppbmRleCBiMzAzNTNhNGQ0YjMuLmJkMDc3NWQ0N2Q0OSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKQEAgLTIwMiw3ICsyMDIsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBpc0xvd2VyVGllclByZWNpc2UoSklUVHlw
ZSBleHBlY3RlZExvd2VyLCBKSVRUeXBlIGV4cGVjdGVkSGlnaGVyKQorICAgIHN0YXRpYyBib29s
IGlzTG93ZXJUaWVyKEpJVFR5cGUgZXhwZWN0ZWRMb3dlciwgSklUVHlwZSBleHBlY3RlZEhpZ2hl
cikKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzRXhlY3V0YWJsZVNjcmlwdChleHBl
Y3RlZExvd2VyKSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzRXhlY3V0YWJsZVNjcmlwdChl
eHBlY3RlZEhpZ2hlcikpOwpAQCAtMjExLDcgKzIxMSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBz
dGF0aWMgYm9vbCBpc0hpZ2hlclRpZXIoSklUVHlwZSBleHBlY3RlZEhpZ2hlciwgSklUVHlwZSBl
eHBlY3RlZExvd2VyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGlzTG93ZXJUaWVyUHJlY2lzZShl
eHBlY3RlZExvd2VyLCBleHBlY3RlZEhpZ2hlcik7CisgICAgICAgIHJldHVybiBpc0xvd2VyVGll
cihleHBlY3RlZExvd2VyLCBleHBlY3RlZEhpZ2hlcik7CiAgICAgfQogICAgIAogICAgIHN0YXRp
YyBib29sIGlzTG93ZXJPclNhbWVUaWVyKEpJVFR5cGUgZXhwZWN0ZWRMb3dlciwgSklUVHlwZSBl
eHBlY3RlZEhpZ2hlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggMTJlMDBiNjdhMTZhLi45ZmU3
OWY3YmExMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBAIC0yNTgyLDkgKzI1ODIsOSBAQCBKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJBZ2VudFJlY2VpdmVCcm9hZGNhc3Qs
IChKU0dsb2JhbE9iamVjdCogZwogICAgICAgICAgICAgYXV0byBoYW5kbGVyID0gWyZ2bSwganNN
ZW1vcnldKFdhc206Ok1lbW9yeTo6R3Jvd1N1Y2Nlc3MsIFBhZ2VDb3VudCBvbGRQYWdlQ291bnQs
IFBhZ2VDb3VudCBuZXdQYWdlQ291bnQpIHsganNNZW1vcnktPmdyb3dTdWNjZXNzQ2FsbGJhY2so
dm0sIG9sZFBhZ2VDb3VudCwgbmV3UGFnZUNvdW50KTsgfTsKICAgICAgICAgICAgIFJlZlB0cjxX
YXNtOjpNZW1vcnk+IG1lbW9yeTsKICAgICAgICAgICAgIGlmIChhdXRvIHNoYXJlZCA9IHN0ZDo6
Z2V0PFJlZlB0cjxTaGFyZWRBcnJheUJ1ZmZlckNvbnRlbnRzPj4oV1RGTW92ZShjb250ZW50KSkp
Ci0gICAgICAgICAgICAgICAgbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUodm0sIHNoYXJl
ZC5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKGhhbmRsZXIpKTsKKyAgICAgICAgICAgICAgICBt
ZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZShzaGFyZWQucmVsZWFzZU5vbk51bGwoKSwgV1RG
TW92ZShoYW5kbGVyKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbWVtb3J5
ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGVaZXJvU2l6ZWQodm0sIE1lbW9yeVNoYXJpbmdNb2RlOjpT
aGFyZWQsIFdURk1vdmUoaGFuZGxlcikpOworICAgICAgICAgICAgICAgIG1lbW9yeSA9IFdhc206
Ok1lbW9yeTo6Y3JlYXRlWmVyb1NpemVkKE1lbW9yeVNoYXJpbmdNb2RlOjpTaGFyZWQsIFdURk1v
dmUoaGFuZGxlcikpOwogICAgICAgICAgICAganNNZW1vcnktPmFkb3B0KG1lbW9yeS5yZWxlYXNl
Tm9uTnVsbCgpKTsKICAgICAgICAgICAgIHJldHVybiBqc01lbW9yeTsKICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0luUGxhY2VJbnRlcnByZXRlci5h
c20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvSW5QbGFjZUludGVycHJldGVyLmFzbQpp
bmRleCAxYzdkNDRkODJlYTIuLmEzYjIyYTllYTZiOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0luUGxhY2VJbnRlcnByZXRlci5hc20KKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0luUGxhY2VJbnRlcnByZXRlci5hc20KQEAgLTEsMjYgKzEsMyBAQAot
IyBDb3B5cmlnaHQgKEMpIDIwMjMtMjAyNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0jIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0jIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCiAjCiAjIElQSW50OiB0
aGUgV0FTTSBpbi1wbGFjZSBpbnRlcnByZXRlcgogIyBESVNDTEFJTUVSOiBub3QgdGVzdGVkIG9u
IHg4NiB5ZXQgKGFzIG9mIDA1IEp1bCAyMDIzKTsgSVBJbnQgbWF5IGJyZWFrICp2ZXJ5KiBiYWRs
eS4KQEAgLTIzMSwxMCArMjA4LDEwIEBAIGVuZAogCiBtYWNybyBpcGludFJlbG9hZE1lbW9yeSgp
CiAgICAgaWYgQVJNNjQgb3IgQVJNNjRFCi0gICAgICAgIGxvYWRwYWlycSBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6Om1fY2FjaGVkTWVtb3J5W3dhc21JbnN0YW5jZV0sIG1lbW9yeUJhc2UsIGJvdW5k
c0NoZWNraW5nU2l6ZQorICAgICAgICBsb2FkcGFpcnEgV2FzbTo6SW5zdGFuY2U6Om1fY2FjaGVk
TWVtb3J5W3dhc21JbnN0YW5jZV0sIG1lbW9yeUJhc2UsIGJvdW5kc0NoZWNraW5nU2l6ZQogICAg
IGVsc2lmIFg4Nl82NAotICAgICAgICBsb2FkcCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om1fY2Fj
aGVkTWVtb3J5W3dhc21JbnN0YW5jZV0sIG1lbW9yeUJhc2UKLSAgICAgICAgbG9hZHAgSlNXZWJB
c3NlbWJseUluc3RhbmNlOjptX2NhY2hlZEJvdW5kc0NoZWNraW5nU2l6ZVt3YXNtSW5zdGFuY2Vd
LCBib3VuZHNDaGVja2luZ1NpemUKKyAgICAgICAgbG9hZHAgV2FzbTo6SW5zdGFuY2U6Om1fY2Fj
aGVkTWVtb3J5W3dhc21JbnN0YW5jZV0sIG1lbW9yeUJhc2UKKyAgICAgICAgbG9hZHAgV2FzbTo6
SW5zdGFuY2U6Om1fY2FjaGVkQm91bmRzQ2hlY2tpbmdTaXplW3dhc21JbnN0YW5jZV0sIGJvdW5k
c0NoZWNraW5nU2l6ZQogICAgIGVuZAogICAgIGlmIG5vdCBBUk12NwogICAgICAgICBjYWdlZFBy
aW1pdGl2ZU1heUJlTnVsbChtZW1vcnlCYXNlLCB0MikKQEAgLTQ2MSw3ICs0MzgsNyBAQCBtYWNy
byBjaGVja1N0YWNrT3ZlcmZsb3coY2FsbGVlLCBzY3JhdGNoKQogICAgIHN1YnAgY2ZyLCBzY3Jh
dGNoLCBzY3JhdGNoCiAKICAgICBicGEgc2NyYXRjaCwgY2ZyLCAuc3RhY2tPdmVyZmxvdwotICAg
IGJwYmVxIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6bV9zb2Z0U3RhY2tMaW1pdFt3YXNtSW5zdGFu
Y2VdLCBzY3JhdGNoLCAuc3RhY2tIZWlnaHRPSworICAgIGJwYmVxIFdhc206Okluc3RhbmNlOjpt
X3NvZnRTdGFja0xpbWl0W3dhc21JbnN0YW5jZV0sIHNjcmF0Y2gsIC5zdGFja0hlaWdodE9LCiAK
IC5zdGFja092ZXJmbG93OgogICAgIGlwaW50RXhjZXB0aW9uKFN0YWNrT3ZlcmZsb3cpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvSW5QbGFjZUludGVycHJldGVyNjQu
YXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0luUGxhY2VJbnRlcnByZXRlcjY0LmFz
bQppbmRleCBhODdmMmE5M2VkNGQuLjMwYjM2MGNhMTYyZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0luUGxhY2VJbnRlcnByZXRlcjY0LmFzbQorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvSW5QbGFjZUludGVycHJldGVyNjQuYXNtCkBAIC0xLDI2ICsx
LDMgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDIzLTIwMjQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0jIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotIyBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0jIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0jIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0j
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotIyBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotIyBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0jIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQogIyMjIyMj
IyMjIwogIyBNYWNyb3MgIwogIyMjIyMjIyMjIwpAQCAtMzY3LDcgKzM0NCw3IEBAIGluc3RydWN0
aW9uTGFiZWwoX2NhdGNoKQogaW5zdHJ1Y3Rpb25MYWJlbChfdGhyb3cpCiAgICAgc3RvcmVpIFBD
LCBDYWxsU2l0ZUluZGV4W2Nmcl0KIAotICAgIGxvYWRwIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
bV92bVt3YXNtSW5zdGFuY2VdLCB0MAorICAgIGxvYWRwIFdhc206Okluc3RhbmNlOjptX3ZtW3dh
c21JbnN0YW5jZV0sIHQwCiAgICAgbG9hZHAgVk06OnRvcEVudHJ5RnJhbWVbdDBdLCB0MAogICAg
IGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHQwKQogCkBAIC0z
ODAsNyArMzU3LDcgQEAgaW5zdHJ1Y3Rpb25MYWJlbChfdGhyb3cpCiBpbnN0cnVjdGlvbkxhYmVs
KF9yZXRocm93KQogICAgIHN0b3JlaSBQQywgQ2FsbFNpdGVJbmRleFtjZnJdCiAKLSAgICBsb2Fk
cCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om1fdm1bd2FzbUluc3RhbmNlXSwgdDAKKyAgICBsb2Fk
cCBXYXNtOjpJbnN0YW5jZTo6bV92bVt3YXNtSW5zdGFuY2VdLCB0MAogICAgIGxvYWRwIFZNOjp0
b3BFbnRyeUZyYW1lW3QwXSwgdDAKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcih0MCkKIApAQCAtNjM4LDcgKzYxNSw3IEBAIGluc3RydWN0aW9uTGFiZWwo
X2dsb2JhbF9nZXQpCiAgICAgIyBMb2FkIHByZS1jb21wdXRlZCBpbmRleCBmcm9tIG1ldGFkYXRh
CiAgICAgbG9hZGggNltQTSwgTUNdLCB0MgogICAgIGxvYWRpIFtQTSwgTUNdLCB0MQotICAgIGxv
YWRwIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6bV9nbG9iYWxzW3dhc21JbnN0YW5jZV0sIHQwCisg
ICAgbG9hZHAgV2FzbTo6SW5zdGFuY2U6Om1fZ2xvYmFsc1t3YXNtSW5zdGFuY2VdLCB0MAogICAg
IGxzaGlmdHAgMSwgdDEKICAgICBsb2FkcSBbdDAsIHQxLCA4XSwgdDAKICAgICBiaWVxIHQyLCAw
LCAuaXBpbnRfZ2xvYmFsX2dldF9lbWJlZGRlZApAQCAtNjU4LDcgKzYzNSw3IEBAIGluc3RydWN0
aW9uTGFiZWwoX2dsb2JhbF9zZXQpCiAgICAgIyBiNiA9IDEgPT4gcG9ydGFibGUKICAgICBsb2Fk
YiA2W1BNLCBNQ10sIHQyCiAgICAgIyBnZXQgZ2xvYmFsIGFkZHIKLSAgICBsb2FkcCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6Om1fZ2xvYmFsc1t3YXNtSW5zdGFuY2VdLCB0MAorICAgIGxvYWRwIFdh
c206Okluc3RhbmNlOjptX2dsb2JhbHNbd2FzbUluc3RhbmNlXSwgdDAKICAgICAjIGdldCB2YWx1
ZSB0byBzdG9yZQogICAgIHBvcFF1YWQodDMsIHQxKQogICAgICMgZ2V0IGluZGV4CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3Bw
CmluZGV4IDE3YjI0ZjhkYTA5OS4uOTRhYzMyMDM1MTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcApAQCAtNzMsNiAr
NzMsNyBAQAogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5n
Q29udmVudGlvbi5oIgogI2luY2x1ZGUgIldhc21GdW5jdGlvbkNvZGVCbG9ja0dlbmVyYXRvci5o
IgorI2luY2x1ZGUgIldhc21JbnN0YW5jZS5oIgogI2luY2x1ZGUgIldhdGNoZG9nLmgiCiAjaW5j
bHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KaW5k
ZXggYzRkNmU0NDM5MzJmLi5iNGYzMzU3MWY0ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KQEAgLTEsNCArMSw0IEBACi0j
IENvcHlyaWdodCAoQykgMjAxMS0yMDI0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMjMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDI3LDcgKzE0MjcsNyBAQCBpZiBX
RUJBU1NFTUJMWQogICAgICAgICBqbXAgLmxvYWRlZAogICAgIC5pc1dhc21DYWxsZWU6CiAgICAg
ICAgIGxvYWRwIENvZGVCbG9jayArIFBheWxvYWRPZmZzZXRbY2ZyXSwgdm0KLSAgICAgICAgbG9h
ZHAgSlNXZWJBc3NlbWJseUluc3RhbmNlOjptX3ZtW3ZtXSwgdm0KKyAgICAgICAgbG9hZHAgV2Fz
bTo6SW5zdGFuY2U6Om1fdm1bdm1dLCB2bQogICAgIC5sb2FkZWQ6CiBlbHNlCiAgICAgbG9hZHAg
Q2FsbGVlICsgUGF5bG9hZE9mZnNldFtjZnJdLCB2bQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L1dlYkFzc2VtYmx5LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9XZWJBc3NlbWJseS5hc20KaW5kZXggY2E3YWRjMzQwMWE2Li40MWU1MzE1ZWM5NDkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9XZWJBc3NlbWJseS5hc20KKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L1dlYkFzc2VtYmx5LmFzbQpAQCAtMSw0ICsx
LDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwNiw4ICszMDYsOCBA
QCBlbmQKIAogbWFjcm8gcmVsb2FkTWVtb3J5UmVnaXN0ZXJzRnJvbUluc3RhbmNlKGluc3RhbmNl
LCBzY3JhdGNoMSkKIGlmIG5vdCBBUk12NwotICAgIGxvYWRwIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6bV9jYWNoZWRNZW1vcnlbaW5zdGFuY2VdLCBtZW1vcnlCYXNlCi0gICAgbG9hZHAgSlNXZWJB
c3NlbWJseUluc3RhbmNlOjptX2NhY2hlZEJvdW5kc0NoZWNraW5nU2l6ZVtpbnN0YW5jZV0sIGJv
dW5kc0NoZWNraW5nU2l6ZQorICAgIGxvYWRwIFdhc206Okluc3RhbmNlOjptX2NhY2hlZE1lbW9y
eVtpbnN0YW5jZV0sIG1lbW9yeUJhc2UKKyAgICBsb2FkcCBXYXNtOjpJbnN0YW5jZTo6bV9jYWNo
ZWRCb3VuZHNDaGVja2luZ1NpemVbaW5zdGFuY2VdLCBib3VuZHNDaGVja2luZ1NpemUKICAgICBj
YWdlZFByaW1pdGl2ZU1heUJlTnVsbChtZW1vcnlCYXNlLCBzY3JhdGNoMSkgIyBJZiBib3VuZHND
aGVja2luZ1NpemUgaXMgMCwgcG9pbnRlciBjYW4gYmUgYSBudWxscHRyLgogZW5kCiBlbmQKQEAg
LTM4Nyw3ICszODcsNyBAQCBpZiBUUkFDSU5HCiBlbmQKIAogICAgIGJwYSB3czEsIGNmciwgLnN0
YWNrT3ZlcmZsb3cKLSAgICBicGJlcSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om1fc29mdFN0YWNr
TGltaXRbd2FzbUluc3RhbmNlXSwgd3MxLCAuc3RhY2tIZWlnaHRPSworICAgIGJwYmVxIFdhc206
Okluc3RhbmNlOjptX3NvZnRTdGFja0xpbWl0W3dhc21JbnN0YW5jZV0sIHdzMSwgLnN0YWNrSGVp
Z2h0T0sKIAogLnN0YWNrT3ZlcmZsb3c6CiAgICAgdGhyb3dFeGNlcHRpb24oU3RhY2tPdmVyZmxv
dykKQEAgLTQ4NCw3ICs0ODQsNyBAQCBpZiBub3QgSlNWQUxVRTY0CiBlbmQKIAogICAgIGJwYSB3
czEsIGNmciwgLnN0YWNrT3ZlcmZsb3cKLSAgICBicGJlcSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
Om1fc29mdFN0YWNrTGltaXRbd2FzbUluc3RhbmNlXSwgd3MxLCAuc3RhY2tIZWlnaHRPSworICAg
IGJwYmVxIFdhc206Okluc3RhbmNlOjptX3NvZnRTdGFja0xpbWl0W3dhc21JbnN0YW5jZV0sIHdz
MSwgLnN0YWNrSGVpZ2h0T0sKIAogLnN0YWNrT3ZlcmZsb3c6CiAgICAgdGhyb3dFeGNlcHRpb24o
U3RhY2tPdmVyZmxvdykKQEAgLTkyNiwxMCArOTI2LDEwIEBAIG9wY29kZXNFbmQoKQogCiAubWVt
b3J5OgogICAgIGlmIEFSTTY0IG9yIEFSTTY0RQotICAgICAgICBsb2FkcGFpcnEgSlNXZWJBc3Nl
bWJseUluc3RhbmNlOjptX2NhY2hlZE1lbW9yeVt3YXNtSW5zdGFuY2VdLCBtZW1vcnlCYXNlLCBi
b3VuZHNDaGVja2luZ1NpemUKKyAgICAgICAgbG9hZHBhaXJxIFdhc206Okluc3RhbmNlOjptX2Nh
Y2hlZE1lbW9yeVt3YXNtSW5zdGFuY2VdLCBtZW1vcnlCYXNlLCBib3VuZHNDaGVja2luZ1NpemUK
ICAgICBlbHNpZiBYODZfNjQKLSAgICAgICAgbG9hZHAgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpt
X2NhY2hlZE1lbW9yeVt3YXNtSW5zdGFuY2VdLCBtZW1vcnlCYXNlCi0gICAgICAgIGxvYWRwIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6bV9jYWNoZWRCb3VuZHNDaGVja2luZ1NpemVbd2FzbUluc3Rh
bmNlXSwgYm91bmRzQ2hlY2tpbmdTaXplCisgICAgICAgIGxvYWRwIFdhc206Okluc3RhbmNlOjpt
X2NhY2hlZE1lbW9yeVt3YXNtSW5zdGFuY2VdLCBtZW1vcnlCYXNlCisgICAgICAgIGxvYWRwIFdh
c206Okluc3RhbmNlOjptX2NhY2hlZEJvdW5kc0NoZWNraW5nU2l6ZVt3YXNtSW5zdGFuY2VdLCBi
b3VuZHNDaGVja2luZ1NpemUKICAgICBlbmQKICAgICBpZiBub3QgQVJNdjcKICAgICAgICAgY2Fn
ZWRQcmltaXRpdmVNYXlCZU51bGwobWVtb3J5QmFzZSwgU2NyYXRjaCkKQEAgLTExOTcsNyArMTE5
Nyw3IEBAIG1hY3JvIGp1bXBUb0V4Y2VwdGlvbigpCiBlbmQKIAogb3Aod2FzbV90aHJvd19mcm9t
X3Nsb3dfcGF0aF90cmFtcG9saW5lLCBtYWNybyAoKQotICAgIGxvYWRwIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6bV92bVt3YXNtSW5zdGFuY2VdLCB0NQorICAgIGxvYWRwIFdhc206Okluc3RhbmNl
OjptX3ZtW3dhc21JbnN0YW5jZV0sIHQ1CiAgICAgbG9hZHAgVk06OnRvcEVudHJ5RnJhbWVbdDVd
LCB0NQogICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHQ1
KQogCkBAIC0xMjEyLDcgKzEyMTIsNyBAQCBlbmQpCiAKIG1hY3JvIHdhc21fdGhyb3dfZnJvbV9m
YXVsdF9oYW5kbGVyKGluc3RhbmNlKQogICAgICMgaW5zdGFuY2Ugc2hvdWxkIGJlIGluIGEyIHdo
ZW4gd2UgZ2V0IGhlcmUKLSAgICBsb2FkcCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om1fdm1baW5z
dGFuY2VdLCBhMAorICAgIGxvYWRwIFdhc206Okluc3RhbmNlOjptX3ZtW2luc3RhbmNlXSwgYTAK
ICAgICBsb2FkcCBWTTo6dG9wRW50cnlGcmFtZVthMF0sIGEwCiAgICAgY29weUNhbGxlZVNhdmVz
VG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoYTApCiAKQEAgLTE0MzMsNyArMTQzMyw4IEBA
IGVuZAogCiAgICAgICAgICAgICBzdG9yZVdhc21JbnN0YW5jZSh0YXJnZXRXYXNtSW5zdGFuY2Up
CiAgICAgICAgICAgICByZWxvYWRNZW1vcnlSZWdpc3RlcnNGcm9tSW5zdGFuY2UodGFyZ2V0V2Fz
bUluc3RhbmNlLCB3YTApCi0gICAgICAgICAgICBzdG9yZXAgdGFyZ2V0V2FzbUluc3RhbmNlLCBU
aGlzQXJndW1lbnRPZmZzZXRbc3BdICMgQW5jaG9yIG5ldyBKU1dlYkFzc2VtYmx5SW5zdGFuY2Ug
aW4gVGhpc0FyZ3VtZW50T2Zmc2V0LgorICAgICAgICAgICAgbG9hZHAgV2FzbTo6SW5zdGFuY2U6
Om1fb3duZXJbd2FzbUluc3RhbmNlXSwgd2EwCisgICAgICAgICAgICBzdG9yZXAgd2EwLCBUaGlz
QXJndW1lbnRPZmZzZXRbc3BdICMgQW5jaG9yIG5ldyBKU1dlYkFzc2VtYmx5SW5zdGFuY2UgaW4g
VGhpc0FyZ3VtZW50T2Zmc2V0LgogCiAgICAgICAgICAgICAjIExvYWQgcmVnaXN0ZXJzIGZyb20g
c3RhY2sKIGlmIEFSTTY0IG9yIEFSTTY0RQpAQCAtMTY4Miw3ICsxNjgzLDggQEAgZW5kCiAgICAg
ICAgICAgICBzdG9yZXAgd3MxLCBDYWxsZWVbd2EwXQogCiAgICAgICAgICAgICBtb3ZlIHdhMCwg
d3MxCi0gICAgICAgICAgICBzdG9yZXAgd2FzbUluc3RhbmNlLCBUaGlzQXJndW1lbnRPZmZzZXRb
c3BdICMgQW5jaG9yIG5ldyBKU1dlYkFzc2VtYmx5SW5zdGFuY2UgaW4gVGhpc0FyZ3VtZW50T2Zm
c2V0LgorICAgICAgICAgICAgbG9hZHAgV2FzbTo6SW5zdGFuY2U6Om1fb3duZXJbd2FzbUluc3Rh
bmNlXSwgd2EwCisgICAgICAgICAgICBzdG9yZXAgd2EwLCBUaGlzQXJndW1lbnRPZmZzZXRbc3Bd
ICMgQW5jaG9yIG5ldyBKU1dlYkFzc2VtYmx5SW5zdGFuY2UgaW4gVGhpc0FyZ3VtZW50T2Zmc2V0
LgogCiAgICAgICAgICAgICByZXN0b3JlR1BSc1VzZWRCeVRhaWxDYWxsKHdhMCwgd2ExKQogCkBA
IC0yNTEwLDcgKzI1MTIsNyBAQCB3YXNtT3AoYXRvbWljX2ZlbmNlLCBXYXNtRHJvcEtlZXAsIG1h
Y3JvKGN0eCkKIGVuZCkKIAogd2FzbU9wKHRocm93LCBXYXNtVGhyb3csIG1hY3JvKGN0eCkKLSAg
ICBsb2FkcCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om1fdm1bd2FzbUluc3RhbmNlXSwgdDUKKyAg
ICBsb2FkcCBXYXNtOjpJbnN0YW5jZTo6bV92bVt3YXNtSW5zdGFuY2VdLCB0NQogICAgIGxvYWRw
IFZNOjp0b3BFbnRyeUZyYW1lW3Q1XSwgdDUKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcih0NSkKIApAQCAtMjUxOSw3ICsyNTIxLDcgQEAgd2FzbU9wKHRo
cm93LCBXYXNtVGhyb3csIG1hY3JvKGN0eCkKIGVuZCkKIAogd2FzbU9wKHJldGhyb3csIFdhc21S
ZXRocm93LCBtYWNybyhjdHgpCi0gICAgbG9hZHAgSlNXZWJBc3NlbWJseUluc3RhbmNlOjptX3Zt
W3dhc21JbnN0YW5jZV0sIHQ1CisgICAgbG9hZHAgV2FzbTo6SW5zdGFuY2U6Om1fdm1bd2FzbUlu
c3RhbmNlXSwgdDUKICAgICBsb2FkcCBWTTo6dG9wRW50cnlGcmFtZVt0NV0sIHQ1CiAgICAgY29w
eUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodDUpCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9XZWJBc3NlbWJseTMyXzY0LmFzbSBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9XZWJBc3NlbWJseTMyXzY0LmFzbQppbmRleCAzOGI1
Y2JmMjk3ZWQuLjZmMjNiNzc3ZjBmNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L1dlYkFzc2VtYmx5MzJfNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9XZWJBc3NlbWJseTMyXzY0LmFzbQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChD
KSAyMDExLTIwMjQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAyMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIENvcHlyaWdo
dCAoQykgMjAyMSBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTQ1LDExICs0NSwxMSBAQCBpZiBBUk12NwogICAgIGJjcyAudGhyb3cKICAgICBhZGRw
cyBzaXplIC0gMSwgcG9pbnRlciwgb2Zmc2V0ICMgVXNlIG9mZnNldCBhcyBzY3JhdGNoIHJlZ2lz
dGVyCiAgICAgYmNzIC50aHJvdwotICAgIGJwYiBvZmZzZXQsIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6bV9jYWNoZWRCb3VuZHNDaGVja2luZ1NpemVbd2FzbUluc3RhbmNlXSwgLmNvbnRpbnVhdGlv
bgorICAgIGJwYiBvZmZzZXQsIFdhc206Okluc3RhbmNlOjptX2NhY2hlZEJvdW5kc0NoZWNraW5n
U2l6ZVt3YXNtSW5zdGFuY2VdLCAuY29udGludWF0aW9uCiAudGhyb3c6CiAgICAgdGhyb3dFeGNl
cHRpb24oT3V0T2ZCb3VuZHNNZW1vcnlBY2Nlc3MpCiAuY29udGludWF0aW9uOgotICAgIGFkZHAg
SlNXZWJBc3NlbWJseUluc3RhbmNlOjptX2NhY2hlZE1lbW9yeVt3YXNtSW5zdGFuY2VdLCBwb2lu
dGVyCisgICAgYWRkcCBXYXNtOjpJbnN0YW5jZTo6bV9jYWNoZWRNZW1vcnlbd2FzbUluc3RhbmNl
XSwgcG9pbnRlcgogZWxzZQogICAgIGNyYXNoKCkKIGVuZApAQCAtNjQsMTEgKzY0LDExIEBAIGlm
IEFSTXY3CiAgICAgYmNzIC50aHJvdwogICAgIGFkZHBzIHNpemUgLSAxLCBwb2ludGVyLCBvZmZz
ZXQgIyBVc2Ugb2Zmc2V0IGFzIHNjcmF0Y2ggcmVnaXN0ZXIKICAgICBiY3MgLnRocm93Ci0gICAg
YnBiIG9mZnNldCwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjptX2NhY2hlZEJvdW5kc0NoZWNraW5n
U2l6ZVt3YXNtSW5zdGFuY2VdLCAuY29udGludWF0aW9uCisgICAgYnBiIG9mZnNldCwgV2FzbTo6
SW5zdGFuY2U6Om1fY2FjaGVkQm91bmRzQ2hlY2tpbmdTaXplW3dhc21JbnN0YW5jZV0sIC5jb250
aW51YXRpb24KIC50aHJvdzoKICAgICB0aHJvd0V4Y2VwdGlvbihPdXRPZkJvdW5kc01lbW9yeUFj
Y2VzcykKIC5jb250aW51YXRpb246Ci0gICAgYWRkcCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om1f
Y2FjaGVkTWVtb3J5W3dhc21JbnN0YW5jZV0sIHBvaW50ZXIKKyAgICBhZGRwIFdhc206Okluc3Rh
bmNlOjptX2NhY2hlZE1lbW9yeVt3YXNtSW5zdGFuY2VdLCBwb2ludGVyCiAgICAgYnRwbnogcG9p
bnRlciwgKHNpemUgLSAxKSwgLnRocm93CiBlbHNlCiAgICAgY3Jhc2goKQpAQCAtMTY2LDcgKzE2
Niw3IEBAIHdhc21PcChyZWZfYXNfbm9uX251bGwsIFdhc21SZWZBc05vbk51bGwsIG1hY3JvKGN0
eCkKIGVuZCkKIAogd2FzbU9wKGdldF9nbG9iYWwsIFdhc21HZXRHbG9iYWwsIG1hY3JvKGN0eCkK
LSAgICBsb2FkcCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om1fZ2xvYmFsc1t3YXNtSW5zdGFuY2Vd
LCB0MAorICAgIGxvYWRwIFdhc206Okluc3RhbmNlOjptX2dsb2JhbHNbd2FzbUluc3RhbmNlXSwg
dDAKICAgICB3Z2V0dShjdHgsIG1fZ2xvYmFsSW5kZXgsIHQxKQogICAgIGxzaGlmdHAgMSwgdDEK
ICAgICBsb2FkMmlhIFt0MCwgdDEsIDhdLCB0MCwgdDEKQEAgLTE3NCw3ICsxNzQsNyBAQCB3YXNt
T3AoZ2V0X2dsb2JhbCwgV2FzbUdldEdsb2JhbCwgbWFjcm8oY3R4KQogZW5kKQogCiB3YXNtT3Ao
c2V0X2dsb2JhbCwgV2FzbVNldEdsb2JhbCwgbWFjcm8oY3R4KQotICAgIGxvYWRwIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6bV9nbG9iYWxzW3dhc21JbnN0YW5jZV0sIHQwCisgICAgbG9hZHAgV2Fz
bTo6SW5zdGFuY2U6Om1fZ2xvYmFsc1t3YXNtSW5zdGFuY2VdLCB0MAogICAgIHdnZXR1KGN0eCwg
bV9nbG9iYWxJbmRleCwgdDEpCiAgICAgbHNoaWZ0cCAxLCB0MQogICAgIG1sb2FkMmkoY3R4LCBt
X3ZhbHVlLCB0MywgdDIpCkBAIC0xODMsNyArMTgzLDcgQEAgd2FzbU9wKHNldF9nbG9iYWwsIFdh
c21TZXRHbG9iYWwsIG1hY3JvKGN0eCkKIGVuZCkKIAogd2FzbU9wKGdldF9nbG9iYWxfcG9ydGFi
bGVfYmluZGluZywgV2FzbUdldEdsb2JhbFBvcnRhYmxlQmluZGluZywgbWFjcm8oY3R4KQotICAg
IGxvYWRwIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6bV9nbG9iYWxzW3dhc21JbnN0YW5jZV0sIHQw
CisgICAgbG9hZHAgV2FzbTo6SW5zdGFuY2U6Om1fZ2xvYmFsc1t3YXNtSW5zdGFuY2VdLCB0MAog
ICAgIHdnZXR1KGN0eCwgbV9nbG9iYWxJbmRleCwgdDEpCiAgICAgbHNoaWZ0cCAxLCB0MQogICAg
IGxvYWRwIFt0MCwgdDEsIDhdLCB0MApAQCAtMTkyLDcgKzE5Miw3IEBAIHdhc21PcChnZXRfZ2xv
YmFsX3BvcnRhYmxlX2JpbmRpbmcsIFdhc21HZXRHbG9iYWxQb3J0YWJsZUJpbmRpbmcsIG1hY3Jv
KGN0eCkKIGVuZCkKIAogd2FzbU9wKHNldF9nbG9iYWxfcG9ydGFibGVfYmluZGluZywgV2FzbVNl
dEdsb2JhbFBvcnRhYmxlQmluZGluZywgbWFjcm8oY3R4KQotICAgIGxvYWRwIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6bV9nbG9iYWxzW3dhc21JbnN0YW5jZV0sIHQwCisgICAgbG9hZHAgV2FzbTo6
SW5zdGFuY2U6Om1fZ2xvYmFsc1t3YXNtSW5zdGFuY2VdLCB0MAogICAgIHdnZXR1KGN0eCwgbV9n
bG9iYWxJbmRleCwgdDEpCiAgICAgbHNoaWZ0cCAxLCB0MQogICAgIG1sb2FkMmkoY3R4LCBtX3Zh
bHVlLCB0MywgdDIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvV2Vi
QXNzZW1ibHk2NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvV2ViQXNzZW1ibHk2
NC5hc20KaW5kZXggMDM1NDEwZmVhZmM4Li43ZDc0YWI2MTk4ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9XZWJBc3NlbWJseTY0LmFzbQorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvV2ViQXNzZW1ibHk2NC5hc20KQEAgLTExNCw3ICsxMTQsNyBAQCB3
YXNtT3AocmVmX2FzX25vbl9udWxsLCBXYXNtUmVmQXNOb25OdWxsLCBtYWNybyhjdHgpCiBlbmQp
CiAKIHdhc21PcChnZXRfZ2xvYmFsLCBXYXNtR2V0R2xvYmFsLCBtYWNybyhjdHgpCi0gICAgbG9h
ZHAgSlNXZWJBc3NlbWJseUluc3RhbmNlOjptX2dsb2JhbHNbd2FzbUluc3RhbmNlXSwgdDAKKyAg
ICBsb2FkcCBXYXNtOjpJbnN0YW5jZTo6bV9nbG9iYWxzW3dhc21JbnN0YW5jZV0sIHQwCiAgICAg
d2dldHUoY3R4LCBtX2dsb2JhbEluZGV4LCB0MSkKICAgICBsc2hpZnRwIDEsIHQxCiAgICAgbG9h
ZHEgW3QwLCB0MSwgOF0sIHQwCkBAIC0xMjIsNyArMTIyLDcgQEAgd2FzbU9wKGdldF9nbG9iYWws
IFdhc21HZXRHbG9iYWwsIG1hY3JvKGN0eCkKIGVuZCkKIAogd2FzbU9wKHNldF9nbG9iYWwsIFdh
c21TZXRHbG9iYWwsIG1hY3JvKGN0eCkKLSAgICBsb2FkcCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
Om1fZ2xvYmFsc1t3YXNtSW5zdGFuY2VdLCB0MAorICAgIGxvYWRwIFdhc206Okluc3RhbmNlOjpt
X2dsb2JhbHNbd2FzbUluc3RhbmNlXSwgdDAKICAgICB3Z2V0dShjdHgsIG1fZ2xvYmFsSW5kZXgs
IHQxKQogICAgIGxzaGlmdHAgMSwgdDEKICAgICBtbG9hZHEoY3R4LCBtX3ZhbHVlLCB0MikKQEAg
LTEzMSw3ICsxMzEsNyBAQCB3YXNtT3Aoc2V0X2dsb2JhbCwgV2FzbVNldEdsb2JhbCwgbWFjcm8o
Y3R4KQogZW5kKQogCiB3YXNtT3AoZ2V0X2dsb2JhbF9wb3J0YWJsZV9iaW5kaW5nLCBXYXNtR2V0
R2xvYmFsUG9ydGFibGVCaW5kaW5nLCBtYWNybyhjdHgpCi0gICAgbG9hZHAgSlNXZWJBc3NlbWJs
eUluc3RhbmNlOjptX2dsb2JhbHNbd2FzbUluc3RhbmNlXSwgdDAKKyAgICBsb2FkcCBXYXNtOjpJ
bnN0YW5jZTo6bV9nbG9iYWxzW3dhc21JbnN0YW5jZV0sIHQwCiAgICAgd2dldHUoY3R4LCBtX2ds
b2JhbEluZGV4LCB0MSkKICAgICBsc2hpZnRwIDEsIHQxCiAgICAgbG9hZHEgW3QwLCB0MSwgOF0s
IHQwCkBAIC0xNDAsNyArMTQwLDcgQEAgd2FzbU9wKGdldF9nbG9iYWxfcG9ydGFibGVfYmluZGlu
ZywgV2FzbUdldEdsb2JhbFBvcnRhYmxlQmluZGluZywgbWFjcm8oY3R4KQogZW5kKQogCiB3YXNt
T3Aoc2V0X2dsb2JhbF9wb3J0YWJsZV9iaW5kaW5nLCBXYXNtU2V0R2xvYmFsUG9ydGFibGVCaW5k
aW5nLCBtYWNybyhjdHgpCi0gICAgbG9hZHAgSlNXZWJBc3NlbWJseUluc3RhbmNlOjptX2dsb2Jh
bHNbd2FzbUluc3RhbmNlXSwgdDAKKyAgICBsb2FkcCBXYXNtOjpJbnN0YW5jZTo6bV9nbG9iYWxz
W3dhc21JbnN0YW5jZV0sIHQwCiAgICAgd2dldHUoY3R4LCBtX2dsb2JhbEluZGV4LCB0MSkKICAg
ICBsc2hpZnRwIDEsIHQxCiAgICAgbWxvYWRxKGN0eCwgbV92YWx1ZSwgdDIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAppbmRleCA1ZmMyZWM2YmNiOWYuLjNkMzc5MDk3
ZmZkNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCkBAIC0zMjIs
NyArMzIyLDcgQEAgTkVWRVJfSU5MSU5FIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggTk9UX1RBSUxf
Q0FMTEVEIHZvaWQgcmVwb3J0WmFwcGVkQ2VsbEFuZENyYXMKICAgICAgICAgICAgICAgICByZXR1
cm4gSXRlcmF0aW9uU3RhdHVzOjpEb25lOwogCiAgICAgICAgICAgICBpZiAoc3Vic3BhY2UuaXNJ
c29TdWJzcGFjZSgpKSB7Ci0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SXNvU3Vic3BhY2Um
PihzdWJzcGFjZSkuZm9yRWFjaExvd2VyVGllclByZWNpc2VGcmVlTGlzdGVkUHJlY2lzZUFsbG9j
YXRpb24oWyZdKFByZWNpc2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9uKSB7CisgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8SXNvU3Vic3BhY2UmPihzdWJzcGFjZSkuZm9yRWFjaExvd2VyVGllckZy
ZWVMaXN0ZWRQcmVjaXNlQWxsb2NhdGlvbihbJl0oUHJlY2lzZUFsbG9jYXRpb24qIGFsbG9jYXRp
b24pIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG9jYXRpb24tPmNvbnRhaW5zKGNlbGwp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZFByZWNpc2VBbGxvY2F0aW9uID0gYWxs
b2NhdGlvbjsKICAgICAgICAgICAgICAgICAgICAgICAgIGlzRnJlZUxpc3RlZCA9IHRydWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCmluZGV4IGRmMTEzOTM2YzhjYy4uMzg0
NjFjOWQzN2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGwuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaApAQCAtMTAx
LDggKzEwMSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rl
c3RydWN0aW9uID0gZmFsc2U7CiAKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdXNlUHJlY2lz
ZUFsbG9jYXRpb25zT25seSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDhfdCBu
dW1iZXJPZkxvd2VyVGllclByZWNpc2VDZWxscyA9IDg7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1
aW50OF90IG51bWJlck9mTG93ZXJUaWVyQ2VsbHMgPSA4OwogCiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBzaXplX3QgYXRvbVNpemUgPSAxNjsgLy8gVGhpcyBuZWVkcyB0byBiZSBsYXJnZXIgb3IgZXF1
YWwgdG8gMTYuCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKaW5k
ZXggODY1NjdiMzYxODU2Li44Y2RhNmMzYmM2YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5oCkBAIC0yMDQsNyArMjA0LDcgQEAgcHVibGljOgogCiAgICAgdHlw
ZWRlZiBKU0NlbGwgQmFzZTsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgdWludDhfdCBudW1iZXJPZkxvd2VyVGllclByZWNpc2VDZWxscyA9
IDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IG51bWJlck9mTG93ZXJUaWVyQ2VsbHMg
PSAwOwogCiAjaWYgRU5BQkxFKFNUUlVDVFVSRV9JRF9XSVRIX1NISUZUKQogICAgIHN0YXRpYyBj
b25zdGV4cHIgc2l6ZV90IGF0b21TaXplID0gMzI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAKaW5kZXggZTY0NTcxNDQyNzQzLi4yYjU2NDE2N2EzZmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAKQEAgLTExMSw3ICsxMTEsNiBAQAogI2luY2x1ZGUgIlN0cnVjdHVy
ZUNoYWluSW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKICNpbmNsdWRl
ICJTdHJ1Y3R1cmVTdHViSW5mby5oIgotI2luY2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIlN5bWJvbElubGluZXMuaCIKICNpbmNsdWRlICJTeW1ib2xUYWJsZUlubGluZXMuaCIK
ICNpbmNsdWRlICJUZXN0UnVubmVyVXRpbHMuaCIKQEAgLTEyOCw2ICsxMjcsNyBAQAogI2luY2x1
ZGUgIlZNSW5zcGVjdG9yLmgiCiAjaW5jbHVkZSAiVmFyaWFibGVFbnZpcm9ubWVudC5oIgogI2lu
Y2x1ZGUgIldhaXRlckxpc3RNYW5hZ2VyLmgiCisjaW5jbHVkZSAiV2FzbUluc3RhbmNlLmgiCiAj
aW5jbHVkZSAiV2FzbVdvcmtsaXN0LmgiCiAjaW5jbHVkZSAiV2F0Y2hkb2cuaCIKICNpbmNsdWRl
ICJXZWFrR0NNYXBJbmxpbmVzLmgiCkBAIC0xNTQsMTAgKzE1NCw2IEBACiAjaW5jbHVkZSAiUmVn
RXhwLmgiCiAjZW5kaWYKIAotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSNpbmNsdWRlICJKU1dl
YkFzc2VtYmx5SW5zdGFuY2UuaCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgSlNDIHsKIAogREVGSU5F
X0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihWTSk7CkBAIC0xMDY1LDEyICsxMDYxLDgg
QEAgdm9pZCBWTTo6dXBkYXRlU3RhY2tMaW1pdHMoKQogICAgICAgICBwcmVDb21taXRTdGFja01l
bW9yeShtX3NvZnRTdGFja0xpbWl0KTsKICNlbmRpZgogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
LSAgICAgICAgaWYgKGhlYXAubV93ZWJBc3NlbWJseUluc3RhbmNlU3BhY2UpIHsKLSAgICAgICAg
ICAgIGhlYXAubV93ZWJBc3NlbWJseUluc3RhbmNlU3BhY2UtPmZvckVhY2hMaXZlQ2VsbChbJl0g
KEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCBraW5kKSB7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChraW5kLCBraW5kID09IEhlYXBDZWxsOjpKU0NlbGwpOwotICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlJbnN0YW5jZSo+KGNlbGwpLT51cGRhdGVT
b2Z0U3RhY2tMaW1pdChtX3NvZnRTdGFja0xpbWl0KTsKLSAgICAgICAgICAgIH0pOwotICAgICAg
ICB9CisgICAgICAgIGZvciAoYXV0byYgaW5zdGFuY2UgOiBtX3dhc21JbnN0YW5jZXMudmFsdWVz
KCkpCisgICAgICAgICAgICBpbnN0YW5jZS0+dXBkYXRlU29mdFN0YWNrTGltaXQobV9zb2Z0U3Rh
Y2tMaW1pdCk7CiAjZW5kaWYKICAgICB9CiB9CkBAIC0xNzc5LDYgKzE3NzEsMTQgQEAgdm9pZCBW
TTo6aW52YWxpZGF0ZVN0cnVjdHVyZUNoYWluSW50ZWdyaXR5KFN0cnVjdHVyZUNoYWluSW50ZWdy
aXR5RXZlbnQpCiAgICAgICAgIG1lZ2Ftb3JwaGljQ2FjaGUtPmJ1bXBFcG9jaCgpOwogfQogCisj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQordm9pZCBWTTo6cmVnaXN0ZXJXYXNtSW5zdGFuY2UoV2Fz
bTo6SW5zdGFuY2UmIGluc3RhbmNlKQoreworICAgIG1fd2FzbUluc3RhbmNlcy5hZGQoaW5zdGFu
Y2UpOworfQorI2VuZGlmCisKKwogVk06OkRyYWluTWljcm90YXNrRGVsYXlTY29wZTo6RHJhaW5N
aWNyb3Rhc2tEZWxheVNjb3BlKFZNJiB2bSkKICAgICA6IG1fdm0oJnZtKQogewpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggNDBkMDZlNzNiMzUwLi40NTgzNTdkNTVjYzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtMTcwLDYgKzE3MCw5IEBAIGNsYXNzIERhdGFi
YXNlOwogbmFtZXNwYWNlIERPTUpJVCB7CiBjbGFzcyBTaWduYXR1cmU7CiB9CituYW1lc3BhY2Ug
V2FzbSB7CitjbGFzcyBJbnN0YW5jZTsKK30KIAogc3RydWN0IEVudHJ5RnJhbWU7CiAKQEAgLTEw
MTEsNiArMTAxNCwxMCBAQCBwdWJsaWM6CiAKICAgICBSZWY8V2FpdGVyPiBzeW5jV2FpdGVyKCk7
CiAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgdm9pZCByZWdpc3Rlcldhc21JbnN0YW5j
ZShXYXNtOjpJbnN0YW5jZSYpOworI2VuZGlmCisKICAgICB2b2lkIG5vdGlmeURlYnVnZ2VySG9v
a0luamVjdGVkKCkgeyBtX2lzRGVidWdnZXJIb29rSW5qZWN0ZWQgPSB0cnVlOyB9CiAgICAgYm9v
bCBpc0RlYnVnZ2VySG9va0luamVjdGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0RlYnVnZ2VySG9v
a0luamVjdGVkOyB9CiAKQEAgLTExMzgsNiArMTE0NSw5IEBAIHByaXZhdGU6CiAgICAgUmVmPFdh
aXRlcj4gbV9zeW5jV2FpdGVyOwogCiAgICAgVmVjdG9yPEZ1bmN0aW9uPHZvaWQoKT4+IG1fZGlk
UG9wTGlzdGVuZXJzOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBUaHJlYWRTYWZlV2Vh
a0hhc2hTZXQ8V2FzbTo6SW5zdGFuY2U+IG1fd2FzbUluc3RhbmNlczsKKyNlbmRpZgogCiAjaWYg
RU5BQkxFKERGR19ET0VTX0dDX1ZBTElEQVRJT04pCiAgICAgRG9lc0dDQ2hlY2sgbV9kb2VzR0M7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NTZXQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ1NldC5oCmluZGV4IDhmNzM3NjEy
NmVjZi4uOGVlNTE4MWIzZjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9XZWFrR0NTZXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFr
R0NTZXQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAy
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI1LDggKzI1LDggQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJX
ZWFrLmgiCiAjaW5jbHVkZSAiV2Vha0dDSGFzaFRhYmxlLmgiCi0jaW5jbHVkZSAiV2Vha0lubGlu
ZXMuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9UWm9uZU1hbGxv
Yy5oPgogCkBAIC00MywyMSArNDMsNyBAQCBzdHJ1Y3QgV2Vha0dDU2V0SGFzaFRyYWl0cyA6IEhh
c2hUcmFpdHM8V2VhazxUPj4gewogICAgIH0KIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1z
dHJ1Y3QgV2Vha0dDU2V0SGFzaCB7Ci0gICAgLy8gV2Ugb25seSBwcnVuZSBzdGFsZSBlbnRyaWVz
IG9uIEZ1bGwgR0NzIHNvIHdlIGhhdmUgdG8gaGFuZGxlIG5vbi1MaXZlIGVudHJpZXMgaW4gdGhl
IHRhYmxlLgotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFdlYWs8VD4mIHApIHsgcmV0
dXJuIFB0ckhhc2g8VCo+OjpoYXNoKHAuZ2V0KCkpOyB9Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwo
Y29uc3QgV2VhazxUPiYgYSwgY29uc3QgV2VhazxUPiYgYikKLSAgICB7Ci0gICAgICAgIGlmICgh
YSB8fCAhYikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIGEuZ2V0
KCkgPT0gYi5nZXQoKTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNhZmVUb0Nv
bXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Ci19OwotCi0vLyBGSVhNRTogVGhpcyBkb2Vz
bid0IGN1cnJlbnRseSBhY2NlcHQgV2Vha0hhbmRsZU93bmVycyBieSBkZWZhdWx0Li4uIGl0J3Mg
cHJvYmFibHkgbm90IGhhcmQgdG8gYWRkIGJ1dCBpdCdzIG5vdCBleGFjdGx5IGNsZWFyIGhvdyB0
byBoYW5kbGUgbXVsdGlwbGUgZGlmZmVyZW50IGhhbmRsZSBvd25lcnMgZm9yIHRoZSBzYW1lIHZh
bHVlLgotdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhhc2hBcmcgPSBXZWFr
R0NTZXRIYXNoPFZhbHVlQXJnPiwgdHlwZW5hbWUgVHJhaXRzQXJnID0gV2Vha0dDU2V0SGFzaFRy
YWl0czxWYWx1ZUFyZz4+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFz
aEFyZyA9IERlZmF1bHRIYXNoPFdlYWs8VmFsdWVBcmc+PiwgdHlwZW5hbWUgVHJhaXRzQXJnID0g
V2Vha0dDU2V0SGFzaFRyYWl0czxWYWx1ZUFyZz4+CiBjbGFzcyBXZWFrR0NTZXQgZmluYWwgOiBw
dWJsaWMgV2Vha0dDSGFzaFRhYmxlIHsKICAgICBXVEZfTUFLRV9UWk9ORV9BTExPQ0FURUQoV2Vh
a0dDU2V0KTsKICAgICB1c2luZyBWYWx1ZVR5cGUgPSBXZWFrPFZhbHVlQXJnPjsKQEAgLTY4LDQw
ICs1NCwyOCBAQCBwdWJsaWM6CiAgICAgdXNpbmcgaXRlcmF0b3IgPSB0eXBlbmFtZSBIYXNoU2V0
VHlwZTo6aXRlcmF0b3I7CiAgICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSB0eXBlbmFtZSBIYXNo
U2V0VHlwZTo6Y29uc3RfaXRlcmF0b3I7CiAKLSAgICBpbmxpbmUgZXhwbGljaXQgV2Vha0dDU2V0
KFZNJik7Ci0gICAgaW5saW5lIH5XZWFrR0NTZXQoKSBmaW5hbDsKKyAgICBleHBsaWNpdCBXZWFr
R0NTZXQoVk0mKTsKKyAgICB+V2Vha0dDU2V0KCkgZmluYWw7CiAKICAgICB2b2lkIGNsZWFyKCkK
ICAgICB7CiAgICAgICAgIG1fc2V0LmNsZWFyKCk7CiAgICAgfQogCi0gICAgQWRkUmVzdWx0IGFk
ZChWYWx1ZUFyZyoga2V5KQotICAgIHsKLSAgICAgICAgLy8gQ29uc3RydWN0aW5nIGEgV2VhayBz
aG91bGRuJ3QgdHJpZ2dlciBhIEdDIGJ1dCBhZGQgdGhpcyBBU1NFUlQgZm9yIGdvb2QgbWVhc3Vy
ZS4KLSAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOwotICAgICAgICByZXR1cm4gbV9zZXQu
YWRkKGtleSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3Is
IHR5cGVuYW1lIFQ+Ci0gICAgVmFsdWVBcmcqIGVuc3VyZVZhbHVlKFQmJiBrZXksIGNvbnN0IElu
dm9jYWJsZTxWYWx1ZVR5cGUoKT4gYXV0byYgZnVuY3RvcikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBWYWx1
ZUFyZyogZW5zdXJlVmFsdWUoVCYmIGtleSwgRnVuY3RvciYmIGZ1bmN0b3IpCiAgICAgewogICAg
ICAgICAvLyBJZiBmdW5jdG9yIGludm9rZXMgR0MsIEdDIGNhbiBwcnVuZSBXZWFrR0NTZXQsIGFu
ZCBtYW5pcHVsYXRlIEhhc2hTZXQgd2hpbGUgd2UgYXJlIHRvdWNoaW5nIGl0IGluIHRoZSBlbnN1
cmUgZnVuY3Rpb24uCiAgICAgICAgIC8vIFRoZSBmdW5jdG9yIG11c3Qgbm90IGludm9rZSBHQy4K
ICAgICAgICAgRGlzYWxsb3dHQyBkaXNhbGxvd0dDOwogICAgICAgICAKLSAgICAgICAgYXV0byBy
ZXN1bHQgPSBtX3NldC50ZW1wbGF0ZSBlbnN1cmU8SGFzaFRyYW5zbGF0b3I+KHN0ZDo6Zm9yd2Fy
ZDxUPihrZXkpLCBmdW5jdG9yKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX3NldC50ZW1wbGF0
ZSBlbnN1cmU8SGFzaFRyYW5zbGF0b3I+KHN0ZDo6Zm9yd2FyZDxUPihrZXkpLCBzdGQ6OmZvcndh
cmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwogICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT5n
ZXQoKTsKICAgICB9CiAKLSAgICAvLyBJdCdzIG5vdCBzYWZlIHRvIGNhbGwgaW50byB0aGUgVk0g
b3IgYWxsb2NhdGUgYW4gb2JqZWN0IHdoaWxlIGFuIGl0ZXJhdG9yIGlzIG9wZW4uCi0gICAgaW5s
aW5lIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9zZXQuYmVnaW4oKTsgfQotICAgIGlubGlu
ZSBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LmJlZ2luKCk7IH0K
LQotICAgIGlubGluZSBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX3NldC5lbmQoKTsgfQotICAg
IGlubGluZSBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3NldC5lbmQoKTsg
fQotCi0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBmaW5kL2NvbnRhaW5zL3JlbW92ZSBm
cm9tIGEgVmFsdWVBcmcqIHZpYSBhIEhhc2hUcmFuc2xhdG9yLgorICAgIGlubGluZSBpdGVyYXRv
ciBmaW5kKGNvbnN0IFZhbHVlVHlwZSYga2V5KTsKKyAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3Ig
ZmluZChjb25zdCBWYWx1ZVR5cGUmIGtleSkgY29uc3Q7CisgICAgaW5saW5lIGJvb2wgY29udGFp
bnMoY29uc3QgVmFsdWVUeXBlJikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBwcnVuZVN0
YWxlRW50cmllcygpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvV2Vha0dDU2V0SW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
V2Vha0dDU2V0SW5saW5lcy5oCmluZGV4IGM2MjE1NGMwMjllYi4uY2JmMmExODhkY2Y3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NTZXRJbmxpbmVzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDU2V0SW5saW5lcy5oCkBA
IC00NCw2ICs0NCwyOCBAQCBpbmxpbmUgV2Vha0dDU2V0PFZhbHVlQXJnLCBIYXNoQXJnLCBUcmFp
dHNBcmc+Ojp+V2Vha0dDU2V0KCkKICAgICBtX3ZtLmhlYXAudW5yZWdpc3RlcldlYWtHQ0hhc2hU
YWJsZSh0aGlzKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVBcmcsIHR5cGVuYW1lIEhh
c2hBcmcsIHR5cGVuYW1lIFRyYWl0c0FyZz4KK2lubGluZSB0eXBlbmFtZSBXZWFrR0NTZXQ8VmFs
dWVBcmcsIEhhc2hBcmcsIFRyYWl0c0FyZz46Oml0ZXJhdG9yIFdlYWtHQ1NldDxWYWx1ZUFyZywg
SGFzaEFyZywgVHJhaXRzQXJnPjo6ZmluZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQoreworICAg
IGl0ZXJhdG9yIGl0ID0gbV9zZXQuZmluZCh2YWx1ZSk7CisgICAgaXRlcmF0b3IgZW5kID0gbV9z
ZXQuZW5kKCk7CisgICAgaWYgKGl0ICE9IGVuZCAmJiAhKml0KSAvLyBGb3VuZCBhIHpvbWJpZSB2
YWx1ZS4KKyAgICAgICAgcmV0dXJuIGVuZDsKKyAgICByZXR1cm4gaXQ7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBUcmFpdHNBcmc+
CitpbmxpbmUgdHlwZW5hbWUgV2Vha0dDU2V0PFZhbHVlQXJnLCBIYXNoQXJnLCBUcmFpdHNBcmc+
Ojpjb25zdF9pdGVyYXRvciBXZWFrR0NTZXQ8VmFsdWVBcmcsIEhhc2hBcmcsIFRyYWl0c0FyZz46
OmZpbmQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3Rf
Y2FzdDxXZWFrR0NTZXQqPih0aGlzKS0+ZmluZCh2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFZhbHVlQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBUcmFpdHNBcmc+Citpbmxp
bmUgYm9vbCBXZWFrR0NTZXQ8VmFsdWVBcmcsIEhhc2hBcmcsIFRyYWl0c0FyZz46OmNvbnRhaW5z
KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZpbmQodmFsdWUp
ICE9IG1fc2V0LmVuZCgpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5h
bWUgSGFzaEFyZywgdHlwZW5hbWUgVHJhaXRzQXJnPgogTkVWRVJfSU5MSU5FIHZvaWQgV2Vha0dD
U2V0PFZhbHVlQXJnLCBIYXNoQXJnLCBUcmFpdHNBcmc+OjpwcnVuZVN0YWxlRW50cmllcygpCiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRSklULmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFKSVQuY3BwCmluZGV4IDBmM2MxYjI3
NjU2ZC4uOWY3NmI4MDQ4OTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQkJRSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJR
SklULmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAy
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5j
bHVkZSAiV2FzbUZ1bmN0aW9uUGFyc2VyLmgiCiAjaW5jbHVkZSAiV2FzbUlSR2VuZXJhdG9ySGVs
cGVycy5oIgorI2luY2x1ZGUgIldhc21JbnN0YW5jZS5oIgogI2luY2x1ZGUgIldhc21NZW1vcnlJ
bmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGUuaCIKICNpbmNsdWRlICJXYXNtTW9k
dWxlSW5mb3JtYXRpb24uaCIKQEAgLTEwMDcsNyArMTAwOCw3IEBAIHZvaWQgQkJRSklUOjplbWl0
V3JpdGVCYXJyaWVyKEdQUlJlZyBjZWxsR1BSKQogICAgIC8vIFdlIG11c3QgZmx1c2ggZXZlcnl0
aGluZyBmaXJzdC4gSnVtcGluZyBvdmVyIGZsdXNoIChlbWl0Q0NhbGwpIGlzIHdyb25nIHNpbmNl
IHBhdGhzIG5lZWQgdG8gZ2V0IG1lcmdlZC4KICAgICBmbHVzaFJlZ2lzdGVycygpOwogCi0gICAg
bV9qaXQubG9hZFB0cihBZGRyZXNzKEdQUkluZm86Ondhc21Db250ZXh0SW5zdGFuY2VQb2ludGVy
LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mVk0oKSksIHZtR1BSKTsKKyAgICBtX2pp
dC5sb2FkUHRyKEFkZHJlc3MoR1BSSW5mbzo6d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIsIElu
c3RhbmNlOjpvZmZzZXRPZlZNKCkpLCB2bUdQUik7CiAgICAgbV9qaXQubG9hZDgoQWRkcmVzcyhj
ZWxsR1BSLCBKU0NlbGw6OmNlbGxTdGF0ZU9mZnNldCgpKSwgY2VsbFN0YXRlR1BSKTsKICAgICBh
dXRvIG5vRmVuY2VDaGVjayA9IG1faml0LmJyYW5jaDMyKFJlbGF0aW9uYWxDb25kaXRpb246OkFi
b3ZlLCBjZWxsU3RhdGVHUFIsIEFkZHJlc3Modm1HUFIsIFZNOjpvZmZzZXRPZkhlYXBCYXJyaWVy
VGhyZXNob2xkKCkpKTsKIApAQCAtMTA1Niw4ICsxMDU3LDcgQEAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gQkJRSklUOjphZGRDdXJyZW50TWVtb3J5KFZhbHVlJiByZXN1bHQpCiB7
CiAgICAgcmVzdWx0ID0gdG9wVmFsdWUoVHlwZUtpbmQ6OkkzMik7CiAgICAgTG9jYXRpb24gcmVz
dWx0TG9jYXRpb24gPSBhbGxvY2F0ZShyZXN1bHQpOwotICAgIG1faml0LmxvYWRQdHIoQWRkcmVz
cyhHUFJJbmZvOjp3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlciwgSlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpvZmZzZXRPZkpTTWVtb3J5KCkpLCB3YXNtU2NyYXRjaEdQUik7Ci0gICAgbV9qaXQubG9h
ZFB0cihBZGRyZXNzKHdhc21TY3JhdGNoR1BSLCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRP
Zk1lbW9yeSgpKSwgd2FzbVNjcmF0Y2hHUFIpOworICAgIG1faml0LmxvYWRQdHIoQWRkcmVzcyhH
UFJJbmZvOjp3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlciwgSW5zdGFuY2U6Om9mZnNldE9mTWVt
b3J5KCkpLCB3YXNtU2NyYXRjaEdQUik7CiAgICAgbV9qaXQubG9hZFB0cihBZGRyZXNzKHdhc21T
Y3JhdGNoR1BSLCBNZW1vcnk6Om9mZnNldE9mSGFuZGxlKCkpLCB3YXNtU2NyYXRjaEdQUik7CiAg
ICAgbV9qaXQubG9hZFB0cihBZGRyZXNzKHdhc21TY3JhdGNoR1BSLCBCdWZmZXJNZW1vcnlIYW5k
bGU6Om9mZnNldE9mU2l6ZSgpKSwgd2FzbVNjcmF0Y2hHUFIpOwogCkBAIC0xNDAxLDcgKzE0MDEs
OCBAQCBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBCQlFKSVQ6OmFkZEFycmF5TmV3
RGVmYXVsdCh1aW50MzJfdCB0eXBlSW5kZXgsCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBC
QlFKSVQ6OnB1c2hBcnJheU5ld0Zyb21TZWdtZW50KEFycmF5U2VnbWVudE9wZXJhdGlvbiBvcGVy
YXRpb24sIHVpbnQzMl90IHR5cGVJbmRleCwgdWludDMyX3Qgc2VnbWVudEluZGV4LCBFeHByZXNz
aW9uVHlwZSBhcnJheVNpemUsIEV4cHJlc3Npb25UeXBlIG9mZnNldCwgRXhjZXB0aW9uVHlwZSBl
eGNlcHRpb25UeXBlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQordXNpbmcgYXJyYXlTZWdtZW50
T3BlcmF0aW9uID0gRW5jb2RlZEpTVmFsdWUgU1lTVl9BQkkgKCYpKEpTQzo6V2FzbTo6SW5zdGFu
Y2UqLCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50MzJfdCk7Cit2b2lkIEJCUUpJ
VDo6cHVzaEFycmF5TmV3RnJvbVNlZ21lbnQoYXJyYXlTZWdtZW50T3BlcmF0aW9uIG9wZXJhdGlv
biwgdWludDMyX3QgdHlwZUluZGV4LCB1aW50MzJfdCBzZWdtZW50SW5kZXgsIEV4cHJlc3Npb25U
eXBlIGFycmF5U2l6ZSwgRXhwcmVzc2lvblR5cGUgb2Zmc2V0LCBFeGNlcHRpb25UeXBlIGV4Y2Vw
dGlvblR5cGUsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCiB7CiAgICAgVmVjdG9yPFZhbHVlLCA4
PiBhcmd1bWVudHMgPSB7CiAgICAgICAgIGluc3RhbmNlVmFsdWUoKSwKQEAgLTI5NjgsNyArMjk2
OSw3IEBAIENvbnRyb2xEYXRhIFdBUk5fVU5VU0VEX1JFVFVSTiBCQlFKSVQ6OmFkZFRvcExldmVs
KEJsb2NrU2lnbmF0dXJlIHNpZ25hdHVyZSkKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBvdmVyZmxvdzsKICAgICBvdmVyZmxvdy5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKENDYWxsSGVs
cGVyczo6QWJvdmUsIHdhc21TY3JhdGNoR1BSLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcikp
OwotICAgIG92ZXJmbG93LmFwcGVuZChtX2ppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpCZWxv
dywgd2FzbVNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjp3YXNtQ29u
dGV4dEluc3RhbmNlUG9pbnRlciwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZlNvZnRT
dGFja0xpbWl0KCkpKSk7CisgICAgb3ZlcmZsb3cuYXBwZW5kKG1faml0LmJyYW5jaFB0cihDQ2Fs
bEhlbHBlcnM6OkJlbG93LCB3YXNtU2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQ
UkluZm86Ondhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyLCBJbnN0YW5jZTo6b2Zmc2V0T2ZTb2Z0
U3RhY2tMaW1pdCgpKSkpOwogICAgIG92ZXJmbG93LmxpbmtUaHVuayhDb2RlTG9jYXRpb25MYWJl
bDxKSVRUaHVua1B0clRhZz4oVGh1bmtzOjpzaW5nbGV0b24oKS5zdHViKHRocm93U3RhY2tPdmVy
Zmxvd0Zyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSksICZtX2ppdCk7CiAKICAgICBtX2pp
dC5tb3ZlKHdhc21TY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOwpAQCAtMzEyOCw3ICszMTI5LDcgQEAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIEJCUUpJVDo6
YWRkTG9vcE9TUkVudHJ5cG9pbnQoKQogICAgICAgICAvLyBzaW5jZSB3ZSBhbHJlYWR5IHJlcGxh
Y2VkIGNhbGxlZS4gU28sIHdlIGp1c3QgYXNzZXJ0IHRoYXQgdGhpcyBjYXNlIGRvZXNuJ3QgaGFw
cGVuIHRvIGF2b2lkIHJlYWRpbmcgYSBjb3JydXB0ZWQgZnJhbWUgZnJvbSB0aGUgYmJxIGNhdGNo
IGhhbmRsZXIuCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG92ZXJmbG93OwogICAgIG92
ZXJmbG93LmFwcGVuZChtX2ppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwgTWFjcm9B
c3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
cikpOwotICAgIG92ZXJmbG93LmFwcGVuZChtX2ppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpC
ZWxvdywgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIsIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6b2Zmc2V0T2ZTb2Z0U3RhY2tMaW1pdCgpKSkpOworICAgIG92ZXJmbG93LmFw
cGVuZChtX2ppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpCZWxvdywgTWFjcm9Bc3NlbWJsZXI6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6d2Fz
bUNvbnRleHRJbnN0YW5jZVBvaW50ZXIsIEluc3RhbmNlOjpvZmZzZXRPZlNvZnRTdGFja0xpbWl0
KCkpKSk7CiAgICAgb3ZlcmZsb3cubGlua1RodW5rKENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5r
UHRyVGFnPihUaHVua3M6OnNpbmdsZXRvbigpLnN0dWIoY3Jhc2hEdWVUb0JCUVN0YWNrT3ZlcmZs
b3dHZW5lcmF0b3IpLmNvZGUoKSksICZtX2ppdCk7CiAKICAgICAvLyBUaGlzIG9wZXJhdGlvbiBz
aHVmZmxlcyBhcm91bmQgdmFsdWVzIG9uIHRoZSBzdGFjaywgdW50aWwgZXZlcnl0aGluZyBpcyBp
biB0aGUgcmlnaHQgcGxhY2UuIFRoZW4sCkBAIC0zODMxLDcgKzM4MzIsNyBAQCB2b2lkIEJCUUpJ
VDo6cmVzdG9yZVdlYkFzc2VtYmx5Q29udGV4dEluc3RhbmNlKCkKIAogdm9pZCBCQlFKSVQ6Omxv
YWRXZWJBc3NlbWJseUdsb2JhbFN0YXRlKEdQUlJlZyB3YXNtQmFzZU1lbW9yeVBvaW50ZXIsIEdQ
UlJlZyB3YXNtQm91bmRzQ2hlY2tpbmdTaXplUmVnaXN0ZXIpCiB7Ci0gICAgbV9qaXQubG9hZFBh
aXJQdHIoR1BSSW5mbzo6d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIsIFRydXN0ZWRJbW0zMihK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCB3YXNtQmFzZU1l
bW9yeVBvaW50ZXIsIHdhc21Cb3VuZHNDaGVja2luZ1NpemVSZWdpc3Rlcik7CisgICAgbV9qaXQu
bG9hZFBhaXJQdHIoR1BSSW5mbzo6d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIsIFRydXN0ZWRJ
bW0zMihJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIHdhc21CYXNlTWVtb3J5UG9p
bnRlciwgd2FzbUJvdW5kc0NoZWNraW5nU2l6ZVJlZ2lzdGVyKTsKICAgICBtX2ppdC5jYWdlQ29u
ZGl0aW9uYWxseShHaWdhY2FnZTo6UHJpbWl0aXZlLCB3YXNtQmFzZU1lbW9yeVBvaW50ZXIsIHdh
c21Cb3VuZHNDaGVja2luZ1NpemVSZWdpc3Rlciwgd2FzbVNjcmF0Y2hHUFIpOwogfQogCkBAIC0z
OTk4LDkgKzM5OTksOSBAQCBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VEX1JFVFVSTiBCQlFKSVQ6
OmFkZENhbGwodW5zaWduZWQgZnVuY3Rpb25JbmRleCwgY29uc3QgVAogICAgIHNhdmVWYWx1ZXNB
Y3Jvc3NDYWxsQW5kUGFzc0FyZ3VtZW50cyhhcmd1bWVudHMsIGNhbGxJbmZvLCBzaWduYXR1cmUp
OwogCiAgICAgaWYgKG1faW5mby5pc0ltcG9ydGVkRnVuY3Rpb25Gcm9tRnVuY3Rpb25JbmRleFNw
YWNlKGZ1bmN0aW9uSW5kZXgpKSB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6SW1wb3J0RnVuY3Rpb25JbmZvKSAqIG1heEltcG9ydHMgPCBzdGQ6
Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvblN0dWIoZnVuY3Rp
b25JbmRleCkgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSk7Ci0gICAgICAg
IG1faml0LmxvYWRQdHIoQWRkcmVzcyhHUFJJbmZvOjp3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRl
ciwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkltcG9ydEZ1bmN0aW9uU3R1YihmdW5j
dGlvbkluZGV4KSksIHdhc21TY3JhdGNoR1BSKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXpl
b2YoSW5zdGFuY2U6OkltcG9ydEZ1bmN0aW9uSW5mbykgKiBtYXhJbXBvcnRzIDwgc3RkOjpudW1l
cmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChJbnN0
YW5jZTo6b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvblN0dWIoZnVuY3Rpb25JbmRleCkgPCBzdGQ6Om51
bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSk7CisgICAgICAgIG1faml0LmxvYWRQdHIoQWRk
cmVzcyhHUFJJbmZvOjp3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlciwgSW5zdGFuY2U6Om9mZnNl
dE9mSW1wb3J0RnVuY3Rpb25TdHViKGZ1bmN0aW9uSW5kZXgpKSwgd2FzbVNjcmF0Y2hHUFIpOwog
CiAgICAgICAgIG1faml0LmNhbGwod2FzbVNjcmF0Y2hHUFIsIFdhc21FbnRyeVB0clRhZyk7CiAg
ICAgfSBlbHNlIHsKQEAgLTQwMjgsNiArNDAyOSw3IEBAIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIEJCUUpJVDo6YWRkQ2FsbCh1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCBjb25zdCBU
CiB2b2lkIEJCUUpJVDo6ZW1pdEluZGlyZWN0Q2FsbChjb25zdCBjaGFyKiBvcGNvZGUsIGNvbnN0
IFZhbHVlJiBjYWxsZWVJbmRleCwgR1BSUmVnIGNhbGxlZUluc3RhbmNlLCBHUFJSZWcgY2FsbGVl
Q29kZSwgR1BSUmVnIGpzQ2FsbGVlQW5jaG9yLCBjb25zdCBUeXBlRGVmaW5pdGlvbiYgc2lnbmF0
dXJlLCBWZWN0b3I8VmFsdWU+JiBhcmd1bWVudHMsIFJlc3VsdExpc3QmIHJlc3VsdHMsIENhbGxU
eXBlIGNhbGxUeXBlKQogewogICAgIC8vIFRPRE86IFN1cHBvcnQgdGFpbCBjYWxscworICAgIFVO
VVNFRF9QQVJBTShqc0NhbGxlZUFuY2hvcik7CiAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbFR5cGUg
PT0gQ2FsbFR5cGU6OkNhbGwpOwogICAgIEFTU0VSVCghUmVnaXN0ZXJTZXRCdWlsZGVyOjphcmd1
bWVudEdQUlMoKS5jb250YWlucyhjYWxsZWVDb2RlLCBJZ25vcmVWZWN0b3JzKSk7CiAKQEAgLTQx
MzEsNyArNDEzMyw3IEBAIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIEJCUUpJVDo6
YWRkQ2FsbEluZGlyZWN0KHVuc2lnbmVkIHRhYmxlSW5kZXgsIGNvCiAgICAgICAgICAgICBBU1NF
UlQodGFibGVJbmRleCA8IG1faW5mby50YWJsZUNvdW50KCkpOwogCiAgICAgICAgICAgICBpbnQg
bnVtSW1wb3J0RnVuY3Rpb25zID0gbV9pbmZvLmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKLSAgICAg
ICAgICAgIG1faml0LmxvYWRQdHIoQWRkcmVzcyhHUFJJbmZvOjp3YXNtQ29udGV4dEluc3RhbmNl
UG9pbnRlciwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZlRhYmxlUHRyKG51bUltcG9y
dEZ1bmN0aW9ucywgdGFibGVJbmRleCkpLCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoKTsK
KyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoQWRkcmVzcyhHUFJJbmZvOjp3YXNtQ29udGV4dElu
c3RhbmNlUG9pbnRlciwgSW5zdGFuY2U6Om9mZnNldE9mVGFibGVQdHIobnVtSW1wb3J0RnVuY3Rp
b25zLCB0YWJsZUluZGV4KSksIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJMZW5ndGgpOwogICAgICAg
ICAgICAgYXV0byYgdGFibGVJbmZvcm1hdGlvbiA9IG1faW5mby50YWJsZSh0YWJsZUluZGV4KTsK
ICAgICAgICAgICAgIGlmICh0YWJsZUluZm9ybWF0aW9uLm1heGltdW0oKSAmJiB0YWJsZUluZm9y
bWF0aW9uLm1heGltdW0oKS52YWx1ZSgpID09IHRhYmxlSW5mb3JtYXRpb24uaW5pdGlhbCgpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKCF0YWJsZUluZm9ybWF0aW9uLmlzSW1wb3J0KCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRSklULmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRSklULmgKaW5kZXggNmMzNDViZWJhNTkyLi4zOGVj
YzJhNjFmODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFK
SVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRSklULmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
MTcxLDggKzExNzEsOCBAQCBwdWJsaWM6CiAKICAgICBQYXJ0aWFsUmVzdWx0IFdBUk5fVU5VU0VE
X1JFVFVSTiBhZGRBcnJheU5ld0RlZmF1bHQodWludDMyX3QgdHlwZUluZGV4LCBFeHByZXNzaW9u
VHlwZSBzaXplLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKIAotICAgIHVzaW5nIEFycmF5U2Vn
bWVudE9wZXJhdGlvbiA9IEVuY29kZWRKU1ZhbHVlIFNZU1ZfQUJJICgmKShKU0M6OkpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSosIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90KTsK
LSAgICB2b2lkIHB1c2hBcnJheU5ld0Zyb21TZWdtZW50KEFycmF5U2VnbWVudE9wZXJhdGlvbiBv
cGVyYXRpb24sIHVpbnQzMl90IHR5cGVJbmRleCwgdWludDMyX3Qgc2VnbWVudEluZGV4LCBFeHBy
ZXNzaW9uVHlwZSBhcnJheVNpemUsIEV4cHJlc3Npb25UeXBlIG9mZnNldCwgRXhjZXB0aW9uVHlw
ZSBleGNlcHRpb25UeXBlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKKyAgICB1c2luZyBhcnJh
eVNlZ21lbnRPcGVyYXRpb24gPSBFbmNvZGVkSlNWYWx1ZSBTWVNWX0FCSSAoJikoSlNDOjpXYXNt
OjpJbnN0YW5jZSosIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90KTsKKyAg
ICB2b2lkIHB1c2hBcnJheU5ld0Zyb21TZWdtZW50KGFycmF5U2VnbWVudE9wZXJhdGlvbiBvcGVy
YXRpb24sIHVpbnQzMl90IHR5cGVJbmRleCwgdWludDMyX3Qgc2VnbWVudEluZGV4LCBFeHByZXNz
aW9uVHlwZSBhcnJheVNpemUsIEV4cHJlc3Npb25UeXBlIG9mZnNldCwgRXhjZXB0aW9uVHlwZSBl
eGNlcHRpb25UeXBlLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KTsKIAogICAgIFBhcnRpYWxSZXN1
bHQgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFycmF5TmV3RGF0YSh1aW50MzJfdCB0eXBlSW5kZXgs
IHVpbnQzMl90IGRhdGFJbmRleCwgRXhwcmVzc2lvblR5cGUgYXJyYXlTaXplLCBFeHByZXNzaW9u
VHlwZSBvZmZzZXQsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRSklUMzJfNjQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUJCUUpJVDMyXzY0LmNwcAppbmRleCBlYWVmNDRkYTQyMzAuLjIx
NDQwMDRkNDA0YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJC
UUpJVDMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRSklU
MzJfNjQuY3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2lu
Y2x1ZGUgIldhc21GdW5jdGlvblBhcnNlci5oIgogI2luY2x1ZGUgIldhc21JUkdlbmVyYXRvckhl
bHBlcnMuaCIKKyNpbmNsdWRlICJXYXNtSW5zdGFuY2UuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5
SW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJXYXNtTW9kdWxlLmgiCiAjaW5jbHVkZSAiV2FzbU1v
ZHVsZUluZm9ybWF0aW9uLmgiCkBAIC0yMzYsNyArMjM3LDcgQEAgUGFydGlhbFJlc3VsdCBXQVJO
X1VOVVNFRF9SRVRVUk4gQkJRSklUOjpnZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIFZhbHVlJiBy
ZXN1bHQKICAgICBjb25zdCBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbiYgZ2xvYmFsID0gbV9pbmZv
Lmdsb2JhbHNbaW5kZXhdOwogICAgIFR5cGUgdHlwZSA9IGdsb2JhbC50eXBlOwogCi0gICAgaW50
MzJfdCBvZmZzZXQgPSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mR2xvYmFsUHRyKG1f
aW5mby5pbXBvcnRGdW5jdGlvbkNvdW50KCksIG1faW5mby50YWJsZUNvdW50KCksIGluZGV4KTsK
KyAgICBpbnQzMl90IG9mZnNldCA9IEluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbFB0cihtX2luZm8u
aW1wb3J0RnVuY3Rpb25Db3VudCgpLCBtX2luZm8udGFibGVDb3VudCgpLCBpbmRleCk7CiAgICAg
VmFsdWUgZ2xvYmFsVmFsdWUgPSBWYWx1ZTo6cGlubmVkKHR5cGUua2luZCwgTG9jYXRpb246OmZy
b21HbG9iYWwob2Zmc2V0KSk7CiAKICAgICBzd2l0Y2ggKGdsb2JhbC5iaW5kaW5nTW9kZSkgewpA
QCAtMzA0LDE1ICszMDUsMTcgQEAgUGFydGlhbFJlc3VsdCBXQVJOX1VOVVNFRF9SRVRVUk4gQkJR
SklUOjpzZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIFZhbHVlIHZhbHVlKQogICAgIGNvbnN0IFdh
c206Okdsb2JhbEluZm9ybWF0aW9uJiBnbG9iYWwgPSBtX2luZm8uZ2xvYmFsc1tpbmRleF07CiAg
ICAgVHlwZSB0eXBlID0gZ2xvYmFsLnR5cGU7CiAKLSAgICBpbnQzMl90IG9mZnNldCA9IEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxQdHIobV9pbmZvLmltcG9ydEZ1bmN0aW9u
Q291bnQoKSwgbV9pbmZvLnRhYmxlQ291bnQoKSwgaW5kZXgpOworICAgIGludDMyX3Qgb2Zmc2V0
ID0gSW5zdGFuY2U6Om9mZnNldE9mR2xvYmFsUHRyKG1faW5mby5pbXBvcnRGdW5jdGlvbkNvdW50
KCksIG1faW5mby50YWJsZUNvdW50KCksIGluZGV4KTsKICAgICBMb2NhdGlvbiB2YWx1ZUxvY2F0
aW9uID0gbG9jYXRpb25PZih2YWx1ZSk7CiAKICAgICBzd2l0Y2ggKGdsb2JhbC5iaW5kaW5nTW9k
ZSkgewogICAgIGNhc2UgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246OkJpbmRpbmdNb2RlOjpFbWJl
ZGRlZEluSW5zdGFuY2U6IHsKICAgICAgICAgZW1pdE1vdmUodmFsdWUsIExvY2F0aW9uOjpmcm9t
R2xvYmFsKG9mZnNldCkpOwogICAgICAgICBjb25zdW1lKHZhbHVlKTsKLSAgICAgICAgaWYgKGlz
UmVmVHlwZSh0eXBlKSkKKyAgICAgICAgaWYgKGlzUmVmVHlwZSh0eXBlKSkgeworICAgICAgICAg
ICAgbV9qaXQubG9hZDMyKEFkZHJlc3MoR1BSSW5mbzo6d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50
ZXIsIEluc3RhbmNlOjpvZmZzZXRPZk93bmVyKCkpLCB3YXNtU2NyYXRjaEdQUik7CiAgICAgICAg
ICAgICBlbWl0V3JpdGVCYXJyaWVyKHdhc21TY3JhdGNoR1BSKTsKKyAgICAgICAgfQogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgY2FzZSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6QmluZGlu
Z01vZGU6OlBvcnRhYmxlOiB7CkBAIC0zNDkwLDcgKzM0OTMsOCBAQCBQYXJ0aWFsUmVzdWx0IFdB
Uk5fVU5VU0VEX1JFVFVSTiBCQlFKSVQ6OmFkZENhbGxSZWYoY29uc3QgVHlwZURlZmluaXRpb24m
IG9yaWdpbgogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
Y2FsbGVlUHRyLCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6b2Zmc2V0T2ZJbnN0YW5jZSgpKSwg
anNDYWxsZWVBbmNob3IpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGNhbGxlZVB0ciwgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6Om9mZnNldE9mRW50cnlw
b2ludExvYWRMb2NhdGlvbigpKSwgY2FsbGVlQ29kZSk7Ci0gICAgICAgIG1faml0Lm1vdmUoanND
YWxsZWVBbmNob3IsIGNhbGxlZUluc3RhbmNlKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhqc0NhbGxlZUFuY2hvciwgSlNXZWJBc3NlbWJseUluc3RhbmNl
OjpvZmZzZXRPZkluc3RhbmNlKCkpLCBjYWxsZWVJbnN0YW5jZSk7CisKICAgICB9CiAKICAgICBl
bWl0SW5kaXJlY3RDYWxsKCJDYWxsUmVmIiwgY2FsbGVlLCBjYWxsZWVJbnN0YW5jZSwgY2FsbGVl
Q29kZSwganNDYWxsZWVBbmNob3IsIHNpZ25hdHVyZSwgYXJncywgcmVzdWx0cywgQ2FsbFR5cGU6
OkNhbGwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUUpJ
VDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFKSVQ2NC5jcHAKaW5k
ZXggOGMyMmE3OWIyNjlkLi4xOTY1MjJiYjFkMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CQlFKSVQ2NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUJCUUpJVDY0LmNwcApAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIldhc21G
b3JtYXQuaCIKICNpbmNsdWRlICJXYXNtRnVuY3Rpb25QYXJzZXIuaCIKICNpbmNsdWRlICJXYXNt
SVJHZW5lcmF0b3JIZWxwZXJzLmgiCisjaW5jbHVkZSAiV2FzbUluc3RhbmNlLmgiCiAjaW5jbHVk
ZSAiV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiV2FzbU1vZHVsZS5oIgogI2lu
Y2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgpAQCAtMTg3LDcgKzE4OCw3IEBAIFBhcnRp
YWxSZXN1bHQgV0FSTl9VTlVTRURfUkVUVVJOIEJCUUpJVDo6Z2V0R2xvYmFsKHVpbnQzMl90IGlu
ZGV4LCBWYWx1ZSYgcmVzdWx0CiAgICAgY29uc3QgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb24mIGds
b2JhbCA9IG1faW5mby5nbG9iYWxzW2luZGV4XTsKICAgICBUeXBlIHR5cGUgPSBnbG9iYWwudHlw
ZTsKIAotICAgIGludDMyX3Qgb2Zmc2V0ID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRP
Zkdsb2JhbFB0cihtX2luZm8uaW1wb3J0RnVuY3Rpb25Db3VudCgpLCBtX2luZm8udGFibGVDb3Vu
dCgpLCBpbmRleCk7CisgICAgaW50MzJfdCBvZmZzZXQgPSBJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9i
YWxQdHIobV9pbmZvLmltcG9ydEZ1bmN0aW9uQ291bnQoKSwgbV9pbmZvLnRhYmxlQ291bnQoKSwg
aW5kZXgpOwogICAgIFZhbHVlIGdsb2JhbFZhbHVlID0gVmFsdWU6OnBpbm5lZCh0eXBlLmtpbmQs
IExvY2F0aW9uOjpmcm9tR2xvYmFsKG9mZnNldCkpOwogCiAgICAgc3dpdGNoIChnbG9iYWwuYmlu
ZGluZ01vZGUpIHsKQEAgLTI1MiwxNSArMjUzLDE3IEBAIFBhcnRpYWxSZXN1bHQgV0FSTl9VTlVT
RURfUkVUVVJOIEJCUUpJVDo6c2V0R2xvYmFsKHVpbnQzMl90IGluZGV4LCBWYWx1ZSB2YWx1ZSkK
ICAgICBjb25zdCBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbiYgZ2xvYmFsID0gbV9pbmZvLmdsb2Jh
bHNbaW5kZXhdOwogICAgIFR5cGUgdHlwZSA9IGdsb2JhbC50eXBlOwogCi0gICAgaW50MzJfdCBv
ZmZzZXQgPSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mR2xvYmFsUHRyKG1faW5mby5p
bXBvcnRGdW5jdGlvbkNvdW50KCksIG1faW5mby50YWJsZUNvdW50KCksIGluZGV4KTsKKyAgICBp
bnQzMl90IG9mZnNldCA9IEluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbFB0cihtX2luZm8uaW1wb3J0
RnVuY3Rpb25Db3VudCgpLCBtX2luZm8udGFibGVDb3VudCgpLCBpbmRleCk7CiAgICAgTG9jYXRp
b24gdmFsdWVMb2NhdGlvbiA9IGxvY2F0aW9uT2YodmFsdWUpOwogCiAgICAgc3dpdGNoIChnbG9i
YWwuYmluZGluZ01vZGUpIHsKICAgICBjYXNlIFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpCaW5k
aW5nTW9kZTo6RW1iZWRkZWRJbkluc3RhbmNlOiB7CiAgICAgICAgIGVtaXRNb3ZlKHZhbHVlLCBM
b2NhdGlvbjo6ZnJvbUdsb2JhbChvZmZzZXQpKTsKICAgICAgICAgY29uc3VtZSh2YWx1ZSk7Ci0g
ICAgICAgIGlmIChpc1JlZlR5cGUodHlwZSkpCi0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVy
KEdQUkluZm86Ondhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyKTsKKyAgICAgICAgaWYgKGlzUmVm
VHlwZSh0eXBlKSkgeworICAgICAgICAgICAgbV9qaXQubG9hZDY0KEFkZHJlc3MoR1BSSW5mbzo6
d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIsIEluc3RhbmNlOjpvZmZzZXRPZk93bmVyKCkpLCB3
YXNtU2NyYXRjaEdQUik7CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHdhc21TY3JhdGNo
R1BSKTsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBXYXNtOjpH
bG9iYWxJbmZvcm1hdGlvbjo6QmluZGluZ01vZGU6OlBvcnRhYmxlOiB7CkBAIC0zMTE4LDcgKzMx
MjEsNyBAQCB2b2lkIEJCUUpJVDo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGVBZnRlcldh
c21DYWxsKCkKICAgICAgICAgbV9qaXQubG9hZFB0cihBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
d2FzbVNjcmF0Y2hHUFIpOwogICAgICAgICBKdW1wIGlzU2FtZUluc3RhbmNlQWZ0ZXIgPSBtX2pp
dC5icmFuY2hQdHIoUmVsYXRpb25hbENvbmRpdGlvbjo6RXF1YWwsIHdhc21TY3JhdGNoR1BSLCBH
UFJJbmZvOjp3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcik7CiAgICAgICAgIG1faml0Lm1vdmUo
d2FzbVNjcmF0Y2hHUFIsIEdQUkluZm86Ondhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyKTsKLSAg
ICAgICAgbV9qaXQubG9hZFBhaXJQdHIoR1BSSW5mbzo6d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50
ZXIsIFRydXN0ZWRJbW0zMihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVt
b3J5KCkpLCB3YXNtQmFzZU1lbW9yeVBvaW50ZXIsIHdhc21Cb3VuZHNDaGVja2luZ1NpemVSZWdp
c3Rlcik7CisgICAgICAgIG1faml0LmxvYWRQYWlyUHRyKEdQUkluZm86Ondhc21Db250ZXh0SW5z
dGFuY2VQb2ludGVyLCBUcnVzdGVkSW1tMzIoSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5
KCkpLCB3YXNtQmFzZU1lbW9yeVBvaW50ZXIsIHdhc21Cb3VuZHNDaGVja2luZ1NpemVSZWdpc3Rl
cik7CiAgICAgICAgIG1faml0LmNhZ2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUs
IHdhc21CYXNlTWVtb3J5UG9pbnRlciwgd2FzbUJvdW5kc0NoZWNraW5nU2l6ZVJlZ2lzdGVyLCB3
YXNtU2NyYXRjaEdQUik7CiAgICAgICAgIGlzU2FtZUluc3RhbmNlQWZ0ZXIubGluaygmbV9qaXQp
OwogICAgIH0gZWxzZQpAQCAtNDU4OSw3ICs0NTkyLDcgQEAgUGFydGlhbFJlc3VsdCBXQVJOX1VO
VVNFRF9SRVRVUk4gQkJRSklUOjphZGRDYWxsUmVmKGNvbnN0IFR5cGVEZWZpbml0aW9uJiBvcmln
aW4KIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNhbGxl
ZVB0ciwgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6Om9mZnNldE9mSW5zdGFuY2UoKSksIGpzQ2Fs
bGVlQW5jaG9yKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhjYWxsZWVQdHIsIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpvZmZzZXRPZkVudHJ5cG9pbnRM
b2FkTG9jYXRpb24oKSksIGNhbGxlZUNvZGUpOwotICAgICAgICBtX2ppdC5tb3ZlKGpzQ2FsbGVl
QW5jaG9yLCBjYWxsZWVJbnN0YW5jZSk7CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoanNDYWxsZWVBbmNob3IsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zm
c2V0T2ZJbnN0YW5jZSgpKSwgY2FsbGVlSW5zdGFuY2UpOwogCiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKaW5kZXggYjE1NTU2YTQ4YmI2Li45Yzcw
YmEzOWY2NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5k
aW5nLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMCw5ICszMCw5IEBACiAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRl
ICJEaXNhbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKLSNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiV2Fz
bUNhbGxpbmdDb252ZW50aW9uLmgiCisjaW5jbHVkZSAiV2FzbUluc3RhbmNlLmgiCiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKQEAgLTQ5LDI1ICs0OSwyNCBAQCBFeHBlY3Rl
ZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+
IHdhc21Ub1dhc20odW5zaQogICAgIEFTU0VSVChub092ZXJsYXAoc2NyYXRjaCwgR1BSSW5mbzo6
d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIpKTsKIAogICAgIEpJVF9DT01NRU5UKGppdCwgIlN0
b3JlIENhbGxlZSdzIHdhc20gY2FsbGVlIGZvciBpbXBvcnQgZnVuY3Rpb24gIiwgaW1wb3J0SW5k
ZXgpOwotICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhHUFJJbmZvOjp3YXNtQ29udGV4dElu
c3RhbmNlUG9pbnRlciwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkJveGVkVGFyZ2V0
Q2FsbGVlTG9hZExvY2F0aW9uKGltcG9ydEluZGV4KSksIHNjcmF0Y2gpOworICAgIGppdC5sb2Fk
UHRyKEpJVDo6QWRkcmVzcyhHUFJJbmZvOjp3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlciwgSW5z
dGFuY2U6Om9mZnNldE9mQm94ZWRUYXJnZXRDYWxsZWVMb2FkTG9jYXRpb24oaW1wb3J0SW5kZXgp
KSwgc2NyYXRjaCk7CiAgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKHNjcmF0Y2gpLCBzY3Jh
dGNoKTsKICAgICAvLyBXZSBhcmUgaGFsZndheSBiZXR3ZWVuIGJlaW5nIHRoZSBjYWxsZXIgYW5k
IHRoZSBjYWxsZWU6IHdlIGhhdmUgYWxyZWFkeSBtYWRlIHRoZSBjYWxsLCBidXQgbm90IHlldCBj
b21wbGV0ZWQgdGhlIHByb2xvZ3VlLgogICAgIC8vIE9uIEFSTTY0IHRoaXMgZG9lc24ndCByZWFs
bHkgbWF0dGVyLCBidXQgb24gaW50ZWwgd2UgbmVlZCB0byB3b3JyeSBhYm91dCB0aGUgcHVzaGVk
IHBjLgogICAgIGppdC5zdG9yZVdhc21DYWxsZWVDYWxsZWUoc2NyYXRjaCwgc2FmZUNhc3Q8aW50
PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpIC0gc2FmZUNhc3Q8aW50Pihwcm9sb2d1ZVN0YWNr
UG9pbnRlckRlbHRhKCkpKTsKIAotICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIGEgbG9hZCBw
YWlyLgogICAgIC8vIEIzJ3MgY2FsbCBjb2RlZ2VuIGVuc3VyZXMgdGhhdCB0aGUgSlNDZWxsIGlz
IGEgV2ViQXNzZW1ibHlGdW5jdGlvbi4KICAgICAvLyBXaGlsZSB3ZSdyZSBhY2Nlc3NpbmcgdGhh
dCBjYWNoZWxpbmUsIGFsc28gZ2V0IHRoZSB3YXNtIGVudHJ5cG9pbnQgc28gd2UgY2FuIHRhaWwg
Y2FsbCB0byBpdCBiZWxvdy4KLSAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6
d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0
T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbihpbXBvcnRJbmRleCkpLCBzY3JhdGNoKTsKLSAg
ICAvLyBHZXQgdGhlIGNhbGxlZSdzIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSBhbmQgc2V0IGl0IGFz
IFdhc21Db250ZXh0J3MgaW5zdGFuY2UuIFRoZSBjYWxsZXIgd2lsbCB0YWtlIGNhcmUgb2YgcmVz
dG9yaW5nIGl0cyBvd24gSlNXZWJBc3NlbWJseUluc3RhbmNlLgorICAgIGppdC5sb2FkUHRyKEpJ
VDo6QWRkcmVzcyhHUFJJbmZvOjp3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlciwgSW5zdGFuY2U6
Om9mZnNldE9mV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24oaW1wb3J0SW5kZXgpKSwgc2NyYXRj
aCk7CisgICAgLy8gR2V0IHRoZSBjYWxsZWUncyBXYXNtOjpJbnN0YW5jZSBhbmQgc2V0IGl0IGFz
IFdhc21Db250ZXh0J3MgaW5zdGFuY2UuIFRoZSBjYWxsZXIgd2lsbCB0YWtlIGNhcmUgb2YgcmVz
dG9yaW5nIGl0cyBvd24gSW5zdGFuY2UuCiAgICAgLy8gVGhpcyBzd2l0Y2hlcyB0aGUgY3VycmVu
dCBpbnN0YW5jZS4KLSAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6d2FzbUNv
bnRleHRJbnN0YW5jZVBvaW50ZXIsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZUYXJn
ZXRJbnN0YW5jZShpbXBvcnRJbmRleCkpLCBHUFJJbmZvOjp3YXNtQ29udGV4dEluc3RhbmNlUG9p
bnRlcik7IC8vIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSouCisgICAgaml0LmxvYWRQdHIoSklUOjpB
ZGRyZXNzKEdQUkluZm86Ondhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyLCBJbnN0YW5jZTo6b2Zm
c2V0T2ZUYXJnZXRJbnN0YW5jZShpbXBvcnRJbmRleCkpLCBHUFJJbmZvOjp3YXNtQ29udGV4dElu
c3RhbmNlUG9pbnRlcik7IC8vIEluc3RhbmNlKi4KIAogI2lmICFDUFUoQVJNKSAvLyBBUk0gaGFz
IG5vIHBpbm5lZCByZWdpc3RlcnMgZm9yIFdhc20gTWVtb3J5LCBzbyBubyBuZWVkIHRvIHNldCB0
aGVtIHVwCi0gICAgLy8gRklYTUUgdGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgdGhhdCBhbGwg
SlNXZWJBc3NlbWJseUluc3RhbmNlIGhhdmUgdGhlIHNhbWUgcGlubmVkIHJlZ2lzdGVycy4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjk1MgorICAgIC8vIEZJWE1F
IHRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHRoYXQgYWxsIFdhc206Okluc3RhbmNlIGhhdmUg
dGhlIHNhbWUgcGlubmVkIHJlZ2lzdGVycy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2Mjk1MgogICAgIC8vIFNldCB1cCB0aGUgY2FsbGVlJ3MgYmFzZU1lbW9yeVBv
aW50ZXIgcmVnaXN0ZXIgYXMgd2VsbCBhcyB0aGUgbWVtb3J5IHNpemUgcmVnaXN0ZXJzLgogICAg
IHsKLSAgICAgICAgaml0LmxvYWRQYWlyUHRyKEdQUkluZm86Ondhc21Db250ZXh0SW5zdGFuY2VQ
b2ludGVyLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBHUFJJbmZvOjp3YXNtQmFzZU1lbW9yeVBvaW50ZXIs
IEdQUkluZm86Ondhc21Cb3VuZHNDaGVja2luZ1NpemVSZWdpc3Rlcik7CisgICAgICAgIGppdC5s
b2FkUGFpclB0cihHUFJJbmZvOjp3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlciwgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkp
LCBHUFJJbmZvOjp3YXNtQmFzZU1lbW9yeVBvaW50ZXIsIEdQUkluZm86Ondhc21Cb3VuZHNDaGVj
a2luZ1NpemVSZWdpc3Rlcik7CiAgICAgICAgIGppdC5jYWdlQ29uZGl0aW9uYWxseShHaWdhY2Fn
ZTo6UHJpbWl0aXZlLCBHUFJJbmZvOjp3YXNtQmFzZU1lbW9yeVBvaW50ZXIsIEdQUkluZm86Ondh
c21Cb3VuZHNDaGVja2luZ1NpemVSZWdpc3Rlciwgd2FzbUNhbGxpbmdDb252ZW50aW9uKCkucHJv
bG9ndWVTY3JhdGNoR1BSc1sxXSk7CiAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21DYWxsZWUuY3BwCmluZGV4IGRkYWFiMWJiZjYxZS4uNGRkNTA1OWZhNDIxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmNwcApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2NCw3ICsx
NjQsNyBAQCB2b2lkIENhbGxlZTo6ZGVzdHJveShDYWxsZWUqIGNhbGxlZSkKICAgICB9KTsKIH0K
IAotY29uc3QgSGFuZGxlckluZm8qIENhbGxlZTo6aGFuZGxlckZvckluZGV4KEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSYgaW5zdGFuY2UsIHVuc2lnbmVkIGluZGV4LCBjb25zdCBUYWcqIHRhZykKK2Nv
bnN0IEhhbmRsZXJJbmZvKiBDYWxsZWU6OmhhbmRsZXJGb3JJbmRleChJbnN0YW5jZSYgaW5zdGFu
Y2UsIHVuc2lnbmVkIGluZGV4LCBjb25zdCBUYWcqIHRhZykKIHsKICAgICBBU1NFUlQoaGFzRXhj
ZXB0aW9uSGFuZGxlcnMoKSk7CiAgICAgcmV0dXJuIEhhbmRsZXJJbmZvOjpoYW5kbGVyRm9ySW5k
ZXgoaW5zdGFuY2UsIG1fZXhjZXB0aW9uSGFuZGxlcnMsIGluZGV4LCB0YWcpOwpAQCAtMjY1LDcg
KzI2NSw3IEBAIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBJUEludENhbGxlZTo6Y2FsbGVlU2F2ZVJl
Z2lzdGVyc0ltcGwoKQogICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplRmxhZzsK
ICAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplRmxhZywgW10gewogICAgICAgICBSZWdpc3Rl
clNldCByZWdpc3RlcnM7Ci0gICAgICAgIHJlZ2lzdGVycy5hZGQoR1BSSW5mbzo6cmVnQ1MwLCBJ
Z25vcmVWZWN0b3JzKTsgLy8gSlNXZWJBc3NlbWJseUluc3RhbmNlCisgICAgICAgIHJlZ2lzdGVy
cy5hZGQoR1BSSW5mbzo6cmVnQ1MwLCBJZ25vcmVWZWN0b3JzKTsgLy8gV2FzbTo6SW5zdGFuY2UK
ICNpZiBDUFUoWDg2XzY0KQogICAgICAgICByZWdpc3RlcnMuYWRkKEdQUkluZm86OnJlZ0NTMSwg
SWdub3JlVmVjdG9ycyk7IC8vIFBNIChwb2ludGVyIHRvIG1ldGFkYXRhKQogICAgICAgICByZWdp
c3RlcnMuYWRkKEdQUkluZm86OnJlZ0NTMiwgSWdub3JlVmVjdG9ycyk7IC8vIFBCCkBAIC0zMzAs
NyArMzMwLDcgQEAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIExMSW50Q2FsbGVlOjpjYWxsZWVTYXZl
UmVnaXN0ZXJzSW1wbCgpCiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVGbGFn
OwogICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVGbGFnLCBbXSB7CiAgICAgICAgIFJlZ2lz
dGVyU2V0IHJlZ2lzdGVyczsKLSAgICAgICAgcmVnaXN0ZXJzLmFkZChHUFJJbmZvOjpyZWdDUzAs
IElnbm9yZVZlY3RvcnMpOyAvLyBKU1dlYkFzc2VtYmx5SW5zdGFuY2UKKyAgICAgICAgcmVnaXN0
ZXJzLmFkZChHUFJJbmZvOjpyZWdDUzAsIElnbm9yZVZlY3RvcnMpOyAvLyBXYXNtOjpJbnN0YW5j
ZQogI2lmIENQVShYODZfNjQpCiAgICAgICAgIHJlZ2lzdGVycy5hZGQoR1BSSW5mbzo6cmVnQ1My
LCBJZ25vcmVWZWN0b3JzKTsgLy8gUEIKICNlbGlmIENQVShBUk02NCkgfHwgQ1BVKFJJU0NWNjQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgKaW5kZXggMjI5NWViMWIwMjI4
Li40OGY3MDJhYjAwZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21DYWxsZWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2FsbGVlLmgK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2Fs
bGVlU2F2ZVJlZ2lzdGVycygpOwogICAgIHN0ZDo6dHVwbGU8dm9pZCosIHZvaWQqPiByYW5nZSgp
IGNvbnN0OwogCi0gICAgY29uc3QgSGFuZGxlckluZm8qIGhhbmRsZXJGb3JJbmRleChKU1dlYkFz
c2VtYmx5SW5zdGFuY2UmLCB1bnNpZ25lZCwgY29uc3QgVGFnKik7CisgICAgY29uc3QgSGFuZGxl
ckluZm8qIGhhbmRsZXJGb3JJbmRleChJbnN0YW5jZSYsIHVuc2lnbmVkLCBjb25zdCBUYWcqKTsK
IAogICAgIGJvb2wgaGFzRXhjZXB0aW9uSGFuZGxlcnMoKSBjb25zdCB7IHJldHVybiAhbV9leGNl
cHRpb25IYW5kbGVycy5pc0VtcHR5KCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUNvbnN0RXhwckdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQ29uc3RFeHByR2VuZXJhdG9yLmNwcAppbmRleCAwNWEyZDg3NjU1ZTgu
LjE4N2JmNTRhYWY5MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUNvbnN0RXhwckdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUNvbnN0RXhwckdlbmVyYXRvci5jcHAKQEAgLTIwMCw3ICsyMDAsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIEFTU0VSVChtb2RlID09IE1vZGU6OlZhbGlkYXRlKTsKICAgICB9CiAKLSAgICBDb25z
dEV4cHJHZW5lcmF0b3IoTW9kZSBtb2RlLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywg
SlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSkKKyAgICBDb25zdEV4cHJHZW5lcmF0b3Io
TW9kZSBtb2RlLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywgUmVmUHRyPEluc3RhbmNl
PiBpbnN0YW5jZSkKICAgICAgICAgOiBtX21vZGUobW9kZSkKICAgICAgICAgLCBtX2luZm8oaW5m
bykKICAgICAgICAgLCBtX2luc3RhbmNlKGluc3RhbmNlKQpAQCAtMzA1LDkgKzMwNSw5IEBAIHB1
YmxpYzoKICAgICAgICAgVk0mIHZtID0gbV9pbnN0YW5jZS0+dm0oKTsKICAgICAgICAgRW5jb2Rl
ZEpTVmFsdWUgb2JqOwogICAgICAgICBpZiAodmFsdWUudHlwZSgpID09IENvbnN0RXhwclZhbHVl
OjpWZWN0b3IpCi0gICAgICAgICAgICBvYmogPSBhcnJheU5ldyhtX2luc3RhbmNlLCB0eXBlSW5k
ZXgsIHNpemUsIHZhbHVlLmdldFZlY3RvcigpKTsKKyAgICAgICAgICAgIG9iaiA9IGFycmF5TmV3
KG1faW5zdGFuY2UuZ2V0KCksIHR5cGVJbmRleCwgc2l6ZSwgdmFsdWUuZ2V0VmVjdG9yKCkpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBvYmogPSBhcnJheU5ldyhtX2luc3RhbmNlLCB0eXBl
SW5kZXgsIHNpemUsIHZhbHVlLmdldFZhbHVlKCkpOworICAgICAgICAgICAgb2JqID0gYXJyYXlO
ZXcobV9pbnN0YW5jZS5nZXQoKSwgdHlwZUluZGV4LCBzaXplLCB2YWx1ZS5nZXRWYWx1ZSgpKTsK
ICAgICAgICAgaWYgKFVOTElLRUxZKCFvYmopKQogICAgICAgICAgICAgcmV0dXJuIENvbnN0RXhw
clZhbHVlKEludmFsaWRDb25zdEV4cHIpOwogICAgICAgICByZXR1cm4gQ29uc3RFeHByVmFsdWUo
U3Ryb25nPEpTT2JqZWN0Pih2bSwgSlNWYWx1ZTo6ZGVjb2RlKG9iaikuZ2V0T2JqZWN0KCkpKTsK
QEAgLTM4Miw3ICszODIsNyBAQCBwdWJsaWM6CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlTmV3
U3RydWN0KHVpbnQzMl90IHR5cGVJbmRleCkKICAgICB7CiAgICAgICAgIFZNJiB2bSA9IG1faW5z
dGFuY2UtPnZtKCk7Ci0gICAgICAgIEVuY29kZWRKU1ZhbHVlIG9iaiA9IHN0cnVjdE5ldyhtX2lu
c3RhbmNlLCB0eXBlSW5kZXgsIHN0YXRpY19jYXN0PGJvb2w+KFVzZURlZmF1bHRWYWx1ZTo6WWVz
KSwgbnVsbHB0cik7CisgICAgICAgIEVuY29kZWRKU1ZhbHVlIG9iaiA9IHN0cnVjdE5ldyhtX2lu
c3RhbmNlLmdldCgpLCB0eXBlSW5kZXgsIHN0YXRpY19jYXN0PGJvb2w+KFVzZURlZmF1bHRWYWx1
ZTo6WWVzKSwgbnVsbHB0cik7CiAgICAgICAgIGlmIChVTkxJS0VMWSghb2JqKSkKICAgICAgICAg
ICAgIHJldHVybiBDb25zdEV4cHJWYWx1ZShJbnZhbGlkQ29uc3RFeHByKTsKICAgICAgICAgcmV0
dXJuIENvbnN0RXhwclZhbHVlKFN0cm9uZzxKU09iamVjdD4odm0sIEpTVmFsdWU6OmRlY29kZShv
YmopLmdldE9iamVjdCgpKSk7CkBAIC03MjYsNyArNzI2LDcgQEAgcHJpdmF0ZToKICAgICBzaXpl
X3QgbV9vZmZzZXRJblNvdXJjZTsKICAgICBFeHByZXNzaW9uVHlwZSBtX3Jlc3VsdDsKICAgICBj
b25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgbV9pbmZvOwotICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSogbV9pbnN0YW5jZSB7IG51bGxwdHIgfTsKKyAgICBSZWZQdHI8SW5zdGFuY2U+IG1faW5zdGFu
Y2U7CiAgICAgYm9vbCBtX3Nob3VsZEVycm9yID0gZmFsc2U7CiAgICAgVmVjdG9yPHVpbnQzMl90
PiBtX2RlY2xhcmVkRnVuY3Rpb25zOwogfTsKQEAgLTc0NSw3ICs3NDUsNyBAQCBFeHBlY3RlZDx2
b2lkLCBTdHJpbmc+IHBhcnNlRXh0ZW5kZWRDb25zdEV4cHIoc3RkOjpzcGFuPGNvbnN0IHVpbnQ4
X3Q+IHNvdXJjZSwgcwogICAgIHJldHVybiB7IH07CiB9CiAKLUV4cGVjdGVkPHVpbnQ2NF90LCBT
dHJpbmc+IGV2YWx1YXRlRXh0ZW5kZWRDb25zdEV4cHIoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBj
b25zdGFudEV4cHJlc3Npb24sIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIGNvbnN0
IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBUeXBlIGV4cGVjdGVkVHlwZSkKK0V4cGVjdGVkPHVp
bnQ2NF90LCBTdHJpbmc+IGV2YWx1YXRlRXh0ZW5kZWRDb25zdEV4cHIoY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiBjb25zdGFudEV4cHJlc3Npb24sIFJlZlB0cjxJbnN0YW5jZT4gaW5zdGFuY2UsIGNv
bnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBUeXBlIGV4cGVjdGVkVHlwZSkKIHsKICAgICBS
RUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlFeHRlbmRl
ZENvbnN0YW50RXhwcmVzc2lvbnMoKSwgIldhc20gZXh0ZW5kZWQgY29uc3QgZXhwcmVzc2lvbnMg
bm90IGVuYWJsZWQiKTsKICAgICBDb25zdEV4cHJHZW5lcmF0b3IgZ2VuZXJhdG9yKENvbnN0RXhw
ckdlbmVyYXRvcjo6TW9kZTo6RXZhbHVhdGUsIGluZm8sIGluc3RhbmNlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db25zdEV4cHJHZW5lcmF0b3IuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db25zdEV4cHJHZW5lcmF0b3IuaAppbmRleCA0
ZDA5MWIxYmI0NjguLjdmYThjY2Q2MDAzOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUNvbnN0RXhwckdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Db25zdEV4cHJHZW5lcmF0b3IuaApAQCAtMjcsMTYgKzI3LDEzIEBACiAK
ICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKKyNpbmNsdWRlICJXYXNtSW5zdGFuY2UuaCIKICNp
bmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKIAotbmFtZXNwYWNlIEpTQyB7Ci0KLWNs
YXNzIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsKLQotbmFtZXNwYWNlIFdhc20geworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIAogRXhwZWN0ZWQ8dm9pZCwgU3RyaW5nPiBwYXJzZUV4
dGVuZGVkQ29uc3RFeHByKHN0ZDo6c3Bhbjxjb25zdCB1aW50OF90Piwgc2l6ZV90LCBzaXplX3Qm
LCBNb2R1bGVJbmZvcm1hdGlvbiYsIFR5cGUpOwotRXhwZWN0ZWQ8dWludDY0X3QsIFN0cmluZz4g
ZXZhbHVhdGVFeHRlbmRlZENvbnN0RXhwcihjb25zdCBWZWN0b3I8dWludDhfdD4mLCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYsIFR5cGUpOworRXhwZWN0
ZWQ8dWludDY0X3QsIFN0cmluZz4gZXZhbHVhdGVFeHRlbmRlZENvbnN0RXhwcihjb25zdCBWZWN0
b3I8dWludDhfdD4mLCBSZWZQdHI8SW5zdGFuY2U+LCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYs
IFR5cGUpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29udGV4dC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUNvbnRleHQuaAppbmRleCAwNjA0MGQ0ZGQ4NmQuLjcxODA0YzFjM2U0ZCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29udGV4dC5oCkBAIC0zMyw2ICszMyw4
IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKK2NsYXNzIEluc3RhbmNl
OworCiBzdHJ1Y3QgQ29udGV4dCB7CiAgICAgdWludDY0X3QqIHNjcmF0Y2hCdWZmZXJGb3JTaXpl
KHNpemVfdCBudW1iZXJPZlNsb3RzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUdsb2JhbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUds
b2JhbC5oCmluZGV4IDE2MWNiZTc3ZGRlNy4uNWI1NTc5MzI3YzMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtR2xvYmFsLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUdsb2JhbC5oCkBAIC00MSw2ICs0MSw4IEBAIGNsYXNzIEpTV2ViQXNz
ZW1ibHlHbG9iYWw7CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAorY2xhc3MgSW5zdGFuY2U7CisKIGNs
YXNzIEdsb2JhbCBmaW5hbCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxHbG9iYWw+IHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHbG9iYWwpOwogICAgIFdURl9NQUtFX1RaT05FX0FM
TE9DQVRFRChHbG9iYWwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUhhbmRsZXJJbmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21IYW5k
bGVySW5mby5jcHAKaW5kZXggNjhmODEyNDgzZjhlLi43YmNjZWQzMTM1ODUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21IYW5kbGVySW5mby5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmNwcApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDcgKzI4
LDcgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlJbnN0YW5jZS5oIgorI2luY2x1ZGUgIldhc21JbnN0YW5jZS5oIgogI2luY2x1ZGUgIldhc21U
YWcuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgSGFuZGxlcklu
Zm86OmluaXRpYWxpemUoY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYgdW5saW5rZWRJbmZvLCBD
b2RlUHRyPEV4CiAgICAgfQogfQogCi1jb25zdCBIYW5kbGVySW5mbyogSGFuZGxlckluZm86Omhh
bmRsZXJGb3JJbmRleChKU1dlYkFzc2VtYmx5SW5zdGFuY2UmIGluc3RhbmNlLCBjb25zdCBGaXhl
ZFZlY3RvcjxIYW5kbGVySW5mbz4mIGV4ZXB0aW9uSGFuZGxlcnMsIHVuc2lnbmVkIGluZGV4LCBj
b25zdCBXYXNtOjpUYWcqIGV4Y2VwdGlvblRhZykKK2NvbnN0IEhhbmRsZXJJbmZvKiBIYW5kbGVy
SW5mbzo6aGFuZGxlckZvckluZGV4KEluc3RhbmNlJiBpbnN0YW5jZSwgY29uc3QgRml4ZWRWZWN0
b3I8SGFuZGxlckluZm8+JiBleGVwdGlvbkhhbmRsZXJzLCB1bnNpZ25lZCBpbmRleCwgY29uc3Qg
V2FzbTo6VGFnKiBleGNlcHRpb25UYWcpCiB7CiAgICAgYm9vbCBkZWxlZ2F0aW5nID0gZmFsc2U7
CiAgICAgdW5zaWduZWQgZGVsZWdhdGVUYXJnZXQgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtSGFuZGxlckluZm8uaAppbmRleCAxZjE5MWQ1MTU5OTkuLmE4OTIwNWU1ODcx
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZv
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUhhbmRsZXJJbmZvLmgKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxLTIwMjMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMiwxMCArMzIsOSBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L0FTQ0lJTGl0ZXJhbC5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKLWNsYXNzIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsKLQogbmFtZXNwYWNl
IFdhc20gewogCitjbGFzcyBJbnN0YW5jZTsKIGNsYXNzIFRhZzsKIAogZW51bSBjbGFzcyBIYW5k
bGVyVHlwZSB7CkBAIC05OCw3ICs5Nyw3IEBAIHN0cnVjdCBVbmxpbmtlZEhhbmRsZXJJbmZvIDog
cHVibGljIEhhbmRsZXJJbmZvQmFzZSB7CiB9OwogCiBzdHJ1Y3QgSGFuZGxlckluZm8gOiBwdWJs
aWMgSGFuZGxlckluZm9CYXNlIHsKLSAgICBzdGF0aWMgY29uc3QgSGFuZGxlckluZm8qIGhhbmRs
ZXJGb3JJbmRleChKU1dlYkFzc2VtYmx5SW5zdGFuY2UmLCBjb25zdCBGaXhlZFZlY3RvcjxIYW5k
bGVySW5mbz4mIGV4ZXB0aW9uSGFuZGxlcnMsIHVuc2lnbmVkIGluZGV4LCBjb25zdCBXYXNtOjpU
YWcqIGV4Y2VwdGlvblRhZyk7CisgICAgc3RhdGljIGNvbnN0IEhhbmRsZXJJbmZvKiBoYW5kbGVy
Rm9ySW5kZXgoSW5zdGFuY2UmLCBjb25zdCBGaXhlZFZlY3RvcjxIYW5kbGVySW5mbz4mIGV4ZXB0
aW9uSGFuZGxlcnMsIHVuc2lnbmVkIGluZGV4LCBjb25zdCBXYXNtOjpUYWcqIGV4Y2VwdGlvblRh
Zyk7CiAKICAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgVW5saW5rZWRIYW5kbGVySW5mbyYsIENv
ZGVQdHI8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtSVBJbnRTbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUlQSW50U2xvd1BhdGhzLmNwcAppbmRleCA0MTZmNmY1OTllY2QuLmU0
YzQ4MDg1MzJlZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUlQ
SW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSVBJ
bnRTbG93UGF0aHMuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAy
My0yMDI0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAj
aW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCiAjaW5jbHVkZSAiV2FzbUZ1bmN0aW9u
Q29kZUJsb2NrR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiV2FzbUluc3RhbmNlLmgiCiAjaW5jbHVk
ZSAiV2FzbUxMSW50QnVpbHRpbi5oIgogI2luY2x1ZGUgIldhc21MTEludEdlbmVyYXRvci5oIgog
I2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgpAQCAtOTEsNyArOTIsNyBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgc2hvdWxkSklUKFdhc206OklQSW50Q2FsbGVlKiBjYWxsZWUsIFJlcXVp
cmVkV2FzbUpJVCByZXF1aXJlZAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5l
IGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoV2FzbTo6SVBJbnRDYWxsZWUqIGNhbGxl
ZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBq
aXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhXYXNtOjpJUEludENhbGxlZSogY2FsbGVlLCBXYXNt
OjpJbnN0YW5jZSogaW5zdGFuY2UpCiB7CiAgICAgQVNTRVJUKCFpbnN0YW5jZS0+bW9kdWxlKCku
bW9kdWxlSW5mb3JtYXRpb24oKS51c2VzU0lNRChjYWxsZWUtPmZ1bmN0aW9uSW5kZXgoKSkpOwog
CkBAIC00NzAsNyArNDcxLDcgQEAgV0FTTV9JUElOVF9FWFRFUk5fQ1BQX0RFQ0wodGFibGVfZ3Jv
dywgaW50MzJfdCB0YWJsZUluZGV4LCBFbmNvZGVkSlNWYWx1ZSBmaWxsLAogV0FTTV9JUElOVF9F
WFRFUk5fQ1BQX0RFQ0xfMVAoY3VycmVudF9tZW1vcnkpCiB7CiAjaWYgQ1BVKEFSTTY0KSB8fCBD
UFUoWDg2XzY0KQotICAgIHNpemVfdCBzaXplID0gaW5zdGFuY2UtPm1lbW9yeSgpLT5tZW1vcnko
KS5oYW5kbGUoKS5zaXplKCkgPj4gMTY7CisgICAgc2l6ZV90IHNpemUgPSBpbnN0YW5jZS0+bWVt
b3J5KCktPmhhbmRsZSgpLnNpemUoKSA+PiAxNjsKICAgICBXQVNNX1JFVFVSTl9UV08oYml0d2lz
ZV9jYXN0PHZvaWQqPihzaXplKSwgMCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShpbnN0YW5j
ZSk7CkBAIC01NjcsMTQgKzU2OCwxNCBAQCBXQVNNX0lQSU5UX0VYVEVSTl9DUFBfREVDTCh0YWJs
ZV9zaXplLCBpbnQzMl90IHRhYmxlSW5kZXgpCiAjZW5kaWYKIH0KIAotc3RhdGljIGlubGluZSBV
R1BSUGFpciBkb1dhc21DYWxsKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2ln
bmVkIGZ1bmN0aW9uSW5kZXgpCitzdGF0aWMgaW5saW5lIFVHUFJQYWlyIGRvV2FzbUNhbGwoV2Fz
bTo6SW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4KQogewogICAgIHVp
bnQzMl90IGltcG9ydEZ1bmN0aW9uQ291bnQgPSBpbnN0YW5jZS0+bW9kdWxlKCkubW9kdWxlSW5m
b3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvbkNvdW50KCk7CiAKICAgICBDb2RlUHRyPFdhc21FbnRy
eVB0clRhZz4gY29kZVB0cjsKIAogICAgIGlmIChmdW5jdGlvbkluZGV4IDwgaW1wb3J0RnVuY3Rp
b25Db3VudCkgewotICAgICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OkltcG9ydEZ1bmN0aW9u
SW5mbyogZnVuY3Rpb25JbmZvID0gaW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uSW5mbyhmdW5jdGlv
bkluZGV4KTsKKyAgICAgICAgV2FzbTo6SW5zdGFuY2U6OkltcG9ydEZ1bmN0aW9uSW5mbyogZnVu
Y3Rpb25JbmZvID0gaW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uSW5mbyhmdW5jdGlvbkluZGV4KTsK
ICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uSW5mby0+aW1wb3J0RnVuY3Rpb25TdHViOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIC8vIFRhcmdldCBpcyBhIHdhc20gZnVuY3Rpb24gd2l0aGluIHRo
ZSBzYW1lIGluc3RhbmNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtSVBJbnRTbG93UGF0aHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JUElu
dFNsb3dQYXRocy5oCmluZGV4IGFmMDUyOGZjNDZkMy4uOWEwZGU5NzhhZWVmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSVBJbnRTbG93UGF0aHMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSVBJbnRTbG93UGF0aHMuaApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjMtMjAyNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCwxOCArMzQs
MjAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsK
K25hbWVzcGFjZSBXYXNtIHsKK2NsYXNzIEluc3RhbmNlOworfQogCiBuYW1lc3BhY2UgSVBJbnQg
ewogCiAjZGVmaW5lIFdBU01fSVBJTlRfRVhURVJOX0NQUF9ERUNMKG5hbWUsIC4uLikgXAotICAg
IGV4dGVybiAiQyIgVUdQUlBhaXIgaXBpbnRfZXh0ZXJuXyMjbmFtZShKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIGluc3RhbmNlLCBfX1ZBX0FSR1NfXykKKyAgICBleHRlcm4gIkMiIFVHUFJQYWlyIGlw
aW50X2V4dGVybl8jI25hbWUoV2FzbTo6SW5zdGFuY2UqIGluc3RhbmNlLCBfX1ZBX0FSR1NfXykK
IAogI2RlZmluZSBXQVNNX0lQSU5UX0VYVEVSTl9DUFBfSElEREVOX0RFQ0wobmFtZSwgLi4uKSBc
CiAgICAgV0FTTV9JUElOVF9FWFRFUk5fQ1BQX0RFQ0wobmFtZSwgX19WQV9BUkdTX18pIFJFRkVS
RU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMCiAKICNkZWZpbmUgV0FTTV9JUElOVF9FWFRFUk5f
Q1BQX0RFQ0xfMVAobmFtZSkgXAotICAgIGV4dGVybiAiQyIgVUdQUlBhaXIgaXBpbnRfZXh0ZXJu
XyMjbmFtZShKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQorICAgIGV4dGVybiAiQyIg
VUdQUlBhaXIgaXBpbnRfZXh0ZXJuXyMjbmFtZShXYXNtOjpJbnN0YW5jZSogaW5zdGFuY2UpCiAK
ICNkZWZpbmUgV0FTTV9JUElOVF9FWFRFUk5fQ1BQX0hJRERFTl9ERUNMXzFQKG5hbWUpIFwKICAg
ICBXQVNNX0lQSU5UX0VYVEVSTl9DUFBfREVDTF8xUChuYW1lKSBSRUZFUkVOQ0VEX0ZST01fQVNN
IFdURl9JTlRFUk5BTApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUlSR2VuZXJhdG9ySGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUlS
R2VuZXJhdG9ySGVscGVycy5oCmluZGV4IDAyNDc5Y2EzYzk0YS4uMjQ5MDhlYTljYjcxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSVJHZW5lcmF0b3JIZWxwZXJz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUlSR2VuZXJhdG9ySGVscGVy
cy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMi0yMDI0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNp
bmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCisjaW5jbHVk
ZSAiV2FzbUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiV2FzbU9wZXJhdGlvbnMuaCIKIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKQEAgLTEzOSwxMSArMTQwLDExIEBAIHN0YXRpYyBp
bmxpbmUgdm9pZCBjb21wdXRlRXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyhWZWN0b3I8Q29kZUxv
Y2F0aW9uTGFiZWw8RXhjCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlbWl0UmV0aHJvd0ltcGwoQ0Nh
bGxIZWxwZXJzJiBqaXQpCiB7Ci0gICAgLy8gSlNXZWJBc3NlbWJseUluc3RhbmNlIGluIGFyZ3Vt
ZW50R1BSMAorICAgIC8vIEluc3RhbmNlIGluIGFyZ3VtZW50R1BSMAogICAgIC8vIGV4Y2VwdGlv
biBwb2ludGVyIGluIGFyZ3VtZW50R1BSMQogCiAgICAgR1BSUmVnIHNjcmF0Y2ggPSBHUFJJbmZv
Ojpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUjA7Ci0gICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSlNXZWJBc3NlbWJseUluc3RhbmNl
OjpvZmZzZXRPZlZNKCkpLCBzY3JhdGNoKTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBJbnN0YW5jZTo6b2Zmc2V0T2ZWTSgpKSwg
c2NyYXRjaCk7CiAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIoc2NyYXRjaCk7CiAKICAgICBqaXQucHJlcGFyZVdhc21DYWxsT3BlcmF0aW9uKEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CkBAIC0xNTQsMTEgKzE1NSwxMSBAQCBzdGF0aWMgaW5saW5l
IHZvaWQgZW1pdFJldGhyb3dJbXBsKENDYWxsSGVscGVycyYgaml0KQogc3RhdGljIGlubGluZSB2
b2lkIGVtaXRUaHJvd0ltcGwoQ0NhbGxIZWxwZXJzJiBqaXQsIHVuc2lnbmVkIGV4Y2VwdGlvbklu
ZGV4KQogewogICAgIEpJVF9DT01NRU5UKGppdCwgInRocm93IGltcGwsIGluZGV4OiAiLCBleGNl
cHRpb25JbmRleCk7Ci0gICAgLy8gSlNXZWJBc3NlbWJseUluc3RhbmNlIGluIGFyZ3VtZW50R1BS
MAorICAgIC8vIEluc3RhbmNlIGluIGFyZ3VtZW50R1BSMAogICAgIC8vIGFyZ3VtZW50cyB0byB0
aGUgZXhjZXB0aW9uIG9mZiBvZiBzdGFjayBwb2ludGVyCiAKICAgICBHUFJSZWcgc2NyYXRjaCA9
IEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMDsKLSAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6Om9mZnNldE9mVk0oKSksIHNjcmF0Y2gpOworICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjphcmd1bWVudEdQUjAsIEluc3RhbmNlOjpvZmZzZXRP
ZlZNKCkpLCBzY3JhdGNoKTsKICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcihzY3JhdGNoKTsKIAogICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoZXhjZXB0aW9uSW5kZXgpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwpA
QCAtMTc3LDcgKzE3OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBidWlsZEVudHJ5QnVmZmVyRm9y
Q2F0Y2goUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpCiAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0
ZUluZGV4ID0gY2FsbEZyYW1lLT5jYWxsU2l0ZUluZGV4KCk7CiAgICAgT3B0aW1pemluZ0pJVENh
bGxlZSogY2FsbGVlID0gYml0d2lzZV9jYXN0PE9wdGltaXppbmdKSVRDYWxsZWUqPihjYWxsRnJh
bWUtPmNhbGxlZSgpLmFzTmF0aXZlQ2FsbGVlKCkpOwogICAgIGNvbnN0IFN0YWNrTWFwJiBzdGFj
a21hcCA9IGNhbGxlZS0+c3RhY2ttYXAoY2FsbFNpdGVJbmRleCk7Ci0gICAgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiBpbnN0YW5jZSA9IGNvbnRleHQuZ3ByPEpTV2ViQXNzZW1ibHlJbnN0YW5jZSo+
KEdQUkluZm86Ondhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyKTsKKyAgICBJbnN0YW5jZSogaW5z
dGFuY2UgPSBjb250ZXh0LmdwcjxJbnN0YW5jZSo+KEdQUkluZm86Ondhc21Db250ZXh0SW5zdGFu
Y2VQb2ludGVyKTsKICAgICBFbmNvZGVkSlNWYWx1ZSBleGNlcHRpb24gPSBjb250ZXh0LmdwcjxF
bmNvZGVkSlNWYWx1ZT4oR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogICAgIHVpbnQ2NF90KiBi
dWZmZXIgPSBpbnN0YW5jZS0+dm0oKS53YXNtQ29udGV4dC5zY3JhdGNoQnVmZmVyRm9yU2l6ZShz
dGFja21hcC5zaXplKCkgKiB2YWx1ZVNpemUgKiA4KTsKICAgICBsb2FkVmFsdWVzSW50b0J1ZmZl
cihjb250ZXh0LCBzdGFja21hcCwgYnVmZmVyLCBzYXZlZEZQV2lkdGgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi44YmI4ZWM4ZjJlNGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuY3BwCkBAIC0wLDAgKzEsNDI2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbUluc3RhbmNlLmgiCisKKyNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCisKKyNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgi
CisjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKKyNpbmNsdWRlICJXYXNtQ29uc3RFeHByR2VuZXJhdG9y
LmgiCisjaW5jbHVkZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgiCisjaW5jbHVkZSAiV2FzbVRh
Zy5oIgorI2luY2x1ZGUgIldhc21UeXBlRGVmaW5pdGlvbklubGluZXMuaCIKKyNpbmNsdWRlIDx3
dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9NYWtlU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CisKK0luc3RhbmNlOjpJbnN0YW5j
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxNb2R1bGU+JiYgbW9k
dWxlKQorICAgIDogbV92bSgmdm0pCisgICAgLCBtX3NvZnRTdGFja0xpbWl0KHZtLnNvZnRTdGFj
a0xpbWl0KCkpCisgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpCisgICAgLCBtX21v
ZHVsZShXVEZNb3ZlKG1vZHVsZSkpCisgICAgLCBtX2dsb2JhbHNUb01hcmsobV9tb2R1bGUuZ2V0
KCkubW9kdWxlSW5mb3JtYXRpb24oKS5nbG9iYWxDb3VudCgpKQorICAgICwgbV9nbG9iYWxzVG9C
aW5kaW5nKG1fbW9kdWxlLmdldCgpLm1vZHVsZUluZm9ybWF0aW9uKCkuZ2xvYmFsQ291bnQoKSkK
KyAgICAsIG1fbnVtSW1wb3J0RnVuY3Rpb25zKG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigp
LmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKKyAgICAsIG1fcGFzc2l2ZUVsZW1lbnRzKG1fbW9kdWxl
LT5tb2R1bGVJbmZvcm1hdGlvbigpLmVsZW1lbnRDb3VudCgpKQorICAgICwgbV9wYXNzaXZlRGF0
YVNlZ21lbnRzKG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmRhdGFTZWdtZW50c0NvdW50
KCkpCisgICAgLCBtX3RhZ3MobV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuZXhjZXB0aW9u
SW5kZXhTcGFjZVNpemUoKSkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHB0cmRp
ZmZfdD4oSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkgKyBzaXplb2Yodm9pZCopKSA9
PSBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRCb3VuZHNDaGVja2luZ1NpemUoKSk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbnVtSW1wb3J0RnVuY3Rpb25zOyArK2kpIHsKKyAgICAg
ICAgYXV0byogaW5mbyA9IG5ldyAoaW1wb3J0RnVuY3Rpb25JbmZvKGkpKSBJbXBvcnRGdW5jdGlv
bkluZm8oKTsKKyAgICAgICAgaW5mby0+Y2FsbExpbmtJbmZvLmluaXRpYWxpemUodm0sIG51bGxw
dHIsIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGU6OkNhbGwsIENvZGVPcmlnaW4geyB9KTsKKyAgICB9
CisgICAgbV9nbG9iYWxzID0gYml0d2lzZV9jYXN0PEdsb2JhbDo6VmFsdWUqPihiaXR3aXNlX2Nh
c3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZHbG9iYWxQdHIobV9udW1JbXBvcnRGdW5jdGlvbnMs
IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLnRhYmxlQ291bnQoKSwgMCkpOworICAgIG1l
bXNldChiaXR3aXNlX2Nhc3Q8Y2hhcio+KG1fZ2xvYmFscyksIDAsIG1fbW9kdWxlLT5tb2R1bGVJ
bmZvcm1hdGlvbigpLmdsb2JhbENvdW50KCkgKiBzaXplb2YoR2xvYmFsOjpWYWx1ZSkpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5n
bG9iYWxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IFdhc206Okdsb2JhbEluZm9ybWF0
aW9uJiBnbG9iYWwgPSBtX21vZHVsZS5nZXQoKS5tb2R1bGVJbmZvcm1hdGlvbigpLmdsb2JhbHNb
aV07CisgICAgICAgIGlmIChnbG9iYWwuYmluZGluZ01vZGUgPT0gV2FzbTo6R2xvYmFsSW5mb3Jt
YXRpb246OkJpbmRpbmdNb2RlOjpQb3J0YWJsZSkgeworICAgICAgICAgICAgLy8gVGhpcyBpcyBr
ZXB0IGFsaXZlIGJ5IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSAtPiBKU1dlYkFzc2VtYmx5R2xvYmFs
IC0+IGJpbmRpbmcuCisgICAgICAgICAgICBtX2dsb2JhbHNUb0JpbmRpbmcuc2V0KGkpOworICAg
ICAgICB9IGVsc2UgaWYgKGlzUmVmVHlwZShnbG9iYWwudHlwZSkpIHsKKyAgICAgICAgICAgIC8v
IFRoaXMgaXMga2VwdCBhbGl2ZSBieSBKU1dlYkFzc2VtYmx5SW5zdGFuY2UgLT4gYmluZGluZy4K
KyAgICAgICAgICAgIG1fZ2xvYmFsc1RvTWFyay5zZXQoaSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgbWVtc2V0KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZlRhYmxlUHRyKG1f
bnVtSW1wb3J0RnVuY3Rpb25zLCAwKSwgMCwgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCku
dGFibGVDb3VudCgpICogc2l6ZW9mKFRhYmxlKikpOworICAgIGZvciAodW5zaWduZWQgZWxlbWVu
dEluZGV4ID0gMDsgZWxlbWVudEluZGV4IDwgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCku
ZWxlbWVudENvdW50KCk7ICsrZWxlbWVudEluZGV4KSB7CisgICAgICAgIGNvbnN0IGF1dG8mIGVs
ZW1lbnQgPSBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5lbGVtZW50c1tlbGVtZW50SW5k
ZXhdOworICAgICAgICBpZiAoZWxlbWVudC5pc1Bhc3NpdmUoKSkKKyAgICAgICAgICAgIG1fcGFz
c2l2ZUVsZW1lbnRzLnF1aWNrU2V0KGVsZW1lbnRJbmRleCk7CisgICAgfQorCisgICAgZm9yICh1
bnNpZ25lZCBkYXRhU2VnbWVudEluZGV4ID0gMDsgZGF0YVNlZ21lbnRJbmRleCA8IG1fbW9kdWxl
LT5tb2R1bGVJbmZvcm1hdGlvbigpLmRhdGFTZWdtZW50c0NvdW50KCk7ICsrZGF0YVNlZ21lbnRJ
bmRleCkgeworICAgICAgICBjb25zdCBhdXRvJiBkYXRhU2VnbWVudCA9IG1fbW9kdWxlLT5tb2R1
bGVJbmZvcm1hdGlvbigpLmRhdGFbZGF0YVNlZ21lbnRJbmRleF07CisgICAgICAgIGlmIChkYXRh
U2VnbWVudC0+aXNQYXNzaXZlKCkpCisgICAgICAgICAgICBtX3Bhc3NpdmVEYXRhU2VnbWVudHMu
cXVpY2tTZXQoZGF0YVNlZ21lbnRJbmRleCk7CisgICAgfQorICAgIHZtLnJlZ2lzdGVyV2FzbUlu
c3RhbmNlKCp0aGlzKTsKK30KKworUmVmPEluc3RhbmNlPiBJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPE1vZHVsZT4mJiBtb2R1bGUpCit7
CisgICAgQVNTRVJUKGFsbG9jYXRpb25TaXplKG1heEltcG9ydHMsIG1heFRhYmxlcywgbWF4R2xv
YmFscykgPD0gSU5UMzJfTUFYKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyAoTm90TnVsbCwg
ZmFzdE1hbGxvYyhhbGxvY2F0aW9uU2l6ZShtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuaW1w
b3J0RnVuY3Rpb25Db3VudCgpLCBtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkudGFibGVDb3Vu
dCgpLCBtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuZ2xvYmFsQ291bnQoKSkpKSBJbnN0YW5j
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKG1vZHVsZSkpKTsKK30KKworSW5zdGFuY2U6On5J
bnN0YW5jZSgpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbnVtSW1wb3J0RnVu
Y3Rpb25zOyArK2kpCisgICAgICAgIGltcG9ydEZ1bmN0aW9uSW5mbyhpKS0+fkltcG9ydEZ1bmN0
aW9uSW5mbygpOworfQorCitzaXplX3QgSW5zdGFuY2U6OmV4dHJhTWVtb3J5QWxsb2NhdGVkKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gYWxsb2NhdGlvblNpemUobV9udW1JbXBvcnRGdW5jdGlvbnMs
IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLnRhYmxlQ291bnQoKSwgbV9tb2R1bGUtPm1v
ZHVsZUluZm9ybWF0aW9uKCkuZ2xvYmFsQ291bnQoKSk7Cit9CisKK3ZvaWQgSW5zdGFuY2U6OnNl
dEdsb2JhbCh1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIEdsb2JhbDo6VmFsdWUm
IHNsb3QgPSBtX2dsb2JhbHNbaV07CisgICAgaWYgKG1fZ2xvYmFsc1RvQmluZGluZy5nZXQoaSkp
IHsKKyAgICAgICAgV2FzbTo6R2xvYmFsKiBnbG9iYWwgPSBnZXRHbG9iYWxCaW5kaW5nKGkpOwor
ICAgICAgICBpZiAoIWdsb2JhbCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZ2xvYmFs
LT52YWx1ZVBvaW50ZXIoKS0+bV9leHRlcm5yZWYuc2V0KHZtKCksIGdsb2JhbC0+b3duZXIoKSwg
dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVChtX293bmVyKTsKKyAg
ICBzbG90Lm1fZXh0ZXJucmVmLnNldCh2bSgpLCBvd25lcigpLCB2YWx1ZSk7Cit9CisKK0pTVmFs
dWUgSW5zdGFuY2U6OmdldEZ1bmN0aW9uV3JhcHBlcih1bnNpZ25lZCBpKSBjb25zdAoreworICAg
IEpTVmFsdWUgdmFsdWUgPSBtX2Z1bmN0aW9uV3JhcHBlcnMuZ2V0KGkpLmdldCgpOworICAgIGlm
ICh2YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICByZXR1cm4g
dmFsdWU7Cit9CisKK3ZvaWQgSW5zdGFuY2U6OnNldEZ1bmN0aW9uV3JhcHBlcih1bnNpZ25lZCBp
LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIEFTU0VSVChtX293bmVyKTsKKyAgICBBU1NFUlQodmFs
dWUuaXNDYWxsYWJsZSgpKTsKKyAgICBBU1NFUlQoIW1fZnVuY3Rpb25XcmFwcGVycy5jb250YWlu
cyhpKSk7CisgICAgTG9ja2VyIGxvY2tlciB7IG93bmVyKCktPmNlbGxMb2NrKCkgfTsKKyAgICBt
X2Z1bmN0aW9uV3JhcHBlcnMuc2V0KGksIFdyaXRlQmFycmllcjxVbmtub3duPih2bSgpLCBvd25l
cigpLCB2YWx1ZSkpOworICAgIEFTU0VSVChnZXRGdW5jdGlvbldyYXBwZXIoaSkgPT0gdmFsdWUp
OworfQorCitUYWJsZSogSW5zdGFuY2U6OnRhYmxlKHVuc2lnbmVkIGkpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQoaSA8IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLnRhYmxlQ291bnQoKSk7
CisgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8VGFibGUqKj4oYml0d2lzZV9jYXN0PGNoYXIqPih0
aGlzKSArIG9mZnNldE9mVGFibGVQdHIobV9udW1JbXBvcnRGdW5jdGlvbnMsIGkpKTsKK30KKwor
dm9pZCBJbnN0YW5jZTo6dGFibGVDb3B5KHVpbnQzMl90IGRzdE9mZnNldCwgdWludDMyX3Qgc3Jj
T2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90IGRzdFRhYmxlSW5kZXgsIHVpbnQzMl90
IHNyY1RhYmxlSW5kZXgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoc3JjVGFibGVJbmRleCA8IG1f
bW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLnRhYmxlQ291bnQoKSk7CisgICAgUkVMRUFTRV9B
U1NFUlQoZHN0VGFibGVJbmRleCA8IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLnRhYmxl
Q291bnQoKSk7CisKKyAgICBUYWJsZSogZHN0VGFibGUgPSB0YWJsZShkc3RUYWJsZUluZGV4KTsK
KyAgICBUYWJsZSogc3JjVGFibGUgPSB0YWJsZShzcmNUYWJsZUluZGV4KTsKKyAgICBSRUxFQVNF
X0FTU0VSVChkc3RUYWJsZS0+dHlwZSgpID09IHNyY1RhYmxlLT50eXBlKCkpOworCisgICAgYXV0
byBmb3JFYWNoVGFibGVFbGVtZW50ID0gWyZdKGF1dG8gZm4pIHsKKyAgICAgICAgaWYgKGRzdFRh
YmxlSW5kZXggPT0gc3JjVGFibGVJbmRleCAmJiBkc3RPZmZzZXQgPiBzcmNPZmZzZXQpIHsKKyAg
ICAgICAgICAgIGZvciAodWludDMyX3QgaW5kZXggPSBsZW5ndGg7IGluZGV4LS07KQorICAgICAg
ICAgICAgICAgIGZuKGRzdFRhYmxlLCBzcmNUYWJsZSwgZHN0T2Zmc2V0ICsgaW5kZXgsIHNyY09m
ZnNldCArIGluZGV4KTsKKyAgICAgICAgfSBlbHNlIGlmIChkc3RUYWJsZUluZGV4ID09IHNyY1Rh
YmxlSW5kZXggJiYgZHN0T2Zmc2V0ID09IHNyY09mZnNldCkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBmb3IgKHVpbnQzMl90IGluZGV4ID0gMDsgaW5k
ZXggPCBsZW5ndGg7ICsraW5kZXgpCisgICAgICAgICAgICAgICAgZm4oZHN0VGFibGUsIHNyY1Rh
YmxlLCBkc3RPZmZzZXQgKyBpbmRleCwgc3JjT2Zmc2V0ICsgaW5kZXgpOworICAgICAgICB9Cisg
ICAgfTsKKworICAgIGlmIChkc3RUYWJsZS0+aXNFeHRlcm5yZWZUYWJsZSgpKSB7CisgICAgICAg
IGZvckVhY2hUYWJsZUVsZW1lbnQoW10oVGFibGUqIGRzdFRhYmxlLCBUYWJsZSogc3JjVGFibGUs
IHVpbnQzMl90IGRzdEluZGV4LCB1aW50MzJfdCBzcmNJbmRleCkgeworICAgICAgICAgICAgZHN0
VGFibGUtPmNvcHkoc3JjVGFibGUsIGRzdEluZGV4LCBzcmNJbmRleCk7CisgICAgICAgIH0pOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yRWFjaFRhYmxlRWxlbWVudChbXShUYWJs
ZSogZHN0VGFibGUsIFRhYmxlKiBzcmNUYWJsZSwgdWludDMyX3QgZHN0SW5kZXgsIHVpbnQzMl90
IHNyY0luZGV4KSB7CisgICAgICAgIGRzdFRhYmxlLT5hc0Z1bmNyZWZUYWJsZSgpLT5jb3B5RnVu
Y3Rpb24oc3JjVGFibGUtPmFzRnVuY3JlZlRhYmxlKCksIGRzdEluZGV4LCBzcmNJbmRleCk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgSW5zdGFuY2U6OmVsZW1Ecm9wKHVpbnQzMl90IGVsZW1lbnRJbmRl
eCkKK3sKKyAgICBtX3Bhc3NpdmVFbGVtZW50cy5xdWlja0NsZWFyKGVsZW1lbnRJbmRleCk7Cit9
CisKK2Jvb2wgSW5zdGFuY2U6Om1lbW9yeUluaXQodWludDMyX3QgZHN0QWRkcmVzcywgdWludDMy
X3Qgc3JjQWRkcmVzcywgdWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBkYXRhU2VnbWVudEluZGV4
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGRhdGFTZWdtZW50SW5kZXggPCBtb2R1bGUoKS5tb2R1
bGVJbmZvcm1hdGlvbigpLmRhdGFTZWdtZW50c0NvdW50KCkpOworCisgICAgaWYgKHN1bU92ZXJm
bG93czx1aW50MzJfdD4oc3JjQWRkcmVzcywgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgY29uc3QgU2VnbWVudDo6UHRyJiBzZWdtZW50ID0gbW9kdWxlKCkubW9kdWxlSW5m
b3JtYXRpb24oKS5kYXRhW2RhdGFTZWdtZW50SW5kZXhdOworICAgIGNvbnN0IHVpbnQzMl90IHNl
Z21lbnRTaXplSW5CeXRlcyA9IG1fcGFzc2l2ZURhdGFTZWdtZW50cy5xdWlja0dldChkYXRhU2Vn
bWVudEluZGV4KSA/IHNlZ21lbnQtPnNpemVJbkJ5dGVzIDogMFU7CisgICAgaWYgKHNyY0FkZHJl
c3MgKyBsZW5ndGggPiBzZWdtZW50U2l6ZUluQnl0ZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGNvbnN0IHVpbnQ4X3QqIHNlZ21lbnREYXRhID0gIWxlbmd0aCA/IG51bGxwdHIgOiAm
c2VnbWVudC0+Ynl0ZShzcmNBZGRyZXNzKTsKKworICAgIEFTU0VSVChtZW1vcnkoKSk7CisgICAg
cmV0dXJuIG1lbW9yeSgpLT5pbml0KGRzdEFkZHJlc3MsIHNlZ21lbnREYXRhLCBsZW5ndGgpOwor
fQorCit2b2lkIEluc3RhbmNlOjpkYXRhRHJvcCh1aW50MzJfdCBkYXRhU2VnbWVudEluZGV4KQor
eworICAgIG1fcGFzc2l2ZURhdGFTZWdtZW50cy5xdWlja0NsZWFyKGRhdGFTZWdtZW50SW5kZXgp
OworfQorCitjb25zdCBFbGVtZW50KiBJbnN0YW5jZTo6ZWxlbWVudEF0KHVuc2lnbmVkIGluZGV4
KSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgbV9tb2R1bGUtPm1vZHVsZUlu
Zm9ybWF0aW9uKCkuZWxlbWVudENvdW50KCkpOworCisgICAgaWYgKG1fcGFzc2l2ZUVsZW1lbnRz
LnF1aWNrR2V0KGluZGV4KSkKKyAgICAgICAgcmV0dXJuICZtX21vZHVsZS0+bW9kdWxlSW5mb3Jt
YXRpb24oKS5lbGVtZW50c1tpbmRleF07CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQg
SW5zdGFuY2U6OmluaXRFbGVtZW50U2VnbWVudCh1aW50MzJfdCB0YWJsZUluZGV4LCBjb25zdCBF
bGVtZW50JiBzZWdtZW50LCB1aW50MzJfdCBkc3RPZmZzZXQsIHVpbnQzMl90IHNyY09mZnNldCwg
dWludDMyX3QgbGVuZ3RoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGxlbmd0aCA8PSBzZWdtZW50
Lmxlbmd0aCgpKTsKKworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSoganNJbnN0YW5jZSA9IG93
bmVyKCk7CisgICAgSlNXZWJBc3NlbWJseVRhYmxlKiBqc1RhYmxlID0ganNJbnN0YW5jZS0+dGFi
bGUodGFibGVJbmRleCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzSW5z
dGFuY2UtPmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KworICAgIGZvciAodWludDMyX3QgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkg
eworICAgICAgICBjb25zdCBhdXRvIHNyY0luZGV4ID0gc3JjT2Zmc2V0ICsgaW5kZXg7CisgICAg
ICAgIGNvbnN0IGF1dG8gZHN0SW5kZXggPSBkc3RPZmZzZXQgKyBpbmRleDsKKyAgICAgICAgY29u
c3QgYXV0byBpbml0VHlwZSA9IHNlZ21lbnQuaW5pdFR5cGVzW3NyY0luZGV4XTsKKyAgICAgICAg
Y29uc3QgYXV0byBpbml0aWFsQml0c09ySW5kZXggPSBzZWdtZW50LmluaXRpYWxCaXRzT3JJbmRp
Y2VzW3NyY0luZGV4XTsKKworICAgICAgICBpZiAoaW5pdFR5cGUgPT0gRWxlbWVudDo6SW5pdGlh
bGl6YXRpb25UeXBlOjpGcm9tUmVmTnVsbCkgeworICAgICAgICAgICAganNUYWJsZS0+Y2xlYXIo
ZHN0SW5kZXgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoaW5pdFR5cGUgPT0gRWxlbWVudDo6SW5pdGlhbGl6YXRpb25UeXBlOjpGcm9tUmVmRnVuYykg
eworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgZXNzZW50aWFsbHkgbWVhbnMgd2UncmUgZXhw
b3J0aW5nIGFuIGltcG9ydC4KKyAgICAgICAgICAgIC8vIFdlIG5lZWQgYSBzdG9yeSBoZXJlLiBX
ZSBuZWVkIHRvIGNyZWF0ZSBhIFdlYkFzc2VtYmx5RnVuY3Rpb24KKyAgICAgICAgICAgIC8vIGZv
ciB0aGUgaW1wb3J0LgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NTUxMAorICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleCA9
IHN0YXRpY19jYXN0PHVpbnQzMl90Pihpbml0aWFsQml0c09ySW5kZXgpOworICAgICAgICAgICAg
VHlwZUluZGV4IHR5cGVJbmRleCA9IG1fbW9kdWxlLT50eXBlSW5kZXhGcm9tRnVuY3Rpb25JbmRl
eFNwYWNlKGZ1bmN0aW9uSW5kZXgpOworICAgICAgICAgICAgaWYgKGlzSW1wb3J0RnVuY3Rpb24o
ZnVuY3Rpb25JbmRleCkpIHsKKyAgICAgICAgICAgICAgICBKU09iamVjdCogZnVuY3Rpb25JbXBv
cnQgPSBpbXBvcnRGdW5jdGlvbihmdW5jdGlvbkluZGV4KS5nZXQoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoaXNXZWJBc3NlbWJseUhvc3RGdW5jdGlvbihmdW5jdGlvbkltcG9ydCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogd2FzbUZ1bmN0aW9uID0ganNEeW5h
bWljQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4oZnVuY3Rpb25JbXBvcnQpOworICAgICAgICAg
ICAgICAgICAgICAvLyBJZiB3ZSBldmVyIGltcG9ydCBhIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uLCB3ZSBzZXQgdGhlIGltcG9ydCBhcyB0aGUgdW53cmFwcGVkIHZhbHVlLgorICAgICAgICAg
ICAgICAgICAgICAvLyBCZWNhdXNlIGEgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24gY2FuIG5l
dmVyIHdyYXAgYW5vdGhlciBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiwKKyAgICAgICAgICAg
ICAgICAgICAgLy8gdGhlIG9ubHkgdHlwZSB0aGlzIGNvdWxkIGJlIGlzIFdlYkFzc2VtYmx5RnVu
Y3Rpb24uCisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHdhc21GdW5jdGlvbik7
CisgICAgICAgICAgICAgICAgICAgIGpzVGFibGUtPnNldChkc3RJbmRleCwgd2FzbUZ1bmN0aW9u
KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGF1dG8qIHdyYXBwZXJGdW5jdGlvbiA9IFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uOjpjcmVhdGUoCisgICAgICAgICAgICAgICAgICAgIHZtLAorICAgICAgICAgICAgICAg
ICAgICBnbG9iYWxPYmplY3QsCisgICAgICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+d2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TdHJ1Y3R1cmUoKSwKKyAgICAgICAgICAgICAgICAgICAg
ZnVuY3Rpb25JbXBvcnQsCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uSW5kZXgsCisgICAg
ICAgICAgICAgICAgICAgIGpzSW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgIHR5cGVJbmRl
eCwKKyAgICAgICAgICAgICAgICAgICAgVHlwZUluZm9ybWF0aW9uOjpnZXRDYW5vbmljYWxSVFQo
dHlwZUluZGV4KSk7CisgICAgICAgICAgICAgICAganNUYWJsZS0+c2V0KGRzdEluZGV4LCB3cmFw
cGVyRnVuY3Rpb24pOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBhdXRvJiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBjYWxsZWVHcm91cCgpLT5q
c0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwor
ICAgICAgICAgICAgYXV0byogd2FzbUNhbGxlZSA9IGNhbGxlZUdyb3VwKCktPndhc21DYWxsZWVG
cm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOworICAgICAgICAgICAgV2FzbVRv
V2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRp
b24gPSBjYWxsZWVHcm91cCgpLT5lbnRyeXBvaW50TG9hZExvY2F0aW9uRnJvbUZ1bmN0aW9uSW5k
ZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNpZ25hdHVy
ZSA9IFR5cGVJbmZvcm1hdGlvbjo6Z2V0RnVuY3Rpb25TaWduYXR1cmUodHlwZUluZGV4KTsKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBTYXkgd2UgZXhwb3J0IGxvY2FsIGZ1bmN0aW9uICJmb28iIGF0
IGZ1bmN0aW9uIGluZGV4IDAuCisgICAgICAgICAgICAvLyBXaGF0IGlmIHdlIGFsc28gc2V0IGl0
IHRvIHRoZSB0YWJsZSBhbiBFbGVtZW50IHcvIGluZGV4IDAuCisgICAgICAgICAgICAvLyBEb2Vz
IChuZXcgSW5zdGFuY2UoLi4uKSkuZXhwb3J0cy5mb28gPT09IHRhYmxlLmdldCgwKT8KKyAgICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU4MjUK
KyAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlG
dW5jdGlvbjo6Y3JlYXRlKAorICAgICAgICAgICAgICAgIHZtLAorICAgICAgICAgICAgICAgIGds
b2JhbE9iamVjdCwKKyAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVu
Y3Rpb25TdHJ1Y3R1cmUoKSwKKyAgICAgICAgICAgICAgICBzaWduYXR1cmUuYXJndW1lbnRDb3Vu
dCgpLAorICAgICAgICAgICAgICAgIFdURjo6bWFrZVN0cmluZyhmdW5jdGlvbkluZGV4KSwKKyAg
ICAgICAgICAgICAgICBqc0luc3RhbmNlLAorICAgICAgICAgICAgICAgIGpzRW50cnlwb2ludENh
bGxlZSwKKyAgICAgICAgICAgICAgICB3YXNtQ2FsbGVlLAorICAgICAgICAgICAgICAgIGVudHJ5
cG9pbnRMb2FkTG9jYXRpb24sCisgICAgICAgICAgICAgICAgdHlwZUluZGV4LAorICAgICAgICAg
ICAgICAgIFR5cGVJbmZvcm1hdGlvbjo6Z2V0Q2Fub25pY2FsUlRUKHR5cGVJbmRleCkpOworICAg
ICAgICAgICAganNUYWJsZS0+c2V0KGRzdEluZGV4LCBmdW5jdGlvbik7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIEpTVmFsdWUgaW5pdFZhbHVlOworICAgICAg
ICBpZiAoaW5pdFR5cGUgPT0gRWxlbWVudDo6SW5pdGlhbGl6YXRpb25UeXBlOjpGcm9tR2xvYmFs
KQorICAgICAgICAgICAgaW5pdFZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGxvYWRJNjRHbG9iYWwo
aW5pdGlhbEJpdHNPckluZGV4KSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJU
KGluaXRUeXBlID09IEVsZW1lbnQ6OkluaXRpYWxpemF0aW9uVHlwZTo6RnJvbUV4dGVuZGVkRXhw
cmVzc2lvbik7CisgICAgICAgICAgICB1aW50NjRfdCByZXN1bHQ7CisgICAgICAgICAgICBib29s
IHN1Y2Nlc3MgPSBldmFsdWF0ZUNvbnN0YW50RXhwcmVzc2lvbihpbml0aWFsQml0c09ySW5kZXgs
IHNlZ21lbnQuZWxlbWVudFR5cGUsIHJlc3VsdCk7CisgICAgICAgICAgICAvLyBGSVhNRTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2NDQ1NAorICAgICAgICAgICAg
Ly8gQ3VycmVudGx5IHRoaXMgc2hvdWxkIG5ldmVyIGZhaWwsIGFzIHRoZSBwYXJzZSBwaGFzZSBh
bHJlYWR5IHZhbGlkYXRlZCBpdC4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN1Y2Nlc3Mp
OworICAgICAgICAgICAgaW5pdFZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKHJlc3VsdCk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoanNUYWJsZS0+dGFibGUoKS0+aXNFeHRlcm5yZWZUYWJsZSgp
KQorICAgICAgICAgICAganNUYWJsZS0+c2V0KGRzdEluZGV4LCBpbml0VmFsdWUpOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIC8vIFZhbGlkYXRpb24gc2hvdWxkIGd1YXJhbnRlZSB0aGF0
IHRoZSB0YWJsZSBpcyBmb3IgZnVuY3MsIGFuZCB0aGUgdmFsdWUgaXMgYSBmdW5jIGFzIHdlbGwu
CisgICAgICAgICAgICBBU1NFUlQoanNUYWJsZS0+dGFibGUoKS0+aXNGdW5jcmVmVGFibGUoKSk7
CisgICAgICAgICAgICBBU1NFUlQoaW5pdFZhbHVlLmdldE9iamVjdCgpKTsKKyAgICAgICAgICAg
IFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKiBmdW5jID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJs
eUZ1bmN0aW9uQmFzZSo+KGluaXRWYWx1ZS5nZXRPYmplY3QoKSk7CisgICAgICAgICAgICBBU1NF
UlQoZnVuYyk7CisgICAgICAgICAgICBqc1RhYmxlLT5zZXQoZHN0SW5kZXgsIGZ1bmMpOworICAg
ICAgICB9CisgICAgfQorfQorCitib29sIEluc3RhbmNlOjpjb3B5RGF0YVNlZ21lbnQodWludDMy
X3Qgc2VnbWVudEluZGV4LCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aEluQnl0ZXMs
IHVpbnQ4X3QqIHZhbHVlcykKK3sKKyAgICAvLyBGYWlsIGlmIHRoZSBkYXRhIHNlZ21lbnQgaW5k
ZXggaXMgb3V0IG9mIGJvdW5kcworICAgIFJFTEVBU0VfQVNTRVJUKHNlZ21lbnRJbmRleCA8IG1v
ZHVsZSgpLm1vZHVsZUluZm9ybWF0aW9uKCkuZGF0YVNlZ21lbnRzQ291bnQoKSk7CisgICAgLy8g
T3RoZXJ3aXNlLCBnZXQgdGhlIGBzZWdtZW50SW5kZXhgdGggZGF0YSBzZWdtZW50CisgICAgY29u
c3QgU2VnbWVudDo6UHRyJiBzZWdtZW50ID0gbW9kdWxlKCkubW9kdWxlSW5mb3JtYXRpb24oKS5k
YXRhW3NlZ21lbnRJbmRleF07CisgICAgY29uc3QgdWludDMyX3Qgc2VnbWVudFNpemVJbkJ5dGVz
ID0gbV9wYXNzaXZlRGF0YVNlZ21lbnRzLnF1aWNrR2V0KHNlZ21lbnRJbmRleCkgPyBzZWdtZW50
LT5zaXplSW5CeXRlcyA6IDBVOworCisgICAgLy8gQ2FsbGVyIGNoZWNrcyB0aGF0IHRoZSAob2Zm
c2V0ICsgbGVuZ3RoSW5CeXRlcykgY2FsY3VsYXRpb24gZG9lc24ndCBvdmVyZmxvdworICAgIGlm
ICgob2Zmc2V0ICsgbGVuZ3RoSW5CeXRlcykgPiBzZWdtZW50U2l6ZUluQnl0ZXMpIHsKKyAgICAg
ICAgLy8gVGhlIHNlZ21lbnQgYWNjZXNzIHdvdWxkIG92ZXJmbG93OyB0aGUgY2FsbGVyIG11c3Qg
aGFuZGxlIHRoaXMgZXJyb3IuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8g
SWYgc2l6ZSBpcyAwLCBkbyBub3RoaW5nCisgICAgaWYgKCFsZW5ndGhJbkJ5dGVzKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBDYXN0IHRoZSBkYXRhIHNlZ21lbnQgdG8gYSBwb2ludGVy
CisgICAgY29uc3QgdWludDhfdCogc2VnbWVudERhdGEgPSAmc2VnbWVudC0+Ynl0ZShvZmZzZXQp
OworCisgICAgLy8gQ29weSB0aGUgZGF0YSBmcm9tIHRoZSBzZWdtZW50IGludG8gdGhlIG91dCBw
YXJhbSB2ZWN0b3IKKyAgICBtZW1jcHkodmFsdWVzLCBzZWdtZW50RGF0YSwgbGVuZ3RoSW5CeXRl
cyk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBJbnN0YW5jZTo6Y29weUVsZW1lbnRT
ZWdtZW50KGNvbnN0IEVsZW1lbnQmIHNlZ21lbnQsIHVpbnQzMl90IHNyY09mZnNldCwgdWludDMy
X3QgbGVuZ3RoLCB1aW50NjRfdCogdmFsdWVzKQoreworICAgIC8vIENhbGxlciBzaG91bGQgaGF2
ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgKG9mZnNldCArIGxlbmd0aCkgY2FsY3VsYXRpb24g
ZG9lc24ndCBvdmVyZmxvdyBpbnQzMiwKKyAgICAvLyBhbmQgdGhhdCB0aGUgKG9mZnNldCArIGxl
bmd0aCkgZG9lc24ndCBvdmVyZmxvdyB0aGUgZWxlbWVudCBzZWdtZW50CisgICAgQVNTRVJUKCFz
dW1PdmVyZmxvd3M8dWludDMyX3Q+KHNyY09mZnNldCwgbGVuZ3RoKSk7CisgICAgQVNTRVJUKChz
cmNPZmZzZXQgKyBsZW5ndGgpIDw9IHNlZ21lbnQubGVuZ3RoKCkpOworCisgICAgZm9yICh1aW50
MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIHVpbnQzMl90IHNyY0luZGV4
ID0gc3JjT2Zmc2V0ICsgaTsKKyAgICAgICAgY29uc3QgYXV0byBpbml0VHlwZSA9IHNlZ21lbnQu
aW5pdFR5cGVzW3NyY0luZGV4XTsKKyAgICAgICAgY29uc3QgYXV0byBpbml0aWFsQml0c09ySW5k
ZXggPSBzZWdtZW50LmluaXRpYWxCaXRzT3JJbmRpY2VzW3NyY0luZGV4XTsKKworICAgICAgICAv
LyBSZXByZXNlbnQgdGhlIG51bGwgZnVuY3Rpb24gYXMgdGhlIG51bGwgSlMgdmFsdWUKKyAgICAg
ICAgaWYgKGluaXRUeXBlID09IEVsZW1lbnQ6OkluaXRpYWxpemF0aW9uVHlwZTo6RnJvbVJlZk51
bGwpIHsKKyAgICAgICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGluaXRUeXBlID09IEVsZW1lbnQ6OkluaXRpYWxpemF0aW9uVHlwZTo6
RnJvbVJlZkZ1bmMpIHsKKyAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSBzdGF0
aWNfY2FzdDx1aW50MzJfdD4oaW5pdGlhbEJpdHNPckluZGV4KTsKKworICAgICAgICAgICAgLy8g
QSB3cmFwcGVyIGZvciB0aGlzIGZ1bmN0aW9uIHNob3VsZCBoYXZlIGJlZW4gY3JlYXRlZCBkdXJp
bmcgcGFyc2luZy4KKyAgICAgICAgICAgIC8vIEEgZnV0dXJlIG9wdGltaXphdGlvbiB3b3VsZCBi
ZSBmb3IgdGhlIHBhcnNlciB0byBub3QgY3JlYXRlIHRoZSB3cmFwcGVycywKKyAgICAgICAgICAg
IC8vIGFuZCBjcmVhdGUgdGhlbSBoZXJlIGR5bmFtaWNhbGx5IGluc3RlYWQuCisgICAgICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gZ2V0RnVuY3Rpb25XcmFwcGVyKGZ1bmN0aW9uSW5kZXgpOworICAg
ICAgICAgICAgQVNTRVJUKHZhbHVlLmlzQ2FsbGFibGUoKSk7CisgICAgICAgICAgICB2YWx1ZXNb
aV0gPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSk7CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbml0VHlwZSA9PSBF
bGVtZW50OjpJbml0aWFsaXphdGlvblR5cGU6OkZyb21HbG9iYWwpIHsKKyAgICAgICAgICAgIHZh
bHVlc1tpXSA9IGxvYWRJNjRHbG9iYWwoaW5pdGlhbEJpdHNPckluZGV4KTsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKGluaXRUeXBlID09IEVsZW1l
bnQ6OkluaXRpYWxpemF0aW9uVHlwZTo6RnJvbUV4dGVuZGVkRXhwcmVzc2lvbik7CisgICAgICAg
IHVpbnQ2NF90IHJlc3VsdDsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gZXZhbHVhdGVDb25zdGFu
dEV4cHJlc3Npb24oaW5pdGlhbEJpdHNPckluZGV4LCBzZWdtZW50LmVsZW1lbnRUeXBlLCByZXN1
bHQpOworICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTI2NDQ1NAorICAgICAgICAvLyBDdXJyZW50bHkgdGhpcyBzaG91bGQgbmV2ZXIgZmFp
bCwgYXMgdGhlIHBhcnNlIHBoYXNlIGFscmVhZHkgdmFsaWRhdGVkIGl0LgorICAgICAgICBSRUxF
QVNFX0FTU0VSVChzdWNjZXNzKTsKKyAgICAgICAgdmFsdWVzW2ldID0gcmVzdWx0OworICAgIH0K
K30KKworYm9vbCBJbnN0YW5jZTo6ZXZhbHVhdGVDb25zdGFudEV4cHJlc3Npb24odWludDY0X3Qg
aW5kZXgsIFR5cGUgZXhwZWN0ZWRUeXBlLCB1aW50NjRfdCYgcmVzdWx0KQoreworICAgIGNvbnN0
IGF1dG8mIGNvbnN0YW50RXhwcmVzc2lvbiA9IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigp
LmNvbnN0YW50RXhwcmVzc2lvbnNbaW5kZXhdOworICAgIGF1dG8gZXZhbFJlc3VsdCA9IGV2YWx1
YXRlRXh0ZW5kZWRDb25zdEV4cHIoY29uc3RhbnRFeHByZXNzaW9uLCB0aGlzLCBtX21vZHVsZS0+
bW9kdWxlSW5mb3JtYXRpb24oKSwgZXhwZWN0ZWRUeXBlKTsKKyAgICBpZiAoVU5MSUtFTFkoIWV2
YWxSZXN1bHQuaGFzX3ZhbHVlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXN1
bHQgPSBldmFsUmVzdWx0LnZhbHVlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSW5z
dGFuY2U6OnRhYmxlSW5pdCh1aW50MzJfdCBkc3RPZmZzZXQsIHVpbnQzMl90IHNyY09mZnNldCwg
dWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50SW5kZXgsIHVpbnQzMl90IHRhYmxlSW5k
ZXgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoZWxlbWVudEluZGV4IDwgbV9tb2R1bGUtPm1vZHVs
ZUluZm9ybWF0aW9uKCkuZWxlbWVudENvdW50KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKHRhYmxl
SW5kZXggPCBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS50YWJsZUNvdW50KCkpOworCisg
ICAgY29uc3QgRWxlbWVudCogZWxlbWVudFNlZ21lbnQgPSBlbGVtZW50QXQoZWxlbWVudEluZGV4
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChlbGVtZW50U2VnbWVudCk7CisgICAgUkVMRUFTRV9BU1NF
UlQoZWxlbWVudFNlZ21lbnQtPmlzUGFzc2l2ZSgpKTsKKyAgICBpbml0RWxlbWVudFNlZ21lbnQo
dGFibGVJbmRleCwgKmVsZW1lbnRTZWdtZW50LCBkc3RPZmZzZXQsIHNyY09mZnNldCwgbGVuZ3Ro
KTsKK30KKwordm9pZCBJbnN0YW5jZTo6c2V0VGFibGUodW5zaWduZWQgaSwgUmVmPFRhYmxlPiYm
IHRhYmxlKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGkgPCBtX21vZHVsZS0+bW9kdWxlSW5mb3Jt
YXRpb24oKS50YWJsZUNvdW50KCkpOworICAgIEFTU0VSVCghdGhpcy0+dGFibGUoaSkpOworICAg
ICpiaXR3aXNlX2Nhc3Q8VGFibGUqKj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNl
dE9mVGFibGVQdHIobV9udW1JbXBvcnRGdW5jdGlvbnMsIGkpKSA9ICZ0YWJsZS5sZWFrUmVmKCk7
Cit9CisKK3ZvaWQgSW5zdGFuY2U6OmxpbmtHbG9iYWwodW5zaWduZWQgaSwgUmVmPEdsb2JhbD4m
JiBnbG9iYWwpCit7CisgICAgbV9nbG9iYWxzW2ldLm1fcG9pbnRlciA9IGdsb2JhbC0+dmFsdWVQ
b2ludGVyKCk7CisgICAgbV9saW5rZWRHbG9iYWxzLnNldChpLCBXVEZNb3ZlKGdsb2JhbCkpOwor
fQorCit2b2lkIEluc3RhbmNlOjpzZXRUYWcodW5zaWduZWQgaW5kZXgsIFJlZjxjb25zdCBUYWc+
JiYgdGFnKQoreworICAgIG1fdGFnc1tpbmRleF0gPSBXVEZNb3ZlKHRhZyk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYzI3NzMwMDYyZmI5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKQEAgLTAsMCArMSwyOTIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiQ2FsbExp
bmtJbmZvLmgiCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorI2luY2x1ZGUgIldhc21HbG9iYWwu
aCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbU1vZHVsZS5oIgorI2lu
Y2x1ZGUgIldhc21UYWJsZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKKyNp
bmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKyNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlV2Vha1B0ci5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworY2xhc3Mg
SlNHbG9iYWxPYmplY3Q7CitjbGFzcyBKU1dlYkFzc2VtYmx5SW5zdGFuY2U7CisKK25hbWVzcGFj
ZSBXYXNtIHsKKworY2xhc3MgSW5zdGFuY2U7CisKK2NsYXNzIEluc3RhbmNlIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkQW5kQ2FuTWFrZVRocmVhZFNhZmVXZWFrUHRyPEluc3RhbmNlPiB7
CisgICAgZnJpZW5kIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKKworcHVibGljOgorICAgIHVzaW5n
IEZ1bmN0aW9uV3JhcHBlck1hcCA9IEhhc2hNYXA8dWludDMyX3QsIFdyaXRlQmFycmllcjxVbmtu
b3duPiwgSW50SGFzaDx1aW50MzJfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFp
dHM8dWludDMyX3Q+PjsKKworICAgIHN0YXRpYyBSZWY8SW5zdGFuY2U+IGNyZWF0ZShWTSYsIEpT
R2xvYmFsT2JqZWN0KiwgUmVmPE1vZHVsZT4mJik7CisKKyAgICB2b2lkIHNldE93bmVyKEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSogb3duZXIpCisgICAgeworICAgICAgICBtX293bmVyID0gb3duZXI7
CisgICAgfQorCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkluc3RhbmNlKCk7CisKKyAgICBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqIG93bmVyKCkgY29uc3QgeyByZXR1cm4gbV9vd25lcjsgfQorICAg
IHN0YXRpYyBjb25zdGV4cHIgcHRyZGlmZl90IG9mZnNldE9mT3duZXIoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoSW5zdGFuY2UsIG1fb3duZXIpOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBw
dHJkaWZmX3Qgb2Zmc2V0T2ZWTSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJbnN0YW5jZSwg
bV92bSk7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIHB0cmRpZmZfdCBvZmZzZXRPZlNvZnRTdGFj
a0xpbWl0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEluc3RhbmNlLCBtX3NvZnRTdGFja0xp
bWl0KTsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgcHRyZGlmZl90IG9mZnNldE9mR2xvYmFsT2Jq
ZWN0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEluc3RhbmNlLCBtX2dsb2JhbE9iamVjdCk7
IH0KKworICAgIHZvaWQgdXBkYXRlU29mdFN0YWNrTGltaXQodm9pZCogc29mdFN0YWNrTGltaXQp
IHsgbV9zb2Z0U3RhY2tMaW1pdCA9IHNvZnRTdGFja0xpbWl0OyB9CisKKyAgICBzaXplX3QgZXh0
cmFNZW1vcnlBbGxvY2F0ZWQoKSBjb25zdDsKKworICAgIFZNJiB2bSgpIGNvbnN0IHsgcmV0dXJu
ICptX3ZtOyB9CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fZ2xvYmFsT2JqZWN0OyB9CisgICAgTW9kdWxlJiBtb2R1bGUoKSBjb25zdCB7IHJldHVy
biBtX21vZHVsZS5nZXQoKTsgfQorICAgIENhbGxlZUdyb3VwKiBjYWxsZWVHcm91cCgpIGNvbnN0
IHsgcmV0dXJuIG1vZHVsZSgpLmNhbGxlZUdyb3VwRm9yKG1lbW9yeSgpLT5tb2RlKCkpOyB9Cisg
ICAgTWVtb3J5KiBtZW1vcnkoKSBjb25zdCB7IHJldHVybiBtX21lbW9yeS5nZXQoKTsgfQorICAg
IFRhYmxlKiB0YWJsZSh1bnNpZ25lZCk7CisgICAgdm9pZCBzZXRUYWJsZSh1bnNpZ25lZCwgUmVm
PFRhYmxlPiYmKTsKKyAgICBjb25zdCBFbGVtZW50KiBlbGVtZW50QXQodW5zaWduZWQpIGNvbnN0
OworCisgICAgdm9pZCBpbml0RWxlbWVudFNlZ21lbnQodWludDMyX3QgdGFibGVJbmRleCwgY29u
c3QgRWxlbWVudCYgc2VnbWVudCwgdWludDMyX3QgZHN0T2Zmc2V0LCB1aW50MzJfdCBzcmNPZmZz
ZXQsIHVpbnQzMl90IGxlbmd0aCk7CisgICAgYm9vbCBjb3B5RGF0YVNlZ21lbnQodWludDMyX3Qg
c2VnbWVudEluZGV4LCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aEluQnl0ZXMsIHVp
bnQ4X3QqIHZhbHVlcyk7CisgICAgdm9pZCBjb3B5RWxlbWVudFNlZ21lbnQoY29uc3QgRWxlbWVu
dCYgc2VnbWVudCwgdWludDMyX3Qgc3JjT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgsIHVpbnQ2NF90
KiB2YWx1ZXMpOworCisgICAgYm9vbCBpc0ltcG9ydEZ1bmN0aW9uKHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZnVuY3Rpb25JbmRleCA8IGNhbGxl
ZUdyb3VwKCktPmZ1bmN0aW9uSW1wb3J0Q291bnQoKTsKKyAgICB9CisKKyAgICB2b2lkIHRhYmxl
SW5pdCh1aW50MzJfdCBkc3RPZmZzZXQsIHVpbnQzMl90IHNyY09mZnNldCwgdWludDMyX3QgbGVu
Z3RoLCB1aW50MzJfdCBlbGVtZW50SW5kZXgsIHVpbnQzMl90IHRhYmxlSW5kZXgpOworCisgICAg
dm9pZCB0YWJsZUNvcHkodWludDMyX3QgZHN0T2Zmc2V0LCB1aW50MzJfdCBzcmNPZmZzZXQsIHVp
bnQzMl90IGxlbmd0aCwgdWludDMyX3QgZHN0VGFibGVJbmRleCwgdWludDMyX3Qgc3JjVGFibGVJ
bmRleCk7CisKKyAgICB2b2lkIGVsZW1Ecm9wKHVpbnQzMl90IGVsZW1lbnRJbmRleCk7CisKKyAg
ICBib29sIG1lbW9yeUluaXQodWludDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3Qgc3JjQWRkcmVz
cywgdWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBkYXRhU2VnbWVudEluZGV4KTsKKworICAgIHZv
aWQgZGF0YURyb3AodWludDMyX3QgZGF0YVNlZ21lbnRJbmRleCk7CisKKyAgICB2b2lkKiBjYWNo
ZWRNZW1vcnkoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZE1lbW9yeS5nZXRNYXlCZU51bGwoKTsg
fQorICAgIHNpemVfdCBjYWNoZWRCb3VuZHNDaGVja2luZ1NpemUoKSBjb25zdCB7IHJldHVybiBt
X2NhY2hlZEJvdW5kc0NoZWNraW5nU2l6ZTsgfQorCisgICAgdm9pZCBzZXRNZW1vcnkoUmVmPE1l
bW9yeT4mJiBtZW1vcnkpCisgICAgeworICAgICAgICBtX21lbW9yeSA9IFdURk1vdmUobWVtb3J5
KTsKKyAgICAgICAgbV9tZW1vcnkuZ2V0KCktPnJlZ2lzdGVySW5zdGFuY2UoKnRoaXMpOworICAg
ICAgICB1cGRhdGVDYWNoZWRNZW1vcnkoKTsKKyAgICB9CisgICAgdm9pZCB1cGRhdGVDYWNoZWRN
ZW1vcnkoKQorICAgIHsKKyAgICAgICAgaWYgKG1fbWVtb3J5ICE9IG51bGxwdHIpIHsKKyAgICAg
ICAgICAgIC8vIE5vdGU6IEluIE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNraW5nLCBtYXBwZWRDYXBh
Y2l0eSgpID09IHNpemUoKS4KKyAgICAgICAgICAgIC8vIFdlIGFzc2VydCB0aGlzIGluIHRoZSBj
b25zdHJ1Y3RvciBvZiBNZW1vcnlIYW5kbGUuCisjaWYgQ1BVKEFSTSkKKyAgICAgICAgICAgIC8v
IFNoYXJlZCBtZW1vcnkgcmVxdWlyZXMgc2lnbmFsaW5nIG1lbW9yeSB3aGljaCBpcyBub3QgYXZh
aWxhYmxlCisgICAgICAgICAgICAvLyBvbiBBUk12NyB5ZXQuIEluIG9yZGVyIHRvIGdldCBtb3Jl
IG9mIHRoZSB0ZXN0IHN1aXRlIHRvIHJ1biwgd2UKKyAgICAgICAgICAgIC8vIGNhbiBzdGlsbCB1
c2UgYSBzaGFyZWQgbWVtb3J5IGJ5IHVzaW5nIGJvdW5kcyBjaGVja2luZywgYnkgdXNpbmcKKyAg
ICAgICAgICAgIC8vIHRoZSBhY3R1YWwgc2l6ZSBoZXJlLCBidXQgdGhpcyBtZWFucyB3ZSBjYW5u
b3QgZ3JvdyB0aGUgc2hhcmVkCisgICAgICAgICAgICAvLyBtZW1vcnkgc2FmZWx5IGluIGNhc2Ug
aXQncyB1c2VkIGJ5IG11bHRpcGxlIHRocmVhZHMuIE9uY2UgdGhlCisgICAgICAgICAgICAvLyBz
aWduYWwgaGFuZGxlciBhcmUgYXZhaWxhYmxlLCBtX2NhY2hlZEJvdW5kc0NoZWNraW5nU2l6ZSBz
aG91bGQKKyAgICAgICAgICAgIC8vIGJlIHNldCB0byB1c2UgbWVtb3J5KCktPm1hcHBlZENhcGFj
aXR5KCkgbGlrZSBvdGhlciBwbGF0Zm9ybXMsCisgICAgICAgICAgICAvLyBhbmQgYXQgdGhhdCBw
b2ludCBncm93aW5nIHRoZSBzaGFyZWQgbWVtb3J5IHdpbGwgYmUgc2FmZS4KKyAgICAgICAgICAg
IG1fY2FjaGVkQm91bmRzQ2hlY2tpbmdTaXplID0gbWVtb3J5KCktPnNpemUoKTsKKyNlbHNlCisg
ICAgICAgICAgICBtX2NhY2hlZEJvdW5kc0NoZWNraW5nU2l6ZSA9IG1lbW9yeSgpLT5tYXBwZWRD
YXBhY2l0eSgpOworI2VuZGlmCisgICAgICAgICAgICBtX2NhY2hlZE1lbW9yeSA9IENhZ2VkUHRy
PEdpZ2FjYWdlOjpQcmltaXRpdmUsIHZvaWQ+KG1lbW9yeSgpLT5iYXNlUG9pbnRlcigpKTsKKyAg
ICAgICAgICAgIEFTU0VSVChtZW1vcnkoKS0+YmFzZVBvaW50ZXIoKSA9PSBjYWNoZWRNZW1vcnko
KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQzMl90IGxvYWRJMzJHbG9iYWwodW5zaWdu
ZWQgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEdsb2JhbDo6VmFsdWUqIHNsb3QgPSBtX2dsb2Jh
bHMgKyBpOworICAgICAgICBpZiAobV9nbG9iYWxzVG9CaW5kaW5nLmdldChpKSkgeworICAgICAg
ICAgICAgc2xvdCA9IHNsb3QtPm1fcG9pbnRlcjsKKyAgICAgICAgICAgIGlmICghc2xvdCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc2xvdC0+
bV9wcmltaXRpdmU7CisgICAgfQorICAgIGludDY0X3QgbG9hZEk2NEdsb2JhbCh1bnNpZ25lZCBp
KSBjb25zdAorICAgIHsKKyAgICAgICAgR2xvYmFsOjpWYWx1ZSogc2xvdCA9IG1fZ2xvYmFscyAr
IGk7CisgICAgICAgIGlmIChtX2dsb2JhbHNUb0JpbmRpbmcuZ2V0KGkpKSB7CisgICAgICAgICAg
ICBzbG90ID0gc2xvdC0+bV9wb2ludGVyOworICAgICAgICAgICAgaWYgKCFzbG90KQorICAgICAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzbG90LT5tX3By
aW1pdGl2ZTsKKyAgICB9CisgICAgdm9pZCBzZXRHbG9iYWwodW5zaWduZWQgaSwgaW50NjRfdCBi
aXRzKQorICAgIHsKKyAgICAgICAgR2xvYmFsOjpWYWx1ZSogc2xvdCA9IG1fZ2xvYmFscyArIGk7
CisgICAgICAgIGlmIChtX2dsb2JhbHNUb0JpbmRpbmcuZ2V0KGkpKSB7CisgICAgICAgICAgICBz
bG90ID0gc2xvdC0+bV9wb2ludGVyOworICAgICAgICAgICAgaWYgKCFzbG90KQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzbG90LT5tX3ByaW1pdGl2ZSA9IGJp
dHM7CisgICAgfQorCisgICAgdjEyOF90IGxvYWRWMTI4R2xvYmFsKHVuc2lnbmVkIGkpIGNvbnN0
CisgICAgeworICAgICAgICBHbG9iYWw6OlZhbHVlKiBzbG90ID0gbV9nbG9iYWxzICsgaTsKKyAg
ICAgICAgaWYgKG1fZ2xvYmFsc1RvQmluZGluZy5nZXQoaSkpIHsKKyAgICAgICAgICAgIHNsb3Qg
PSBzbG90LT5tX3BvaW50ZXI7CisgICAgICAgICAgICBpZiAoIXNsb3QpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc2xvdC0+bV92ZWN0b3I7
CisgICAgfQorICAgIHZvaWQgc2V0R2xvYmFsKHVuc2lnbmVkIGksIHYxMjhfdCBiaXRzKQorICAg
IHsKKyAgICAgICAgR2xvYmFsOjpWYWx1ZSogc2xvdCA9IG1fZ2xvYmFscyArIGk7CisgICAgICAg
IGlmIChtX2dsb2JhbHNUb0JpbmRpbmcuZ2V0KGkpKSB7CisgICAgICAgICAgICBzbG90ID0gc2xv
dC0+bV9wb2ludGVyOworICAgICAgICAgICAgaWYgKCFzbG90KQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBzbG90LT5tX3ZlY3RvciA9IGJpdHM7CisgICAgfQor
ICAgIHZvaWQgc2V0R2xvYmFsKHVuc2lnbmVkLCBKU1ZhbHVlKTsKKyAgICB2b2lkIGxpbmtHbG9i
YWwodW5zaWduZWQsIFJlZjxHbG9iYWw+JiYpOworICAgIGNvbnN0IEJpdFZlY3RvciYgZ2xvYmFs
c1RvTWFyaygpIHsgcmV0dXJuIG1fZ2xvYmFsc1RvTWFyazsgfQorICAgIGNvbnN0IEJpdFZlY3Rv
ciYgZ2xvYmFsc1RvQmluZGluZygpIHsgcmV0dXJuIG1fZ2xvYmFsc1RvQmluZGluZzsgfQorICAg
IEpTVmFsdWUgZ2V0RnVuY3Rpb25XcmFwcGVyKHVuc2lnbmVkKSBjb25zdDsKKyAgICB0eXBlbmFt
ZSBGdW5jdGlvbldyYXBwZXJNYXA6OlZhbHVlc0NvbnN0SXRlcmF0b3JSYW5nZSBmdW5jdGlvbldy
YXBwZXJzKCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbldyYXBwZXJzLnZhbHVlcygpOyB9Cisg
ICAgdm9pZCBzZXRGdW5jdGlvbldyYXBwZXIodW5zaWduZWQsIEpTVmFsdWUpOworCisgICAgV2Fz
bTo6R2xvYmFsKiBnZXRHbG9iYWxCaW5kaW5nKHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICBB
U1NFUlQobV9nbG9iYWxzVG9CaW5kaW5nLmdldChpKSk7CisgICAgICAgIEdsb2JhbDo6VmFsdWUq
IHBvaW50ZXIgPSBtX2dsb2JhbHNbaV0ubV9wb2ludGVyOworICAgICAgICBpZiAoIXBvaW50ZXIp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuICZXYXNtOjpHbG9i
YWw6OmZyb21CaW5kaW5nKCpwb2ludGVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHBy
IHB0cmRpZmZfdCBvZmZzZXRPZk1lbW9yeSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJbnN0
YW5jZSwgbV9tZW1vcnkpOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3Qgb2Zmc2V0
T2ZHbG9iYWxzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEluc3RhbmNlLCBtX2dsb2JhbHMp
OyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYWNoZWRNZW1vcnko
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSW5zdGFuY2UsIG1fY2FjaGVkTWVtb3J5KTsgfQor
ICAgIHN0YXRpYyBjb25zdGV4cHIgcHRyZGlmZl90IG9mZnNldE9mQ2FjaGVkQm91bmRzQ2hlY2tp
bmdTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEluc3RhbmNlLCBtX2NhY2hlZEJvdW5k
c0NoZWNraW5nU2l6ZSk7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIHB0cmRpZmZfdCBvZmZzZXRP
ZlRlbXBvcmFyeUNhbGxGcmFtZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJbnN0YW5jZSwg
bV90ZW1wb3JhcnlDYWxsRnJhbWUpOyB9CisKKyAgICAvLyBUYWlsIGFjY2Vzc29ycy4KKyAgICBz
dGF0aWMgY29uc3RleHByIHNpemVfdCBvZmZzZXRPZlRhaWwoKSB7IHJldHVybiBXVEY6OnJvdW5k
VXBUb011bHRpcGxlT2Y8c2l6ZW9mKHVpbnQ2NF90KT4oc2l6ZW9mKEluc3RhbmNlKSk7IH0KKwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgdWludHB0cl90IE51bGxXYXNtQ2FsbGVlID0gMDsKKworICAg
IHN0cnVjdCBJbXBvcnRGdW5jdGlvbkluZm8geworICAgICAgICAvLyBUYXJnZXQgaW5zdGFuY2Ug
YW5kIGVudHJ5cG9pbnQgYXJlIG9ubHkgc2V0IGZvciB3YXNtLT53YXNtIGNhbGxzLCBhbmQgYXJl
IG90aGVyd2lzZSBudWxscHRyLiBUaGUganMtc3BlY2lmaWMgbG9naWMgb2NjdXJzIHRocm91Z2gg
aW1wb3J0IGZ1bmN0aW9uLgorICAgICAgICBJbnN0YW5jZSogdGFyZ2V0SW5zdGFuY2UgeyBudWxs
cHRyIH07CisgICAgICAgIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlv
biB3YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB7IG51bGxwdHIgfTsKKyAgICAgICAgQ29kZVB0
cjxXYXNtRW50cnlQdHJUYWc+IGltcG9ydEZ1bmN0aW9uU3R1YjsKKyAgICAgICAgV3JpdGVCYXJy
aWVyPEpTT2JqZWN0PiBpbXBvcnRGdW5jdGlvbiB7IH07CisgICAgICAgIC8vIFRoaXMgaXMgb25s
eSB1c2VkIHdoZW4gd2UgbmVlZCB0byBqdW1wIGRpcmVjdGx5IGludG8gdGhlIExMSW50L0lQSW50
LgorICAgICAgICBjb25zdCB1aW50cHRyX3QqIGJveGVkVGFyZ2V0Q2FsbGVlTG9hZExvY2F0aW9u
IHsgJk51bGxXYXNtQ2FsbGVlIH07CisgICAgICAgIERhdGFPbmx5Q2FsbExpbmtJbmZvIGNhbGxM
aW5rSW5mbzsKKyNpZiBDUFUoQUREUkVTUzMyKQorICAgICAgICB2b2lkKiBfIHsgbnVsbHB0ciB9
OyAvLyBwYWRkaW5nCisjZW5kaWYKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3Qg
b2Zmc2V0T2ZDYWxsTGlua0luZm8oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSW1wb3J0RnVu
Y3Rpb25JbmZvLCBjYWxsTGlua0luZm8pOyB9CisgICAgfTsKKyAgICB1bnNpZ25lZCBudW1JbXBv
cnRGdW5jdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX251bUltcG9ydEZ1bmN0aW9uczsgfQorICAg
IEltcG9ydEZ1bmN0aW9uSW5mbyogaW1wb3J0RnVuY3Rpb25JbmZvKHNpemVfdCBpbXBvcnRGdW5j
dGlvbk51bSkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGltcG9ydEZ1bmN0aW9uTnVt
IDwgbV9udW1JbXBvcnRGdW5jdGlvbnMpOworICAgICAgICByZXR1cm4gJmJpdHdpc2VfY2FzdDxJ
bXBvcnRGdW5jdGlvbkluZm8qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZU
YWlsKCkpW2ltcG9ydEZ1bmN0aW9uTnVtXTsKKyAgICB9CisgICAgc3RhdGljIHNpemVfdCBvZmZz
ZXRPZlRhcmdldEluc3RhbmNlKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zm
c2V0T2ZUYWlsKCkgKyBpbXBvcnRGdW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRGdW5jdGlvbklu
Zm8pICsgT0JKRUNUX09GRlNFVE9GKEltcG9ydEZ1bmN0aW9uSW5mbywgdGFyZ2V0SW5zdGFuY2Up
OyB9CisgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9u
KHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zmc2V0T2ZUYWlsKCkgKyBpbXBv
cnRGdW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pICsgT0JKRUNUX09GRlNF
VE9GKEltcG9ydEZ1bmN0aW9uSW5mbywgd2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24pOyB9Cisg
ICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkJveGVkVGFyZ2V0Q2FsbGVlTG9hZExvY2F0aW9uKHNp
emVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zmc2V0T2ZUYWlsKCkgKyBpbXBvcnRG
dW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pICsgT0JKRUNUX09GRlNFVE9G
KEltcG9ydEZ1bmN0aW9uSW5mbywgYm94ZWRUYXJnZXRDYWxsZWVMb2FkTG9jYXRpb24pOyB9Cisg
ICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkltcG9ydEZ1bmN0aW9uU3R1YihzaXplX3QgaW1wb3J0
RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG9mZnNldE9mVGFpbCgpICsgaW1wb3J0RnVuY3Rpb25OdW0g
KiBzaXplb2YoSW1wb3J0RnVuY3Rpb25JbmZvKSArIE9CSkVDVF9PRkZTRVRPRihJbXBvcnRGdW5j
dGlvbkluZm8sIGltcG9ydEZ1bmN0aW9uU3R1Yik7IH0KKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNl
dE9mSW1wb3J0RnVuY3Rpb24oc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBvZmZz
ZXRPZlRhaWwoKSArIGltcG9ydEZ1bmN0aW9uTnVtICogc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5m
bykgKyBPQkpFQ1RfT0ZGU0VUT0YoSW1wb3J0RnVuY3Rpb25JbmZvLCBpbXBvcnRGdW5jdGlvbik7
IH0KKyAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mQ2FsbExpbmtJbmZvKHNpemVfdCBpbXBvcnRG
dW5jdGlvbk51bSkgeyByZXR1cm4gb2Zmc2V0T2ZUYWlsKCkgKyBpbXBvcnRGdW5jdGlvbk51bSAq
IHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pICsgSW1wb3J0RnVuY3Rpb25JbmZvOjpvZmZzZXRP
ZkNhbGxMaW5rSW5mbygpOyB9CisgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiYgaW1wb3J0RnVu
Y3Rpb24odW5zaWduZWQgaW1wb3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuIGltcG9ydEZ1bmN0aW9u
SW5mbyhpbXBvcnRGdW5jdGlvbk51bSktPmltcG9ydEZ1bmN0aW9uOyB9CisKKyAgICBzdGF0aWNf
YXNzZXJ0KHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pID09IFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZjxzaXplb2YodWludDY0X3QpPihzaXplb2YoSW1wb3J0RnVuY3Rpb25JbmZvKSksICJXZSBy
ZWx5IG9uIHRoaXMgZm9yIHRoZSBhbGlnbm1lbnQgdG8gYmUgY29ycmVjdCIpOworICAgIHN0YXRp
YyBjb25zdGV4cHIgc2l6ZV90IG9mZnNldE9mVGFibGVQdHIodW5zaWduZWQgbnVtSW1wb3J0RnVu
Y3Rpb25zLCB1bnNpZ25lZCBpKSB7IHJldHVybiBvZmZzZXRPZlRhaWwoKSArIHNpemVvZihJbXBv
cnRGdW5jdGlvbkluZm8pICogbnVtSW1wb3J0RnVuY3Rpb25zICsgc2l6ZW9mKFRhYmxlKikgKiBp
OyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgb2Zmc2V0T2ZHbG9iYWxQdHIodW5zaWdu
ZWQgbnVtSW1wb3J0RnVuY3Rpb25zLCB1bnNpZ25lZCBudW1UYWJsZXMsIHVuc2lnbmVkIGkpIHsg
cmV0dXJuIHJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKEdsb2JhbDo6VmFsdWUpPihvZmZzZXRP
ZlRhaWwoKSArIHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pICogbnVtSW1wb3J0RnVuY3Rpb25z
ICsgc2l6ZW9mKFRhYmxlKikgKiBudW1UYWJsZXMpICsgc2l6ZW9mKEdsb2JhbDo6VmFsdWUpICog
aTsgfQorCisgICAgY29uc3QgVGFnJiB0YWcodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gKm1f
dGFnc1tpXTsgfQorICAgIHZvaWQgc2V0VGFnKHVuc2lnbmVkLCBSZWY8Y29uc3QgVGFnPiYmKTsK
KworICAgIENhbGxGcmFtZSogdGVtcG9yYXJ5Q2FsbEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV90
ZW1wb3JhcnlDYWxsRnJhbWU7IH0KKyAgICB2b2lkIHNldFRlbXBvcmFyeUNhbGxGcmFtZShDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKKyAgICB7CisgICAgICAgIG1fdGVtcG9yYXJ5Q2FsbEZyYW1lID0g
Y2FsbEZyYW1lOworICAgIH0KKworICAgIHZvaWQqIHNvZnRTdGFja0xpbWl0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zb2Z0U3RhY2tMaW1pdDsgfQorCitwcml2YXRlOgorICAgIEluc3RhbmNlKFZNJiwg
SlNHbG9iYWxPYmplY3QqLCBSZWY8TW9kdWxlPiYmKTsKKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90
IGFsbG9jYXRpb25TaXplKENoZWNrZWQ8c2l6ZV90PiBudW1JbXBvcnRGdW5jdGlvbnMsIENoZWNr
ZWQ8c2l6ZV90PiBudW1UYWJsZXMsIENoZWNrZWQ8c2l6ZV90PiBudW1HbG9iYWxzKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKEdsb2JhbDo6VmFsdWUp
PihvZmZzZXRPZlRhaWwoKSArIHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8pICogbnVtSW1wb3J0
RnVuY3Rpb25zICsgc2l6ZW9mKFRhYmxlKikgKiBudW1UYWJsZXMpICsgc2l6ZW9mKEdsb2JhbDo6
VmFsdWUpICogbnVtR2xvYmFsczsKKyAgICB9CisKKyAgICBib29sIGV2YWx1YXRlQ29uc3RhbnRF
eHByZXNzaW9uKHVpbnQ2NF90LCBUeXBlLCB1aW50NjRfdCYpOworCisgICAgVk0qIG1fdm07Cisg
ICAgdm9pZCogbV9zb2Z0U3RhY2tMaW1pdCB7IG51bGxwdHIgfTsKKyAgICBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqIG1fb3duZXIgeyBudWxscHRyIH07CisgICAgSlNHbG9iYWxPYmplY3QqIG1fZ2xv
YmFsT2JqZWN0OyAvLyBUaGlzIGlzIGtlcHQgYnkgSlNXZWJBc3NlbWJseUluc3RhbmNlKi4KKyAg
ICBDYWdlZFB0cjxHaWdhY2FnZTo6UHJpbWl0aXZlLCB2b2lkPiBtX2NhY2hlZE1lbW9yeTsKKyAg
ICBzaXplX3QgbV9jYWNoZWRCb3VuZHNDaGVja2luZ1NpemUgeyAwIH07CisgICAgUmVmPE1vZHVs
ZT4gbV9tb2R1bGU7CisgICAgUmVmUHRyPE1lbW9yeT4gbV9tZW1vcnk7CisKKyAgICBDYWxsRnJh
bWUqIG1fdGVtcG9yYXJ5Q2FsbEZyYW1lIHsgbnVsbHB0ciB9OworICAgIEdsb2JhbDo6VmFsdWUq
IG1fZ2xvYmFscyB7IG51bGxwdHIgfTsKKyAgICBGdW5jdGlvbldyYXBwZXJNYXAgbV9mdW5jdGlv
bldyYXBwZXJzOworICAgIEJpdFZlY3RvciBtX2dsb2JhbHNUb01hcms7CisgICAgQml0VmVjdG9y
IG1fZ2xvYmFsc1RvQmluZGluZzsKKyAgICB1bnNpZ25lZCBtX251bUltcG9ydEZ1bmN0aW9ucyB7
IDAgfTsKKyAgICBIYXNoTWFwPHVpbnQzMl90LCBSZWY8R2xvYmFsPiwgSW50SGFzaDx1aW50MzJf
dD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBtX2xpbmtl
ZEdsb2JhbHM7CisgICAgQml0VmVjdG9yIG1fcGFzc2l2ZUVsZW1lbnRzOworICAgIEJpdFZlY3Rv
ciBtX3Bhc3NpdmVEYXRhU2VnbWVudHM7CisgICAgRml4ZWRWZWN0b3I8UmVmUHRyPGNvbnN0IFRh
Zz4+IG1fdGFnczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtSlMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21KUy5oCmluZGV4
IDc5YzI5MjllNTY0Yi4uMDM0ZTYzYmI2MjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtSlMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
SlMuaApAQCAtNDIsNiArNDIsNyBAQCBjbGFzcyBDYWxsRnJhbWU7CiBuYW1lc3BhY2UgV2FzbSB7
CiAKIHN0cnVjdCBDb21waWxhdGlvbkNvbnRleHQ7CitjbGFzcyBJbnN0YW5jZTsKIHN0cnVjdCBJ
bnRlcm5hbEZ1bmN0aW9uOwogc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uOwogY2xhc3MgVHlwZURl
ZmluaXRpb247CkBAIC01MSw3ICs1Miw3IEBAIHN0cnVjdCBVbmxpbmtlZFdhc21Ub1dhc21DYWxs
OwogdXNpbmcgQ3JlYXRlSlNXcmFwcGVyID0gV1RGOjpGdW5jdGlvbjxzdGQ6OnVuaXF1ZV9wdHI8
SW50ZXJuYWxGdW5jdGlvbj4oQ0NhbGxIZWxwZXJzJiwgY29uc3QgVHlwZURlZmluaXRpb24mLCBW
ZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4qLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYs
IE1lbW9yeU1vZGUsIHVpbnQzMl90KT47CiAKIC8vIENhbGxlZCBhcyBzb29uIGFzIGFuIGV4Y2Vw
dGlvbiBpcyBkZXRlY3RlZC4gVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgUEMgdG8gY29udGludWUg
YXQuCi11c2luZyBUaHJvd1dhc21FeGNlcHRpb24gPSB2b2lkKiAoKikoQ2FsbEZyYW1lKiwgV2Fz
bTo6RXhjZXB0aW9uVHlwZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7Cit1c2luZyBUaHJvd1dh
c21FeGNlcHRpb24gPSB2b2lkKiAoKikoQ2FsbEZyYW1lKiwgV2FzbTo6RXhjZXB0aW9uVHlwZSwg
SW5zdGFuY2UqKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAppbmRleCAyOGJmMjY1NDgwZDEuLmRkNWNkNTdl
ODVkYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
OCwxMCArMjgsOSBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0jaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgIldh
c21GYXVsdFNpZ25hbEhhbmRsZXIuaCIKLSNpbmNsdWRlICJXZWFrR0NTZXRJbmxpbmVzLmgiCisj
aW5jbHVkZSAiV2FzbUluc3RhbmNlLmgiCiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGlj
Lmg+CiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvR2lnYWNhZ2UuaD4K
QEAgLTg4LDE2ICs4NywxNCBAQCBzdGF0aWMgYm9vbCB0cnlBbGxvY2F0ZShWTSYgdm0sIGNvbnN0
IEZ1bmMmIGFsbG9jYXRlKQogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAotTWVtb3J5OjpN
ZW1vcnkoVk0mIHZtKQorTWVtb3J5OjpNZW1vcnkoKQogICAgIDogbV9oYW5kbGUoYWRvcHRSZWYo
Km5ldyBCdWZmZXJNZW1vcnlIYW5kbGUoQnVmZmVyTWVtb3J5SGFuZGxlOjpudWxsQmFzZVBvaW50
ZXIoKSwgMCwgMCwgUGFnZUNvdW50KDApLCBQYWdlQ291bnQoMCksIE1lbW9yeVNoYXJpbmdNb2Rl
OjpEZWZhdWx0LCBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpKQotICAgICwgbV9pbnN0YW5j
ZXModm0pCiB7CiB9CiAKLU1lbW9yeTo6TWVtb3J5KFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWws
IFBhZ2VDb3VudCBtYXhpbXVtLCBNZW1vcnlTaGFyaW5nTW9kZSBzaGFyaW5nTW9kZSwgV1RGOjpG
dW5jdGlvbjx2b2lkKEdyb3dTdWNjZXNzLCBQYWdlQ291bnQsIFBhZ2VDb3VudCk+JiYgZ3Jvd1N1
Y2Nlc3NDYWxsYmFjaykKK01lbW9yeTo6TWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291
bnQgbWF4aW11bSwgTWVtb3J5U2hhcmluZ01vZGUgc2hhcmluZ01vZGUsIFdURjo6RnVuY3Rpb248
dm9pZChHcm93U3VjY2VzcywgUGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2Fs
bGJhY2spCiAgICAgOiBtX2hhbmRsZShhZG9wdFJlZigqbmV3IEJ1ZmZlck1lbW9yeUhhbmRsZShC
dWZmZXJNZW1vcnlIYW5kbGU6Om51bGxCYXNlUG9pbnRlcigpLCAwLCAwLCBpbml0aWFsLCBtYXhp
bXVtLCBzaGFyaW5nTW9kZSwgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKSkKICAgICAsIG1f
Z3Jvd1N1Y2Nlc3NDYWxsYmFjayhXVEZNb3ZlKGdyb3dTdWNjZXNzQ2FsbGJhY2spKQotICAgICwg
bV9pbnN0YW5jZXModm0pCiB7CiAgICAgQVNTRVJUKCFpbml0aWFsLmJ5dGVzKCkpOwogICAgIEFT
U0VSVChtb2RlKCkgPT0gTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpOwpAQCAtMTA1LDQzICsx
MDIsNDEgQEAgTWVtb3J5OjpNZW1vcnkoVk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNv
dW50IG1heGltdW0sIE1lbW9yeVNoYXJpbmdNb2RlIHMKICAgICBBU1NFUlQoYmFzZVBvaW50ZXIo
KSk7CiB9CiAKLU1lbW9yeTo6TWVtb3J5KFZNJiB2bSwgUmVmPEJ1ZmZlck1lbW9yeUhhbmRsZT4m
JiBoYW5kbGUsIFdURjo6RnVuY3Rpb248dm9pZChHcm93U3VjY2VzcywgUGFnZUNvdW50LCBQYWdl
Q291bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spCitNZW1vcnk6Ok1lbW9yeShSZWY8QnVmZmVy
TWVtb3J5SGFuZGxlPiYmIGhhbmRsZSwgV1RGOjpGdW5jdGlvbjx2b2lkKEdyb3dTdWNjZXNzLCBQ
YWdlQ291bnQsIFBhZ2VDb3VudCk+JiYgZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykKICAgICA6IG1faGFu
ZGxlKFdURk1vdmUoaGFuZGxlKSkKICAgICAsIG1fZ3Jvd1N1Y2Nlc3NDYWxsYmFjayhXVEZNb3Zl
KGdyb3dTdWNjZXNzQ2FsbGJhY2spKQotICAgICwgbV9pbnN0YW5jZXModm0pCiB7CiAgICAgZGF0
YUxvZ0xuSWYodmVyYm9zZSwgIk1lbW9yeTo6TWVtb3J5IGFsbG9jYXRpbmcgIiwgKnRoaXMpOwog
fQogCi1NZW1vcnk6Ok1lbW9yeShWTSYgdm0sIFJlZjxCdWZmZXJNZW1vcnlIYW5kbGU+JiYgaGFu
ZGxlLCBSZWY8U2hhcmVkQXJyYXlCdWZmZXJDb250ZW50cz4mJiBzaGFyZWQsIFdURjo6RnVuY3Rp
b248dm9pZChHcm93U3VjY2VzcywgUGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNz
Q2FsbGJhY2spCitNZW1vcnk6Ok1lbW9yeShSZWY8QnVmZmVyTWVtb3J5SGFuZGxlPiYmIGhhbmRs
ZSwgUmVmPFNoYXJlZEFycmF5QnVmZmVyQ29udGVudHM+JiYgc2hhcmVkLCBXVEY6OkZ1bmN0aW9u
PHZvaWQoR3Jvd1N1Y2Nlc3MsIFBhZ2VDb3VudCwgUGFnZUNvdW50KT4mJiBncm93U3VjY2Vzc0Nh
bGxiYWNrKQogICAgIDogbV9oYW5kbGUoV1RGTW92ZShoYW5kbGUpKQogICAgICwgbV9zaGFyZWQo
V1RGTW92ZShzaGFyZWQpKQogICAgICwgbV9ncm93U3VjY2Vzc0NhbGxiYWNrKFdURk1vdmUoZ3Jv
d1N1Y2Nlc3NDYWxsYmFjaykpCi0gICAgLCBtX2luc3RhbmNlcyh2bSkKIHsKICAgICBkYXRhTG9n
TG5JZih2ZXJib3NlLCAiTWVtb3J5OjpNZW1vcnkgYWxsb2NhdGluZyAiLCAqdGhpcyk7CiB9CiAK
LVJlZjxNZW1vcnk+IE1lbW9yeTo6Y3JlYXRlKFZNJiB2bSkKK1JlZjxNZW1vcnk+IE1lbW9yeTo6
Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZW1vcnkodm0pKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBNZW1vcnkoKSk7CiB9CiAKLVJlZjxNZW1vcnk+IE1lbW9yeTo6
Y3JlYXRlKFZNJiB2bSwgUmVmPEJ1ZmZlck1lbW9yeUhhbmRsZT4mJiBoYW5kbGUsIFdURjo6RnVu
Y3Rpb248dm9pZChHcm93U3VjY2VzcywgUGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNj
ZXNzQ2FsbGJhY2spCitSZWY8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZShSZWY8QnVmZmVyTWVtb3J5
SGFuZGxlPiYmIGhhbmRsZSwgV1RGOjpGdW5jdGlvbjx2b2lkKEdyb3dTdWNjZXNzLCBQYWdlQ291
bnQsIFBhZ2VDb3VudCk+JiYgZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBNZW1vcnkodm0sIFdURk1vdmUoaGFuZGxlKSwgV1RGTW92ZShncm93U3VjY2Vz
c0NhbGxiYWNrKSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1lbW9yeShXVEZNb3ZlKGhh
bmRsZSksIFdURk1vdmUoZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykpKTsKIH0KIAotUmVmPE1lbW9yeT4g
TWVtb3J5OjpjcmVhdGUoVk0mIHZtLCBSZWY8U2hhcmVkQXJyYXlCdWZmZXJDb250ZW50cz4mJiBz
aGFyZWQsIFdURjo6RnVuY3Rpb248dm9pZChHcm93U3VjY2VzcywgUGFnZUNvdW50LCBQYWdlQ291
bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spCitSZWY8TWVtb3J5PiBNZW1vcnk6OmNyZWF0ZShS
ZWY8U2hhcmVkQXJyYXlCdWZmZXJDb250ZW50cz4mJiBzaGFyZWQsIFdURjo6RnVuY3Rpb248dm9p
ZChHcm93U3VjY2VzcywgUGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJh
Y2spCiB7CiAgICAgUmVmUHRyPEJ1ZmZlck1lbW9yeUhhbmRsZT4gaGFuZGxlID0gc2hhcmVkLT5t
ZW1vcnlIYW5kbGUoKTsKICAgICBBU1NFUlQoaGFuZGxlKTsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBNZW1vcnkodm0sIGhhbmRsZS5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKHNoYXJlZCks
IFdURk1vdmUoZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBNZW1vcnkoaGFuZGxlLnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUoc2hhcmVkKSwgV1RGTW92
ZShncm93U3VjY2Vzc0NhbGxiYWNrKSkpOwogfQogCi1SZWY8TWVtb3J5PiBNZW1vcnk6OmNyZWF0
ZVplcm9TaXplZChWTSYgdm0sIE1lbW9yeVNoYXJpbmdNb2RlIHNoYXJpbmdNb2RlLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoR3Jvd1N1Y2Nlc3MsIFBhZ2VDb3VudCwgUGFnZUNvdW50KT4mJiBncm93U3Vj
Y2Vzc0NhbGxiYWNrKQorUmVmPE1lbW9yeT4gTWVtb3J5OjpjcmVhdGVaZXJvU2l6ZWQoTWVtb3J5
U2hhcmluZ01vZGUgc2hhcmluZ01vZGUsIFdURjo6RnVuY3Rpb248dm9pZChHcm93U3VjY2Vzcywg
UGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgTWVtb3J5KHZtLCBQYWdlQ291bnQoMCksIFBhZ2VDb3VudCgwKSwg
c2hhcmluZ01vZGUsIFdURk1vdmUoZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykpKTsKKyAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBNZW1vcnkoUGFnZUNvdW50KDApLCBQYWdlQ291bnQoMCksIHNoYXJpbmdN
b2RlLCBXVEZNb3ZlKGdyb3dTdWNjZXNzQ2FsbGJhY2spKSk7CiB9CiAKIFJlZlB0cjxNZW1vcnk+
IE1lbW9yeTo6dHJ5Q3JlYXRlKFZNJiB2bSwgUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBt
YXhpbXVtLCBNZW1vcnlTaGFyaW5nTW9kZSBzaGFyaW5nTW9kZSwgV1RGOjpGdW5jdGlvbjx2b2lk
KEdyb3dTdWNjZXNzLCBQYWdlQ291bnQsIFBhZ2VDb3VudCk+JiYgZ3Jvd1N1Y2Nlc3NDYWxsYmFj
aykKQEAgLTE1OCw3ICsxNTMsNyBAQCBSZWZQdHI8TWVtb3J5PiBNZW1vcnk6OnRyeUNyZWF0ZShW
TSYgdm0sIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgTQogICAgIGlmICht
YXhpbXVtICYmICFtYXhpbXVtQnl0ZXMpIHsKICAgICAgICAgLy8gVXNlciBzcGVjaWZpZWQgYSB6
ZXJvIG1heGltdW0sIGluaXRpYWwgc2l6ZSBtdXN0IGFsc28gYmUgemVyby4KICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIWluaXRpYWxCeXRlcyk7Ci0gICAgICAgIHJldHVybiBjcmVhdGVaZXJvU2l6
ZWQodm0sIHNoYXJpbmdNb2RlLCBXVEZNb3ZlKGdyb3dTdWNjZXNzQ2FsbGJhY2spKTsKKyAgICAg
ICAgcmV0dXJuIGNyZWF0ZVplcm9TaXplZChzaGFyaW5nTW9kZSwgV1RGTW92ZShncm93U3VjY2Vz
c0NhbGxiYWNrKSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgZG9uZSA9IHRyeUFsbG9jYXRlKHZt
LApAQCAtMTg3LDEzICsxODIsMTMgQEAgUmVmUHRyPE1lbW9yeT4gTWVtb3J5Ojp0cnlDcmVhdGUo
Vk0mIHZtLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIE0KICAgICAgICAg
T1NBbGxvY2F0b3I6OnByb3RlY3QoZmFzdE1lbW9yeSArIGluaXRpYWxCeXRlcywgQnVmZmVyTWVt
b3J5SGFuZGxlOjpmYXN0TWFwcGVkQnl0ZXMoKSAtIGluaXRpYWxCeXRlcywgcmVhZGFibGUsIHdy
aXRhYmxlKTsKICAgICAgICAgc3dpdGNoIChzaGFyaW5nTW9kZSkgewogICAgICAgICBjYXNlIE1l
bW9yeVNoYXJpbmdNb2RlOjpEZWZhdWx0OiB7Ci0gICAgICAgICAgICByZXR1cm4gTWVtb3J5Ojpj
cmVhdGUodm0sIGFkb3B0UmVmKCpuZXcgQnVmZmVyTWVtb3J5SGFuZGxlKGZhc3RNZW1vcnksIGlu
aXRpYWxCeXRlcywgQnVmZmVyTWVtb3J5SGFuZGxlOjpmYXN0TWFwcGVkQnl0ZXMoKSwgaW5pdGlh
bCwgbWF4aW11bSwgTWVtb3J5U2hhcmluZ01vZGU6OkRlZmF1bHQsIE1lbW9yeU1vZGU6OlNpZ25h
bGluZykpLCBXVEZNb3ZlKGdyb3dTdWNjZXNzQ2FsbGJhY2spKTsKKyAgICAgICAgICAgIHJldHVy
biBNZW1vcnk6OmNyZWF0ZShhZG9wdFJlZigqbmV3IEJ1ZmZlck1lbW9yeUhhbmRsZShmYXN0TWVt
b3J5LCBpbml0aWFsQnl0ZXMsIEJ1ZmZlck1lbW9yeUhhbmRsZTo6ZmFzdE1hcHBlZEJ5dGVzKCks
IGluaXRpYWwsIG1heGltdW0sIE1lbW9yeVNoYXJpbmdNb2RlOjpEZWZhdWx0LCBNZW1vcnlNb2Rl
OjpTaWduYWxpbmcpKSwgV1RGTW92ZShncm93U3VjY2Vzc0NhbGxiYWNrKSk7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBNZW1vcnlTaGFyaW5nTW9kZTo6U2hhcmVkOiB7CiAgICAgICAgICAgICBh
dXRvIGhhbmRsZSA9IGFkb3B0UmVmKCpuZXcgQnVmZmVyTWVtb3J5SGFuZGxlKGZhc3RNZW1vcnks
IGluaXRpYWxCeXRlcywgQnVmZmVyTWVtb3J5SGFuZGxlOjpmYXN0TWFwcGVkQnl0ZXMoKSwgaW5p
dGlhbCwgbWF4aW11bSwgTWVtb3J5U2hhcmluZ01vZGU6OlNoYXJlZCwgTWVtb3J5TW9kZTo6U2ln
bmFsaW5nKSk7CiAgICAgICAgICAgICBhdXRvIHNwYW4gPSBoYW5kbGUtPm11dGFibGVTcGFuKCk7
CiAgICAgICAgICAgICBhdXRvIGNvbnRlbnQgPSBTaGFyZWRBcnJheUJ1ZmZlckNvbnRlbnRzOjpj
cmVhdGUoc3BhbiwgbWF4aW11bUJ5dGVzLCBXVEZNb3ZlKGhhbmRsZSksIG51bGxwdHIsIFNoYXJl
ZEFycmF5QnVmZmVyQ29udGVudHM6Ok1vZGU6OldlYkFzc2VtYmx5KTsKLSAgICAgICAgICAgIHJl
dHVybiBNZW1vcnk6OmNyZWF0ZSh2bSwgV1RGTW92ZShjb250ZW50KSwgV1RGTW92ZShncm93U3Vj
Y2Vzc0NhbGxiYWNrKSk7CisgICAgICAgICAgICByZXR1cm4gTWVtb3J5OjpjcmVhdGUoV1RGTW92
ZShjb250ZW50KSwgV1RGTW92ZShncm93U3VjY2Vzc0NhbGxiYWNrKSk7CiAgICAgICAgIH0KICAg
ICAgICAgfQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjA2LDE0
ICsyMDEsMTQgQEAgUmVmUHRyPE1lbW9yeT4gTWVtb3J5Ojp0cnlDcmVhdGUoVk0mIHZtLCBQYWdl
Q291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIE0KICAgICBzd2l0Y2ggKHNoYXJpbmdN
b2RlKSB7CiAgICAgY2FzZSBNZW1vcnlTaGFyaW5nTW9kZTo6RGVmYXVsdDogewogICAgICAgICBp
ZiAoIWluaXRpYWxCeXRlcykKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5
KHZtLCBpbml0aWFsLCBtYXhpbXVtLCBNZW1vcnlTaGFyaW5nTW9kZTo6RGVmYXVsdCwgV1RGTW92
ZShncm93U3VjY2Vzc0NhbGxiYWNrKSkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBNZW1vcnkoaW5pdGlhbCwgbWF4aW11bSwgTWVtb3J5U2hhcmluZ01vZGU6OkRlZmF1bHQsIFdU
Rk1vdmUoZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykpKTsKIAogICAgICAgICB2b2lkKiBzbG93TWVtb3J5
ID0gR2lnYWNhZ2U6OnRyeUFsbG9jYXRlWmVyb2VkVmlydHVhbFBhZ2VzKEdpZ2FjYWdlOjpQcmlt
aXRpdmUsIGluaXRpYWxCeXRlcyk7CiAgICAgICAgIGlmICghc2xvd01lbW9yeSkgewogICAgICAg
ICAgICAgQnVmZmVyTWVtb3J5TWFuYWdlcjo6c2luZ2xldG9uKCkuZnJlZVBoeXNpY2FsQnl0ZXMo
aW5pdGlhbEJ5dGVzKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBNZW1vcnk6OmNyZWF0ZSh2bSwgYWRvcHRSZWYoKm5ldyBCdWZmZXJNZW1v
cnlIYW5kbGUoc2xvd01lbW9yeSwgaW5pdGlhbEJ5dGVzLCBpbml0aWFsQnl0ZXMsIGluaXRpYWws
IG1heGltdW0sIE1lbW9yeVNoYXJpbmdNb2RlOjpEZWZhdWx0LCBNZW1vcnlNb2RlOjpCb3VuZHND
aGVja2luZykpLCBXVEZNb3ZlKGdyb3dTdWNjZXNzQ2FsbGJhY2spKTsKKyAgICAgICAgcmV0dXJu
IE1lbW9yeTo6Y3JlYXRlKGFkb3B0UmVmKCpuZXcgQnVmZmVyTWVtb3J5SGFuZGxlKHNsb3dNZW1v
cnksIGluaXRpYWxCeXRlcywgaW5pdGlhbEJ5dGVzLCBpbml0aWFsLCBtYXhpbXVtLCBNZW1vcnlT
aGFyaW5nTW9kZTo6RGVmYXVsdCwgTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKSwgV1RGTW92
ZShncm93U3VjY2Vzc0NhbGxiYWNrKSk7CiAgICAgfQogICAgIGNhc2UgTWVtb3J5U2hhcmluZ01v
ZGU6OlNoYXJlZDogewogICAgICAgICBjaGFyKiBzbG93TWVtb3J5ID0gbnVsbHB0cjsKQEAgLTIz
NSw3ICsyMzAsNyBAQCBSZWZQdHI8TWVtb3J5PiBNZW1vcnk6OnRyeUNyZWF0ZShWTSYgdm0sIFBh
Z2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgTQogICAgICAgICBhdXRvIGhhbmRs
ZSA9IGFkb3B0UmVmKCpuZXcgQnVmZmVyTWVtb3J5SGFuZGxlKHNsb3dNZW1vcnksIGluaXRpYWxC
eXRlcywgbWF4aW11bUJ5dGVzLCBpbml0aWFsLCBtYXhpbXVtLCBNZW1vcnlTaGFyaW5nTW9kZTo6
U2hhcmVkLCBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOwogICAgICAgICBhdXRvIHNwYW4g
PSBoYW5kbGUtPm11dGFibGVTcGFuKCk7CiAgICAgICAgIGF1dG8gY29udGVudCA9IFNoYXJlZEFy
cmF5QnVmZmVyQ29udGVudHM6OmNyZWF0ZShzcGFuLCBtYXhpbXVtQnl0ZXMsIFdURk1vdmUoaGFu
ZGxlKSwgbnVsbHB0ciwgU2hhcmVkQXJyYXlCdWZmZXJDb250ZW50czo6TW9kZTo6V2ViQXNzZW1i
bHkpOwotICAgICAgICByZXR1cm4gTWVtb3J5OjpjcmVhdGUodm0sIFdURk1vdmUoY29udGVudCks
IFdURk1vdmUoZ3Jvd1N1Y2Nlc3NDYWxsYmFjaykpOworICAgICAgICByZXR1cm4gTWVtb3J5Ojpj
cmVhdGUoV1RGTW92ZShjb250ZW50KSwgV1RGTW92ZShncm93U3VjY2Vzc0NhbGxiYWNrKSk7CiAg
ICAgfQogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjg4LDcg
KzI4Myw3IEBAIEV4cGVjdGVkPFBhZ2VDb3VudCwgR3Jvd0ZhaWxSZWFzb24+IE1lbW9yeTo6Z3Jv
d1NoYXJlZChWTSYgdm0sIFBhZ2VDb3VudCBkZWx0YSkKICAgICBtX2dyb3dTdWNjZXNzQ2FsbGJh
Y2soR3Jvd1N1Y2Nlc3NUYWcsIG9sZFBhZ2VDb3VudCwgbmV3UGFnZUNvdW50KTsKICAgICAvLyBV
cGRhdGUgY2FjaGUgZm9yIGluc3RhbmNlCiAgICAgZm9yIChhdXRvJiBpbnN0YW5jZSA6IG1faW5z
dGFuY2VzKSB7Ci0gICAgICAgIGlmIChhdXRvKiBzdHJvbmdSZWZlcmVuY2UgPSBpbnN0YW5jZS5n
ZXQoKSkKKyAgICAgICAgaWYgKGF1dG8gc3Ryb25nUmVmZXJlbmNlID0gaW5zdGFuY2UuZ2V0KCkp
CiAgICAgICAgICAgICBzdHJvbmdSZWZlcmVuY2UtPnVwZGF0ZUNhY2hlZE1lbW9yeSgpOwogICAg
IH0KICAgICByZXR1cm4gb2xkUGFnZUNvdW50OwpAQCAtNDMwLDEwICs0MjUsMTYgQEAgYm9vbCBN
ZW1vcnk6OmluaXQodWludDMyX3Qgb2Zmc2V0LCBjb25zdCB1aW50OF90KiBkYXRhLCB1aW50MzJf
dCBsZW5ndGgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgTWVtb3J5OjpyZWdpc3Rlcklu
c3RhbmNlKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSYgaW5zdGFuY2UpCit2b2lkIE1lbW9yeTo6cmVn
aXN0ZXJJbnN0YW5jZShJbnN0YW5jZSYgaW5zdGFuY2UpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBt
X2luc3RhbmNlcy5hZGQoJmluc3RhbmNlKTsKLSAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVz
dWx0LmlzTmV3RW50cnkpOworICAgIHNpemVfdCBjb3VudCA9IG1faW5zdGFuY2VzLnNpemUoKTsK
KyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7IGluZGV4KyspIHsKKyAg
ICAgICAgaWYgKG1faW5zdGFuY2VzLmF0KGluZGV4KS5nZXQoKSA9PSBudWxscHRyKSB7CisgICAg
ICAgICAgICBtX2luc3RhbmNlcy5hdChpbmRleCkgPSB7IGluc3RhbmNlIH07CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgbV9pbnN0YW5jZXMuYXBwZW5kKHsgaW5z
dGFuY2UgfSk7CiB9CiAKIHZvaWQgTWVtb3J5OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKaW5kZXggMDA3ZWYyMTIyOWU5
Li5jYzRmMGVjNzM1YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21NZW1vcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgK
QEAgLTUxLDYgKzUxLDggQEAgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiBuYW1lc3Bh
Y2UgV2FzbSB7CiAKK2NsYXNzIEluc3RhbmNlOworCiBjbGFzcyBNZW1vcnkgZmluYWwgOiBwdWJs
aWMgUmVmQ291bnRlZDxNZW1vcnk+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNZW1vcnkp
OwogICAgIFdURl9NQUtFX1RaT05FX0FMTE9DQVRFRF9FWFBPUlQoTWVtb3J5LCBKU19FWFBPUlRf
UFJJVkFURSk7CkBAIC02MiwxMCArNjQsMTAgQEAgcHVibGljOgogICAgIGVudW0gU3luY1RyeVRv
UmVjbGFpbSB7IFN5bmNUcnlUb1JlY2xhaW1UYWcgfTsKICAgICBlbnVtIEdyb3dTdWNjZXNzIHsg
R3Jvd1N1Y2Nlc3NUYWcgfTsKIAotICAgIHN0YXRpYyBSZWY8TWVtb3J5PiBjcmVhdGUoVk0mKTsK
LSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmPE1lbW9yeT4gY3JlYXRlKFZNJiwgUmVm
PEJ1ZmZlck1lbW9yeUhhbmRsZT4mJiwgV1RGOjpGdW5jdGlvbjx2b2lkKEdyb3dTdWNjZXNzLCBQ
YWdlQ291bnQsIFBhZ2VDb3VudCk+JiYgZ3Jvd1N1Y2Nlc3NDYWxsYmFjayk7Ci0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIFJlZjxNZW1vcnk+IGNyZWF0ZShWTSYsIFJlZjxTaGFyZWRBcnJh
eUJ1ZmZlckNvbnRlbnRzPiYmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoR3Jvd1N1Y2Nlc3MsIFBhZ2VD
b3VudCwgUGFnZUNvdW50KT4mJiBncm93U3VjY2Vzc0NhbGxiYWNrKTsKLSAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgUmVmPE1lbW9yeT4gY3JlYXRlWmVyb1NpemVkKFZNJiwgTWVtb3J5U2hh
cmluZ01vZGUsIFdURjo6RnVuY3Rpb248dm9pZChHcm93U3VjY2VzcywgUGFnZUNvdW50LCBQYWdl
Q291bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spOworICAgIHN0YXRpYyBSZWY8TWVtb3J5PiBj
cmVhdGUoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmPE1lbW9yeT4gY3JlYXRl
KFJlZjxCdWZmZXJNZW1vcnlIYW5kbGU+JiYsIFdURjo6RnVuY3Rpb248dm9pZChHcm93U3VjY2Vz
cywgUGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spOworICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWY8TWVtb3J5PiBjcmVhdGUoUmVmPFNoYXJlZEFycmF5
QnVmZmVyQ29udGVudHM+JiYsIFdURjo6RnVuY3Rpb248dm9pZChHcm93U3VjY2VzcywgUGFnZUNv
dW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBSZWY8TWVtb3J5PiBjcmVhdGVaZXJvU2l6ZWQoTWVtb3J5U2hhcmluZ01v
ZGUsIFdURjo6RnVuY3Rpb248dm9pZChHcm93U3VjY2VzcywgUGFnZUNvdW50LCBQYWdlQ291bnQp
PiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spOwogICAgIHN0YXRpYyBSZWZQdHI8TWVtb3J5PiB0cnlD
cmVhdGUoVk0mLCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIE1lbW9yeVNo
YXJpbmdNb2RlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoR3Jvd1N1Y2Nlc3MsIFBhZ2VDb3VudCwgUGFn
ZUNvdW50KT4mJiBncm93U3VjY2Vzc0NhbGxiYWNrKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRF
IH5NZW1vcnkoKTsKQEAgLTkwLDcgKzkyLDcgQEAgcHVibGljOgogICAgIGJvb2wgY29weSh1aW50
MzJfdCwgdWludDMyX3QsIHVpbnQzMl90KTsKICAgICBib29sIGluaXQodWludDMyX3QsIGNvbnN0
IHVpbnQ4X3QqLCB1aW50MzJfdCk7CiAKLSAgICB2b2lkIHJlZ2lzdGVySW5zdGFuY2UoSlNXZWJB
c3NlbWJseUluc3RhbmNlJik7CisgICAgdm9pZCByZWdpc3Rlckluc3RhbmNlKEluc3RhbmNlJik7
CiAKICAgICB2b2lkIGNoZWNrTGlmZXRpbWUoKSB7IEFTU0VSVCghZGVsZXRpb25IYXNCZWd1bigp
KTsgfQogCkBAIC05OSwxOCArMTAxLDE3IEBAIHB1YmxpYzoKICAgICBTaGFyZWRBcnJheUJ1ZmZl
ckNvbnRlbnRzKiBzaGFyZWQoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZC5nZXQoKTsgfQogCiBw
cml2YXRlOgotICAgIE1lbW9yeShWTSYpOwotICAgIE1lbW9yeShWTSYsIFJlZjxCdWZmZXJNZW1v
cnlIYW5kbGU+JiYsIFdURjo6RnVuY3Rpb248dm9pZChHcm93U3VjY2VzcywgUGFnZUNvdW50LCBQ
YWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spOwotICAgIE1lbW9yeShWTSYsIFJlZjxC
dWZmZXJNZW1vcnlIYW5kbGU+JiYsIFJlZjxTaGFyZWRBcnJheUJ1ZmZlckNvbnRlbnRzPiYmLCBX
VEY6OkZ1bmN0aW9uPHZvaWQoR3Jvd1N1Y2Nlc3MsIFBhZ2VDb3VudCwgUGFnZUNvdW50KT4mJiBn
cm93U3VjY2Vzc0NhbGxiYWNrKTsKLSAgICBNZW1vcnkoVk0mLCBQYWdlQ291bnQgaW5pdGlhbCwg
UGFnZUNvdW50IG1heGltdW0sIE1lbW9yeVNoYXJpbmdNb2RlLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
R3Jvd1N1Y2Nlc3MsIFBhZ2VDb3VudCwgUGFnZUNvdW50KT4mJiBncm93U3VjY2Vzc0NhbGxiYWNr
KTsKKyAgICBNZW1vcnkoKTsKKyAgICBNZW1vcnkoUmVmPEJ1ZmZlck1lbW9yeUhhbmRsZT4mJiwg
V1RGOjpGdW5jdGlvbjx2b2lkKEdyb3dTdWNjZXNzLCBQYWdlQ291bnQsIFBhZ2VDb3VudCk+JiYg
Z3Jvd1N1Y2Nlc3NDYWxsYmFjayk7CisgICAgTWVtb3J5KFJlZjxCdWZmZXJNZW1vcnlIYW5kbGU+
JiYsIFJlZjxTaGFyZWRBcnJheUJ1ZmZlckNvbnRlbnRzPiYmLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
R3Jvd1N1Y2Nlc3MsIFBhZ2VDb3VudCwgUGFnZUNvdW50KT4mJiBncm93U3VjY2Vzc0NhbGxiYWNr
KTsKKyAgICBNZW1vcnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBNZW1v
cnlTaGFyaW5nTW9kZSwgV1RGOjpGdW5jdGlvbjx2b2lkKEdyb3dTdWNjZXNzLCBQYWdlQ291bnQs
IFBhZ2VDb3VudCk+JiYgZ3Jvd1N1Y2Nlc3NDYWxsYmFjayk7CiAKICAgICBFeHBlY3RlZDxQYWdl
Q291bnQsIEdyb3dGYWlsUmVhc29uPiBncm93U2hhcmVkKFZNJiwgUGFnZUNvdW50KTsKIAogICAg
IFJlZjxCdWZmZXJNZW1vcnlIYW5kbGU+IG1faGFuZGxlOwogICAgIFJlZlB0cjxTaGFyZWRBcnJh
eUJ1ZmZlckNvbnRlbnRzPiBtX3NoYXJlZDsKICAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoR3Jvd1N1
Y2Nlc3MsIFBhZ2VDb3VudCwgUGFnZUNvdW50KT4gbV9ncm93U3VjY2Vzc0NhbGxiYWNrOwotICAg
IC8vIEZJWE1FOiBJZi9XaGVuIG1lcmdpbmcgdGhpcyBpbnRvIEpTV2ViQXNzZW1ibHlNZW1vcnkg
d2Ugc2hvdWxkIGp1c3QgdXNlIGFuIHVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuCi0gICAgV2Vha0dD
U2V0PEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4gbV9pbnN0YW5jZXM7CisgICAgVmVjdG9yPFRocmVh
ZFNhZmVXZWFrUHRyPEluc3RhbmNlPj4gbV9pbnN0YW5jZXM7CiB9OwogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU9NR0lSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdJ
UkdlbmVyYXRvci5jcHAKaW5kZXggZTYwNjA0NmQ1OGYxLi5lOGEzN2YxOGE1YzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdJUkdlbmVyYXRvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0lSR2VuZXJhdG9yLmNwcApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgogI2luY2x1ZGUg
Ildhc21GdW5jdGlvblBhcnNlci5oIgogI2luY2x1ZGUgIldhc21JUkdlbmVyYXRvckhlbHBlcnMu
aCIKKyNpbmNsdWRlICJXYXNtSW5zdGFuY2UuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAj
aW5jbHVkZSAiV2FzbU9TUkVudHJ5RGF0YS5oIgogI2luY2x1ZGUgIldhc21PcGNvZGVPcmlnaW4u
aCIKQEAgLTkwOSw3ICs5MTAsNyBAQCBwcml2YXRlOgogICAgIHsKICNpZiAhVVNFKEJVSUxUSU5f
RlJBTUVfQUREUkVTUykgfHwgQVNTRVJUX0VOQUJMRUQKICAgICAgICAgLy8gUHJlcGFyZSB3YXNt
IG9wZXJhdGlvbiBjYWxscy4KLSAgICAgICAgYXBwZW5kPEIzOjpNZW1vcnlWYWx1ZT4oYmxvY2ss
IGhlYXBJbnN0YW5jZUZpZWxkcygpLCBtX3Byb2MsIEIzOjpTdG9yZSwgb3JpZ2luKCksIGZyYW1l
UG9pbnRlcigpLCBpbnN0YW5jZVZhbHVlKCksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0
T2ZUZW1wb3JhcnlDYWxsRnJhbWUoKSk7CisgICAgICAgIGFwcGVuZDxCMzo6TWVtb3J5VmFsdWU+
KGJsb2NrLCBoZWFwSW5zdGFuY2VGaWVsZHMoKSwgbV9wcm9jLCBCMzo6U3RvcmUsIG9yaWdpbigp
LCBmcmFtZVBvaW50ZXIoKSwgaW5zdGFuY2VWYWx1ZSgpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZUZW1w
b3JhcnlDYWxsRnJhbWUoKSk7CiAjZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0oYmxvY2spOwog
I2VuZGlmCkBAIC05NDYsOCArOTQ3LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGVtaXRBcnJheVNl
dFVuY2hlY2tlZCh1aW50MzJfdCwgVmFsdWUqLCBWYWx1ZSosIFZhbHVlKik7CiAgICAgdm9pZCBl
bWl0U3RydWN0U2V0KFZhbHVlKiwgdWludDMyX3QsIGNvbnN0IFN0cnVjdFR5cGUmLCBWYWx1ZSop
OwogICAgIEV4cHJlc3Npb25UeXBlIFdBUk5fVU5VU0VEX1JFVFVSTiBwdXNoQXJyYXlOZXcodWlu
dDMyX3QgdHlwZUluZGV4LCBWYWx1ZSogaW5pdFZhbHVlLCBFeHByZXNzaW9uVHlwZSBzaXplKTsK
LSAgICB1c2luZyBBcnJheVNlZ21lbnRPcGVyYXRpb24gPSBFbmNvZGVkSlNWYWx1ZSBTWVNWX0FC
SSAoJikoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCB1aW50MzJfdCwgdWludDMyX3QsIHVp
bnQzMl90LCB1aW50MzJfdCk7Ci0gICAgRXhwcmVzc2lvblR5cGUgV0FSTl9VTlVTRURfUkVUVVJO
IHB1c2hBcnJheU5ld0Zyb21TZWdtZW50KEFycmF5U2VnbWVudE9wZXJhdGlvbiwgdWludDMyX3Qg
dHlwZUluZGV4LCB1aW50MzJfdCBzZWdtZW50SW5kZXgsIEV4cHJlc3Npb25UeXBlIGFycmF5U2l6
ZSwgRXhwcmVzc2lvblR5cGUgb2Zmc2V0LCBFeGNlcHRpb25UeXBlKTsKKyAgICB1c2luZyBhcnJh
eVNlZ21lbnRPcGVyYXRpb24gPSBFbmNvZGVkSlNWYWx1ZSBTWVNWX0FCSSAoJikoSlNDOjpXYXNt
OjpJbnN0YW5jZSosIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90KTsKKyAg
ICBFeHByZXNzaW9uVHlwZSBXQVJOX1VOVVNFRF9SRVRVUk4gcHVzaEFycmF5TmV3RnJvbVNlZ21l
bnQoYXJyYXlTZWdtZW50T3BlcmF0aW9uLCB1aW50MzJfdCB0eXBlSW5kZXgsIHVpbnQzMl90IHNl
Z21lbnRJbmRleCwgRXhwcmVzc2lvblR5cGUgYXJyYXlTaXplLCBFeHByZXNzaW9uVHlwZSBvZmZz
ZXQsIEV4Y2VwdGlvblR5cGUpOwogICAgIHZvaWQgZW1pdFJlZlRlc3RPckNhc3QoQ2FzdEtpbmQs
IEV4cHJlc3Npb25UeXBlLCBib29sLCBpbnQzMl90LCBib29sLCBFeHByZXNzaW9uVHlwZSYpOwog
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3I+CiAgICAgdm9pZCBlbWl0Q2hlY2tPckJy
YW5jaEZvckNhc3QoQ2FzdEtpbmQsIFZhbHVlKiwgY29uc3QgR2VuZXJhdG9yJiwgQmFzaWNCbG9j
ayopOwpAQCAtMTUwMCw3ICsxNTAxLDcgQEAgdm9pZCBPTUdJUkdlbmVyYXRvcjo6cmVsb2FkTWVt
b3J5UmVnaXN0ZXJzRnJvbUluc3RhbmNlKGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJgogICAgICAg
ICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW10oQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgQWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2ggPSBwYXJhbXMuZ3BTY3JhdGNoKDApOwotICAgICAgICAgICAgaml0Lmxv
YWRQYWlyUHRyKHBhcmFtc1swXS5ncHIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgR1BSSW5mbzo6d2Fz
bUJhc2VNZW1vcnlQb2ludGVyLCBHUFJJbmZvOjp3YXNtQm91bmRzQ2hlY2tpbmdTaXplUmVnaXN0
ZXIpOworICAgICAgICAgICAgaml0LmxvYWRQYWlyUHRyKHBhcmFtc1swXS5ncHIoKSwgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBH
UFJJbmZvOjp3YXNtQmFzZU1lbW9yeVBvaW50ZXIsIEdQUkluZm86Ondhc21Cb3VuZHNDaGVja2lu
Z1NpemVSZWdpc3Rlcik7CiAgICAgICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFsbHkoR2lnYWNh
Z2U6OlByaW1pdGl2ZSwgR1BSSW5mbzo6d2FzbUJhc2VNZW1vcnlQb2ludGVyLCBHUFJJbmZvOjp3
YXNtQm91bmRzQ2hlY2tpbmdTaXplUmVnaXN0ZXIsIHNjcmF0Y2gpOwogICAgICAgICB9KTsKICAg
ICB9CkBAIC0xOTQ1LDcgKzE5NDYsNyBAQCBhdXRvIE9NR0lSR2VuZXJhdG9yOjplbWl0SW5kaXJl
Y3RDYWxsKFZhbHVlKiBjYWxsZWVJbnN0YW5jZSwgVmFsdWUqIGNhbGxlZUNvZGUsCiAgICAgICAg
ICAgICAvLyAgIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
Mjk1MgogICAgICAgICAgICAgQVNTRVJUKEdQUkluZm86Ondhc21Cb3VuZHNDaGVja2luZ1NpemVS
ZWdpc3RlciAhPSBjYWxsZWVJbnN0YW5jZSk7CiAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9
IHBhcmFtcy5ncFNjcmF0Y2goMCk7Ci0gICAgICAgICAgICBqaXQubG9hZFBhaXJQdHIoY2FsbGVl
SW5zdGFuY2UsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIEdQUkluZm86Ondhc21CYXNlTWVtb3J5UG9pbnRl
ciwgR1BSSW5mbzo6d2FzbUJvdW5kc0NoZWNraW5nU2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgICAg
IGppdC5sb2FkUGFpclB0cihjYWxsZWVJbnN0YW5jZSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBHUFJJbmZvOjp3YXNtQmFzZU1l
bW9yeVBvaW50ZXIsIEdQUkluZm86Ondhc21Cb3VuZHNDaGVja2luZ1NpemVSZWdpc3Rlcik7CiAg
ICAgICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgR1BS
SW5mbzo6d2FzbUJhc2VNZW1vcnlQb2ludGVyLCBHUFJJbmZvOjp3YXNtQm91bmRzQ2hlY2tpbmdT
aXplUmVnaXN0ZXIsIHNjcmF0Y2gpOwogICAgICAgICB9KTsKICAgICAgICAgZG9Db250ZXh0U3dp
dGNoLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgY29udGlu
dWF0aW9uKTsKQEAgLTIwNTEsOCArMjA1Miw3IEBAIGF1dG8gT01HSVJHZW5lcmF0b3I6OmFkZEN1
cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewog
ICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHN0ZDo6ZGVjbHZhbDxNZW1vcnkqPigpLT5zaXplKCkp
ID09IHNpemVvZih1aW50NjRfdCksICJjb2RlZ2VuIHJlbGllcyBvbiB0aGlzIHNpemUiKTsKIAot
ICAgIFZhbHVlKiBqc01lbW9yeSA9IGFwcGVuZDxNZW1vcnlWYWx1ZT4oaGVhcEluc3RhbmNlRmll
bGRzKCksIG1fcHJvYywgTG9hZCwgSW50NjQsIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNh
ZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZKU01lbW9yeSgp
KSk7Ci0gICAgVmFsdWUqIG1lbW9yeSA9IGFwcGVuZDxNZW1vcnlWYWx1ZT4oaGVhcFRvcCgpLCBt
X3Byb2MsIExvYWQsIEludDY0LCBvcmlnaW4oKSwganNNZW1vcnksIHNhZmVDYXN0PGludDMyX3Q+
KEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpKTsKKyAgICBWYWx1ZSogbWVt
b3J5ID0gYXBwZW5kPE1lbW9yeVZhbHVlPihoZWFwSW5zdGFuY2VGaWVsZHMoKSwgbV9wcm9jLCBM
b2FkLCBJbnQ2NCwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4o
SW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkpKTsKICAgICBWYWx1ZSogaGFuZGxlID0gYXBwZW5k
PE1lbW9yeVZhbHVlPihoZWFwVG9wKCksIG1fcHJvYywgTG9hZCwgSW50NjQsIG9yaWdpbigpLCBt
ZW1vcnksIHNhZmVDYXN0PGludDMyX3Q+KE1lbW9yeTo6b2Zmc2V0T2ZIYW5kbGUoKSkpOwogICAg
IFZhbHVlKiBzaXplID0gYXBwZW5kPE1lbW9yeVZhbHVlPihoZWFwVG9wKCksIG1fcHJvYywgTG9h
ZCwgSW50NjQsIG9yaWdpbigpLCBoYW5kbGUsIHNhZmVDYXN0PGludDMyX3Q+KEJ1ZmZlck1lbW9y
eUhhbmRsZTo6b2Zmc2V0T2ZTaXplKCkpKTsKIApAQCAtMjI0NSwxMyArMjI0NSwxMyBAQCBhdXRv
IE9NR0lSR2VuZXJhdG9yOjpnZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpIC0+IFBhcnRpYQogICAgIGNvbnN0IFdhc206Okdsb2JhbEluZm9ybWF0aW9uJiBn
bG9iYWwgPSBtX2luZm8uZ2xvYmFsc1tpbmRleF07CiAgICAgc3dpdGNoIChnbG9iYWwuYmluZGlu
Z01vZGUpIHsKICAgICBjYXNlIFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpCaW5kaW5nTW9kZTo6
RW1iZWRkZWRJbkluc3RhbmNlOiB7Ci0gICAgICAgIE1lbW9yeVZhbHVlKiBsb2FkID0gYXBwZW5k
PE1lbW9yeVZhbHVlPihoZWFwR2xvYmFscygpLCBpbmRleCwgbV9wcm9jLCBMb2FkLCB0b0IzVHlw
ZShnbG9iYWwudHlwZSksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMy
X3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxQdHIobV9udW1JbXBvcnRG
dW5jdGlvbnMsIG1faW5mby50YWJsZUNvdW50KCksIGluZGV4KSkpOworICAgICAgICBNZW1vcnlW
YWx1ZSogbG9hZCA9IGFwcGVuZDxNZW1vcnlWYWx1ZT4oaGVhcEdsb2JhbHMoKSwgaW5kZXgsIG1f
cHJvYywgTG9hZCwgdG9CM1R5cGUoZ2xvYmFsLnR5cGUpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1
ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxQdHIobV9udW1J
bXBvcnRGdW5jdGlvbnMsIG1faW5mby50YWJsZUNvdW50KCksIGluZGV4KSkpOwogICAgICAgICBy
ZXN1bHQgPSBwdXNoKGxvYWQpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBXYXNt
OjpHbG9iYWxJbmZvcm1hdGlvbjo6QmluZGluZ01vZGU6OlBvcnRhYmxlOiB7CiAgICAgICAgIEFT
U0VSVChnbG9iYWwubXV0YWJpbGl0eSA9PSBXYXNtOjpNdXRhYmlsaXR5OjpNdXRhYmxlKTsKLSAg
ICAgICAgTWVtb3J5VmFsdWUqIHBvaW50ZXIgPSBhcHBlbmQ8TWVtb3J5VmFsdWU+KGhlYXBHbG9i
YWxzKCksIGluZGV4LCBtX3Byb2MsIExvYWQsIEIzOjpJbnQ2NCwgb3JpZ2luKCksIGluc3RhbmNl
VmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRP
Zkdsb2JhbFB0cihtX251bUltcG9ydEZ1bmN0aW9ucywgbV9pbmZvLnRhYmxlQ291bnQoKSwgaW5k
ZXgpKSk7CisgICAgICAgIE1lbW9yeVZhbHVlKiBwb2ludGVyID0gYXBwZW5kPE1lbW9yeVZhbHVl
PihoZWFwR2xvYmFscygpLCBpbmRleCwgbV9wcm9jLCBMb2FkLCBCMzo6SW50NjQsIG9yaWdpbigp
LCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZkds
b2JhbFB0cihtX251bUltcG9ydEZ1bmN0aW9ucywgbV9pbmZvLnRhYmxlQ291bnQoKSwgaW5kZXgp
KSk7CiAgICAgICAgIHJlc3VsdCA9IHB1c2g8TWVtb3J5VmFsdWU+KGhlYXBHbG9iYWxzKCksIGlu
ZGV4LCBtX3Byb2MsIExvYWQsIHRvQjNUeXBlKGdsb2JhbC50eXBlKSwgb3JpZ2luKCksIHBvaW50
ZXIpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0yMjY5LDIwICsyMjY5LDIxIEBAIGF1dG8g
T01HSVJHZW5lcmF0b3I6OnNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUg
dmFsdWUpIC0+IFBhcnRpYWxSCiAKICAgICBzd2l0Y2ggKGdsb2JhbC5iaW5kaW5nTW9kZSkgewog
ICAgIGNhc2UgV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246OkJpbmRpbmdNb2RlOjpFbWJlZGRlZElu
SW5zdGFuY2U6IHsKLSAgICAgICAgYXBwZW5kPE1lbW9yeVZhbHVlPihoZWFwR2xvYmFscygpLCBp
bmRleCwgbV9wcm9jLCBTdG9yZSwgb3JpZ2luKCksIGdldCh2YWx1ZSksIGluc3RhbmNlVmFsdWUo
KSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkdsb2Jh
bFB0cihtX251bUltcG9ydEZ1bmN0aW9ucywgbV9pbmZvLnRhYmxlQ291bnQoKSwgaW5kZXgpKSk7
CisgICAgICAgIGFwcGVuZDxNZW1vcnlWYWx1ZT4oaGVhcEdsb2JhbHMoKSwgaW5kZXgsIG1fcHJv
YywgU3RvcmUsIG9yaWdpbigpLCBnZXQodmFsdWUpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0
PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbFB0cihtX251bUltcG9ydEZ1bmN0aW9u
cywgbV9pbmZvLnRhYmxlQ291bnQoKSwgaW5kZXgpKSk7CiAgICAgICAgIGlmIChpc1JlZlR5cGUo
Z2xvYmFsLnR5cGUpKQogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllckZvckpTV3JhcHBlcigp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlv
bjo6QmluZGluZ01vZGU6OlBvcnRhYmxlOiB7CiAgICAgICAgIEFTU0VSVChnbG9iYWwubXV0YWJp
bGl0eSA9PSBXYXNtOjpNdXRhYmlsaXR5OjpNdXRhYmxlKTsKLSAgICAgICAgTWVtb3J5VmFsdWUq
IHBvaW50ZXIgPSBhcHBlbmQ8TWVtb3J5VmFsdWU+KGhlYXBHbG9iYWxzKCksIGluZGV4LCBtX3By
b2MsIExvYWQsIEIzOjpJbnQ2NCwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8
aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbFB0cihtX251bUlt
cG9ydEZ1bmN0aW9ucywgbV9pbmZvLnRhYmxlQ291bnQoKSwgaW5kZXgpKSk7CisgICAgICAgIE1l
bW9yeVZhbHVlKiBwb2ludGVyID0gYXBwZW5kPE1lbW9yeVZhbHVlPihoZWFwR2xvYmFscygpLCBp
bmRleCwgbV9wcm9jLCBMb2FkLCBCMzo6SW50NjQsIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCks
IHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZkdsb2JhbFB0cihtX251bUltcG9y
dEZ1bmN0aW9ucywgbV9pbmZvLnRhYmxlQ291bnQoKSwgaW5kZXgpKSk7CiAgICAgICAgIGFwcGVu
ZDxNZW1vcnlWYWx1ZT4oaGVhcFRvcCgpLCBtX3Byb2MsIFN0b3JlLCBvcmlnaW4oKSwgZ2V0KHZh
bHVlKSwgcG9pbnRlci0+YXM8VmFsdWU+KCkpOwogICAgICAgICAvLyBXZSBlbWl0IGEgd3JpdGUt
YmFycmllciBvbnRvIEpTV2ViQXNzZW1ibHlHbG9iYWwsIG5vdCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuCiAgICAgICAgIGlmIChpc1JlZlR5cGUoZ2xvYmFsLnR5cGUpKSB7CisgICAgICAgICAgICBW
YWx1ZSogaW5zdGFuY2UgPSBhcHBlbmQ8TWVtb3J5VmFsdWU+KGhlYXBUb3AoKSwgbV9wcm9jLCBM
b2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxp
bnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZPd25lcigpKSk7CiAgICAgICAgICAgICBWYWx1ZSog
Y2VsbCA9IGFwcGVuZDxNZW1vcnlWYWx1ZT4oaGVhcFRvcCgpLCBtX3Byb2MsIExvYWQsIHBvaW50
ZXJUeXBlKCksIG9yaWdpbigpLCBwb2ludGVyLCBXYXNtOjpHbG9iYWw6Om9mZnNldE9mT3duZXIo
KSAtIFdhc206Okdsb2JhbDo6b2Zmc2V0T2ZWYWx1ZSgpKTsKICAgICAgICAgICAgIFZhbHVlKiBj
ZWxsU3RhdGUgPSBhcHBlbmQ8TWVtb3J5VmFsdWU+KGhlYXBUb3AoKSwgbV9wcm9jLCBMb2FkOFos
IEludDMyLCBvcmlnaW4oKSwgY2VsbCwgc2FmZUNhc3Q8aW50MzJfdD4oSlNDZWxsOjpjZWxsU3Rh
dGVPZmZzZXQoKSkpOwotICAgICAgICAgICAgVmFsdWUqIHZtID0gYXBwZW5kPE1lbW9yeVZhbHVl
PihoZWFwVG9wKCksIG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3Rh
bmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZz
ZXRPZlZNKCkpKTsKKyAgICAgICAgICAgIFZhbHVlKiB2bSA9IGFwcGVuZDxNZW1vcnlWYWx1ZT4o
aGVhcFRvcCgpLCBtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5j
ZSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZlZNKCkp
KTsKICAgICAgICAgICAgIFZhbHVlKiB0aHJlc2hvbGQgPSBhcHBlbmQ8TWVtb3J5VmFsdWU+KGhl
YXBUb3AoKSwgbV9wcm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2luKCksIHZtLCBzYWZlQ2FzdDxpbnQz
Ml90PihWTTo6b2Zmc2V0T2ZIZWFwQmFycmllclRocmVzaG9sZCgpKSk7CiAKICAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGZlbmNlQ2hlY2tQYXRoID0gbV9wcm9jLmFkZEJsb2NrKCk7CkBAIC0yMzMy
LDcgKzIzMzMsOCBAQCBhdXRvIE9NR0lSR2VuZXJhdG9yOjpzZXRHbG9iYWwodWludDMyX3QgaW5k
ZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUgogCiBpbmxpbmUgdm9pZCBPTUdJ
UkdlbmVyYXRvcjo6ZW1pdFdyaXRlQmFycmllckZvckpTV3JhcHBlcigpCiB7Ci0gICAgZW1pdFdy
aXRlQmFycmllcihpbnN0YW5jZVZhbHVlKCksIGluc3RhbmNlVmFsdWUoKSk7CisgICAgTWVtb3J5
VmFsdWUqIGluc3RhbmNlID0gYXBwZW5kPE1lbW9yeVZhbHVlPihoZWFwSW5zdGFuY2VGaWVsZHMo
KSwgbV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgp
LCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZPd25lcigpKSk7CisgICAgZW1p
dFdyaXRlQmFycmllcihpbnN0YW5jZSwgaW5zdGFuY2UpOwogfQogCiBpbmxpbmUgdm9pZCBPTUdJ
UkdlbmVyYXRvcjo6ZW1pdFdyaXRlQmFycmllcihWYWx1ZSogY2VsbCwgVmFsdWUqIGluc3RhbmNl
Q2VsbCkKQEAgLTI5NDQsOCArMjk0NiwxMCBAQCB2b2lkIE9NR0lSR2VuZXJhdG9yOjplbWl0U3Ry
dWN0U2V0KFZhbHVlKiBzdHJ1Y3RWYWx1ZSwgdWludDMyX3QgZmllbGRJbmRleCwgY29ucwogCiAg
ICAgQVNTRVJUKGZpZWxkVHlwZS5pczxUeXBlPigpKTsKICAgICBhcHBlbmQ8TWVtb3J5VmFsdWU+
KGhlYXBUb3AoKSwgbV9wcm9jLCBtZW1vcnlLaW5kKFN0b3JlKSwgb3JpZ2luKCksIGFyZ3VtZW50
LCBwYXlsb2FkQmFzZSwgZmllbGRPZmZzZXQpOwotICAgIGlmIChpc1JlZlR5cGUoZmllbGRUeXBl
LnVucGFja2VkKCkpKQotICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHN0cnVjdFZhbHVlLCBpbnN0
YW5jZVZhbHVlKCkpOworICAgIGlmIChpc1JlZlR5cGUoZmllbGRUeXBlLnVucGFja2VkKCkpKSB7
CisgICAgICAgIFZhbHVlKiBpbnN0YW5jZSA9IGFwcGVuZDxNZW1vcnlWYWx1ZT4oaGVhcFRvcCgp
LCBtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCks
IHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZk93bmVyKCkpKTsKKyAgICAgICAg
ZW1pdFdyaXRlQmFycmllcihzdHJ1Y3RWYWx1ZSwgaW5zdGFuY2UpOworICAgIH0KIH0KIAogYXV0
byBPTUdJUkdlbmVyYXRvcjo6YXRvbWljQ29tcGFyZUV4Y2hhbmdlKEV4dEF0b21pY09wVHlwZSBv
cCwgVHlwZSB2YWx1ZVR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIEV4cHJlc3Npb25UeXBl
IGV4cGVjdGVkLCBFeHByZXNzaW9uVHlwZSB2YWx1ZSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCwg
dWludDMyX3Qgb2Zmc2V0KSAtPiBQYXJ0aWFsUmVzdWx0CkBAIC0zMzEwLDcgKzMzMTQsNyBAQCBh
dXRvIE9NR0lSR2VuZXJhdG9yOjphZGRBcnJheU5ldyh1aW50MzJfdCB0eXBlSW5kZXgsIEV4cHJl
c3Npb25UeXBlIHNpemUsIEV4cHJlcwogICAgIHJldHVybiB7IH07CiB9CiAKLVZhcmlhYmxlKiBP
TUdJUkdlbmVyYXRvcjo6cHVzaEFycmF5TmV3RnJvbVNlZ21lbnQoQXJyYXlTZWdtZW50T3BlcmF0
aW9uIG9wZXJhdGlvbiwgdWludDMyX3QgdHlwZUluZGV4LCB1aW50MzJfdCBzZWdtZW50SW5kZXgs
IEV4cHJlc3Npb25UeXBlIGFycmF5U2l6ZSwgRXhwcmVzc2lvblR5cGUgb2Zmc2V0LCBFeGNlcHRp
b25UeXBlIGV4Y2VwdGlvblR5cGUpCitWYXJpYWJsZSogT01HSVJHZW5lcmF0b3I6OnB1c2hBcnJh
eU5ld0Zyb21TZWdtZW50KGFycmF5U2VnbWVudE9wZXJhdGlvbiBvcGVyYXRpb24sIHVpbnQzMl90
IHR5cGVJbmRleCwgdWludDMyX3Qgc2VnbWVudEluZGV4LCBFeHByZXNzaW9uVHlwZSBhcnJheVNp
emUsIEV4cHJlc3Npb25UeXBlIG9mZnNldCwgRXhjZXB0aW9uVHlwZSBleGNlcHRpb25UeXBlKQog
ewogICAgIFZhbHVlKiByZXN1bHRWYWx1ZSA9IGNhbGxXYXNtT3BlcmF0aW9uKG1fY3VycmVudEJs
b2NrLCB0b0IzVHlwZShUeXBlczo6QXJyYXlyZWYpLCBvcGVyYXRpb24sCiAgICAgICAgIGluc3Rh
bmNlVmFsdWUoKSwgYXBwZW5kPENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdHlwZUlu
ZGV4KSwKQEAgLTM0ODAsOCArMzQ4NCwxMCBAQCB2b2lkIE9NR0lSR2VuZXJhdG9yOjplbWl0QXJy
YXlTZXRVbmNoZWNrZWQodWludDMyX3QgdHlwZUluZGV4LCBWYWx1ZSogYXJyYXlyZWYsCiAgICAg
QVNTRVJUKGVsZW1lbnRUeXBlLmlzPFR5cGU+KCkpOwogICAgIGFwcGVuZDxNZW1vcnlWYWx1ZT4o
aGVhcFRvcCgpLCBtX3Byb2MsIG1lbW9yeUtpbmQoU3RvcmUpLCBvcmlnaW4oKSwgc2V0VmFsdWUs
IGluZGV4ZWRBZGRyZXNzKTsKIAotICAgIGlmIChpc1JlZlR5cGUoZWxlbWVudFR5cGUudW5wYWNr
ZWQoKSkpCi0gICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJyYXlyZWYsIGluc3RhbmNlVmFsdWUo
KSk7CisgICAgaWYgKGlzUmVmVHlwZShlbGVtZW50VHlwZS51bnBhY2tlZCgpKSkgeworICAgICAg
ICBWYWx1ZSogaW5zdGFuY2UgPSBhcHBlbmQ8TWVtb3J5VmFsdWU+KGhlYXBUb3AoKSwgbV9wcm9j
LCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2Fz
dDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZPd25lcigpKSk7CisgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIoYXJyYXlyZWYsIGluc3RhbmNlKTsKKyAgICB9CiAKICAgICByZXR1cm47CiB9CkBA
IC01NTg0LDcgKzU1OTAsOCBAQCBhdXRvIE9NR0lSR2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWduYQogICAgICAgICAgICAg
ICAgICAgICAvLyBJbiB0YWlsLWNhbGwsIHdlIGFsd2F5cyBjb25maWd1cmUgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiBpbiB8dGhpc3wgdG8gYW5jaG9yIGl0IGZyb20gY29uc2VydmF0aXZlIEdDIHJv
b3RzLgogICAgICAgICAgICAgICAgICAgICBKSVRfQ09NTUVOVChqaXQsICJTdG9yZSB3YXNtIGlu
c3RhbmNlIGluICd0aGlzJyB0byBhbmNob3IgaXQgZm9yIGdjLiIpOwogICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MgdGhpc1Nsb3QoQ0NhbGxIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3RlciwgIChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgLSBDYWxsZXJGcmFt
ZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0
ZXIpKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVs
dGEoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjp3YXNtQ29u
dGV4dEluc3RhbmNlUG9pbnRlciwgdGhpc1Nsb3Qud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KSk7
CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjp3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlciwgSW5zdGFuY2U6Om9mZnNldE9mT3du
ZXIoKSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMSk7CisgICAgICAgICAg
ICAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQ
UjEsIHRoaXNTbG90LndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCkpOwogICAgICAgICAgICAgICAg
ICAgICBqaXQuZmFySnVtcChwYXJhbXNbcGF0Y2hBcmdzSW5kZXhdLmdwcigpLCBXYXNtRW50cnlQ
dHJUYWcpOwogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICBqaXQu
Y2FsbChwYXJhbXNbcGF0Y2hBcmdzSW5kZXhdLmdwcigpLCBXYXNtRW50cnlQdHJUYWcpOwpAQCAt
NTU5Nyw3ICs1NjA0LDcgQEAgYXV0byBPTUdJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBm
dW5jdGlvbkluZGV4LCBjb25zdCBUeXBlRGVmaW5pdGlvbiYgc2lnbmEKICAgICAgICAgLy8gZm9y
IGNhbGxzIG91dCB0byB0aGUganMuIFRoaXMgc2hvdWxkbid0IGJlIHRoYXQgaGFyZCB0byBkby4g
V2UgY291bGQgcHJvYmFibHkKICAgICAgICAgLy8gaW1wbGVtZW50IHRoZSBJQyB0byBiZSBvdmVy
IENvbnRleHQqLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcwMzc1Ci0gICAgICAgIGp1bXBEZXN0aW5hdGlvbiA9IGFwcGVuZDxNZW1vcnlWYWx1
ZT4oaGVhcEltcG9ydHMoKSwgbV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwg
aW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
Om9mZnNldE9mSW1wb3J0RnVuY3Rpb25TdHViKGZ1bmN0aW9uSW5kZXgpKSk7CisgICAgICAgIGp1
bXBEZXN0aW5hdGlvbiA9IGFwcGVuZDxNZW1vcnlWYWx1ZT4oaGVhcEltcG9ydHMoKSwgbV9wcm9j
LCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2Fz
dDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZJbXBvcnRGdW5jdGlvblN0dWIoZnVuY3Rpb25J
bmRleCkpKTsKIAogICAgICAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICAgICAgYXV0byBb
cGF0Y2hwb2ludCwgaGFuZGxlLCBwcmVwYXJlRm9yQ2FsbF0gPSBjcmVhdGVUYWlsQ2FsbFBhdGNo
cG9pbnQobV9jdXJyZW50QmxvY2ssIHdhc21DYWxsZXJJbmZvQXNDYWxsZWUsIHdhc21DYWxsZWVJ
bmZvQXNDYWxsZWUsIGFyZ3MsIHsgfSk7CkBAIC01NzA3LDcgKzU3MTQsNyBAQCBhdXRvIE9NR0lS
R2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29uc3QgVHlw
ZURlZmluaXRpb24mCiAgICAgVmFsdWUqIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIgPSBudWxscHRy
OwogICAgIFZhbHVlKiBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoOwogICAgIHsKLSAgICAg
ICAgTWVtb3J5VmFsdWUqIHRhYmxlID0gYXBwZW5kPE1lbW9yeVZhbHVlPihoZWFwVGFibGVzKCks
IHRhYmxlSW5kZXgsIG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3Rh
bmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZz
ZXRPZlRhYmxlUHRyKG1fbnVtSW1wb3J0RnVuY3Rpb25zLCB0YWJsZUluZGV4KSkpOworICAgICAg
ICBNZW1vcnlWYWx1ZSogdGFibGUgPSBhcHBlbmQ8TWVtb3J5VmFsdWU+KGhlYXBUYWJsZXMoKSwg
dGFibGVJbmRleCwgbV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFu
Y2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZUYWJsZVB0ciht
X251bUltcG9ydEZ1bmN0aW9ucywgdGFibGVJbmRleCkpKTsKICAgICAgICAgQVNTRVJUKHRhYmxl
SW5kZXggPCBtX2luZm8udGFibGVDb3VudCgpKTsKICAgICAgICAgYXV0byYgdGFibGVJbmZvcm1h
dGlvbiA9IG1faW5mby50YWJsZSh0YWJsZUluZGV4KTsKIApAQCAtNTgzOSw5ICs1ODQ2LDEyIEBA
IGF1dG8gT01HSVJHZW5lcmF0b3I6OmFkZENhbGxSZWYoY29uc3QgVHlwZURlZmluaXRpb24mIG9y
aWdpbmFsU2lnbmF0dXJlLCBWZWN0b3I8CiAgICAgICAgIH0pOwogICAgIH0KIAotICAgIFZhbHVl
KiBpbnN0YW5jZU9mZnNldCA9IGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIHNhZmVDYXN0PGludDMy
X3Q+KFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpvZmZzZXRPZkluc3RhbmNlKCkpKTsKKyAgICBW
YWx1ZSoganNJbnN0YW5jZU9mZnNldCA9IGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIHNhZmVDYXN0
PGludDMyX3Q+KFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpvZmZzZXRPZkluc3RhbmNlKCkpKTsK
KyAgICBWYWx1ZSoganNDYWxsZWVJbnN0YW5jZSA9IGFwcGVuZDxNZW1vcnlWYWx1ZT4oaGVhcFRv
cCgpLCBtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBhcHBlbmQ8VmFsdWU+
KG1fcHJvYywgQWRkLCBvcmlnaW4oKSwgY2FsbGVlLCBqc0luc3RhbmNlT2Zmc2V0KSk7CisKKyAg
ICBWYWx1ZSogaW5zdGFuY2VPZmZzZXQgPSBjb25zdGFudChwb2ludGVyVHlwZSgpLCBzYWZlQ2Fz
dDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mSW5zdGFuY2UoKSkpOwog
ICAgIFZhbHVlKiBjYWxsZWVJbnN0YW5jZSA9IGFwcGVuZDxNZW1vcnlWYWx1ZT4oaGVhcFRvcCgp
LCBtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAotICAgICAgICBhcHBlbmQ8
VmFsdWU+KG1fcHJvYywgQWRkLCBvcmlnaW4oKSwgY2FsbGVlLCBpbnN0YW5jZU9mZnNldCkpOwor
ICAgICAgICBhcHBlbmQ8VmFsdWU+KG1fcHJvYywgQWRkLCBvcmlnaW4oKSwganNDYWxsZWVJbnN0
YW5jZSwgaW5zdGFuY2VPZmZzZXQpKTsKIAogICAgIFZhbHVlKiBjYWxsZWVDb2RlID0gYXBwZW5k
PE1lbW9yeVZhbHVlPihoZWFwVG9wKCksIG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3Jp
Z2luKCksCiAgICAgICAgIGFwcGVuZDxNZW1vcnlWYWx1ZT4oaGVhcFRvcCgpLCBtX3Byb2MsIExv
YWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBjYWxsZWUsCkBAIC01ODUxLDcgKzU4NjEsNyBA
QCBhdXRvIE9NR0lSR2VuZXJhdG9yOjphZGRDYWxsUmVmKGNvbnN0IFR5cGVEZWZpbml0aW9uJiBv
cmlnaW5hbFNpZ25hdHVyZSwgVmVjdG9yPAogICAgICAgICBhcHBlbmQ8TWVtb3J5VmFsdWU+KGhl
YXBUb3AoKSwgbV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgY2FsbGVlLAog
ICAgICAgICBzYWZlQ2FzdDxpbnQzMl90PihXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6b2Zmc2V0
T2ZCb3hlZFdhc21DYWxsZWVMb2FkTG9jYXRpb24oKSkpKTsKIAotICAgIHJldHVybiBlbWl0SW5k
aXJlY3RDYWxsKGNhbGxlZUluc3RhbmNlLCBjYWxsZWVDb2RlLCBjYWxsZWVDYWxsZWUsIGNhbGxl
ZUluc3RhbmNlLCBzaWduYXR1cmUsIGFyZ3MsIHJlc3VsdHMpOworICAgIHJldHVybiBlbWl0SW5k
aXJlY3RDYWxsKGNhbGxlZUluc3RhbmNlLCBjYWxsZWVDb2RlLCBjYWxsZWVDYWxsZWUsIGpzQ2Fs
bGVlSW5zdGFuY2UsIHNpZ25hdHVyZSwgYXJncywgcmVzdWx0cyk7CiB9CiAKIHZvaWQgT01HSVJH
ZW5lcmF0b3I6OnVuaWZ5KFZhbHVlKiBwaGksIGNvbnN0IEV4cHJlc3Npb25UeXBlIHNvdXJjZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdJUkdlbmVyYXRv
cjMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdJUkdlbmVyYXRv
cjMyXzY0LmNwcAppbmRleCBhZDk3Y2Q2OTJjMjUuLjgzZDIzNjhmYWNiOSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0lSR2VuZXJhdG9yMzJfNjQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdJUkdlbmVyYXRvcjMyXzY0LmNw
cApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgogI2lu
Y2x1ZGUgIldhc21GdW5jdGlvblBhcnNlci5oIgogI2luY2x1ZGUgIldhc21JUkdlbmVyYXRvckhl
bHBlcnMuaCIKKyNpbmNsdWRlICJXYXNtSW5zdGFuY2UuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5
LmgiCiAjaW5jbHVkZSAiV2FzbU9TUkVudHJ5RGF0YS5oIgogI2luY2x1ZGUgIldhc21PcGNvZGVP
cmlnaW4uaCIKQEAgLTc1NSw3ICs3NTYsNyBAQCBwcml2YXRlOgogICAgIHsKICNpZiAhVVNFKEJV
SUxUSU5fRlJBTUVfQUREUkVTUykgfHwgQVNTRVJUX0VOQUJMRUQKICAgICAgICAgLy8gUHJlcGFy
ZSB3YXNtIG9wZXJhdGlvbiBjYWxscy4KLSAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxCMzo6TWVt
b3J5VmFsdWU+KG1fcHJvYywgQjM6OlN0b3JlLCBvcmlnaW4oKSwgZnJhbWVQb2ludGVyKCksIGlu
c3RhbmNlVmFsdWUoKSwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZlRlbXBvcmFyeUNh
bGxGcmFtZSgpKTsKKyAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxCMzo6TWVtb3J5VmFsdWU+KG1f
cHJvYywgQjM6OlN0b3JlLCBvcmlnaW4oKSwgZnJhbWVQb2ludGVyKCksIGluc3RhbmNlVmFsdWUo
KSwgSW5zdGFuY2U6Om9mZnNldE9mVGVtcG9yYXJ5Q2FsbEZyYW1lKCkpOwogI2Vsc2UKICAgICAg
ICAgVU5VU0VEX1BBUkFNKGJsb2NrKTsKICNlbmRpZgpAQCAtNzkxLDggKzc5Miw4IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBlbWl0QXJyYXlTZXRVbmNoZWNrZWQodWludDMyX3QsIFZhbHVlKiwgVmFs
dWUqLCBWYWx1ZSopOwogICAgIHZvaWQgZW1pdFN0cnVjdFNldChWYWx1ZSosIHVpbnQzMl90LCBj
b25zdCBTdHJ1Y3RUeXBlJiwgVmFsdWUqKTsKICAgICBFeHByZXNzaW9uVHlwZSBXQVJOX1VOVVNF
RF9SRVRVUk4gcHVzaEFycmF5TmV3KHVpbnQzMl90IHR5cGVJbmRleCwgVmFsdWUqIGluaXRWYWx1
ZSwgRXhwcmVzc2lvblR5cGUgc2l6ZSk7Ci0gICAgdXNpbmcgQXJyYXlTZWdtZW50T3BlcmF0aW9u
ID0gRW5jb2RlZEpTVmFsdWUgKCYpKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlKiwgdWludDMy
X3QsIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDMyX3QpOwotICAgIEV4cHJlc3Npb25UeXBlIFdB
Uk5fVU5VU0VEX1JFVFVSTiBwdXNoQXJyYXlOZXdGcm9tU2VnbWVudChBcnJheVNlZ21lbnRPcGVy
YXRpb24sIHVpbnQzMl90IHR5cGVJbmRleCwgdWludDMyX3Qgc2VnbWVudEluZGV4LCBFeHByZXNz
aW9uVHlwZSBhcnJheVNpemUsIEV4cHJlc3Npb25UeXBlIG9mZnNldCwgRXhjZXB0aW9uVHlwZSk7
CisgICAgdXNpbmcgYXJyYXlTZWdtZW50T3BlcmF0aW9uID0gRW5jb2RlZEpTVmFsdWUgKCYpKEpT
Qzo6V2FzbTo6SW5zdGFuY2UqLCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50MzJf
dCk7CisgICAgRXhwcmVzc2lvblR5cGUgV0FSTl9VTlVTRURfUkVUVVJOIHB1c2hBcnJheU5ld0Zy
b21TZWdtZW50KGFycmF5U2VnbWVudE9wZXJhdGlvbiwgdWludDMyX3QgdHlwZUluZGV4LCB1aW50
MzJfdCBzZWdtZW50SW5kZXgsIEV4cHJlc3Npb25UeXBlIGFycmF5U2l6ZSwgRXhwcmVzc2lvblR5
cGUgb2Zmc2V0LCBFeGNlcHRpb25UeXBlKTsKICAgICB2b2lkIGVtaXRSZWZUZXN0T3JDYXN0KENh
c3RLaW5kLCBFeHByZXNzaW9uVHlwZSwgYm9vbCwgaW50MzJfdCwgYm9vbCwgRXhwcmVzc2lvblR5
cGUmKTsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yPgogICAgIHZvaWQgZW1pdENo
ZWNrT3JCcmFuY2hGb3JDYXN0KENhc3RLaW5kLCBWYWx1ZSosIGNvbnN0IEdlbmVyYXRvciYsIEJh
c2ljQmxvY2sqKTsKQEAgLTEyNTYsNyArMTI1Nyw3IEBAIHZvaWQgT01HSVJHZW5lcmF0b3I6OnJl
bG9hZE1lbW9yeVJlZ2lzdGVyc0Zyb21JbnN0YW5jZShjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYK
ICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtdKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAg
IEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKICAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoID0gcGFyYW1zLmdwU2NyYXRjaCgwKTsKLSAgICAgICAgICAg
IGppdC5sb2FkUGFpclB0cihwYXJhbXNbMF0uZ3ByKCksIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIEdQUklu
Zm86Ondhc21CYXNlTWVtb3J5UG9pbnRlciwgR1BSSW5mbzo6d2FzbUJvdW5kc0NoZWNraW5nU2l6
ZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGppdC5sb2FkUGFpclB0cihwYXJhbXNbMF0uZ3ByKCks
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9y
eSgpKSwgR1BSSW5mbzo6d2FzbUJhc2VNZW1vcnlQb2ludGVyLCBHUFJJbmZvOjp3YXNtQm91bmRz
Q2hlY2tpbmdTaXplUmVnaXN0ZXIpOwogICAgICAgICAgICAgaml0LmNhZ2VDb25kaXRpb25hbGx5
KEdpZ2FjYWdlOjpQcmltaXRpdmUsIEdQUkluZm86Ondhc21CYXNlTWVtb3J5UG9pbnRlciwgR1BS
SW5mbzo6d2FzbUJvdW5kc0NoZWNraW5nU2l6ZVJlZ2lzdGVyLCBzY3JhdGNoKTsKICAgICAgICAg
fSk7CiAgICAgfQpAQCAtMTY3Niw3ICsxNjc3LDcgQEAgYXV0byBPTUdJUkdlbmVyYXRvcjo6ZW1p
dEluZGlyZWN0Q2FsbChWYWx1ZSogY2FsbGVlSW5zdGFuY2UsIFZhbHVlKiBjYWxsZWVDb2RlLAog
ICAgICAgICAgICAgLy8gICBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjI5NTIKICAgICAgICAgICAgIEFTU0VSVChHUFJJbmZvOjp3YXNtQm91bmRzQ2hlY2tp
bmdTaXplUmVnaXN0ZXIgIT0gY2FsbGVlSW5zdGFuY2UpOwogICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2ggPSBwYXJhbXMuZ3BTY3JhdGNoKDApOwotICAgICAgICAgICAgaml0LmxvYWRQYWlyUHRy
KGNhbGxlZUluc3RhbmNlLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1dlYkFzc2VtYmx5
SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBHUFJJbmZvOjp3YXNtQmFzZU1lbW9y
eVBvaW50ZXIsIEdQUkluZm86Ondhc21Cb3VuZHNDaGVja2luZ1NpemVSZWdpc3Rlcik7CisgICAg
ICAgICAgICBqaXQubG9hZFBhaXJQdHIoY2FsbGVlSW5zdGFuY2UsIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgR1BSSW5mbzo6d2Fz
bUJhc2VNZW1vcnlQb2ludGVyLCBHUFJJbmZvOjp3YXNtQm91bmRzQ2hlY2tpbmdTaXplUmVnaXN0
ZXIpOwogICAgICAgICAgICAgaml0LmNhZ2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmltaXRp
dmUsIEdQUkluZm86Ondhc21CYXNlTWVtb3J5UG9pbnRlciwgR1BSSW5mbzo6d2FzbUJvdW5kc0No
ZWNraW5nU2l6ZVJlZ2lzdGVyLCBzY3JhdGNoKTsKICNlbmRpZiAvLyBPTUdfSlNWQUxVRV8zMl82
NF9QSU5ORURfTUVNT1JZX1JFR0lTVEVSUwogICAgICAgICB9KTsKQEAgLTE3MDgsNyArMTcwOSw4
IEBAIGF1dG8gT01HSVJHZW5lcmF0b3I6OmVtaXRJbmRpcmVjdENhbGwoVmFsdWUqIGNhbGxlZUlu
c3RhbmNlLCBWYWx1ZSogY2FsbGVlQ29kZSwKICAgICAgICAgICAgIHByZXBhcmVGb3JDYWxsLT5y
dW4oaml0LCBwYXJhbXMpOwogICAgICAgICAgICAgLy8gSW4gdGFpbC1jYWxsLCB3ZSBhbHdheXMg
Y29uZmlndXJlIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW4gfHRoaXN8IHRvIGFuY2hvciBpdCBm
cm9tIGNvbnNlcnZhdGl2ZSBHQyByb290cy4KICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcyB0aGlzU2xvdChDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDYWxsRnJh
bWVTbG90Ojp0aGlzQXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rlcikp
IC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpKTsKLSAgICAgICAgICAgIGppdC5zdG9yZVB0
cihHUFJJbmZvOjp3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlciwgdGhpc1Nsb3Qud2l0aE9mZnNl
dChQYXlsb2FkT2Zmc2V0KSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIsIEluc3RhbmNlOjpv
ZmZzZXRPZk93bmVyKCkpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUjEpOwor
ICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50
R1BSMSwgdGhpc1Nsb3Qud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KSk7CiAgICAgICAgICAgICBq
aXQuZmFySnVtcChwYXJhbXNbcGF0Y2hBcmdzSW5kZXhdLmdwcigpLCBXYXNtRW50cnlQdHJUYWcp
OwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTE3NzcsOCArMTc3OSw3IEBA
IGF1dG8gT01HSVJHZW5lcmF0b3I6OmFkZEN1cnJlbnRNZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJl
c3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewogICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHN0ZDo6
ZGVjbHZhbDxNZW1vcnkqPigpLT5zaXplKCkpID09IHNpemVvZih1aW50MzJfdCksICJjb2RlZ2Vu
IHJlbGllcyBvbiB0aGlzIHNpemUiKTsKIAotICAgIFZhbHVlKiBqc01lbW9yeSA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50NjQsIG9yaWdp
bigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6b2Zmc2V0T2ZKU01lbW9yeSgpKSk7Ci0gICAgVmFsdWUqIG1lbW9yeSA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50NjQsIG9yaWdp
bigpLCBqc01lbW9yeSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zm
c2V0T2ZNZW1vcnkoKSkpOworICAgIFZhbHVlKiBtZW1vcnkgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDY0LCBvcmlnaW4oKSwgaW5zdGFu
Y2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSkp
OwogICAgIFZhbHVlKiBoYW5kbGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsIExvYWQsIEludDY0LCBvcmlnaW4oKSwgbWVtb3J5LCBzYWZlQ2FzdDxpbnQz
Ml90PihNZW1vcnk6Om9mZnNldE9mSGFuZGxlKCkpKTsKICAgICBWYWx1ZSogc2l6ZSA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50NjQsIG9y
aWdpbigpLCBoYW5kbGUsIHNhZmVDYXN0PGludDMyX3Q+KEJ1ZmZlck1lbW9yeUhhbmRsZTo6b2Zm
c2V0T2ZTaXplKCkpKTsKIApAQCAtMTk3MSwxMSArMTk3MiwxMSBAQCBhdXRvIE9NR0lSR2VuZXJh
dG9yOjpnZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+
IFBhcnRpYQogICAgIGNvbnN0IFdhc206Okdsb2JhbEluZm9ybWF0aW9uJiBnbG9iYWwgPSBtX2lu
Zm8uZ2xvYmFsc1tpbmRleF07CiAgICAgc3dpdGNoIChnbG9iYWwuYmluZGluZ01vZGUpIHsKICAg
ICBjYXNlIFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpCaW5kaW5nTW9kZTo6RW1iZWRkZWRJbklu
c3RhbmNlOgotICAgICAgICByZXN1bHQgPSBwdXNoKG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgdG9CM1R5cGUoZ2xvYmFsLnR5cGUpLCBvcmlnaW4o
KSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6Om9mZnNldE9mR2xvYmFsUHRyKG1fbnVtSW1wb3J0RnVuY3Rpb25zLCBtX2luZm8udGFibGVD
b3VudCgpLCBpbmRleCkpKSk7CisgICAgICAgIHJlc3VsdCA9IHB1c2gobV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCB0b0IzVHlwZShnbG9iYWwudHlw
ZSksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNl
OjpvZmZzZXRPZkdsb2JhbFB0cihtX251bUltcG9ydEZ1bmN0aW9ucywgbV9pbmZvLnRhYmxlQ291
bnQoKSwgaW5kZXgpKSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdhc206Okdsb2JhbElu
Zm9ybWF0aW9uOjpCaW5kaW5nTW9kZTo6UG9ydGFibGU6IHsKICAgICAgICAgQVNTRVJUKGdsb2Jh
bC5tdXRhYmlsaXR5ID09IFdhc206Ok11dGFiaWxpdHk6Ok11dGFibGUpOwotICAgICAgICBWYWx1
ZSogcG9pbnRlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgTG9hZCwgQjM6OkludDY0LCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxp
bnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mR2xvYmFsUHRyKG1fbnVtSW1w
b3J0RnVuY3Rpb25zLCBtX2luZm8udGFibGVDb3VudCgpLCBpbmRleCkpKTsKKyAgICAgICAgVmFs
dWUqIHBvaW50ZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIExvYWQsIEIzOjpJbnQ2NCwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8
aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mR2xvYmFsUHRyKG1fbnVtSW1wb3J0RnVuY3Rpb25z
LCBtX2luZm8udGFibGVDb3VudCgpLCBpbmRleCkpKTsKICAgICAgICAgcmVzdWx0ID0gcHVzaCht
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHRvQjNU
eXBlKGdsb2JhbC50eXBlKSwgb3JpZ2luKCksIHBvaW50ZXIpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQpAQCAtMTk5MywxOSArMTk5NCwyMCBAQCBhdXRvIE9NR0lSR2VuZXJhdG9yOjpzZXRHbG9i
YWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlIHZhbHVlKSAtPiBQYXJ0aWFsUgogCiAg
ICAgc3dpdGNoIChnbG9iYWwuYmluZGluZ01vZGUpIHsKICAgICBjYXNlIFdhc206Okdsb2JhbElu
Zm9ybWF0aW9uOjpCaW5kaW5nTW9kZTo6RW1iZWRkZWRJbkluc3RhbmNlOgotICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlLCBvcmlnaW4o
KSwgZ2V0KHZhbHVlKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mR2xvYmFsUHRyKG1fbnVtSW1wb3J0RnVuY3Rpb25zLCBt
X2luZm8udGFibGVDb3VudCgpLCBpbmRleCkpKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZSwgb3JpZ2luKCksIGdldCh2YWx1ZSks
IGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mR2xv
YmFsUHRyKG1fbnVtSW1wb3J0RnVuY3Rpb25zLCBtX2luZm8udGFibGVDb3VudCgpLCBpbmRleCkp
KTsKICAgICAgICAgaWYgKGlzUmVmVHlwZShnbG9iYWwudHlwZSkpCiAgICAgICAgICAgICBlbWl0
V3JpdGVCYXJyaWVyRm9ySlNXcmFwcGVyKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2Fz
bTo6R2xvYmFsSW5mb3JtYXRpb246OkJpbmRpbmdNb2RlOjpQb3J0YWJsZTogewogICAgICAgICBB
U1NFUlQoZ2xvYmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6TXV0YWJpbGl0eTo6TXV0YWJsZSk7Ci0g
ICAgICAgIFZhbHVlKiBwb2ludGVyID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBMb2FkLCBCMzo6SW50NjQsIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCks
IHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxQ
dHIobV9udW1JbXBvcnRGdW5jdGlvbnMsIG1faW5mby50YWJsZUNvdW50KCksIGluZGV4KSkpOwor
ICAgICAgICBWYWx1ZSogcG9pbnRlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KG1fcHJvYywgTG9hZCwgQjM6OkludDY0LCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgp
LCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxQdHIobV9udW1JbXBv
cnRGdW5jdGlvbnMsIG1faW5mby50YWJsZUNvdW50KCksIGluZGV4KSkpOwogICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlLCBvcmlnaW4o
KSwgZ2V0KHZhbHVlKSwgcG9pbnRlcik7CiAgICAgICAgIC8vIFdlIGVtaXQgYSB3cml0ZS1iYXJy
aWVyIG9udG8gSlNXZWJBc3NlbWJseUdsb2JhbCwgbm90IEpTV2ViQXNzZW1ibHlJbnN0YW5jZS4K
ICAgICAgICAgaWYgKGlzUmVmVHlwZShnbG9iYWwudHlwZSkpIHsKKyAgICAgICAgICAgIFZhbHVl
KiBpbnN0YW5jZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNh
c3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mT3duZXIoKSkpOwogICAgICAgICAgICAgVmFs
dWUqIGNlbGwgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBwb2ludGVyLCBXYXNtOjpHbG9iYWw6Om9m
ZnNldE9mT3duZXIoKSAtIFdhc206Okdsb2JhbDo6b2Zmc2V0T2ZWYWx1ZSgpKTsKICAgICAgICAg
ICAgIFZhbHVlKiBjZWxsU3RhdGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsIExvYWQ4WiwgSW50MzIsIG9yaWdpbigpLCBjZWxsLCBzYWZlQ2FzdDxpbnQz
Ml90PihKU0NlbGw6OmNlbGxTdGF0ZU9mZnNldCgpKSk7Ci0gICAgICAgICAgICBWYWx1ZSogdm0g
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBv
aW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+
KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZWTSgpKSk7CisgICAgICAgICAgICBWYWx1
ZSogdm0gPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExv
YWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZSwgc2FmZUNhc3Q8aW50MzJfdD4o
SlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZlZNKCkpKTsKICAgICAgICAgICAgIFZhbHVl
KiB0aHJlc2hvbGQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIExvYWQsIEludDMyLCBvcmlnaW4oKSwgdm0sIHNhZmVDYXN0PGludDMyX3Q+KFZNOjpvZmZz
ZXRPZkhlYXBCYXJyaWVyVGhyZXNob2xkKCkpKTsKIAogICAgICAgICAgICAgQmFzaWNCbG9jayog
ZmVuY2VDaGVja1BhdGggPSBtX3Byb2MuYWRkQmxvY2soKTsKQEAgLTIwNTUsNyArMjA1Nyw4IEBA
IGF1dG8gT01HSVJHZW5lcmF0b3I6OnNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lv
blR5cGUgdmFsdWUpIC0+IFBhcnRpYWxSCiAKIGlubGluZSB2b2lkIE9NR0lSR2VuZXJhdG9yOjpl
bWl0V3JpdGVCYXJyaWVyRm9ySlNXcmFwcGVyKCkKIHsKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGlu
c3RhbmNlVmFsdWUoKSwgaW5zdGFuY2VWYWx1ZSgpKTsKKyAgICBWYWx1ZSogaW5zdGFuY2UgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50
ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KElu
c3RhbmNlOjpvZmZzZXRPZk93bmVyKCkpKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGluc3RhbmNl
LCBpbnN0YW5jZSk7CiB9CiAKIGlubGluZSB2b2lkIE9NR0lSR2VuZXJhdG9yOjplbWl0V3JpdGVC
YXJyaWVyKFZhbHVlKiBjZWxsLCBWYWx1ZSogaW5zdGFuY2VDZWxsKQpAQCAtMjEzMCw3ICsyMTMz
LDcgQEAgaW5saW5lIFZhbHVlKiBPTUdJUkdlbmVyYXRvcjo6ZW1pdENoZWNrQW5kUHJlcGFyZVBv
aW50ZXIoVmFsdWUqIHBvaW50ZXIsIHVpbnQzMl8KICAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNl
cHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsK
ICAgICAgICAgfSk7CiAgICAgICAgIC8vIFRlc3QgdGhhdCB3ZSdyZSB3aXRoaW4gYm91bmRzLgot
ICAgICAgICBWYWx1ZSogYm91bmRzQ2hlY2tpbmdTaXplID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2luKCksIGluc3RhbmNl
VmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRP
ZkNhY2hlZEJvdW5kc0NoZWNraW5nU2l6ZSgpKSk7CisgICAgICAgIFZhbHVlKiBib3VuZHNDaGVj
a2luZ1NpemUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IExvYWQsIEludDMyLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90
PihJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRCb3VuZHNDaGVja2luZ1NpemUoKSkpOwogICAgICAg
ICBWYWx1ZSogaXNXaXRoaW5Cb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIEFib3ZlLCBvcmlnaW4oKSwgaGlnaGVzdEFjY2VzcywgYm91bmRzQ2hlY2tpbmdT
aXplKTsKICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2tCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLCBpc1dpdGhpbkJv
dW5kcyk7CiAgICAgICAgIGNoZWNrQm91bmRzLT5zZXRHZW5lcmF0b3IoWz0sIHRoaXNdIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewpAQCAtMjE0
Niw3ICsyMTQ5LDcgQEAgaW5saW5lIFZhbHVlKiBPTUdJUkdlbmVyYXRvcjo6ZW1pdENoZWNrQW5k
UHJlcGFyZVBvaW50ZXIoVmFsdWUqIHBvaW50ZXIsIHVpbnQzMl8KICAgICB9CiAgICAgfQogCi0g
ICAgVmFsdWUqIG1lbW9yeUJhc2UgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsIExvYWQsIEludDMyLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZl
Q2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5
KCkpKTsKKyAgICBWYWx1ZSogbWVtb3J5QmFzZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50MzIsIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVl
KCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSk7
CiAgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWRk
LCBvcmlnaW4oKSwgbWVtb3J5QmFzZSwgcG9pbnRlcik7CiB9CiAKQEAgLTI2ODEsOCArMjY4NCwx
MCBAQCB2b2lkIE9NR0lSR2VuZXJhdG9yOjplbWl0U3RydWN0U2V0KFZhbHVlKiBzdHJ1Y3RWYWx1
ZSwgdWludDMyX3QgZmllbGRJbmRleCwgY29ucwogCiAgICAgQVNTRVJUKGZpZWxkVHlwZS5pczxU
eXBlPigpKTsKICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIG1lbW9yeUtpbmQoU3RvcmUpLCBvcmlnaW4oKSwgYXJndW1lbnQsIHBheWxvYWRCYXNlLCBm
aWVsZE9mZnNldCk7Ci0gICAgaWYgKGlzUmVmVHlwZShmaWVsZFR5cGUudW5wYWNrZWQoKSkpCi0g
ICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc3RydWN0VmFsdWUsIGluc3RhbmNlVmFsdWUoKSk7Cisg
ICAgaWYgKGlzUmVmVHlwZShmaWVsZFR5cGUudW5wYWNrZWQoKSkpIHsKKyAgICAgICAgVmFsdWUq
IGluc3RhbmNlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9j
LCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2Fz
dDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZPd25lcigpKSk7CisgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIoc3RydWN0VmFsdWUsIGluc3RhbmNlKTsKKyAgICB9CiB9CiAKIGF1dG8gT01HSVJH
ZW5lcmF0b3I6OmF0b21pY0NvbXBhcmVFeGNoYW5nZShFeHRBdG9taWNPcFR5cGUgb3AsIFR5cGUg
dmFsdWVUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNzaW9uVHlwZSBleHBlY3Rl
ZCwgRXhwcmVzc2lvblR5cGUgdmFsdWUsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90
IG9mZnNldCkgLT4gUGFydGlhbFJlc3VsdApAQCAtMzAwMiw3ICszMDA3LDcgQEAgYXV0byBPTUdJ
UkdlbmVyYXRvcjo6YWRkQXJyYXlOZXcodWludDMyX3QgdHlwZUluZGV4LCBFeHByZXNzaW9uVHlw
ZSBzaXplLCBFeHByZXMKICAgICByZXR1cm4geyB9OwogfQogCi1WYXJpYWJsZSogT01HSVJHZW5l
cmF0b3I6OnB1c2hBcnJheU5ld0Zyb21TZWdtZW50KEFycmF5U2VnbWVudE9wZXJhdGlvbiBvcGVy
YXRpb24sIHVpbnQzMl90IHR5cGVJbmRleCwgdWludDMyX3Qgc2VnbWVudEluZGV4LCBFeHByZXNz
aW9uVHlwZSBhcnJheVNpemUsIEV4cHJlc3Npb25UeXBlIG9mZnNldCwgRXhjZXB0aW9uVHlwZSBl
eGNlcHRpb25UeXBlKQorVmFyaWFibGUqIE9NR0lSR2VuZXJhdG9yOjpwdXNoQXJyYXlOZXdGcm9t
U2VnbWVudChhcnJheVNlZ21lbnRPcGVyYXRpb24gb3BlcmF0aW9uLCB1aW50MzJfdCB0eXBlSW5k
ZXgsIHVpbnQzMl90IHNlZ21lbnRJbmRleCwgRXhwcmVzc2lvblR5cGUgYXJyYXlTaXplLCBFeHBy
ZXNzaW9uVHlwZSBvZmZzZXQsIEV4Y2VwdGlvblR5cGUgZXhjZXB0aW9uVHlwZSkKIHsKICAgICBW
YWx1ZSogcmVzdWx0VmFsdWUgPSBjYWxsV2FzbU9wZXJhdGlvbihtX2N1cnJlbnRCbG9jaywgdG9C
M1R5cGUoVHlwZXM6OkFycmF5cmVmKSwgb3BlcmF0aW9uLAogICAgICAgICBpbnN0YW5jZVZhbHVl
KCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdp
bigpLCB0eXBlSW5kZXgpLApAQCAtMzE3Miw4ICszMTc3LDEwIEBAIHZvaWQgT01HSVJHZW5lcmF0
b3I6OmVtaXRBcnJheVNldFVuY2hlY2tlZCh1aW50MzJfdCB0eXBlSW5kZXgsIFZhbHVlKiBhcnJh
eXJlZiwKICAgICBBU1NFUlQoZWxlbWVudFR5cGUuaXM8VHlwZT4oKSk7CiAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBtZW1vcnlLaW5kKFN0b3JlKSwg
b3JpZ2luKCksIHNldFZhbHVlLCBpbmRleGVkQWRkcmVzcyk7CiAKLSAgICBpZiAoaXNSZWZUeXBl
KGVsZW1lbnRUeXBlLnVucGFja2VkKCkpKQotICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGFycmF5
cmVmLCBpbnN0YW5jZVZhbHVlKCkpOworICAgIGlmIChpc1JlZlR5cGUoZWxlbWVudFR5cGUudW5w
YWNrZWQoKSkpIHsKKyAgICAgICAgVmFsdWUqIGluc3RhbmNlID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4o
KSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZP
d25lcigpKSk7CisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJyYXlyZWYsIGluc3RhbmNlKTsK
KyAgICB9CiAKICAgICByZXR1cm47CiB9CkBAIC00OTYyLDcgKzQ5NjksOCBAQCBhdXRvIE9NR0lS
R2VuZXJhdG9yOjphZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFR5cGVEZWZp
bml0aW9uJiBzaWduYQogICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKSB7CiAgICAgICAg
ICAgICAgICAgICAgIC8vIEluIHRhaWwtY2FsbCwgd2UgYWx3YXlzIGNvbmZpZ3VyZSBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqIGluIHx0aGlzfCB0byBhbmNob3IgaXQgZnJvbSBjb25zZXJ2YXRpdmUg
R0Mgcm9vdHMuCiAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyB0aGlz
U2xvdChDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojp0
aGlzQXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpIC0gcHJvbG9n
dWVTdGFja1BvaW50ZXJEZWx0YSgpKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlUHRy
KEdQUkluZm86Ondhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyLCB0aGlzU2xvdC53aXRoT2Zmc2V0
KFBheWxvYWRPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Ondhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyLCBJbnN0
YW5jZTo6b2Zmc2V0T2ZPd25lcigpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRH
UFIxKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86Om5vblByZXNl
cnZlZE5vbkFyZ3VtZW50R1BSMSwgdGhpc1Nsb3Qud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KSk7
CiAgICAgICAgICAgICAgICAgICAgIGppdC5mYXJKdW1wKHBhcmFtc1twYXRjaEFyZ3NJbmRleF0u
Z3ByKCksIFdhc21FbnRyeVB0clRhZyk7CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgIGppdC5jYWxsKHBhcmFtc1twYXRjaEFyZ3NJbmRleF0uZ3ByKCksIFdhc21F
bnRyeVB0clRhZyk7CkBAIC00OTc1LDcgKzQ5ODMsNyBAQCBhdXRvIE9NR0lSR2VuZXJhdG9yOjph
ZGRDYWxsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFR5cGVEZWZpbml0aW9uJiBzaWdu
YQogICAgICAgICAvLyBmb3IgY2FsbHMgb3V0IHRvIHRoZSBqcy4gVGhpcyBzaG91bGRuJ3QgYmUg
dGhhdCBoYXJkIHRvIGRvLiBXZSBjb3VsZCBwcm9iYWJseQogICAgICAgICAvLyBpbXBsZW1lbnQg
dGhlIElDIHRvIGJlIG92ZXIgQ29udGV4dCouCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAzNzUKLSAgICAgICAganVtcERlc3RpbmF0aW9uID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2lu
dGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mSW1wb3J0RnVuY3Rpb25TdHViKGZ1bmN0aW9u
SW5kZXgpKSk7CisgICAgICAgIGp1bXBEZXN0aW5hdGlvbiA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCks
IGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mSW1w
b3J0RnVuY3Rpb25TdHViKGZ1bmN0aW9uSW5kZXgpKSk7CiAKICAgICAgICAgaWYgKGlzVGFpbENh
bGwpIHsKICAgICAgICAgICAgIGF1dG8gW3BhdGNocG9pbnQsIGhhbmRsZSwgcHJlcGFyZUZvckNh
bGxdID0gY3JlYXRlVGFpbENhbGxQYXRjaHBvaW50KG1fY3VycmVudEJsb2NrLCB3YXNtQ2FsbGVy
SW5mb0FzQ2FsbGVlLCB3YXNtQ2FsbGVlSW5mb0FzQ2FsbGVlLCBhcmdzLCB7IH0pOwpAQCAtNTAw
OCw3ICs1MDE2LDggQEAgYXV0byBPTUdJUkdlbmVyYXRvcjo6YWRkQ2FsbCh1aW50MzJfdCBmdW5j
dGlvbkluZGV4LCBjb25zdCBUeXBlRGVmaW5pdGlvbiYgc2lnbmEKICAgICAgICAgICAgIGlmIChp
c1RhaWxDYWxsKSB7CiAgICAgICAgICAgICAgICAgLy8gSW4gdGFpbC1jYWxsLCB3ZSBhbHdheXMg
Y29uZmlndXJlIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW4gfHRoaXN8IHRvIGFuY2hvciBpdCBm
cm9tIGNvbnNlcnZhdGl2ZSBHQyByb290cy4KICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MgdGhpc1Nsb3QoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgQ2Fs
bEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0
ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKSk7Ci0gICAgICAgICAgICAgICAgaml0
LnN0b3JlUHRyKEdQUkluZm86Ondhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyLCB0aGlzU2xvdC53
aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIs
IEluc3RhbmNlOjpvZmZzZXRPZk93bmVyKCkpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1
bWVudEdQUjEpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpub25QcmVz
ZXJ2ZWROb25Bcmd1bWVudEdQUjEsIHRoaXNTbG90LndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCkp
OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBhdXRvIGNhbGxlZU1vdmUgPSBqaXQuc3Rv
cmVXYXNtQ2FsbGVlQ2FsbGVlUGF0Y2hhYmxlKCk7CkBAIC01MDczLDcgKzUwODIsNyBAQCBhdXRv
IE9NR0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaWduZWQgdGFibGVJbmRleCwgY29u
c3QgVHlwZURlZmluaXRpb24mCiAgICAgVmFsdWUqIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIgPSBu
dWxscHRyOwogICAgIFZhbHVlKiBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoOwogICAgIHsK
LSAgICAgICAgVmFsdWUqIHRhYmxlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1
ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mVGFi
bGVQdHIobV9udW1JbXBvcnRGdW5jdGlvbnMsIHRhYmxlSW5kZXgpKSk7CisgICAgICAgIFZhbHVl
KiB0YWJsZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
TG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8
aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mVGFibGVQdHIobV9udW1JbXBvcnRGdW5jdGlvbnMs
IHRhYmxlSW5kZXgpKSk7CiAgICAgICAgIEFTU0VSVCh0YWJsZUluZGV4IDwgbV9pbmZvLnRhYmxl
Q291bnQoKSk7CiAgICAgICAgIGF1dG8mIHRhYmxlSW5mb3JtYXRpb24gPSBtX2luZm8udGFibGUo
dGFibGVJbmRleCk7CiAKQEAgLTUyMDMsNyArNTIxMiwxMSBAQCBhdXRvIE9NR0lSR2VuZXJhdG9y
OjphZGRDYWxsUmVmKGNvbnN0IFR5cGVEZWZpbml0aW9uJiBvcmlnaW5hbFNpZ25hdHVyZSwgVmVj
dG9yPAogICAgIH0KIAogICAgIFZhbHVlKiBqc0luc3RhbmNlT2Zmc2V0ID0gY29uc3RhbnQocG9p
bnRlclR5cGUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6Om9m
ZnNldE9mSW5zdGFuY2UoKSkpOwotICAgIFZhbHVlKiBjYWxsZWVJbnN0YW5jZSA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUo
KSwgb3JpZ2luKCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWRk
LCBvcmlnaW4oKSwgY2FsbGVlLCBqc0luc3RhbmNlT2Zmc2V0KSk7CisgICAgVmFsdWUqIGpzQ2Fs
bGVlSW5zdGFuY2UgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgb3JpZ2luKCksIGNhbGxlZSwganNJbnN0YW5jZU9mZnNl
dCkpOworCisgICAgVmFsdWUqIGluc3RhbmNlT2Zmc2V0ID0gY29uc3RhbnQocG9pbnRlclR5cGUo
KSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZkluc3Rh
bmNlKCkpKTsKKyAgICBWYWx1ZSogY2FsbGVlSW5zdGFuY2UgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigp
LAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFkZCwg
b3JpZ2luKCksIGpzQ2FsbGVlSW5zdGFuY2UsIGluc3RhbmNlT2Zmc2V0KSk7CiAKICAgICBWYWx1
ZSogY2FsbGVlQ29kZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwg
b3JpZ2luKCksIGNhbGxlZSwKQEAgLTUyMTMsNyArNTIyNiw3IEBAIGF1dG8gT01HSVJHZW5lcmF0
b3I6OmFkZENhbGxSZWYoY29uc3QgVHlwZURlZmluaXRpb24mIG9yaWdpbmFsU2lnbmF0dXJlLCBW
ZWN0b3I8CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1f
cHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGNhbGxlZSwKICAgICAgICAgc2Fm
ZUNhc3Q8aW50MzJfdD4oV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6Om9mZnNldE9mQm94ZWRXYXNt
Q2FsbGVlTG9hZExvY2F0aW9uKCkpKSk7CiAKLSAgICByZXR1cm4gZW1pdEluZGlyZWN0Q2FsbChj
YWxsZWVJbnN0YW5jZSwgY2FsbGVlQ29kZSwgY2FsbGVlQ2FsbGVlLCBjYWxsZWVJbnN0YW5jZSwg
c2lnbmF0dXJlLCBhcmdzLCByZXN1bHRzKTsKKyAgICByZXR1cm4gZW1pdEluZGlyZWN0Q2FsbChj
YWxsZWVJbnN0YW5jZSwgY2FsbGVlQ29kZSwgY2FsbGVlQ2FsbGVlLCBqc0NhbGxlZUluc3RhbmNl
LCBzaWduYXR1cmUsIGFyZ3MsIHJlc3VsdHMpOwogfQogCiB2b2lkIE9NR0lSR2VuZXJhdG9yOjp1
bmlmeShWYWx1ZSogcGhpLCBjb25zdCBFeHByZXNzaW9uVHlwZSBzb3VyY2UpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKaW5kZXggOTU1MmEwMDRlZGYx
Li41OWNmYzk3NDRjZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3Bl
cmF0aW9ucy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5LTIw
MjQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgog
I2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgogI2luY2x1ZGUgIldhc21Db250ZXh0
LmgiCisjaW5jbHVkZSAiV2FzbUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiV2FzbUxMSW50R2VuZXJh
dG9yLmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZv
cm1hdGlvbi5oIgpAQCAtODEsNyArODIsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRUcmlnZ2VyT01H
Q29tcGlsZShUaWVyVXBDb3VudCYgdGllclVwLCBPTUdDYWxsZWUqIHJlcGxhY2VtZW50LAogICAg
IHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCB0cmlnZ2VyT01HUmVwbGFjZW1lbnRDb21w
aWxlKFRpZXJVcENvdW50JiB0aWVyVXAsIE9NR0NhbGxlZSogcmVwbGFjZW1lbnQsIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIFdhc206OkNhbGxlZUdyb3VwJiBjYWxsZWVHcm91cCwg
dWludDMyX3QgZnVuY3Rpb25JbmRleCwgc3RkOjpvcHRpb25hbDxib29sPiBoYXNFeGNlcHRpb25I
YW5kbGVycykKK3N0YXRpYyB2b2lkIHRyaWdnZXJPTUdSZXBsYWNlbWVudENvbXBpbGUoVGllclVw
Q291bnQmIHRpZXJVcCwgT01HQ2FsbGVlKiByZXBsYWNlbWVudCwgSW5zdGFuY2UqIGluc3RhbmNl
LCBXYXNtOjpDYWxsZWVHcm91cCYgY2FsbGVlR3JvdXAsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgs
IHN0ZDo6b3B0aW9uYWw8Ym9vbD4gaGFzRXhjZXB0aW9uSGFuZGxlcnMpCiB7CiAgICAgaWYgKHJl
cGxhY2VtZW50KSB7CiAgICAgICAgIHRpZXJVcC5vcHRpbWl6ZVNvb24oZnVuY3Rpb25JbmRleCk7
CkBAIC0xOTgsNyArMTk5LDcgQEAgdm9pZCBsb2FkVmFsdWVzSW50b0J1ZmZlcihQcm9iZTo6Q29u
dGV4dCYgY29udGV4dCwgY29uc3QgU3RhY2tNYXAmIHZhbHVlcywgdWludDYKIH0KIAogU1VQUFJF
U1NfQVNBTgotc3RhdGljIHZvaWQgZG9PU1JFbnRyeShKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGlu
c3RhbmNlLCBQcm9iZTo6Q29udGV4dCYgY29udGV4dCwgQkJRQ2FsbGVlJiBjYWxsZWUsIE9TUkVu
dHJ5Q2FsbGVlJiBvc3JFbnRyeUNhbGxlZSwgT1NSRW50cnlEYXRhJiBvc3JFbnRyeURhdGEpCitz
dGF0aWMgdm9pZCBkb09TUkVudHJ5KEluc3RhbmNlKiBpbnN0YW5jZSwgUHJvYmU6OkNvbnRleHQm
IGNvbnRleHQsIEJCUUNhbGxlZSYgY2FsbGVlLCBPU1JFbnRyeUNhbGxlZSYgb3NyRW50cnlDYWxs
ZWUsIE9TUkVudHJ5RGF0YSYgb3NyRW50cnlEYXRhKQogewogICAgIGF1dG8gcmV0dXJuV2l0aG91
dE9TUkVudHJ5ID0gWyZdIHsKICAgICAgICAgY29udGV4dC5ncHIoR1BSSW5mbzo6bm9uUHJlc2Vy
dmVkTm9uQXJndW1lbnRHUFIwKSA9IDA7CkBAIC0yNzEsNyArMjcyLDcgQEAgaW5saW5lIGJvb2wg
c2hvdWxkSklUKHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LUpTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVHJpZ2dlclRp
ZXJVcE5vdywgdm9pZCwgKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXgpKQorSlNDX0RFRklORV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbldhc21UcmlnZ2VyVGllclVwTm93LCB2b2lkLCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1aW50
MzJfdCBmdW5jdGlvbkluZGV4KSkKIHsKICAgICBXYXNtOjpDYWxsZWVHcm91cCYgY2FsbGVlR3Jv
dXAgPSAqaW5zdGFuY2UtPmNhbGxlZUdyb3VwKCk7CiAgICAgQVNTRVJUKGluc3RhbmNlLT5tZW1v
cnkoKS0+bW9kZSgpID09IGNhbGxlZUdyb3VwLm1vZGUoKSk7CkBAIC0zMTcsNyArMzE4LDcgQEAg
SlNDX0RFRklORV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UcmlnZ2VyT1NS
RW50cnlOb3csIHZvaWQsIChQcm9iZToKICAgICBPU1JFbnRyeURhdGEmIG9zckVudHJ5RGF0YSA9
ICpjb250ZXh0LmFyZzxPU1JFbnRyeURhdGEqPigpOwogICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXggPSBvc3JFbnRyeURhdGEuZnVuY3Rpb25JbmRleCgpOwogICAgIHVpbnQzMl90IGxvb3BJbmRl
eCA9IG9zckVudHJ5RGF0YS5sb29wSW5kZXgoKTsKLSAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
IGluc3RhbmNlID0gY29udGV4dC5ncHI8SlNXZWJBc3NlbWJseUluc3RhbmNlKj4oR1BSSW5mbzo6
d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIpOworICAgIEluc3RhbmNlKiBpbnN0YW5jZSA9IGNv
bnRleHQuZ3ByPEluc3RhbmNlKj4oR1BSSW5mbzo6d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIp
OwogCiAgICAgYXV0byByZXR1cm5XaXRob3V0T1NSRW50cnkgPSBbJl0gewogICAgICAgICBjb250
ZXh0LmdwcihHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUjApID0gMDsKQEAgLTU4
Myw3ICs1ODQsNyBAQCBKU0NfREVGSU5FX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
V2FzbUxvb3BPU1JFbnRlckJCUUpJVCwgdm9pZCwgKFByb2JlOgogCiAjZW5kaWYKIAotSlNDX0RF
RklORV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21VbndpbmQsIHZvaWQqLCAo
SlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSkpCitKU0NfREVGSU5FX05PRVhDRVBUX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVVud2luZCwgdm9pZCosIChJbnN0YW5jZSogaW5zdGFu
Y2UpKQogewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9XQVNNX0NBTExfRlJB
TUUoaW5zdGFuY2UpOwogICAgIFZNJiB2bSA9IGluc3RhbmNlLT52bSgpOwpAQCAtNTk0LDcgKzU5
NSw3IEBAIEpTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVW53
aW5kLCB2b2lkKiwgKEpTV2ViQXNzZW1ibHlJbnN0CiAgICAgcmV0dXJuIHZtLnRhcmdldE1hY2hp
bmVQQ0ZvclRocm93OwogfQogCi1KU0NfREVGSU5FX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uQ29udmVydFRvSTY0LCBpbnQ2NF90LCAoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0
YW5jZSwgRW5jb2RlZEpTVmFsdWUgdikpCitKU0NfREVGSU5FX05PRVhDRVBUX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uQ29udmVydFRvSTY0LCBpbnQ2NF90LCAoSW5zdGFuY2UqIGluc3RhbmNlLCBF
bmNvZGVkSlNWYWx1ZSB2KSkKIHsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVf
V0FTTV9DQUxMX0ZSQU1FKGluc3RhbmNlKTsKICAgICBWTSYgdm0gPSBpbnN0YW5jZS0+dm0oKTsK
QEAgLTYwMyw3ICs2MDQsNyBAQCBKU0NfREVGSU5FX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uQ29udmVydFRvSTY0LCBpbnQ2NF90LCAoSlNXZWJBc3NlbWJseQogICAgIHJldHVybiBK
U1ZhbHVlOjpkZWNvZGUodikudG9CaWdJbnQ2NChnbG9iYWxPYmplY3QpOwogfQogCi1KU0NfREVG
SU5FX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ29udmVydFRvRjY0LCBkb3VibGUs
IChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBFbmNvZGVkSlNWYWx1ZSB2KSkKK0pT
Q19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25Db252ZXJ0VG9GNjQsIGRv
dWJsZSwgKEluc3RhbmNlKiBpbnN0YW5jZSwgRW5jb2RlZEpTVmFsdWUgdikpCiB7CiAgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX1dBU01fQ0FMTF9GUkFNRShpbnN0YW5jZSk7CiAg
ICAgVk0mIHZtID0gaW5zdGFuY2UtPnZtKCk7CkBAIC02MTIsNyArNjEzLDcgQEAgSlNDX0RFRklO
RV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNvbnZlcnRUb0Y2NCwgZG91YmxlLCAo
SlNXZWJBc3NlbWJseUkKICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKHYpLnRvTnVtYmVyKGds
b2JhbE9iamVjdCk7CiB9CiAKLUpTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVy
YXRpb25Db252ZXJ0VG9JMzIsIGludDMyX3QsIChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3Rh
bmNlLCBFbmNvZGVkSlNWYWx1ZSB2KSkKK0pTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElP
TihvcGVyYXRpb25Db252ZXJ0VG9JMzIsIGludDMyX3QsIChJbnN0YW5jZSogaW5zdGFuY2UsIEVu
Y29kZWRKU1ZhbHVlIHYpKQogewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9X
QVNNX0NBTExfRlJBTUUoaW5zdGFuY2UpOwogICAgIFZNJiB2bSA9IGluc3RhbmNlLT52bSgpOwpA
QCAtNjIxLDcgKzYyMiw3IEBAIEpTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVy
YXRpb25Db252ZXJ0VG9JMzIsIGludDMyX3QsIChKU1dlYkFzc2VtYmx5CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmRlY29kZSh2KS50b0ludDMyKGdsb2JhbE9iamVjdCk7CiB9CiAKLUpTQ19ERUZJTkVf
Tk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25Db252ZXJ0VG9GMzIsIGZsb2F0LCAoSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgRW5jb2RlZEpTVmFsdWUgdikpCitKU0NfREVG
SU5FX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ29udmVydFRvRjMyLCBmbG9hdCwg
KEluc3RhbmNlKiBpbnN0YW5jZSwgRW5jb2RlZEpTVmFsdWUgdikpCiB7CiAgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBERUNMQVJFX1dBU01fQ0FMTF9GUkFNRShpbnN0YW5jZSk7CiAgICAgVk0m
IHZtID0gaW5zdGFuY2UtPnZtKCk7CkBAIC02MzAsNyArNjMxLDcgQEAgSlNDX0RFRklORV9OT0VY
Q0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNvbnZlcnRUb0YzMiwgZmxvYXQsIChKU1dlYkFz
c2VtYmx5SW4KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KEpTVmFsdWU6OmRlY29kZSh2
KS50b051bWJlcihnbG9iYWxPYmplY3QpKTsKIH0KIAotSlNDX0RFRklORV9OT0VYQ0VQVF9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbkNvbnZlcnRUb0Z1bmNyZWYsIEVuY29kZWRKU1ZhbHVlLCAoSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgY29uc3QgVHlwZURlZmluaXRpb24qIHR5cGUs
IEVuY29kZWRKU1ZhbHVlIHYpKQorSlNDX0RFRklORV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbkNvbnZlcnRUb0Z1bmNyZWYsIEVuY29kZWRKU1ZhbHVlLCAoSW5zdGFuY2UqIGluc3Rh
bmNlLCBjb25zdCBUeXBlRGVmaW5pdGlvbiogdHlwZSwgRW5jb2RlZEpTVmFsdWUgdikpCiB7CiAg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX1dBU01fQ0FMTF9GUkFNRShpbnN0YW5j
ZSk7CiAgICAgVk0mIHZtID0gaW5zdGFuY2UtPnZtKCk7CkBAIC02NTksNyArNjYwLDcgQEAgSlND
X0RFRklORV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNvbnZlcnRUb0Z1bmNyZWYs
IEVuY29kZWRKU1ZhbHVlLCAoSlMKICAgICByZXR1cm4gdjsKIH0KIAotSlNDX0RFRklORV9OT0VY
Q0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNvbnZlcnRUb0FueXJlZiwgRW5jb2RlZEpTVmFs
dWUsIChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBjb25zdCBUeXBlRGVmaW5pdGlv
biogdHlwZSwgRW5jb2RlZEpTVmFsdWUgdikpCitKU0NfREVGSU5FX05PRVhDRVBUX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uQ29udmVydFRvQW55cmVmLCBFbmNvZGVkSlNWYWx1ZSwgKEluc3RhbmNl
KiBpbnN0YW5jZSwgY29uc3QgVHlwZURlZmluaXRpb24qIHR5cGUsIEVuY29kZWRKU1ZhbHVlIHYp
KQogewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9XQVNNX0NBTExfRlJBTUUo
aW5zdGFuY2UpOwogICAgIFZNJiB2bSA9IGluc3RhbmNlLT52bSgpOwpAQCAtNjgwLDcgKzY4MSw3
IEBAIEpTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25Db252ZXJ0VG9B
bnlyZWYsIEVuY29kZWRKU1ZhbHVlLCAoSlNXCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh2
YWx1ZSk7CiB9CiAKLUpTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25D
b252ZXJ0VG9CaWdJbnQsIEVuY29kZWRKU1ZhbHVlLCAoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBp
bnN0YW5jZSwgRW5jb2RlZFdhc21WYWx1ZSB2YWx1ZSkpCitKU0NfREVGSU5FX05PRVhDRVBUX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uQ29udmVydFRvQmlnSW50LCBFbmNvZGVkSlNWYWx1ZSwgKElu
c3RhbmNlKiBpbnN0YW5jZSwgRW5jb2RlZFdhc21WYWx1ZSB2YWx1ZSkpCiB7CiAgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX1dBU01fQ0FMTF9GUkFNRShpbnN0YW5jZSk7CiAgICAg
Vk0mIHZtID0gaW5zdGFuY2UtPnZtKCk7CkBAIC02OTAsNyArNjkxLDcgQEAgSlNDX0RFRklORV9O
T0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNvbnZlcnRUb0JpZ0ludCwgRW5jb2RlZEpT
VmFsdWUsIChKU1cKIH0KIAogLy8gaHR0cHM6Ly93ZWJhc3NlbWJseS5naXRodWIuaW8vbXVsdGkt
dmFsdWUvanMtYXBpL2luZGV4Lmh0bWwjcnVuLWEtaG9zdC1mdW5jdGlvbgotSlNDX0RFRklORV9O
T0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkl0ZXJhdGVSZXN1bHRzLCB2b2lkLCAoSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgY29uc3QgVHlwZURlZmluaXRpb24qIHR5cGUs
IEVuY29kZWRKU1ZhbHVlIGVuY1Jlc3VsdCwgdWludDY0X3QqIHJlZ2lzdGVyUmVzdWx0cywgdWlu
dDY0X3QqIGNhbGxlZUZyYW1lUG9pbnRlcikpCitKU0NfREVGSU5FX05PRVhDRVBUX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uSXRlcmF0ZVJlc3VsdHMsIHZvaWQsIChJbnN0YW5jZSogaW5zdGFuY2Us
IGNvbnN0IFR5cGVEZWZpbml0aW9uKiB0eXBlLCBFbmNvZGVkSlNWYWx1ZSBlbmNSZXN1bHQsIHVp
bnQ2NF90KiByZWdpc3RlclJlc3VsdHMsIHVpbnQ2NF90KiBjYWxsZWVGcmFtZVBvaW50ZXIpKQog
ewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9XQVNNX0NBTExfRlJBTUUoaW5z
dGFuY2UpOwogICAgIFZNJiB2bSA9IGluc3RhbmNlLT52bSgpOwpAQCAtNzkzLDcgKzc5NCw3IEBA
IEpTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25JdGVyYXRlUmVzdWx0
cywgdm9pZCwgKEpTV2ViQXNzZW1ibHlJCiAvLyBGSVhNRTogSXQgd291bGQgYmUgbXVjaCBlYXNp
ZXIgdG8gaW5saW5lIHRoaXMgd2hlbiB3ZSBoYXZlIGEgZ2xvYmFsIEdDLCB3aGljaCBjb3VsZCBw
cm9iYWJseSBtZWFuIHdlIGNvdWxkIGF2b2lkCiAvLyBzcGlsbGluZyB0aGUgcmVzdWx0cyBvbnRv
IHRoZSBzdGFjay4KIC8vIFNhdmVkIHJlc3VsdCByZWdpc3RlcnMgc2hvdWxkIGJlIHBsYWNlZCBv
biB0aGUgc3RhY2sganVzdCBhYm92ZSB0aGUgbGFzdCBzdGFjayByZXN1bHQuCi1KU0NfREVGSU5F
X05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQWxsb2NhdGVSZXN1bHRzQXJyYXksIEpT
QXJyYXkqLCAoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgY29uc3QgVHlwZURlZmlu
aXRpb24qIHR5cGUsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUsIEpTVmFsdWUqIHN0YWNrUG9p
bnRlckZyb21DYWxsZWUpKQorSlNDX0RFRklORV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkFsbG9jYXRlUmVzdWx0c0FycmF5LCBKU0FycmF5KiwgKFdhc206Okluc3RhbmNlKiBpbnN0
YW5jZSwgY29uc3QgVHlwZURlZmluaXRpb24qIHR5cGUsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5
cGUsIEpTVmFsdWUqIHN0YWNrUG9pbnRlckZyb21DYWxsZWUpKQogewogICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gREVDTEFSRV9XQVNNX0NBTExfRlJBTUUoaW5zdGFuY2UpOwogICAgIFZNJiB2
bSA9IGluc3RhbmNlLT52bSgpOwpAQCAtODQ2LDcgKzg0Nyw3IEBAIEpTQ19ERUZJTkVfTk9FWENF
UFRfSklUX09QRVJBVElPTihvcGVyYXRpb25Qb3Bjb3VudDY0LCB1aW50NjRfdCwgKGludDY0X3Qg
dmFsdWUpCiAgICAgcmV0dXJuIHN0ZDo6cG9wY291bnQoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZh
bHVlKSk7CiB9CiAKLUpTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25H
cm93TWVtb3J5LCBpbnQzMl90LCAoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgaW50
MzJfdCBkZWx0YSkpCitKU0NfREVGSU5FX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
R3Jvd01lbW9yeSwgaW50MzJfdCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgaW50MzJfdCBkZWx0YSkp
CiB7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX1dBU01fQ0FMTF9GUkFNRShp
bnN0YW5jZSk7CiAgICAgVk0mIHZtID0gaW5zdGFuY2UtPnZtKCk7CkBAIC04NTQsNTcgKzg1NSw1
NyBAQCBKU0NfREVGSU5FX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR3Jvd01lbW9y
eSwgaW50MzJfdCwgKEpTV2ViQXNzZW1ibHlJbgogICAgIHJldHVybiBncm93TWVtb3J5KGluc3Rh
bmNlLCBkZWx0YSk7CiB9CiAKLUpTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVy
YXRpb25XYXNtTWVtb3J5RmlsbCwgVUNQVVN0cmljdEludDMyLCAoSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBpbnN0YW5jZSwgdWludDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3QgdGFyZ2V0VmFsdWUs
IHVpbnQzMl90IGNvdW50KSkKK0pTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVy
YXRpb25XYXNtTWVtb3J5RmlsbCwgVUNQVVN0cmljdEludDMyLCAoSW5zdGFuY2UqIGluc3RhbmNl
LCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJfdCB0YXJnZXRWYWx1ZSwgdWludDMyX3QgY291
bnQpKQogewogICAgIHJldHVybiB0b1VDUFVTdHJpY3RJbnQzMihtZW1vcnlGaWxsKGluc3RhbmNl
LCBkc3RBZGRyZXNzLCB0YXJnZXRWYWx1ZSwgY291bnQpKTsKIH0KIAotSlNDX0RFRklORV9OT0VY
Q0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21NZW1vcnlDb3B5LCBVQ1BVU3RyaWN0SW50
MzIsIChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCB1aW50MzJfdCBkc3RBZGRyZXNz
LCB1aW50MzJfdCBzcmNBZGRyZXNzLCB1aW50MzJfdCBjb3VudCkpCitKU0NfREVGSU5FX05PRVhD
RVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbU1lbW9yeUNvcHksIFVDUFVTdHJpY3RJbnQz
MiwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3Qgc3Jj
QWRkcmVzcywgdWludDMyX3QgY291bnQpKQogewogICAgIHJldHVybiB0b1VDUFVTdHJpY3RJbnQz
MihtZW1vcnlDb3B5KGluc3RhbmNlLCBkc3RBZGRyZXNzLCBzcmNBZGRyZXNzLCBjb3VudCkpOwog
fQogCi1KU0NfREVGSU5FX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0V2FzbVRh
YmxlRWxlbWVudCwgRW5jb2RlZEpTVmFsdWUsIChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3Rh
bmNlLCB1bnNpZ25lZCB0YWJsZUluZGV4LCBpbnQzMl90IHNpZ25lZEluZGV4KSkKK0pTQ19ERUZJ
TkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRXYXNtVGFibGVFbGVtZW50LCBF
bmNvZGVkSlNWYWx1ZSwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgdGFibGVJbmRleCwg
aW50MzJfdCBzaWduZWRJbmRleCkpCiB7CiAgICAgcmV0dXJuIHRhYmxlR2V0KGluc3RhbmNlLCB0
YWJsZUluZGV4LCBzaWduZWRJbmRleCk7CiB9CiAKLUpTQ19ERUZJTkVfTk9FWENFUFRfSklUX09Q
RVJBVElPTihvcGVyYXRpb25TZXRXYXNtVGFibGVFbGVtZW50LCBVQ1BVU3RyaWN0SW50MzIsIChK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCB0YWJsZUluZGV4LCB1aW50
MzJfdCBzaWduZWRJbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jVmFsdWUpKQorSlNDX0RFRklORV9O
T0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblNldFdhc21UYWJsZUVsZW1lbnQsIFVDUFVT
dHJpY3RJbnQzMiwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgdGFibGVJbmRleCwgdWlu
dDMyX3Qgc2lnbmVkSW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY1ZhbHVlKSkKIHsKICAgICByZXR1
cm4gdG9VQ1BVU3RyaWN0SW50MzIodGFibGVTZXQoaW5zdGFuY2UsIHRhYmxlSW5kZXgsIHNpZ25l
ZEluZGV4LCBlbmNWYWx1ZSkpOwogfQogCi1KU0NfREVGSU5FX05PRVhDRVBUX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uV2FzbVRhYmxlSW5pdCwgVUNQVVN0cmljdEludDMyLCAoSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgZWxlbWVudEluZGV4LCB1bnNpZ25lZCB0YWJs
ZUluZGV4LCB1aW50MzJfdCBkc3RPZmZzZXQsIHVpbnQzMl90IHNyY09mZnNldCwgdWludDMyX3Qg
bGVuZ3RoKSkKK0pTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNt
VGFibGVJbml0LCBVQ1BVU3RyaWN0SW50MzIsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVk
IGVsZW1lbnRJbmRleCwgdW5zaWduZWQgdGFibGVJbmRleCwgdWludDMyX3QgZHN0T2Zmc2V0LCB1
aW50MzJfdCBzcmNPZmZzZXQsIHVpbnQzMl90IGxlbmd0aCkpCiB7CiAgICAgcmV0dXJuIHRvVUNQ
VVN0cmljdEludDMyKHRhYmxlSW5pdChpbnN0YW5jZSwgZWxlbWVudEluZGV4LCB0YWJsZUluZGV4
LCBkc3RPZmZzZXQsIHNyY09mZnNldCwgbGVuZ3RoKSk7CiB9CiAKLUpTQ19ERUZJTkVfTk9FWENF
UFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtRWxlbURyb3AsIHZvaWQsIChKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCBlbGVtZW50SW5kZXgpKQorSlNDX0RFRklO
RV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21FbGVtRHJvcCwgdm9pZCwgKElu
c3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgZWxlbWVudEluZGV4KSkKIHsKICAgICByZXR1cm4g
ZWxlbURyb3AoaW5zdGFuY2UsIGVsZW1lbnRJbmRleCk7CiB9CiAKLUpTQ19ERUZJTkVfTk9FWENF
UFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVHcm93LCBpbnQzMl90LCAoSlNXZWJB
c3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgdGFibGVJbmRleCwgRW5jb2RlZEpT
VmFsdWUgZmlsbCwgdWludDMyX3QgZGVsdGEpKQorSlNDX0RFRklORV9OT0VYQ0VQVF9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbldhc21UYWJsZUdyb3csIGludDMyX3QsIChJbnN0YW5jZSogaW5zdGFu
Y2UsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIEVuY29kZWRKU1ZhbHVlIGZpbGwsIHVpbnQzMl90IGRl
bHRhKSkKIHsKICAgICByZXR1cm4gdGFibGVHcm93KGluc3RhbmNlLCB0YWJsZUluZGV4LCBmaWxs
LCBkZWx0YSk7CiB9CiAKLUpTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRp
b25XYXNtVGFibGVGaWxsLCBVQ1BVU3RyaWN0SW50MzIsIChKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
IGluc3RhbmNlLCB1bnNpZ25lZCB0YWJsZUluZGV4LCB1aW50MzJfdCBvZmZzZXQsIEVuY29kZWRK
U1ZhbHVlIGZpbGwsIHVpbnQzMl90IGNvdW50KSkKK0pTQ19ERUZJTkVfTk9FWENFUFRfSklUX09Q
RVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVGaWxsLCBVQ1BVU3RyaWN0SW50MzIsIChJbnN0YW5j
ZSogaW5zdGFuY2UsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIHVpbnQzMl90IG9mZnNldCwgRW5jb2Rl
ZEpTVmFsdWUgZmlsbCwgdWludDMyX3QgY291bnQpKQogewogICAgIHJldHVybiB0b1VDUFVTdHJp
Y3RJbnQzMih0YWJsZUZpbGwoaW5zdGFuY2UsIHRhYmxlSW5kZXgsIG9mZnNldCwgZmlsbCwgY291
bnQpKTsKIH0KIAotSlNDX0RFRklORV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldh
c21UYWJsZUNvcHksIFVDUFVTdHJpY3RJbnQzMiwgKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5z
dGFuY2UsIHVuc2lnbmVkIGRzdFRhYmxlSW5kZXgsIHVuc2lnbmVkIHNyY1RhYmxlSW5kZXgsIGlu
dDMyX3QgZHN0T2Zmc2V0LCBpbnQzMl90IHNyY09mZnNldCwgaW50MzJfdCBsZW5ndGgpKQorSlND
X0RFRklORV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UYWJsZUNvcHksIFVD
UFVTdHJpY3RJbnQzMiwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgZHN0VGFibGVJbmRl
eCwgdW5zaWduZWQgc3JjVGFibGVJbmRleCwgaW50MzJfdCBkc3RPZmZzZXQsIGludDMyX3Qgc3Jj
T2Zmc2V0LCBpbnQzMl90IGxlbmd0aCkpCiB7CiAgICAgcmV0dXJuIHRvVUNQVVN0cmljdEludDMy
KHRhYmxlQ29weShpbnN0YW5jZSwgZHN0VGFibGVJbmRleCwgc3JjVGFibGVJbmRleCwgZHN0T2Zm
c2V0LCBzcmNPZmZzZXQsIGxlbmd0aCkpOwogfQogCi1KU0NfREVGSU5FX05PRVhDRVBUX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uV2FzbVJlZkZ1bmMsIEVuY29kZWRKU1ZhbHVlLCAoSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3QgaW5kZXgpKQorSlNDX0RFRklORV9OT0VY
Q0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21SZWZGdW5jLCBFbmNvZGVkSlNWYWx1ZSwg
KEluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3QgaW5kZXgpKQogewogICAgIHJldHVybiByZWZG
dW5jKGluc3RhbmNlLCBpbmRleCk7CiB9CiAKLUpTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJB
VElPTihvcGVyYXRpb25XYXNtU3RydWN0TmV3LCBFbmNvZGVkSlNWYWx1ZSwgKEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSogaW5zdGFuY2UsIHVpbnQzMl90IHR5cGVJbmRleCwgYm9vbCB1c2VEZWZhdWx0
LCB1aW50NjRfdCogYXJndW1lbnRzKSkKK0pTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElP
TihvcGVyYXRpb25XYXNtU3RydWN0TmV3LCBFbmNvZGVkSlNWYWx1ZSwgKEluc3RhbmNlKiBpbnN0
YW5jZSwgdWludDMyX3QgdHlwZUluZGV4LCBib29sIHVzZURlZmF1bHQsIHVpbnQ2NF90KiBhcmd1
bWVudHMpKQogewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9XQVNNX0NBTExf
RlJBTUUoaW5zdGFuY2UpOwogICAgIFZNJiB2bSA9IGluc3RhbmNlLT52bSgpOwpAQCAtOTEyLDE0
ICs5MTMsMTUgQEAgSlNDX0RFRklORV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldh
c21TdHJ1Y3ROZXcsIEVuY29kZWRKU1ZhbHVlLCAoSlNXZWIKICAgICByZXR1cm4gc3RydWN0TmV3
KGluc3RhbmNlLCB0eXBlSW5kZXgsIHVzZURlZmF1bHQsIGFyZ3VtZW50cyk7CiB9CiAKLUpTQ19E
RUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtU3RydWN0TmV3RW1wdHks
IEVuY29kZWRKU1ZhbHVlLCAoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMy
X3QgdHlwZUluZGV4KSkKK0pTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRp
b25XYXNtU3RydWN0TmV3RW1wdHksIEVuY29kZWRKU1ZhbHVlLCAoSW5zdGFuY2UqIGluc3RhbmNl
LCB1aW50MzJfdCB0eXBlSW5kZXgpKQogewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVD
TEFSRV9XQVNNX0NBTExfRlJBTUUoaW5zdGFuY2UpOwogICAgIFZNJiB2bSA9IGluc3RhbmNlLT52
bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Cisg
ICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBqc0luc3RhbmNlID0gaW5zdGFuY2UtPm93bmVyKCk7
CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGluc3RhbmNlLT5nbG9iYWxPYmpl
Y3QoKTsKICAgICBhdXRvIHN0cnVjdFJUVCA9IGluc3RhbmNlLT5tb2R1bGUoKS5tb2R1bGVJbmZv
cm1hdGlvbigpLnJ0dHNbdHlwZUluZGV4XTsKLSAgICBhdXRvIG5ld1N0cnVjdCA9IEpTV2ViQXNz
ZW1ibHlTdHJ1Y3Q6OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNz
ZW1ibHlTdHJ1Y3RTdHJ1Y3R1cmUoKSwgaW5zdGFuY2UsIHR5cGVJbmRleCwgc3RydWN0UlRUKTsK
KyAgICBhdXRvIG5ld1N0cnVjdCA9IEpTV2ViQXNzZW1ibHlTdHJ1Y3Q6OnRyeUNyZWF0ZShnbG9i
YWxPYmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlTdHJ1Y3RTdHJ1Y3R1cmUoKSwganNJ
bnN0YW5jZSwgdHlwZUluZGV4LCBzdHJ1Y3RSVFQpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUobmV3U3RydWN0ID8gbmV3U3RydWN0IDoganNOdWxsKCkpOwogfQogCkBAIC05MjgsNyArOTMw
LDcgQEAgSlNDX0RFRklORV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21TdHJ1
Y3RHZXQsIEVuY29kZWRKU1ZhbHVlLCAoRW5jb2QKICAgICByZXR1cm4gc3RydWN0R2V0KGVuY29k
ZWRTdHJ1Y3RSZWZlcmVuY2UsIGZpZWxkSW5kZXgpOwogfQogCi1KU0NfREVGSU5FX05PRVhDRVBU
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVN0cnVjdFNldCwgdm9pZCwgKEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSogaW5zdGFuY2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdHJ1Y3RSZWZlcmVu
Y2UsIHVpbnQzMl90IGZpZWxkSW5kZXgsIEVuY29kZWRKU1ZhbHVlIGFyZ3VtZW50KSkKK0pTQ19E
RUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtU3RydWN0U2V0LCB2b2lk
LCAoSW5zdGFuY2UqIGluc3RhbmNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3RydWN0UmVmZXJl
bmNlLCB1aW50MzJfdCBmaWVsZEluZGV4LCBFbmNvZGVkSlNWYWx1ZSBhcmd1bWVudCkpCiB7CiAg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX1dBU01fQ0FMTF9GUkFNRShpbnN0YW5j
ZSk7CiAgICAgVk0mIHZtID0gaW5zdGFuY2UtPnZtKCk7CkBAIC05MzYsMzcgKzkzOCwzNyBAQCBK
U0NfREVGSU5FX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVN0cnVjdFNldCwg
dm9pZCwgKEpTV2ViQXNzZW1ibHlJbgogICAgIHJldHVybiBzdHJ1Y3RTZXQoZW5jb2RlZFN0cnVj
dFJlZmVyZW5jZSwgZmllbGRJbmRleCwgYXJndW1lbnQpOwogfQogCi1KU0NfREVGSU5FX05PRVhD
RVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0V2FzbVRhYmxlU2l6ZSwgaW50MzJfdCwgKEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIHRhYmxlSW5kZXgpKQorSlND
X0RFRklORV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFdhc21UYWJsZVNpemUs
IGludDMyX3QsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIHRhYmxlSW5kZXgpKQogewog
ICAgIHJldHVybiB0YWJsZVNpemUoaW5zdGFuY2UsIHRhYmxlSW5kZXgpOwogfQogCi1KU0NfREVG
SU5FX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTWVtb3J5QXRvbWljV2FpdDMyLCBp
bnQzMl90LCAoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgYmFzZSwg
dW5zaWduZWQgb2Zmc2V0LCBpbnQzMl90IHZhbHVlLCBpbnQ2NF90IHRpbWVvdXRJbk5hbm9zZWNv
bmRzKSkKK0pTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25NZW1vcnlB
dG9taWNXYWl0MzIsIGludDMyX3QsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGJhc2Us
IHVuc2lnbmVkIG9mZnNldCwgaW50MzJfdCB2YWx1ZSwgaW50NjRfdCB0aW1lb3V0SW5OYW5vc2Vj
b25kcykpCiB7CiAgICAgcmV0dXJuIG1lbW9yeUF0b21pY1dhaXQzMihpbnN0YW5jZSwgYmFzZSwg
b2Zmc2V0LCB2YWx1ZSwgdGltZW91dEluTmFub3NlY29uZHMpOwogfQogCi1KU0NfREVGSU5FX05P
RVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTWVtb3J5QXRvbWljV2FpdDY0LCBpbnQzMl90
LCAoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgYmFzZSwgdW5zaWdu
ZWQgb2Zmc2V0LCBpbnQ2NF90IHZhbHVlLCBpbnQ2NF90IHRpbWVvdXRJbk5hbm9zZWNvbmRzKSkK
K0pTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25NZW1vcnlBdG9taWNX
YWl0NjQsIGludDMyX3QsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGJhc2UsIHVuc2ln
bmVkIG9mZnNldCwgaW50NjRfdCB2YWx1ZSwgaW50NjRfdCB0aW1lb3V0SW5OYW5vc2Vjb25kcykp
CiB7CiAgICAgcmV0dXJuIG1lbW9yeUF0b21pY1dhaXQ2NChpbnN0YW5jZSwgYmFzZSwgb2Zmc2V0
LCB2YWx1ZSwgdGltZW91dEluTmFub3NlY29uZHMpOwogfQogCi1KU0NfREVGSU5FX05PRVhDRVBU
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTWVtb3J5QXRvbWljTm90aWZ5LCBpbnQzMl90LCAoSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgYmFzZSwgdW5zaWduZWQgb2Zm
c2V0LCBpbnQzMl90IGNvdW50VmFsdWUpKQorSlNDX0RFRklORV9OT0VYQ0VQVF9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbk1lbW9yeUF0b21pY05vdGlmeSwgaW50MzJfdCwgKEluc3RhbmNlKiBpbnN0
YW5jZSwgdW5zaWduZWQgYmFzZSwgdW5zaWduZWQgb2Zmc2V0LCBpbnQzMl90IGNvdW50VmFsdWUp
KQogewogICAgIHJldHVybiBtZW1vcnlBdG9taWNOb3RpZnkoaW5zdGFuY2UsIGJhc2UsIG9mZnNl
dCwgY291bnRWYWx1ZSk7CiB9CiAKLUpTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElPTihv
cGVyYXRpb25XYXNtTWVtb3J5SW5pdCwgVUNQVVN0cmljdEludDMyLCAoSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgZGF0YVNlZ21lbnRJbmRleCwgdWludDMyX3QgZHN0
QWRkcmVzcywgdWludDMyX3Qgc3JjQWRkcmVzcywgdWludDMyX3QgbGVuZ3RoKSkKK0pTQ19ERUZJ
TkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtTWVtb3J5SW5pdCwgVUNQVVN0
cmljdEludDMyLCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCBkYXRhU2VnbWVudEluZGV4
LCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJfdCBzcmNBZGRyZXNzLCB1aW50MzJfdCBsZW5n
dGgpKQogewogICAgIHJldHVybiB0b1VDUFVTdHJpY3RJbnQzMihtZW1vcnlJbml0KGluc3RhbmNl
LCBkYXRhU2VnbWVudEluZGV4LCBkc3RBZGRyZXNzLCBzcmNBZGRyZXNzLCBsZW5ndGgpKTsKIH0K
IAotSlNDX0RFRklORV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21EYXRhRHJv
cCwgdm9pZCwgKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGRhdGFT
ZWdtZW50SW5kZXgpKQorSlNDX0RFRklORV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bldhc21EYXRhRHJvcCwgdm9pZCwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgZGF0YVNl
Z21lbnRJbmRleCkpCiB7CiAgICAgcmV0dXJuIGRhdGFEcm9wKGluc3RhbmNlLCBkYXRhU2VnbWVu
dEluZGV4KTsKIH0KIAotSlNDX0RFRklORV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bldhc21UaHJvdywgdm9pZCosIChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCB1bnNp
Z25lZCBleGNlcHRpb25JbmRleCwgdWludDY0X3QqIGFyZ3VtZW50cykpCitKU0NfREVGSU5FX05P
RVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRocm93LCB2b2lkKiwgKEluc3RhbmNl
KiBpbnN0YW5jZSwgdW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIHVpbnQ2NF90KiBhcmd1bWVudHMp
KQogewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9XQVNNX0NBTExfRlJBTUUo
aW5zdGFuY2UpOwogICAgIFZNJiB2bSA9IGluc3RhbmNlLT52bSgpOwpAQCAtOTkxLDcgKzk5Myw3
IEBAIEpTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGhyb3cs
IHZvaWQqLCAoSlNXZWJBc3NlbWJseUluc3RhCiAgICAgcmV0dXJuIHZtLnRhcmdldE1hY2hpbmVQ
Q0ZvclRocm93OwogfQogCi1KU0NfREVGSU5FX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uV2FzbVJldGhyb3csIHZvaWQqLCAoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwg
RW5jb2RlZEpTVmFsdWUgdGhyb3duVmFsdWUpKQorSlNDX0RFRklORV9OT0VYQ0VQVF9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbldhc21SZXRocm93LCB2b2lkKiwgKEluc3RhbmNlKiBpbnN0YW5jZSwg
RW5jb2RlZEpTVmFsdWUgdGhyb3duVmFsdWUpKQogewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gREVDTEFSRV9XQVNNX0NBTExfRlJBTUUoaW5zdGFuY2UpOwogICAgIFZNJiB2bSA9IGluc3Rh
bmNlLT52bSgpOwpAQCAtMTAwOCw3ICsxMDEwLDcgQEAgSlNDX0RFRklORV9OT0VYQ0VQVF9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbldhc21SZXRocm93LCB2b2lkKiwgKEpTV2ViQXNzZW1ibHlJbnMK
ICAgICByZXR1cm4gdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3c7CiB9CiAKLUpTQ19ERUZJTkVf
Tk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVG9KU0V4Y2VwdGlvbiwgdm9pZCos
IChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBXYXNtOjpFeGNlcHRpb25UeXBlIHR5
cGUpKQorSlNDX0RFRklORV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21Ub0pT
RXhjZXB0aW9uLCB2b2lkKiwgKEluc3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6RXhjZXB0aW9uVHlw
ZSB0eXBlKSkKIHsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfV0FTTV9DQUxM
X0ZSQU1FKGluc3RhbmNlKTsKICAgICBWTSYgdm0gPSBpbnN0YW5jZS0+dm0oKTsKQEAgLTEwMzMs
NyArMTAzNSw3IEBAIEpTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25D
cmFzaER1ZVRvT01HU3RhY2tPdmVyZmxvdywgdm9pZCwgKCkpCiB9CiAKICNpZiBVU0UoSlNWQUxV
RTY0KQotSlNDX0RFRklORV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21SZXRy
aWV2ZUFuZENsZWFyRXhjZXB0aW9uSWZDYXRjaGFibGUsIFRocm93bkV4Y2VwdGlvbkluZm8sIChK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKSkKK0pTQ19ERUZJTkVfTk9FWENFUFRfSklU
X09QRVJBVElPTihvcGVyYXRpb25XYXNtUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hh
YmxlLCBUaHJvd25FeGNlcHRpb25JbmZvLCAoSW5zdGFuY2UqIGluc3RhbmNlKSkKIHsKICAgICBW
TSYgdm0gPSBpbnN0YW5jZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKQEAgLTEwNTUsNyArMTA1Nyw3IEBAIEpTQ19ERUZJTkVfTk9FWENFUFRf
SklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0
Y2hhCiB9CiAjZWxzZQogLy8gU2FtZSBhcyBKU1ZBTFVFNjQgdmVyc2lvbiwgYnV0IHJldHVybnMg
dGhyb3duVmFsdWUgb24gc3RhY2sKLUpTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElPTihv
cGVyYXRpb25XYXNtUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlLCB2b2lkKiwg
KEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIEVuY29kZWRKU1ZhbHVlKiB0aHJvd25W
YWx1ZSkpCitKU0NfREVGSU5FX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVJl
dHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYWJsZSwgdm9pZCosIChJbnN0YW5jZSogaW5z
dGFuY2UsIEVuY29kZWRKU1ZhbHVlKiB0aHJvd25WYWx1ZSkpCiB7CiAgICAgVk0mIHZtID0gaW5z
dGFuY2UtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CkBAIC0xMDc3LDcgKzEwNzksNyBAQCBKU0NfREVGSU5FX05PRVhDRVBUX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uV2FzbVJldHJpZXZlQW5kQ2xlYXJFeGNlcHRpb25JZkNhdGNoYQogfQogI2Vu
ZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKLUpTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElP
TihvcGVyYXRpb25XYXNtQXJyYXlOZXcsIEVuY29kZWRKU1ZhbHVlLCAoSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3QgdHlwZUluZGV4LCB1aW50MzJfdCBzaXplLCB1aW50
NjRfdCB2YWx1ZSkpCitKU0NfREVGSU5FX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
V2FzbUFycmF5TmV3LCBFbmNvZGVkSlNWYWx1ZSwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMy
X3QgdHlwZUluZGV4LCB1aW50MzJfdCBzaXplLCB1aW50NjRfdCB2YWx1ZSkpCiB7CiAgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX1dBU01fQ0FMTF9GUkFNRShpbnN0YW5jZSk7CiAg
ICAgVk0mIHZtID0gaW5zdGFuY2UtPnZtKCk7CkBAIC0xMDg1LDcgKzEwODcsNyBAQCBKU0NfREVG
SU5FX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbUFycmF5TmV3LCBFbmNvZGVk
SlNWYWx1ZSwgKEpTV2ViQQogICAgIHJldHVybiBhcnJheU5ldyhpbnN0YW5jZSwgdHlwZUluZGV4
LCBzaXplLCB2YWx1ZSk7CiB9CiAKLUpTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElPTihv
cGVyYXRpb25XYXNtQXJyYXlOZXdWZWN0b3IsIEVuY29kZWRKU1ZhbHVlLCAoSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3QgdHlwZUluZGV4LCB1aW50MzJfdCBzaXplLCB1
aW50NjRfdCBsYW5lMCwgdWludDY0X3QgbGFuZTEpKQorSlNDX0RFRklORV9OT0VYQ0VQVF9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbldhc21BcnJheU5ld1ZlY3RvciwgRW5jb2RlZEpTVmFsdWUsIChJ
bnN0YW5jZSogaW5zdGFuY2UsIHVpbnQzMl90IHR5cGVJbmRleCwgdWludDMyX3Qgc2l6ZSwgdWlu
dDY0X3QgbGFuZTAsIHVpbnQ2NF90IGxhbmUxKSkKIHsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IERFQ0xBUkVfV0FTTV9DQUxMX0ZSQU1FKGluc3RhbmNlKTsKICAgICBWTSYgdm0gPSBpbnN0
YW5jZS0+dm0oKTsKQEAgLTEwOTMsNyArMTA5NSw3IEBAIEpTQ19ERUZJTkVfTk9FWENFUFRfSklU
X09QRVJBVElPTihvcGVyYXRpb25XYXNtQXJyYXlOZXdWZWN0b3IsIEVuY29kZWRKU1ZhbHVlLCAo
CiAgICAgcmV0dXJuIGFycmF5TmV3KGluc3RhbmNlLCB0eXBlSW5kZXgsIHNpemUsIHYxMjhfdCB7
IGxhbmUwLCBsYW5lMSB9KTsKIH0KIAotSlNDX0RFRklORV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbldhc21BcnJheU5ld0RhdGEsIEVuY29kZWRKU1ZhbHVlLCAoSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3QgdHlwZUluZGV4LCB1aW50MzJfdCBkYXRhU2Vn
bWVudEluZGV4LCB1aW50MzJfdCBhcnJheVNpemUsIHVpbnQzMl90IG9mZnNldCkpCitKU0NfREVG
SU5FX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbUFycmF5TmV3RGF0YSwgRW5j
b2RlZEpTVmFsdWUsIChJbnN0YW5jZSogaW5zdGFuY2UsIHVpbnQzMl90IHR5cGVJbmRleCwgdWlu
dDMyX3QgZGF0YVNlZ21lbnRJbmRleCwgdWludDMyX3QgYXJyYXlTaXplLCB1aW50MzJfdCBvZmZz
ZXQpKQogewogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9XQVNNX0NBTExfRlJB
TUUoaW5zdGFuY2UpOwogICAgIFZNJiB2bSA9IGluc3RhbmNlLT52bSgpOwpAQCAtMTEwMSw3ICsx
MTAzLDcgQEAgSlNDX0RFRklORV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21B
cnJheU5ld0RhdGEsIEVuY29kZWRKU1ZhbHVlLCAoSlMKICAgICByZXR1cm4gYXJyYXlOZXdEYXRh
KGluc3RhbmNlLCB0eXBlSW5kZXgsIGRhdGFTZWdtZW50SW5kZXgsIGFycmF5U2l6ZSwgb2Zmc2V0
KTsKIH0KIAotSlNDX0RFRklORV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21B
cnJheU5ld0VsZW0sIEVuY29kZWRKU1ZhbHVlLCAoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0
YW5jZSwgdWludDMyX3QgdHlwZUluZGV4LCB1aW50MzJfdCBlbGVtU2VnbWVudEluZGV4LCB1aW50
MzJfdCBhcnJheVNpemUsIHVpbnQzMl90IG9mZnNldCkpCitKU0NfREVGSU5FX05PRVhDRVBUX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbUFycmF5TmV3RWxlbSwgRW5jb2RlZEpTVmFsdWUsIChJ
bnN0YW5jZSogaW5zdGFuY2UsIHVpbnQzMl90IHR5cGVJbmRleCwgdWludDMyX3QgZWxlbVNlZ21l
bnRJbmRleCwgdWludDMyX3QgYXJyYXlTaXplLCB1aW50MzJfdCBvZmZzZXQpKQogewogICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9XQVNNX0NBTExfRlJBTUUoaW5zdGFuY2UpOwog
ICAgIFZNJiB2bSA9IGluc3RhbmNlLT52bSgpOwpAQCAtMTExMCw3ICsxMTEyLDcgQEAgSlNDX0RF
RklORV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21BcnJheU5ld0VsZW0sIEVu
Y29kZWRKU1ZhbHVlLCAoSlMKICAgICByZXR1cm4gYXJyYXlOZXdFbGVtKGluc3RhbmNlLCB0eXBl
SW5kZXgsIGVsZW1TZWdtZW50SW5kZXgsIGFycmF5U2l6ZSwgb2Zmc2V0KTsKIH0KIAotSlNDX0RF
RklORV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21BcnJheU5ld0VtcHR5LCBF
bmNvZGVkSlNWYWx1ZSwgKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIHVpbnQzMl90
IHR5cGVJbmRleCwgdWludDMyX3Qgc2l6ZSkpCitKU0NfREVGSU5FX05PRVhDRVBUX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uV2FzbUFycmF5TmV3RW1wdHksIEVuY29kZWRKU1ZhbHVlLCAoSW5zdGFu
Y2UqIGluc3RhbmNlLCB1aW50MzJfdCB0eXBlSW5kZXgsIHVpbnQzMl90IHNpemUpKQogewogICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9XQVNNX0NBTExfRlJBTUUoaW5zdGFuY2Up
OwogICAgIFZNJiB2bSA9IGluc3RhbmNlLT52bSgpOwpAQCAtMTE4NCw3ICsxMTg2LDcgQEAgSlND
X0RFRklORV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21BcnJheU5ld0VtcHR5
LCBFbmNvZGVkSlNWYWx1ZSwgKEoKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFycmF5ID8g
YXJyYXkgOiBqc051bGwoKSk7CiB9CiAKLUpTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElP
TihvcGVyYXRpb25XYXNtQXJyYXlHZXQsIEVuY29kZWRKU1ZhbHVlLCAoSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3QgdHlwZUluZGV4LCBFbmNvZGVkSlNWYWx1ZSBhcnJh
eVZhbHVlLCB1aW50MzJfdCBpbmRleCkpCitKU0NfREVGSU5FX05PRVhDRVBUX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uV2FzbUFycmF5R2V0LCBFbmNvZGVkSlNWYWx1ZSwgKEluc3RhbmNlKiBpbnN0
YW5jZSwgdWludDMyX3QgdHlwZUluZGV4LCBFbmNvZGVkSlNWYWx1ZSBhcnJheVZhbHVlLCB1aW50
MzJfdCBpbmRleCkpCiB7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX1dBU01f
Q0FMTF9GUkFNRShpbnN0YW5jZSk7CiAgICAgVk0mIHZtID0gaW5zdGFuY2UtPnZtKCk7CkBAIC0x
MTkyLDcgKzExOTQsNyBAQCBKU0NfREVGSU5FX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uV2FzbUFycmF5R2V0LCBFbmNvZGVkSlNWYWx1ZSwgKEpTV2ViQQogICAgIHJldHVybiBhcnJh
eUdldChpbnN0YW5jZSwgdHlwZUluZGV4LCBhcnJheVZhbHVlLCBpbmRleCk7CiB9CiAKLUpTQ19E
RUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtQXJyYXlTZXQsIHZvaWQs
IChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCB1aW50MzJfdCB0eXBlSW5kZXgsIEVu
Y29kZWRKU1ZhbHVlIGFycmF5VmFsdWUsIHVpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSB2
YWx1ZSkpCitKU0NfREVGSU5FX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbUFy
cmF5U2V0LCB2b2lkLCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1aW50MzJfdCB0eXBlSW5kZXgsIEVu
Y29kZWRKU1ZhbHVlIGFycmF5VmFsdWUsIHVpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSB2
YWx1ZSkpCiB7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX1dBU01fQ0FMTF9G
UkFNRShpbnN0YW5jZSk7CiAgICAgVk0mIHZtID0gaW5zdGFuY2UtPnZtKCk7CkBAIC0xMjAwLDcg
KzEyMDIsNyBAQCBKU0NfREVGSU5FX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2Fz
bUFycmF5U2V0LCB2b2lkLCAoSlNXZWJBc3NlbWJseUlucwogICAgIHJldHVybiBhcnJheVNldChp
bnN0YW5jZSwgdHlwZUluZGV4LCBhcnJheVZhbHVlLCBpbmRleCwgdmFsdWUpOwogfQogCi1KU0Nf
REVGSU5FX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbUFycmF5RmlsbCwgVUNQ
VVN0cmljdEludDMyLCAoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgRW5jb2RlZEpT
VmFsdWUgYXJyYXlWYWx1ZSwgdWludDMyX3Qgb2Zmc2V0LCB1aW50NjRfdCB2YWx1ZSwgdWludDMy
X3Qgc2l6ZSkpCitKU0NfREVGSU5FX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2Fz
bUFycmF5RmlsbCwgVUNQVVN0cmljdEludDMyLCAoSW5zdGFuY2UqIGluc3RhbmNlLCBFbmNvZGVk
SlNWYWx1ZSBhcnJheVZhbHVlLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQ2NF90IHZhbHVlLCB1aW50
MzJfdCBzaXplKSkKIHsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfV0FTTV9D
QUxMX0ZSQU1FKGluc3RhbmNlKTsKICAgICBWTSYgdm0gPSBpbnN0YW5jZS0+dm0oKTsKQEAgLTEy
MDgsNyArMTIxMCw3IEBAIEpTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRp
b25XYXNtQXJyYXlGaWxsLCBVQ1BVU3RyaWN0SW50MzIsIChKU1dlCiAgICAgcmV0dXJuIHRvVUNQ
VVN0cmljdEludDMyKGFycmF5RmlsbChhcnJheVZhbHVlLCBvZmZzZXQsIHZhbHVlLCBzaXplKSk7
CiB9CiAKLUpTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtQXJy
YXlGaWxsVmVjdG9yLCBVQ1BVU3RyaWN0SW50MzIsIChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGlu
c3RhbmNlLCBFbmNvZGVkSlNWYWx1ZSBhcnJheVZhbHVlLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQ2
NF90IGxhbmUwLCB1aW50NjRfdCBsYW5lMSwgdWludDMyX3Qgc2l6ZSkpCitKU0NfREVGSU5FX05P
RVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbUFycmF5RmlsbFZlY3RvciwgVUNQVVN0
cmljdEludDMyLCAoSW5zdGFuY2UqIGluc3RhbmNlLCBFbmNvZGVkSlNWYWx1ZSBhcnJheVZhbHVl
LCB1aW50MzJfdCBvZmZzZXQsIHVpbnQ2NF90IGxhbmUwLCB1aW50NjRfdCBsYW5lMSwgdWludDMy
X3Qgc2l6ZSkpCiB7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX1dBU01fQ0FM
TF9GUkFNRShpbnN0YW5jZSk7CiAgICAgVk0mIHZtID0gaW5zdGFuY2UtPnZtKCk7CkBAIC0xMjE2
LDE3ICsxMjE4LDE3IEBAIEpTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRp
b25XYXNtQXJyYXlGaWxsVmVjdG9yLCBVQ1BVU3RyaWN0SW50MzIsCiAgICAgcmV0dXJuIHRvVUNQ
VVN0cmljdEludDMyKGFycmF5RmlsbChhcnJheVZhbHVlLCBvZmZzZXQsIHYxMjhfdCB7IGxhbmUw
LCBsYW5lMSB9LCBzaXplKSk7CiB9CiAKLUpTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElP
TihvcGVyYXRpb25XYXNtQXJyYXlDb3B5LCBVQ1BVU3RyaWN0SW50MzIsIChKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqIGluc3RhbmNlLCBFbmNvZGVkSlNWYWx1ZSBkc3QsIHVpbnQzMl90IGRzdE9mZnNl
dCwgRW5jb2RlZEpTVmFsdWUgc3JjLCB1aW50MzJfdCBzcmNPZmZzZXQsIHVpbnQzMl90IHNpemUp
KQorSlNDX0RFRklORV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21BcnJheUNv
cHksIFVDUFVTdHJpY3RJbnQzMiwgKEluc3RhbmNlKiBpbnN0YW5jZSwgRW5jb2RlZEpTVmFsdWUg
ZHN0LCB1aW50MzJfdCBkc3RPZmZzZXQsIEVuY29kZWRKU1ZhbHVlIHNyYywgdWludDMyX3Qgc3Jj
T2Zmc2V0LCB1aW50MzJfdCBzaXplKSkKIHsKICAgICByZXR1cm4gdG9VQ1BVU3RyaWN0SW50MzIo
YXJyYXlDb3B5KGluc3RhbmNlLCBkc3QsIGRzdE9mZnNldCwgc3JjLCBzcmNPZmZzZXQsIHNpemUp
KTsKIH0KIAotSlNDX0RFRklORV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21B
cnJheUluaXRFbGVtLCBVQ1BVU3RyaWN0SW50MzIsIChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGlu
c3RhbmNlLCBFbmNvZGVkSlNWYWx1ZSBkc3QsIHVpbnQzMl90IGRzdE9mZnNldCwgdWludDMyX3Qg
c3JjRWxlbWVudEluZGV4LCB1aW50MzJfdCBzcmNPZmZzZXQsIHVpbnQzMl90IHNpemUpKQorSlND
X0RFRklORV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21BcnJheUluaXRFbGVt
LCBVQ1BVU3RyaWN0SW50MzIsIChJbnN0YW5jZSogaW5zdGFuY2UsIEVuY29kZWRKU1ZhbHVlIGRz
dCwgdWludDMyX3QgZHN0T2Zmc2V0LCB1aW50MzJfdCBzcmNFbGVtZW50SW5kZXgsIHVpbnQzMl90
IHNyY09mZnNldCwgdWludDMyX3Qgc2l6ZSkpCiB7CiAgICAgcmV0dXJuIHRvVUNQVVN0cmljdElu
dDMyKGFycmF5SW5pdEVsZW0oaW5zdGFuY2UsIGRzdCwgZHN0T2Zmc2V0LCBzcmNFbGVtZW50SW5k
ZXgsIHNyY09mZnNldCwgc2l6ZSkpOwogfQogCi1KU0NfREVGSU5FX05PRVhDRVBUX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uV2FzbUFycmF5SW5pdERhdGEsIFVDUFVTdHJpY3RJbnQzMiwgKEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIEVuY29kZWRKU1ZhbHVlIGRzdCwgdWludDMyX3Qg
ZHN0T2Zmc2V0LCB1aW50MzJfdCBzcmNEYXRhSW5kZXgsIHVpbnQzMl90IHNyY09mZnNldCwgdWlu
dDMyX3Qgc2l6ZSkpCitKU0NfREVGSU5FX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
V2FzbUFycmF5SW5pdERhdGEsIFVDUFVTdHJpY3RJbnQzMiwgKEluc3RhbmNlKiBpbnN0YW5jZSwg
RW5jb2RlZEpTVmFsdWUgZHN0LCB1aW50MzJfdCBkc3RPZmZzZXQsIHVpbnQzMl90IHNyY0RhdGFJ
bmRleCwgdWludDMyX3Qgc3JjT2Zmc2V0LCB1aW50MzJfdCBzaXplKSkKIHsKICAgICByZXR1cm4g
dG9VQ1BVU3RyaWN0SW50MzIoYXJyYXlJbml0RGF0YShpbnN0YW5jZSwgZHN0LCBkc3RPZmZzZXQs
IHNyY0RhdGFJbmRleCwgc3JjT2Zmc2V0LCBzaXplKSk7CiB9CkBAIC0xMjQyLDcgKzEyNDQsNyBA
QCBKU0NfREVGSU5FX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbUFueUNvbnZl
cnRFeHRlcm4sIEVuY29kZWRKU1ZhbHVlLAogICAgIHJldHVybiBleHRlcm5JbnRlcm5hbGl6ZShy
ZWZlcmVuY2UpOwogfQogCi1KU0NfREVGSU5FX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uV2FzbVJlZlRlc3QsIGludDMyX3QsIChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNl
LCBFbmNvZGVkSlNWYWx1ZSByZWZlcmVuY2UsIHVpbnQzMl90IGFsbG93TnVsbCwgaW50MzJfdCBo
ZWFwVHlwZSwgYm9vbCBzaG91bGROZWdhdGUpKQorSlNDX0RFRklORV9OT0VYQ0VQVF9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbldhc21SZWZUZXN0LCBpbnQzMl90LCAoSW5zdGFuY2UqIGluc3RhbmNl
LCBFbmNvZGVkSlNWYWx1ZSByZWZlcmVuY2UsIHVpbnQzMl90IGFsbG93TnVsbCwgaW50MzJfdCBo
ZWFwVHlwZSwgYm9vbCBzaG91bGROZWdhdGUpKQogewogICAgIFdhc206OlR5cGVJbmRleCB0eXBl
SW5kZXg7CiAgICAgaWYgKFdhc206OnR5cGVJbmRleElzVHlwZShzdGF0aWNfY2FzdDxXYXNtOjpU
eXBlSW5kZXg+KGhlYXBUeXBlKSkpCkBAIC0xMjU1LDcgKzEyNTcsNyBAQCBKU0NfREVGSU5FX05P
RVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVJlZlRlc3QsIGludDMyX3QsIChKU1dl
YkFzc2VtYmx5SQogICAgIHJldHVybiBXYXNtOjpyZWZDYXN0KHJlZmVyZW5jZSwgc3RhdGljX2Nh
c3Q8Ym9vbD4oYWxsb3dOdWxsKSwgdHlwZUluZGV4KSA/IHRydXRoIDogZmFsc2l0eTsKIH0KIAot
SlNDX0RFRklORV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21SZWZDYXN0LCBF
bmNvZGVkSlNWYWx1ZSwgKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIEVuY29kZWRK
U1ZhbHVlIHJlZmVyZW5jZSwgdWludDMyX3QgYWxsb3dOdWxsLCBpbnQzMl90IGhlYXBUeXBlKSkK
K0pTQ19ERUZJTkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtUmVmQ2FzdCwg
RW5jb2RlZEpTVmFsdWUsIChJbnN0YW5jZSogaW5zdGFuY2UsIEVuY29kZWRKU1ZhbHVlIHJlZmVy
ZW5jZSwgdWludDMyX3QgYWxsb3dOdWxsLCBpbnQzMl90IGhlYXBUeXBlKSkKIHsKICAgICBXYXNt
OjpUeXBlSW5kZXggdHlwZUluZGV4OwogICAgIGlmIChXYXNtOjp0eXBlSW5kZXhJc1R5cGUoc3Rh
dGljX2Nhc3Q8V2FzbTo6VHlwZUluZGV4PihoZWFwVHlwZSkpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmgKaW5kZXggMDM3ZWU4NTNhOGVhLi5kYWU1MzA0ZTAw
YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25z
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuaApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NSw2
MyArNDUsNjQgQEAgY2xhc3MgQ29udGV4dDsKIH0gLy8gbmFtZXNwYWNlIEpTQzo6UHJvYmUKIG5h
bWVzcGFjZSBXYXNtIHsKIAorY2xhc3MgSW5zdGFuY2U7CiBjbGFzcyBUeXBlRGVmaW5pdGlvbjsK
IAogdHlwZWRlZiBpbnQ2NF90IEVuY29kZWRXYXNtVmFsdWU7CiAKICNpZiBFTkFCTEUoV0VCQVNT
RU1CTFlfT01HSklUKQogdm9pZCBsb2FkVmFsdWVzSW50b0J1ZmZlcihQcm9iZTo6Q29udGV4dCYs
IGNvbnN0IFN0YWNrTWFwJiwgdWludDY0X3QqIGJ1ZmZlciwgU2F2ZWRGUFdpZHRoKTsKLUpTQ19E
RUNMQVJFX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRyaWdnZXJUaWVyVXBO
b3csIHZvaWQsIChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4
KSk7CitKU0NfREVDTEFSRV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21Ucmln
Z2VyVGllclVwTm93LCB2b2lkLCAoSW5zdGFuY2UqLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KSk7
CiAjZW5kaWYKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfT01HSklUKSB8fCBFTkFCTEUoV0VCQVNT
RU1CTFlfQkJRSklUKQogSlNDX0RFQ0xBUkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRp
b25XYXNtVHJpZ2dlck9TUkVudHJ5Tm93LCB2b2lkLCAoUHJvYmU6OkNvbnRleHQmKSk7CiBKU0Nf
REVDTEFSRV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21Mb29wT1NSRW50ZXJC
QlFKSVQsIHZvaWQsIChQcm9iZTo6Q29udGV4dCYpKTsKICNlbmRpZgotSlNDX0RFQ0xBUkVfTk9F
WENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVW53aW5kLCB2b2lkKiwgKEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSopKTsKK0pTQ19ERUNMQVJFX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uV2FzbVVud2luZCwgdm9pZCosIChJbnN0YW5jZSopKTsKIAotSlNDX0RFQ0xBUkVfTk9F
WENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25Db252ZXJ0VG9JNjQsIGludDY0X3QsIChKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqLCBFbmNvZGVkSlNWYWx1ZSkpOwotSlNDX0RFQ0xBUkVfTk9FWENF
UFRfSklUX09QRVJBVElPTihvcGVyYXRpb25Db252ZXJ0VG9GNjQsIGRvdWJsZSwgKEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSosIEVuY29kZWRKU1ZhbHVlKSk7Ci1KU0NfREVDTEFSRV9OT0VYQ0VQVF9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNvbnZlcnRUb0kzMiwgaW50MzJfdCwgKEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSosIEVuY29kZWRKU1ZhbHVlKSk7Ci1KU0NfREVDTEFSRV9OT0VYQ0VQVF9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbkNvbnZlcnRUb0YzMiwgZmxvYXQsIChKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqLCBFbmNvZGVkSlNWYWx1ZSkpOwotSlNDX0RFQ0xBUkVfTk9FWENFUFRfSklUX09QRVJB
VElPTihvcGVyYXRpb25Db252ZXJ0VG9GdW5jcmVmLCBFbmNvZGVkSlNWYWx1ZSwgKEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSosIGNvbnN0IFR5cGVEZWZpbml0aW9uKiwgRW5jb2RlZEpTVmFsdWUpKTsK
LUpTQ19ERUNMQVJFX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ29udmVydFRvQW55
cmVmLCBFbmNvZGVkSlNWYWx1ZSwgKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIGNvbnN0IFR5cGVE
ZWZpbml0aW9uKiwgRW5jb2RlZEpTVmFsdWUpKTsKLUpTQ19ERUNMQVJFX05PRVhDRVBUX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uQ29udmVydFRvQmlnSW50LCBFbmNvZGVkSlNWYWx1ZSwgKEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSosIEVuY29kZWRXYXNtVmFsdWUpKTsKK0pTQ19ERUNMQVJFX05PRVhD
RVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ29udmVydFRvSTY0LCBpbnQ2NF90LCAoSW5zdGFu
Y2UqLCBFbmNvZGVkSlNWYWx1ZSkpOworSlNDX0RFQ0xBUkVfTk9FWENFUFRfSklUX09QRVJBVElP
TihvcGVyYXRpb25Db252ZXJ0VG9GNjQsIGRvdWJsZSwgKEluc3RhbmNlKiwgRW5jb2RlZEpTVmFs
dWUpKTsKK0pTQ19ERUNMQVJFX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ29udmVy
dFRvSTMyLCBpbnQzMl90LCAoSW5zdGFuY2UqLCBFbmNvZGVkSlNWYWx1ZSkpOworSlNDX0RFQ0xB
UkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25Db252ZXJ0VG9GMzIsIGZsb2F0LCAo
SW5zdGFuY2UqLCBFbmNvZGVkSlNWYWx1ZSkpOworSlNDX0RFQ0xBUkVfTk9FWENFUFRfSklUX09Q
RVJBVElPTihvcGVyYXRpb25Db252ZXJ0VG9GdW5jcmVmLCBFbmNvZGVkSlNWYWx1ZSwgKEluc3Rh
bmNlKiwgY29uc3QgVHlwZURlZmluaXRpb24qLCBFbmNvZGVkSlNWYWx1ZSkpOworSlNDX0RFQ0xB
UkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25Db252ZXJ0VG9BbnlyZWYsIEVuY29k
ZWRKU1ZhbHVlLCAoSW5zdGFuY2UqLCBjb25zdCBUeXBlRGVmaW5pdGlvbiosIEVuY29kZWRKU1Zh
bHVlKSk7CitKU0NfREVDTEFSRV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNvbnZl
cnRUb0JpZ0ludCwgRW5jb2RlZEpTVmFsdWUsIChJbnN0YW5jZSosIEVuY29kZWRXYXNtVmFsdWUp
KTsKIAotSlNDX0RFQ0xBUkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25JdGVyYXRl
UmVzdWx0cywgdm9pZCwgKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIGNvbnN0IFR5cGVEZWZpbml0
aW9uKiwgRW5jb2RlZEpTVmFsdWUsIHVpbnQ2NF90KiwgdWludDY0X3QqKSk7Ci1KU0NfREVDTEFS
RV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkFsbG9jYXRlUmVzdWx0c0FycmF5LCBK
U0FycmF5KiwgKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIGNvbnN0IFR5cGVEZWZpbml0aW9uKiwg
SW5kZXhpbmdUeXBlLCBKU1ZhbHVlKikpOworSlNDX0RFQ0xBUkVfTk9FWENFUFRfSklUX09QRVJB
VElPTihvcGVyYXRpb25JdGVyYXRlUmVzdWx0cywgdm9pZCwgKEluc3RhbmNlKiwgY29uc3QgVHlw
ZURlZmluaXRpb24qLCBFbmNvZGVkSlNWYWx1ZSwgdWludDY0X3QqLCB1aW50NjRfdCopKTsKK0pT
Q19ERUNMQVJFX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQWxsb2NhdGVSZXN1bHRz
QXJyYXksIEpTQXJyYXkqLCAoV2FzbTo6SW5zdGFuY2UqLCBjb25zdCBUeXBlRGVmaW5pdGlvbios
IEluZGV4aW5nVHlwZSwgSlNWYWx1ZSopKTsKIAogSlNDX0RFQ0xBUkVfTk9FWENFUFRfSklUX09Q
RVJBVElPTihvcGVyYXRpb25XYXNtV3JpdGVCYXJyaWVyU2xvd1BhdGgsIHZvaWQsIChKU0NlbGwq
LCBWTSopKTsKIEpTQ19ERUNMQVJFX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUG9w
Y291bnQzMiwgdWludDMyX3QsIChpbnQzMl90KSk7CiBKU0NfREVDTEFSRV9OT0VYQ0VQVF9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblBvcGNvdW50NjQsIHVpbnQ2NF90LCAoaW50NjRfdCkpOwotSlND
X0RFQ0xBUkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25Hcm93TWVtb3J5LCBpbnQz
Ml90LCAoSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgaW50MzJfdCkpOwotSlNDX0RFQ0xBUkVfTk9F
WENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtTWVtb3J5RmlsbCwgVUNQVVN0cmljdElu
dDMyLCAoSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgdWludDMyX3QgZHN0QWRkcmVzcywgdWludDMy
X3QgdGFyZ2V0VmFsdWUsIHVpbnQzMl90IGNvdW50KSk7Ci1KU0NfREVDTEFSRV9OT0VYQ0VQVF9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21NZW1vcnlDb3B5LCBVQ1BVU3RyaWN0SW50MzIsIChK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqLCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJfdCBzcmNB
ZGRyZXNzLCB1aW50MzJfdCBjb3VudCkpOwotCi1KU0NfREVDTEFSRV9OT0VYQ0VQVF9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbkdldFdhc21UYWJsZUVsZW1lbnQsIEVuY29kZWRKU1ZhbHVlLCAoSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiwgdW5zaWduZWQsIGludDMyX3QpKTsKLUpTQ19ERUNMQVJFX05P
RVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU2V0V2FzbVRhYmxlRWxlbWVudCwgVUNQVVN0
cmljdEludDMyLCAoSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgdW5zaWduZWQsIHVpbnQzMl90LCBF
bmNvZGVkSlNWYWx1ZSBlbmNWYWx1ZSkpOwotSlNDX0RFQ0xBUkVfTk9FWENFUFRfSklUX09QRVJB
VElPTihvcGVyYXRpb25XYXNtUmVmRnVuYywgRW5jb2RlZEpTVmFsdWUsIChKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqLCB1aW50MzJfdCkpOwotSlNDX0RFQ0xBUkVfTk9FWENFUFRfSklUX09QRVJBVElP
TihvcGVyYXRpb25XYXNtVGFibGVJbml0LCBVQ1BVU3RyaWN0SW50MzIsIChKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqLCB1bnNpZ25lZCBlbGVtZW50SW5kZXgsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIHVp
bnQzMl90IGRzdE9mZnNldCwgdWludDMyX3Qgc3JjT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpKTsK
LUpTQ19ERUNMQVJFX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbUVsZW1Ecm9w
LCB2b2lkLCAoSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgdW5zaWduZWQgZWxlbWVudEluZGV4KSk7
Ci1KU0NfREVDTEFSRV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21UYWJsZUdy
b3csIGludDMyX3QsIChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCB1bnNpZ25lZCwgRW5jb2RlZEpT
VmFsdWUgZmlsbCwgdWludDMyX3QgZGVsdGEpKTsKLUpTQ19ERUNMQVJFX05PRVhDRVBUX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlRmlsbCwgVUNQVVN0cmljdEludDMyLCAoSlNXZWJB
c3NlbWJseUluc3RhbmNlKiwgdW5zaWduZWQsIHVpbnQzMl90IG9mZnNldCwgRW5jb2RlZEpTVmFs
dWUgZmlsbCwgdWludDMyX3QgY291bnQpKTsKLUpTQ19ERUNMQVJFX05PRVhDRVBUX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlQ29weSwgVUNQVVN0cmljdEludDMyLCAoSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiwgdW5zaWduZWQgZHN0VGFibGVJbmRleCwgdW5zaWduZWQgc3JjVGFibGVJ
bmRleCwgaW50MzJfdCBkc3RPZmZzZXQsIGludDMyX3Qgc3JjT2Zmc2V0LCBpbnQzMl90IGxlbmd0
aCkpOwotSlNDX0RFQ0xBUkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRXYXNt
VGFibGVTaXplLCBpbnQzMl90LCAoSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgdW5zaWduZWQpKTsK
LQotSlNDX0RFQ0xBUkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25NZW1vcnlBdG9t
aWNXYWl0MzIsIGludDMyX3QsIChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCB1bnNp
Z25lZCBiYXNlLCB1bnNpZ25lZCBvZmZzZXQsIGludDMyX3QgdmFsdWUsIGludDY0X3QgdGltZW91
dCkpOwotSlNDX0RFQ0xBUkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25NZW1vcnlB
dG9taWNXYWl0NjQsIGludDMyX3QsIChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCB1
bnNpZ25lZCBiYXNlLCB1bnNpZ25lZCBvZmZzZXQsIGludDY0X3QgdmFsdWUsIGludDY0X3QgdGlt
ZW91dCkpOwotSlNDX0RFQ0xBUkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25NZW1v
cnlBdG9taWNOb3RpZnksIGludDMyX3QsIChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCB1bnNpZ25l
ZCwgdW5zaWduZWQsIGludDMyX3QpKTsKLUpTQ19ERUNMQVJFX05PRVhDRVBUX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uV2FzbU1lbW9yeUluaXQsIFVDUFVTdHJpY3RJbnQzMiwgKEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSosIHVuc2lnbmVkIGRhdGFTZWdtZW50SW5kZXgsIHVpbnQzMl90IGRzdEFkZHJl
c3MsIHVpbnQzMl90IHNyY0FkZHJlc3MsIHVpbnQzMl90IGxlbmd0aCkpOwotSlNDX0RFQ0xBUkVf
Tk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtRGF0YURyb3AsIHZvaWQsIChKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqLCB1bnNpZ25lZCBkYXRhU2VnbWVudEluZGV4KSk7Ci0KLUpTQ19E
RUNMQVJFX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVN0cnVjdE5ldywgRW5j
b2RlZEpTVmFsdWUsIChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCB1aW50MzJfdCwgYm9vbCwgdWlu
dDY0X3QqKSk7Ci1KU0NfREVDTEFSRV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldh
c21TdHJ1Y3ROZXdFbXB0eSwgRW5jb2RlZEpTVmFsdWUsIChKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
LCB1aW50MzJfdCkpOworSlNDX0RFQ0xBUkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRp
b25Hcm93TWVtb3J5LCBpbnQzMl90LCAoSW5zdGFuY2UqLCBpbnQzMl90KSk7CitKU0NfREVDTEFS
RV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21NZW1vcnlGaWxsLCBVQ1BVU3Ry
aWN0SW50MzIsIChJbnN0YW5jZSosIHVpbnQzMl90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHRhcmdl
dFZhbHVlLCB1aW50MzJfdCBjb3VudCkpOworSlNDX0RFQ0xBUkVfTk9FWENFUFRfSklUX09QRVJB
VElPTihvcGVyYXRpb25XYXNtTWVtb3J5Q29weSwgVUNQVVN0cmljdEludDMyLCAoSW5zdGFuY2Uq
LCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1aW50MzJfdCBzcmNBZGRyZXNzLCB1aW50MzJfdCBjb3Vu
dCkpOworCitKU0NfREVDTEFSRV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFdh
c21UYWJsZUVsZW1lbnQsIEVuY29kZWRKU1ZhbHVlLCAoSW5zdGFuY2UqLCB1bnNpZ25lZCwgaW50
MzJfdCkpOworSlNDX0RFQ0xBUkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25TZXRX
YXNtVGFibGVFbGVtZW50LCBVQ1BVU3RyaWN0SW50MzIsIChJbnN0YW5jZSosIHVuc2lnbmVkLCB1
aW50MzJfdCwgRW5jb2RlZEpTVmFsdWUgZW5jVmFsdWUpKTsKK0pTQ19ERUNMQVJFX05PRVhDRVBU
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVJlZkZ1bmMsIEVuY29kZWRKU1ZhbHVlLCAoSW5z
dGFuY2UqLCB1aW50MzJfdCkpOworSlNDX0RFQ0xBUkVfTk9FWENFUFRfSklUX09QRVJBVElPTihv
cGVyYXRpb25XYXNtVGFibGVJbml0LCBVQ1BVU3RyaWN0SW50MzIsIChJbnN0YW5jZSosIHVuc2ln
bmVkIGVsZW1lbnRJbmRleCwgdW5zaWduZWQgdGFibGVJbmRleCwgdWludDMyX3QgZHN0T2Zmc2V0
LCB1aW50MzJfdCBzcmNPZmZzZXQsIHVpbnQzMl90IGxlbmd0aCkpOworSlNDX0RFQ0xBUkVfTk9F
WENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtRWxlbURyb3AsIHZvaWQsIChJbnN0YW5j
ZSosIHVuc2lnbmVkIGVsZW1lbnRJbmRleCkpOworSlNDX0RFQ0xBUkVfTk9FWENFUFRfSklUX09Q
RVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVHcm93LCBpbnQzMl90LCAoSW5zdGFuY2UqLCB1bnNp
Z25lZCwgRW5jb2RlZEpTVmFsdWUgZmlsbCwgdWludDMyX3QgZGVsdGEpKTsKK0pTQ19ERUNMQVJF
X05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbVRhYmxlRmlsbCwgVUNQVVN0cmlj
dEludDMyLCAoSW5zdGFuY2UqLCB1bnNpZ25lZCwgdWludDMyX3Qgb2Zmc2V0LCBFbmNvZGVkSlNW
YWx1ZSBmaWxsLCB1aW50MzJfdCBjb3VudCkpOworSlNDX0RFQ0xBUkVfTk9FWENFUFRfSklUX09Q
RVJBVElPTihvcGVyYXRpb25XYXNtVGFibGVDb3B5LCBVQ1BVU3RyaWN0SW50MzIsIChJbnN0YW5j
ZSosIHVuc2lnbmVkIGRzdFRhYmxlSW5kZXgsIHVuc2lnbmVkIHNyY1RhYmxlSW5kZXgsIGludDMy
X3QgZHN0T2Zmc2V0LCBpbnQzMl90IHNyY09mZnNldCwgaW50MzJfdCBsZW5ndGgpKTsKK0pTQ19E
RUNMQVJFX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0V2FzbVRhYmxlU2l6ZSwg
aW50MzJfdCwgKEluc3RhbmNlKiwgdW5zaWduZWQpKTsKKworSlNDX0RFQ0xBUkVfTk9FWENFUFRf
SklUX09QRVJBVElPTihvcGVyYXRpb25NZW1vcnlBdG9taWNXYWl0MzIsIGludDMyX3QsIChJbnN0
YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGJhc2UsIHVuc2lnbmVkIG9mZnNldCwgaW50MzJfdCB2
YWx1ZSwgaW50NjRfdCB0aW1lb3V0KSk7CitKU0NfREVDTEFSRV9OT0VYQ0VQVF9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbk1lbW9yeUF0b21pY1dhaXQ2NCwgaW50MzJfdCwgKEluc3RhbmNlKiBpbnN0
YW5jZSwgdW5zaWduZWQgYmFzZSwgdW5zaWduZWQgb2Zmc2V0LCBpbnQ2NF90IHZhbHVlLCBpbnQ2
NF90IHRpbWVvdXQpKTsKK0pTQ19ERUNMQVJFX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uTWVtb3J5QXRvbWljTm90aWZ5LCBpbnQzMl90LCAoSW5zdGFuY2UqLCB1bnNpZ25lZCwgdW5z
aWduZWQsIGludDMyX3QpKTsKK0pTQ19ERUNMQVJFX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uV2FzbU1lbW9yeUluaXQsIFVDUFVTdHJpY3RJbnQzMiwgKEluc3RhbmNlKiwgdW5zaWdu
ZWQgZGF0YVNlZ21lbnRJbmRleCwgdWludDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3Qgc3JjQWRk
cmVzcywgdWludDMyX3QgbGVuZ3RoKSk7CitKU0NfREVDTEFSRV9OT0VYQ0VQVF9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbldhc21EYXRhRHJvcCwgdm9pZCwgKEluc3RhbmNlKiwgdW5zaWduZWQgZGF0
YVNlZ21lbnRJbmRleCkpOworCitKU0NfREVDTEFSRV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbldhc21TdHJ1Y3ROZXcsIEVuY29kZWRKU1ZhbHVlLCAoSW5zdGFuY2UqLCB1aW50MzJf
dCwgYm9vbCwgdWludDY0X3QqKSk7CitKU0NfREVDTEFSRV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbldhc21TdHJ1Y3ROZXdFbXB0eSwgRW5jb2RlZEpTVmFsdWUsIChJbnN0YW5jZSos
IHVpbnQzMl90KSk7CiBKU0NfREVDTEFSRV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bldhc21TdHJ1Y3RHZXQsIEVuY29kZWRKU1ZhbHVlLCAoRW5jb2RlZEpTVmFsdWUsIHVpbnQzMl90
KSk7Ci1KU0NfREVDTEFSRV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21TdHJ1
Y3RTZXQsIHZvaWQsIChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBFbmNvZGVkSlNWYWx1ZSwgdWlu
dDMyX3QsIEVuY29kZWRKU1ZhbHVlKSk7CitKU0NfREVDTEFSRV9OT0VYQ0VQVF9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbldhc21TdHJ1Y3RTZXQsIHZvaWQsIChJbnN0YW5jZSosIEVuY29kZWRKU1Zh
bHVlLCB1aW50MzJfdCwgRW5jb2RlZEpTVmFsdWUpKTsKIAotSlNDX0RFQ0xBUkVfTk9FWENFUFRf
SklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGhyb3csIHZvaWQqLCAoSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiwgdW5zaWduZWQgZXhjZXB0aW9uSW5kZXgsIHVpbnQ2NF90KikpOwotSlNDX0RFQ0xB
UkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtUmV0aHJvdywgdm9pZCosIChK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBFbmNvZGVkSlNWYWx1ZSB0aHJvd25WYWx1ZSkpOworSlND
X0RFQ0xBUkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVGhyb3csIHZvaWQq
LCAoSW5zdGFuY2UqLCB1bnNpZ25lZCBleGNlcHRpb25JbmRleCwgdWludDY0X3QqKSk7CitKU0Nf
REVDTEFSRV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21SZXRocm93LCB2b2lk
KiwgKEluc3RhbmNlKiwgRW5jb2RlZEpTVmFsdWUgdGhyb3duVmFsdWUpKTsKIAotSlNDX0RFQ0xB
UkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtVG9KU0V4Y2VwdGlvbiwgdm9p
ZCosIChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBXYXNtOjpFeGNlcHRpb25UeXBlKSk7CitKU0Nf
REVDTEFSRV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9u
LCB2b2lkKiwgKEluc3RhbmNlKiwgV2FzbTo6RXhjZXB0aW9uVHlwZSkpOwogSlNDX0RFQ0xBUkVf
Tk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25DcmFzaER1ZVRvQkJRU3RhY2tPdmVyZmxv
dywgdm9pZCwgKCkpOwogSlNDX0RFQ0xBUkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRp
b25DcmFzaER1ZVRvT01HU3RhY2tPdmVyZmxvdywgdm9pZCwgKCkpOwogCkBAIC0xMTAsMzIgKzEx
MSwzMiBAQCBzdHJ1Y3QgVGhyb3duRXhjZXB0aW9uSW5mbyB7CiAgICAgdm9pZCogcGF5bG9hZDsK
IH07CiAKLUpTQ19ERUNMQVJFX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbUFy
cmF5TmV3LCBFbmNvZGVkSlNWYWx1ZSwgKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2Us
IHVpbnQzMl90IHR5cGVJbmRleCwgdWludDMyX3Qgc2l6ZSwgdWludDY0X3QgdmFsdWUpKTsKLUpT
Q19ERUNMQVJFX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbUFycmF5TmV3VmVj
dG9yLCBFbmNvZGVkSlNWYWx1ZSwgKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIHVp
bnQzMl90IHR5cGVJbmRleCwgdWludDMyX3Qgc2l6ZSwgdWludDY0X3QgbGFuZTAsIHVpbnQ2NF90
IGxhbmUxKSk7Ci1KU0NfREVDTEFSRV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldh
c21BcnJheU5ld0RhdGEsIEVuY29kZWRKU1ZhbHVlLCAoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBp
bnN0YW5jZSwgdWludDMyX3QgdHlwZUluZGV4LCB1aW50MzJfdCBkYXRhU2VnbWVudEluZGV4LCB1
aW50MzJfdCBhcnJheVNpemUsIHVpbnQzMl90IG9mZnNldCkpOwotSlNDX0RFQ0xBUkVfTk9FWENF
UFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtQXJyYXlOZXdFbGVtLCBFbmNvZGVkSlNWYWx1
ZSwgKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIHVpbnQzMl90IHR5cGVJbmRleCwg
dWludDMyX3QgZWxlbVNlZ21lbnRJbmRleCwgdWludDMyX3QgYXJyYXlTaXplLCB1aW50MzJfdCBv
ZmZzZXQpKTsKLUpTQ19ERUNMQVJFX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2Fz
bUFycmF5TmV3RW1wdHksIEVuY29kZWRKU1ZhbHVlLCAoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBp
bnN0YW5jZSwgdWludDMyX3QgdHlwZUluZGV4LCB1aW50MzJfdCBzaXplKSk7Ci1KU0NfREVDTEFS
RV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21BcnJheUdldCwgRW5jb2RlZEpT
VmFsdWUsIChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCB1aW50MzJfdCB0eXBlSW5k
ZXgsIEVuY29kZWRKU1ZhbHVlIGVuY1ZhbHVlLCB1aW50MzJfdCBpbmRleCkpOwotSlNDX0RFQ0xB
UkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtQXJyYXlTZXQsIHZvaWQsIChK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCB1aW50MzJfdCB0eXBlSW5kZXgsIEVuY29k
ZWRKU1ZhbHVlIGVuY1ZhbHVlLCB1aW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgdmFsdWUp
KTsKLUpTQ19ERUNMQVJFX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbUFycmF5
RmlsbCwgVUNQVVN0cmljdEludDMyLCAoSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgRW5jb2RlZEpT
VmFsdWUsIHVpbnQzMl90LCB1aW50NjRfdCwgdWludDMyX3QpKTsKLUpTQ19ERUNMQVJFX05PRVhD
RVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbUFycmF5RmlsbFZlY3RvciwgVUNQVVN0cmlj
dEludDMyLCAoSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgRW5jb2RlZEpTVmFsdWUsIHVpbnQzMl90
LCB1aW50NjRfdCwgdWludDY0X3QsIHVpbnQzMl90KSk7Ci1KU0NfREVDTEFSRV9OT0VYQ0VQVF9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21BcnJheUNvcHksIFVDUFVTdHJpY3RJbnQzMiwgKEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSosIEVuY29kZWRKU1ZhbHVlLCB1aW50MzJfdCwgRW5jb2RlZEpT
VmFsdWUsIHVpbnQzMl90LCB1aW50MzJfdCkpOwotSlNDX0RFQ0xBUkVfTk9FWENFUFRfSklUX09Q
RVJBVElPTihvcGVyYXRpb25XYXNtQXJyYXlJbml0RWxlbSwgVUNQVVN0cmljdEludDMyLCAoSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiwgRW5jb2RlZEpTVmFsdWUsIHVpbnQzMl90LCB1aW50MzJfdCwg
dWludDMyX3QsIHVpbnQzMl90KSk7Ci1KU0NfREVDTEFSRV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbldhc21BcnJheUluaXREYXRhLCBVQ1BVU3RyaWN0SW50MzIsIChKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqLCBFbmNvZGVkSlNWYWx1ZSwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50MzJf
dCwgdWludDMyX3QpKTsKK0pTQ19ERUNMQVJFX05PRVhDRVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uV2FzbUFycmF5TmV3LCBFbmNvZGVkSlNWYWx1ZSwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdWlu
dDMyX3QgdHlwZUluZGV4LCB1aW50MzJfdCBzaXplLCB1aW50NjRfdCB2YWx1ZSkpOworSlNDX0RF
Q0xBUkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtQXJyYXlOZXdWZWN0b3Is
IEVuY29kZWRKU1ZhbHVlLCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1aW50MzJfdCB0eXBlSW5kZXgs
IHVpbnQzMl90IHNpemUsIHVpbnQ2NF90IGxhbmUwLCB1aW50NjRfdCBsYW5lMSkpOworSlNDX0RF
Q0xBUkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtQXJyYXlOZXdEYXRhLCBF
bmNvZGVkSlNWYWx1ZSwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3QgdHlwZUluZGV4LCB1
aW50MzJfdCBkYXRhU2VnbWVudEluZGV4LCB1aW50MzJfdCBhcnJheVNpemUsIHVpbnQzMl90IG9m
ZnNldCkpOworSlNDX0RFQ0xBUkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNt
QXJyYXlOZXdFbGVtLCBFbmNvZGVkSlNWYWx1ZSwgKEluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMy
X3QgdHlwZUluZGV4LCB1aW50MzJfdCBlbGVtU2VnbWVudEluZGV4LCB1aW50MzJfdCBhcnJheVNp
emUsIHVpbnQzMl90IG9mZnNldCkpOworSlNDX0RFQ0xBUkVfTk9FWENFUFRfSklUX09QRVJBVElP
TihvcGVyYXRpb25XYXNtQXJyYXlOZXdFbXB0eSwgRW5jb2RlZEpTVmFsdWUsIChJbnN0YW5jZSog
aW5zdGFuY2UsIHVpbnQzMl90IHR5cGVJbmRleCwgdWludDMyX3Qgc2l6ZSkpOworSlNDX0RFQ0xB
UkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtQXJyYXlHZXQsIEVuY29kZWRK
U1ZhbHVlLCAoSW5zdGFuY2UqIGluc3RhbmNlLCB1aW50MzJfdCB0eXBlSW5kZXgsIEVuY29kZWRK
U1ZhbHVlIGVuY1ZhbHVlLCB1aW50MzJfdCBpbmRleCkpOworSlNDX0RFQ0xBUkVfTk9FWENFUFRf
SklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtQXJyYXlTZXQsIHZvaWQsIChJbnN0YW5jZSogaW5z
dGFuY2UsIHVpbnQzMl90IHR5cGVJbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jVmFsdWUsIHVpbnQz
Ml90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkpOworSlNDX0RFQ0xBUkVfTk9FWENFUFRf
SklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtQXJyYXlGaWxsLCBVQ1BVU3RyaWN0SW50MzIsIChJ
bnN0YW5jZSosIEVuY29kZWRKU1ZhbHVlLCB1aW50MzJfdCwgdWludDY0X3QsIHVpbnQzMl90KSk7
CitKU0NfREVDTEFSRV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21BcnJheUZp
bGxWZWN0b3IsIFVDUFVTdHJpY3RJbnQzMiwgKEluc3RhbmNlKiwgRW5jb2RlZEpTVmFsdWUsIHVp
bnQzMl90LCB1aW50NjRfdCwgdWludDY0X3QsIHVpbnQzMl90KSk7CitKU0NfREVDTEFSRV9OT0VY
Q0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21BcnJheUNvcHksIFVDUFVTdHJpY3RJbnQz
MiwgKEluc3RhbmNlKiwgRW5jb2RlZEpTVmFsdWUsIHVpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSwg
dWludDMyX3QsIHVpbnQzMl90KSk7CitKU0NfREVDTEFSRV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbldhc21BcnJheUluaXRFbGVtLCBVQ1BVU3RyaWN0SW50MzIsIChJbnN0YW5jZSos
IEVuY29kZWRKU1ZhbHVlLCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50MzJfdCkp
OworSlNDX0RFQ0xBUkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtQXJyYXlJ
bml0RGF0YSwgVUNQVVN0cmljdEludDMyLCAoSW5zdGFuY2UqLCBFbmNvZGVkSlNWYWx1ZSwgdWlu
dDMyX3QsIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDMyX3QpKTsKIEpTQ19ERUNMQVJFX05PRVhD
RVBUX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uV2FzbUlzU3ViUlRULCBib29sLCAoV2FzbTo6UlRU
KiwgV2FzbTo6UlRUKikpOwogSlNDX0RFQ0xBUkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVy
YXRpb25XYXNtQW55Q29udmVydEV4dGVybiwgRW5jb2RlZEpTVmFsdWUsIChFbmNvZGVkSlNWYWx1
ZSkpOwogCi1KU0NfREVDTEFSRV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21S
ZWZUZXN0LCBpbnQzMl90LCAoSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgRW5jb2RlZEpTVmFsdWUs
IHVpbnQzMl90LCBpbnQzMl90LCBib29sKSk7Ci1KU0NfREVDTEFSRV9OT0VYQ0VQVF9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbldhc21SZWZDYXN0LCBFbmNvZGVkSlNWYWx1ZSwgKEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSosIEVuY29kZWRKU1ZhbHVlLCB1aW50MzJfdCwgaW50MzJfdCkpOworSlNDX0RF
Q0xBUkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtUmVmVGVzdCwgaW50MzJf
dCwgKEluc3RhbmNlKiwgRW5jb2RlZEpTVmFsdWUsIHVpbnQzMl90LCBpbnQzMl90LCBib29sKSk7
CitKU0NfREVDTEFSRV9OT0VYQ0VQVF9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbldhc21SZWZDYXN0
LCBFbmNvZGVkSlNWYWx1ZSwgKEluc3RhbmNlKiwgRW5jb2RlZEpTVmFsdWUsIHVpbnQzMl90LCBp
bnQzMl90KSk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotSlNDX0RFQ0xBUkVfTk9FWENFUFRfSklU
X09QRVJBVElPTihvcGVyYXRpb25XYXNtUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hh
YmxlLCBUaHJvd25FeGNlcHRpb25JbmZvLCAoSlNXZWJBc3NlbWJseUluc3RhbmNlKikpOworSlND
X0RFQ0xBUkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtUmV0cmlldmVBbmRD
bGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlLCBUaHJvd25FeGNlcHRpb25JbmZvLCAoSW5zdGFuY2Uq
KSk7CiAjZWxzZQogLyogT24gMzItYml0IHBsYXRmb3Jtcywgd2UgY2FuJ3QgcmV0dXJuIGJvdGgg
YW4gRW5jb2RlZEpTVmFsdWUgYW5kIHRoZSBwYXlsb2FkCiAgKiB0b2dldGhlciAobm90IGVub3Vn
aCByZXR1cm4gcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgaW4gdGhlIEFCSSBhbmQgd2UgZG9uJ3QK
ICAqIGhhbmRsZSBzdGFjayBhcmd1bWVudHMgd2hlbiBjYWxsaW5nIEMgZnVuY3Rpb25zKSwgc28s
IGluc3RlYWQsIHJldHVybiB0aGUKICAqIHBheWxvYWQgYW5kIHJldHVybiB0aGUgdGhyb3duIHZh
bHVlIHZpYSBhbiBvdXQgcG9pbnRlciAqLwotSlNDX0RFQ0xBUkVfTk9FWENFUFRfSklUX09QRVJB
VElPTihvcGVyYXRpb25XYXNtUmV0cmlldmVBbmRDbGVhckV4Y2VwdGlvbklmQ2F0Y2hhYmxlLCB2
b2lkKiwgKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIEVuY29kZWRKU1ZhbHVlKikpOworSlNDX0RF
Q0xBUkVfTk9FWENFUFRfSklUX09QRVJBVElPTihvcGVyYXRpb25XYXNtUmV0cmlldmVBbmRDbGVh
ckV4Y2VwdGlvbklmQ2F0Y2hhYmxlLCB2b2lkKiwgKEluc3RhbmNlKiwgRW5jb2RlZEpTVmFsdWUq
KSk7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldh
c20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25z
SW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnNJbmxp
bmVzLmgKaW5kZXggNWNiMTIwNThiYzUyLi41ZTMxZGFkY2YwMmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zSW5saW5lcy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zSW5saW5lcy5oCkBAIC0zNSwxMiAr
MzUsMTMgQEAKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5U3RydWN0LmgiCiAjaW5jbHVkZSAiVHlw
ZWRBcnJheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXYWl0ZXJMaXN0TWFuYWdlci5oIgorI2lu
Y2x1ZGUgIldhc21JbnN0YW5jZS5oIgogI2luY2x1ZGUgIldhc21MTEludEdlbmVyYXRvci5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKIG5hbWVzcGFjZSBXYXNtIHsKIAotaW5saW5lIEVuY29kZWRKU1Zh
bHVlIHJlZkZ1bmMoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3QgaW5k
ZXgpCitpbmxpbmUgRW5jb2RlZEpTVmFsdWUgcmVmRnVuYyhJbnN0YW5jZSogaW5zdGFuY2UsIHVp
bnQzMl90IGluZGV4KQogewogICAgIEpTVmFsdWUgdmFsdWUgPSBpbnN0YW5jZS0+Z2V0RnVuY3Rp
b25XcmFwcGVyKGluZGV4KTsKICAgICBBU1NFUlQodmFsdWUuaXNDYWxsYWJsZSgpKTsKQEAgLTQ4
LDcgKzQ5LDcgQEAgaW5saW5lIEVuY29kZWRKU1ZhbHVlIHJlZkZ1bmMoSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3QgaW5kZXgpCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgotSlNXZWJBc3NlbWJseUFycmF5KiBmaWxsQXJyYXkoSlNXZWJBc3NlbWJseUluc3RhbmNl
KiBpbnN0YW5jZSwgV2FzbTo6RmllbGRUeXBlIGZpZWxkVHlwZSwgdWludDMyX3Qgc2l6ZSwgRW5j
b2RlZEpTVmFsdWUgdmFsdWUsIFJlZlB0cjxjb25zdCBXYXNtOjpSVFQ+IHJ0dCkKK0pTV2ViQXNz
ZW1ibHlBcnJheSogZmlsbEFycmF5KEluc3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6RmllbGRUeXBl
IGZpZWxkVHlwZSwgdWludDMyX3Qgc2l6ZSwgRW5jb2RlZEpTVmFsdWUgdmFsdWUsIFJlZlB0cjxj
b25zdCBXYXNtOjpSVFQ+IHJ0dCkKIHsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gaW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOwogICAgIFZNJiB2bSA9IGluc3RhbmNlLT52bSgp
OwpAQCAtNjEsNyArNjIsNyBAQCBKU1dlYkFzc2VtYmx5QXJyYXkqIGZpbGxBcnJheShKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBXYXNtOjpGaWVsZFR5cGUgZgogICAgIHJldHVybiBK
U1dlYkFzc2VtYmx5QXJyYXk6OnRyeUNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJs
eUFycmF5U3RydWN0dXJlKCksIGZpZWxkVHlwZSwgc2l6ZSwgV1RGTW92ZSh2YWx1ZXMpLCBydHQp
OwogfQogCi1pbmxpbmUgRW5jb2RlZEpTVmFsdWUgYXJyYXlOZXcoSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBpbnN0YW5jZSwgdWludDMyX3QgdHlwZUluZGV4LCB1aW50MzJfdCBzaXplLCBFbmNvZGVk
SlNWYWx1ZSBlbmNWYWx1ZSkKK2lubGluZSBFbmNvZGVkSlNWYWx1ZSBhcnJheU5ldyhJbnN0YW5j
ZSogaW5zdGFuY2UsIHVpbnQzMl90IHR5cGVJbmRleCwgdWludDMyX3Qgc2l6ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jVmFsdWUpCiB7CiAgICAgQVNTRVJUKHR5cGVJbmRleCA8IGluc3RhbmNlLT5tb2R1
bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpLnR5cGVDb3VudCgpKTsKIApAQCAtMTA1LDcgKzEwNiw3
IEBAIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBhcnJheU5ldyhKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
IGluc3RhbmNlLCB1aW50MzJfdCB0eXBlSW5kCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShh
cnJheSA/IEpTVmFsdWUoYXJyYXkpIDoganNOdWxsKCkpOwogfQogCi1pbmxpbmUgRW5jb2RlZEpT
VmFsdWUgYXJyYXlOZXcoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3Qg
dHlwZUluZGV4LCB1aW50MzJfdCBzaXplLCB2MTI4X3QgdmFsdWUpCitpbmxpbmUgRW5jb2RlZEpT
VmFsdWUgYXJyYXlOZXcoSW5zdGFuY2UqIGluc3RhbmNlLCB1aW50MzJfdCB0eXBlSW5kZXgsIHVp
bnQzMl90IHNpemUsIHYxMjhfdCB2YWx1ZSkKIHsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gaW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOwogICAgIFZNJiB2bSA9IGluc3RhbmNl
LT52bSgpOwpAQCAtMTI5LDcgKzEzMCw3IEBAIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBhcnJheU5l
dyhKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCB1aW50MzJfdCB0eXBlSW5kCiB9CiAK
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotSlNXZWJBc3NlbWJseUFycmF5KiBjb3B5RWxlbWVudHNJ
blJldmVyc2UoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6RmllbGRUeXBl
IGZpZWxkVHlwZSwgdWludDMyX3Qgc2l6ZSwgdWludDY0X3QqIGFyZ3VtZW50cywgUmVmUHRyPGNv
bnN0IFdhc206OlJUVD4gcnR0KQorSlNXZWJBc3NlbWJseUFycmF5KiBjb3B5RWxlbWVudHNJblJl
dmVyc2UoSW5zdGFuY2UqIGluc3RhbmNlLCBXYXNtOjpGaWVsZFR5cGUgZmllbGRUeXBlLCB1aW50
MzJfdCBzaXplLCB1aW50NjRfdCogYXJndW1lbnRzLCBSZWZQdHI8Y29uc3QgV2FzbTo6UlRUPiBy
dHQpCiB7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGluc3RhbmNlLT5nbG9i
YWxPYmplY3QoKTsKICAgICBWTSYgdm0gPSBpbnN0YW5jZS0+dm0oKTsKQEAgLTE0Nyw3ICsxNDgs
NyBAQCBKU1dlYkFzc2VtYmx5QXJyYXkqIGNvcHlFbGVtZW50c0luUmV2ZXJzZShKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqIGluc3RhbmNlLCBXYXNtOgogfQogCiAvLyBFeHBlY3RzIGFyZ3VtZW50cyBp
biByZXZlcnNlIG9yZGVyCi1pbmxpbmUgRW5jb2RlZEpTVmFsdWUgYXJyYXlOZXdGaXhlZChKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCB1aW50MzJfdCB0eXBlSW5kZXgsIHVpbnQzMl90
IHNpemUsIHVpbnQ2NF90KiBhcmd1bWVudHMpCitpbmxpbmUgRW5jb2RlZEpTVmFsdWUgYXJyYXlO
ZXdGaXhlZChJbnN0YW5jZSogaW5zdGFuY2UsIHVpbnQzMl90IHR5cGVJbmRleCwgdWludDMyX3Qg
c2l6ZSwgdWludDY0X3QqIGFyZ3VtZW50cykKIHsKICAgICAvLyBHZXQgdGhlIGFycmF5IGVsZW1l
bnQgdHlwZSBhbmQgZGV0ZXJtaW5lIHRoZSBlbGVtZW50IHNpemUKICAgICBjb25zdCBXYXNtOjpU
eXBlRGVmaW5pdGlvbiYgYXJyYXlTaWduYXR1cmUgPSBpbnN0YW5jZS0+bW9kdWxlKCkubW9kdWxl
SW5mb3JtYXRpb24oKS50eXBlU2lnbmF0dXJlc1t0eXBlSW5kZXhdLT5leHBhbmQoKTsKQEAgLTE4
Miw5ICsxODMsMTAgQEAgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGFycmF5TmV3Rml4ZWQoSlNXZWJB
c3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3QgdHkKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLUVuY29kZWRKU1ZhbHVlIGNyZWF0ZUFycmF5VmFsdWUoSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBpbnN0YW5jZSwgRmllbGRUeXBlIGZpZWxkVHlwZSwgc2l6ZV90IGFycmF5U2l6ZSwg
Rml4ZWRWZWN0b3I8VD4mJiB0ZW1wVmFsdWVzLCBSZWZQdHI8Y29uc3QgV2FzbTo6UlRUPiBydHQp
CitFbmNvZGVkSlNWYWx1ZSBjcmVhdGVBcnJheVZhbHVlKEluc3RhbmNlKiBpbnN0YW5jZSwgRmll
bGRUeXBlIGZpZWxkVHlwZSwgc2l6ZV90IGFycmF5U2l6ZSwgRml4ZWRWZWN0b3I8VD4mJiB0ZW1w
VmFsdWVzLCBSZWZQdHI8Y29uc3QgV2FzbTo6UlRUPiBydHQpCiB7Ci0gICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IGluc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAgICBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqIGpzSW5zdGFuY2UgPSBpbnN0YW5jZS0+b3duZXIoKTsKKyAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNJbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCk7CiAg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogCiAgICAgSlNXZWJBc3NlbWJseUFycmF5
KiBhcnJheSA9IEpTV2ViQXNzZW1ibHlBcnJheTo6dHJ5Q3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qt
PndlYkFzc2VtYmx5QXJyYXlTdHJ1Y3R1cmUoKSwgZmllbGRUeXBlLCBhcnJheVNpemUsIFdURk1v
dmUodGVtcFZhbHVlcyksIHJ0dCk7CkBAIC0xOTMsNyArMTk1LDcgQEAgRW5jb2RlZEpTVmFsdWUg
Y3JlYXRlQXJyYXlWYWx1ZShKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBGaWVsZFR5
cGUgZmllbGQKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUVuY29kZWRKU1ZhbHVlIGNyZWF0
ZUFycmF5RnJvbURhdGFTZWdtZW50KEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIEZp
ZWxkVHlwZSBlbGVtZW50VHlwZSwgc2l6ZV90IGFycmF5U2l6ZSwKK0VuY29kZWRKU1ZhbHVlIGNy
ZWF0ZUFycmF5RnJvbURhdGFTZWdtZW50KEluc3RhbmNlKiBpbnN0YW5jZSwgRmllbGRUeXBlIGVs
ZW1lbnRUeXBlLCBzaXplX3QgYXJyYXlTaXplLAogICAgIHVuc2lnbmVkIGRhdGFTZWdtZW50SW5k
ZXgsIHVuc2lnbmVkIG9mZnNldCwgRml4ZWRWZWN0b3I8VD4mJiB0ZW1wVmFsdWVzLCBSZWZQdHI8
Y29uc3QgV2FzbTo6UlRUPiBydHQpCiB7CiAgICAgLy8gRGV0ZXJtaW5lIHRoZSBhcnJheSBsZW5n
dGggaW4gYnl0ZXMgZnJvbSB0aGUgZWxlbWVudCB0eXBlIGFuZCBkZXNpcmVkIGFycmF5IHNpemUK
QEAgLTIyMCw3ICsyMjIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBjcmVhdGVBcnJheUZyb21EYXRhU2Vn
bWVudChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBGaWVsZAogICAgIHJldHVybiBj
cmVhdGVBcnJheVZhbHVlKGluc3RhbmNlLCBlbGVtZW50VHlwZSwgYXJyYXlTaXplLCBXVEZNb3Zl
KHRlbXBWYWx1ZXMpLCBydHQpOwogfQogCi1pbmxpbmUgRW5jb2RlZEpTVmFsdWUgY3JlYXRlQXJy
YXlGcm9tRWxlbWVudFNlZ21lbnQoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgc2l6
ZV90IGFycmF5U2l6ZSwgdW5zaWduZWQgZWxlbVNlZ21lbnRJbmRleCwgdW5zaWduZWQgb2Zmc2V0
LCBGaXhlZFZlY3Rvcjx1aW50NjRfdD4mJiB0ZW1wVmFsdWVzLCBSZWZQdHI8Y29uc3QgV2FzbTo6
UlRUPiBydHQpCitpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY3JlYXRlQXJyYXlGcm9tRWxlbWVudFNl
Z21lbnQoSW5zdGFuY2UqIGluc3RhbmNlLCBzaXplX3QgYXJyYXlTaXplLCB1bnNpZ25lZCBlbGVt
U2VnbWVudEluZGV4LCB1bnNpZ25lZCBvZmZzZXQsIEZpeGVkVmVjdG9yPHVpbnQ2NF90PiYmIHRl
bXBWYWx1ZXMsIFJlZlB0cjxjb25zdCBXYXNtOjpSVFQ+IHJ0dCkKIHsKICAgICAvLyBDb3B5IHRo
ZSBkYXRhIGZyb20gdGhlIHNlZ21lbnQgaW50byB0aGUgdGVtcCBgdmFsdWVzYCB2ZWN0b3IKICAg
ICBpbnN0YW5jZS0+Y29weUVsZW1lbnRTZWdtZW50KGluc3RhbmNlLT5tb2R1bGUoKS5tb2R1bGVJ
bmZvcm1hdGlvbigpLmVsZW1lbnRzW2VsZW1TZWdtZW50SW5kZXhdLCBvZmZzZXQsIGFycmF5U2l6
ZSwgdGVtcFZhbHVlcy5tdXRhYmxlU3BhbigpLmRhdGEoKSk7CkBAIC0yMjksNyArMjMxLDcgQEAg
aW5saW5lIEVuY29kZWRKU1ZhbHVlIGNyZWF0ZUFycmF5RnJvbUVsZW1lbnRTZWdtZW50KEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSogaW5zdGEKICAgICByZXR1cm4gY3JlYXRlQXJyYXlWYWx1ZShpbnN0
YW5jZSwgRmllbGRUeXBlIHsgU3RvcmFnZVR5cGUgeyBUeXBlczo6STY0IH0sIE11dGFiaWxpdHk6
Ok11dGFibGUgfSwgYXJyYXlTaXplLCBXVEZNb3ZlKHRlbXBWYWx1ZXMpLCBydHQpOwogfQogCi1p
bmxpbmUgRW5jb2RlZEpTVmFsdWUgYXJyYXlOZXdEYXRhKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSog
aW5zdGFuY2UsIHVpbnQzMl90IHR5cGVJbmRleCwgdWludDMyX3QgZGF0YVNlZ21lbnRJbmRleCwg
dWludDMyX3QgYXJyYXlTaXplLCB1aW50MzJfdCBvZmZzZXQpCitpbmxpbmUgRW5jb2RlZEpTVmFs
dWUgYXJyYXlOZXdEYXRhKEluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3QgdHlwZUluZGV4LCB1
aW50MzJfdCBkYXRhU2VnbWVudEluZGV4LCB1aW50MzJfdCBhcnJheVNpemUsIHVpbnQzMl90IG9m
ZnNldCkKIHsKICAgICBhdXRvIGFycmF5UlRUID0gaW5zdGFuY2UtPm1vZHVsZSgpLm1vZHVsZUlu
Zm9ybWF0aW9uKCkucnR0c1t0eXBlSW5kZXhdOwogCkBAIC0yNzksNyArMjgxLDcgQEAgaW5saW5l
IEVuY29kZWRKU1ZhbHVlIGFycmF5TmV3RGF0YShKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3Rh
bmNlLCB1aW50MzJfdCB0eXAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQog
Ci1pbmxpbmUgRW5jb2RlZEpTVmFsdWUgYXJyYXlOZXdFbGVtKEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSogaW5zdGFuY2UsIHVpbnQzMl90IHR5cGVJbmRleCwgdWludDMyX3QgZWxlbVNlZ21lbnRJbmRl
eCwgdWludDMyX3QgYXJyYXlTaXplLCB1aW50MzJfdCBvZmZzZXQpCitpbmxpbmUgRW5jb2RlZEpT
VmFsdWUgYXJyYXlOZXdFbGVtKEluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3QgdHlwZUluZGV4
LCB1aW50MzJfdCBlbGVtU2VnbWVudEluZGV4LCB1aW50MzJfdCBhcnJheVNpemUsIHVpbnQzMl90
IG9mZnNldCkKIHsKICAgICBhdXRvIGFycmF5UlRUID0gaW5zdGFuY2UtPm1vZHVsZSgpLm1vZHVs
ZUluZm9ybWF0aW9uKCkucnR0c1t0eXBlSW5kZXhdOwogCkBAIC0zMDMsNyArMzA1LDcgQEAgaW5s
aW5lIEVuY29kZWRKU1ZhbHVlIGFycmF5TmV3RWxlbShKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGlu
c3RhbmNlLCB1aW50MzJfdCB0eXAKICAgICByZXR1cm4gY3JlYXRlQXJyYXlGcm9tRWxlbWVudFNl
Z21lbnQoaW5zdGFuY2UsIGFycmF5U2l6ZSwgZWxlbVNlZ21lbnRJbmRleCwgb2Zmc2V0LCBXVEZN
b3ZlKHZhbHVlcyksIGFycmF5UlRUKTsKIH0KIAotaW5saW5lIEVuY29kZWRKU1ZhbHVlIGFycmF5
R2V0KEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIHVpbnQzMl90IHR5cGVJbmRleCwg
RW5jb2RlZEpTVmFsdWUgYXJyYXlWYWx1ZSwgdWludDMyX3QgaW5kZXgpCitpbmxpbmUgRW5jb2Rl
ZEpTVmFsdWUgYXJyYXlHZXQoSW5zdGFuY2UqIGluc3RhbmNlLCB1aW50MzJfdCB0eXBlSW5kZXgs
IEVuY29kZWRKU1ZhbHVlIGFycmF5VmFsdWUsIHVpbnQzMl90IGluZGV4KQogewogI2lmIEFTU0VS
VF9FTkFCTEVECiAgICAgQVNTRVJUKHR5cGVJbmRleCA8IGluc3RhbmNlLT5tb2R1bGUoKS5tb2R1
bGVJbmZvcm1hdGlvbigpLnR5cGVDb3VudCgpKTsKQEAgLTMyMSw3ICszMjMsNyBAQCBpbmxpbmUg
RW5jb2RlZEpTVmFsdWUgYXJyYXlHZXQoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwg
dWludDMyX3QgdHlwZUluZAogICAgIHJldHVybiBhcnJheU9iamVjdC0+Z2V0KGluZGV4KTsKIH0K
IAotaW5saW5lIHZvaWQgYXJyYXlTZXQoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwg
dWludDMyX3QgdHlwZUluZGV4LCBFbmNvZGVkSlNWYWx1ZSBhcnJheVZhbHVlLCB1aW50MzJfdCBp
bmRleCwgRW5jb2RlZEpTVmFsdWUgdmFsdWUpCitpbmxpbmUgdm9pZCBhcnJheVNldChJbnN0YW5j
ZSogaW5zdGFuY2UsIHVpbnQzMl90IHR5cGVJbmRleCwgRW5jb2RlZEpTVmFsdWUgYXJyYXlWYWx1
ZSwgdWludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIHZhbHVlKQogewogI2lmIEFTU0VSVF9F
TkFCTEVECiAgICAgQVNTRVJUKHR5cGVJbmRleCA8IGluc3RhbmNlLT5tb2R1bGUoKS5tb2R1bGVJ
bmZvcm1hdGlvbigpLnR5cGVDb3VudCgpKTsKQEAgLTM3Niw3ICszNzgsNyBAQCBpbmxpbmUgYm9v
bCBhcnJheUZpbGwoRW5jb2RlZEpTVmFsdWUgYXJyYXlWYWx1ZSwgdWludDMyX3Qgb2Zmc2V0LCB2
MTI4X3QgdmFsdWUsCiAvLyBGSVhNRToKIC8vIFRvIGJlIGNvbnNpc3RlbnQgaXQgd291bGQgbWFr
ZSBzZW5zZSB0byBpbmNsdWRlIGRzdCBhbmQgc3JjIHR5cGUgaW5kaWNlcywgYnV0IHRoZXkKIC8v
IGFyZSBub3QgbmVjZXNzYXJ5IGZvciBvcGVyYXRpb24gYW5kIGhpdHMgYSBsaW1pdGF0aW9uIG9m
IEJCUSBKSVQgY2FsbHMuCi1pbmxpbmUgYm9vbCBhcnJheUNvcHkoSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiwgRW5jb2RlZEpTVmFsdWUgZHN0LCB1aW50MzJfdCBkc3RPZmZzZXQsIEVuY29kZWRKU1Zh
bHVlIHNyYywgdWludDMyX3Qgc3JjT2Zmc2V0LCB1aW50MzJfdCBzaXplKQoraW5saW5lIGJvb2wg
YXJyYXlDb3B5KEluc3RhbmNlKiwgRW5jb2RlZEpTVmFsdWUgZHN0LCB1aW50MzJfdCBkc3RPZmZz
ZXQsIEVuY29kZWRKU1ZhbHVlIHNyYywgdWludDMyX3Qgc3JjT2Zmc2V0LCB1aW50MzJfdCBzaXpl
KQogewogICAgIEpTVmFsdWUgZHN0UmVmID0gSlNWYWx1ZTo6ZGVjb2RlKGRzdCk7CiAgICAgSlNW
YWx1ZSBzcmNSZWYgPSBKU1ZhbHVlOjpkZWNvZGUoc3JjKTsKQEAgLTQwNyw3ICs0MDksNyBAQCBp
bmxpbmUgYm9vbCBhcnJheUNvcHkoSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgRW5jb2RlZEpTVmFs
dWUgZHN0LCB1aW50MzJfdCBkc3RPZgogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUgYm9v
bCBhcnJheUluaXRFbGVtKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIEVuY29kZWRK
U1ZhbHVlIGRzdCwgdWludDMyX3QgZHN0T2Zmc2V0LCB1aW50MzJfdCBzcmNFbGVtZW50SW5kZXgs
IHVpbnQzMl90IHNyY09mZnNldCwgdWludDMyX3Qgc2l6ZSkKK2lubGluZSBib29sIGFycmF5SW5p
dEVsZW0oSW5zdGFuY2UqIGluc3RhbmNlLCBFbmNvZGVkSlNWYWx1ZSBkc3QsIHVpbnQzMl90IGRz
dE9mZnNldCwgdWludDMyX3Qgc3JjRWxlbWVudEluZGV4LCB1aW50MzJfdCBzcmNPZmZzZXQsIHVp
bnQzMl90IHNpemUpCiB7CiAgICAgSlNWYWx1ZSBkc3RSZWYgPSBKU1ZhbHVlOjpkZWNvZGUoZHN0
KTsKICAgICBBU1NFUlQoZHN0UmVmLmlzT2JqZWN0KCkpOwpAQCAtNDM5LDcgKzQ0MSw3IEBAIGlu
bGluZSBib29sIGFycmF5SW5pdEVsZW0oSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwg
RW5jb2RlZEpTVmFsdWUgZHN0LCB1CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSBib29s
IGFycmF5SW5pdERhdGEoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgRW5jb2RlZEpT
VmFsdWUgZHN0LCB1aW50MzJfdCBkc3RPZmZzZXQsIHVpbnQzMl90IHNyY0RhdGFJbmRleCwgdWlu
dDMyX3Qgc3JjT2Zmc2V0LCB1aW50MzJfdCBzaXplKQoraW5saW5lIGJvb2wgYXJyYXlJbml0RGF0
YShJbnN0YW5jZSogaW5zdGFuY2UsIEVuY29kZWRKU1ZhbHVlIGRzdCwgdWludDMyX3QgZHN0T2Zm
c2V0LCB1aW50MzJfdCBzcmNEYXRhSW5kZXgsIHVpbnQzMl90IHNyY09mZnNldCwgdWludDMyX3Qg
c2l6ZSkKIHsKICAgICBKU1ZhbHVlIGRzdFJlZiA9IEpTVmFsdWU6OmRlY29kZShkc3QpOwogICAg
IEFTU0VSVChkc3RSZWYuaXNPYmplY3QoKSk7CkBAIC00NjUsMTUgKzQ2NywxNiBAQCBpbmxpbmUg
Ym9vbCBhcnJheUluaXREYXRhKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIEVuY29k
ZWRKU1ZhbHVlIGRzdCwgdQogfQogCiAvLyBzdHJ1Y3ROZXcoKSBleHBlY3RzIHRoZSBgYXJndW1l
bnRzYCBhcnJheSAod2hlbiB1c2VkKSB0byBiZSBpbiByZXZlcnNlIG9yZGVyCi1pbmxpbmUgRW5j
b2RlZEpTVmFsdWUgc3RydWN0TmV3KEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIHVp
bnQzMl90IHR5cGVJbmRleCwgYm9vbCB1c2VEZWZhdWx0LCB1aW50NjRfdCogYXJndW1lbnRzKQor
aW5saW5lIEVuY29kZWRKU1ZhbHVlIHN0cnVjdE5ldyhJbnN0YW5jZSogaW5zdGFuY2UsIHVpbnQz
Ml90IHR5cGVJbmRleCwgYm9vbCB1c2VEZWZhdWx0LCB1aW50NjRfdCogYXJndW1lbnRzKQogewor
ICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSoganNJbnN0YW5jZSA9IGluc3RhbmNlLT5vd25lcigp
OwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBpbnN0YW5jZS0+Z2xvYmFsT2Jq
ZWN0KCk7CiAKICAgICBjb25zdCBUeXBlRGVmaW5pdGlvbiYgc3RydWN0VHlwZURlZmluaXRpb24g
PSBpbnN0YW5jZS0+bW9kdWxlKCkubW9kdWxlSW5mb3JtYXRpb24oKS50eXBlU2lnbmF0dXJlc1t0
eXBlSW5kZXhdLT5leHBhbmQoKTsKICAgICBjb25zdCBTdHJ1Y3RUeXBlJiBzdHJ1Y3RUeXBlID0g
KnN0cnVjdFR5cGVEZWZpbml0aW9uLmFzPFN0cnVjdFR5cGU+KCk7CiAgICAgYXV0byBzdHJ1Y3RS
VFQgPSBpbnN0YW5jZS0+bW9kdWxlKCkubW9kdWxlSW5mb3JtYXRpb24oKS5ydHRzW3R5cGVJbmRl
eF07CiAKLSAgICBKU1dlYkFzc2VtYmx5U3RydWN0KiBzdHJ1Y3RWYWx1ZSA9IEpTV2ViQXNzZW1i
bHlTdHJ1Y3Q6OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1i
bHlTdHJ1Y3RTdHJ1Y3R1cmUoKSwgaW5zdGFuY2UsIHR5cGVJbmRleCwgc3RydWN0UlRUKTsKKyAg
ICBKU1dlYkFzc2VtYmx5U3RydWN0KiBzdHJ1Y3RWYWx1ZSA9IEpTV2ViQXNzZW1ibHlTdHJ1Y3Q6
OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlTdHJ1Y3RT
dHJ1Y3R1cmUoKSwganNJbnN0YW5jZSwgdHlwZUluZGV4LCBzdHJ1Y3RSVFQpOwogICAgIGlmIChV
TkxJS0VMWSghc3RydWN0VmFsdWUpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKTsKICAgICBpZiAoc3RhdGljX2Nhc3Q8V2FzbTo6VXNlRGVmYXVsdFZhbHVlPih1c2VE
ZWZhdWx0KSA9PSBXYXNtOjpVc2VEZWZhdWx0VmFsdWU6OlllcykgewpAQCAtNTMwLDcgKzUzMyw3
IEBAIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBleHRlcm5JbnRlcm5hbGl6ZShFbmNvZGVkSlNWYWx1
ZSByZWZlcmVuY2UpCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShXYXNtOjppbnRlcm5hbGl6
ZUV4dGVybnJlZihKU1ZhbHVlOjpkZWNvZGUocmVmZXJlbmNlKSkpOwogfQogCi1pbmxpbmUgRW5j
b2RlZEpTVmFsdWUgdGFibGVHZXQoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgdW5z
aWduZWQgdGFibGVJbmRleCwgaW50MzJfdCBzaWduZWRJbmRleCkKK2lubGluZSBFbmNvZGVkSlNW
YWx1ZSB0YWJsZUdldChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIGlu
dDMyX3Qgc2lnbmVkSW5kZXgpCiB7CiAgICAgQVNTRVJUKHRhYmxlSW5kZXggPCBpbnN0YW5jZS0+
bW9kdWxlKCkubW9kdWxlSW5mb3JtYXRpb24oKS50YWJsZUNvdW50KCkpOwogICAgIGlmIChzaWdu
ZWRJbmRleCA8IDApCkBAIC01NDMsNyArNTQ2LDcgQEAgaW5saW5lIEVuY29kZWRKU1ZhbHVlIHRh
YmxlR2V0KEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIHRhYmxlSW4K
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGluc3RhbmNlLT50YWJsZSh0YWJsZUluZGV4KS0+
Z2V0KGluZGV4KSk7CiB9CiAKLWlubGluZSBib29sIHRhYmxlU2V0KEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIHRhYmxlSW5kZXgsIHVpbnQzMl90IGluZGV4LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNWYWx1ZSkKK2lubGluZSBib29sIHRhYmxlU2V0KEluc3RhbmNlKiBpbnN0
YW5jZSwgdW5zaWduZWQgdGFibGVJbmRleCwgdWludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVl
IGVuY1ZhbHVlKQogewogICAgIEFTU0VSVCh0YWJsZUluZGV4IDwgaW5zdGFuY2UtPm1vZHVsZSgp
Lm1vZHVsZUluZm9ybWF0aW9uKCkudGFibGVDb3VudCgpKTsKIApAQCAtNTYwLDkgKzU2Myw5IEBA
IGlubGluZSBib29sIHRhYmxlU2V0KEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIHVu
c2lnbmVkIHRhYmxlSW5kZXgsIHVpbnQzCiAgICAgICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1
bmN0aW9uKHZhbHVlLCB3YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rpb24pKSB7CiAgICAg
ICAgICAgICBBU1NFUlQoISF3YXNtRnVuY3Rpb24gfHwgISF3YXNtV3JhcHBlckZ1bmN0aW9uKTsK
ICAgICAgICAgICAgIGlmICh3YXNtRnVuY3Rpb24pCi0gICAgICAgICAgICAgICAgaW5zdGFuY2Ut
PnRhYmxlKHRhYmxlSW5kZXgpLT5hc0Z1bmNyZWZUYWJsZSgpLT5zZXRGdW5jdGlvbihpbmRleCwg
anNDYXN0PEpTT2JqZWN0Kj4odmFsdWUpLCB3YXNtRnVuY3Rpb24tPmltcG9ydGFibGVGdW5jdGlv
bigpLCB3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCkpOworICAgICAgICAgICAgICAgIGluc3RhbmNl
LT50YWJsZSh0YWJsZUluZGV4KS0+YXNGdW5jcmVmVGFibGUoKS0+c2V0RnVuY3Rpb24oaW5kZXgs
IGpzQ2FzdDxKU09iamVjdCo+KHZhbHVlKSwgd2FzbUZ1bmN0aW9uLT5pbXBvcnRhYmxlRnVuY3Rp
b24oKSwgJndhc21GdW5jdGlvbi0+aW5zdGFuY2UoKS0+aW5zdGFuY2UoKSk7CiAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgaW5zdGFuY2UtPnRhYmxlKHRhYmxlSW5kZXgpLT5hc0Z1
bmNyZWZUYWJsZSgpLT5zZXRGdW5jdGlvbihpbmRleCwganNDYXN0PEpTT2JqZWN0Kj4odmFsdWUp
LCB3YXNtV3JhcHBlckZ1bmN0aW9uLT5pbXBvcnRhYmxlRnVuY3Rpb24oKSwgd2FzbVdyYXBwZXJG
dW5jdGlvbi0+aW5zdGFuY2UoKSk7CisgICAgICAgICAgICAgICAgaW5zdGFuY2UtPnRhYmxlKHRh
YmxlSW5kZXgpLT5hc0Z1bmNyZWZUYWJsZSgpLT5zZXRGdW5jdGlvbihpbmRleCwganNDYXN0PEpT
T2JqZWN0Kj4odmFsdWUpLCB3YXNtV3JhcHBlckZ1bmN0aW9uLT5pbXBvcnRhYmxlRnVuY3Rpb24o
KSwgJndhc21XcmFwcGVyRnVuY3Rpb24tPmluc3RhbmNlKCktPmluc3RhbmNlKCkpOwogICAgICAg
ICB9IGVsc2UgaWYgKHZhbHVlLmlzTnVsbCgpKQogICAgICAgICAgICAgaW5zdGFuY2UtPnRhYmxl
KHRhYmxlSW5kZXgpLT5jbGVhcihpbmRleCk7CiAgICAgICAgIGVsc2UKQEAgLTU3Myw3ICs1NzYs
NyBAQCBpbmxpbmUgYm9vbCB0YWJsZVNldChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNl
LCB1bnNpZ25lZCB0YWJsZUluZGV4LCB1aW50MwogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxp
bmUgYm9vbCB0YWJsZUluaXQoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWdu
ZWQgZWxlbWVudEluZGV4LCB1bnNpZ25lZCB0YWJsZUluZGV4LCB1aW50MzJfdCBkc3RPZmZzZXQs
IHVpbnQzMl90IHNyY09mZnNldCwgdWludDMyX3QgbGVuZ3RoKQoraW5saW5lIGJvb2wgdGFibGVJ
bml0KEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgZWxlbWVudEluZGV4LCB1bnNpZ25lZCB0
YWJsZUluZGV4LCB1aW50MzJfdCBkc3RPZmZzZXQsIHVpbnQzMl90IHNyY09mZnNldCwgdWludDMy
X3QgbGVuZ3RoKQogewogICAgIEFTU0VSVChlbGVtZW50SW5kZXggPCBpbnN0YW5jZS0+bW9kdWxl
KCkubW9kdWxlSW5mb3JtYXRpb24oKS5lbGVtZW50Q291bnQoKSk7CiAgICAgQVNTRVJUKHRhYmxl
SW5kZXggPCBpbnN0YW5jZS0+bW9kdWxlKCkubW9kdWxlSW5mb3JtYXRpb24oKS50YWJsZUNvdW50
KCkpOwpAQCAtNTk4LDcgKzYwMSw3IEBAIGlubGluZSBib29sIHRhYmxlSW5pdChKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCBlbGVtZW50SW5kZXgsIHVuCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWlubGluZSBib29sIHRhYmxlRmlsbChKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqIGluc3RhbmNlLCB1bnNpZ25lZCB0YWJsZUluZGV4LCB1aW50MzJfdCBvZmZzZXQsIEVuY29k
ZWRKU1ZhbHVlIGZpbGwsIHVpbnQzMl90IGNvdW50KQoraW5saW5lIGJvb2wgdGFibGVGaWxsKElu
c3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgdGFibGVJbmRleCwgdWludDMyX3Qgb2Zmc2V0LCBF
bmNvZGVkSlNWYWx1ZSBmaWxsLCB1aW50MzJfdCBjb3VudCkKIHsKICAgICBBU1NFUlQodGFibGVJ
bmRleCA8IGluc3RhbmNlLT5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpLnRhYmxlQ291bnQo
KSk7CiAKQEAgLTYxNCw3ICs2MTcsNyBAQCBpbmxpbmUgYm9vbCB0YWJsZUZpbGwoSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgdGFibGVJbmRleCwgdWludAogICAgIHJl
dHVybiB0cnVlOwogfQogCi1pbmxpbmUgc2l6ZV90IHRhYmxlR3JvdyhKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCB0YWJsZUluZGV4LCBFbmNvZGVkSlNWYWx1ZSBmaWxs
LCB1aW50MzJfdCBkZWx0YSkKK2lubGluZSBzaXplX3QgdGFibGVHcm93KEluc3RhbmNlKiBpbnN0
YW5jZSwgdW5zaWduZWQgdGFibGVJbmRleCwgRW5jb2RlZEpTVmFsdWUgZmlsbCwgdWludDMyX3Qg
ZGVsdGEpCiB7CiAgICAgQVNTRVJUKHRhYmxlSW5kZXggPCBpbnN0YW5jZS0+bW9kdWxlKCkubW9k
dWxlSW5mb3JtYXRpb24oKS50YWJsZUNvdW50KCkpOwogICAgIGF1dG8gb2xkU2l6ZSA9IGluc3Rh
bmNlLT50YWJsZSh0YWJsZUluZGV4KS0+bGVuZ3RoKCk7CkBAIC02MjgsNyArNjMxLDcgQEAgaW5s
aW5lIHNpemVfdCB0YWJsZUdyb3coSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgdW5z
aWduZWQgdGFibGVJbmRleCwgRW4KICAgICByZXR1cm4gb2xkU2l6ZTsKIH0KIAotaW5saW5lIGJv
b2wgdGFibGVDb3B5KEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGRz
dFRhYmxlSW5kZXgsIHVuc2lnbmVkIHNyY1RhYmxlSW5kZXgsIGludDMyX3QgZHN0T2Zmc2V0LCBp
bnQzMl90IHNyY09mZnNldCwgaW50MzJfdCBsZW5ndGgpCitpbmxpbmUgYm9vbCB0YWJsZUNvcHko
SW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCBkc3RUYWJsZUluZGV4LCB1bnNpZ25lZCBzcmNU
YWJsZUluZGV4LCBpbnQzMl90IGRzdE9mZnNldCwgaW50MzJfdCBzcmNPZmZzZXQsIGludDMyX3Qg
bGVuZ3RoKQogewogICAgIEFTU0VSVChkc3RUYWJsZUluZGV4IDwgaW5zdGFuY2UtPm1vZHVsZSgp
Lm1vZHVsZUluZm9ybWF0aW9uKCkudGFibGVDb3VudCgpKTsKICAgICBBU1NFUlQoc3JjVGFibGVJ
bmRleCA8IGluc3RhbmNlLT5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpLnRhYmxlQ291bnQo
KSk7CkBAIC02NjEsMTcgKzY2NCwxNyBAQCBpbmxpbmUgYm9vbCB0YWJsZUNvcHkoSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgZHN0VGFibGVJbmRleCwgdQogICAgIHJl
dHVybiB0cnVlOwogfQogCi1pbmxpbmUgaW50MzJfdCB0YWJsZVNpemUoSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgdGFibGVJbmRleCkKK2lubGluZSBpbnQzMl90IHRh
YmxlU2l6ZShJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIHRhYmxlSW5kZXgpCiB7CiAgICAg
cmV0dXJuIGluc3RhbmNlLT50YWJsZSh0YWJsZUluZGV4KS0+bGVuZ3RoKCk7CiB9CiAKLWlubGlu
ZSBpbnQzMl90IGdyb3dNZW1vcnkoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgaW50
MzJfdCBkZWx0YSkKK2lubGluZSBpbnQzMl90IGdyb3dNZW1vcnkoSW5zdGFuY2UqIGluc3RhbmNl
LCBpbnQzMl90IGRlbHRhKQogewogICAgIGlmIChkZWx0YSA8IDApCiAgICAgICAgIHJldHVybiAt
MTsKIAotICAgIGF1dG8gZ3Jvd24gPSBpbnN0YW5jZS0+bWVtb3J5KCktPm1lbW9yeSgpLmdyb3co
aW5zdGFuY2UtPnZtKCksIFBhZ2VDb3VudChkZWx0YSkpOworICAgIGF1dG8gZ3Jvd24gPSBpbnN0
YW5jZS0+bWVtb3J5KCktPmdyb3coaW5zdGFuY2UtPnZtKCksIFBhZ2VDb3VudChkZWx0YSkpOwog
ICAgIGlmICghZ3Jvd24pIHsKICAgICAgICAgc3dpdGNoIChncm93bi5lcnJvcigpKSB7CiAgICAg
ICAgIGNhc2UgR3Jvd0ZhaWxSZWFzb246OkludmFsaWREZWx0YToKQEAgLTY4NywyOSArNjkwLDI5
IEBAIGlubGluZSBpbnQzMl90IGdyb3dNZW1vcnkoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0
YW5jZSwgaW50MzJfdCBkZWx0YSkKICAgICByZXR1cm4gZ3Jvd24udmFsdWUoKS5wYWdlQ291bnQo
KTsKIH0KIAotaW5saW5lIGJvb2wgbWVtb3J5SW5pdChKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGlu
c3RhbmNlLCB1bnNpZ25lZCBkYXRhU2VnbWVudEluZGV4LCB1aW50MzJfdCBkc3RBZGRyZXNzLCB1
aW50MzJfdCBzcmNBZGRyZXNzLCB1aW50MzJfdCBsZW5ndGgpCitpbmxpbmUgYm9vbCBtZW1vcnlJ
bml0KEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgZGF0YVNlZ21lbnRJbmRleCwgdWludDMy
X3QgZHN0QWRkcmVzcywgdWludDMyX3Qgc3JjQWRkcmVzcywgdWludDMyX3QgbGVuZ3RoKQogewog
ICAgIEFTU0VSVChkYXRhU2VnbWVudEluZGV4IDwgaW5zdGFuY2UtPm1vZHVsZSgpLm1vZHVsZUlu
Zm9ybWF0aW9uKCkuZGF0YVNlZ21lbnRzQ291bnQoKSk7CiAgICAgcmV0dXJuIGluc3RhbmNlLT5t
ZW1vcnlJbml0KGRzdEFkZHJlc3MsIHNyY0FkZHJlc3MsIGxlbmd0aCwgZGF0YVNlZ21lbnRJbmRl
eCk7CiB9CiAKLWlubGluZSBib29sIG1lbW9yeUZpbGwoSlNXZWJBc3NlbWJseUluc3RhbmNlKiBp
bnN0YW5jZSwgdWludDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3QgdGFyZ2V0VmFsdWUsIHVpbnQz
Ml90IGNvdW50KQoraW5saW5lIGJvb2wgbWVtb3J5RmlsbChJbnN0YW5jZSogaW5zdGFuY2UsIHVp
bnQzMl90IGRzdEFkZHJlc3MsIHVpbnQzMl90IHRhcmdldFZhbHVlLCB1aW50MzJfdCBjb3VudCkK
IHsKLSAgICByZXR1cm4gaW5zdGFuY2UtPm1lbW9yeSgpLT5tZW1vcnkoKS5maWxsKGRzdEFkZHJl
c3MsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHRhcmdldFZhbHVlKSwgY291bnQpOworICAgIHJldHVy
biBpbnN0YW5jZS0+bWVtb3J5KCktPmZpbGwoZHN0QWRkcmVzcywgc3RhdGljX2Nhc3Q8dWludDhf
dD4odGFyZ2V0VmFsdWUpLCBjb3VudCk7CiB9CiAKLWlubGluZSBib29sIG1lbW9yeUNvcHkoSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3QgZHN0QWRkcmVzcywgdWludDMy
X3Qgc3JjQWRkcmVzcywgdWludDMyX3QgY291bnQpCitpbmxpbmUgYm9vbCBtZW1vcnlDb3B5KElu
c3RhbmNlKiBpbnN0YW5jZSwgdWludDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3Qgc3JjQWRkcmVz
cywgdWludDMyX3QgY291bnQpCiB7Ci0gICAgcmV0dXJuIGluc3RhbmNlLT5tZW1vcnkoKS0+bWVt
b3J5KCkuY29weShkc3RBZGRyZXNzLCBzcmNBZGRyZXNzLCBjb3VudCk7CisgICAgcmV0dXJuIGlu
c3RhbmNlLT5tZW1vcnkoKS0+Y29weShkc3RBZGRyZXNzLCBzcmNBZGRyZXNzLCBjb3VudCk7CiB9
CiAKLWlubGluZSB2b2lkIGRhdGFEcm9wKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2Us
IHVuc2lnbmVkIGRhdGFTZWdtZW50SW5kZXgpCitpbmxpbmUgdm9pZCBkYXRhRHJvcChJbnN0YW5j
ZSogaW5zdGFuY2UsIHVuc2lnbmVkIGRhdGFTZWdtZW50SW5kZXgpCiB7CiAgICAgQVNTRVJUKGRh
dGFTZWdtZW50SW5kZXggPCBpbnN0YW5jZS0+bW9kdWxlKCkubW9kdWxlSW5mb3JtYXRpb24oKS5k
YXRhU2VnbWVudHNDb3VudCgpKTsKICAgICBpbnN0YW5jZS0+ZGF0YURyb3AoZGF0YVNlZ21lbnRJ
bmRleCk7CiB9CiAKLWlubGluZSB2b2lkIGVsZW1Ecm9wKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSog
aW5zdGFuY2UsIHVuc2lnbmVkIGVsZW1lbnRJbmRleCkKK2lubGluZSB2b2lkIGVsZW1Ecm9wKElu
c3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgZWxlbWVudEluZGV4KQogewogICAgIEFTU0VSVChl
bGVtZW50SW5kZXggPCBpbnN0YW5jZS0+bW9kdWxlKCkubW9kdWxlSW5mb3JtYXRpb24oKS5lbGVt
ZW50Q291bnQoKSk7CiAgICAgaW5zdGFuY2UtPmVsZW1Ecm9wKGVsZW1lbnRJbmRleCk7CkBAIC03
MjQsMTQgKzcyNywxNCBAQCBzdGF0aWMgaW5saW5lIGludDMyX3Qgd2FpdEltcGwoVk0mIHZtLCBW
YWx1ZVR5cGUqIHBvaW50ZXIsIFZhbHVlVHlwZSBleHBlY3RlZFZhbAogICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQzMl90PihXYWl0ZXJMaXN0TWFuYWdlcjo6c2luZ2xldG9uKCkud2FpdFN5bmMo
dm0sIHBvaW50ZXIsIGV4cGVjdGVkVmFsdWUsIHRpbWVvdXQpKTsKIH0KIAotaW5saW5lIGludDMy
X3QgbWVtb3J5QXRvbWljV2FpdDMyKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIHVp
bnQ2NF90IG9mZnNldEluTWVtb3J5LCBpbnQzMl90IHZhbHVlLCBpbnQ2NF90IHRpbWVvdXRJbk5h
bm9zZWNvbmRzKQoraW5saW5lIGludDMyX3QgbWVtb3J5QXRvbWljV2FpdDMyKEluc3RhbmNlKiBp
bnN0YW5jZSwgdWludDY0X3Qgb2Zmc2V0SW5NZW1vcnksIGludDMyX3QgdmFsdWUsIGludDY0X3Qg
dGltZW91dEluTmFub3NlY29uZHMpCiB7CiAgICAgVk0mIHZtID0gaW5zdGFuY2UtPnZtKCk7CiAg
ICAgaWYgKG9mZnNldEluTWVtb3J5ICYgKDB4NCAtIDEpKQogICAgICAgICByZXR1cm4gLTE7CiAg
ICAgaWYgKCFpbnN0YW5jZS0+bWVtb3J5KCkpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAo
b2Zmc2V0SW5NZW1vcnkgPj0gaW5zdGFuY2UtPm1lbW9yeSgpLT5tZW1vcnkoKS5zaXplKCkpCisg
ICAgaWYgKG9mZnNldEluTWVtb3J5ID49IGluc3RhbmNlLT5tZW1vcnkoKS0+c2l6ZSgpKQogICAg
ICAgICByZXR1cm4gLTE7CiAgICAgaWYgKGluc3RhbmNlLT5tZW1vcnkoKS0+c2hhcmluZ01vZGUo
KSAhPSBNZW1vcnlTaGFyaW5nTW9kZTo6U2hhcmVkKQogICAgICAgICByZXR1cm4gLTE7CkBAIC03
NDEsMTkgKzc0NCwxOSBAQCBpbmxpbmUgaW50MzJfdCBtZW1vcnlBdG9taWNXYWl0MzIoSlNXZWJB
c3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgdWludDY0X3Qgb2ZmcwogICAgIHJldHVybiB3YWl0
SW1wbDxpbnQzMl90Pih2bSwgcG9pbnRlciwgdmFsdWUsIHRpbWVvdXRJbk5hbm9zZWNvbmRzKTsK
IH0KIAotaW5saW5lIGludDMyX3QgbWVtb3J5QXRvbWljV2FpdDMyKEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGJhc2UsIHVuc2lnbmVkIG9mZnNldCwgaW50MzJfdCB2
YWx1ZSwgaW50NjRfdCB0aW1lb3V0SW5OYW5vc2Vjb25kcykKK2lubGluZSBpbnQzMl90IG1lbW9y
eUF0b21pY1dhaXQzMihJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGJhc2UsIHVuc2lnbmVk
IG9mZnNldCwgaW50MzJfdCB2YWx1ZSwgaW50NjRfdCB0aW1lb3V0SW5OYW5vc2Vjb25kcykKIHsK
ICAgICByZXR1cm4gbWVtb3J5QXRvbWljV2FpdDMyKGluc3RhbmNlLCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oYmFzZSkgKyBvZmZzZXQsIHZhbHVlLCB0aW1lb3V0SW5OYW5vc2Vjb25kcyk7CiB9CiAK
LWlubGluZSBpbnQzMl90IG1lbW9yeUF0b21pY1dhaXQ2NChKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
IGluc3RhbmNlLCB1aW50NjRfdCBvZmZzZXRJbk1lbW9yeSwgaW50NjRfdCB2YWx1ZSwgaW50NjRf
dCB0aW1lb3V0SW5OYW5vc2Vjb25kcykKK2lubGluZSBpbnQzMl90IG1lbW9yeUF0b21pY1dhaXQ2
NChJbnN0YW5jZSogaW5zdGFuY2UsIHVpbnQ2NF90IG9mZnNldEluTWVtb3J5LCBpbnQ2NF90IHZh
bHVlLCBpbnQ2NF90IHRpbWVvdXRJbk5hbm9zZWNvbmRzKQogewogICAgIFZNJiB2bSA9IGluc3Rh
bmNlLT52bSgpOwogICAgIGlmIChvZmZzZXRJbk1lbW9yeSAmICgweDggLSAxKSkKICAgICAgICAg
cmV0dXJuIC0xOwogICAgIGlmICghaW5zdGFuY2UtPm1lbW9yeSgpKQogICAgICAgICByZXR1cm4g
LTE7Ci0gICAgaWYgKG9mZnNldEluTWVtb3J5ID49IGluc3RhbmNlLT5tZW1vcnkoKS0+bWVtb3J5
KCkuc2l6ZSgpKQorICAgIGlmIChvZmZzZXRJbk1lbW9yeSA+PSBpbnN0YW5jZS0+bWVtb3J5KCkt
PnNpemUoKSkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGlmIChpbnN0YW5jZS0+bWVtb3J5KCkt
PnNoYXJpbmdNb2RlKCkgIT0gTWVtb3J5U2hhcmluZ01vZGU6OlNoYXJlZCkKICAgICAgICAgcmV0
dXJuIC0xOwpAQCAtNzYzLDE5ICs3NjYsMTkgQEAgaW5saW5lIGludDMyX3QgbWVtb3J5QXRvbWlj
V2FpdDY0KEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIHVpbnQ2NF90IG9mZnMKICAg
ICByZXR1cm4gd2FpdEltcGw8aW50NjRfdD4odm0sIHBvaW50ZXIsIHZhbHVlLCB0aW1lb3V0SW5O
YW5vc2Vjb25kcyk7CiB9CiAKLWlubGluZSBpbnQzMl90IG1lbW9yeUF0b21pY1dhaXQ2NChKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCBiYXNlLCB1bnNpZ25lZCBvZmZz
ZXQsIGludDY0X3QgdmFsdWUsIGludDY0X3QgdGltZW91dEluTmFub3NlY29uZHMpCitpbmxpbmUg
aW50MzJfdCBtZW1vcnlBdG9taWNXYWl0NjQoSW5zdGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCBi
YXNlLCB1bnNpZ25lZCBvZmZzZXQsIGludDY0X3QgdmFsdWUsIGludDY0X3QgdGltZW91dEluTmFu
b3NlY29uZHMpCiB7CiAgICAgcmV0dXJuIG1lbW9yeUF0b21pY1dhaXQ2NChpbnN0YW5jZSwgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KGJhc2UpICsgb2Zmc2V0LCB2YWx1ZSwgdGltZW91dEluTmFub3Nl
Y29uZHMpOwogfQogCi1pbmxpbmUgaW50MzJfdCBtZW1vcnlBdG9taWNOb3RpZnkoSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgYmFzZSwgdW5zaWduZWQgb2Zmc2V0LCBp
bnQzMl90IGNvdW50VmFsdWUpCitpbmxpbmUgaW50MzJfdCBtZW1vcnlBdG9taWNOb3RpZnkoSW5z
dGFuY2UqIGluc3RhbmNlLCB1bnNpZ25lZCBiYXNlLCB1bnNpZ25lZCBvZmZzZXQsIGludDMyX3Qg
Y291bnRWYWx1ZSkKIHsKICAgICB1aW50NjRfdCBvZmZzZXRJbk1lbW9yeSA9IHN0YXRpY19jYXN0
PHVpbnQ2NF90PihiYXNlKSArIG9mZnNldDsKICAgICBpZiAob2Zmc2V0SW5NZW1vcnkgJiAoMHg0
IC0gMSkpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBpZiAoIWluc3RhbmNlLT5tZW1vcnkoKSkK
ICAgICAgICAgcmV0dXJuIC0xOwotICAgIGlmIChvZmZzZXRJbk1lbW9yeSA+PSBpbnN0YW5jZS0+
bWVtb3J5KCktPm1lbW9yeSgpLnNpemUoKSkKKyAgICBpZiAob2Zmc2V0SW5NZW1vcnkgPj0gaW5z
dGFuY2UtPm1lbW9yeSgpLT5zaXplKCkpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBpZiAoaW5z
dGFuY2UtPm1lbW9yeSgpLT5zaGFyaW5nTW9kZSgpICE9IE1lbW9yeVNoYXJpbmdNb2RlOjpTaGFy
ZWQpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNzg3LDcgKzc5MCw3IEBAIGlubGluZSBpbnQzMl90
IG1lbW9yeUF0b21pY05vdGlmeShKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCB1bnNp
Z25lZCBiYXNlCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KFdhaXRlckxpc3RNYW5h
Z2VyOjpzaW5nbGV0b24oKS5ub3RpZnlXYWl0ZXIocG9pbnRlciwgY291bnQpKTsKIH0KIAotaW5s
aW5lIHZvaWQqIHRocm93V2FzbVRvSlNFeGNlcHRpb24oQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFdh
c206OkV4Y2VwdGlvblR5cGUgdHlwZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSkK
K2lubGluZSB2b2lkKiB0aHJvd1dhc21Ub0pTRXhjZXB0aW9uKENhbGxGcmFtZSogY2FsbEZyYW1l
LCBXYXNtOjpFeGNlcHRpb25UeXBlIHR5cGUsIEluc3RhbmNlKiBpbnN0YW5jZSkKIHsKICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gaW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCmluZGV4IDMx
MDdjZTUxYTc2My4uNzhhM2IzNTg1MmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtU2xvd1BhdGhzLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTktMjAyNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTktMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJXYXNtQ2Fs
bGVlLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCiAjaW5jbHVkZSAiV2Fz
bUZ1bmN0aW9uQ29kZUJsb2NrR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiV2FzbUluc3RhbmNlLmgi
CiAjaW5jbHVkZSAiV2FzbUxMSW50QnVpbHRpbi5oIgogI2luY2x1ZGUgIldhc21MTEludEdlbmVy
YXRvci5oIgogI2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgpAQCAtODgsNyArODks
NyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIExMSW50IHsKICNpZiBFTkFCTEUoV0VCQVNT
RU1CTFlfQkJRSklUKQogZW51bSBjbGFzcyBSZXF1aXJlZFdhc21KSVQgeyBBbnksIE9NRyB9Owog
Ci1leHRlcm4gIkMiIHZvaWQgU1lTVl9BQkkgd2FzbV9sb2dfY3Jhc2goQ2FsbEZyYW1lKiwgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSkKK2V4dGVybiAiQyIgdm9pZCBTWVNWX0FCSSB3
YXNtX2xvZ19jcmFzaChDYWxsRnJhbWUqLCBXYXNtOjpJbnN0YW5jZSogaW5zdGFuY2UpCiB7CiAg
ICAgZGF0YUxvZ0xuKCJSZWFjaGVkIExMSW50IGNvZGUgdGhhdCBzaG91bGQgbmV2ZXIgaGF2ZSBi
ZWVuIGV4ZWN1dGVkLiIpOwogICAgIGRhdGFMb2dMbigiTW9kdWxlIGludGVybmFsIGZ1bmN0aW9u
IGNvdW50OiAiLCBpbnN0YW5jZS0+bW9kdWxlKCkubW9kdWxlSW5mb3JtYXRpb24oKS5pbnRlcm5h
bEZ1bmN0aW9uQ291bnQoKSk7CkBAIC0xMTgsNyArMTE5LDcgQEAgc3RhdGljIGlubGluZSBib29s
IHNob3VsZEpJVChXYXNtOjpMTEludENhbGxlZSogY2FsbGVlLCBSZXF1aXJlZFdhc21KSVQgcmVx
dWlyZWQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGppdENvbXBp
bGVBbmRTZXRIZXVyaXN0aWNzKFdhc206OkxMSW50Q2FsbGVlKiBjYWxsZWUsIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSogaW5zdGFuY2UpCitzdGF0aWMgaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNl
dEhldXJpc3RpY3MoV2FzbTo6TExJbnRDYWxsZWUqIGNhbGxlZSwgV2FzbTo6SW5zdGFuY2UqIGlu
c3RhbmNlKQogewogICAgIEFTU0VSVCghaW5zdGFuY2UtPm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0
aW9uKCkudXNlc1NJTUQoY2FsbGVlLT5mdW5jdGlvbkluZGV4KCkpKTsKIApAQCAtMTczLDcgKzE3
NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhXYXNt
OjpMTEludENhbGxlZSogY2FsbGVlLCBKU1dlYkFzCiAgICAgcmV0dXJuICEhY2FsbGVlLT5yZXBs
YWNlbWVudChtZW1vcnlNb2RlKTsKIH0KIAotc3RhdGljIGlubGluZSBzdGQ6Om9wdGlvbmFsPFdh
c206OlBsYW46OkVycm9yPiBqaXRDb21waWxlU0lNREZ1bmN0aW9uKFdhc206OkxMSW50Q2FsbGVl
KiBjYWxsZWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCitzdGF0aWMgaW5saW5l
IHN0ZDo6b3B0aW9uYWw8V2FzbTo6UGxhbjo6RXJyb3I+IGppdENvbXBpbGVTSU1ERnVuY3Rpb24o
V2FzbTo6TExJbnRDYWxsZWUqIGNhbGxlZSwgV2FzbTo6SW5zdGFuY2UqIGluc3RhbmNlKQogewog
ICAgIFdhc206OkxMSW50VGllclVwQ291bnRlciYgdGllclVwQ291bnRlciA9IGNhbGxlZS0+dGll
clVwQ291bnRlcigpOwogCkBAIC02NjUsNyArNjY2LDcgQEAgV0FTTV9TTE9XX1BBVEhfREVDTChn
cm93X21lbW9yeSkKICAgICBXQVNNX1JFVFVSTihXYXNtOjpncm93TWVtb3J5KGluc3RhbmNlLCBk
ZWx0YSkpOwogfQogCi1zdGF0aWMgaW5saW5lIFVHUFJQYWlyIGRvV2FzbUNhbGwoUmVnaXN0ZXIq
IHBhcnRpYWxseUNvbnN0cnVjdGVkQ2FsbGVlRnJhbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSog
aW5zdGFuY2UsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgpCitzdGF0aWMgaW5saW5lIFVHUFJQYWly
IGRvV2FzbUNhbGwoUmVnaXN0ZXIqIHBhcnRpYWxseUNvbnN0cnVjdGVkQ2FsbGVlRnJhbWUsIFdh
c206Okluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgZnVuY3Rpb25JbmRleCkKIHsKICAgICB1
aW50MzJfdCBpbXBvcnRGdW5jdGlvbkNvdW50ID0gaW5zdGFuY2UtPm1vZHVsZSgpLm1vZHVsZUlu
Zm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25Db3VudCgpOwogCkBAIC02NzMsNyArNjc0LDcgQEAg
c3RhdGljIGlubGluZSBVR1BSUGFpciBkb1dhc21DYWxsKFJlZ2lzdGVyKiBwYXJ0aWFsbHlDb25z
dHJ1Y3RlZENhbGxlZUZyYW1lLCBKU1cKICAgICBFbmNvZGVkSlNWYWx1ZSBib3hlZENhbGxlZSA9
IENhbGxlZUJpdHM6OmVuY29kZU51bGxDYWxsZWUoKTsKIAogICAgIGlmIChmdW5jdGlvbkluZGV4
IDwgaW1wb3J0RnVuY3Rpb25Db3VudCkgewotICAgICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6
OkltcG9ydEZ1bmN0aW9uSW5mbyogZnVuY3Rpb25JbmZvID0gaW5zdGFuY2UtPmltcG9ydEZ1bmN0
aW9uSW5mbyhmdW5jdGlvbkluZGV4KTsKKyAgICAgICAgV2FzbTo6SW5zdGFuY2U6OkltcG9ydEZ1
bmN0aW9uSW5mbyogZnVuY3Rpb25JbmZvID0gaW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uSW5mbyhm
dW5jdGlvbkluZGV4KTsKICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uSW5mby0+aW1wb3J0RnVu
Y3Rpb25TdHViOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFRhcmdldCBpcyBhIHdhc20gZnVu
Y3Rpb24gd2l0aGluIHRoZSBzYW1lIGluc3RhbmNlCkBAIC02OTYsNyArNjk3LDcgQEAgV0FTTV9T
TE9XX1BBVEhfREVDTChjYWxsKQogICAgIHJldHVybiBkb1dhc21DYWxsKHBhcnRpYWxseUNvbnN0
cnVjdGVkQ2FsbGVlRnJhbWUsIGluc3RhbmNlLCBpbnN0cnVjdGlvbi5tX2Z1bmN0aW9uSW5kZXgp
OwogfQogCi1zdGF0aWMgaW5saW5lIFVHUFJQYWlyIGRvV2FzbUNhbGxJbmRpcmVjdChSZWdpc3Rl
ciogcGFydGlhbGx5Q29uc3RydWN0ZWRDYWxsZWVGcmFtZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgs
IHVuc2lnbmVkIHRhYmxlSW5kZXgsIHVuc2lnbmVkIHR5cGVJbmRleCkKK3N0YXRpYyBpbmxpbmUg
VUdQUlBhaXIgZG9XYXNtQ2FsbEluZGlyZWN0KFJlZ2lzdGVyKiBwYXJ0aWFsbHlDb25zdHJ1Y3Rl
ZENhbGxlZUZyYW1lLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgV2FzbTo6SW5zdGFuY2UqIGluc3Rh
bmNlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCB1bnNpZ25lZCB0YWJsZUluZGV4LCB1bnNpZ25l
ZCB0eXBlSW5kZXgpCiB7CiAgICAgV2FzbTo6RnVuY1JlZlRhYmxlKiB0YWJsZSA9IGluc3RhbmNl
LT50YWJsZSh0YWJsZUluZGV4KS0+YXNGdW5jcmVmVGFibGUoKTsKIApAQCAtNzMwLDcgKzczMSw3
IEBAIFdBU01fU0xPV19QQVRIX0RFQ0woY2FsbF9pbmRpcmVjdCkKICAgICByZXR1cm4gZG9XYXNt
Q2FsbEluZGlyZWN0KHBhcnRpYWxseUNvbnN0cnVjdGVkQ2FsbGVlRnJhbWUsIGNhbGxGcmFtZSwg
aW5zdGFuY2UsIGZ1bmN0aW9uSW5kZXgsIGluc3RydWN0aW9uLm1fdGFibGVJbmRleCwgaW5zdHJ1
Y3Rpb24ubV90eXBlSW5kZXgpOwogfQogCi1zdGF0aWMgaW5saW5lIFVHUFJQYWlyIGRvV2FzbUNh
bGxSZWYoUmVnaXN0ZXIqIHBhcnRpYWxseUNvbnN0cnVjdGVkQ2FsbGVlRnJhbWUsIENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGNhbGxlckluc3RhbmNlLCBKU1Zh
bHVlIHRhcmdldFJlZmVyZW5jZSwgdW5zaWduZWQgdHlwZUluZGV4KQorc3RhdGljIGlubGluZSBV
R1BSUGFpciBkb1dhc21DYWxsUmVmKFJlZ2lzdGVyKiBwYXJ0aWFsbHlDb25zdHJ1Y3RlZENhbGxl
ZUZyYW1lLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgV2FzbTo6SW5zdGFuY2UqIGNhbGxlckluc3Rh
bmNlLCBKU1ZhbHVlIHRhcmdldFJlZmVyZW5jZSwgdW5zaWduZWQgdHlwZUluZGV4KQogewogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsZXJJbnN0YW5j
ZSk7CkBAIC03NDQsNyArNzQ1LDcgQEAgc3RhdGljIGlubGluZSBVR1BSUGFpciBkb1dhc21DYWxs
UmVmKFJlZ2lzdGVyKiBwYXJ0aWFsbHlDb25zdHJ1Y3RlZENhbGxlZUZyYW1lLAogICAgIEFTU0VS
VChyZWZlcmVuY2VBc09iamVjdC0+aW5oZXJpdHM8V2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U+KCkp
OwogICAgIGF1dG8qIHdhc21GdW5jdGlvbiA9IGpzQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uQmFz
ZSo+KHJlZmVyZW5jZUFzT2JqZWN0KTsKICAgICBXYXNtOjpXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1
bmN0aW9uIGZ1bmN0aW9uID0gd2FzbUZ1bmN0aW9uLT5pbXBvcnRhYmxlRnVuY3Rpb24oKTsKLSAg
ICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGNhbGxlZUluc3RhbmNlID0gd2FzbUZ1bmN0aW9uLT5p
bnN0YW5jZSgpOworICAgIFdhc206Okluc3RhbmNlKiBjYWxsZWVJbnN0YW5jZSA9ICZ3YXNtRnVu
Y3Rpb24tPmluc3RhbmNlKCktPmluc3RhbmNlKCk7CiAKICAgICBSZWdpc3RlciYgY2FsbGVlU3Rh
Y2tTbG90ID0gcGFydGlhbGx5Q29uc3RydWN0ZWRDYWxsZWVGcmFtZVtzdGF0aWNfY2FzdDxpbnQ+
KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldOwogICAgIEFTU0VSVChjYWxsZWVTdGFja1Nsb3QudW5i
b3hlZEludDY0KCkgPT0gMHhCRUVGKTsKQEAgLTgxNyw3ICs4MTgsNyBAQCBXQVNNX1NMT1dfUEFU
SF9ERUNMKGNhbGxfYnVpbHRpbikKIAogICAgIHN3aXRjaCAoYnVpbHRpbikgewogICAgIGNhc2Ug
V2FzbTo6TExJbnRCdWlsdGluOjpDdXJyZW50TWVtb3J5OiB7Ci0gICAgICAgIHNpemVfdCBzaXpl
ID0gaW5zdGFuY2UtPm1lbW9yeSgpLT5tZW1vcnkoKS5oYW5kbGUoKS5zaXplKCkgPj4gMTY7Cisg
ICAgICAgIHNpemVfdCBzaXplID0gaW5zdGFuY2UtPm1lbW9yeSgpLT5oYW5kbGUoKS5zaXplKCkg
Pj4gMTY7CiAgICAgICAgIGdwclN0YXJ0WzBdID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWU+
KHNpemUpOwogICAgICAgICBXQVNNX0VORCgpOwogICAgIH0KQEAgLTEzMTgsNyArMTMxOSw3IEBA
IFdBU01fU0xPV19QQVRIX0RFQ0woaTY0X3RydW5jX3NhdF9mNjRfcykKIH0KICNlbmRpZgogCi1l
eHRlcm4gIkMiIFVHUFJQYWlyIFNZU1ZfQUJJIHNsb3dfcGF0aF93YXNtX3Rocm93X2V4Y2VwdGlv
bihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwg
V2FzbTo6RXhjZXB0aW9uVHlwZSBleGNlcHRpb25UeXBlKQorZXh0ZXJuICJDIiBVR1BSUGFpciBT
WVNWX0FCSSBzbG93X3BhdGhfd2FzbV90aHJvd19leGNlcHRpb24oQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIFdhc206Okluc3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6RXhjZXB0aW9uVHlwZSBleGNlcHRp
b25UeXBlKQogewogICAgIFNsb3dQYXRoRnJhbWVUcmFjZXIgdHJhY2VyKGluc3RhbmNlLT52bSgp
LCBjYWxsRnJhbWUpOwogICAgIFdBU01fUkVUVVJOX1RXTyhXYXNtOjp0aHJvd1dhc21Ub0pTRXhj
ZXB0aW9uKGNhbGxGcmFtZSwgZXhjZXB0aW9uVHlwZSwgaW5zdGFuY2UpLCBudWxscHRyKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuaAppbmRleCA0NGJlOTI2OTc4
ODcuLmQxYzY0Mzg4MmFlOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVNsb3dQYXRocy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93
UGF0aHMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00MCwxMiArNDAsMTQgQEAgdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBCYXNlSW5z
dHJ1Y3Rpb247CiBzdHJ1Y3QgV2FzbU9wY29kZVRyYWl0czsKIHVzaW5nIFdhc21JbnN0cnVjdGlv
biA9IEJhc2VJbnN0cnVjdGlvbjxXYXNtT3Bjb2RlVHJhaXRzPjsKIAotY2xhc3MgSlNXZWJBc3Nl
bWJseUluc3RhbmNlOworbmFtZXNwYWNlIFdhc20geworY2xhc3MgSW5zdGFuY2U7Cit9CiAKIG5h
bWVzcGFjZSBMTEludCB7CiAKICNkZWZpbmUgV0FTTV9TTE9XX1BBVEhfREVDTChuYW1lKSBcCi0g
ICAgZXh0ZXJuICJDIiBVR1BSUGFpciBTWVNWX0FCSSBzbG93X3BhdGhfd2FzbV8jI25hbWUoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IFdhc21JbnN0cnVjdGlvbiogcGMsIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSogaW5zdGFuY2UpCisgICAgZXh0ZXJuICJDIiBVR1BSUGFpciBTWVNWX0FCSSBz
bG93X3BhdGhfd2FzbV8jI25hbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IFdhc21JbnN0
cnVjdGlvbiogcGMsIFdhc206Okluc3RhbmNlKiBpbnN0YW5jZSkKIAogI2RlZmluZSBXQVNNX1NM
T1dfUEFUSF9ISURERU5fREVDTChuYW1lKSBcCiAgICAgV0FTTV9TTE9XX1BBVEhfREVDTChuYW1l
KSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdURl9JTlRFUk5BTApAQCAtOTIsOCArOTQsOCBAQCBXQVNN
X1NMT1dfUEFUSF9ISURERU5fREVDTChzdHJ1Y3RfbmV3KTsKIFdBU01fU0xPV19QQVRIX0hJRERF
Tl9ERUNMKHN0cnVjdF9nZXQpOwogV0FTTV9TTE9XX1BBVEhfSElEREVOX0RFQ0woc3RydWN0X3Nl
dCk7CiAKLWV4dGVybiAiQyIgTk9fUkVUVVJOIHZvaWQgU1lTVl9BQkkgd2FzbV9sb2dfY3Jhc2go
Q2FsbEZyYW1lKiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSkgUkVGRVJFTkNFRF9G
Uk9NX0FTTSBXVEZfSU5URVJOQUw7Ci1leHRlcm4gIkMiIFVHUFJQYWlyIFNZU1ZfQUJJIHNsb3df
cGF0aF93YXNtX3Rocm93X2V4Y2VwdGlvbihDYWxsRnJhbWUqLCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqIGluc3RhbmNlLCBXYXNtOjpFeGNlcHRpb25UeXBlKSBSRUZFUkVOQ0VEX0ZST01fQVNNIFdU
Rl9JTlRFUk5BTDsKK2V4dGVybiAiQyIgTk9fUkVUVVJOIHZvaWQgU1lTVl9BQkkgd2FzbV9sb2df
Y3Jhc2goQ2FsbEZyYW1lKiwgV2FzbTo6SW5zdGFuY2UqIGluc3RhbmNlKSBSRUZFUkVOQ0VEX0ZS
T01fQVNNIFdURl9JTlRFUk5BTDsKK2V4dGVybiAiQyIgVUdQUlBhaXIgU1lTVl9BQkkgc2xvd19w
YXRoX3dhc21fdGhyb3dfZXhjZXB0aW9uKENhbGxGcmFtZSosIFdhc206Okluc3RhbmNlKiBpbnN0
YW5jZSwgV2FzbTo6RXhjZXB0aW9uVHlwZSkgUkVGRVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJO
QUw7CiBleHRlcm4gIkMiIFVHUFJQYWlyIFNZU1ZfQUJJIHNsb3dfcGF0aF93YXNtX3BvcGNvdW50
KGNvbnN0IFdhc21JbnN0cnVjdGlvbiogcGMsIHVpbnQzMl90KSBSRUZFUkVOQ0VEX0ZST01fQVNN
IFdURl9JTlRFUk5BTDsKIGV4dGVybiAiQyIgVUdQUlBhaXIgU1lTVl9BQkkgc2xvd19wYXRoX3dh
c21fcG9wY291bnRsbChjb25zdCBXYXNtSW5zdHJ1Y3Rpb24qIHBjLCB1aW50NjRfdCkgUkVGRVJF
TkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtVGFibGUuY3BwCmluZGV4IDIwYjA1MmYyMzY4OC4uZGY3M2ZiOWE5MzI3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAKQEAgLTI4OCw3ICsyODgsNyBAQCBSZWY8
RnVuY1JlZlRhYmxlPiBGdW5jUmVmVGFibGU6OmNyZWF0ZUZpeGVkU2l6ZWQodWludDMyX3Qgc2l6
ZSwgVHlwZSB3YXNtVHlwZSkKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyAoTm90TnVsbCwgZmFz
dE1hbGxvYyhhbGxvY2F0aW9uU2l6ZShhbGxvY2F0ZWRMZW5ndGgoc2l6ZSkpKSkgRnVuY1JlZlRh
YmxlKHNpemUsIHNpemUsIHdhc21UeXBlKSk7CiB9CiAKLXZvaWQgRnVuY1JlZlRhYmxlOjpzZXRG
dW5jdGlvbih1aW50MzJfdCBpbmRleCwgSlNPYmplY3QqIG9wdGlvbmFsV3JhcHBlciwgV2FzbVRv
V2FzbUltcG9ydGFibGVGdW5jdGlvbiBmdW5jdGlvbiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBp
bnN0YW5jZSkKK3ZvaWQgRnVuY1JlZlRhYmxlOjpzZXRGdW5jdGlvbih1aW50MzJfdCBpbmRleCwg
SlNPYmplY3QqIG9wdGlvbmFsV3JhcHBlciwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiBm
dW5jdGlvbiwgSW5zdGFuY2UqIGluc3RhbmNlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4
IDwgbGVuZ3RoKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1fb3duZXIpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtVGFibGUuaAppbmRleCBmODE3M2VjZDEzM2UuLmIyNmIyODU4NDYxZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Miw2ICs0Miw3IEBA
IGNsYXNzIEpTV2ViQXNzZW1ibHlUYWJsZTsKIAogbmFtZXNwYWNlIFdhc20gewogCitjbGFzcyBJ
bnN0YW5jZTsKIGNsYXNzIEZ1bmNSZWZUYWJsZTsKIAogY2xhc3MgVGFibGUgOiBwdWJsaWMgVGhy
ZWFkU2FmZVJlZkNvdW50ZWQ8VGFibGU+IHsKQEAgLTEyNiwxMCArMTI3LDEwIEBAIHB1YmxpYzoK
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5GdW5jUmVmVGFibGUoKTsKIAotICAgIC8vIGNhbGxf
aW5kaXJlY3QgbmVlZHMgdG8gZG8gYW4gSW5zdGFuY2UgY2hlY2sgdG8gcG90ZW50aWFsbHkgY29u
dGV4dCBzd2l0Y2ggd2hlbiBjYWxsaW5nIGEgZnVuY3Rpb24gdG8gYW5vdGhlciBpbnN0YW5jZS4g
V2UgY2FuIGhvbGQgcmF3IHBvaW50ZXJzIHRvIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSBoZXJlIGJl
Y2F1c2UgdGhlIGpzIGVuc3VyZXMgdGhhdCBUYWJsZSBrZWVwcyBhbGwgdGhlIGluc3RhbmNlcyBh
bGl2ZS4KKyAgICAvLyBjYWxsX2luZGlyZWN0IG5lZWRzIHRvIGRvIGFuIEluc3RhbmNlIGNoZWNr
IHRvIHBvdGVudGlhbGx5IGNvbnRleHQgc3dpdGNoIHdoZW4gY2FsbGluZyBhIGZ1bmN0aW9uIHRv
IGFub3RoZXIgaW5zdGFuY2UuIFdlIGNhbiBob2xkIHJhdyBwb2ludGVycyB0byBJbnN0YW5jZSBo
ZXJlIGJlY2F1c2UgdGhlIGpzIGVuc3VyZXMgdGhhdCBUYWJsZSBrZWVwcyBhbGwgdGhlIGluc3Rh
bmNlcyBhbGl2ZS4gV2UgY291bGRuJ3QgaG9sZCBhIFJlZiBoZXJlIGJlY2F1c2UgaXQgd291bGQg
Y2F1c2UgY3ljbGVzLgogICAgIHN0cnVjdCBGdW5jdGlvbiB7CiAgICAgICAgIFdhc21Ub1dhc21J
bXBvcnRhYmxlRnVuY3Rpb24gbV9mdW5jdGlvbjsKLSAgICAgICAgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBtX2luc3RhbmNlIHsgbnVsbHB0ciB9OworICAgICAgICBJbnN0YW5jZSogbV9pbnN0YW5j
ZSB7IG51bGxwdHIgfTsKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fdmFsdWUgeyBO
dWxsV3JpdGVCYXJyaWVyVGFnIH07CiAKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZm
X3Qgb2Zmc2V0T2ZGdW5jdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGdW5jdGlvbiwg
bV9mdW5jdGlvbik7IH0KQEAgLTEzNyw3ICsxMzgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHN0YXRp
YyBjb25zdGV4cHIgcHRyZGlmZl90IG9mZnNldE9mVmFsdWUoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoRnVuY3Rpb24sIG1fdmFsdWUpOyB9CiAgICAgfTsKIAotICAgIHZvaWQgc2V0RnVuY3Rp
b24odWludDMyX3QsIEpTT2JqZWN0KiwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiwgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKik7CisgICAgdm9pZCBzZXRGdW5jdGlvbih1aW50MzJfdCwgSlNP
YmplY3QqLCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uLCBJbnN0YW5jZSopOwogICAgIGNv
bnN0IEZ1bmN0aW9uJiBmdW5jdGlvbih1aW50MzJfdCkgY29uc3Q7CiAgICAgdm9pZCBjb3B5RnVu
Y3Rpb24oY29uc3QgRnVuY1JlZlRhYmxlKiBzcmNUYWJsZSwgdWludDMyX3QgZHN0SW5kZXgsIHVp
bnQzMl90IHNyY0luZGV4KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVRodW5rcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGh1bmtz
LmNwcAppbmRleCA1ODUwYWNhN2JiMDguLjliNDE1YTNmYjA4NiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVRodW5rcy5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJQ
cm9iZUNvbnRleHQuaCIKICNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNp
bmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgorI2luY2x1ZGUgIldhc21JbnN0YW5jZS5oIgog
I2luY2x1ZGUgIldhc21PcGVyYXRpb25zLmgiCiAjaW5jbHVkZSA8d3RmL1Rab25lTWFsbG9jSW5s
aW5lcy5oPgogCkBAIC01MSw3ICs1Miw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gdGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKGNvbnN0CiAgICAg
Ly8gVGhlIHRoaW5nIHRoYXQganVtcHMgaGVyZSBtdXN0IG1vdmUgRXhjZXB0aW9uVHlwZSBpbnRv
IHRoZSBhcmd1bWVudEdQUjEgYmVmb3JlIGp1bXBpbmcgaGVyZS4KICAgICAvLyBXZSdyZSBhbGxv
d2VkIHRvIHVzZSB0ZW1wIHJlZ2lzdGVycyBoZXJlLiBXZSBhcmUgbm90IGFsbG93ZWQgdG8gdXNl
IGNhbGxlZSBzYXZlcy4KICAgICBqaXQubW92ZShHUFJJbmZvOjp3YXNtQ29udGV4dEluc3RhbmNl
UG9pbnRlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6Om9mZnNldE9mVk0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgSW5zdGFuY2U6
Om9mZnNldE9mVk0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CiAgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmFyZ3VtZW50R1BSMiwgVk06OnRvcEVudHJ5
RnJhbWVPZmZzZXQoKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CiAgICAgaml0LmNvcHlDYWxs
ZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEdQUkluZm86OmFyZ3VtZW50R1BS
Mik7CiAKQEAgLTEzMiw3ICsxMzMsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGNhdGNoSW5XYXNtVGh1bmtHZW5lcmF0b3IoY29uc3QgQWJzdHJhY3RMbwogCiAgICAg
aXNXYXNtQ2FsbGVlLmxpbmsoJmppdCk7CiAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjph
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIEdQUkluZm86OnJlZ1QwKTsKLSAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZWTSgpKSwgR1BSSW5mbzo6cmVnVDApOworICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgSW5zdGFuY2U6
Om9mZnNldE9mVk0oKSksIEdQUkluZm86OnJlZ1QwKTsKIAogICAgIGRvbmVDYXNlcy5saW5rKCZq
aXQpOwogCkBAIC0xODAsNyArMTgxLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBjYXRjaEluV2FzbVRodW5rR2VuZXJhdG9yKGNvbnN0IEFic3RyYWN0TG8KIAogICAg
IGlzV2FzbUNhbGxlZS5saW5rKCZqaXQpOwogICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBHUFJJbmZvOjpyZWdUMCk7Ci0g
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mVk0oKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEluc3RhbmNl
OjpvZmZzZXRPZlZNKCkpLCBHUFJJbmZvOjpyZWdUMCk7CiAKICAgICBpc0pTQ2FsbGVlLmxpbmso
JmppdCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9X
YXNtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcAppbmRl
eCBjYjkzOGJiOWVmMTUuLjA0MGU3ZWYyNmE0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTVG9XYXNtLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzMCwxMiArMzMwLDEyIEBAIHN0ZDo6dW5pcXVlX3B0
cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ0NhbGxIZWxwZXJzJiBq
aXQsIEpTRW50CiAgICAgICAgIGlmIChpc0FSTTY0RSgpKSB7CiAgICAgICAgICAgICBpZiAobW9k
ZSA9PSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykKICAgICAgICAgICAgICAgICBzaXplID0g
R1BSSW5mbzo6d2FzbUJvdW5kc0NoZWNraW5nU2l6ZVJlZ2lzdGVyOwotICAgICAgICAgICAgaml0
LmxvYWRQYWlyUHRyKEdQUkluZm86Ondhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyLCBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVk
TWVtb3J5KCkpLCBHUFJJbmZvOjp3YXNtQmFzZU1lbW9yeVBvaW50ZXIsIHNpemUpOworICAgICAg
ICAgICAgaml0LmxvYWRQYWlyUHRyKEdQUkluZm86Ondhc21Db250ZXh0SW5zdGFuY2VQb2ludGVy
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNo
ZWRNZW1vcnkoKSksIEdQUkluZm86Ondhc21CYXNlTWVtb3J5UG9pbnRlciwgc2l6ZSk7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAobW9kZSA9PSBNZW1vcnlNb2RlOjpCb3VuZHND
aGVja2luZykKLSAgICAgICAgICAgICAgICBqaXQubG9hZFBhaXJQdHIoR1BSSW5mbzo6d2FzbUNv
bnRleHRJbnN0YW5jZVBvaW50ZXIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIEdQUkluZm86Ondhc21CYXNl
TWVtb3J5UG9pbnRlciwgR1BSSW5mbzo6d2FzbUJvdW5kc0NoZWNraW5nU2l6ZVJlZ2lzdGVyKTsK
KyAgICAgICAgICAgICAgICBqaXQubG9hZFBhaXJQdHIoR1BSSW5mbzo6d2FzbUNvbnRleHRJbnN0
YW5jZVBvaW50ZXIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFdhc206Okluc3RhbmNlOjpv
ZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgR1BSSW5mbzo6d2FzbUJhc2VNZW1vcnlQb2ludGVyLCBH
UFJJbmZvOjp3YXNtQm91bmRzQ2hlY2tpbmdTaXplUmVnaXN0ZXIpOwogICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjp3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlciwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpv
ZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgR1BSSW5mbzo6d2FzbUJhc2VNZW1vcnlQb2ludGVyKTsK
KyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIsIFdhc206Okluc3RhbmNlOjpvZmZzZXRPZkNh
Y2hlZE1lbW9yeSgpKSwgR1BSSW5mbzo6d2FzbUJhc2VNZW1vcnlQb2ludGVyKTsKICAgICAgICAg
fQogICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgR1BS
SW5mbzo6d2FzbUJhc2VNZW1vcnlQb2ludGVyLCBzaXplLCBzY3JhdGNoKTsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHkuY3BwCmluZGV4IDUz
ZGE2M2Q5NjI4Zi4uNDA4NDgwNzBjOTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcApAQCAtMTczLDcgKzE3Myw3IEBAIHN0YXRpYyB2b2lk
IGluc3RhbnRpYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNQcm9t
aXNlKiBwcm9taXNlCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIHBvdGVudGlhbGx5IHJlY29tcGlsaW5nIGEgbW9kdWxl
LiBXZSBmaXJzdCBnYXRoZXIgYWxsIHRoZSBpbXBvcnQvbWVtb3J5IGluZm9ybWF0aW9uIHByaW9y
IHRvIGNvbXBpbGluZyBjb2RlLgogICAgIC8vIFdoZW4gY2FsbGVkIHZpYSB0aGUgbW9kdWxlIGxv
YWRlciwgdGhlIG1lbW9yeSBpcyBub3QgYXZhaWxhYmxlIHlldCBhdCB0aGlzIHN0ZXAsIHNvIHdl
IHNraXAgaW5pdGlhbGl6aW5nIHRoZSBtZW1vcnkgaGVyZS4KLSAgICBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIGluc3RhbmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjp0cnlDcmVhdGUodm0sIGds
b2JhbE9iamVjdC0+d2ViQXNzZW1ibHlJbnN0YW5jZVN0cnVjdHVyZSgpLCBnbG9iYWxPYmplY3Qs
IG1vZHVsZUtleSwgbW9kdWxlLCBpbXBvcnRPYmplY3QsIGNyZWF0aW9uTW9kZSk7CisgICAgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSA9IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dHJ5
Q3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIG1vZHVsZUtleSwgbW9kdWxlLCBpbXBvcnRPYmplY3Qs
IGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlJbnN0YW5jZVN0cnVjdHVyZSgpLCBSZWY8V2FzbTo6
TW9kdWxlPihtb2R1bGUtPm1vZHVsZSgpKSwgY3JlYXRpb25Nb2RlKTsKICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIHByb21pc2UtPnJlamVjdFdpdGhDYXVn
aHRFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAgIHJldHVybjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5j
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFu
Y2UuY3BwCmluZGV4IDAzYTNiMTIxY2Y0Yy4uZDEwMjYzNDI5NzRiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMiwyNCArMzIsMTYgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29tcGls
ZUVycm9yLmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseUhlbHBlcnMuaCIKICNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5TGlua0Vycm9yLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5o
IgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKLSNpbmNsdWRlICJSZWdpc3Rlci5o
IgotI2luY2x1ZGUgIldhc21Db25zdEV4cHJHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJXYXNtTW9k
dWxlSW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJXYXNtVGFnLmgiCi0jaW5jbHVkZSAiV2FzbVR5
cGVEZWZpbml0aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
LmgiCi0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CiAjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L01ha2VTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIEpTQyB7CiAKLXVzaW5nIG5hbWVzcGFjZSBXYXNtOwotCiBjb25zdCBDbGFzc0luZm8gSlNX
ZWJBc3NlbWJseUluc3RhbmNlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5JbnN0YW5jZSJfcywg
JkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dl
YkFzc2VtYmx5SW5zdGFuY2UpIH07CiAKIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseUluc3RhbmNl
OjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKQEAgLTU3LDY0ICs0OSwyOCBAQCBTdHJ1Y3R1cmUqIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbAogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKFdlYkFzc2VtYmx5SW5zdGFuY2VUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7CiB9CiAKLUpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6SlNXZWJBc3NlbWJseUluc3Rh
bmNlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1v
ZHVsZSwgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqIG1vZHVsZVJlY29yZCkKK0pTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6SlNXZWJBc3NlbWJseUluc3RhbmNlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFJlZjxXYXNtOjpJbnN0YW5jZT4mJiBpbnN0YW5jZSwgSlNXZWJBc3NlbWJseU1vZHVs
ZSogbW9kdWxlLCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkKQogICAgIDog
QmFzZSh2bSwgc3RydWN0dXJlKQorICAgICwgbV9pbnN0YW5jZShXVEZNb3ZlKGluc3RhbmNlKSkK
ICAgICAsIG1fdm0oJnZtKQotICAgICwgbV9qc01vZHVsZShtb2R1bGUsIFdyaXRlQmFycmllckVh
cmx5SW5pdCkKKyAgICAsIG1fZ2xvYmFsT2JqZWN0KHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCks
IFdyaXRlQmFycmllckVhcmx5SW5pdCkKKyAgICAsIG1fbW9kdWxlKG1vZHVsZSwgV3JpdGVCYXJy
aWVyRWFybHlJbml0KQogICAgICwgbV9tb2R1bGVSZWNvcmQobW9kdWxlUmVjb3JkLCBXcml0ZUJh
cnJpZXJFYXJseUluaXQpCi0gICAgLCBtX3RhYmxlcyhtb2R1bGUtPm1vZHVsZSgpLm1vZHVsZUlu
Zm9ybWF0aW9uKCkudGFibGVDb3VudCgpKQotICAgICwgbV9zb2Z0U3RhY2tMaW1pdCh2bS5zb2Z0
U3RhY2tMaW1pdCgpKQotICAgICwgbV9tb2R1bGUobW9kdWxlLT5tb2R1bGUoKSkKLSAgICAsIG1f
Z2xvYmFsc1RvTWFyayhtX21vZHVsZS5nZXQoKS5tb2R1bGVJbmZvcm1hdGlvbigpLmdsb2JhbENv
dW50KCkpCi0gICAgLCBtX2dsb2JhbHNUb0JpbmRpbmcobV9tb2R1bGUuZ2V0KCkubW9kdWxlSW5m
b3JtYXRpb24oKS5nbG9iYWxDb3VudCgpKQotICAgICwgbV9udW1JbXBvcnRGdW5jdGlvbnMobV9t
b2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25Db3VudCgpKQotICAgICwg
bV9wYXNzaXZlRWxlbWVudHMobV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuZWxlbWVudENv
dW50KCkpCi0gICAgLCBtX3Bhc3NpdmVEYXRhU2VnbWVudHMobV9tb2R1bGUtPm1vZHVsZUluZm9y
bWF0aW9uKCkuZGF0YVNlZ21lbnRzQ291bnQoKSkKLSAgICAsIG1fdGFncyhtX21vZHVsZS0+bW9k
dWxlSW5mb3JtYXRpb24oKS5leGNlcHRpb25JbmRleFNwYWNlU2l6ZSgpKQorICAgICwgbV90YWJs
ZXMobV9pbnN0YW5jZS0+bW9kdWxlKCkubW9kdWxlSW5mb3JtYXRpb24oKS50YWJsZUNvdW50KCkp
CiB7Ci0gICAgc3RhdGljX2Fzc2VydChzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSArIHNpemVvZih2b2lkKikpID09IEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRCb3VuZHNDaGVja2luZ1NpemUoKSk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbnVtSW1wb3J0RnVuY3Rpb25zOyArK2kp
IHsKLSAgICAgICAgYXV0byogaW5mbyA9IG5ldyAoaW1wb3J0RnVuY3Rpb25JbmZvKGkpKSBJbXBv
cnRGdW5jdGlvbkluZm8oKTsKLSAgICAgICAgaW5mby0+Y2FsbExpbmtJbmZvLmluaXRpYWxpemUo
dm0sIG51bGxwdHIsIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGU6OkNhbGwsIENvZGVPcmlnaW4geyB9
KTsKLSAgICB9Ci0gICAgbV9nbG9iYWxzID0gYml0d2lzZV9jYXN0PEdsb2JhbDo6VmFsdWUqPihi
aXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZHbG9iYWxQdHIobV9udW1JbXBvcnRG
dW5jdGlvbnMsIG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLnRhYmxlQ291bnQoKSwgMCkp
OwotICAgIG1lbXNldChiaXR3aXNlX2Nhc3Q8Y2hhcio+KG1fZ2xvYmFscyksIDAsIG1fbW9kdWxl
LT5tb2R1bGVJbmZvcm1hdGlvbigpLmdsb2JhbENvdW50KCkgKiBzaXplb2YoR2xvYmFsOjpWYWx1
ZSkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21vZHVsZS0+bW9kdWxlSW5mb3Jt
YXRpb24oKS5nbG9iYWxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEdsb2JhbEluZm9y
bWF0aW9uJiBnbG9iYWwgPSBtX21vZHVsZS5nZXQoKS5tb2R1bGVJbmZvcm1hdGlvbigpLmdsb2Jh
bHNbaV07Ci0gICAgICAgIGlmIChnbG9iYWwuYmluZGluZ01vZGUgPT0gR2xvYmFsSW5mb3JtYXRp
b246OkJpbmRpbmdNb2RlOjpQb3J0YWJsZSkgewotICAgICAgICAgICAgLy8gVGhpcyBpcyBrZXB0
IGFsaXZlIGJ5IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSAtPiBKU1dlYkFzc2VtYmx5R2xvYmFsIC0+
IGJpbmRpbmcuCi0gICAgICAgICAgICBtX2dsb2JhbHNUb0JpbmRpbmcuc2V0KGkpOwotICAgICAg
ICB9IGVsc2UgaWYgKGlzUmVmVHlwZShnbG9iYWwudHlwZSkpIHsKLSAgICAgICAgICAgIC8vIFRo
aXMgaXMga2VwdCBhbGl2ZSBieSBKU1dlYkFzc2VtYmx5SW5zdGFuY2UgLT4gYmluZGluZy4KLSAg
ICAgICAgICAgIG1fZ2xvYmFsc1RvTWFyay5zZXQoaSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
bWVtc2V0KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZlRhYmxlUHRyKG1fbnVt
SW1wb3J0RnVuY3Rpb25zLCAwKSwgMCwgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkudGFi
bGVDb3VudCgpICogc2l6ZW9mKFRhYmxlKikpOwotICAgIGZvciAodW5zaWduZWQgZWxlbWVudElu
ZGV4ID0gMDsgZWxlbWVudEluZGV4IDwgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuZWxl
bWVudENvdW50KCk7ICsrZWxlbWVudEluZGV4KSB7Ci0gICAgICAgIGNvbnN0IGF1dG8mIGVsZW1l
bnQgPSBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5lbGVtZW50c1tlbGVtZW50SW5kZXhd
OwotICAgICAgICBpZiAoZWxlbWVudC5pc1Bhc3NpdmUoKSkKLSAgICAgICAgICAgIG1fcGFzc2l2
ZUVsZW1lbnRzLnF1aWNrU2V0KGVsZW1lbnRJbmRleCk7Ci0gICAgfQotCi0gICAgZm9yICh1bnNp
Z25lZCBkYXRhU2VnbWVudEluZGV4ID0gMDsgZGF0YVNlZ21lbnRJbmRleCA8IG1fbW9kdWxlLT5t
b2R1bGVJbmZvcm1hdGlvbigpLmRhdGFTZWdtZW50c0NvdW50KCk7ICsrZGF0YVNlZ21lbnRJbmRl
eCkgewotICAgICAgICBjb25zdCBhdXRvJiBkYXRhU2VnbWVudCA9IG1fbW9kdWxlLT5tb2R1bGVJ
bmZvcm1hdGlvbigpLmRhdGFbZGF0YVNlZ21lbnRJbmRleF07Ci0gICAgICAgIGlmIChkYXRhU2Vn
bWVudC0+aXNQYXNzaXZlKCkpCi0gICAgICAgICAgICBtX3Bhc3NpdmVEYXRhU2VnbWVudHMucXVp
Y2tTZXQoZGF0YVNlZ21lbnRJbmRleCk7Ci0gICAgfQorICAgIG1faW5zdGFuY2UtPnNldE93bmVy
KHRoaXMpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5o
ZXJpdHMoaW5mbygpKSk7Ci0gICAgdm0uaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZCh0
aGlzLCBleHRyYU1lbW9yeUFsbG9jYXRlZCgpKTsKKyAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVt
b3J5QWxsb2NhdGVkKHRoaXMsIG1faW5zdGFuY2UtPmV4dHJhTWVtb3J5QWxsb2NhdGVkKCkpOwog
fQogCiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6On5KU1dlYkFzc2VtYmx5SW5zdGFuY2UoKQogewog
ICAgIGNsZWFySlNDYWxsSUNzKCptX3ZtKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9udW1JbXBvcnRGdW5jdGlvbnM7ICsraSkKLSAgICAgICAgaW1wb3J0RnVuY3Rpb25JbmZvKGkp
LT5+SW1wb3J0RnVuY3Rpb25JbmZvKCk7CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNl
OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKQEAgLTEyOSwzOCArODUsMzcgQEAgdm9pZCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CiAKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fanNNb2R1bGUpOworICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1fbW9kdWxlKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX21vZHVsZVJlY29yZCk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9tZW1v
cnkpOwogICAgIGZvciAoYXV0byYgdGFibGUgOiB0aGlzT2JqZWN0LT5tX3RhYmxlcykKICAgICAg
ICAgdmlzaXRvci5hcHBlbmQodGFibGUpOwotICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlW
aXNpdGVkKHRoaXNPYmplY3QtPmV4dHJhTWVtb3J5QWxsb2NhdGVkKCkpOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5udW1JbXBvcnRGdW5jdGlvbnMoKTsgKytpKQot
ICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5pbXBvcnRGdW5jdGlvbihpKSk7IC8v
IFRoaXMgYWxzbyBrZWVwcyB0aGUgZnVuY3Rpb25zJyBKU1dlYkFzc2VtYmx5SW5zdGFuY2UgYWxp
dmUuCisgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhpc09iamVjdC0+bV9p
bnN0YW5jZS0+ZXh0cmFNZW1vcnlBbGxvY2F0ZWQoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHRoaXNPYmplY3QtPmluc3RhbmNlKCkubnVtSW1wb3J0RnVuY3Rpb25zKCk7ICsraSkK
KyAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+aW5zdGFuY2UoKS5pbXBvcnRGdW5j
dGlvbihpKSk7IC8vIFRoaXMgYWxzbyBrZWVwcyB0aGUgZnVuY3Rpb25zJyBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UgYWxpdmUuCiAKLSAgICBmb3IgKHNpemVfdCBpIDogdGhpc09iamVjdC0+Z2xvYmFs
c1RvQmluZGluZygpKSB7Ci0gICAgICAgIEdsb2JhbCogYmluZGluZyA9IHRoaXNPYmplY3QtPmdl
dEdsb2JhbEJpbmRpbmcoaSk7CisgICAgZm9yIChzaXplX3QgaSA6IHRoaXNPYmplY3QtPmluc3Rh
bmNlKCkuZ2xvYmFsc1RvQmluZGluZygpKSB7CisgICAgICAgIFdhc206Okdsb2JhbCogYmluZGlu
ZyA9IHRoaXNPYmplY3QtPmluc3RhbmNlKCkuZ2V0R2xvYmFsQmluZGluZyhpKTsKICAgICAgICAg
aWYgKGJpbmRpbmcpCiAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKGJpbmRp
bmctPm93bmVyKCkpOwogICAgIH0KLSAgICBmb3IgKHNpemVfdCBpIDogdGhpc09iamVjdC0+Z2xv
YmFsc1RvTWFyaygpKQotICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWU6
OmRlY29kZSh0aGlzT2JqZWN0LT5sb2FkSTY0R2xvYmFsKGkpKSk7CisgICAgZm9yIChzaXplX3Qg
aSA6IHRoaXNPYmplY3QtPmluc3RhbmNlKCkuZ2xvYmFsc1RvTWFyaygpKQorICAgICAgICB2aXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWU6OmRlY29kZSh0aGlzT2JqZWN0LT5pbnN0YW5j
ZSgpLmxvYWRJNjRHbG9iYWwoaSkpKTsKIAogICAgIExvY2tlciBsb2NrZXIgeyBjZWxsLT5jZWxs
TG9jaygpIH07Ci0gICAgZm9yIChhdXRvJiB3cmFwcGVyIDogdGhpc09iamVjdC0+ZnVuY3Rpb25X
cmFwcGVycygpKQorICAgIGZvciAoYXV0byYgd3JhcHBlciA6IHRoaXNPYmplY3QtPmluc3RhbmNl
KCkuZnVuY3Rpb25XcmFwcGVycygpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVk
KHdyYXBwZXIuZ2V0KCkpOwogfQogCiBERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNXZWJBc3NlbWJs
eUluc3RhbmNlKTsKIAotdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmluaXRpYWxpemVJbXBv
cnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBpbXBvcnRPYmplY3Qs
IENyZWF0aW9uTW9kZSBjcmVhdGlvbk1vZGUpCit2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6
aW5pdGlhbGl6ZUltcG9ydHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3Qq
IGltcG9ydE9iamVjdCwgV2FzbTo6Q3JlYXRpb25Nb2RlIGNyZWF0aW9uTW9kZSkKIHsKLSAgICBB
U1NFUlQoZ2xvYmFsT2JqZWN0ID09IHRoaXMtPmdsb2JhbE9iamVjdCgpKTsKICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCiAgICAgbV9tb2R1bGVSZWNvcmQtPnByZXBhcmVMaW5rKHZtLCB0aGlzKTsKLSAg
ICBpZiAoY3JlYXRpb25Nb2RlID09IENyZWF0aW9uTW9kZTo6RnJvbUpTKSB7CisgICAgaWYgKGNy
ZWF0aW9uTW9kZSA9PSBXYXNtOjpDcmVhdGlvbk1vZGU6OkZyb21KUykgewogICAgICAgICBtX21v
ZHVsZVJlY29yZC0+bGluayhnbG9iYWxPYmplY3QsIGpzTnVsbCgpKTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgbV9tb2R1bGVSZWNvcmQtPmlu
aXRpYWxpemVJbXBvcnRzKGdsb2JhbE9iamVjdCwgaW1wb3J0T2JqZWN0LCBjcmVhdGlvbk1vZGUp
OwpAQCAtMTY4LDkgKzEyMyw4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjppbml0aWFs
aXplSW1wb3J0cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iCiAgICAgfQogfQog
Ci12b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluYWxpemVDcmVhdGlvbihWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxDYWxsZWVHcm91cD4mJiB3YXNtQ2FsbGVl
R3JvdXAsIENyZWF0aW9uTW9kZSBjcmVhdGlvbk1vZGUpCit2b2lkIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6ZmluYWxpemVDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFJlZjxXYXNtOjpDYWxsZWVHcm91cD4mJiB3YXNtQ2FsbGVlR3JvdXAsIFdhc206OkNyZWF0
aW9uTW9kZSBjcmVhdGlvbk1vZGUpCiB7Ci0gICAgQVNTRVJUKGdsb2JhbE9iamVjdCA9PSB0aGlz
LT5nbG9iYWxPYmplY3QoKSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgaWYgKCF3YXNtQ2FsbGVlR3JvdXAtPnJ1bm5hYmxlKCkpIHsKQEAgLTE4NCwx
OCArMTM4LDE4IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5hbGl6ZUNyZWF0aW9u
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjCiAgICAgLy8gcmVzdWx0cywgc28g
dGhhdCBsYXRlciB3aGVuIG1lbW9yeSBpbXBvcnRzIGJlY29tZSBhdmFpbGFibGUsIHRoZSBhcHBy
b3ByaWF0ZSBDYWxsZWVHcm91cCBjYW4gYmUgdXNlZC4KICAgICAvLyBJZiBMTEludCBpcyBkaXNh
YmxlZCwgd2UgaW5zdGVhZCBkZWZlciBjb21waWxhdGlvbiB0byBtb2R1bGUgZXZhbHVhdGlvbi4K
ICAgICAvLyBJZiB0aGUgY29kZSBpcyBhbHJlYWR5IGNvbXBpbGVkLCBlLmcuIHRoZSBtb2R1bGUg
d2FzIGFscmVhZHkgaW5zdGFudGlhdGVkIGJlZm9yZSwgd2UgZG8gbm90IHJlLWluaXRpYWxpemUu
Ci0gICAgaWYgKE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5TExJbnQoKSAmJiBtb2R1bGUoKS5tb2R1
bGVJbmZvcm1hdGlvbigpLmhhc01lbW9yeUltcG9ydCgpKQotICAgICAgICBtb2R1bGUoKS5jb3B5
SW5pdGlhbENhbGxlZUdyb3VwVG9BbGxNZW1vcnlNb2RlcyhtZW1vcnlNb2RlKCkpOworICAgIGlm
IChPcHRpb25zOjp1c2VXZWJBc3NlbWJseUxMSW50KCkgJiYgbW9kdWxlKCktPm1vZHVsZUluZm9y
bWF0aW9uKCkuaGFzTWVtb3J5SW1wb3J0KCkpCisgICAgICAgIG1vZHVsZSgpLT5tb2R1bGUoKS5j
b3B5SW5pdGlhbENhbGxlZUdyb3VwVG9BbGxNZW1vcnlNb2RlcyhtZW1vcnlNb2RlKCkpOwogCi0g
ICAgZm9yICh1bnNpZ25lZCBpbXBvcnRGdW5jdGlvbk51bSA9IDA7IGltcG9ydEZ1bmN0aW9uTnVt
IDwgbnVtSW1wb3J0RnVuY3Rpb25zKCk7ICsraW1wb3J0RnVuY3Rpb25OdW0pIHsKLSAgICAgICAg
YXV0byogaW5mbyA9IGltcG9ydEZ1bmN0aW9uSW5mbyhpbXBvcnRGdW5jdGlvbk51bSk7CisgICAg
Zm9yICh1bnNpZ25lZCBpbXBvcnRGdW5jdGlvbk51bSA9IDA7IGltcG9ydEZ1bmN0aW9uTnVtIDwg
aW5zdGFuY2UoKS5udW1JbXBvcnRGdW5jdGlvbnMoKTsgKytpbXBvcnRGdW5jdGlvbk51bSkgewor
ICAgICAgICBhdXRvKiBpbmZvID0gaW5zdGFuY2UoKS5pbXBvcnRGdW5jdGlvbkluZm8oaW1wb3J0
RnVuY3Rpb25OdW0pOwogICAgICAgICBpZiAoIWluZm8tPnRhcmdldEluc3RhbmNlKQotICAgICAg
ICAgICAgaW5mby0+aW1wb3J0RnVuY3Rpb25TdHViID0gbW9kdWxlKCkuaW1wb3J0RnVuY3Rpb25T
dHViKGltcG9ydEZ1bmN0aW9uTnVtKTsKKyAgICAgICAgICAgIGluZm8tPmltcG9ydEZ1bmN0aW9u
U3R1YiA9IG1fbW9kdWxlLT5tb2R1bGUoKS5pbXBvcnRGdW5jdGlvblN0dWIoaW1wb3J0RnVuY3Rp
b25OdW0pOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBpbmZvLT5pbXBvcnRGdW5jdGlvblN0
dWIgPSB3YXNtQ2FsbGVlR3JvdXAtPndhc21Ub1dhc21FeGl0U3R1YihpbXBvcnRGdW5jdGlvbk51
bSk7CiAgICAgfQogCi0gICAgaWYgKGNyZWF0aW9uTW9kZSA9PSBDcmVhdGlvbk1vZGU6OkZyb21K
UykgeworICAgIGlmIChjcmVhdGlvbk1vZGUgPT0gV2FzbTo6Q3JlYXRpb25Nb2RlOjpGcm9tSlMp
IHsKICAgICAgICAgbV9tb2R1bGVSZWNvcmQtPmluaXRpYWxpemVFeHBvcnRzKGdsb2JhbE9iamVj
dCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKQEAgLTIx
MCwxMSArMTY0LDExIEBAIElkZW50aWZpZXIgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGVQ
cml2YXRlTW9kdWxlS2V5KCkKICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVVpZChQcml2YXRl
TmFtZShQcml2YXRlTmFtZTo6RGVzY3JpcHRpb24sICJXZWJBc3NlbWJseUluc3RhbmNlIl9zKSk7
CiB9CiAKLUpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjp0cnlD
cmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIGluc3RhbmNlU3RydWN0dXJlLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBtb2R1bGVLZXksIEpTV2ViQXNzZW1i
bHlNb2R1bGUqIGpzTW9kdWxlLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBDcmVhdGlvbk1vZGUg
Y3JlYXRpb25Nb2RlKQorSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U6OnRyeUNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0
IElkZW50aWZpZXImIG1vZHVsZUtleSwgSlNXZWJBc3NlbWJseU1vZHVsZSoganNNb2R1bGUsIEpT
T2JqZWN0KiBpbXBvcnRPYmplY3QsIFN0cnVjdHVyZSogaW5zdGFuY2VTdHJ1Y3R1cmUsIFJlZjxX
YXNtOjpNb2R1bGU+JiYgbW9kdWxlLCBXYXNtOjpDcmVhdGlvbk1vZGUgY3JlYXRpb25Nb2RlKQog
ewogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAg
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uID0ganNNb2R1bGUtPm1v
ZHVsZUluZm9ybWF0aW9uKCk7CisgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1v
ZHVsZUluZm9ybWF0aW9uID0ganNNb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7CiAKICAgICBh
dXRvIGV4Y2VwdGlvbiA9IFsmXSAoSlNPYmplY3QqIGVycm9yKSB7CiAgICAgICAgIHRocm93RXhj
ZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgZXJyb3IpOwpAQCAtMjI5LDE3ICsxODMs
MTIgQEAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnRyeUNy
ZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogaW5zdGEKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIG51bGxwdHIpOwogCiAgICAgLy8gRklYTUU6IFRoZXNlIG9iamVjdHMgY291bGQg
YmUgcHJldHR5IGJpZyB3ZSBzaG91bGQgdHJ5IHRvIHRocm93IE9PTSBoZXJlLgotICAgIHZvaWQq
IGNlbGwgPSB0cnlBbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUluc3RhbmNlPih2bSwgYWxsb2Nh
dGlvblNpemUobW9kdWxlSW5mb3JtYXRpb24uaW1wb3J0RnVuY3Rpb25Db3VudCgpLCBtb2R1bGVJ
bmZvcm1hdGlvbi50YWJsZUNvdW50KCksIG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbENvdW50KCkp
KTsKLSAgICBpZiAoIWNlbGwpIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQot
ICAgIGF1dG8qIGpzSW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGNlbGwpIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSh2bSwgaW5zdGFuY2VTdHJ1Y3R1cmUsIGpzTW9kdWxlLCBtb2R1bGVSZWNvcmQpOwor
ICAgIGF1dG8qIGpzSW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFz
c2VtYmx5SW5zdGFuY2U+KHZtKSkgSlNXZWJBc3NlbWJseUluc3RhbmNlKHZtLCBpbnN0YW5jZVN0
cnVjdHVyZSwgV2FzbTo6SW5zdGFuY2U6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBXVEZNb3Zl
KG1vZHVsZSkpLCBqc01vZHVsZSwgbW9kdWxlUmVjb3JkKTsKICAgICBqc0luc3RhbmNlLT5maW5p
c2hDcmVhdGlvbih2bSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBudWxs
cHRyKTsKKyAgICBnbG9iYWxPYmplY3QtPnVzZSgpOwogCi0gICAgaWYgKGNyZWF0aW9uTW9kZSA9
PSBDcmVhdGlvbk1vZGU6OkZyb21KUykgeworICAgIGlmIChjcmVhdGlvbk1vZGUgPT0gV2FzbTo6
Q3JlYXRpb25Nb2RlOjpGcm9tSlMpIHsKICAgICAgICAgLy8gSWYgdGhlIGxpc3Qgb2YgbW9kdWxl
LmltcG9ydHMgaXMgbm90IGVtcHR5IGFuZCBUeXBlKGltcG9ydE9iamVjdCkgaXMgbm90IE9iamVj
dCwgYSBUeXBlRXJyb3IgaXMgdGhyb3duLgogICAgICAgICBpZiAobW9kdWxlSW5mb3JtYXRpb24u
aW1wb3J0cy5zaXplKCkgJiYgIWltcG9ydE9iamVjdCkKICAgICAgICAgICAgIHJldHVybiBleGNl
cHRpb24oY3JlYXRlVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgImNhbid0IG1ha2UgV2ViQXNzZW1i
bHkuSW5zdGFuY2UgYmVjYXVzZSB0aGVyZSBpcyBubyBpbXBvcnRzIE9iamVjdCBhbmQgdGhlIFdl
YkFzc2VtYmx5Lk1vZHVsZSByZXF1aXJlcyBpbXBvcnRzIl9zKSk7CkBAIC0yNzAsOCArMjE5LDgg
QEAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnRyeUNyZWF0
ZShWTSYgdm0sIFN0cnVjdHVyZSogaW5zdGEKICAgICAgICAgYXV0byoganNNZW1vcnkgPSBKU1dl
YkFzc2VtYmx5TWVtb3J5Ojp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCB2bSwgZ2xvYmFsT2JqZWN0
LT53ZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBudWxscHRyKTsKIAotICAgICAgICBSZWZQdHI8TWVtb3J5PiBtZW1v
cnkgPSBNZW1vcnk6OnRyeUNyZWF0ZSh2bSwgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5LmluaXRp
YWwoKSwgbW9kdWxlSW5mb3JtYXRpb24ubWVtb3J5Lm1heGltdW0oKSwgbW9kdWxlSW5mb3JtYXRp
b24ubWVtb3J5LmlzU2hhcmVkKCkgPyBNZW1vcnlTaGFyaW5nTW9kZTo6U2hhcmVkOiBNZW1vcnlT
aGFyaW5nTW9kZTo6RGVmYXVsdCwKLSAgICAgICAgICAgIFsmdm0sIGpzTWVtb3J5XShNZW1vcnk6
Okdyb3dTdWNjZXNzLCBQYWdlQ291bnQgb2xkUGFnZUNvdW50LCBQYWdlQ291bnQgbmV3UGFnZUNv
dW50KSB7IGpzTWVtb3J5LT5ncm93U3VjY2Vzc0NhbGxiYWNrKHZtLCBvbGRQYWdlQ291bnQsIG5l
d1BhZ2VDb3VudCk7IH0KKyAgICAgICAgUmVmUHRyPFdhc206Ok1lbW9yeT4gbWVtb3J5ID0gV2Fz
bTo6TWVtb3J5Ojp0cnlDcmVhdGUodm0sIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5pbml0aWFs
KCksIG1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeS5tYXhpbXVtKCksIG1vZHVsZUluZm9ybWF0aW9u
Lm1lbW9yeS5pc1NoYXJlZCgpID8gTWVtb3J5U2hhcmluZ01vZGU6OlNoYXJlZDogTWVtb3J5U2hh
cmluZ01vZGU6OkRlZmF1bHQsCisgICAgICAgICAgICBbJnZtLCBqc01lbW9yeV0oV2FzbTo6TWVt
b3J5OjpHcm93U3VjY2VzcywgUGFnZUNvdW50IG9sZFBhZ2VDb3VudCwgUGFnZUNvdW50IG5ld1Bh
Z2VDb3VudCkgeyBqc01lbW9yeS0+Z3Jvd1N1Y2Nlc3NDYWxsYmFjayh2bSwgb2xkUGFnZUNvdW50
LCBuZXdQYWdlQ291bnQpOyB9CiAgICAgICAgICk7CiAgICAgICAgIGlmICghbWVtb3J5KQogICAg
ICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9i
amVjdCkpOwpAQCAtMjg2LDcgKzIzNSw3IEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJB
c3NlbWJseUluc3RhbmNlOjp0cnlDcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIGluc3RhCiAgICAg
ICAgIC8vIFdoZW4gdGhlcmUgaXMgYSBtZW1vcnkgaW1wb3J0LCB0aGlzIHdpbGwgYmUgcmVwbGFj
ZWQgbGF0ZXIgaW4gdGhlIG1vZHVsZSByZWNvcmQgaW1wb3J0IGluaXRpYWxpemF0aW9uLgogICAg
ICAgICBhdXRvKiBqc01lbW9yeSA9IEpTV2ViQXNzZW1ibHlNZW1vcnk6OnRyeUNyZWF0ZShnbG9i
YWxPYmplY3QsIHZtLCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCkp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxwdHIpOwotICAg
ICAgICBqc01lbW9yeS0+YWRvcHQoTWVtb3J5OjpjcmVhdGUodm0pKTsKKyAgICAgICAganNNZW1v
cnktPmFkb3B0KFdhc206Ok1lbW9yeTo6Y3JlYXRlKCkpOwogICAgICAgICBqc0luc3RhbmNlLT5z
ZXRNZW1vcnkodm0sIGpzTWVtb3J5KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBudWxscHRyKTsKICAgICB9CkBAIC0yOTYsMzQxICsyNDUsMjAgQEAgSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnRyeUNyZWF0ZShWTSYgdm0sIFN0
cnVjdHVyZSogaW5zdGEKIAogdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNsZWFySlNDYWxs
SUNzKFZNJiB2bSkKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBudW1J
bXBvcnRGdW5jdGlvbnMoKTsgKytpbmRleCkgewotICAgICAgICBhdXRvKiBpbmZvID0gaW1wb3J0
RnVuY3Rpb25JbmZvKGluZGV4KTsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXgg
PCBpbnN0YW5jZSgpLm51bUltcG9ydEZ1bmN0aW9ucygpOyArK2luZGV4KSB7CisgICAgICAgIGF1
dG8qIGluZm8gPSBpbnN0YW5jZSgpLmltcG9ydEZ1bmN0aW9uSW5mbyhpbmRleCk7CiAgICAgICAg
IGluZm8tPmNhbGxMaW5rSW5mby51bmxpbmtPclVwZ3JhZGUodm0sIG51bGxwdHIsIG51bGxwdHIp
OwogICAgIH0KIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmFsaXplVW5jb25k
aXRpb25hbGx5KFZNJiB2bSwgQ29sbGVjdGlvblNjb3BlKQogewotICAgIGZvciAodW5zaWduZWQg
aW5kZXggPSAwOyBpbmRleCA8IG51bUltcG9ydEZ1bmN0aW9ucygpOyArK2luZGV4KSB7Ci0gICAg
ICAgIGF1dG8qIGluZm8gPSBpbXBvcnRGdW5jdGlvbkluZm8oaW5kZXgpOworICAgIGZvciAodW5z
aWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGluc3RhbmNlKCkubnVtSW1wb3J0RnVuY3Rpb25zKCk7
ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byogaW5mbyA9IGluc3RhbmNlKCkuaW1wb3J0RnVuY3Rp
b25JbmZvKGluZGV4KTsKICAgICAgICAgaW5mby0+Y2FsbExpbmtJbmZvLnZpc2l0V2Vhayh2bSk7
CiAgICAgfQogfQogCi1zaXplX3QgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpleHRyYU1lbW9yeUFs
bG9jYXRlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGFsbG9jYXRpb25TaXplKG1fbnVtSW1wb3J0
RnVuY3Rpb25zLCBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS50YWJsZUNvdW50KCksIG1f
bW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmdsb2JhbENvdW50KCkpOwotfQotCi12b2lkIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6c2V0R2xvYmFsKHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUp
Ci17Ci0gICAgR2xvYmFsOjpWYWx1ZSYgc2xvdCA9IG1fZ2xvYmFsc1tpXTsKLSAgICBpZiAobV9n
bG9iYWxzVG9CaW5kaW5nLmdldChpKSkgewotICAgICAgICBHbG9iYWwqIGdsb2JhbCA9IGdldEds
b2JhbEJpbmRpbmcoaSk7Ci0gICAgICAgIGlmICghZ2xvYmFsKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBnbG9iYWwtPnZhbHVlUG9pbnRlcigpLT5tX2V4dGVybnJlZi5zZXQodm0oKSwg
Z2xvYmFsLT5vd25lcigpLCB2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc2xv
dC5tX2V4dGVybnJlZi5zZXQodm0oKSwgdGhpcywgdmFsdWUpOwotfQotCi1KU1ZhbHVlIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6Z2V0RnVuY3Rpb25XcmFwcGVyKHVuc2lnbmVkIGkpIGNvbnN0Ci17
Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZnVuY3Rpb25XcmFwcGVycy5nZXQoaSkuZ2V0KCk7Ci0g
ICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIHJl
dHVybiB2YWx1ZTsKLX0KLQotdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnNldEZ1bmN0aW9u
V3JhcHBlcih1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIEFTU0VSVCh2YWx1ZS5p
c0NhbGxhYmxlKCkpOwotICAgIEFTU0VSVCghbV9mdW5jdGlvbldyYXBwZXJzLmNvbnRhaW5zKGkp
KTsKLSAgICBMb2NrZXIgbG9ja2VyIHsgY2VsbExvY2soKSB9OwotICAgIG1fZnVuY3Rpb25XcmFw
cGVycy5zZXQoaSwgV3JpdGVCYXJyaWVyPFVua25vd24+KHZtKCksIHRoaXMsIHZhbHVlKSk7Ci0g
ICAgQVNTRVJUKGdldEZ1bmN0aW9uV3JhcHBlcihpKSA9PSB2YWx1ZSk7Ci19Ci0KLVRhYmxlKiBK
U1dlYkFzc2VtYmx5SW5zdGFuY2U6OnRhYmxlKHVuc2lnbmVkIGkpCi17Ci0gICAgUkVMRUFTRV9B
U1NFUlQoaSA8IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLnRhYmxlQ291bnQoKSk7Ci0g
ICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8VGFibGUqKj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlz
KSArIG9mZnNldE9mVGFibGVQdHIobV9udW1JbXBvcnRGdW5jdGlvbnMsIGkpKTsKLX0KLQotdm9p
ZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnRhYmxlQ29weSh1aW50MzJfdCBkc3RPZmZzZXQsIHVp
bnQzMl90IHNyY09mZnNldCwgdWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBkc3RUYWJsZUluZGV4
LCB1aW50MzJfdCBzcmNUYWJsZUluZGV4KQotewotICAgIFJFTEVBU0VfQVNTRVJUKHNyY1RhYmxl
SW5kZXggPCBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS50YWJsZUNvdW50KCkpOwotICAg
IFJFTEVBU0VfQVNTRVJUKGRzdFRhYmxlSW5kZXggPCBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRp
b24oKS50YWJsZUNvdW50KCkpOwotCi0gICAgVGFibGUqIGRzdFRhYmxlID0gdGFibGUoZHN0VGFi
bGVJbmRleCk7Ci0gICAgVGFibGUqIHNyY1RhYmxlID0gdGFibGUoc3JjVGFibGVJbmRleCk7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoZHN0VGFibGUtPnR5cGUoKSA9PSBzcmNUYWJsZS0+dHlwZSgpKTsK
LQotICAgIGF1dG8gZm9yRWFjaFRhYmxlRWxlbWVudCA9IFsmXShhdXRvIGZuKSB7Ci0gICAgICAg
IGlmIChkc3RUYWJsZUluZGV4ID09IHNyY1RhYmxlSW5kZXggJiYgZHN0T2Zmc2V0ID4gc3JjT2Zm
c2V0KSB7Ci0gICAgICAgICAgICBmb3IgKHVpbnQzMl90IGluZGV4ID0gbGVuZ3RoOyBpbmRleC0t
OykKLSAgICAgICAgICAgICAgICBmbihkc3RUYWJsZSwgc3JjVGFibGUsIGRzdE9mZnNldCArIGlu
ZGV4LCBzcmNPZmZzZXQgKyBpbmRleCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZHN0VGFibGVJbmRl
eCA9PSBzcmNUYWJsZUluZGV4ICYmIGRzdE9mZnNldCA9PSBzcmNPZmZzZXQpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZm9yICh1aW50MzJfdCBpbmRl
eCA9IDA7IGluZGV4IDwgbGVuZ3RoOyArK2luZGV4KQotICAgICAgICAgICAgICAgIGZuKGRzdFRh
YmxlLCBzcmNUYWJsZSwgZHN0T2Zmc2V0ICsgaW5kZXgsIHNyY09mZnNldCArIGluZGV4KTsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICBpZiAoZHN0VGFibGUtPmlzRXh0ZXJucmVmVGFibGUoKSkg
ewotICAgICAgICBmb3JFYWNoVGFibGVFbGVtZW50KFtdKFRhYmxlKiBkc3RUYWJsZSwgVGFibGUq
IHNyY1RhYmxlLCB1aW50MzJfdCBkc3RJbmRleCwgdWludDMyX3Qgc3JjSW5kZXgpIHsKLSAgICAg
ICAgICAgIGRzdFRhYmxlLT5jb3B5KHNyY1RhYmxlLCBkc3RJbmRleCwgc3JjSW5kZXgpOwotICAg
ICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZvckVhY2hUYWJsZUVsZW1l
bnQoW10oVGFibGUqIGRzdFRhYmxlLCBUYWJsZSogc3JjVGFibGUsIHVpbnQzMl90IGRzdEluZGV4
LCB1aW50MzJfdCBzcmNJbmRleCkgewotICAgICAgICBkc3RUYWJsZS0+YXNGdW5jcmVmVGFibGUo
KS0+Y29weUZ1bmN0aW9uKHNyY1RhYmxlLT5hc0Z1bmNyZWZUYWJsZSgpLCBkc3RJbmRleCwgc3Jj
SW5kZXgpOwotICAgIH0pOwotfQotCi12b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZWxlbURy
b3AodWludDMyX3QgZWxlbWVudEluZGV4KQotewotICAgIG1fcGFzc2l2ZUVsZW1lbnRzLnF1aWNr
Q2xlYXIoZWxlbWVudEluZGV4KTsKLX0KLQotYm9vbCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om1l
bW9yeUluaXQodWludDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3Qgc3JjQWRkcmVzcywgdWludDMy
X3QgbGVuZ3RoLCB1aW50MzJfdCBkYXRhU2VnbWVudEluZGV4KQotewotICAgIFJFTEVBU0VfQVNT
RVJUKGRhdGFTZWdtZW50SW5kZXggPCBtb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpLmRhdGFT
ZWdtZW50c0NvdW50KCkpOwotCi0gICAgaWYgKHN1bU92ZXJmbG93czx1aW50MzJfdD4oc3JjQWRk
cmVzcywgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29uc3QgU2VnbWVu
dDo6UHRyJiBzZWdtZW50ID0gbW9kdWxlKCkubW9kdWxlSW5mb3JtYXRpb24oKS5kYXRhW2RhdGFT
ZWdtZW50SW5kZXhdOwotICAgIGNvbnN0IHVpbnQzMl90IHNlZ21lbnRTaXplSW5CeXRlcyA9IG1f
cGFzc2l2ZURhdGFTZWdtZW50cy5xdWlja0dldChkYXRhU2VnbWVudEluZGV4KSA/IHNlZ21lbnQt
PnNpemVJbkJ5dGVzIDogMFU7Ci0gICAgaWYgKHNyY0FkZHJlc3MgKyBsZW5ndGggPiBzZWdtZW50
U2l6ZUluQnl0ZXMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IHVpbnQ4X3Qq
IHNlZ21lbnREYXRhID0gIWxlbmd0aCA/IG51bGxwdHIgOiAmc2VnbWVudC0+Ynl0ZShzcmNBZGRy
ZXNzKTsKLQotICAgIEFTU0VSVChtZW1vcnkoKSk7Ci0gICAgcmV0dXJuIG1lbW9yeSgpLT5tZW1v
cnkoKS5pbml0KGRzdEFkZHJlc3MsIHNlZ21lbnREYXRhLCBsZW5ndGgpOwotfQotCi12b2lkIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6ZGF0YURyb3AodWludDMyX3QgZGF0YVNlZ21lbnRJbmRleCkK
LXsKLSAgICBtX3Bhc3NpdmVEYXRhU2VnbWVudHMucXVpY2tDbGVhcihkYXRhU2VnbWVudEluZGV4
KTsKLX0KLQotY29uc3QgRWxlbWVudCogSlNXZWJBc3NlbWJseUluc3RhbmNlOjplbGVtZW50QXQo
dW5zaWduZWQgaW5kZXgpIGNvbnN0Ci17Ci0gICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBtX21v
ZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5lbGVtZW50Q291bnQoKSk7Ci0KLSAgICBpZiAobV9w
YXNzaXZlRWxlbWVudHMucXVpY2tHZXQoaW5kZXgpKQotICAgICAgICByZXR1cm4gJm1fbW9kdWxl
LT5tb2R1bGVJbmZvcm1hdGlvbigpLmVsZW1lbnRzW2luZGV4XTsKLSAgICByZXR1cm4gbnVsbHB0
cjsKLX0KLQotdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmluaXRFbGVtZW50U2VnbWVudCh1
aW50MzJfdCB0YWJsZUluZGV4LCBjb25zdCBFbGVtZW50JiBzZWdtZW50LCB1aW50MzJfdCBkc3RP
ZmZzZXQsIHVpbnQzMl90IHNyY09mZnNldCwgdWludDMyX3QgbGVuZ3RoKQotewotICAgIFJFTEVB
U0VfQVNTRVJUKGxlbmd0aCA8PSBzZWdtZW50Lmxlbmd0aCgpKTsKLQotICAgIEpTV2ViQXNzZW1i
bHlUYWJsZSoganNUYWJsZSA9IHRoaXMtPmpzVGFibGUodGFibGVJbmRleCk7Ci0gICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRoaXMtPmdsb2JhbE9iamVjdCgpOwotICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLQotICAgIGZvciAodWludDMyX3QgaW5kZXggPSAwOyBp
bmRleCA8IGxlbmd0aDsgKytpbmRleCkgewotICAgICAgICBjb25zdCBhdXRvIHNyY0luZGV4ID0g
c3JjT2Zmc2V0ICsgaW5kZXg7Ci0gICAgICAgIGNvbnN0IGF1dG8gZHN0SW5kZXggPSBkc3RPZmZz
ZXQgKyBpbmRleDsKLSAgICAgICAgY29uc3QgYXV0byBpbml0VHlwZSA9IHNlZ21lbnQuaW5pdFR5
cGVzW3NyY0luZGV4XTsKLSAgICAgICAgY29uc3QgYXV0byBpbml0aWFsQml0c09ySW5kZXggPSBz
ZWdtZW50LmluaXRpYWxCaXRzT3JJbmRpY2VzW3NyY0luZGV4XTsKLQotICAgICAgICBpZiAoaW5p
dFR5cGUgPT0gRWxlbWVudDo6SW5pdGlhbGl6YXRpb25UeXBlOjpGcm9tUmVmTnVsbCkgewotICAg
ICAgICAgICAganNUYWJsZS0+Y2xlYXIoZHN0SW5kZXgpOwotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaW5pdFR5cGUgPT0gRWxlbWVudDo6SW5pdGlhbGl6
YXRpb25UeXBlOjpGcm9tUmVmRnVuYykgewotICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgZXNz
ZW50aWFsbHkgbWVhbnMgd2UncmUgZXhwb3J0aW5nIGFuIGltcG9ydC4KLSAgICAgICAgICAgIC8v
IFdlIG5lZWQgYSBzdG9yeSBoZXJlLiBXZSBuZWVkIHRvIGNyZWF0ZSBhIFdlYkFzc2VtYmx5RnVu
Y3Rpb24KLSAgICAgICAgICAgIC8vIGZvciB0aGUgaW1wb3J0LgotICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTUxMAotICAgICAgICAgICAg
dWludDMyX3QgZnVuY3Rpb25JbmRleCA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihpbml0aWFsQml0
c09ySW5kZXgpOwotICAgICAgICAgICAgVHlwZUluZGV4IHR5cGVJbmRleCA9IG1fbW9kdWxlLT50
eXBlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwotICAgICAgICAg
ICAgaWYgKGlzSW1wb3J0RnVuY3Rpb24oZnVuY3Rpb25JbmRleCkpIHsKLSAgICAgICAgICAgICAg
ICBKU09iamVjdCogZnVuY3Rpb25JbXBvcnQgPSBpbXBvcnRGdW5jdGlvbihmdW5jdGlvbkluZGV4
KS5nZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNXZWJBc3NlbWJseUhvc3RGdW5jdGlvbihm
dW5jdGlvbkltcG9ydCkpIHsKLSAgICAgICAgICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlv
biogd2FzbUZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4oZnVu
Y3Rpb25JbXBvcnQpOwotICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBldmVyIGltcG9ydCBh
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLCB3ZSBzZXQgdGhlIGltcG9ydCBhcyB0aGUgdW53
cmFwcGVkIHZhbHVlLgotICAgICAgICAgICAgICAgICAgICAvLyBCZWNhdXNlIGEgV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24gY2FuIG5ldmVyIHdyYXAgYW5vdGhlciBXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG9ubHkgdHlwZSB0aGlzIGNv
dWxkIGJlIGlzIFdlYkFzc2VtYmx5RnVuY3Rpb24uCi0gICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHdhc21GdW5jdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIGpzVGFibGUtPnNl
dChkc3RJbmRleCwgd2FzbUZ1bmN0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGF1dG8qIHdyYXBwZXJGdW5jdGlv
biA9IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUoCi0gICAgICAgICAgICAgICAg
ICAgIHZtLAotICAgICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QsCi0gICAgICAgICAgICAg
ICAgICAgIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TdHJ1Y3R1cmUo
KSwKLSAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25JbXBvcnQsCi0gICAgICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uSW5kZXgsCi0gICAgICAgICAgICAgICAgICAgIHRoaXMsCi0gICAgICAgICAg
ICAgICAgICAgIHR5cGVJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgVHlwZUluZm9ybWF0aW9u
OjpnZXRDYW5vbmljYWxSVFQodHlwZUluZGV4KSk7Ci0gICAgICAgICAgICAgICAganNUYWJsZS0+
c2V0KGRzdEluZGV4LCB3cmFwcGVyRnVuY3Rpb24pOwotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhdXRvJiBqc0VudHJ5cG9pbnRDYWxsZWUg
PSBjYWxsZWVHcm91cCgpLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNl
KGZ1bmN0aW9uSW5kZXgpOwotICAgICAgICAgICAgYXV0byogd2FzbUNhbGxlZSA9IGNhbGxlZUdy
b3VwKCktPndhc21DYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwot
ICAgICAgICAgICAgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVu
dHJ5cG9pbnRMb2FkTG9jYXRpb24gPSBjYWxsZWVHcm91cCgpLT5lbnRyeXBvaW50TG9hZExvY2F0
aW9uRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKLSAgICAgICAgICAgIGNv
bnN0IGF1dG8mIHNpZ25hdHVyZSA9IFR5cGVJbmZvcm1hdGlvbjo6Z2V0RnVuY3Rpb25TaWduYXR1
cmUodHlwZUluZGV4KTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBTYXkgd2UgZXhwb3J0IGxvY2Fs
IGZ1bmN0aW9uICJmb28iIGF0IGZ1bmN0aW9uIGluZGV4IDAuCi0gICAgICAgICAgICAvLyBXaGF0
IGlmIHdlIGFsc28gc2V0IGl0IHRvIHRoZSB0YWJsZSBhbiBFbGVtZW50IHcvIGluZGV4IDAuCi0g
ICAgICAgICAgICAvLyBEb2VzIChuZXcgSW5zdGFuY2UoLi4uKSkuZXhwb3J0cy5mb28gPT09IHRh
YmxlLmdldCgwKT8KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjU4MjUKLSAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0
aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKAotICAgICAgICAgICAgICAgIHZtLAot
ICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdCwKLSAgICAgICAgICAgICAgICBnbG9iYWxPYmpl
Y3QtPndlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUoKSwKLSAgICAgICAgICAgICAgICBzaWdu
YXR1cmUuYXJndW1lbnRDb3VudCgpLAotICAgICAgICAgICAgICAgIFdURjo6bWFrZVN0cmluZyhm
dW5jdGlvbkluZGV4KSwKLSAgICAgICAgICAgICAgICB0aGlzLAotICAgICAgICAgICAgICAgIGpz
RW50cnlwb2ludENhbGxlZSwKLSAgICAgICAgICAgICAgICB3YXNtQ2FsbGVlLAotICAgICAgICAg
ICAgICAgIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sCi0gICAgICAgICAgICAgICAgdHlwZUluZGV4
LAotICAgICAgICAgICAgICAgIFR5cGVJbmZvcm1hdGlvbjo6Z2V0Q2Fub25pY2FsUlRUKHR5cGVJ
bmRleCkpOwotICAgICAgICAgICAganNUYWJsZS0+c2V0KGRzdEluZGV4LCBmdW5jdGlvbik7Ci0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIEpTVmFsdWUgaW5pdFZh
bHVlOwotICAgICAgICBpZiAoaW5pdFR5cGUgPT0gRWxlbWVudDo6SW5pdGlhbGl6YXRpb25UeXBl
OjpGcm9tR2xvYmFsKQotICAgICAgICAgICAgaW5pdFZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGxv
YWRJNjRHbG9iYWwoaW5pdGlhbEJpdHNPckluZGV4KSk7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgQVNTRVJUKGluaXRUeXBlID09IEVsZW1lbnQ6OkluaXRpYWxpemF0aW9uVHlwZTo6RnJv
bUV4dGVuZGVkRXhwcmVzc2lvbik7Ci0gICAgICAgICAgICB1aW50NjRfdCByZXN1bHQ7Ci0gICAg
ICAgICAgICBib29sIHN1Y2Nlc3MgPSBldmFsdWF0ZUNvbnN0YW50RXhwcmVzc2lvbihpbml0aWFs
Qml0c09ySW5kZXgsIHNlZ21lbnQuZWxlbWVudFR5cGUsIHJlc3VsdCk7Ci0gICAgICAgICAgICAv
LyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2NDQ1NAot
ICAgICAgICAgICAgLy8gQ3VycmVudGx5IHRoaXMgc2hvdWxkIG5ldmVyIGZhaWwsIGFzIHRoZSBw
YXJzZSBwaGFzZSBhbHJlYWR5IHZhbGlkYXRlZCBpdC4KLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHN1Y2Nlc3MpOwotICAgICAgICAgICAgaW5pdFZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKHJl
c3VsdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoanNUYWJsZS0+dGFibGUoKS0+aXNFeHRl
cm5yZWZUYWJsZSgpKQotICAgICAgICAgICAganNUYWJsZS0+c2V0KGRzdEluZGV4LCBpbml0VmFs
dWUpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFZhbGlkYXRpb24gc2hvdWxkIGd1
YXJhbnRlZSB0aGF0IHRoZSB0YWJsZSBpcyBmb3IgZnVuY3MsIGFuZCB0aGUgdmFsdWUgaXMgYSBm
dW5jIGFzIHdlbGwuCi0gICAgICAgICAgICBBU1NFUlQoanNUYWJsZS0+dGFibGUoKS0+aXNGdW5j
cmVmVGFibGUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoaW5pdFZhbHVlLmdldE9iamVjdCgpKTsK
LSAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKiBmdW5jID0ganNEeW5hbWljQ2Fz
dDxXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSo+KGluaXRWYWx1ZS5nZXRPYmplY3QoKSk7Ci0gICAg
ICAgICAgICBBU1NFUlQoZnVuYyk7Ci0gICAgICAgICAgICBqc1RhYmxlLT5zZXQoZHN0SW5kZXgs
IGZ1bmMpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6Y29weURhdGFTZWdtZW50KHVpbnQzMl90IHNlZ21lbnRJbmRleCwgdWludDMyX3Qgb2Zmc2V0
LCB1aW50MzJfdCBsZW5ndGhJbkJ5dGVzLCB1aW50OF90KiB2YWx1ZXMpCi17Ci0gICAgLy8gRmFp
bCBpZiB0aGUgZGF0YSBzZWdtZW50IGluZGV4IGlzIG91dCBvZiBib3VuZHMKLSAgICBSRUxFQVNF
X0FTU0VSVChzZWdtZW50SW5kZXggPCBtb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpLmRhdGFT
ZWdtZW50c0NvdW50KCkpOwotICAgIC8vIE90aGVyd2lzZSwgZ2V0IHRoZSBgc2VnbWVudEluZGV4
YHRoIGRhdGEgc2VnbWVudAotICAgIGNvbnN0IFNlZ21lbnQ6OlB0ciYgc2VnbWVudCA9IG1vZHVs
ZSgpLm1vZHVsZUluZm9ybWF0aW9uKCkuZGF0YVtzZWdtZW50SW5kZXhdOwotICAgIGNvbnN0IHVp
bnQzMl90IHNlZ21lbnRTaXplSW5CeXRlcyA9IG1fcGFzc2l2ZURhdGFTZWdtZW50cy5xdWlja0dl
dChzZWdtZW50SW5kZXgpID8gc2VnbWVudC0+c2l6ZUluQnl0ZXMgOiAwVTsKLQotICAgIC8vIENh
bGxlciBjaGVja3MgdGhhdCB0aGUgKG9mZnNldCArIGxlbmd0aEluQnl0ZXMpIGNhbGN1bGF0aW9u
IGRvZXNuJ3Qgb3ZlcmZsb3cKLSAgICBpZiAoKG9mZnNldCArIGxlbmd0aEluQnl0ZXMpID4gc2Vn
bWVudFNpemVJbkJ5dGVzKSB7Ci0gICAgICAgIC8vIFRoZSBzZWdtZW50IGFjY2VzcyB3b3VsZCBv
dmVyZmxvdzsgdGhlIGNhbGxlciBtdXN0IGhhbmRsZSB0aGlzIGVycm9yLgotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIElmIHNpemUgaXMgMCwgZG8gbm90aGluZwotICAgIGlm
ICghbGVuZ3RoSW5CeXRlcykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgLy8gQ2FzdCB0aGUg
ZGF0YSBzZWdtZW50IHRvIGEgcG9pbnRlcgotICAgIGNvbnN0IHVpbnQ4X3QqIHNlZ21lbnREYXRh
ID0gJnNlZ21lbnQtPmJ5dGUob2Zmc2V0KTsKLQotICAgIC8vIENvcHkgdGhlIGRhdGEgZnJvbSB0
aGUgc2VnbWVudCBpbnRvIHRoZSBvdXQgcGFyYW0gdmVjdG9yCi0gICAgbWVtY3B5KHZhbHVlcywg
c2VnbWVudERhdGEsIGxlbmd0aEluQnl0ZXMpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjb3B5RWxlbWVudFNlZ21lbnQoY29uc3QgRWxlbWVu
dCYgc2VnbWVudCwgdWludDMyX3Qgc3JjT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgsIHVpbnQ2NF90
KiB2YWx1ZXMpCi17Ci0gICAgLy8gQ2FsbGVyIHNob3VsZCBoYXZlIGFscmVhZHkgY2hlY2tlZCB0
aGF0IHRoZSAob2Zmc2V0ICsgbGVuZ3RoKSBjYWxjdWxhdGlvbiBkb2Vzbid0IG92ZXJmbG93IGlu
dDMyLAotICAgIC8vIGFuZCB0aGF0IHRoZSAob2Zmc2V0ICsgbGVuZ3RoKSBkb2Vzbid0IG92ZXJm
bG93IHRoZSBlbGVtZW50IHNlZ21lbnQKLSAgICBBU1NFUlQoIXN1bU92ZXJmbG93czx1aW50MzJf
dD4oc3JjT2Zmc2V0LCBsZW5ndGgpKTsKLSAgICBBU1NFUlQoKHNyY09mZnNldCArIGxlbmd0aCkg
PD0gc2VnbWVudC5sZW5ndGgoKSk7Ci0KLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgdWludDMyX3Qgc3JjSW5kZXggPSBzcmNPZmZzZXQgKyBpOwot
ICAgICAgICBjb25zdCBhdXRvIGluaXRUeXBlID0gc2VnbWVudC5pbml0VHlwZXNbc3JjSW5kZXhd
OwotICAgICAgICBjb25zdCBhdXRvIGluaXRpYWxCaXRzT3JJbmRleCA9IHNlZ21lbnQuaW5pdGlh
bEJpdHNPckluZGljZXNbc3JjSW5kZXhdOwotCi0gICAgICAgIC8vIFJlcHJlc2VudCB0aGUgbnVs
bCBmdW5jdGlvbiBhcyB0aGUgbnVsbCBKUyB2YWx1ZQotICAgICAgICBpZiAoaW5pdFR5cGUgPT0g
RWxlbWVudDo6SW5pdGlhbGl6YXRpb25UeXBlOjpGcm9tUmVmTnVsbCkgewotICAgICAgICAgICAg
dmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEpTVmFsdWU6OmVuY29kZShqc051bGwo
KSkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaW5p
dFR5cGUgPT0gRWxlbWVudDo6SW5pdGlhbGl6YXRpb25UeXBlOjpGcm9tUmVmRnVuYykgewotICAg
ICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleCA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihp
bml0aWFsQml0c09ySW5kZXgpOwotCi0gICAgICAgICAgICAvLyBBIHdyYXBwZXIgZm9yIHRoaXMg
ZnVuY3Rpb24gc2hvdWxkIGhhdmUgYmVlbiBjcmVhdGVkIGR1cmluZyBwYXJzaW5nLgotICAgICAg
ICAgICAgLy8gQSBmdXR1cmUgb3B0aW1pemF0aW9uIHdvdWxkIGJlIGZvciB0aGUgcGFyc2VyIHRv
IG5vdCBjcmVhdGUgdGhlIHdyYXBwZXJzLAotICAgICAgICAgICAgLy8gYW5kIGNyZWF0ZSB0aGVt
IGhlcmUgZHluYW1pY2FsbHkgaW5zdGVhZC4KLSAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBn
ZXRGdW5jdGlvbldyYXBwZXIoZnVuY3Rpb25JbmRleCk7Ci0gICAgICAgICAgICBBU1NFUlQodmFs
dWUuaXNDYWxsYWJsZSgpKTsKLSAgICAgICAgICAgIHZhbHVlc1tpXSA9IHN0YXRpY19jYXN0PHVp
bnQ2NF90PihKU1ZhbHVlOjplbmNvZGUodmFsdWUpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGluaXRUeXBlID09IEVsZW1lbnQ6OkluaXRpYWxpemF0
aW9uVHlwZTo6RnJvbUdsb2JhbCkgewotICAgICAgICAgICAgdmFsdWVzW2ldID0gbG9hZEk2NEds
b2JhbChpbml0aWFsQml0c09ySW5kZXgpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IH0KLQotICAgICAgICBBU1NFUlQoaW5pdFR5cGUgPT0gRWxlbWVudDo6SW5pdGlhbGl6YXRpb25U
eXBlOjpGcm9tRXh0ZW5kZWRFeHByZXNzaW9uKTsKLSAgICAgICAgdWludDY0X3QgcmVzdWx0Owot
ICAgICAgICBib29sIHN1Y2Nlc3MgPSBldmFsdWF0ZUNvbnN0YW50RXhwcmVzc2lvbihpbml0aWFs
Qml0c09ySW5kZXgsIHNlZ21lbnQuZWxlbWVudFR5cGUsIHJlc3VsdCk7Ci0gICAgICAgIC8vIEZJ
WE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY0NDU0Ci0gICAg
ICAgIC8vIEN1cnJlbnRseSB0aGlzIHNob3VsZCBuZXZlciBmYWlsLCBhcyB0aGUgcGFyc2UgcGhh
c2UgYWxyZWFkeSB2YWxpZGF0ZWQgaXQuCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHN1Y2Nlc3Mp
OwotICAgICAgICB2YWx1ZXNbaV0gPSByZXN1bHQ7Ci0gICAgfQotfQotCi1ib29sIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6ZXZhbHVhdGVDb25zdGFudEV4cHJlc3Npb24odWludDY0X3QgaW5kZXgs
IFR5cGUgZXhwZWN0ZWRUeXBlLCB1aW50NjRfdCYgcmVzdWx0KQotewotICAgIGNvbnN0IGF1dG8m
IGNvbnN0YW50RXhwcmVzc2lvbiA9IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmNvbnN0
YW50RXhwcmVzc2lvbnNbaW5kZXhdOwotICAgIGF1dG8gZXZhbFJlc3VsdCA9IGV2YWx1YXRlRXh0
ZW5kZWRDb25zdEV4cHIoY29uc3RhbnRFeHByZXNzaW9uLCB0aGlzLCBtX21vZHVsZS0+bW9kdWxl
SW5mb3JtYXRpb24oKSwgZXhwZWN0ZWRUeXBlKTsKLSAgICBpZiAoVU5MSUtFTFkoIWV2YWxSZXN1
bHQuaGFzX3ZhbHVlKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXN1bHQgPSBl
dmFsUmVzdWx0LnZhbHVlKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgSlNXZWJBc3Nl
bWJseUluc3RhbmNlOjp0YWJsZUluaXQodWludDMyX3QgZHN0T2Zmc2V0LCB1aW50MzJfdCBzcmNP
ZmZzZXQsIHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3QgZWxlbWVudEluZGV4LCB1aW50MzJfdCB0
YWJsZUluZGV4KQotewotICAgIFJFTEVBU0VfQVNTRVJUKGVsZW1lbnRJbmRleCA8IG1fbW9kdWxl
LT5tb2R1bGVJbmZvcm1hdGlvbigpLmVsZW1lbnRDb3VudCgpKTsKLSAgICBSRUxFQVNFX0FTU0VS
VCh0YWJsZUluZGV4IDwgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkudGFibGVDb3VudCgp
KTsKLQotICAgIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnRTZWdtZW50ID0gZWxlbWVudEF0KGVsZW1l
bnRJbmRleCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZWxlbWVudFNlZ21lbnQpOwotICAgIFJFTEVB
U0VfQVNTRVJUKGVsZW1lbnRTZWdtZW50LT5pc1Bhc3NpdmUoKSk7Ci0gICAgaW5pdEVsZW1lbnRT
ZWdtZW50KHRhYmxlSW5kZXgsICplbGVtZW50U2VnbWVudCwgZHN0T2Zmc2V0LCBzcmNPZmZzZXQs
IGxlbmd0aCk7Ci19Ci0KLXZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpzZXRUYWJsZSh1bnNp
Z25lZCBpLCBSZWY8VGFibGU+JiYgdGFibGUpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQoaSA8IG1f
bW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLnRhYmxlQ291bnQoKSk7Ci0gICAgQVNTRVJUKCF0
aGlzLT50YWJsZShpKSk7Ci0gICAgKmJpdHdpc2VfY2FzdDxUYWJsZSoqPihiaXR3aXNlX2Nhc3Q8
Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZUYWJsZVB0cihtX251bUltcG9ydEZ1bmN0aW9ucywgaSkp
ID0gJnRhYmxlLmxlYWtSZWYoKTsKLX0KLQotdm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Omxp
bmtHbG9iYWwodW5zaWduZWQgaSwgUmVmPEdsb2JhbD4mJiBnbG9iYWwpCi17Ci0gICAgbV9nbG9i
YWxzW2ldLm1fcG9pbnRlciA9IGdsb2JhbC0+dmFsdWVQb2ludGVyKCk7Ci0gICAgbV9saW5rZWRH
bG9iYWxzLnNldChpLCBXVEZNb3ZlKGdsb2JhbCkpOwotfQotCi12b2lkIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6c2V0VGFnKHVuc2lnbmVkIGluZGV4LCBSZWY8Y29uc3QgVGFnPiYmIHRhZykKLXsK
LSAgICBtX3RhZ3NbaW5kZXhdID0gV1RGTW92ZSh0YWcpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKaW5kZXggYjcxN2Rh
ZmRmMWEzLi5mMzkzYjhlNmQwMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDI0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMjUgKzI3LDE0IEBACiAK
ICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKICNp
bmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlH
bG9iYWwuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseVRhYmxlLmgiCi0jaW5jbHVkZSAiV2FzbUNhbGxlZUdyb3VwLmgiCiAjaW5jbHVk
ZSAiV2FzbUNyZWF0aW9uTW9kZS5oIgotI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKLSNpbmNsdWRl
ICJXYXNtR2xvYmFsLmgiCi0jaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgotI2luY2x1ZGUgIldhc21N
b2R1bGUuaCIKLSNpbmNsdWRlICJXYXNtVGFibGUuaCIKLSNpbmNsdWRlICJXZWJBc3NlbWJseUZ1
bmN0aW9uLmgiCi0jaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCi0jaW5jbHVkZSA8d3RmL0JpdFZl
Y3Rvci5oPgorI2luY2x1ZGUgIldhc21JbnN0YW5jZS5oIgogI2luY2x1ZGUgPHd0Zi9GaXhlZFZl
Y3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1RocmVhZFNhZmVXZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBA
IC01Myw2ICs0MiwxMCBAQCBjbGFzcyBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDsKIGNsYXNzIEpT
V2ViQXNzZW1ibHlNb2R1bGU7CiBjbGFzcyBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDsKIAorbmFt
ZXNwYWNlIFdhc20geworY2xhc3MgQ2FsbGVlR3JvdXA7Cit9CisKIGNsYXNzIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICBmcmllbmQg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCkBAIC02MSw3ICs1NCw2IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCB1c2VQcmVjaXNlQWxsb2NhdGlvbnNPbmx5ID0gdHJ1ZTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgR0NDbGllbnQ6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewpAQCAtNzAsNyArNjIsNyBAQCBw
dWJsaWM6CiAKICAgICBzdGF0aWMgSWRlbnRpZmllciBjcmVhdGVQcml2YXRlTW9kdWxlS2V5KCk7
CiAKLSAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUluc3RhbmNlKiB0cnlDcmVhdGUoVk0mLCBTdHJ1
Y3R1cmUqLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IElkZW50aWZpZXImIG1vZHVsZUtleSwgSlNX
ZWJBc3NlbWJseU1vZHVsZSosIEpTT2JqZWN0KiBpbXBvcnRPYmplY3QsIFdhc206OkNyZWF0aW9u
TW9kZSk7CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogdHJ5Q3JlYXRlKFZNJiwg
SlNHbG9iYWxPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiBtb2R1bGVLZXksIEpTV2ViQXNzZW1i
bHlNb2R1bGUqLCBKU09iamVjdCogaW1wb3J0T2JqZWN0LCBTdHJ1Y3R1cmUqLCBSZWY8V2FzbTo6
TW9kdWxlPiYmLCBXYXNtOjpDcmVhdGlvbk1vZGUpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBERUNM
QVJFX0VYUE9SVF9JTkZPOwpAQCAtNzgsMjU3ICs3MCw1OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBp
bml0aWFsaXplSW1wb3J0cyhKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBpbXBvcnRPYmplY3Qs
IFdhc206OkNyZWF0aW9uTW9kZSk7CiAgICAgdm9pZCBmaW5hbGl6ZUNyZWF0aW9uKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBSZWY8V2FzbTo6Q2FsbGVlR3JvdXA+JiYsIFdhc206OkNyZWF0aW9uTW9k
ZSk7CiAgICAgCisgICAgV2FzbTo6SW5zdGFuY2UmIGluc3RhbmNlKCkgeyByZXR1cm4gbV9pbnN0
YW5jZS5nZXQoKTsgfQogICAgIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNvcmQo
KSB7IHJldHVybiBtX21vZHVsZVJlY29yZC5nZXQoKTsgfQogCi0gICAgSlNXZWJBc3NlbWJseU1l
bW9yeSogbWVtb3J5KCkgY29uc3QgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KLSAgICB2b2lk
IHNldE1lbW9yeShWTSYgdm0sIEpTV2ViQXNzZW1ibHlNZW1vcnkqIHZhbHVlKQotICAgIHsKKyAg
ICBKU1dlYkFzc2VtYmx5TWVtb3J5KiBtZW1vcnkoKSB7IHJldHVybiBtX21lbW9yeS5nZXQoKTsg
fQorICAgIHZvaWQgc2V0TWVtb3J5KFZNJiB2bSwgSlNXZWJBc3NlbWJseU1lbW9yeSogdmFsdWUp
IHsKICAgICAgICAgbV9tZW1vcnkuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgIG1lbW9y
eSgpLT5tZW1vcnkoKS5yZWdpc3Rlckluc3RhbmNlKCp0aGlzKTsKLSAgICAgICAgdXBkYXRlQ2Fj
aGVkTWVtb3J5KCk7CisgICAgICAgIGluc3RhbmNlKCkuc2V0TWVtb3J5KG1lbW9yeSgpLT5tZW1v
cnkoKSk7CiAgICAgfQotICAgIE1lbW9yeU1vZGUgbWVtb3J5TW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1lbW9yeSgpLT5tZW1vcnkoKS5tb2RlKCk7IH0KKyAgICBNZW1vcnlNb2RlIG1lbW9yeU1vZGUo
KSB7IHJldHVybiBtZW1vcnkoKS0+bWVtb3J5KCkubW9kZSgpOyB9CiAKLSAgICBKU1dlYkFzc2Vt
Ymx5VGFibGUqIGpzVGFibGUodW5zaWduZWQgaSkgeyByZXR1cm4gbV90YWJsZXNbaV0uZ2V0KCk7
IH0KKyAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1f
dGFibGVzW2ldLmdldCgpOyB9CiAgICAgdm9pZCBzZXRUYWJsZShWTSYgdm0sIHVpbnQzMl90IGlu
ZGV4LCBKU1dlYkFzc2VtYmx5VGFibGUqIHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlu
ZGV4IDwgbV90YWJsZXMuc2l6ZSgpKTsKICAgICAgICAgQVNTRVJUKCF0YWJsZShpbmRleCkpOwog
ICAgICAgICBtX3RhYmxlc1tpbmRleF0uc2V0KHZtLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgIHNl
dFRhYmxlKGluZGV4LCAqdmFsdWUtPnRhYmxlKCkpOworICAgICAgICBpbnN0YW5jZSgpLnNldFRh
YmxlKGluZGV4LCAqdGFibGUoaW5kZXgpLT50YWJsZSgpKTsKICAgICB9CiAKICAgICB2b2lkIGxp
bmtHbG9iYWwoVk0mIHZtLCB1aW50MzJfdCBpbmRleCwgSlNXZWJBc3NlbWJseUdsb2JhbCogdmFs
dWUpCiAgICAgewogICAgICAgICBBU1NFUlQodmFsdWUgPT0gdmFsdWUtPmdsb2JhbCgpLT5vd25l
cigpKTsKLSAgICAgICAgbGlua0dsb2JhbChpbmRleCwgKnZhbHVlLT5nbG9iYWwoKSk7CisgICAg
ICAgIGluc3RhbmNlKCkubGlua0dsb2JhbChpbmRleCwgKnZhbHVlLT5nbG9iYWwoKSk7CiAgICAg
ICAgIHZtLndyaXRlQmFycmllcih0aGlzLCB2YWx1ZSk7CiAgICAgfQogCi0gICAgSlNXZWJBc3Nl
bWJseU1vZHVsZSoganNNb2R1bGUoKSBjb25zdCB7IHJldHVybiBtX2pzTW9kdWxlLmdldCgpOyB9
CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xv
YmFsT2JqZWN0LmdldCgpOyB9CisgICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlKCkgY29u
c3QgeyByZXR1cm4gbV9tb2R1bGUuZ2V0KCk7IH0KIAogICAgIHZvaWQgY2xlYXJKU0NhbGxJQ3Mo
Vk0mKTsKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJiwgQ29sbGVjdGlvblNj
b3BlKTsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIgcHRyZGlmZl90IG9mZnNldE9mSlNNb2R1bGUo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX2pzTW9k
dWxlKTsgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgcHRyZGlmZl90IG9mZnNldE9mSlNNZW1vcnko
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX21lbW9y
eSk7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RhbmNlKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9pbnN0YW5j
ZSk7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIHB0cmRpZmZfdCBvZmZzZXRPZk1vZHVsZSgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fbW9kdWxlKTsg
fQorICAgIHN0YXRpYyBjb25zdGV4cHIgcHRyZGlmZl90IG9mZnNldE9mR2xvYmFsT2JqZWN0KCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSwgbV9nbG9iYWxP
YmplY3QpOyB9CiAgICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3Qgb2Zmc2V0T2ZWTSgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fdm0pOyB9CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3Qgb2Zmc2V0T2ZNb2R1bGVSZWNvcmQoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX21vZHVsZVJlY29y
ZCk7IH0KIAotCi0gICAgdXNpbmcgRnVuY3Rpb25XcmFwcGVyTWFwID0gSGFzaE1hcDx1aW50MzJf
dCwgV3JpdGVCYXJyaWVyPFVua25vd24+LCBJbnRIYXNoPHVpbnQzMl90PiwgV1RGOjpVbnNpZ25l
ZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+OwotCi0gICAgc3RhdGljIGNvbnN0ZXhw
ciBwdHJkaWZmX3Qgb2Zmc2V0T2ZTb2Z0U3RhY2tMaW1pdCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fc29mdFN0YWNrTGltaXQpOyB9Ci0KLSAgICB2
b2lkIHVwZGF0ZVNvZnRTdGFja0xpbWl0KHZvaWQqIHNvZnRTdGFja0xpbWl0KSB7IG1fc29mdFN0
YWNrTGltaXQgPSBzb2Z0U3RhY2tMaW1pdDsgfQotCi0gICAgc2l6ZV90IGV4dHJhTWVtb3J5QWxs
b2NhdGVkKCkgY29uc3Q7Ci0KLSAgICBXYXNtOjpNb2R1bGUmIG1vZHVsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbW9kdWxlLmdldCgpOyB9Ci0gICAgV2FzbTo6Q2FsbGVlR3JvdXAqIGNhbGxlZUdyb3Vw
KCkgY29uc3QgeyByZXR1cm4gbW9kdWxlKCkuY2FsbGVlR3JvdXBGb3IobWVtb3J5TW9kZSgpKTsg
fQotICAgIFdhc206OlRhYmxlKiB0YWJsZSh1bnNpZ25lZCk7Ci0gICAgdm9pZCBzZXRUYWJsZSh1
bnNpZ25lZCwgUmVmPFdhc206OlRhYmxlPiYmKTsKLSAgICBjb25zdCBXYXNtOjpFbGVtZW50KiBl
bGVtZW50QXQodW5zaWduZWQpIGNvbnN0OwotCi0gICAgdm9pZCBpbml0RWxlbWVudFNlZ21lbnQo
dWludDMyX3QgdGFibGVJbmRleCwgY29uc3QgV2FzbTo6RWxlbWVudCYgc2VnbWVudCwgdWludDMy
X3QgZHN0T2Zmc2V0LCB1aW50MzJfdCBzcmNPZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7Ci0gICAg
Ym9vbCBjb3B5RGF0YVNlZ21lbnQodWludDMyX3Qgc2VnbWVudEluZGV4LCB1aW50MzJfdCBvZmZz
ZXQsIHVpbnQzMl90IGxlbmd0aEluQnl0ZXMsIHVpbnQ4X3QqIHZhbHVlcyk7Ci0gICAgdm9pZCBj
b3B5RWxlbWVudFNlZ21lbnQoY29uc3QgV2FzbTo6RWxlbWVudCYgc2VnbWVudCwgdWludDMyX3Qg
c3JjT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgsIHVpbnQ2NF90KiB2YWx1ZXMpOwotCi0gICAgYm9v
bCBpc0ltcG9ydEZ1bmN0aW9uKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gZnVuY3Rpb25JbmRleCA8IGNhbGxlZUdyb3VwKCktPmZ1bmN0aW9uSW1w
b3J0Q291bnQoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHRhYmxlSW5pdCh1aW50MzJfdCBkc3RPZmZz
ZXQsIHVpbnQzMl90IHNyY09mZnNldCwgdWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50
SW5kZXgsIHVpbnQzMl90IHRhYmxlSW5kZXgpOwotCi0gICAgdm9pZCB0YWJsZUNvcHkodWludDMy
X3QgZHN0T2Zmc2V0LCB1aW50MzJfdCBzcmNPZmZzZXQsIHVpbnQzMl90IGxlbmd0aCwgdWludDMy
X3QgZHN0VGFibGVJbmRleCwgdWludDMyX3Qgc3JjVGFibGVJbmRleCk7Ci0KLSAgICB2b2lkIGVs
ZW1Ecm9wKHVpbnQzMl90IGVsZW1lbnRJbmRleCk7Ci0KLSAgICBib29sIG1lbW9yeUluaXQodWlu
dDMyX3QgZHN0QWRkcmVzcywgdWludDMyX3Qgc3JjQWRkcmVzcywgdWludDMyX3QgbGVuZ3RoLCB1
aW50MzJfdCBkYXRhU2VnbWVudEluZGV4KTsKLQotICAgIHZvaWQgZGF0YURyb3AodWludDMyX3Qg
ZGF0YVNlZ21lbnRJbmRleCk7Ci0KLSAgICB2b2lkKiBjYWNoZWRNZW1vcnkoKSBjb25zdCB7IHJl
dHVybiBtX2NhY2hlZE1lbW9yeS5nZXRNYXlCZU51bGwoKTsgfQotICAgIHNpemVfdCBjYWNoZWRC
b3VuZHNDaGVja2luZ1NpemUoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZEJvdW5kc0NoZWNraW5n
U2l6ZTsgfQotCi0gICAgdm9pZCB1cGRhdGVDYWNoZWRNZW1vcnkoKQotICAgIHsKLSAgICAgICAg
aWYgKG1fbWVtb3J5KSB7Ci0gICAgICAgICAgICAvLyBOb3RlOiBJbiBNZW1vcnlNb2RlOjpCb3Vu
ZHNDaGVja2luZywgbWFwcGVkQ2FwYWNpdHkoKSA9PSBzaXplKCkuCi0gICAgICAgICAgICAvLyBX
ZSBhc3NlcnQgdGhpcyBpbiB0aGUgY29uc3RydWN0b3Igb2YgTWVtb3J5SGFuZGxlLgotI2lmIENQ
VShBUk0pCi0gICAgICAgICAgICAvLyBTaGFyZWQgbWVtb3J5IHJlcXVpcmVzIHNpZ25hbGluZyBt
ZW1vcnkgd2hpY2ggaXMgbm90IGF2YWlsYWJsZQotICAgICAgICAgICAgLy8gb24gQVJNdjcgeWV0
LiBJbiBvcmRlciB0byBnZXQgbW9yZSBvZiB0aGUgdGVzdCBzdWl0ZSB0byBydW4sIHdlCi0gICAg
ICAgICAgICAvLyBjYW4gc3RpbGwgdXNlIGEgc2hhcmVkIG1lbW9yeSBieSB1c2luZyBib3VuZHMg
Y2hlY2tpbmcsIGJ5IHVzaW5nCi0gICAgICAgICAgICAvLyB0aGUgYWN0dWFsIHNpemUgaGVyZSwg
YnV0IHRoaXMgbWVhbnMgd2UgY2Fubm90IGdyb3cgdGhlIHNoYXJlZAotICAgICAgICAgICAgLy8g
bWVtb3J5IHNhZmVseSBpbiBjYXNlIGl0J3MgdXNlZCBieSBtdWx0aXBsZSB0aHJlYWRzLiBPbmNl
IHRoZQotICAgICAgICAgICAgLy8gc2lnbmFsIGhhbmRsZXIgYXJlIGF2YWlsYWJsZSwgbV9jYWNo
ZWRCb3VuZHNDaGVja2luZ1NpemUgc2hvdWxkCi0gICAgICAgICAgICAvLyBiZSBzZXQgdG8gdXNl
IG1lbW9yeSgpLT5tYXBwZWRDYXBhY2l0eSgpIGxpa2Ugb3RoZXIgcGxhdGZvcm1zLAotICAgICAg
ICAgICAgLy8gYW5kIGF0IHRoYXQgcG9pbnQgZ3Jvd2luZyB0aGUgc2hhcmVkIG1lbW9yeSB3aWxs
IGJlIHNhZmUuCi0gICAgICAgICAgICBtX2NhY2hlZEJvdW5kc0NoZWNraW5nU2l6ZSA9IG1lbW9y
eSgpLT5tZW1vcnkoKS5zaXplKCk7Ci0jZWxzZQotICAgICAgICAgICAgbV9jYWNoZWRCb3VuZHND
aGVja2luZ1NpemUgPSBtZW1vcnkoKS0+bWVtb3J5KCkubWFwcGVkQ2FwYWNpdHkoKTsKLSNlbmRp
ZgotICAgICAgICAgICAgbV9jYWNoZWRNZW1vcnkgPSBDYWdlZFB0cjxHaWdhY2FnZTo6UHJpbWl0
aXZlLCB2b2lkPihtZW1vcnkoKS0+bWVtb3J5KCkuYmFzZVBvaW50ZXIoKSk7Ci0gICAgICAgICAg
ICBBU1NFUlQobWVtb3J5KCktPm1lbW9yeSgpLmJhc2VQb2ludGVyKCkgPT0gY2FjaGVkTWVtb3J5
KCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaW50MzJfdCBsb2FkSTMyR2xvYmFsKHVuc2ln
bmVkIGkpIGNvbnN0Ci0gICAgewotICAgICAgICBXYXNtOjpHbG9iYWw6OlZhbHVlKiBzbG90ID0g
bV9nbG9iYWxzICsgaTsKLSAgICAgICAgaWYgKG1fZ2xvYmFsc1RvQmluZGluZy5nZXQoaSkpIHsK
LSAgICAgICAgICAgIHNsb3QgPSBzbG90LT5tX3BvaW50ZXI7Ci0gICAgICAgICAgICBpZiAoIXNs
b3QpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IHNsb3QtPm1fcHJpbWl0aXZlOwotICAgIH0KLSAgICBpbnQ2NF90IGxvYWRJNjRHbG9iYWwodW5z
aWduZWQgaSkgY29uc3QKLSAgICB7Ci0gICAgICAgIFdhc206Okdsb2JhbDo6VmFsdWUqIHNsb3Qg
PSBtX2dsb2JhbHMgKyBpOwotICAgICAgICBpZiAobV9nbG9iYWxzVG9CaW5kaW5nLmdldChpKSkg
ewotICAgICAgICAgICAgc2xvdCA9IHNsb3QtPm1fcG9pbnRlcjsKLSAgICAgICAgICAgIGlmICgh
c2xvdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gc2xvdC0+bV9wcmltaXRpdmU7Ci0gICAgfQotICAgIHZvaWQgc2V0R2xvYmFsKHVuc2lnbmVk
IGksIGludDY0X3QgYml0cykKLSAgICB7Ci0gICAgICAgIFdhc206Okdsb2JhbDo6VmFsdWUqIHNs
b3QgPSBtX2dsb2JhbHMgKyBpOwotICAgICAgICBpZiAobV9nbG9iYWxzVG9CaW5kaW5nLmdldChp
KSkgewotICAgICAgICAgICAgc2xvdCA9IHNsb3QtPm1fcG9pbnRlcjsKLSAgICAgICAgICAgIGlm
ICghc2xvdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgc2xv
dC0+bV9wcmltaXRpdmUgPSBiaXRzOwotICAgIH0KLQotICAgIHYxMjhfdCBsb2FkVjEyOEdsb2Jh
bCh1bnNpZ25lZCBpKSBjb25zdAotICAgIHsKLSAgICAgICAgV2FzbTo6R2xvYmFsOjpWYWx1ZSog
c2xvdCA9IG1fZ2xvYmFscyArIGk7Ci0gICAgICAgIGlmIChtX2dsb2JhbHNUb0JpbmRpbmcuZ2V0
KGkpKSB7Ci0gICAgICAgICAgICBzbG90ID0gc2xvdC0+bV9wb2ludGVyOwotICAgICAgICAgICAg
aWYgKCFzbG90KQotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHNsb3QtPm1fdmVjdG9yOwotICAgIH0KLSAgICB2b2lkIHNldEdsb2JhbCh1bnNp
Z25lZCBpLCB2MTI4X3QgYml0cykKLSAgICB7Ci0gICAgICAgIFdhc206Okdsb2JhbDo6VmFsdWUq
IHNsb3QgPSBtX2dsb2JhbHMgKyBpOwotICAgICAgICBpZiAobV9nbG9iYWxzVG9CaW5kaW5nLmdl
dChpKSkgewotICAgICAgICAgICAgc2xvdCA9IHNsb3QtPm1fcG9pbnRlcjsKLSAgICAgICAgICAg
IGlmICghc2xvdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
c2xvdC0+bV92ZWN0b3IgPSBiaXRzOwotICAgIH0KLSAgICB2b2lkIHNldEdsb2JhbCh1bnNpZ25l
ZCwgSlNWYWx1ZSk7Ci0gICAgdm9pZCBsaW5rR2xvYmFsKHVuc2lnbmVkLCBSZWY8V2FzbTo6R2xv
YmFsPiYmKTsKLSAgICBjb25zdCBCaXRWZWN0b3ImIGdsb2JhbHNUb01hcmsoKSB7IHJldHVybiBt
X2dsb2JhbHNUb01hcms7IH0KLSAgICBjb25zdCBCaXRWZWN0b3ImIGdsb2JhbHNUb0JpbmRpbmco
KSB7IHJldHVybiBtX2dsb2JhbHNUb0JpbmRpbmc7IH0KLSAgICBKU1ZhbHVlIGdldEZ1bmN0aW9u
V3JhcHBlcih1bnNpZ25lZCkgY29uc3Q7Ci0gICAgdHlwZW5hbWUgRnVuY3Rpb25XcmFwcGVyTWFw
OjpWYWx1ZXNDb25zdEl0ZXJhdG9yUmFuZ2UgZnVuY3Rpb25XcmFwcGVycygpIGNvbnN0IHsgcmV0
dXJuIG1fZnVuY3Rpb25XcmFwcGVycy52YWx1ZXMoKTsgfQotICAgIHZvaWQgc2V0RnVuY3Rpb25X
cmFwcGVyKHVuc2lnbmVkLCBKU1ZhbHVlKTsKLQotICAgIFdhc206Okdsb2JhbCogZ2V0R2xvYmFs
QmluZGluZyh1bnNpZ25lZCBpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZ2xvYmFsc1RvQmlu
ZGluZy5nZXQoaSkpOwotICAgICAgICBXYXNtOjpHbG9iYWw6OlZhbHVlKiBwb2ludGVyID0gbV9n
bG9iYWxzW2ldLm1fcG9pbnRlcjsKLSAgICAgICAgaWYgKCFwb2ludGVyKQotICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiAmV2FzbTo6R2xvYmFsOjpmcm9tQmluZGlu
ZygqcG9pbnRlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3Qgb2Zm
c2V0T2ZHbG9iYWxzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSwgbV9nbG9iYWxzKTsgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgcHRyZGlmZl90IG9mZnNl
dE9mQ2FjaGVkTWVtb3J5KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSwgbV9jYWNoZWRNZW1vcnkpOyB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZm
X3Qgb2Zmc2V0T2ZDYWNoZWRCb3VuZHNDaGVja2luZ1NpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSlNXZWJBc3NlbWJseUluc3RhbmNlLCBtX2NhY2hlZEJvdW5kc0NoZWNraW5nU2l6ZSk7
IH0KLSAgICBzdGF0aWMgY29uc3RleHByIHB0cmRpZmZfdCBvZmZzZXRPZlRlbXBvcmFyeUNhbGxG
cmFtZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1f
dGVtcG9yYXJ5Q2FsbEZyYW1lKTsgfQotCi0gICAgLy8gVGFpbCBhY2Nlc3NvcnMuCi0gICAgc3Rh
dGljIGNvbnN0ZXhwciBzaXplX3Qgb2Zmc2V0T2ZUYWlsKCkgeyByZXR1cm4gV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mPHNpemVvZih1aW50NjRfdCk+KHNpemVvZihKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UpKTsgfQotCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgTnVsbFdhc21DYWxsZWUg
PSAwOwotCi0gICAgc3RydWN0IEltcG9ydEZ1bmN0aW9uSW5mbyB7Ci0gICAgICAgIC8vIFRhcmdl
dCBpbnN0YW5jZSBhbmQgZW50cnlwb2ludCBhcmUgb25seSBzZXQgZm9yIHdhc20tPndhc20gY2Fs
bHMsIGFuZCBhcmUgb3RoZXJ3aXNlIG51bGxwdHIuIFRoZSBqcy1zcGVjaWZpYyBsb2dpYyBvY2N1
cnMgdGhyb3VnaCBpbXBvcnQgZnVuY3Rpb24uCi0gICAgICAgIFdyaXRlQmFycmllcjxKU1dlYkFz
c2VtYmx5SW5zdGFuY2U+IHRhcmdldEluc3RhbmNlIHsgfTsKLSAgICAgICAgV2FzbVRvV2FzbUlt
cG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIHdhc21FbnRyeXBvaW50TG9hZExvY2F0aW9u
IHsgbnVsbHB0ciB9OwotICAgICAgICBDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gaW1wb3J0RnVu
Y3Rpb25TdHViOwotICAgICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IGltcG9ydEZ1bmN0aW9u
IHsgfTsKLSAgICAgICAgLy8gVGhpcyBpcyBvbmx5IHVzZWQgd2hlbiB3ZSBuZWVkIHRvIGp1bXAg
ZGlyZWN0bHkgaW50byB0aGUgTExJbnQvSVBJbnQuCi0gICAgICAgIGNvbnN0IHVpbnRwdHJfdCog
Ym94ZWRUYXJnZXRDYWxsZWVMb2FkTG9jYXRpb24geyAmTnVsbFdhc21DYWxsZWUgfTsKLSAgICAg
ICAgRGF0YU9ubHlDYWxsTGlua0luZm8gY2FsbExpbmtJbmZvOwotI2lmIENQVShBRERSRVNTMzIp
Ci0gICAgICAgIHZvaWQqIF8geyBudWxscHRyIH07IC8vIHBhZGRpbmcKLSNlbmRpZgotICAgICAg
ICBzdGF0aWMgY29uc3RleHByIHB0cmRpZmZfdCBvZmZzZXRPZkNhbGxMaW5rSW5mbygpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihJbXBvcnRGdW5jdGlvbkluZm8sIGNhbGxMaW5rSW5mbyk7IH0K
LSAgICB9OwotICAgIHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0aW9ucygpIGNvbnN0IHsgcmV0dXJu
IG1fbnVtSW1wb3J0RnVuY3Rpb25zOyB9Ci0gICAgSW1wb3J0RnVuY3Rpb25JbmZvKiBpbXBvcnRG
dW5jdGlvbkluZm8oc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKQotICAgIHsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaW1wb3J0RnVuY3Rpb25OdW0gPCBtX251bUltcG9ydEZ1bmN0aW9ucyk7Ci0g
ICAgICAgIHJldHVybiAmYml0d2lzZV9jYXN0PEltcG9ydEZ1bmN0aW9uSW5mbyo+KGJpdHdpc2Vf
Y2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZlRhaWwoKSlbaW1wb3J0RnVuY3Rpb25OdW1dOwot
ICAgIH0KLSAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mVGFyZ2V0SW5zdGFuY2Uoc2l6ZV90IGlt
cG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBvZmZzZXRPZlRhaWwoKSArIGltcG9ydEZ1bmN0aW9u
TnVtICogc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykgKyBPQkpFQ1RfT0ZGU0VUT0YoSW1wb3J0
RnVuY3Rpb25JbmZvLCB0YXJnZXRJbnN0YW5jZSk7IH0KLSAgICBzdGF0aWMgc2l6ZV90IG9mZnNl
dE9mV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24oc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7
IHJldHVybiBvZmZzZXRPZlRhaWwoKSArIGltcG9ydEZ1bmN0aW9uTnVtICogc2l6ZW9mKEltcG9y
dEZ1bmN0aW9uSW5mbykgKyBPQkpFQ1RfT0ZGU0VUT0YoSW1wb3J0RnVuY3Rpb25JbmZvLCB3YXNt
RW50cnlwb2ludExvYWRMb2NhdGlvbik7IH0KLSAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mQm94
ZWRUYXJnZXRDYWxsZWVMb2FkTG9jYXRpb24oc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJl
dHVybiBvZmZzZXRPZlRhaWwoKSArIGltcG9ydEZ1bmN0aW9uTnVtICogc2l6ZW9mKEltcG9ydEZ1
bmN0aW9uSW5mbykgKyBPQkpFQ1RfT0ZGU0VUT0YoSW1wb3J0RnVuY3Rpb25JbmZvLCBib3hlZFRh
cmdldENhbGxlZUxvYWRMb2NhdGlvbik7IH0KLSAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1w
b3J0RnVuY3Rpb25TdHViKHNpemVfdCBpbXBvcnRGdW5jdGlvbk51bSkgeyByZXR1cm4gb2Zmc2V0
T2ZUYWlsKCkgKyBpbXBvcnRGdW5jdGlvbk51bSAqIHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8p
ICsgT0JKRUNUX09GRlNFVE9GKEltcG9ydEZ1bmN0aW9uSW5mbywgaW1wb3J0RnVuY3Rpb25TdHVi
KTsgfQotICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZJbXBvcnRGdW5jdGlvbihzaXplX3QgaW1w
b3J0RnVuY3Rpb25OdW0pIHsgcmV0dXJuIG9mZnNldE9mVGFpbCgpICsgaW1wb3J0RnVuY3Rpb25O
dW0gKiBzaXplb2YoSW1wb3J0RnVuY3Rpb25JbmZvKSArIE9CSkVDVF9PRkZTRVRPRihJbXBvcnRG
dW5jdGlvbkluZm8sIGltcG9ydEZ1bmN0aW9uKTsgfQotICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0
T2ZDYWxsTGlua0luZm8oc2l6ZV90IGltcG9ydEZ1bmN0aW9uTnVtKSB7IHJldHVybiBvZmZzZXRP
ZlRhaWwoKSArIGltcG9ydEZ1bmN0aW9uTnVtICogc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykg
KyBJbXBvcnRGdW5jdGlvbkluZm86Om9mZnNldE9mQ2FsbExpbmtJbmZvKCk7IH0KLSAgICBXcml0
ZUJhcnJpZXI8SlNPYmplY3Q+JiBpbXBvcnRGdW5jdGlvbih1bnNpZ25lZCBpbXBvcnRGdW5jdGlv
bk51bSkgeyByZXR1cm4gaW1wb3J0RnVuY3Rpb25JbmZvKGltcG9ydEZ1bmN0aW9uTnVtKS0+aW1w
b3J0RnVuY3Rpb247IH0KLQotICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEltcG9ydEZ1bmN0aW9u
SW5mbykgPT0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZih1aW50NjRfdCk+KHNpemVv
ZihJbXBvcnRGdW5jdGlvbkluZm8pKSwgIldlIHJlbHkgb24gdGhpcyBmb3IgdGhlIGFsaWdubWVu
dCB0byBiZSBjb3JyZWN0Iik7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgb2Zmc2V0T2ZU
YWJsZVB0cih1bnNpZ25lZCBudW1JbXBvcnRGdW5jdGlvbnMsIHVuc2lnbmVkIGkpIHsgcmV0dXJu
IG9mZnNldE9mVGFpbCgpICsgc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykgKiBudW1JbXBvcnRG
dW5jdGlvbnMgKyBzaXplb2YoV2FzbTo6VGFibGUqKSAqIGk7IH0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIHNpemVfdCBvZmZzZXRPZkdsb2JhbFB0cih1bnNpZ25lZCBudW1JbXBvcnRGdW5jdGlvbnMs
IHVuc2lnbmVkIG51bVRhYmxlcywgdW5zaWduZWQgaSkgeyByZXR1cm4gcm91bmRVcFRvTXVsdGlw
bGVPZjxzaXplb2YoV2FzbTo6R2xvYmFsOjpWYWx1ZSk+KG9mZnNldE9mVGFpbCgpICsgc2l6ZW9m
KEltcG9ydEZ1bmN0aW9uSW5mbykgKiBudW1JbXBvcnRGdW5jdGlvbnMgKyBzaXplb2YoV2FzbTo6
VGFibGUqKSAqIG51bVRhYmxlcykgKyBzaXplb2YoV2FzbTo6R2xvYmFsOjpWYWx1ZSkgKiBpOyB9
Ci0KLSAgICBjb25zdCBXYXNtOjpUYWcmIHRhZyh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiAq
bV90YWdzW2ldOyB9Ci0gICAgdm9pZCBzZXRUYWcodW5zaWduZWQsIFJlZjxjb25zdCBXYXNtOjpU
YWc+JiYpOwotCi0gICAgQ2FsbEZyYW1lKiB0ZW1wb3JhcnlDYWxsRnJhbWUoKSBjb25zdCB7IHJl
dHVybiBtX3RlbXBvcmFyeUNhbGxGcmFtZTsgfQotICAgIHZvaWQgc2V0VGVtcG9yYXJ5Q2FsbEZy
YW1lKENhbGxGcmFtZSogY2FsbEZyYW1lKQotICAgIHsKLSAgICAgICAgbV90ZW1wb3JhcnlDYWxs
RnJhbWUgPSBjYWxsRnJhbWU7Ci0gICAgfQotCi0gICAgdm9pZCogc29mdFN0YWNrTGltaXQoKSBj
b25zdCB7IHJldHVybiBtX3NvZnRTdGFja0xpbWl0OyB9Ci0KIHByaXZhdGU6Ci0gICAgSlNXZWJB
c3NlbWJseUluc3RhbmNlKFZNJiwgU3RydWN0dXJlKiwgSlNXZWJBc3NlbWJseU1vZHVsZSosIFdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkKik7CisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKFZNJiwg
U3RydWN0dXJlKiwgUmVmPFdhc206Okluc3RhbmNlPiYmLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiwg
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQqKTsKICAgICB+SlNXZWJBc3NlbWJseUluc3RhbmNlKCk7
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogICAgIERFQ0xBUkVfVklTSVRfQ0hJTERS
RU47CiAKLSAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKENoZWNrZWQ8c2l6ZV90PiBu
dW1JbXBvcnRGdW5jdGlvbnMsIENoZWNrZWQ8c2l6ZV90PiBudW1UYWJsZXMsIENoZWNrZWQ8c2l6
ZV90PiBudW1HbG9iYWxzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJvdW5kVXBUb011bHRpcGxl
T2Y8c2l6ZW9mKFdhc206Okdsb2JhbDo6VmFsdWUpPihvZmZzZXRPZlRhaWwoKSArIHNpemVvZihJ
bXBvcnRGdW5jdGlvbkluZm8pICogbnVtSW1wb3J0RnVuY3Rpb25zICsgc2l6ZW9mKFdhc206OlRh
YmxlKikgKiBudW1UYWJsZXMpICsgc2l6ZW9mKFdhc206Okdsb2JhbDo6VmFsdWUpICogbnVtR2xv
YmFsczsKLSAgICB9Ci0KLSAgICBib29sIGV2YWx1YXRlQ29uc3RhbnRFeHByZXNzaW9uKHVpbnQ2
NF90LCBXYXNtOjpUeXBlLCB1aW50NjRfdCYpOwotCisgICAgUmVmPFdhc206Okluc3RhbmNlPiBt
X2luc3RhbmNlOwogICAgIFZNKiBjb25zdCBtX3ZtOwotICAgIFdyaXRlQmFycmllcjxKU1dlYkFz
c2VtYmx5TW9kdWxlPiBtX2pzTW9kdWxlOworCisgICAgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2Jq
ZWN0PiBtX2dsb2JhbE9iamVjdDsKKyAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseU1vZHVs
ZT4gbV9tb2R1bGU7CiAgICAgV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkPiBt
X21vZHVsZVJlY29yZDsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseU1lbW9yeT4gbV9t
ZW1vcnk7CiAgICAgRml4ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlUYWJsZT4+
IG1fdGFibGVzOwotICAgIHZvaWQqIG1fc29mdFN0YWNrTGltaXQgeyBudWxscHRyIH07Ci0gICAg
Q2FnZWRQdHI8R2lnYWNhZ2U6OlByaW1pdGl2ZSwgdm9pZD4gbV9jYWNoZWRNZW1vcnk7Ci0gICAg
c2l6ZV90IG1fY2FjaGVkQm91bmRzQ2hlY2tpbmdTaXplIHsgMCB9OwotICAgIFJlZjxXYXNtOjpN
b2R1bGU+IG1fbW9kdWxlOwotCi0gICAgQ2FsbEZyYW1lKiBtX3RlbXBvcmFyeUNhbGxGcmFtZSB7
IG51bGxwdHIgfTsKLSAgICBXYXNtOjpHbG9iYWw6OlZhbHVlKiBtX2dsb2JhbHMgeyBudWxscHRy
IH07Ci0gICAgRnVuY3Rpb25XcmFwcGVyTWFwIG1fZnVuY3Rpb25XcmFwcGVyczsKLSAgICBCaXRW
ZWN0b3IgbV9nbG9iYWxzVG9NYXJrOwotICAgIEJpdFZlY3RvciBtX2dsb2JhbHNUb0JpbmRpbmc7
Ci0gICAgdW5zaWduZWQgbV9udW1JbXBvcnRGdW5jdGlvbnMgeyAwIH07Ci0gICAgSGFzaE1hcDx1
aW50MzJfdCwgUmVmPFdhc206Okdsb2JhbD4sIEludEhhc2g8dWludDMyX3Q+LCBXVEY6OlVuc2ln
bmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gbV9saW5rZWRHbG9iYWxzOwotICAg
IEJpdFZlY3RvciBtX3Bhc3NpdmVFbGVtZW50czsKLSAgICBCaXRWZWN0b3IgbV9wYXNzaXZlRGF0
YVNlZ21lbnRzOwotICAgIEZpeGVkVmVjdG9yPFJlZlB0cjxjb25zdCBXYXNtOjpUYWc+PiBtX3Rh
Z3M7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKaW5kZXggNmFhYTNkOGYxMWZl
Li5hNzE1M2EyN2UwNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCkBAIC02OSw3ICs2OSw3IEBAIFN0cnVjdHVyZSog
SlNXZWJBc3NlbWJseU1lbW9yeTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iCiAKIEpTV2ViQXNzZW1ibHlNZW1vcnk6OkpTV2ViQXNzZW1ibHlNZW1vcnko
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkK
LSAgICAsIG1fbWVtb3J5KFdhc206Ok1lbW9yeTo6Y3JlYXRlKHZtKSkKKyAgICAsIG1fbWVtb3J5
KFdhc206Ok1lbW9yeTo6Y3JlYXRlKCkpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuaAppbmRleCA3ZTFiMTE2NjkzY2Qu
LmUyMTMyN2E1NmE5MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseU1lbW9yeS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlNZW1vcnkuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiBjbGFzcyBBcnJheUJ1ZmZlcjsKIGNsYXNzIEpTQXJyYXlCdWZmZXI7CiAKLS8vIEZJWE1FOiBN
ZXJnZSBXYXNtOjpNZW1vcnkgaW50byB0aGlzIG5vdyB0aGF0IEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSBpcyB0aGUgb25seSBpbnN0YW5jZSBvYmplY3QuCiBjbGFzcyBKU1dlYkFzc2VtYmx5TWVtb3J5
IGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJh
c2UgPSBKU05vbkZpbmFsT2JqZWN0OwpAQCAtNjMsMTMgKzYyLDYgQEAgcHVibGljOgogCiAgICAg
SlNPYmplY3QqIHR5cGUoSlNHbG9iYWxPYmplY3QqKTsKIAotICAgIE1lbW9yeU1vZGUgbW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbWVtb3J5LT5tb2RlKCk7IH0KLSAgICBNZW1vcnlTaGFyaW5nTW9k
ZSBzaGFyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVtb3J5LT5zaGFyaW5nTW9kZSgpOyB9
Ci0gICAgc2l6ZV90IG1hcHBlZENhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9tZW1vcnktPm1h
cHBlZENhcGFjaXR5KCk7IH0KLSAgICB2b2lkKiBiYXNlUG9pbnRlcigpIGNvbnN0IHsgcmV0dXJu
IG1fbWVtb3J5LT5iYXNlUG9pbnRlcigpOyB9Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIHB0cmRp
ZmZfdCBvZmZzZXRPZk1lbW9yeSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2Vt
Ymx5TWVtb3J5LCBtX21lbW9yeSk7IH0KLQogcHJpdmF0ZToKICAgICBKU1dlYkFzc2VtYmx5TWVt
b3J5KFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVN0cnVj
dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5U3RydWN0
LmNwcAppbmRleCBiZjdkNzg2ZmY4MmIuLjVlNTZkYzNhM2JiNyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVN0cnVjdC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVN0cnVjdC5jcHAKQEAgLTU0
LDcgKzU0LDcgQEAgSlNXZWJBc3NlbWJseVN0cnVjdCogSlNXZWJBc3NlbWJseVN0cnVjdDo6dHJ5
Q3JlYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QKIHsKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAKLSAgICBSZWY8Y29uc3QgV2FzbTo6VHlwZURlZmluaXRpb24+IHR5
cGUgPSBpbnN0YW5jZS0+bW9kdWxlKCkubW9kdWxlSW5mb3JtYXRpb24oKS50eXBlU2lnbmF0dXJl
c1t0eXBlSW5kZXhdLT5leHBhbmQoKTsKKyAgICBSZWY8Y29uc3QgV2FzbTo6VHlwZURlZmluaXRp
b24+IHR5cGUgPSBpbnN0YW5jZS0+aW5zdGFuY2UoKS5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlv
bigpLnR5cGVTaWduYXR1cmVzW3R5cGVJbmRleF0tPmV4cGFuZCgpOwogCiAgICAgdm9pZCogYnVm
ZmVyID0gdHJ5QWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlTdHJ1Y3Q+KHZtKTsKICAgICBpZiAo
VU5MSUtFTFkoIWJ1ZmZlcikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcAppbmRleCBhMDNlYjMxZTBiM2IuLjBjNmY2NmM5MGM2
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eVRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5VGFibGUuY3BwCkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6
OnNldCh1aW50MzJfdCBpbmRleCwgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UqIGZ1bmN0aW9uKQog
ICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgbGVuZ3RoKCkpOwogICAgIFJFTEVBU0VfQVNTRVJU
KG1fdGFibGUtPmFzRnVuY3JlZlRhYmxlKCkpOwogICAgIGF1dG8mIHN1YlRoaXMgPSAqc3RhdGlj
X2Nhc3Q8V2FzbTo6RnVuY1JlZlRhYmxlKj4oJm1fdGFibGUuZ2V0KCkpOwotICAgIHN1YlRoaXMu
c2V0RnVuY3Rpb24oaW5kZXgsIGZ1bmN0aW9uLCBmdW5jdGlvbi0+aW1wb3J0YWJsZUZ1bmN0aW9u
KCksIGZ1bmN0aW9uLT5pbnN0YW5jZSgpKTsKKyAgICBzdWJUaGlzLnNldEZ1bmN0aW9uKGluZGV4
LCBmdW5jdGlvbiwgZnVuY3Rpb24tPmltcG9ydGFibGVGdW5jdGlvbigpLCAmZnVuY3Rpb24tPmlu
c3RhbmNlKCktPmluc3RhbmNlKCkpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlUYWJsZTo6Y2xl
YXIodWludDMyX3QgaW5kZXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XYXNtVG9KUy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9K
Uy5jcHAKaW5kZXggMGMwODBhNTk1YzUyLi44NWY4Zjk5NTA5MDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMjQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVk
ZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHQuaCIKICNp
bmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgorI2luY2x1ZGUgIldhc21JbnN0YW5jZS5oIgog
I2luY2x1ZGUgIldhc21PcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiV2FzbVR5cGVEZWZpbml0aW9u
SW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvblRyYWl0cy5oPgpAQCAtNDcsOCArNDgs
OCBAQCB1c2luZyBKSVQgPSBDQ2FsbEhlbHBlcnM7CiAKIHN0YXRpYyB2b2lkIG1hdGVyaWFsaXpl
SW1wb3J0SlNDZWxsKEpJVCYgaml0LCB1bnNpZ25lZCBpbXBvcnRJbmRleCwgR1BSUmVnIHJlc3Vs
dCkKIHsKLSAgICAvLyBXZSdyZSBjYWxsaW5nIG91dCBvZiB0aGUgY3VycmVudCBXZWJBc3NlbWJs
eS5JbnN0YW5jZS4gVGhhdCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UgaGFzIGEgbGlzdCBvZiBhbGwg
aXRzIGltcG9ydCBmdW5jdGlvbnMuCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKEdQUklu
Zm86Ondhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9m
ZnNldE9mSW1wb3J0RnVuY3Rpb24oaW1wb3J0SW5kZXgpKSwgcmVzdWx0KTsKKyAgICAvLyBXZSdy
ZSBjYWxsaW5nIG91dCBvZiB0aGUgY3VycmVudCBXZWJBc3NlbWJseS5JbnN0YW5jZS4gVGhhdCBJ
bnN0YW5jZSBoYXMgYSBsaXN0IG9mIGFsbCBpdHMgaW1wb3J0IGZ1bmN0aW9ucy4KKyAgICBqaXQu
bG9hZFB0cihKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIs
IEluc3RhbmNlOjpvZmZzZXRPZkltcG9ydEZ1bmN0aW9uKGltcG9ydEluZGV4KSksIHJlc3VsdCk7
CiB9CiAKIHN0YXRpYyBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRy
VGFnPiwgQmluZGluZ0ZhaWx1cmU+IGhhbmRsZUJhZEltcG9ydFR5cGVVc2UoSklUJiBqaXQsIHVu
c2lnbmVkIGltcG9ydEluZGV4LCBXYXNtOjpFeGNlcHRpb25UeXBlIGV4Y2VwdGlvblR5cGUpCkBA
IC0zMTMsNyArMzE0LDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRy
eVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhUeXBlSW4KICAgICAgICAgICAgICAg
ICBqaXQucHJlcGFyZVdhc21DYWxsT3BlcmF0aW9uKEdQUkluZm86Ondhc21Db250ZXh0SW5zdGFu
Y2VQb2ludGVyKTsKICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9u
PihHUFJJbmZvOjp3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlciwgdmFsdWVKU1IpOwogICAgICAg
ICAgICAgICAgIGppdC5jYWxsT3BlcmF0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uQ29u
dmVydFRvQmlnSW50KTsKLSAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIsIEpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6b2Zmc2V0T2ZWTSgpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJu
R1BSKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIsIEluc3RhbmNlOjpvZmZzZXRPZlZN
KCkpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOwogICAgICAgICAgICAgICAg
IGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpO
b25aZXJvLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0
dXJuR1BSLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkpKSk7CiAgICAgICAgICAgICAgICAgaml0LnN0
b3JlVmFsdWUoSlNSSW5mbzo6cmV0dXJuVmFsdWVKU1IsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQo
Y2FsbGVlRnJhbWVPZmZzZXQpKTsKICAgICAgICAgICAgIH0KQEAgLTMzNSw3ICszMzYsNyBAQCBF
eHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0Zh
aWx1cmU+IHdhc21Ub0pTKFR5cGVJbgogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEJhc2VsaW5l
SklUUmVnaXN0ZXJzOjpDYWxsOjpjYWxsZWVKU1IudGFnR1BSKCkpOwogI2VuZGlmCi0gICAgaml0
LmFkZFB0cihKSVQ6OlRydXN0ZWRJbW0zMihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9m
Q2FsbExpbmtJbmZvKGltcG9ydEluZGV4KSksIEdQUkluZm86Ondhc21Db250ZXh0SW5zdGFuY2VQ
b2ludGVyLCBCYXNlbGluZUpJVFJlZ2lzdGVyczo6Q2FsbDo6Y2FsbExpbmtJbmZvR1BSKTsKKyAg
ICBqaXQuYWRkUHRyKEpJVDo6VHJ1c3RlZEltbTMyKEluc3RhbmNlOjpvZmZzZXRPZkNhbGxMaW5r
SW5mbyhpbXBvcnRJbmRleCkpLCBHUFJJbmZvOjp3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlciwg
QmFzZWxpbmVKSVRSZWdpc3RlcnM6OkNhbGw6OmNhbGxMaW5rSW5mb0dQUik7CiAgICAgQ2FsbExp
bmtJbmZvOjplbWl0RGF0YUlDRmFzdFBhdGgoaml0KTsKIAogICAgIGlmIChzaWduYXR1cmUucmV0
dXJuQ291bnQoKSA9PSAxKSB7CkBAIC0zNDgsNyArMzQ5LDcgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhU
eXBlSW4KICAgICAgICAgICAgIGppdC5wcmVwYXJlV2FzbUNhbGxPcGVyYXRpb24oR1BSSW5mbzo6
d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIpOwogICAgICAgICAgICAgaml0LnNldHVwQXJndW1l
bnRzPGRlY2x0eXBlKG9wZXJhdGlvbkNvbnZlcnRUb0k2NCk+KEdQUkluZm86Ondhc21Db250ZXh0
SW5zdGFuY2VQb2ludGVyLCBKU1JJbmZvOjpyZXR1cm5WYWx1ZUpTUik7CiAgICAgICAgICAgICBq
aXQuY2FsbE9wZXJhdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkNvbnZlcnRUb0k2NCk7
Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0
T2ZWTSgpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICAgICAgICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjp3YXNtQ29udGV4dElu
c3RhbmNlUG9pbnRlciwgSW5zdGFuY2U6Om9mZnNldE9mVk0oKSksIEdQUkluZm86Om5vblByZXNl
cnZlZE5vblJldHVybkdQUik7CiAgICAgICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGpp
dC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgVk06OmV4Y2VwdGlvbk9mZnNl
dCgpKSkpOwogICAgICAgICAgICAgaml0Lm1vdmVWYWx1ZVJlZ3MoSlNSSW5mbzo6cmV0dXJuVmFs
dWVKU1IsIGRlc3QpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0zNjcsNyArMzY4LDcgQEAgRXhw
ZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWls
dXJlPiB3YXNtVG9KUyhUeXBlSW4KICAgICAgICAgICAgIGppdC5wcmVwYXJlV2FzbUNhbGxPcGVy
YXRpb24oR1BSSW5mbzo6d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIpOwogICAgICAgICAgICAg
aml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbkNvbnZlcnRUb0kzMik+KEdQUklu
Zm86Ondhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyLCBKU1JJbmZvOjpyZXR1cm5WYWx1ZUpTUik7
CiAgICAgICAgICAgICBqaXQuY2FsbE9wZXJhdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlv
bkNvbnZlcnRUb0kzMik7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIsIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6b2Zmc2V0T2ZWTSgpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BS
KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
Ojp3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlciwgSW5zdGFuY2U6Om9mZnNldE9mVk0oKSksIEdQ
UkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CiAgICAgICAgICAgICBleGNlcHRpb25D
aGVja3MuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwgVk06
OmV4Y2VwdGlvbk9mZnNldCgpKSkpOwogICAgICAgICAgICAgaml0Lm1vdmUoSlNSSW5mbzo6cmV0
dXJuVmFsdWVKU1IucGF5bG9hZEdQUigpLCBkZXN0SlNSLnBheWxvYWRHUFIoKSk7CiAjaWYgVVNF
KEpTVkFMVUUzMl82NCkKQEAgLTM5OSw3ICs0MDAsNyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFR5cGVJ
bgogICAgICAgICAgICAgaml0LnByZXBhcmVXYXNtQ2FsbE9wZXJhdGlvbihHUFJJbmZvOjp3YXNt
Q29udGV4dEluc3RhbmNlUG9pbnRlcik7CiAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8
ZGVjbHR5cGUob3BlcmF0aW9uQ29udmVydFRvRjMyKT4oR1BSSW5mbzo6d2FzbUNvbnRleHRJbnN0
YW5jZVBvaW50ZXIsIEpTUkluZm86OnJldHVyblZhbHVlSlNSKTsKICAgICAgICAgICAgIGppdC5j
YWxsT3BlcmF0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uQ29udmVydFRvRjMyKTsKLSAg
ICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjp3YXNt
Q29udGV4dEluc3RhbmNlUG9pbnRlciwgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZlZN
KCkpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworICAgICAgICAgICAgaml0
LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Ondhc21Db250ZXh0SW5zdGFu
Y2VQb2ludGVyLCBJbnN0YW5jZTo6b2Zmc2V0T2ZWTSgpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVk
Tm9uUmV0dXJuR1BSKTsKICAgICAgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmJy
YW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkp
KSk7CiAgICAgICAgICAgICBqaXQubW92ZURvdWJsZShGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiAs
IGRlc3QpOwogICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOwpAQCAtNDI3LDcgKzQyOCw3IEBA
IEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5n
RmFpbHVyZT4gd2FzbVRvSlMoVHlwZUluCiAgICAgICAgICAgICBqaXQucHJlcGFyZVdhc21DYWxs
T3BlcmF0aW9uKEdQUkluZm86Ondhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyKTsKICAgICAgICAg
ICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25Db252ZXJ0VG9GNjQpPihH
UFJJbmZvOjp3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlciwgSlNSSW5mbzo6cmV0dXJuVmFsdWVK
U1IpOwogICAgICAgICAgICAgaml0LmNhbGxPcGVyYXRpb248T3BlcmF0aW9uUHRyVGFnPihvcGVy
YXRpb25Db252ZXJ0VG9GNjQpOwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKEdQUkluZm86Ondhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyLCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6Om9mZnNldE9mVk0oKSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVy
bkdQUik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BS
SW5mbzo6d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIsIEluc3RhbmNlOjpvZmZzZXRPZlZNKCkp
LCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOwogICAgICAgICAgICAgZXhjZXB0
aW9uQ2hlY2tzLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8s
IENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIs
IFZNOjpleGNlcHRpb25PZmZzZXQoKSkpKTsKICAgICAgICAgICAgIGppdC5tb3ZlRG91YmxlKEZQ
UkluZm86OnJldHVyblZhbHVlRlBSLCBkZXN0KTsKICAgICAgICAgICAgIGRvbmUubGluaygmaml0
KTsKQEAgLTQ0MiwxNCArNDQzLDE0IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxX
YXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMoVHlwZUluCiAgICAgICAg
ICAgICAgICAgICAgIGppdC5wcmVwYXJlV2FzbUNhbGxPcGVyYXRpb24oR1BSSW5mbzo6d2FzbUNv
bnRleHRJbnN0YW5jZVBvaW50ZXIpOwogICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1
bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uQ29udmVydFRvRnVuY3JlZik+KEdQUkluZm86Ondhc21D
b250ZXh0SW5zdGFuY2VQb2ludGVyLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnR5cGVE
ZWZpbml0aW9uKSwgSlNSSW5mbzo6cmV0dXJuVmFsdWVKU1IpOwogICAgICAgICAgICAgICAgICAg
ICBqaXQuY2FsbE9wZXJhdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkNvbnZlcnRUb0Z1
bmNyZWYpOwotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIsIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6b2Zmc2V0T2ZWTSgpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BS
KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86Ondhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyLCBJbnN0YW5jZTo6b2Zmc2V0T2ZW
TSgpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKICAgICAgICAgICAgICAg
ICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBl
cnM6Ok5vblplcm8sIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpub25QcmVzZXJ2ZWRO
b25SZXR1cm5HUFIsIFZNOjpleGNlcHRpb25PZmZzZXQoKSkpKTsKICAgICAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoT3B0aW9uczo6dXNlV2ViQXNzZW1i
bHlHQygpKTsKICAgICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVXYXNtQ2FsbE9wZXJhdGlv
bihHUFJJbmZvOjp3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcik7CiAgICAgICAgICAgICAgICAg
ICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25Db252ZXJ0VG9BbnlyZWYp
PihHUFJJbmZvOjp3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlciwgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKCZ0eXBlRGVmaW5pdGlvbiksIEpTUkluZm86OnJldHVyblZhbHVlSlNSKTsKICAg
ICAgICAgICAgICAgICAgICAgaml0LmNhbGxPcGVyYXRpb248T3BlcmF0aW9uUHRyVGFnPihvcGVy
YXRpb25Db252ZXJ0VG9BbnlyZWYpOwotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIs
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZWTSgpKSwgR1BSSW5mbzo6bm9uUHJlc2Vy
dmVkTm9uUmV0dXJuR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Ondhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyLCBJbnN0
YW5jZTo6b2Zmc2V0T2ZWTSgpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsK
ICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuYnJhbmNoVGVz
dFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
Ojpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIFZNOjpleGNlcHRpb25PZmZzZXQoKSkpKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaml0Lm1vdmVWYWx1ZVJlZ3MoSlNSSW5m
bzo6cmV0dXJuVmFsdWVKU1IsIHdhc21DYWxsSW5mby5yZXN1bHRzWzBdLmxvY2F0aW9uLmpzcigp
KTsKQEAgLTQ3MSw3ICs0NzIsNyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2Fz
bUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFR5cGVJbgogICAgICAgICBp
ZiBjb25zdGV4cHIgKCEhbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgICAg
ICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9y
U2xvd1BhdGhDYWxsKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKLSAg
ICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Ondhc21Db250
ZXh0SW5zdGFuY2VQb2ludGVyLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mVk0oKSks
IEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjp3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRl
ciwgSW5zdGFuY2U6Om9mZnNldE9mVk0oKSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVy
bkdQUik7CiAgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmJyYW5jaFRlc3RQdHIo
Q0NhbGxIZWxwZXJzOjpOb25aZXJvLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6bm9u
UHJlc2VydmVkTm9uUmV0dXJuR1BSLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkpKSk7CiAKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5yZXR1cm5Db3VudCgpOyArK2kp
IHsKQEAgLTQ5MSw3ICs0OTIsNyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2Fz
bUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFR5cGVJbgogCiAgICAgaWYg
KCFleGNlcHRpb25DaGVja3MuZW1wdHkoKSkgewogICAgICAgICBleGNlcHRpb25DaGVja3MubGlu
aygmaml0KTsKLSAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUklu
Zm86Ondhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9m
ZnNldE9mVk0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjp3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRl
ciwgSW5zdGFuY2U6Om9mZnNldE9mVk0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAg
ICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGppdC5wcmVwYXJlV2FzbUNhbGxPcGVyYXRp
b24oR1BSSW5mbzo6d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIpOwogICAgICAgICBqaXQuc2V0
dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uV2FzbVVud2luZCk+KEdQUkluZm86Ondhc21D
b250ZXh0SW5zdGFuY2VQb2ludGVyKTsKQEAgLTUxMCw3ICs1MTEsNyBAQCB2b2lkIGVtaXRUaHJv
d1dhc21Ub0pTRXhjZXB0aW9uKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgd2FzbUluc3RhbmNl
LCBXYXNtOjpFeAogewogICAgIEFTU0VSVCh3YXNtSW5zdGFuY2UgIT0gR1BSSW5mbzo6YXJndW1l
bnRHUFIyKTsKICAgICBBU1NFUlQod2FzbUluc3RhbmNlICE9IEludmFsaWRHUFJSZWcpOwotICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyh3YXNtSW5zdGFuY2UsIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZWTSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mod2FzbUluc3RhbmNlLCBXYXNtOjpJ
bnN0YW5jZTo6b2Zmc2V0T2ZWTSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKICAgICBqaXQu
Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihHUFJJbmZvOjph
cmd1bWVudEdQUjIpOwogCiAgICAgaWYgKHdhc21JbnN0YW5jZSAhPSBHUFJJbmZvOjphcmd1bWVu
dEdQUjApCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9K
Uy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuaAppbmRleCAwOThj
MTk1M2QyNDEuLjJmZjZhNzY4NGE2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2FzbVRvSlMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
YXNtVG9KUy5oCkBAIC00MCw2ICs0MCw3IEBAIGNsYXNzIFZNOwogCiBuYW1lc3BhY2UgV2FzbSB7
CiAKK2NsYXNzIEluc3RhbmNlOwogY2xhc3MgV2FzbVRvSlNDYWxsZWU7CiAKIEV4cGVjdGVkPE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2Fz
bVRvSlMoVHlwZUluZGV4LCB1bnNpZ25lZCBpbXBvcnRJbmRleCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCmluZGV4IGQy
YzFhNDY3YTI2Mi4uNzJkN2YwOTI4MTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY5LDcgKzY5LDcgQEAg
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uLCAoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwKICAgICBjb25zdCBXYXNtOjpGdW5jdGlvblNpZ25hdHVy
ZSYgc2lnbmF0dXJlID0gV2FzbTo6VHlwZUluZm9ybWF0aW9uOjpnZXRGdW5jdGlvblNpZ25hdHVy
ZSh0eXBlSW5kZXgpOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIG1lbW9yeSB3ZSB0aGlu
ayB3ZSBhcmUgZ29pbmcgdG8gcnVuIHdpdGggbWF0Y2hlcyB0aGUgb25lIHdlIGV4cGVjdC4KLSAg
ICBBU1NFUlQod2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpLT5jYWxsZWVHcm91cCgpLT5pc1NhZmVU
b1J1bih3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPm1lbW9yeSgpLT5tZW1vcnkoKS5tb2RlKCkp
KTsKKyAgICBBU1NFUlQod2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpLT5pbnN0YW5jZSgpLmNhbGxl
ZUdyb3VwKCktPmlzU2FmZVRvUnVuKHdhc21GdW5jdGlvbi0+aW5zdGFuY2UoKS0+bWVtb3J5KCkt
Pm1lbW9yeSgpLm1vZGUoKSkpOwogCiAgICAgc3RkOjpvcHRpb25hbDxUcmFjZVNjb3BlPiB0cmFj
ZVNjb3BlOwogICAgIGlmIChPcHRpb25zOjp1c2VUcmFjZVBvaW50cygpKQpAQCAtNzgsNiArNzgs
NyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24sIChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGtl
ZXBBbGl2ZUFyZ3M7CiAgICAgVmVjdG9yPEVuY29kZWRKU1ZhbHVlLCBNYXJrZWRBcmd1bWVudEJ1
ZmZlcjo6aW5saW5lQ2FwYWNpdHk+IGJveGVkQXJnczsKICAgICBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqIGpzSW5zdGFuY2UgPSB3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCk7CisgICAgV2FzbTo6SW5z
dGFuY2UqIHdhc21JbnN0YW5jZSA9ICZqc0luc3RhbmNlLT5pbnN0YW5jZSgpOwogCiAgICAgaWYg
KHNpZ25hdHVyZS5hcmd1bWVudHNPclJlc3VsdHNJbmNsdWRlVjEyOCgpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBXYXNtOjplcnJvck1lc3Nh
Z2VGb3JFeGNlcHRpb25UeXBlKFdhc206OkV4Y2VwdGlvblR5cGU6OlR5cGVFcnJvckludmFsaWRW
MTI4VXNlKSk7CkBAIC0xMDAsMTAgKzEwMSwxMCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
Y2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAog
ICAgIC8vIGhhbmRsZXIgbWlnaHQgcmVhZCB0aGUgZ2xvYmFsIG9iamVjdCBmcm9tIHRoZSBjYWxs
ZWUuCiAgICAgLy8gRm9yIHdhc20sIHdlIHNldHVwIHxjb2RlQmxvY2t8IGFuZCB8dGhpc3wgZGlm
ZmVyZW50bHkuCiAgICAgLy8gICAgIHx0aGlzfCA6IFdlIGtlZXAgSlNXZWJBc3NlbWJseUluc3Rh
bmNlIGluIHx0aGlzfCB0byBhbmNob3IgaXQgZm9yIEdDLgotICAgIC8vICAgICB8Y29kZUJsb2Nr
fCA6IEpTIGVudHJ5IHdyYXBwZXIgZXhwZWN0cyBhIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogYXMg
dGhlIHxjb2RlQmxvY2t8IHZhbHVlIGFyZ3VtZW50LgorICAgIC8vICAgICB8Y29kZUJsb2NrfCA6
IEpTIGVudHJ5IHdyYXBwZXIgZXhwZWN0cyBhIFdhc206Okluc3RhbmNlKiBhcyB0aGUgfGNvZGVC
bG9ja3wgdmFsdWUgYXJndW1lbnQuCiAgICAgUHJvdG9DYWxsRnJhbWUgcHJvdG9DYWxsRnJhbWU7
CiAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChudWxscHRyLCBnbG9iYWxPYmplY3QsIHdhc21GdW5j
dGlvbiwganNJbnN0YW5jZSwgYXJnQ291bnQsIGFyZ3MpOwotICAgIHByb3RvQ2FsbEZyYW1lLnNl
dFdhc21JbnN0YW5jZShqc0luc3RhbmNlKTsKKyAgICBwcm90b0NhbGxGcmFtZS5zZXRXYXNtSW5z
dGFuY2Uod2FzbUluc3RhbmNlKTsKIAogICAgIC8vIEZJWE1FIERvIGF3YXkgd2l0aCB0aGlzIGVu
dGlyZSBmdW5jdGlvbiwgYW5kIG9ubHkgdXNlIHRoZSBlbnRyeXBvaW50IGdlbmVyYXRlZCBieSBC
My4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ4NgogICAgIHsK
QEAgLTM2NiwxNyArMzY3LDE2IEBAIENvZGVQdHI8SlNFbnRyeVB0clRhZz4gV2ViQXNzZW1ibHlG
dW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3coKQogCiAgICAgLy8gQXQgdGhpcyBwb2ludCwg
d2UncmUgY29tbWl0dGVkIHRvIGRvaW5nIGEgZmFzdCBjYWxsLgogCi0gICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGluc3RhbmNlKCkpLCBHUFJJbmZvOjp3YXNtQ29udGV4
dEluc3RhbmNlUG9pbnRlcik7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKCZpbnN0YW5jZSgpLT5pbnN0YW5jZSgpKSwgR1BSSW5mbzo6d2FzbUNvbnRleHRJbnN0YW5j
ZVBvaW50ZXIpOwogICAgIGppdC5zdG9yZVdhc21DYWxsZWVDYWxsZWUoJm1fYm94ZWRXYXNtQ2Fs
bGVlKTsKICNpZiAhQ1BVKEFSTSkgLy8gQVJNIGhhcyBubyBwaW5uZWQgcmVnaXN0ZXJzIGZvciBX
YXNtIE1lbW9yeSwgc28gbm8gbmVlZCB0byBzZXQgdGhlbSB1cAotICAgIGlmICghIWluc3RhbmNl
KCktPm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0aW9uKCkubWVtb3J5KSB7CisgICAgaWYgKCEhaW5z
dGFuY2UoKS0+aW5zdGFuY2UoKS5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpLm1lbW9yeSkg
ewogICAgICAgICBhdXRvIG1vZGUgPSBpbnN0YW5jZSgpLT5tZW1vcnlNb2RlKCk7Ci0gICAgICAg
IGF1dG8mIG1lbW9yeSA9IGluc3RhbmNlKCktPm1lbW9yeSgpLT5tZW1vcnkoKTsKLSAgICAgICAg
aWYgKG1vZGUgPT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nIHx8IChtb2RlID09IE1lbW9yeU1vZGU6
OkJvdW5kc0NoZWNraW5nICYmIG1lbW9yeS5zaGFyaW5nTW9kZSgpID09IE1lbW9yeVNoYXJpbmdN
b2RlOjpTaGFyZWQpKSB7CisgICAgICAgIGlmIChtb2RlID09IE1lbW9yeU1vZGU6OlNpZ25hbGlu
ZyB8fCAobW9kZSA9PSBNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZyAmJiBpbnN0YW5jZSgpLT5p
bnN0YW5jZSgpLm1lbW9yeSgpLT5zaGFyaW5nTW9kZSgpID09IE1lbW9yeVNoYXJpbmdNb2RlOjpT
aGFyZWQpKSB7CiAgICAgICAgICAgICAvLyBDYXBhY2l0eSBhbmQgYmFzZVBvaW50ZXIgd2lsbCBu
b3QgYmUgY2hhbmdlZC4KICAgICAgICAgICAgIGlmIChtb2RlID09IE1lbW9yeU1vZGU6OkJvdW5k
c0NoZWNraW5nKQotICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTY0KG1lbW9yeS5tYXBwZWRDYXBhY2l0eSgpKSwgR1BSSW5mbzo6d2FzbUJvdW5kc0NoZWNr
aW5nU2l6ZVJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihtZW1vcnkuYmFzZVBvaW50ZXIoKSksIEdQUkluZm86Ondhc21CYXNlTWVtb3J5
UG9pbnRlcik7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tNjQoaW5zdGFuY2UoKS0+aW5zdGFuY2UoKS5tZW1vcnkoKS0+bWFwcGVkQ2FwYWNpdHkoKSks
IEdQUkluZm86Ondhc21Cb3VuZHNDaGVja2luZ1NpemVSZWdpc3Rlcik7CisgICAgICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaW5zdGFuY2UoKS0+aW5zdGFuY2Uo
KS5tZW1vcnkoKS0+YmFzZVBvaW50ZXIoKSksIEdQUkluZm86Ondhc21CYXNlTWVtb3J5UG9pbnRl
cik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaE9yQm91bmRz
Q2hlY2tpbmdTaXplID0gSW52YWxpZEdQUlJlZzsKICAgICAgICAgICAgIGlmIChpc0FSTTY0RSgp
KSB7CkBAIC0zODQsMTIgKzM4NCwxMiBAQCBDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFdlYkFzc2Vt
Ymx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KCkKICAgICAgICAgICAgICAgICAgICAg
c2NyYXRjaE9yQm91bmRzQ2hlY2tpbmdTaXplID0gR1BSSW5mbzo6d2FzbUJvdW5kc0NoZWNraW5n
U2l6ZVJlZ2lzdGVyOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAg
c2NyYXRjaE9yQm91bmRzQ2hlY2tpbmdTaXplID0gc3RhY2tMaW1pdEdQUjsKLSAgICAgICAgICAg
ICAgICBqaXQubG9hZFBhaXJQdHIoR1BSSW5mbzo6d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIs
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0
T2ZDYWNoZWRNZW1vcnkoKSksIEdQUkluZm86Ondhc21CYXNlTWVtb3J5UG9pbnRlciwgc2NyYXRj
aE9yQm91bmRzQ2hlY2tpbmdTaXplKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFBhaXJQdHIo
R1BSSW5mbzo6d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIsIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKFdhc206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgR1BSSW5mbzo6
d2FzbUJhc2VNZW1vcnlQb2ludGVyLCBzY3JhdGNoT3JCb3VuZHNDaGVja2luZ1NpemUpOwogICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSBNZW1vcnlNb2Rl
OjpCb3VuZHNDaGVja2luZykKLSAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRQYWlyUHRyKEdQ
UkluZm86Ondhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBHUFJJ
bmZvOjp3YXNtQmFzZU1lbW9yeVBvaW50ZXIsIEdQUkluZm86Ondhc21Cb3VuZHNDaGVja2luZ1Np
emVSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUGFpclB0cihHUFJJbmZv
Ojp3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlciwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
V2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBHUFJJbmZvOjp3YXNtQmFz
ZU1lbW9yeVBvaW50ZXIsIEdQUkluZm86Ondhc21Cb3VuZHNDaGVja2luZ1NpemVSZWdpc3Rlcik7
CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIs
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIEdQUkluZm86
Ondhc21CYXNlTWVtb3J5UG9pbnRlcik7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjp3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRl
ciwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBHUFJJbmZvOjp3YXNt
QmFzZU1lbW9yeVBvaW50ZXIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaml0LmNhZ2VD
b25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUsIEdQUkluZm86Ondhc21CYXNlTWVtb3J5
UG9pbnRlciwgc2NyYXRjaE9yQm91bmRzQ2hlY2tpbmdTaXplLCBzY3JhdGNoSlNSLnBheWxvYWRH
UFIoKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCmluZGV4IGU0
ZDY3M2YyMjBkNi4uMTc0YzhmMDFhNzdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5j
cHAKQEAgLTYyLDcgKzYyLDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNvbnN0cnVjdEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWwKICAgICBTdHJ1Y3R1
cmUqIGluc3RhbmNlU3RydWN0dXJlID0gSlNDX0dFVF9ERVJJVkVEX1NUUlVDVFVSRSh2bSwgd2Vi
QXNzZW1ibHlJbnN0YW5jZVN0cnVjdHVyZSwgbmV3VGFyZ2V0LCBjYWxsRnJhbWUtPmpzQ2FsbGVl
KCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKLSAgICBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gSlNXZWJBc3NlbWJseUluc3RhbmNlOjp0cnlDcmVh
dGUodm0sIGluc3RhbmNlU3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6Y3JlYXRlUHJpdmF0ZU1vZHVsZUtleSgpLCBtb2R1bGUsIGltcG9ydE9iamVjdCwgV2Fz
bTo6Q3JlYXRpb25Nb2RlOjpGcm9tSlMpOworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5z
dGFuY2UgPSBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnRyeUNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZVByaXZhdGVNb2R1bGVLZXkoKSwgbW9kdWxl
LCBpbXBvcnRPYmplY3QsIGluc3RhbmNlU3RydWN0dXJlLCBSZWY8V2FzbTo6TW9kdWxlPihtb2R1
bGUtPm1vZHVsZSgpKSwgV2FzbTo6Q3JlYXRpb25Nb2RlOjpGcm9tSlMpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBpbnN0YW5jZS0+aW5pdGlhbGl6ZUltcG9y
dHMoZ2xvYmFsT2JqZWN0LCBpbXBvcnRPYmplY3QsIFdhc206OkNyZWF0aW9uTW9kZTo6RnJvbUpT
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkLmNwcAppbmRleCBkNzhjYmMzMjhhNWMuLjA5Zjk1Y2U1YWMwMyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBAIFN5bmNocm9ub3VzbmVzcyBXZWJB
c3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhCiAKICAgICBSRUxFQVNFX0FTU0VSVChtX2luc3RhbmNlKTsKIAotICAgIEpTV2ViQXNzZW1i
bHlNb2R1bGUqIG1vZHVsZSA9IG1faW5zdGFuY2UtPmpzTW9kdWxlKCk7CisgICAgSlNXZWJBc3Nl
bWJseU1vZHVsZSogbW9kdWxlID0gbV9pbnN0YW5jZS0+bW9kdWxlKCk7CiAgICAgU3ltYm9sVGFi
bGUqIGV4cG9ydFN5bWJvbFRhYmxlID0gbW9kdWxlLT5leHBvcnRTeW1ib2xUYWJsZSgpOwogCiAg
ICAgSlNNb2R1bGVFbnZpcm9ubWVudCogbW9kdWxlRW52aXJvbm1lbnQgPSBKU01vZHVsZUVudmly
b25tZW50OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgbnVsbHB0ciwgZXhwb3J0U3ltYm9sVGFi
bGUsIGpzVERaVmFsdWUoKSwgdGhpcyk7CkBAIC0xMjQsNyArMTI0LDcgQEAgdm9pZCBXZWJBc3Nl
bWJseU1vZHVsZVJlY29yZDo6aW5pdGlhbGl6ZUltcG9ydHMoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlMKIAogICAgIFJFTEVBU0VfQVNTRVJUKG1faW5zdGFuY2UpOwogCi0gICAgSlNX
ZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlID0gbV9pbnN0YW5jZS0+anNNb2R1bGUoKTsKKyAgICBK
U1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUgPSBtX2luc3RhbmNlLT5tb2R1bGUoKTsKICAgICBj
b25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBtb2R1bGUt
Pm1vZHVsZUluZm9ybWF0aW9uKCk7CiAKICAgICBhdXRvIGV4Y2VwdGlvbiA9IFsmXSAoSlNPYmpl
Y3QqIGVycm9yKSB7CkBAIC0yMDEsNyArMjAxLDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJl
Y29yZDo6aW5pdGlhbGl6ZUltcG9ydHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlMK
ICAgICAgICAgICAgIGlmICghdmFsdWUuaXNDYWxsYWJsZSgpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihnbG9iYWxPYmplY3Qs
IHZtLCBpbXBvcnRGYWlsTWVzc2FnZShpbXBvcnQsICJpbXBvcnQgZnVuY3Rpb24iX3MsICJtdXN0
IGJlIGNhbGxhYmxlIl9zKSkpOwogCi0gICAgICAgICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
IGNhbGxlZUluc3RhbmNlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIFdhc206Okluc3RhbmNlKiBj
YWxsZWVJbnN0YW5jZSA9IG51bGxwdHI7CiAgICAgICAgICAgICBXYXNtVG9XYXNtSW1wb3J0YWJs
ZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbiA9IG51bGxwdHI7
CiAgICAgICAgICAgICBjb25zdCB1aW50cHRyX3QqIGJveGVkVGFyZ2V0Q2FsbGVlTG9hZExvY2F0
aW9uID0gbnVsbHB0cjsKICAgICAgICAgICAgIEpTT2JqZWN0KiBmdW5jdGlvbiA9IGpzQ2FzdDxK
U09iamVjdCo+KHZhbHVlKTsKQEAgLTIxNCw3ICsyMTQsNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkOjppbml0aWFsaXplSW1wb3J0cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKUwogICAgICAgICAgICAgICAgIFdhc206OlR5cGVJbmRleCBpbXBvcnRlZFR5cGVJbmRleDsK
ICAgICAgICAgICAgICAgICBpZiAod2FzbUZ1bmN0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAg
IGltcG9ydGVkVHlwZUluZGV4ID0gd2FzbUZ1bmN0aW9uLT50eXBlSW5kZXgoKTsKLSAgICAgICAg
ICAgICAgICAgICAgY2FsbGVlSW5zdGFuY2UgPSB3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGNhbGxlZUluc3RhbmNlID0gJndhc21GdW5jdGlvbi0+aW5zdGFu
Y2UoKS0+aW5zdGFuY2UoKTsKICAgICAgICAgICAgICAgICAgICAgZW50cnlwb2ludExvYWRMb2Nh
dGlvbiA9IHdhc21GdW5jdGlvbi0+ZW50cnlwb2ludExvYWRMb2NhdGlvbigpOwogICAgICAgICAg
ICAgICAgICAgICBib3hlZFRhcmdldENhbGxlZUxvYWRMb2NhdGlvbiA9IHdhc21GdW5jdGlvbi0+
Ym94ZWRXYXNtQ2FsbGVlTG9hZExvY2F0aW9uKCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
QEAgLTIzMiwxMSArMjMyLDExIEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmluaXRp
YWxpemVJbXBvcnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTCiAgICAgICAgICAg
ICAvLyBpdi4gQXBwZW5kIHYgdG8gZnVuY3MuCiAgICAgICAgICAgICAvLyBOb3RlOiBhZGRpbmcg
dGhlIEpTQ2VsbCB0byB0aGUgaW5zdGFuY2UgbGlzdCBmdWxmaWxscyBjbG9zdXJlIHJlcXVpcmVt
ZW50cyBiLiBhYm92ZSAodGhlIFdlYkFzc2VtYmx5Lkluc3RhbmNlIHdpbCBiZSBrZXB0IGFsaXZl
KSBhbmQgdi4gYmVsb3cgKHRoZSBKU0Z1bmN0aW9uKS4KIAotICAgICAgICAgICAgYXV0byogaW5m
byA9IG1faW5zdGFuY2UtPmltcG9ydEZ1bmN0aW9uSW5mbyhpbXBvcnQua2luZEluZGV4KTsKLSAg
ICAgICAgICAgIGluZm8tPnRhcmdldEluc3RhbmNlLnNldE1heUJlTnVsbCh2bSwgbV9pbnN0YW5j
ZS5nZXQoKSwgY2FsbGVlSW5zdGFuY2UpOworICAgICAgICAgICAgYXV0byogaW5mbyA9IG1faW5z
dGFuY2UtPmluc3RhbmNlKCkuaW1wb3J0RnVuY3Rpb25JbmZvKGltcG9ydC5raW5kSW5kZXgpOwor
ICAgICAgICAgICAgaW5mby0+dGFyZ2V0SW5zdGFuY2UgPSBjYWxsZWVJbnN0YW5jZTsKICAgICAg
ICAgICAgIGluZm8tPndhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uID0gZW50cnlwb2ludExvYWRM
b2NhdGlvbjsKICAgICAgICAgICAgIGluZm8tPmJveGVkVGFyZ2V0Q2FsbGVlTG9hZExvY2F0aW9u
ID0gYm94ZWRUYXJnZXRDYWxsZWVMb2FkTG9jYXRpb247Ci0gICAgICAgICAgICBtX2luc3RhbmNl
LT5pbXBvcnRGdW5jdGlvbihpbXBvcnQua2luZEluZGV4KS5zZXQodm0sIG1faW5zdGFuY2UuZ2V0
KCksIGZ1bmN0aW9uKTsKKyAgICAgICAgICAgIG1faW5zdGFuY2UtPmluc3RhbmNlKCkuaW1wb3J0
RnVuY3Rpb24oaW1wb3J0LmtpbmRJbmRleCkuc2V0KHZtLCBtX2luc3RhbmNlLmdldCgpLCBmdW5j
dGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0yNTYsMTAgKzI1Niwx
MCBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjppbml0aWFsaXplSW1wb3J0cyhKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKUwogICAgICAgICAgICAgICAgICAgICBjYXNlIFdh
c206OlR5cGVLaW5kOjpJNjQ6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgV2FzbTo6VHlwZUtp
bmQ6OkYzMjoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RjY0Ogot
ICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnN0YW5jZS0+c2V0R2xvYmFsKGltcG9ydC5raW5k
SW5kZXgsIGdsb2JhbFZhbHVlLT5nbG9iYWwoKS0+Z2V0UHJpbWl0aXZlKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5zZXRHbG9iYWwoaW1wb3J0Lmtp
bmRJbmRleCwgZ2xvYmFsVmFsdWUtPmdsb2JhbCgpLT5nZXRQcmltaXRpdmUoKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBXYXNtOjpU
eXBlS2luZDo6VjEyODoKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zdGFuY2UtPnNldEds
b2JhbChpbXBvcnQua2luZEluZGV4LCBnbG9iYWxWYWx1ZS0+Z2xvYmFsKCktPmdldFZlY3Rvcigp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zdGFuY2UtPmluc3RhbmNlKCkuc2V0R2xv
YmFsKGltcG9ydC5raW5kSW5kZXgsIGdsb2JhbFZhbHVlLT5nbG9iYWwoKS0+Z2V0VmVjdG9yKCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoV2FzbTo6aXNFeHRlcm5yZWYoZGVj
bGFyZWRHbG9iYWxUeXBlKSkgewpAQCAtMjY3LDcgKzI2Nyw3IEBAIHZvaWQgV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQ6OmluaXRpYWxpemVJbXBvcnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgdm9pZCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWdsb2JhbC50
eXBlLmlzTnVsbGFibGUoKSAmJiB2YWx1ZS5pc051bGwoKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9y
KGdsb2JhbE9iamVjdCwgdm0sIGltcG9ydEZhaWxNZXNzYWdlKGltcG9ydCwgImltcG9ydGVkIGds
b2JhbCJfcywgIm5vbi1udWxsIGV4dGVybnJlZiBjYW5ub3QgYmUgbnVsbCJfcykpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2luc3RhbmNlLT5zZXRHbG9iYWwoaW1wb3J0LmtpbmRJ
bmRleCwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zdGFuY2UtPmlu
c3RhbmNlKCkuc2V0R2xvYmFsKGltcG9ydC5raW5kSW5kZXgsIHZhbHVlKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoV2FzbTo6aXNGdW5jcmVmKGRlY2xhcmVkR2xvYmFsVHlw
ZSkgfHwgKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUdDKCkgJiYgaXNSZWZXaXRoVHlwZUluZGV4
KGRlY2xhcmVkR2xvYmFsVHlwZSkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2Vi
QXNzZW1ibHlGdW5jdGlvbiogd2FzbUZ1bmN0aW9uID0gbnVsbHB0cjsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogd2FzbVdyYXBwZXJGdW5j
dGlvbiA9IG51bGxwdHI7CkBAIC0yODUsMTMgKzI4NSwxMyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkOjppbml0aWFsaXplSW1wb3J0cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKUwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlv
bihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGdsb2JhbE9iamVjdCwgdm0sIGltcG9ydEZh
aWxNZXNzYWdlKGltcG9ydCwgImltcG9ydGVkIGdsb2JhbCJfcywgIkFyZ3VtZW50IGZ1bmN0aW9u
IGRpZCBub3QgbWF0Y2ggdGhlIHJlZmVyZW5jZSB0eXBlIl9zKSkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zdGFuY2Ut
PnNldEdsb2JhbChpbXBvcnQua2luZEluZGV4LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5zZXRHbG9iYWwoaW1wb3J0LmtpbmRJbmRl
eCwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VXZWJBc3NlbWJseUdD
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gV2FzbTo6aW50ZXJuYWxp
emVFeHRlcm5yZWYoZ2xvYmFsVmFsdWUtPmdsb2JhbCgpLT5nZXQoZ2xvYmFsT2JqZWN0KSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFXYXNtOjpUeXBlSW5mb3JtYXRpb246OmNh
c3RSZWZlcmVuY2UodmFsdWUsIGRlY2xhcmVkR2xvYmFsVHlwZS5pc051bGxhYmxlKCksIGRlY2xh
cmVkR2xvYmFsVHlwZS5pbmRleCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihnbG9iYWxPYmplY3Qs
IHZtLCBpbXBvcnRGYWlsTWVzc2FnZShpbXBvcnQsICJpbXBvcnRlZCBnbG9iYWwiX3MsICJBcmd1
bWVudCB2YWx1ZSBkaWQgbm90IG1hdGNoIHRoZSByZWZlcmVuY2UgdHlwZSJfcykpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2luc3RhbmNlLT5zZXRHbG9iYWwoaW1wb3J0LmtpbmRJ
bmRleCwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zdGFuY2UtPmlu
c3RhbmNlKCkuc2V0R2xvYmFsKGltcG9ydC5raW5kSW5kZXgsIHZhbHVlKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CkBAIC0zMTAsMTkgKzMxMCwxOSBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
Ojppbml0aWFsaXplSW1wb3J0cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKUwogICAg
ICAgICAgICAgICAgICAgICAvLyBpaWkuIEFwcGVuZCBUb1dlYkFzc2VtYmx5VmFsdWUodikgdG8g
aW1wb3J0cy4KICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChnbG9iYWxUeXBlLmtpbmQpIHsK
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6STMyOgotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9pbnN0YW5jZS0+c2V0R2xvYmFsKGltcG9ydC5raW5kSW5kZXgsIHZh
bHVlLnRvSW50MzIoZ2xvYmFsT2JqZWN0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2lu
c3RhbmNlLT5pbnN0YW5jZSgpLnNldEdsb2JhbChpbXBvcnQua2luZEluZGV4LCB2YWx1ZS50b0lu
dDMyKGdsb2JhbE9iamVjdCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6Okk2NDogewogICAgICAgICAgICAg
ICAgICAgICAgICAgaW50NjRfdCBiaXRzID0gdmFsdWUudG9CaWdJbnQ2NChnbG9iYWxPYmplY3Qp
OwogICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9p
ZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zdGFuY2UtPnNldEdsb2JhbChpbXBv
cnQua2luZEluZGV4LCBiaXRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zdGFuY2Ut
Pmluc3RhbmNlKCkuc2V0R2xvYmFsKGltcG9ydC5raW5kSW5kZXgsIGJpdHMpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBXYXNtOjpUeXBlS2luZDo6RjMyOgotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9pbnN0YW5jZS0+c2V0R2xvYmFsKGltcG9ydC5raW5kSW5kZXgsIGJpdHdpc2VfY2FzdDx1
aW50MzJfdD4odmFsdWUudG9GbG9hdChnbG9iYWxPYmplY3QpKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLnNldEdsb2JhbChpbXBvcnQua2luZEluZGV4
LCBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHZhbHVlLnRvRmxvYXQoZ2xvYmFsT2JqZWN0KSkpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
V2FzbTo6VHlwZUtpbmQ6OkY2NDoKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zdGFuY2Ut
PnNldEdsb2JhbChpbXBvcnQua2luZEluZGV4LCBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVl
LmFzTnVtYmVyKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zdGFuY2UtPmluc3Rh
bmNlKCkuc2V0R2xvYmFsKGltcG9ydC5raW5kSW5kZXgsIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4o
dmFsdWUuYXNOdW1iZXIoKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgV2FzbTo6VHlwZUtpbmQ6OlYxMjg6CiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3Io
Z2xvYmFsT2JqZWN0LCB2bSwgaW1wb3J0RmFpbE1lc3NhZ2UoaW1wb3J0LCAiaW1wb3J0ZWQgZ2xv
YmFsIl9zLCAiY2Fubm90IGJlIHYxMjgiX3MpKSk7CkBAIC0zMzEsNyArMzMxLDcgQEAgdm9pZCBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6aW5pdGlhbGl6ZUltcG9ydHMoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlMKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChXYXNtOjppc0V4
dGVybnJlZihnbG9iYWxUeXBlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
Z2xvYmFsVHlwZS5pc051bGxhYmxlKCkgJiYgdmFsdWUuaXNOdWxsKCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxp
bmtFcnJvcihnbG9iYWxPYmplY3QsIHZtLCBpbXBvcnRGYWlsTWVzc2FnZShpbXBvcnQsICJpbXBv
cnRlZCBnbG9iYWwiX3MsICJtdXN0IGJlIGEgbm9uLW51bGwgdmFsdWUiX3MpKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9pbnN0YW5jZS0+c2V0R2xvYmFsKGltcG9ydC5raW5kSW5k
ZXgsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc3RhbmNlLT5pbnN0
YW5jZSgpLnNldEdsb2JhbChpbXBvcnQua2luZEluZGV4LCB2YWx1ZSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKFdhc206OmlzRnVuY3JlZihnbG9iYWxUeXBlKSB8fCAoIU9w
dGlvbnM6OnVzZVdlYkFzc2VtYmx5R0MoKSAmJiBXYXNtOjppc1JlZldpdGhUeXBlSW5kZXgoZ2xv
YmFsVHlwZSkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5j
dGlvbiogd2FzbUZ1bmN0aW9uID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogd2FzbVdyYXBwZXJGdW5jdGlvbiA9IG51bGxw
dHI7CkBAIC0zNDcsMTMgKzM0NywxMyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpp
bml0aWFsaXplSW1wb3J0cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKUwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dl
YkFzc2VtYmx5TGlua0Vycm9yKGdsb2JhbE9iamVjdCwgdm0sIGltcG9ydEZhaWxNZXNzYWdlKGlt
cG9ydCwgImltcG9ydGVkIGdsb2JhbCJfcywgIkFyZ3VtZW50IGZ1bmN0aW9uIGRpZCBub3QgbWF0
Y2ggdGhlIHJlZmVyZW5jZSB0eXBlIl9zKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zdGFuY2UtPnNldEdsb2JhbChp
bXBvcnQua2luZEluZGV4LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bnN0YW5jZS0+aW5zdGFuY2UoKS5zZXRHbG9iYWwoaW1wb3J0LmtpbmRJbmRleCwgdmFsdWUpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChPcHRpb25zOjp1c2VXZWJBc3NlbWJseUdDKCkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gV2FzbTo6aW50ZXJuYWxpemVFeHRlcm5yZWYo
dmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghV2FzbTo6VHlwZUluZm9y
bWF0aW9uOjpjYXN0UmVmZXJlbmNlKHZhbHVlLCBnbG9iYWwudHlwZS5pc051bGxhYmxlKCksIGds
b2JhbC50eXBlLmluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGdsb2JhbE9iamVjdCwgdm0s
IGltcG9ydEZhaWxNZXNzYWdlKGltcG9ydCwgImltcG9ydGVkIGdsb2JhbCJfcywgIkFyZ3VtZW50
IHZhbHVlIGRpZCBub3QgbWF0Y2ggdGhlIHJlZmVyZW5jZSB0eXBlIl9zKSkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1faW5zdGFuY2UtPnNldEdsb2JhbChpbXBvcnQua2luZEluZGV4
LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnN0YW5jZS0+aW5zdGFu
Y2UoKS5zZXRHbG9iYWwoaW1wb3J0LmtpbmRJbmRleCwgdmFsdWUpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAt
NDE0LDcgKzQxNCw3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmluaXRpYWxpemVJ
bXBvcnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTCiAgICAgICAgICAgICBpZiAo
ZXhwZWN0ZWRUeXBlSW5kZXggIT0gdGFnLT50YWcoKS50eXBlSW5kZXgoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZXhjZXB0aW9uKGNyZWF0ZUpTV2ViQXNzZW1ibHlMaW5rRXJyb3IoZ2xvYmFs
T2JqZWN0LCB2bSwgaW1wb3J0RmFpbE1lc3NhZ2UoaW1wb3J0LCAiaW1wb3J0ZWQgVGFnIl9zLCAi
c2lnbmF0dXJlIGRvZXNuJ3QgbWF0Y2ggdGhlIGltcG9ydGVkIFdlYkFzc2VtYmx5IFRhZydzIHNp
Z25hdHVyZSJfcykpKTsKIAotICAgICAgICAgICAgbV9pbnN0YW5jZS0+c2V0VGFnKGltcG9ydC5r
aW5kSW5kZXgsIHRhZy0+dGFnKCkpOworICAgICAgICAgICAgbV9pbnN0YW5jZS0+aW5zdGFuY2Uo
KS5zZXRUYWcoaW1wb3J0LmtpbmRJbmRleCwgdGFnLT50YWcoKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogCkBAIC00NTgsNyArNDU4LDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVs
ZVJlY29yZDo6aW5pdGlhbGl6ZUV4cG9ydHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
IAogICAgIFJFTEVBU0VfQVNTRVJUKG1faW5zdGFuY2UpOwogCi0gICAgSlNXZWJBc3NlbWJseU1v
ZHVsZSogbW9kdWxlID0gbV9pbnN0YW5jZS0+anNNb2R1bGUoKTsKKyAgICBKU1dlYkFzc2VtYmx5
TW9kdWxlKiBtb2R1bGUgPSBtX2luc3RhbmNlLT5tb2R1bGUoKTsKICAgICBjb25zdCBXYXNtOjpN
b2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBtb2R1bGUtPm1vZHVsZUluZm9y
bWF0aW9uKCk7CiAKICAgICBhdXRvIGV4Y2VwdGlvbiA9IFsmXSAoSlNPYmplY3QqIGVycm9yKSB7
CkBAIC00NzAsMjcgKzQ3MCwyNyBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjppbml0
aWFsaXplRXhwb3J0cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgICAgICAvLyBy
dW5uYWJsZSBkdWUgdG8gdGhlIExMaW50IHRpZXIgY29kZSBiZWluZyBzaGFyZWQgYW1vbmcgYWxs
IG1vZGVzLiBIb3dldmVyLAogICAgICAgICAvLyBpZiBMTEludCBpcyBkaXNhYmxlZCwgaXQgaXMg
cG9zc2libGUgdGhhdCB0aGUgY29kZSBuZWVkcyB0byBiZSBjb21waWxlZCBhdAogICAgICAgICAv
LyB0aGlzIHBvaW50IHdoZW4gd2Uga25vdyB3aGljaCBtZW1vcnkgbW9kZSB0byB1c2UuCi0gICAg
ICAgIFdhc206OkNhbGxlZUdyb3VwKiBjYWxsZWVHcm91cCA9IG1faW5zdGFuY2UtPmNhbGxlZUdy
b3VwKCk7CisgICAgICAgIFdhc206OkNhbGxlZUdyb3VwKiBjYWxsZWVHcm91cCA9IG1faW5zdGFu
Y2UtPmluc3RhbmNlKCkuY2FsbGVlR3JvdXAoKTsKICAgICAgICAgaWYgKCFjYWxsZWVHcm91cCB8
fCAhY2FsbGVlR3JvdXAtPnJ1bm5hYmxlKCkpIHsKLSAgICAgICAgICAgIGNhbGxlZUdyb3VwID0g
bV9pbnN0YW5jZS0+bW9kdWxlKCkuY29tcGlsZVN5bmModm0sIG1faW5zdGFuY2UtPm1lbW9yeSgp
LT5tb2RlKCkpLnB0cigpOworICAgICAgICAgICAgY2FsbGVlR3JvdXAgPSBtX2luc3RhbmNlLT5t
b2R1bGUoKS0+bW9kdWxlKCkuY29tcGlsZVN5bmModm0sIG1faW5zdGFuY2UtPmluc3RhbmNlKCku
bWVtb3J5KCktPm1vZGUoKSkucHRyKCk7CiAgICAgICAgICAgICBpZiAoIWNhbGxlZUdyb3VwLT5y
dW5uYWJsZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNXZWJB
c3NlbWJseUxpbmtFcnJvcihnbG9iYWxPYmplY3QsIHZtLCBjYWxsZWVHcm91cC0+ZXJyb3JNZXNz
YWdlKCkpKTsKICAgICAgICAgfQotICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVHcm91cC0+
aXNTYWZlVG9SdW4obV9pbnN0YW5jZS0+bWVtb3J5KCktPm1vZGUoKSkpOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChjYWxsZWVHcm91cC0+aXNTYWZlVG9SdW4obV9pbnN0YW5jZS0+aW5zdGFuY2Uo
KS5tZW1vcnkoKS0+bW9kZSgpKSk7CiAgICAgfQogCiAgICAgLy8gVGhpcyBuZWVkcyB0byBiZSBs
b29rZWQgdXAgYWZ0ZXIgdGhlIG1lbW9yeSBpcyBpbml0aWFsaXplZCwgYXMgdGhlIGNvZGVCbG9j
ayBkZXBlbmRzIG9uIHRoZSBtZW1vcnkgbW9kZS4KLSAgICBXYXNtOjpDYWxsZWVHcm91cCogY2Fs
bGVlR3JvdXAgPSBtX2luc3RhbmNlLT5jYWxsZWVHcm91cCgpOworICAgIFdhc206OkNhbGxlZUdy
b3VwKiBjYWxsZWVHcm91cCA9IG1faW5zdGFuY2UtPmluc3RhbmNlKCkuY2FsbGVlR3JvdXAoKTsK
IAogICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG1vZHVsZUluZm9ybWF0aW9u
LmludGVybmFsRXhjZXB0aW9uVHlwZUluZGljZXMuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAg
IFdhc206OlR5cGVJbmRleCB0eXBlSW5kZXggPSBtb2R1bGVJbmZvcm1hdGlvbi5pbnRlcm5hbEV4
Y2VwdGlvblR5cGVJbmRpY2VzW2luZGV4XTsKLSAgICAgICAgbV9pbnN0YW5jZS0+c2V0VGFnKG1v
ZHVsZUluZm9ybWF0aW9uLmltcG9ydEV4Y2VwdGlvbkNvdW50KCkgKyBpbmRleCwgV2FzbTo6VGFn
OjpjcmVhdGUoV2FzbTo6VHlwZUluZm9ybWF0aW9uOjpnZXQodHlwZUluZGV4KS5leHBhbmQoKSkp
OworICAgICAgICBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLnNldFRhZyhtb2R1bGVJbmZvcm1hdGlv
bi5pbXBvcnRFeGNlcHRpb25Db3VudCgpICsgaW5kZXgsIFdhc206OlRhZzo6Y3JlYXRlKFdhc206
OlR5cGVJbmZvcm1hdGlvbjo6Z2V0KHR5cGVJbmRleCkuZXhwYW5kKCkpKTsKICAgICB9CiAKICAg
ICB1bnNpZ25lZCBmdW5jdGlvbkltcG9ydENvdW50ID0gY2FsbGVlR3JvdXAtPmZ1bmN0aW9uSW1w
b3J0Q291bnQoKTsKICAgICBhdXRvIG1ha2VGdW5jdGlvbldyYXBwZXIgPSBbJl0gKHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXhTcGFjZSkgLT4gSlNWYWx1ZSB7CiAgICAgICAgIC8vIElmIHdlIGFscmVh
ZHkgbWFkZSBhIHdyYXBwZXIsIGRvIG5vdCBtYWtlIGEgbmV3IG9uZS4KLSAgICAgICAgSlNWYWx1
ZSB3cmFwcGVyID0gbV9pbnN0YW5jZS0+Z2V0RnVuY3Rpb25XcmFwcGVyKGZ1bmN0aW9uSW5kZXhT
cGFjZSk7CisgICAgICAgIEpTVmFsdWUgd3JhcHBlciA9IG1faW5zdGFuY2UtPmluc3RhbmNlKCku
Z2V0RnVuY3Rpb25XcmFwcGVyKGZ1bmN0aW9uSW5kZXhTcGFjZSk7CiAKICAgICAgICAgaWYgKCF3
cmFwcGVyLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CkBAIC00OTksNyAr
NDk5LDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6aW5pdGlhbGl6ZUV4cG9ydHMo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICAgICAgLy8gICBpLiBJZiB0aGVyZSBp
cyBhbiBFeHBvcnRlZCBGdW5jdGlvbiBFeG90aWMgT2JqZWN0IGZ1bmMgaW4gZnVuY3Mgd2hvc2Ug
ZnVuYy5bW0Nsb3N1cmVdXSBlcXVhbHMgYywgdGhlbiByZXR1cm4gZnVuYy4KICAgICAgICAgLy8g
ICBpaS4gKE5vdGU6IEF0IG1vc3Qgb25lIHdyYXBwZXIgaXMgY3JlYXRlZCBmb3IgYW55IGNsb3N1
cmUsIHNvIGZ1bmMgaXMgdW5pcXVlLCBldmVuIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBvY2N1cnJh
bmNlcyBpbiB0aGUgbGlzdC4gTW9yZW92ZXIsIGlmIHRoZSBpdGVtIHdhcyBhbiBpbXBvcnQgdGhh
dCBpcyBhbHJlYWR5IGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3QsIHRoZW4gdGhl
IG9yaWdpbmFsIGZ1bmN0aW9uIG9iamVjdCB3aWxsIGJlIGZvdW5kLiBGb3IgaW1wb3J0cyB0aGF0
IGFyZSByZWd1bGFyIEpTIGZ1bmN0aW9ucywgYSBuZXcgd3JhcHBlciB3aWxsIGJlIGNyZWF0ZWQu
KQogICAgICAgICBpZiAoZnVuY3Rpb25JbmRleFNwYWNlIDwgZnVuY3Rpb25JbXBvcnRDb3VudCkg
ewotICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmN0aW9uSW1wb3J0ID0gbV9pbnN0YW5jZS0+aW1w
b3J0RnVuY3Rpb24oZnVuY3Rpb25JbmRleFNwYWNlKS5nZXQoKTsKKyAgICAgICAgICAgIEpTT2Jq
ZWN0KiBmdW5jdGlvbkltcG9ydCA9IG1faW5zdGFuY2UtPmluc3RhbmNlKCkuaW1wb3J0RnVuY3Rp
b24oZnVuY3Rpb25JbmRleFNwYWNlKS5nZXQoKTsKICAgICAgICAgICAgIGlmIChpc1dlYkFzc2Vt
Ymx5SG9zdEZ1bmN0aW9uKGZ1bmN0aW9uSW1wb3J0KSkKICAgICAgICAgICAgICAgICB3cmFwcGVy
ID0gZnVuY3Rpb25JbXBvcnQ7CiAgICAgICAgICAgICBlbHNlIHsKQEAgLTUyMSw3ICs1MjEsNyBA
QCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjppbml0aWFsaXplRXhwb3J0cyhKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKHdyYXBw
ZXIuaXNDYWxsYWJsZSgpKTsKLSAgICAgICAgbV9pbnN0YW5jZS0+c2V0RnVuY3Rpb25XcmFwcGVy
KGZ1bmN0aW9uSW5kZXhTcGFjZSwgd3JhcHBlcik7CisgICAgICAgIG1faW5zdGFuY2UtPmluc3Rh
bmNlKCkuc2V0RnVuY3Rpb25XcmFwcGVyKGZ1bmN0aW9uSW5kZXhTcGFjZSwgd3JhcHBlcik7CiAK
ICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgfTsKQEAgLTU1MCw3ICs1NTAsNyBAQCB2b2lk
IFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjppbml0aWFsaXplRXhwb3J0cyhKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBXYXNtOjpUYWJsZUluZm9ybWF0aW9uOjpGcm9tR2xvYmFsSW1wb3J0OgogICAgICAgICAgICAg
ICAgIEFTU0VSVChpbml0aWFsQml0c09ySW1wb3J0TnVtYmVyIDwgbW9kdWxlSW5mb3JtYXRpb24u
Zmlyc3RJbnRlcm5hbEdsb2JhbCk7Ci0gICAgICAgICAgICAgICAgaW5pdGlhbEJpdHNPckltcG9y
dE51bWJlciA9IG1faW5zdGFuY2UtPmxvYWRJNjRHbG9iYWwoaW5pdGlhbEJpdHNPckltcG9ydE51
bWJlcik7CisgICAgICAgICAgICAgICAgaW5pdGlhbEJpdHNPckltcG9ydE51bWJlciA9IG1faW5z
dGFuY2UtPmluc3RhbmNlKCkubG9hZEk2NEdsb2JhbChpbml0aWFsQml0c09ySW1wb3J0TnVtYmVy
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgV2FzbTo6VGFibGVJ
bmZvcm1hdGlvbjo6RnJvbVJlZkZ1bmM6CiAgICAgICAgICAgICAgICAgQVNTRVJUKGluaXRpYWxC
aXRzT3JJbXBvcnROdW1iZXIgPCBtb2R1bGVJbmZvcm1hdGlvbi5mdW5jdGlvbkluZGV4U3BhY2VT
aXplKCkpOwpAQCAtNTc1LDcgKzU3NSw3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6
OmluaXRpYWxpemVFeHBvcnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgICAgICAgICBp
ZiAoaW5pdFR5cGUgIT0gV2FzbTo6VGFibGVJbmZvcm1hdGlvbjo6RGVmYXVsdCkgewotICAgICAg
ICAgICAgICAgIGlmICghV2FzbTo6dGFibGVGaWxsKG1faW5zdGFuY2UuZ2V0KCksIGksIDAsIGlu
aXRpYWxCaXRzT3JJbXBvcnROdW1iZXIsIG1faW5zdGFuY2UtPnRhYmxlKGkpLT5sZW5ndGgoKSkp
CisgICAgICAgICAgICAgICAgaWYgKCF0YWJsZUZpbGwoJm1faW5zdGFuY2UtPmluc3RhbmNlKCks
IGksIDAsIGluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIsIG1faW5zdGFuY2UtPnRhYmxlKGkpLT5s
ZW5ndGgoKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGNlcHRpb24oY3JlYXRlSlNX
ZWJBc3NlbWJseUxpbmtFcnJvcihnbG9iYWxPYmplY3QsIHZtLCAiZmFpbGVkIHRvIGluaXRpYWxp
emUgVGFibGUiX3MpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNTkxLDE2ICs1OTEs
MTYgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6aW5pdGlhbGl6ZUV4cG9ydHMoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICAgICAgICAgICAgICB2MTI4X3QgaW5pdGlh
bFZlY3RvcjsKIAogICAgICAgICAgICAgICAgIGlmIChnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBl
ID09IFdhc206Okdsb2JhbEluZm9ybWF0aW9uOjpGcm9tR2xvYmFsSW1wb3J0KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChnbG9iYWwuaW5pdGlhbEJpdHMuaW5pdGlhbEJpdHNPckltcG9y
dE51bWJlciA8IG1faW5zdGFuY2UtPm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0aW9uKCkuZ2xvYmFs
cy5zaXplKCkpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsLmluaXRpYWxCaXRz
LmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIgPCBtX2luc3RhbmNlLT5tb2R1bGUoKS0+bW9kdWxl
SW5mb3JtYXRpb24oKS5nbG9iYWxzLnNpemUoKSk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VF9JTVBMSUVTKCFPcHRpb25zOjp1c2VXZWJBc3NlbWJseUdDKCksIGdsb2JhbC5pbml0aWFsQml0
cy5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyIDwgbW9kdWxlSW5mb3JtYXRpb24uZmlyc3RJbnRl
cm5hbEdsb2JhbCk7Ci0gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWZWN0b3IgPSBtX2luc3Rh
bmNlLT5sb2FkVjEyOEdsb2JhbChnbG9iYWwuaW5pdGlhbEJpdHMuaW5pdGlhbEJpdHNPckltcG9y
dE51bWJlcik7CisgICAgICAgICAgICAgICAgICAgIGluaXRpYWxWZWN0b3IgPSBtX2luc3RhbmNl
LT5pbnN0YW5jZSgpLmxvYWRWMTI4R2xvYmFsKGdsb2JhbC5pbml0aWFsQml0cy5pbml0aWFsQml0
c09ySW1wb3J0TnVtYmVyKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGdsb2JhbC5pbml0
aWFsaXphdGlvblR5cGUgPT0gV2FzbTo6R2xvYmFsSW5mb3JtYXRpb246OkZyb21FeHByZXNzaW9u
KQogICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmVjdG9yID0gZ2xvYmFsLmluaXRpYWxCaXRz
LmluaXRpYWxWZWN0b3I7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgIHN3aXRjaCAo
Z2xvYmFsLmJpbmRpbmdNb2RlKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBXYXNtOjpHbG9iYWxJ
bmZvcm1hdGlvbjo6QmluZGluZ01vZGU6OkVtYmVkZGVkSW5JbnN0YW5jZTogewotICAgICAgICAg
ICAgICAgICAgICBtX2luc3RhbmNlLT5zZXRHbG9iYWwoZ2xvYmFsSW5kZXgsIGluaXRpYWxWZWN0
b3IpOworICAgICAgICAgICAgICAgICAgICBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLnNldEdsb2Jh
bChnbG9iYWxJbmRleCwgaW5pdGlhbFZlY3Rvcik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjYXNlIFdhc206Okdsb2JhbElu
Zm9ybWF0aW9uOjpCaW5kaW5nTW9kZTo6UG9ydGFibGU6IHsKQEAgLTYxOCw5ICs2MTgsOSBAQCB2
b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjppbml0aWFsaXplRXhwb3J0cyhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQogCiAgICAgICAgICAgICB1aW50NjRfdCBpbml0aWFsQml0cyA9
IDA7CiAgICAgICAgICAgICBpZiAoZ2xvYmFsLmluaXRpYWxpemF0aW9uVHlwZSA9PSBXYXNtOjpH
bG9iYWxJbmZvcm1hdGlvbjo6RnJvbUdsb2JhbEltcG9ydCkgewotICAgICAgICAgICAgICAgIEFT
U0VSVChnbG9iYWwuaW5pdGlhbEJpdHMuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlciA8IG1faW5z
dGFuY2UtPm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0aW9uKCkuZ2xvYmFscy5zaXplKCkpOworICAg
ICAgICAgICAgICAgIEFTU0VSVChnbG9iYWwuaW5pdGlhbEJpdHMuaW5pdGlhbEJpdHNPckltcG9y
dE51bWJlciA8IG1faW5zdGFuY2UtPm1vZHVsZSgpLT5tb2R1bGVJbmZvcm1hdGlvbigpLmdsb2Jh
bHMuc2l6ZSgpKTsKICAgICAgICAgICAgICAgICBBU1NFUlRfSU1QTElFUyghT3B0aW9uczo6dXNl
V2ViQXNzZW1ibHlHQygpLCBnbG9iYWwuaW5pdGlhbEJpdHMuaW5pdGlhbEJpdHNPckltcG9ydE51
bWJlciA8IG1vZHVsZUluZm9ybWF0aW9uLmZpcnN0SW50ZXJuYWxHbG9iYWwpOwotICAgICAgICAg
ICAgICAgIGluaXRpYWxCaXRzID0gbV9pbnN0YW5jZS0+bG9hZEk2NEdsb2JhbChnbG9iYWwuaW5p
dGlhbEJpdHMuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlcik7CisgICAgICAgICAgICAgICAgaW5p
dGlhbEJpdHMgPSBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLmxvYWRJNjRHbG9iYWwoZ2xvYmFsLmlu
aXRpYWxCaXRzLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpOwogICAgICAgICAgICAgfSBlbHNl
IGlmIChnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID09IFdhc206Okdsb2JhbEluZm9ybWF0aW9u
OjpGcm9tUmVmRnVuYykgewogICAgICAgICAgICAgICAgIEFTU0VSVChnbG9iYWwuaW5pdGlhbEJp
dHMuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlciA8IG1vZHVsZUluZm9ybWF0aW9uLmZ1bmN0aW9u
SW5kZXhTcGFjZVNpemUoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKG1ha2VGdW5jdGlvbldy
YXBwZXIoZ2xvYmFsLmluaXRpYWxCaXRzLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIpLmlzQ2Fs
bGFibGUoKSk7CkBAIC02MzUsOSArNjM1LDkgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29y
ZDo6aW5pdGlhbGl6ZUV4cG9ydHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICAg
ICAgICAgIHN3aXRjaCAoZ2xvYmFsLmJpbmRpbmdNb2RlKSB7CiAgICAgICAgICAgICBjYXNlIFdh
c206Okdsb2JhbEluZm9ybWF0aW9uOjpCaW5kaW5nTW9kZTo6RW1iZWRkZWRJbkluc3RhbmNlOiB7
CiAgICAgICAgICAgICAgICAgaWYgKFdhc206OmlzUmVmVHlwZShnbG9iYWwudHlwZSkpCi0gICAg
ICAgICAgICAgICAgICAgIG1faW5zdGFuY2UtPnNldEdsb2JhbChnbG9iYWxJbmRleCwgSlNWYWx1
ZTo6ZGVjb2RlKGluaXRpYWxCaXRzKSk7CisgICAgICAgICAgICAgICAgICAgIG1faW5zdGFuY2Ut
Pmluc3RhbmNlKCkuc2V0R2xvYmFsKGdsb2JhbEluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoaW5pdGlh
bEJpdHMpKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1faW5z
dGFuY2UtPnNldEdsb2JhbChnbG9iYWxJbmRleCwgaW5pdGlhbEJpdHMpOworICAgICAgICAgICAg
ICAgICAgICBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLnNldEdsb2JhbChnbG9iYWxJbmRleCwgaW5p
dGlhbEJpdHMpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgY2FzZSBXYXNtOjpHbG9iYWxJbmZvcm1hdGlvbjo6QmluZGluZ01vZGU6OlBvcnRhYmxl
OiB7CkBAIC02NDgsNyArNjQ4LDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6aW5p
dGlhbGl6ZUV4cG9ydHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICAgICAgICAg
ICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogICAgICAgICAgICAgICAgIG1faW5zdGFu
Y2UtPmxpbmtHbG9iYWwodm0sIGdsb2JhbEluZGV4LCBnbG9iYWxWYWx1ZSk7CiAgICAgICAgICAg
ICAgICAgaWYgKFdhc206OmlzUmVmVHlwZShnbG9iYWwudHlwZSkpCi0gICAgICAgICAgICAgICAg
ICAgIG1faW5zdGFuY2UtPnNldEdsb2JhbChnbG9iYWxJbmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGlu
aXRpYWxCaXRzKSk7CisgICAgICAgICAgICAgICAgICAgIG1faW5zdGFuY2UtPmluc3RhbmNlKCku
c2V0R2xvYmFsKGdsb2JhbEluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoaW5pdGlhbEJpdHMpKTsKICAg
ICAgICAgICAgICAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShpbml0aWFsQml0cyk7IC8vIEVuc3Vy
ZSB0aGlzIGlzIGtlcHQgYWxpdmUgd2hpbGUgY3JlYXRpbmcgSlNXZWJBc3NlbWJseUdsb2JhbC4K
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTY3MSw4ICs2NzEsOCBA
QCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjppbml0aWFsaXplRXhwb3J0cyhKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0
ZXJuYWxLaW5kOjpUYWJsZTogewogICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgZ3VhcmFu
dGVlZCBieSBtb2R1bGUgdmVyaWZpY2F0aW9uLgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bV9pbnN0YW5jZS0+anNUYWJsZShleHAua2luZEluZGV4KSk7Ci0gICAgICAgICAgICBleHBvcnRl
ZFZhbHVlID0gbV9pbnN0YW5jZS0+anNUYWJsZShleHAua2luZEluZGV4KTsKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKG1faW5zdGFuY2UtPnRhYmxlKGV4cC5raW5kSW5kZXgpKTsKKyAgICAg
ICAgICAgIGV4cG9ydGVkVmFsdWUgPSBtX2luc3RhbmNlLT50YWJsZShleHAua2luZEluZGV4KTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJu
YWxLaW5kOjpNZW1vcnk6IHsKQEAgLTY5OCwxNyArNjk4LDE3IEBAIHZvaWQgV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQ6OmluaXRpYWxpemVFeHBvcnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCiAgICAgICAgICAgICAgICAgaWYgKGdsb2JhbC5iaW5kaW5nTW9kZSA9PSBXYXNtOjpHbG9i
YWxJbmZvcm1hdGlvbjo6QmluZGluZ01vZGU6OkVtYmVkZGVkSW5JbnN0YW5jZSkgewogICAgICAg
ICAgICAgICAgICAgICBSZWZQdHI8V2FzbTo6R2xvYmFsPiBnbG9iYWxSZWY7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChnbG9iYWwudHlwZS5raW5kID09IFdhc206OlR5cGVLaW5kOjpWMTI4KSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB2MTI4X3QgaW5pdGlhbFZhbHVlID0gbV9pbnN0YW5j
ZS0+bG9hZFYxMjhHbG9iYWwoZXhwLmtpbmRJbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB2MTI4X3QgaW5pdGlhbFZhbHVlID0gbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5sb2FkVjEyOEds
b2JhbChleHAua2luZEluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbFJlZiA9
IFdhc206Okdsb2JhbDo6Y3JlYXRlKGdsb2JhbC50eXBlLCBnbG9iYWwubXV0YWJpbGl0eSwgaW5p
dGlhbFZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQ2NF90IGluaXRpYWxWYWx1ZSA9IG1faW5zdGFuY2UtPmxvYWRJNjRHbG9i
YWwoZXhwLmtpbmRJbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBpbml0
aWFsVmFsdWUgPSBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLmxvYWRJNjRHbG9iYWwoZXhwLmtpbmRJ
bmRleCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxSZWYgPSBXYXNtOjpHbG9iYWw6
OmNyZWF0ZShnbG9iYWwudHlwZSwgZ2xvYmFsLm11dGFiaWxpdHksIGluaXRpYWxWYWx1ZSk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9
IEpTV2ViQXNzZW1ibHlHbG9iYWw6OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIHZtLCBnbG9iYWxP
YmplY3QtPndlYkFzc2VtYmx5R2xvYmFsU3RydWN0dXJlKCksIGdsb2JhbFJlZi5yZWxlYXNlTm9u
TnVsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsK
ICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZ2xv
YmFsLm11dGFiaWxpdHkgPT0gV2FzbTo6TXV0YWJpbGl0eTo6TXV0YWJsZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIFJlZlB0cjxXYXNtOjpHbG9iYWw+IGdsb2JhbFJlZiA9IG1faW5zdGFuY2UtPmdl
dEdsb2JhbEJpbmRpbmcoZXhwLmtpbmRJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIFJlZlB0
cjxXYXNtOjpHbG9iYWw+IGdsb2JhbFJlZiA9IG1faW5zdGFuY2UtPmluc3RhbmNlKCkuZ2V0R2xv
YmFsQmluZGluZyhleHAua2luZEluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGds
b2JhbFJlZik7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChnbG9iYWxSZWYtPnR5cGUoKSA9
PSBnbG9iYWwudHlwZSk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChnbG9iYWxSZWYtPm11
dGFiaWxpdHkoKSA9PSBnbG9iYWwubXV0YWJpbGl0eSk7CkBAIC03MjQsNyArNzI0LDcgQEAgdm9p
ZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6aW5pdGlhbGl6ZUV4cG9ydHMoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgV2FzbTo6RXh0ZXJuYWxLaW5kOjpFeGNlcHRpb246IHsKLSAgICAgICAgICAgIGV4cG9y
dGVkVmFsdWUgPSBKU1dlYkFzc2VtYmx5VGFnOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgZ2xv
YmFsT2JqZWN0LT5tX3dlYkFzc2VtYmx5VGFnU3RydWN0dXJlLmdldChnbG9iYWxPYmplY3QpLCBt
X2luc3RhbmNlLT50YWcoZXhwLmtpbmRJbmRleCkpOworICAgICAgICAgICAgZXhwb3J0ZWRWYWx1
ZSA9IEpTV2ViQXNzZW1ibHlUYWc6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmpl
Y3QtPm1fd2ViQXNzZW1ibHlUYWdTdHJ1Y3R1cmUuZ2V0KGdsb2JhbE9iamVjdCksIG1faW5zdGFu
Y2UtPmluc3RhbmNlKCkudGFnKGV4cC5raW5kSW5kZXgpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIH0KQEAgLTc1OCw3ICs3NTgsNyBAQCB2b2lkIFdlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkOjppbml0aWFsaXplRXhwb3J0cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQogICAgICAgICBBU1NFUlQoIXNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkpOwogICAgICAg
ICBBU1NFUlQoc2lnbmF0dXJlLnJldHVybnNWb2lkKCkpOwogICAgICAgICBpZiAoc3RhcnRGdW5j
dGlvbkluZGV4U3BhY2UgPCBjYWxsZWVHcm91cC0+ZnVuY3Rpb25JbXBvcnRDb3VudCgpKSB7Ci0g
ICAgICAgICAgICBKU09iamVjdCogc3RhcnRGdW5jdGlvbiA9IG1faW5zdGFuY2UtPmltcG9ydEZ1
bmN0aW9uKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlKS5nZXQoKTsKKyAgICAgICAgICAgIEpTT2Jq
ZWN0KiBzdGFydEZ1bmN0aW9uID0gbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5pbXBvcnRGdW5jdGlv
bihzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZSkuZ2V0KCk7CiAgICAgICAgICAgICBtX3N0YXJ0RnVu
Y3Rpb24uc2V0KHZtLCB0aGlzLCBzdGFydEZ1bmN0aW9uKTsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIGF1dG8mIGpzRW50cnlwb2ludENhbGxlZSA9IGNhbGxlZUdyb3VwLT5qc0VudHJ5
cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNl
KTsKQEAgLTc3NSw3ICs3NzUsNyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpl
dmFsdWF0ZUNvbnN0YW50RXhwcmVzc2lvbihKU0dsb2JhbE9iamVjdCogZ2xvYgogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKLSAgICBhdXRvIGV2YWxSZXN1bHQgPSBXYXNtOjpldmFsdWF0ZUV4dGVuZGVk
Q29uc3RFeHByKGNvbnN0YW50RXhwcmVzc2lvbiwgbV9pbnN0YW5jZS5nZXQoKSwgaW5mbywgZXhw
ZWN0ZWRUeXBlKTsKKyAgICBhdXRvIGV2YWxSZXN1bHQgPSBXYXNtOjpldmFsdWF0ZUV4dGVuZGVk
Q29uc3RFeHByKGNvbnN0YW50RXhwcmVzc2lvbiwgJm1faW5zdGFuY2UtPmluc3RhbmNlKCksIGlu
Zm8sIGV4cGVjdGVkVHlwZSk7CiAgICAgaWYgKFVOTElLRUxZKCFldmFsUmVzdWx0Lmhhc192YWx1
ZSgpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWUodGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0
LCBzY29wZSwgY3JlYXRlSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcihnbG9iYWxPYmplY3QsIHZt
LCBtYWtlU3RyaW5nKCJjb3VsZG4ndCBldmFsdWF0ZSBjb25zdGFudCBleHByZXNzaW9uOiAiX3Ms
IGV2YWxSZXN1bHQuZXJyb3IoKSkpKSk7CiAKQEAgLTc5NCw3ICs3OTQsNyBAQCBKU1ZhbHVlIFdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBXYXNtOjpNb2R1bGUmIG1vZHVsZSA9IG1f
aW5zdGFuY2UtPm1vZHVsZSgpOyBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxl
SW5mb3JtYXRpb24gPSBtb2R1bGUubW9kdWxlSW5mb3JtYXRpb24oKTsKKyAgICBXYXNtOjpNb2R1
bGUmIG1vZHVsZSA9IG1faW5zdGFuY2UtPmluc3RhbmNlKCkubW9kdWxlKCk7IGNvbnN0IFdhc206
Ok1vZHVsZUluZm9ybWF0aW9uJiBtb2R1bGVJbmZvcm1hdGlvbiA9IG1vZHVsZS5tb2R1bGVJbmZv
cm1hdGlvbigpOwogCiAgICAgY29uc3QgVmVjdG9yPFdhc206OlNlZ21lbnQ6OlB0cj4mIGRhdGEg
PSBtb2R1bGVJbmZvcm1hdGlvbi5kYXRhOwogICAgIApAQCAtODE3LDcgKzgxNyw3IEBAIEpTVmFs
dWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCiAgICAgICAgICAgICBjb25zdCBhdXRvJiBvZmZzZXQgPSAqZWxlbWVudC5vZmZz
ZXRJZkFjdGl2ZTsKICAgICAgICAgICAgIHVpbnQzMl90IGVsZW1lbnRJbmRleCA9IDA7CiAgICAg
ICAgICAgICBpZiAob2Zmc2V0LmlzR2xvYmFsSW1wb3J0KCkpCi0gICAgICAgICAgICAgICAgZWxl
bWVudEluZGV4ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1faW5zdGFuY2UtPmxvYWRJMzJHbG9i
YWwob2Zmc2V0Lmdsb2JhbEltcG9ydEluZGV4KCkpKTsKKyAgICAgICAgICAgICAgICBlbGVtZW50
SW5kZXggPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5sb2Fk
STMyR2xvYmFsKG9mZnNldC5nbG9iYWxJbXBvcnRJbmRleCgpKSk7CiAgICAgICAgICAgICBlbHNl
IGlmIChvZmZzZXQuaXNDb25zdCgpKQogICAgICAgICAgICAgICAgIGVsZW1lbnRJbmRleCA9IG9m
ZnNldC5jb25zdFZhbHVlKCk7CiAgICAgICAgICAgICBlbHNlIHsKQEAgLTgzNiwxNiArODM2LDE2
IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgfTsKIAogICAgIGF1dG8gZm9yRWFjaEFjdGl2ZURhdGFT
ZWdtZW50ID0gWyZdIChhdXRvIGZuKSB7Ci0gICAgICAgIGF1dG8mIHdhc21NZW1vcnkgPSBtX2lu
c3RhbmNlLT5tZW1vcnkoKS0+bWVtb3J5KCk7Ci0gICAgICAgIHVpbnQ4X3QqIG1lbW9yeSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHdhc21NZW1vcnkuYmFzZVBvaW50ZXIoKSk7Ci0gICAg
ICAgIHVpbnQ2NF90IHNpemVJbkJ5dGVzID0gd2FzbU1lbW9yeS5zaXplKCk7CisgICAgICAgIGF1
dG8gd2FzbU1lbW9yeSA9IG1faW5zdGFuY2UtPmluc3RhbmNlKCkubWVtb3J5KCk7CisgICAgICAg
IHVpbnQ4X3QqIG1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHdhc21NZW1vcnkt
PmJhc2VQb2ludGVyKCkpOworICAgICAgICB1aW50NjRfdCBzaXplSW5CeXRlcyA9IHdhc21NZW1v
cnktPnNpemUoKTsKIAogICAgICAgICBmb3IgKGNvbnN0IFdhc206OlNlZ21lbnQ6OlB0ciYgc2Vn
bWVudCA6IGRhdGEpIHsKICAgICAgICAgICAgIGlmICghc2VnbWVudC0+aXNBY3RpdmUoKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHVpbnQzMl90IG9mZnNldCA9IDA7
CiAgICAgICAgICAgICBpZiAoc2VnbWVudC0+b2Zmc2V0SWZBY3RpdmUtPmlzR2xvYmFsSW1wb3J0
KCkpCi0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1faW5z
dGFuY2UtPmxvYWRJMzJHbG9iYWwoc2VnbWVudC0+b2Zmc2V0SWZBY3RpdmUtPmdsb2JhbEltcG9y
dEluZGV4KCkpKTsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBzdGF0aWNfY2FzdDx1aW50MzJf
dD4obV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5sb2FkSTMyR2xvYmFsKHNlZ21lbnQtPm9mZnNldElm
QWN0aXZlLT5nbG9iYWxJbXBvcnRJbmRleCgpKSk7CiAgICAgICAgICAgICBlbHNlIGlmIChzZWdt
ZW50LT5vZmZzZXRJZkFjdGl2ZS0+aXNDb25zdCgpKQogICAgICAgICAgICAgICAgIG9mZnNldCA9
IHNlZ21lbnQtPm9mZnNldElmQWN0aXZlLT5jb25zdFZhbHVlKCk7CiAgICAgICAgICAgICBlbHNl
IHsKQEAgLTg3MSw3ICs4NzEsNyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpl
dmFsdWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgICAgICAgICAgcmV0dXJu
IEl0ZXJhdGlvblN0YXR1czo6RG9uZTsKICAgICAgICAgfQogCi0gICAgICAgIG1faW5zdGFuY2Ut
PmluaXRFbGVtZW50U2VnbWVudCh0YWJsZUluZGV4LCBlbGVtZW50LCBlbGVtZW50SW5kZXgsIDBV
LCBlbGVtZW50Lmxlbmd0aCgpKTsKKyAgICAgICAgbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5pbml0
RWxlbWVudFNlZ21lbnQodGFibGVJbmRleCwgZWxlbWVudCwgZWxlbWVudEluZGV4LCAwVSwgZWxl
bWVudC5sZW5ndGgoKSk7CiAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVl
OwogICAgIH0pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKaW5kZXggMGZjNjA1YTljNzIxLi5m
NDcwYjM5NzRjMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKQEAgLTU3LDcgKzU3LDcgQEAg
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpj
cmVhdGUoVk0mIHZtLCBKU0dsb2JhbE8KICAgICAgICAgZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RG
dW5jdGlvbihjYWxsV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24sIEltcGxlbWVudGF0aW9uVmlz
aWJpbGl0eTo6UHVibGljLCBOb0ludHJpbnNpYywgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0
b3IsIG51bGxwdHIsIG5hbWUpOwogCiAgICAgUkVMRUFTRV9BU1NFUlQoSlNWYWx1ZShmdW5jdGlv
bikuaXNDYWxsYWJsZSgpKTsKLSAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogcmVzdWx0
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24+
KHZtKSkgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24odm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9i
amVjdCwgc3RydWN0dXJlLCBpbnN0YW5jZSwgZnVuY3Rpb24sIFdhc206Oldhc21Ub1dhc21JbXBv
cnRhYmxlRnVuY3Rpb24geyB0eXBlSW5kZXgsICZpbnN0YW5jZS0+aW1wb3J0RnVuY3Rpb25JbmZv
KGltcG9ydEluZGV4KS0+aW1wb3J0RnVuY3Rpb25TdHViLCAmV2FzbTo6TnVsbFdhc21DYWxsZWUs
IHJ0dC5nZXQoKSB9KTsKKyAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogcmVzdWx0ID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24+KHZt
KSkgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24odm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9iamVj
dCwgc3RydWN0dXJlLCBpbnN0YW5jZSwgZnVuY3Rpb24sIFdhc206Oldhc21Ub1dhc21JbXBvcnRh
YmxlRnVuY3Rpb24geyB0eXBlSW5kZXgsICZpbnN0YW5jZS0+aW5zdGFuY2UoKS5pbXBvcnRGdW5j
dGlvbkluZm8oaW1wb3J0SW5kZXgpLT5pbXBvcnRGdW5jdGlvblN0dWIsICZXYXNtOjpOdWxsV2Fz
bUNhbGxlZSwgcnR0LmdldCgpIH0pOwogICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIGV4
ZWN1dGFibGUsIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIG5hbWUpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcAppbmRleCAwOWRhNzg4MjM1YmQuLmY2YjkwOWE2ZDQwYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
Y3BwCkBAIC01MTYyLDEwICs1MTYyLDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IGZhaWwoKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUo
dm0sIGNvbnRlbnRzLnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUoaGFuZGxlcikpOworICAgICAg
ICAgICAgICAgIG1lbW9yeSA9IFdhc206Ok1lbW9yeTo6Y3JlYXRlKGNvbnRlbnRzLnJlbGVhc2VO
b25OdWxsKCksIFdURk1vdmUoaGFuZGxlcikpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAvLyB6ZXJvIHNpemUgJiBtYXgtc2l6ZS4KLSAgICAgICAgICAgICAgICBtZW1v
cnkgPSBXYXNtOjpNZW1vcnk6OmNyZWF0ZVplcm9TaXplZCh2bSwgSlNDOjpNZW1vcnlTaGFyaW5n
TW9kZTo6U2hhcmVkLCBXVEZNb3ZlKGhhbmRsZXIpKTsKKyAgICAgICAgICAgICAgICBtZW1vcnkg
PSBXYXNtOjpNZW1vcnk6OmNyZWF0ZVplcm9TaXplZChKU0M6Ok1lbW9yeVNoYXJpbmdNb2RlOjpT
aGFyZWQsIFdURk1vdmUoaGFuZGxlcikpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBy
ZXN1bHQtPmFkb3B0KG1lbW9yeS5yZWxlYXNlTm9uTnVsbCgpKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>