<?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>49159</bug_id>
          
          <creation_ts>2010-11-07 22:21:02 -0800</creation_ts>
          <short_desc>Rename Cache to MemoryCache</short_desc>
          <delta_ts>2010-11-07 22:52:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>305990</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-11-07 22:21:02 -0800</bug_when>
    <thetext>Rename Cache to MemoryCache</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305991</commentid>
    <comment_count>1</comment_count>
      <attachid>73212</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-11-07 22:23:32 -0800</bug_when>
    <thetext>Created attachment 73212
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305992</commentid>
    <comment_count>2</comment_count>
      <attachid>73212</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-07 22:25:12 -0800</bug_when>
    <thetext>Comment on attachment 73212
Patch

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306000</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-11-07 22:46:29 -0800</bug_when>
    <thetext>Committed r71499: &lt;http://trac.webkit.org/changeset/71499&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306002</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-07 22:52:50 -0800</bug_when>
    <thetext>Attachment 73212 did not build on mac:
Build output: http://queues.webkit.org/results/5469029</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73212</attachid>
            <date>2010-11-07 22:23:32 -0800</date>
            <delta_ts>2010-11-07 22:25:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49159-20101107222330.patch</filename>
            <type>text/plain</type>
            <size>135022</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTQ5OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODEgQEAKKzIwMTAtMTEtMDcgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5h
bWUgQ2FjaGUgdG8gTWVtb3J5Q2FjaGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ5MTU5CisKKyAgICAgICAgU28gc2F5ZXRoIHRoZSBkaWFncmFtLgor
CisgICAgICAgICogQW5kcm9pZC5tazoKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICog
V2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6Cisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNz
cy9DU1NJbWFnZVZhbHVlLmNwcDoKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5jcHA6Cisg
ICAgICAgICogaGlzdG9yeS9QYWdlQ2FjaGUuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JDU1NTdG9yZS5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFn
ZW50LmNwcDoKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAqIGxv
YWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwOgorICAgICAgICAqIGxvYWRlci9j
YWNoZS9DYWNoZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlLmg6
IFJlbW92ZWQuCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkQ1NTU3R5bGVTaGVldDo6YWxsQ2xpZW50c1JlbW92
ZWQpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRGb250LmNwcDoKKyAgICAgICAgKiBs
b2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5oOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRJ
bWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6ZGVzdHJveURlY29kZWRE
YXRhKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaDoKKyAgICAgICAgKiBs
b2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZS5oOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxv
YWRlci5jcHA6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmg6
CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDYWNoZWRTY3JpcHQ6OmRlc3Ryb3lEZWNvZGVkRGF0YSk6CisgICAgICAgICogbG9hZGVy
L2NhY2hlL01lbW9yeUNhY2hlLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGUuY3BwLgorICAgICAgICAoV2ViQ29yZTo6Y2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6
TWVtb3J5Q2FjaGU6Ok1lbW9yeUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hl
OjpyZXF1ZXN0UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OnJlcXVl
c3RVc2VyQ1NTU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6cmV2
YWxpZGF0ZVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpyZXZhbGlk
YXRpb25TdWNjZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OnJldmFsaWRh
dGlvbkZhaWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6cmVzb3VyY2VGb3JV
UkwpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OmRlYWRDYXBhY2l0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6bGl2ZUNhcGFjaXR5KToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lbW9yeUNhY2hlOjpwcnVuZUxpdmVSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6
TWVtb3J5Q2FjaGU6OnBydW5lRGVhZFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZW1v
cnlDYWNoZTo6c2V0Q2FwYWNpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6
bWFrZVJlc291cmNlUHVyZ2VhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpl
dmljdCk6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6YWRkQ2FjaGVkUmVzb3VyY2VM
b2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OnJlbW92ZUNhY2hlZFJlc291
cmNlTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpscnVMaXN0Rm9yKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpyZW1vdmVGcm9tTFJVTGlzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6aW5zZXJ0SW5MUlVMaXN0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lbW9yeUNhY2hlOjpyZXNvdXJjZUFjY2Vzc2VkKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lbW9yeUNhY2hlOjpyZW1vdmVGcm9tTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjppbnNlcnRJbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6YWRkVG9MaXZlUmVzb3VyY2VzU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6cmVtb3ZlRnJvbUxpdmVSZXNvdXJj
ZXNTaXplKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjphZGp1c3RTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpUeXBlU3RhdGlzdGljOjphZGRSZXNvdXJjZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6Z2V0U3RhdGlzdGljcyk6CisgICAgICAg
IChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6c2V0RGlzYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6
TWVtb3J5Q2FjaGU6OmR1bXBTdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6
ZHVtcExSVUxpc3RzKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaDogQ29w
aWVkIGZyb20gV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGUuaC4KKyAgICAgICAgKFdlYkNvcmU6
Ok1lbW9yeUNhY2hlOjpzaG91bGRNYWtlUmVzb3VyY2VQdXJnZWFibGVPbkV2aWN0aW9uKToKKyAg
ICAgICAgKiBsb2FkZXIvbG9hZGVyLmNwcDoKKyAgICAgICAgKiBwYWdlL0V2ZW50U291cmNlLmNw
cDoKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmg6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1
ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpjcmVhdGVSZXF1ZXN0
KToKKwogMjAxMC0xMS0wNyAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgVW5yZXZpZXdlZC4gIEF0dGVtcHQgdG8gZml4IHRoZSB3aW5kb3dzIGJ1aWxkLgpJbmRleDog
V2ViQ29yZS9BbmRyb2lkLm1rCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQW5kcm9pZC5tawkocmV2
aXNpb24gNzE0OTYpCisrKyBXZWJDb3JlL0FuZHJvaWQubWsJKHdvcmtpbmcgY29weSkKQEAgLTM4
Nyw3ICszODcsNyBAQCBMT0NBTF9TUkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKIAls
b2FkZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5jcHAgXAogCWxvYWRlci9hcHBjYWNo
ZS9NYW5pZmVzdFBhcnNlci5jcHAgXAogCVwKLQlsb2FkZXIvY2FjaGUvQ2FjaGUuY3BwIFwKKwls
b2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwIFwKIAlcCiAJbG9hZGVyL2ljb24vSWNvbkRhdGFi
YXNlLmNwcCBcCiAJbG9hZGVyL2ljb24vSWNvbkZldGNoZXIuY3BwIFwKSW5kZXg6IFdlYkNvcmUv
Q01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2
aXNpb24gNzE0OTYpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0xMTkxLDcgKzExOTEsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgbG9hZGVyL2FyY2hp
dmUvQXJjaGl2ZVJlc291cmNlLmNwcAogICAgIGxvYWRlci9hcmNoaXZlL0FyY2hpdmVSZXNvdXJj
ZUNvbGxlY3Rpb24uY3BwCiAKLSAgICBsb2FkZXIvY2FjaGUvQ2FjaGUuY3BwCisgICAgbG9hZGVy
L2NhY2hlL01lbW9yeUNhY2hlLmNwcAogCiAgICAgbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNw
cAogICAgIGxvYWRlci9pY29uL0ljb25Mb2FkZXIuY3BwCkluZGV4OiBXZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDcx
NDk2KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTkwNiw3
ICsxOTA2LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2xvYWRlci9hcmNoaXZl
L0FyY2hpdmVSZXNvdXJjZUNvbGxlY3Rpb24uaCBcCiAJV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9B
cmNoaXZlUmVzb3VyY2UuY3BwIFwKIAlXZWJDb3JlL2xvYWRlci9hcmNoaXZlL0FyY2hpdmVSZXNv
dXJjZS5oIFwKLQlXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZS5jcHAgXAorCVdlYkNvcmUvbG9h
ZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcCBcCiAJV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
Q1NTU3R5bGVTaGVldC5jcHAgXAogCVdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxl
U2hlZXQuaCBcCiAJV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5jcHAgXApAQCAtMTky
Niw3ICsxOTI2LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRTY3JpcHQuaCBcCiAJV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVT
aGVldC5jcHAgXAogCVdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuaCBc
Ci0JV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGUuaCBcCisJV2ViQ29yZS9sb2FkZXIvY2FjaGUv
TWVtb3J5Q2FjaGUuaCBcCiAJV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVQb2xpY3kuaCBcCiAJ
V2ViQ29yZS9sb2FkZXIvQ2FjaGVkTWV0YWRhdGEuaCBcCiAJV2ViQ29yZS9sb2FkZXIvQ3Jvc3NP
cmlnaW5BY2Nlc3NDb250cm9sLmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNzE0OTYpCisrKyBXZWJD
b3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjAxMSw4ICsyMDExLDggQEAKICAg
ICAgICAgICAgICdsb2FkZXIvYXJjaGl2ZS9BcmNoaXZlUmVzb3VyY2UuaCcsCiAgICAgICAgICAg
ICAnbG9hZGVyL2FyY2hpdmUvQXJjaGl2ZVJlc291cmNlQ29sbGVjdGlvbi5jcHAnLAogICAgICAg
ICAgICAgJ2xvYWRlci9hcmNoaXZlL0FyY2hpdmVSZXNvdXJjZUNvbGxlY3Rpb24uaCcsCi0gICAg
ICAgICAgICAnbG9hZGVyL2NhY2hlL0NhY2hlLmNwcCcsCi0gICAgICAgICAgICAnbG9hZGVyL2Nh
Y2hlL0NhY2hlLmgnLAorICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAn
LAorICAgICAgICAgICAgJ2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oJywKICAgICAgICAgICAg
ICdsb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAnLAogICAgICAgICAgICAgJ2xv
YWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmgnLAogICAgICAgICAgICAgJ2xvYWRlci9j
YWNoZS9DYWNoZWRGb250LmNwcCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDcxNDk2KQorKysgV2ViQ29yZS9X
ZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTAzMiw3ICsxMDMyLDcgQEAgU09VUkNFUyAr
PSBcCiAgICAgbG9hZGVyL2FyY2hpdmUvQXJjaGl2ZUZhY3RvcnkuY3BwIFwKICAgICBsb2FkZXIv
YXJjaGl2ZS9BcmNoaXZlUmVzb3VyY2UuY3BwIFwKICAgICBsb2FkZXIvYXJjaGl2ZS9BcmNoaXZl
UmVzb3VyY2VDb2xsZWN0aW9uLmNwcCBcCi0gICAgbG9hZGVyL2NhY2hlL0NhY2hlLmNwcCBcCisg
ICAgbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcCBcCiAgICAgbG9hZGVyL2NhY2hlL0NhY2hl
ZENTU1N0eWxlU2hlZXQuY3BwIFwKICAgICBsb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5jcHAgXAog
ICAgIGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAgXApAQCAtMTkzMSw3ICsxOTMxLDcgQEAg
SEVBREVSUyArPSBcCiAgICAgbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlSGFuZGxlLmggXAog
ICAgIGxvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuaCBcCiAgICAgbG9hZGVyL2NhY2hlL0NhY2hl
ZFhTTFN0eWxlU2hlZXQuaCBcCi0gICAgbG9hZGVyL2NhY2hlL0NhY2hlLmggXAorICAgIGxvYWRl
ci9jYWNoZS9NZW1vcnlDYWNoZS5oIFwKICAgICBsb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250
cm9sLmggXAogICAgIGxvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmggXAog
ICAgIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5oIFwKSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNzE0OTYpCisrKyBXZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNDE2MywxMSAr
MjQxNjMsMTEgQEAKIAkJCQlOYW1lPSJjYWNoZSINCiAJCQkJPg0KIAkJCQk8RmlsZQ0KLQkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcY2FjaGVcQ2FjaGUuY3BwIg0KKwkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxsb2FkZXJcY2FjaGVcTWVtb3J5Q2FjaGUuY3BwIg0KIAkJCQkJPg0KIAkJCQk8L0Zp
bGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxjYWNoZVxDYWNo
ZS5oIg0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcY2FjaGVcTWVtb3J5Q2FjaGUuaCIN
CiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA3MTQ5NikKKysrIFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MDM0
LDggKzUwMzQsOCBAQAogCQlCQ0FDRjNCQzEwNzI5MjFBMDBDMEM4QTMgLyogVXNlckNvbnRlbnRV
UkxQYXR0ZXJuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDQUNGM0JBMTA3MjkyMUEwMEMwQzhBMyAvKiBVc2VyQ29udGVudFVSTFBhdHRlcm4uY3Bw
ICovOyB9OwogCQlCQ0FDRjNCRDEwNzI5MjFBMDBDMEM4QTMgLyogVXNlckNvbnRlbnRVUkxQYXR0
ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0FD
RjNCQjEwNzI5MjFBMDBDMEM4QTMgLyogVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkNBRUZDQUUxMDE2Q0U0
QTAwNDBEMzRFIC8qIERPTVJHQkNvbG9yLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkNBRUZDQUQxMDE2Q0U0QTAwNDBEMzRFIC8qIERPTVJHQkNvbG9y
Lm1tICovOyB9OwotCQlCQ0IxNkMxNzA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCMTZCRkUwOTc5QzNC
RDAwNDY3NzQxIC8qIENhY2hlLmNwcCAqLzsgfTsKLQkJQkNCMTZDMTgwOTc5QzNCRDAwNDY3NzQx
IC8qIENhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQ0IxNkJGRjA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCQ0IxNkMxNzA5NzlDM0JEMDA0Njc3NDEg
LyogTWVtb3J5Q2FjaGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkNCMTZCRkUwOTc5QzNCRDAwNDY3NzQxIC8qIE1lbW9yeUNhY2hlLmNwcCAqLzsg
fTsKKwkJQkNCMTZDMTgwOTc5QzNCRDAwNDY3NzQxIC8qIE1lbW9yeUNhY2hlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0IxNkJGRjA5NzlDM0JEMDA0
Njc3NDEgLyogTWVtb3J5Q2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlCQ0IxNkMxOTA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkQ1NTU3R5
bGVTaGVldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQ0IxNkMwMDA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAgKi87
IH07CiAJCUJDQjE2QzFBMDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRDU1NTdHlsZVNoZWV0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0IxNkMwMTA5
NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkQ1NTU3R5bGVTaGVldC5oICovOyB9OwogCQlCQ0IxNkMx
QjA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCMTZDMDIwOTc5QzNCRDAwNDY3NzQxIC8qIENh
Y2hlZEltYWdlLmNwcCAqLzsgfTsKQEAgLTExMDY5LDggKzExMDY5LDggQEAKIAkJQkNBQ0YzQkEx
MDcyOTIxQTAwQzBDOEEzIC8qIFVzZXJDb250ZW50VVJMUGF0dGVybi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVc2VyQ29udGVudFVSTFBhdHRlcm4uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0FDRjNCQjEwNzI5MjFBMDBDMEM4QTMgLyogVXNl
ckNvbnRlbnRVUkxQYXR0ZXJuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVz
ZXJDb250ZW50VVJMUGF0dGVybi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0FF
RkNBRDEwMTZDRTRBMDA0MEQzNEUgLyogRE9NUkdCQ29sb3IubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01SR0JDb2xvci5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQkNCMTZCRkUwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUJDQjE2QkZGMDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQkNCMTZCRkUwOTc5QzNCRDAwNDY3NzQxIC8qIE1lbW9yeUNhY2hlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZW1vcnlDYWNoZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDQjE2QkZGMDk3OUMzQkQwMDQ2Nzc0MSAvKiBN
ZW1vcnlDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVtb3J5Q2Fj
aGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNCMTZDMDAwOTc5QzNCRDAwNDY3
NzQxIC8qIENhY2hlZENTU1N0eWxlU2hlZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENhY2hlZENTU1N0eWxlU2hlZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCQ0IxNkMwMTA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkQ1NTU3R5bGVTaGVl
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FjaGVkQ1NTU3R5bGVTaGVl
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0IxNkMwMjA5NzlDM0JEMDA0Njc3
NDEgLyogQ2FjaGVkSW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENhY2hlZEltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2MDQz
LDggKzE2MDQzLDggQEAKIAkJCQlCQ0IxNkMwRTA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkWFNM
U3R5bGVTaGVldC5jcHAgKi8sCiAJCQkJQkNCMTZDMEYwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hl
ZFhTTFN0eWxlU2hlZXQuaCAqLywKIAkJCQlGNTg3ODY0OTAyREUzQTlBMDFFQTQxMjIgLyogQ2Fj
aGVQb2xpY3kuaCAqLywKLQkJCQlCQ0IxNkJGRTA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGUuY3Bw
ICovLAotCQkJCUJDQjE2QkZGMDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZS5oICovLAorCQkJCUJD
QjE2QkZFMDk3OUMzQkQwMDQ2Nzc0MSAvKiBNZW1vcnlDYWNoZS5jcHAgKi8sCisJCQkJQkNCMTZC
RkYwOTc5QzNCRDAwNDY3NzQxIC8qIE1lbW9yeUNhY2hlLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9
IGNhY2hlOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE4NTY0LDcgKzE4NTY0LDcg
QEAKIAkJCQkxQTU2OUNGQTBEN0UyQjgyMDA3QzM5ODMgLyogY19pbnN0YW5jZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUE1NjlDRkMwRDdFMkI4MjAwN0MzOTgzIC8qIGNfcnVudGltZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUE1NjlDRkUwRDdFMkI4MjAwN0MzOTgzIC8qIGNfdXRpbGl0eS5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJQkNCMTZDMTgwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlLmggaW4g
SGVhZGVycyAqLywKKwkJCQlCQ0IxNkMxODA5NzlDM0JEMDA0Njc3NDEgLyogTWVtb3J5Q2FjaGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDQjE2QzFBMDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRD
U1NTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzY0QjRDQzBDQjQyOTVEMDA1RjJC
NjIgLyogQ2FjaGVkRm9udC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFDMEFBMzkwRjJBQTEwQTAw
MTY0OEMyIC8qIENhY2hlZEZyYW1lLmggaW4gSGVhZGVycyAqLywKQEAgLTIxNzE0LDcgKzIxNzE0
LDcgQEAKIAkJCQkxQTU2OUNGOTBEN0UyQjgyMDA3QzM5ODMgLyogY19pbnN0YW5jZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxQTU2OUNGQjBEN0UyQjgyMDA3QzM5ODMgLyogY19ydW50aW1lLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFBNTY5Q0ZEMEQ3RTJCODIwMDdDMzk4MyAvKiBjX3V0aWxp
dHkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQkNCMTZDMTcwOTc5QzNCRDAwNDY3NzQxIC8qIENh
Y2hlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUJDQjE2QzE3MDk3OUMzQkQwMDQ2Nzc0MSAvKiBN
ZW1vcnlDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0IxNkMxOTA5NzlDM0JEMDA0Njc3
NDEgLyogQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzY0QjRD
QjBDQjQyOTVEMDA1RjJCNjIgLyogQ2FjaGVkRm9udC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
MUMwQUE0MTBGMkFBMTVFMDAxNjQ4QzIgLyogQ2FjaGVkRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NJbWFnZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2Nzcy9DU1NJbWFnZVZhbHVlLmNwcAkocmV2aXNpb24gNzE0OTYpCisrKyBXZWJDb3JlL2Nz
cy9DU1NJbWFnZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2lu
Y2x1ZGUgIkNTU0ltYWdlVmFsdWUuaCIKIAogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIK
LSNpbmNsdWRlICJDYWNoZS5oIgorI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCiAjaW5jbHVkZSAi
Q2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1
ZGUgIlN0eWxlQ2FjaGVkSW1hZ2UuaCIKSW5kZXg6IFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCShyZXZpc2lv
biA3MTQ5NikKKysrIFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZS5oIgogCiAjaW5jbHVk
ZSAiQmVmb3JlTG9hZEV2ZW50LmgiCi0jaW5jbHVkZSAiQ2FjaGUuaCIKKyNpbmNsdWRlICJNZW1v
cnlDYWNoZS5oIgogI2luY2x1ZGUgIkNvbnRhaW5lck5vZGVBbGdvcml0aG1zLmgiCiAjaW5jbHVk
ZSAiRGVsZXRlQnV0dG9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKSW5k
ZXg6IFdlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aGlzdG9yeS9QYWdlQ2FjaGUuY3BwCShyZXZpc2lvbiA3MTQ5NikKKysrIFdlYkNvcmUvaGlzdG9y
eS9QYWdlQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNs
dWRlICJBcHBsaWNhdGlvbkNhY2hlSG9zdC5oIgogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ29udHJv
bGxlci5oIgotI2luY2x1ZGUgIkNhY2hlLmgiCisjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKICNp
bmNsdWRlICJDYWNoZWRQYWdlLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAi
RGV2aWNlTW90aW9uQ29udHJvbGxlci5oIgpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ1NTU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
U1NTdG9yZS5oCShyZXZpc2lvbiA3MTQ5NikKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNTU1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNkZWZpbmUgSW5z
cGVjdG9yQ1NTU3RvcmVfaAogCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgiCi0j
aW5jbHVkZSAiQ2FjaGUuaCIKKyNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgogCiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpJbmRleDogV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAJKHJldmlzaW9uIDcxNDk2KQor
KysgV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JSZXNvdXJjZUFnZW50
LmgiCiAKICNpbmNsdWRlICJCYXNlNjQuaCIKLSNpbmNsdWRlICJDYWNoZS5oIgorI2luY2x1ZGUg
Ik1lbW9yeUNhY2hlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKICNpbmNsdWRlICJD
YWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCkluZGV4OiBXZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiA3MTQ5NikKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgIkFy
Y2hpdmVGYWN0b3J5LmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiQmVmb3JlVW5sb2FkRXZlbnQuaCIKLSNpbmNsdWRlICJDYWNoZS5oIgorI2luY2x1ZGUg
Ik1lbW9yeUNhY2hlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUGFnZS5oIgogI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCkluZGV4OiBXZWJDb3JlL2xv
YWRlci9sb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2xvYWRlci5jcHAJ
KHJldmlzaW9uIDcxNDk2KQorKysgV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgImxv
YWRlci5oIgogCi0jaW5jbHVkZSAiQ2FjaGUuaCIKKyNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgog
I2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKICNp
bmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgpJbmRleDogV2ViQ29yZS9sb2FkZXIvYXJj
aGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwCShyZXZpc2lvbiA3MTQ5NikKKysrIFdl
YkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJMZWdh
Y3lXZWJBcmNoaXZlLmgiCiAKLSNpbmNsdWRlICJDYWNoZS5oIgorI2luY2x1ZGUgIk1lbW9yeUNh
Y2hlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5o
IgogI2luY2x1ZGUgIkZyYW1lLmgiCkluZGV4OiBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGUuY3BwCShyZXZpc2lv
biA3MTQ5NikKKysrIFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw3ODggKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9s
bCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVs
bGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gICAgQ29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3Rp
YW4gKGJhc3RpYW5Aa2RlLm9yZykKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0gICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJDYWNoZS5oIgotCi0jaW5jbHVkZSAiQ2FjaGVkQ1NTU3R5
bGVTaGVldC5oIgotI2luY2x1ZGUgIkNhY2hlZEZvbnQuaCIKLSNpbmNsdWRlICJDYWNoZWRJbWFn
ZS5oIgotI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgotI2luY2x1ZGUgIkNhY2hlZFhTTFN0eWxl
U2hlZXQuaCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRl
clR5cGVzLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNp
bmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRl
ICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8d3RmL0N1
cnJlbnRUaW1lLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotc3RhdGljIGNvbnN0IGludCBjRGVmYXVsdENhY2hlQ2FwYWNpdHkgPSA4MTkyICogMTAy
NDsKLXN0YXRpYyBjb25zdCBkb3VibGUgY01pbkRlbGF5QmVmb3JlTGl2ZURlY29kZWRQcnVuZSA9
IDE7IC8vIFNlY29uZHMuCi1zdGF0aWMgY29uc3QgZmxvYXQgY1RhcmdldFBydW5lUGVyY2VudGFn
ZSA9IC45NWY7IC8vIFBlcmNlbnRhZ2Ugb2YgY2FwYWNpdHkgdG93YXJkIHdoaWNoIHdlIHBydW5l
LCB0byBhdm9pZCBpbW1lZGlhdGVseSBwcnVuaW5nIGFnYWluLgotc3RhdGljIGNvbnN0IGRvdWJs
ZSBjRGVmYXVsdERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCA9IDA7Ci0KLUNhY2hlKiBjYWNo
ZSgpCi17Ci0gICAgc3RhdGljIENhY2hlKiBzdGF0aWNDYWNoZSA9IG5ldyBDYWNoZTsKLSAgICBy
ZXR1cm4gc3RhdGljQ2FjaGU7Ci19Ci0KLUNhY2hlOjpDYWNoZSgpCi0gICAgOiBtX2Rpc2FibGVk
KGZhbHNlKQotICAgICwgbV9wcnVuZUVuYWJsZWQodHJ1ZSkKLSAgICAsIG1faW5QcnVuZURlYWRS
ZXNvdXJjZXMoZmFsc2UpCi0gICAgLCBtX2NhcGFjaXR5KGNEZWZhdWx0Q2FjaGVDYXBhY2l0eSkK
LSAgICAsIG1fbWluRGVhZENhcGFjaXR5KDApCi0gICAgLCBtX21heERlYWRDYXBhY2l0eShjRGVm
YXVsdENhY2hlQ2FwYWNpdHkpCi0gICAgLCBtX2RlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2
YWwoY0RlZmF1bHREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwpCi0gICAgLCBtX2xpdmVTaXpl
KDApCi0gICAgLCBtX2RlYWRTaXplKDApCi17Ci19Ci0KLXN0YXRpYyBDYWNoZWRSZXNvdXJjZSog
Y3JlYXRlUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIG5ldyBDYWNo
ZWRJbWFnZSh1cmwuc3RyaW5nKCkpOwotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxl
U2hlZXQ6Ci0gICAgICAgIHJldHVybiBuZXcgQ2FjaGVkQ1NTU3R5bGVTaGVldCh1cmwuc3RyaW5n
KCksIGNoYXJzZXQpOwotICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdDoKLSAgICAgICAg
cmV0dXJuIG5ldyBDYWNoZWRTY3JpcHQodXJsLnN0cmluZygpLCBjaGFyc2V0KTsKLSAgICBjYXNl
IENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBuZXcgQ2FjaGVk
Rm9udCh1cmwuc3RyaW5nKCkpOwotI2lmIEVOQUJMRShYU0xUKQotICAgIGNhc2UgQ2FjaGVkUmVz
b3VyY2U6OlhTTFN0eWxlU2hlZXQ6Ci0gICAgICAgIHJldHVybiBuZXcgQ2FjaGVkWFNMU3R5bGVT
aGVldCh1cmwuc3RyaW5nKCkpOwotI2VuZGlmCi0jaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCi0g
ICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlua1ByZWZldGNoOgotICAgICAgICByZXR1cm4gbmV3
IENhY2hlZFJlc291cmNlKHVybC5zdHJpbmcoKSwgQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVmZXRj
aCk7Ci0jZW5kaWYKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gMDsKLX0KLQotQ2FjaGVkUmVzb3VyY2UqIENhY2hlOjpyZXF1ZXN0UmVzb3VyY2UoQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyLCBDYWNoZWRSZXNvdXJjZTo6
VHlwZSB0eXBlLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgYm9vbCBy
ZXF1ZXN0SXNQcmVsb2FkKQotewotICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYWNoZTo6cmVx
dWVzdFJlc291cmNlICclcycsIGNoYXJzZXQgJyVzJywgcHJlbG9hZD0ldSIsIHVybC5zdHJpbmco
KS5sYXRpbjEoKS5kYXRhKCksIGNoYXJzZXQubGF0aW4xKCkuZGF0YSgpLCByZXF1ZXN0SXNQcmVs
b2FkKTsKLQotICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgbmVlZCB0byBzcGVjaWFsLWNhc2Ug
YW4gZW1wdHkgVVJMPwotICAgIC8vIFdvdWxkIGl0IGJlIGJldHRlciB0byBqdXN0IGdvIG9uIHdp
dGggdGhlIGNhY2hlIGNvZGUgYW5kIGxldCBpdCBmYWlsIGxhdGVyPwotICAgIGlmICh1cmwuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIExvb2sgdXAgdGhlIHJlc291cmNl
IGluIG91ciBtYXAuCi0gICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gcmVzb3VyY2VGb3JV
UkwodXJsLnN0cmluZygpKTsKLQotICAgIGlmIChyZXNvdXJjZSAmJiByZXF1ZXN0SXNQcmVsb2Fk
ICYmICFyZXNvdXJjZS0+aXNQcmVsb2FkZWQoKSkgewotICAgICAgICBMT0coUmVzb3VyY2VMb2Fk
aW5nLCAiQ2FjaGU6OnJlcXVlc3RSZXNvdXJjZSBhbHJlYWR5IGhhcyBhIHByZWxvYWQgcmVxdWVz
dCBmb3IgdGhpcyByZXF1ZXN0LCBhbmQgaXQgaGFzbid0IGJlZW4gcHJlbG9hZGVkIHlldCIpOwot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAoIWNhY2hlZFJlc291cmNlTG9hZGVy
LT5kb2MoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuRGlzcGxheSh1cmwpKSB7Ci0gICAgICAgIExP
RyhSZXNvdXJjZUxvYWRpbmcsICIuLi5VUkwgd2FzIG5vdCBhbGxvd2VkIGJ5IFNlY3VyaXR5T3Jp
Z2luIik7Ci0gICAgICAgIGlmICghcmVxdWVzdElzUHJlbG9hZCkKLSAgICAgICAgICAgIEZyYW1l
TG9hZGVyOjpyZXBvcnRMb2NhbExvYWRGYWlsZWQoY2FjaGVkUmVzb3VyY2VMb2FkZXItPmRvYygp
LT5mcmFtZSgpLCB1cmwuc3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAg
Ci0gICAgaWYgKCFyZXNvdXJjZSkgewotICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2Fj
aGVkUmVzb3VyY2UgZm9yICclcycgd2Fzbid0IGZvdW5kIGluIGNhY2hlLiBDcmVhdGluZyBpdCIs
IHVybC5zdHJpbmcoKS5sYXRpbjEoKS5kYXRhKCkpOwotICAgICAgICAvLyBUaGUgcmVzb3VyY2Ug
ZG9lcyBub3QgZXhpc3QuIENyZWF0ZSBpdC4KLSAgICAgICAgcmVzb3VyY2UgPSBjcmVhdGVSZXNv
dXJjZSh0eXBlLCB1cmwsIGNoYXJzZXQpOwotICAgICAgICBBU1NFUlQocmVzb3VyY2UpOwotCi0g
ICAgICAgIC8vIFByZXRlbmQgdGhlIHJlc291cmNlIGlzIGluIHRoZSBjYWNoZSwgdG8gcHJldmVu
dCBpdCBmcm9tIGJlaW5nIGRlbGV0ZWQgZHVyaW5nIHRoZSBsb2FkKCkgY2FsbC4KLSAgICAgICAg
Ly8gRklYTUU6IENhY2hlZFJlc291cmNlIHNob3VsZCBqdXN0IHVzZSBub3JtYWwgcmVmY291bnRp
bmcgaW5zdGVhZC4KLSAgICAgICAgcmVzb3VyY2UtPnNldEluQ2FjaGUodHJ1ZSk7Ci0gICAgICAg
IAotICAgICAgICByZXNvdXJjZS0+bG9hZChjYWNoZWRSZXNvdXJjZUxvYWRlcik7Ci0gICAgICAg
IAotICAgICAgICBpZiAocmVzb3VyY2UtPmVycm9yT2NjdXJyZWQoKSkgewotICAgICAgICAgICAg
Ly8gV2UgZG9uJ3Qgc3VwcG9ydCBpbW1lZGlhdGUgbG9hZHMsIGJ1dCB3ZSBkbyBzdXBwb3J0IGlt
bWVkaWF0ZSBmYWlsdXJlLgotICAgICAgICAgICAgLy8gSW4gdGhhdCBjYXNlIHdlIHNob3VsZCB0
byBkZWxldGUgdGhlIHJlc291cmNlIG5vdyBhbmQgcmV0dXJuIDAgYmVjYXVzZSBvdGhlcndpc2UK
LSAgICAgICAgICAgIC8vIGl0IHdvdWxkIGxlYWsgaWYgbm8gcmVmL2RlcmVmIHdhcyBldmVyIGRv
bmUgb24gaXQuCi0gICAgICAgICAgICByZXNvdXJjZS0+c2V0SW5DYWNoZShmYWxzZSk7Ci0gICAg
ICAgICAgICBkZWxldGUgcmVzb3VyY2U7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmICghZGlzYWJsZWQoKSkKLSAgICAgICAgICAgIG1fcmVzb3VyY2VzLnNl
dCh1cmwuc3RyaW5nKCksIHJlc291cmNlKTsgIC8vIFRoZSBzaXplIHdpbGwgYmUgYWRkZWQgaW4g
bGF0ZXIgb25jZSB0aGUgcmVzb3VyY2UgaXMgbG9hZGVkIGFuZCBjYWxscyBiYWNrIHRvIHVzIHdp
dGggdGhlIG5ldyBzaXplLgotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIEtpY2sgdGhl
IHJlc291cmNlIG91dCBvZiB0aGUgY2FjaGUsIGJlY2F1c2UgdGhlIGNhY2hlIGlzIGRpc2FibGVk
LgotICAgICAgICAgICAgcmVzb3VyY2UtPnNldEluQ2FjaGUoZmFsc2UpOwotICAgICAgICAgICAg
cmVzb3VyY2UtPnNldENhY2hlZFJlc291cmNlTG9hZGVyKGNhY2hlZFJlc291cmNlTG9hZGVyKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChyZXNvdXJjZS0+dHlwZSgpICE9IHR5cGUpIHsK
LSAgICAgICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hlOjpyZXF1ZXN0UmVzb3VyY2UgY2Fu
bm90IHVzZSBjYWNoZWQgcmVzb3VyY2UgZm9yICclcycgZHVlIHRvIHR5cGUgbWlzbWF0Y2giLCB1
cmwuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
Ci0gICAgaWYgKCFkaXNhYmxlZCgpKSB7Ci0gICAgICAgIC8vIFRoaXMgd2lsbCBtb3ZlIHRoZSBy
ZXNvdXJjZSB0byB0aGUgZnJvbnQgb2YgaXRzIExSVSBsaXN0IGFuZCBpbmNyZWFzZSBpdHMgYWNj
ZXNzIGNvdW50LgotICAgICAgICByZXNvdXJjZUFjY2Vzc2VkKHJlc291cmNlKTsKLSAgICB9Ci0K
LSAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGU6OnJlcXVlc3RSZXNvdXJjZSBmb3IgJyVz
JyByZXR1cm5pbmcgcmVzb3VyY2UgJXBcbiIsIHVybC5zdHJpbmcoKS5sYXRpbjEoKS5kYXRhKCks
IHJlc291cmNlKTsKLQotICAgIHJldHVybiByZXNvdXJjZTsKLX0KLSAgICAKLUNhY2hlZENTU1N0
eWxlU2hlZXQqIENhY2hlOjpyZXF1ZXN0VXNlckNTU1N0eWxlU2hlZXQoQ2FjaGVkUmVzb3VyY2VM
b2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3Ry
aW5nJiBjaGFyc2V0KQotewotICAgIENhY2hlZENTU1N0eWxlU2hlZXQqIHVzZXJTaGVldDsKLSAg
ICBpZiAoQ2FjaGVkUmVzb3VyY2UqIGV4aXN0aW5nID0gcmVzb3VyY2VGb3JVUkwodXJsKSkgewot
ICAgICAgICBpZiAoZXhpc3RpbmctPnR5cGUoKSAhPSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVT
aGVldCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB1c2VyU2hlZXQgPSBzdGF0aWNf
Y2FzdDxDYWNoZWRDU1NTdHlsZVNoZWV0Kj4oZXhpc3RpbmcpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHVzZXJTaGVldCA9IG5ldyBDYWNoZWRDU1NTdHlsZVNoZWV0KHVybCwgY2hhcnNldCk7Ci0K
LSAgICAgICAgLy8gUHJldGVuZCB0aGUgcmVzb3VyY2UgaXMgaW4gdGhlIGNhY2hlLCB0byBwcmV2
ZW50IGl0IGZyb20gYmVpbmcgZGVsZXRlZCBkdXJpbmcgdGhlIGxvYWQoKSBjYWxsLgotICAgICAg
ICAvLyBGSVhNRTogQ2FjaGVkUmVzb3VyY2Ugc2hvdWxkIGp1c3QgdXNlIG5vcm1hbCByZWZjb3Vu
dGluZyBpbnN0ZWFkLgotICAgICAgICB1c2VyU2hlZXQtPnNldEluQ2FjaGUodHJ1ZSk7Ci0gICAg
ICAgIC8vIERvbid0IGxvYWQgaW5jcmVtZW50YWxseSwgc2tpcCBsb2FkIGNoZWNrcywgZG9uJ3Qg
c2VuZCByZXNvdXJjZSBsb2FkIGNhbGxiYWNrcy4KLSAgICAgICAgdXNlclNoZWV0LT5sb2FkKGNh
Y2hlZFJlc291cmNlTG9hZGVyLCBmYWxzZSwgU2tpcFNlY3VyaXR5Q2hlY2ssIGZhbHNlKTsKLSAg
ICAgICAgaWYgKCFkaXNhYmxlZCgpKQotICAgICAgICAgICAgbV9yZXNvdXJjZXMuc2V0KHVybCwg
dXNlclNoZWV0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdXNlclNoZWV0LT5zZXRJbkNh
Y2hlKGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoIWRpc2FibGVkKCkpIHsKLSAgICAgICAgLy8g
VGhpcyB3aWxsIG1vdmUgdGhlIHJlc291cmNlIHRvIHRoZSBmcm9udCBvZiBpdHMgTFJVIGxpc3Qg
YW5kIGluY3JlYXNlIGl0cyBhY2Nlc3MgY291bnQuCi0gICAgICAgIHJlc291cmNlQWNjZXNzZWQo
dXNlclNoZWV0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdXNlclNoZWV0OwotfQotICAgIAotdm9p
ZCBDYWNoZTo6cmV2YWxpZGF0ZVJlc291cmNlKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyKQotewotICAgIEFTU0VSVChy
ZXNvdXJjZSk7Ci0gICAgQVNTRVJUKHJlc291cmNlLT5pbkNhY2hlKCkpOwotICAgIEFTU0VSVChy
ZXNvdXJjZSA9PSBtX3Jlc291cmNlcy5nZXQocmVzb3VyY2UtPnVybCgpKSk7Ci0gICAgQVNTRVJU
KCFkaXNhYmxlZCgpKTsKLSAgICBpZiAocmVzb3VyY2UtPnJlc291cmNlVG9SZXZhbGlkYXRlKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXJlc291cmNlLT5jYW5Vc2VDYWNoZVZhbGlkYXRv
cigpKSB7Ci0gICAgICAgIGV2aWN0KHJlc291cmNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBjb25zdCBTdHJpbmcmIHVybCA9IHJlc291cmNlLT51cmwoKTsKLSAgICBDYWNoZWRSZXNv
dXJjZSogbmV3UmVzb3VyY2UgPSBjcmVhdGVSZXNvdXJjZShyZXNvdXJjZS0+dHlwZSgpLCBLVVJM
KFBhcnNlZFVSTFN0cmluZywgdXJsKSwgcmVzb3VyY2UtPmVuY29kaW5nKCkpOwotICAgIExPRyhS
ZXNvdXJjZUxvYWRpbmcsICJSZXNvdXJjZSAlcCBjcmVhdGVkIHRvIHJldmFsaWRhdGUgJXAiLCBu
ZXdSZXNvdXJjZSwgcmVzb3VyY2UpOwotICAgIG5ld1Jlc291cmNlLT5zZXRSZXNvdXJjZVRvUmV2
YWxpZGF0ZShyZXNvdXJjZSk7Ci0gICAgZXZpY3QocmVzb3VyY2UpOwotICAgIG1fcmVzb3VyY2Vz
LnNldCh1cmwsIG5ld1Jlc291cmNlKTsKLSAgICBuZXdSZXNvdXJjZS0+c2V0SW5DYWNoZSh0cnVl
KTsKLSAgICByZXNvdXJjZUFjY2Vzc2VkKG5ld1Jlc291cmNlKTsKLSAgICBuZXdSZXNvdXJjZS0+
bG9hZChjYWNoZWRSZXNvdXJjZUxvYWRlcik7Ci19Ci0gICAgCi12b2lkIENhY2hlOjpyZXZhbGlk
YXRpb25TdWNjZWVkZWQoQ2FjaGVkUmVzb3VyY2UqIHJldmFsaWRhdGluZ1Jlc291cmNlLCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICBDYWNoZWRSZXNvdXJjZSogcmVz
b3VyY2UgPSByZXZhbGlkYXRpbmdSZXNvdXJjZS0+cmVzb3VyY2VUb1JldmFsaWRhdGUoKTsKLSAg
ICBBU1NFUlQocmVzb3VyY2UpOwotICAgIEFTU0VSVCghcmVzb3VyY2UtPmluQ2FjaGUoKSk7Ci0g
ICAgQVNTRVJUKHJlc291cmNlLT5pc0xvYWRlZCgpKTsKLSAgICBBU1NFUlQocmV2YWxpZGF0aW5n
UmVzb3VyY2UtPmluQ2FjaGUoKSk7Ci0gICAgCi0gICAgZXZpY3QocmV2YWxpZGF0aW5nUmVzb3Vy
Y2UpOwotCi0gICAgQVNTRVJUKCFtX3Jlc291cmNlcy5nZXQocmVzb3VyY2UtPnVybCgpKSk7Ci0g
ICAgbV9yZXNvdXJjZXMuc2V0KHJlc291cmNlLT51cmwoKSwgcmVzb3VyY2UpOwotICAgIHJlc291
cmNlLT5zZXRJbkNhY2hlKHRydWUpOwotICAgIHJlc291cmNlLT51cGRhdGVSZXNwb25zZUFmdGVy
UmV2YWxpZGF0aW9uKHJlc3BvbnNlKTsKLSAgICBpbnNlcnRJbkxSVUxpc3QocmVzb3VyY2UpOwot
ICAgIGludCBkZWx0YSA9IHJlc291cmNlLT5zaXplKCk7Ci0gICAgaWYgKHJlc291cmNlLT5kZWNv
ZGVkU2l6ZSgpICYmIHJlc291cmNlLT5oYXNDbGllbnRzKCkpCi0gICAgICAgIGluc2VydEluTGl2
ZURlY29kZWRSZXNvdXJjZXNMaXN0KHJlc291cmNlKTsKLSAgICBpZiAoZGVsdGEpCi0gICAgICAg
IGFkanVzdFNpemUocmVzb3VyY2UtPmhhc0NsaWVudHMoKSwgZGVsdGEpOwotICAgIAotICAgIHJl
dmFsaWRhdGluZ1Jlc291cmNlLT5zd2l0Y2hDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291cmNlKCk7
Ci0gICAgLy8gdGhpcyBkZWxldGVzIHRoZSByZXZhbGlkYXRpbmcgcmVzb3VyY2UKLSAgICByZXZh
bGlkYXRpbmdSZXNvdXJjZS0+Y2xlYXJSZXNvdXJjZVRvUmV2YWxpZGF0ZSgpOwotfQotCi12b2lk
IENhY2hlOjpyZXZhbGlkYXRpb25GYWlsZWQoQ2FjaGVkUmVzb3VyY2UqIHJldmFsaWRhdGluZ1Jl
c291cmNlKQotewotICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJSZXZhbGlkYXRpb24gZmFpbGVk
IGZvciAlcCIsIHJldmFsaWRhdGluZ1Jlc291cmNlKTsKLSAgICBBU1NFUlQocmV2YWxpZGF0aW5n
UmVzb3VyY2UtPnJlc291cmNlVG9SZXZhbGlkYXRlKCkpOwotICAgIHJldmFsaWRhdGluZ1Jlc291
cmNlLT5jbGVhclJlc291cmNlVG9SZXZhbGlkYXRlKCk7Ci19Ci0KLUNhY2hlZFJlc291cmNlKiBD
YWNoZTo6cmVzb3VyY2VGb3JVUkwoY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgQ2FjaGVkUmVz
b3VyY2UqIHJlc291cmNlID0gbV9yZXNvdXJjZXMuZ2V0KHVybCk7Ci0gICAgYm9vbCB3YXNQdXJn
ZWFibGUgPSBDYWNoZTo6c2hvdWxkTWFrZVJlc291cmNlUHVyZ2VhYmxlT25FdmljdGlvbigpICYm
IHJlc291cmNlICYmIHJlc291cmNlLT5pc1B1cmdlYWJsZSgpOwotICAgIGlmIChyZXNvdXJjZSAm
JiAhcmVzb3VyY2UtPm1ha2VQdXJnZWFibGUoZmFsc2UpKSB7Ci0gICAgICAgIEFTU0VSVCghcmVz
b3VyY2UtPmhhc0NsaWVudHMoKSk7Ci0gICAgICAgIGV2aWN0KHJlc291cmNlKTsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotICAgIC8vIEFkZCB0aGUgc2l6ZSBiYWNrIHNpbmNlIHdlIGhhZCBz
dWJ0cmFjdGVkIGl0IHdoZW4gd2UgbWFya2VkIHRoZSBtZW1vcnkgYXMgcHVyZ2VhYmxlLgotICAg
IGlmICh3YXNQdXJnZWFibGUpCi0gICAgICAgIGFkanVzdFNpemUocmVzb3VyY2UtPmhhc0NsaWVu
dHMoKSwgcmVzb3VyY2UtPnNpemUoKSk7Ci0gICAgcmV0dXJuIHJlc291cmNlOwotfQotCi11bnNp
Z25lZCBDYWNoZTo6ZGVhZENhcGFjaXR5KCkgY29uc3QgCi17Ci0gICAgLy8gRGVhZCByZXNvdXJj
ZSBjYXBhY2l0eSBpcyB3aGF0ZXZlciBzcGFjZSBpcyBub3Qgb2NjdXBpZWQgYnkgbGl2ZSByZXNv
dXJjZXMsIGJvdW5kZWQgYnkgYW4gaW5kZXBlbmRlbnQgbWluaW11bSBhbmQgbWF4aW11bS4KLSAg
ICB1bnNpZ25lZCBjYXBhY2l0eSA9IG1fY2FwYWNpdHkgLSBtaW4obV9saXZlU2l6ZSwgbV9jYXBh
Y2l0eSk7IC8vIFN0YXJ0IHdpdGggYXZhaWxhYmxlIGNhcGFjaXR5LgotICAgIGNhcGFjaXR5ID0g
bWF4KGNhcGFjaXR5LCBtX21pbkRlYWRDYXBhY2l0eSk7IC8vIE1ha2Ugc3VyZSBpdCdzIGFib3Zl
IHRoZSBtaW5pbXVtLgotICAgIGNhcGFjaXR5ID0gbWluKGNhcGFjaXR5LCBtX21heERlYWRDYXBh
Y2l0eSk7IC8vIE1ha2Ugc3VyZSBpdCdzIGJlbG93IHRoZSBtYXhpbXVtLgotICAgIHJldHVybiBj
YXBhY2l0eTsKLX0KLQotdW5zaWduZWQgQ2FjaGU6OmxpdmVDYXBhY2l0eSgpIGNvbnN0IAoteyAK
LSAgICAvLyBMaXZlIHJlc291cmNlIGNhcGFjaXR5IGlzIHdoYXRldmVyIGlzIGxlZnQgb3ZlciBh
ZnRlciBjYWxjdWxhdGluZyBkZWFkIHJlc291cmNlIGNhcGFjaXR5LgotICAgIHJldHVybiBtX2Nh
cGFjaXR5IC0gZGVhZENhcGFjaXR5KCk7Ci19Ci0KLXZvaWQgQ2FjaGU6OnBydW5lTGl2ZVJlc291
cmNlcygpCi17Ci0gICAgaWYgKCFtX3BydW5lRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgdW5zaWduZWQgY2FwYWNpdHkgPSBsaXZlQ2FwYWNpdHkoKTsKLSAgICBpZiAoY2FwYWNpdHkg
JiYgbV9saXZlU2l6ZSA8PSBjYXBhY2l0eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWdu
ZWQgdGFyZ2V0U2l6ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjYXBhY2l0eSAqIGNUYXJnZXRQ
cnVuZVBlcmNlbnRhZ2UpOyAvLyBDdXQgYnkgYSBwZXJjZW50YWdlIHRvIGF2b2lkIGltbWVkaWF0
ZWx5IHBydW5pbmcgYWdhaW4uCi0gICAgZG91YmxlIGN1cnJlbnRUaW1lID0gRnJhbWVWaWV3Ojpj
dXJyZW50UGFpbnRUaW1lU3RhbXAoKTsKLSAgICBpZiAoIWN1cnJlbnRUaW1lKSAvLyBJbiBjYXNl
IHBydW5lIGlzIGNhbGxlZCBkaXJlY3RseSwgb3V0c2lkZSBvZiBhIEZyYW1lIHBhaW50LgotICAg
ICAgICBjdXJyZW50VGltZSA9IFdURjo6Y3VycmVudFRpbWUoKTsKLSAgICAKLSAgICAvLyBEZXN0
cm95IGFueSBkZWNvZGVkIGRhdGEgaW4gbGl2ZSBvYmplY3RzIHRoYXQgd2UgY2FuLgotICAgIC8v
IFN0YXJ0IGZyb20gdGhlIHRhaWwsIHNpbmNlIHRoaXMgaXMgdGhlIGxlYXN0IHJlY2VudGx5IGFj
Y2Vzc2VkIG9mIHRoZSBvYmplY3RzLgotCi0gICAgLy8gVGhlIGxpc3QgbWlnaHQgbm90IGJlIHNv
cnRlZCBieSB0aGUgbV9sYXN0RGVjb2RlZEFjY2Vzc1RpbWUuIFRoZSBpbXBhY3QKLSAgICAvLyBv
ZiB0aGlzIHdlYWtlciBpbnZhcmlhbnQgaXMgbWlub3IgYXMgdGhlIGJlbG93IGlmIHN0YXRlbWVu
dCB0byBjaGVjayB0aGUKLSAgICAvLyBlbGFwc2VkVGltZSB3aWxsIGV2YWx1YXRlIHRvIGZhbHNl
IGFzIHRoZSBjdXJyZW50VGltZSB3aWxsIGJlIGEgbG90Ci0gICAgLy8gZ3JlYXRlciB0aGFuIHRo
ZSBjdXJyZW50LT5tX2xhc3REZWNvZGVkQWNjZXNzVGltZS4KLSAgICAvLyBGb3IgbW9yZSBkZXRh
aWxzIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMjA5Ci0g
ICAgQ2FjaGVkUmVzb3VyY2UqIGN1cnJlbnQgPSBtX2xpdmVEZWNvZGVkUmVzb3VyY2VzLm1fdGFp
bDsKLSAgICB3aGlsZSAoY3VycmVudCkgewotICAgICAgICBDYWNoZWRSZXNvdXJjZSogcHJldiA9
IGN1cnJlbnQtPm1fcHJldkluTGl2ZVJlc291cmNlc0xpc3Q7Ci0gICAgICAgIEFTU0VSVChjdXJy
ZW50LT5oYXNDbGllbnRzKCkpOwotICAgICAgICBpZiAoY3VycmVudC0+aXNMb2FkZWQoKSAmJiBj
dXJyZW50LT5kZWNvZGVkU2l6ZSgpKSB7Ci0gICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYg
dGhlIHJlbWFpbmluZyByZXNvdXJjZXMgYXJlIHRvbyBuZXcgdG8gcHJ1bmUuCi0gICAgICAgICAg
ICBkb3VibGUgZWxhcHNlZFRpbWUgPSBjdXJyZW50VGltZSAtIGN1cnJlbnQtPm1fbGFzdERlY29k
ZWRBY2Nlc3NUaW1lOwotICAgICAgICAgICAgaWYgKGVsYXBzZWRUaW1lIDwgY01pbkRlbGF5QmVm
b3JlTGl2ZURlY29kZWRQcnVuZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
ICAgIC8vIERlc3Ryb3kgb3VyIGRlY29kZWQgZGF0YS4gVGhpcyB3aWxsIHJlbW92ZSB1cyBmcm9t
IAotICAgICAgICAgICAgLy8gbV9saXZlRGVjb2RlZFJlc291cmNlcywgYW5kIHBvc3NpYmx5IG1v
dmUgdXMgdG8gYSBkaWZmZXJlbnQgTFJVIAotICAgICAgICAgICAgLy8gbGlzdCBpbiBtX2FsbFJl
c291cmNlcy4KLSAgICAgICAgICAgIGN1cnJlbnQtPmRlc3Ryb3lEZWNvZGVkRGF0YSgpOwotCi0g
ICAgICAgICAgICBpZiAodGFyZ2V0U2l6ZSAmJiBtX2xpdmVTaXplIDw9IHRhcmdldFNpemUpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGN1cnJlbnQgPSBwcmV2
OwotICAgIH0KLX0KLQotdm9pZCBDYWNoZTo6cHJ1bmVEZWFkUmVzb3VyY2VzKCkKLXsKLSAgICBp
ZiAoIW1fcHJ1bmVFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBjYXBh
Y2l0eSA9IGRlYWRDYXBhY2l0eSgpOwotICAgIGlmIChjYXBhY2l0eSAmJiBtX2RlYWRTaXplIDw9
IGNhcGFjaXR5KQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCB0YXJnZXRTaXplID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNhcGFjaXR5ICogY1RhcmdldFBydW5lUGVyY2VudGFnZSk7
IC8vIEN1dCBieSBhIHBlcmNlbnRhZ2UgdG8gYXZvaWQgaW1tZWRpYXRlbHkgcHJ1bmluZyBhZ2Fp
bi4KLSAgICBpbnQgc2l6ZSA9IG1fYWxsUmVzb3VyY2VzLnNpemUoKTsKLSAgICAKLSAgICBpZiAo
IW1faW5QcnVuZURlYWRSZXNvdXJjZXMpIHsKLSAgICAgICAgLy8gU2VlIGlmIHdlIGhhdmUgYW55
IHB1cmdlZCByZXNvdXJjZXMgd2UgY2FuIGV2aWN0LgotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIGN1cnJlbnQgPSBt
X2FsbFJlc291cmNlc1tpXS5tX3RhaWw7Ci0gICAgICAgICAgICB3aGlsZSAoY3VycmVudCkgewot
ICAgICAgICAgICAgICAgIENhY2hlZFJlc291cmNlKiBwcmV2ID0gY3VycmVudC0+bV9wcmV2SW5B
bGxSZXNvdXJjZXNMaXN0OwotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LT53YXNQdXJnZWQo
KSkgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWN1cnJlbnQtPmhhc0NsaWVudHMoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCghY3VycmVudC0+aXNQcmVsb2FkZWQoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGV2aWN0KGN1cnJlbnQpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBjdXJyZW50ID0gcHJldjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBpZiAodGFyZ2V0U2l6ZSAmJiBtX2RlYWRTaXplIDw9IHRhcmdldFNpemUpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGJvb2wgY2FuU2hyaW5rTFJVTGlzdHMg
PSB0cnVlOwotICAgIG1faW5QcnVuZURlYWRSZXNvdXJjZXMgPSB0cnVlOwotICAgIGZvciAoaW50
IGkgPSBzaXplIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgLy8gUmVtb3ZlIGZyb20gdGhl
IHRhaWwsIHNpbmNlIHRoaXMgaXMgdGhlIGxlYXN0IGZyZXF1ZW50bHkgYWNjZXNzZWQgb2YgdGhl
IG9iamVjdHMuCi0gICAgICAgIENhY2hlZFJlc291cmNlKiBjdXJyZW50ID0gbV9hbGxSZXNvdXJj
ZXNbaV0ubV90YWlsOwotICAgICAgICAKLSAgICAgICAgLy8gRmlyc3QgZmx1c2ggYWxsIHRoZSBk
ZWNvZGVkIGRhdGEgaW4gdGhpcyBxdWV1ZS4KLSAgICAgICAgd2hpbGUgKGN1cnJlbnQpIHsKLSAg
ICAgICAgICAgIENhY2hlZFJlc291cmNlKiBwcmV2ID0gY3VycmVudC0+bV9wcmV2SW5BbGxSZXNv
dXJjZXNMaXN0OwotICAgICAgICAgICAgaWYgKCFjdXJyZW50LT5oYXNDbGllbnRzKCkgJiYgIWN1
cnJlbnQtPmlzUHJlbG9hZGVkKCkgJiYgY3VycmVudC0+aXNMb2FkZWQoKSkgewotICAgICAgICAg
ICAgICAgIC8vIERlc3Ryb3kgb3VyIGRlY29kZWQgZGF0YS4gVGhpcyB3aWxsIHJlbW92ZSB1cyBm
cm9tIAotICAgICAgICAgICAgICAgIC8vIG1fbGl2ZURlY29kZWRSZXNvdXJjZXMsIGFuZCBwb3Nz
aWJseSBtb3ZlIHVzIHRvIGEgZGlmZmVyZW50IAotICAgICAgICAgICAgICAgIC8vIExSVSBsaXN0
IGluIG1fYWxsUmVzb3VyY2VzLgotICAgICAgICAgICAgICAgIGN1cnJlbnQtPmRlc3Ryb3lEZWNv
ZGVkRGF0YSgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICh0YXJnZXRT
aXplICYmIG1fZGVhZFNpemUgPD0gdGFyZ2V0U2l6ZSkgewotICAgICAgICAgICAgICAgICAgICBt
X2luUHJ1bmVEZWFkUmVzb3VyY2VzID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdXJyZW50
ID0gcHJldjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE5vdyBldmljdCBvYmplY3RzIGZyb20g
dGhpcyBxdWV1ZS4KLSAgICAgICAgY3VycmVudCA9IG1fYWxsUmVzb3VyY2VzW2ldLm1fdGFpbDsK
LSAgICAgICAgd2hpbGUgKGN1cnJlbnQpIHsKLSAgICAgICAgICAgIENhY2hlZFJlc291cmNlKiBw
cmV2ID0gY3VycmVudC0+bV9wcmV2SW5BbGxSZXNvdXJjZXNMaXN0OwotICAgICAgICAgICAgaWYg
KCFjdXJyZW50LT5oYXNDbGllbnRzKCkgJiYgIWN1cnJlbnQtPmlzUHJlbG9hZGVkKCkgJiYgIWN1
cnJlbnQtPmlzQ2FjaGVWYWxpZGF0b3IoKSkgewotICAgICAgICAgICAgICAgIGlmICghbWFrZVJl
c291cmNlUHVyZ2VhYmxlKGN1cnJlbnQpKQotICAgICAgICAgICAgICAgICAgICBldmljdChjdXJy
ZW50KTsKLQotICAgICAgICAgICAgICAgIC8vIElmIGV2aWN0KCkgY2F1c2VkIHBydW5lRGVhZFJl
c291cmNlcygpIHRvIGJlIHJlLWVudGVyZWQsIGJhaWwgb3V0LiBUaGlzIGNhbiBoYXBwZW4gd2hl
biByZW1vdmluZyBhbgotICAgICAgICAgICAgICAgIC8vIFNWRyBDYWNoZWRJbWFnZSB0aGF0IGhh
cyBzdWJyZXNvdXJjZXMuCi0gICAgICAgICAgICAgICAgaWYgKCFtX2luUHJ1bmVEZWFkUmVzb3Vy
Y2VzKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBpZiAo
dGFyZ2V0U2l6ZSAmJiBtX2RlYWRTaXplIDw9IHRhcmdldFNpemUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgbV9pblBydW5lRGVhZFJlc291cmNlcyA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Y3VycmVudCA9IHByZXY7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAvLyBTaHJp
bmsgdGhlIHZlY3RvciBiYWNrIGRvd24gc28gd2UgZG9uJ3Qgd2FzdGUgdGltZSBpbnNwZWN0aW5n
Ci0gICAgICAgIC8vIGVtcHR5IExSVSBsaXN0cyBvbiBmdXR1cmUgcHJ1bmVzLgotICAgICAgICBp
ZiAobV9hbGxSZXNvdXJjZXNbaV0ubV9oZWFkKQotICAgICAgICAgICAgY2FuU2hyaW5rTFJVTGlz
dHMgPSBmYWxzZTsKLSAgICAgICAgZWxzZSBpZiAoY2FuU2hyaW5rTFJVTGlzdHMpCi0gICAgICAg
ICAgICBtX2FsbFJlc291cmNlcy5yZXNpemUoaSk7Ci0gICAgfQotICAgIG1faW5QcnVuZURlYWRS
ZXNvdXJjZXMgPSBmYWxzZTsKLX0KLQotdm9pZCBDYWNoZTo6c2V0Q2FwYWNpdGllcyh1bnNpZ25l
ZCBtaW5EZWFkQnl0ZXMsIHVuc2lnbmVkIG1heERlYWRCeXRlcywgdW5zaWduZWQgdG90YWxCeXRl
cykKLXsKLSAgICBBU1NFUlQobWluRGVhZEJ5dGVzIDw9IG1heERlYWRCeXRlcyk7Ci0gICAgQVNT
RVJUKG1heERlYWRCeXRlcyA8PSB0b3RhbEJ5dGVzKTsKLSAgICBtX21pbkRlYWRDYXBhY2l0eSA9
IG1pbkRlYWRCeXRlczsKLSAgICBtX21heERlYWRDYXBhY2l0eSA9IG1heERlYWRCeXRlczsKLSAg
ICBtX2NhcGFjaXR5ID0gdG90YWxCeXRlczsKLSAgICBwcnVuZSgpOwotfQotCi1ib29sIENhY2hl
OjptYWtlUmVzb3VyY2VQdXJnZWFibGUoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQotewotICAg
IGlmICghQ2FjaGU6OnNob3VsZE1ha2VSZXNvdXJjZVB1cmdlYWJsZU9uRXZpY3Rpb24oKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFyZXNvdXJjZS0+aW5DYWNoZSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAocmVzb3VyY2UtPmlzUHVyZ2VhYmxlKCkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKCFyZXNvdXJjZS0+aXNTYWZlVG9NYWtlUHVy
Z2VhYmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghcmVzb3VyY2UtPm1h
a2VQdXJnZWFibGUodHJ1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGFkanVzdFNp
emUocmVzb3VyY2UtPmhhc0NsaWVudHMoKSwgLXN0YXRpY19jYXN0PGludD4ocmVzb3VyY2UtPnNp
emUoKSkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ2FjaGU6OmV2aWN0KENhY2hl
ZFJlc291cmNlKiByZXNvdXJjZSkKLXsKLSAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiRXZpY3Rp
bmcgcmVzb3VyY2UgJXAgZm9yICclcycgZnJvbSBjYWNoZSIsIHJlc291cmNlLCByZXNvdXJjZS0+
dXJsKCkubGF0aW4xKCkuZGF0YSgpKTsKLSAgICAvLyBUaGUgcmVzb3VyY2UgbWF5IGhhdmUgYWxy
ZWFkeSBiZWVuIHJlbW92ZWQgYnkgc29tZW9uZSBvdGhlciB0aGFuIG91ciBjYWxsZXIsCi0gICAg
Ly8gd2hvIG5lZWRlZCBhIGZyZXNoIGNvcHkgZm9yIGEgcmVsb2FkLiBTZWUgPGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDc5I2M2Pi4KLSAgICBpZiAocmVzb3VyY2Ut
PmluQ2FjaGUoKSkgewotICAgICAgICAvLyBSZW1vdmUgZnJvbSB0aGUgcmVzb3VyY2UgbWFwLgot
ICAgICAgICBtX3Jlc291cmNlcy5yZW1vdmUocmVzb3VyY2UtPnVybCgpKTsKLSAgICAgICAgcmVz
b3VyY2UtPnNldEluQ2FjaGUoZmFsc2UpOwotCi0gICAgICAgIC8vIFJlbW92ZSBmcm9tIHRoZSBh
cHByb3ByaWF0ZSBMUlUgbGlzdC4KLSAgICAgICAgcmVtb3ZlRnJvbUxSVUxpc3QocmVzb3VyY2Up
OwotICAgICAgICByZW1vdmVGcm9tTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KHJlc291cmNlKTsK
LQotICAgICAgICAvLyBJZiB0aGUgcmVzb3VyY2Ugd2FzIHB1cmdlZCwgaXQgbWVhbnMgd2UgaGFk
IGFscmVhZHkgZGVjcmVtZW50ZWQgdGhlIHNpemUgd2hlbiB3ZSBtYWRlIHRoZQotICAgICAgICAv
LyByZXNvdXJjZSBwdXJnZWFibGUgaW4gbWFrZVJlc291cmNlUHVyZ2VhYmxlKCkuIFNvIGFkanVz
dCB0aGUgc2l6ZSBpZiB3ZSBhcmUgZXZpY3RpbmcgYQotICAgICAgICAvLyByZXNvdXJjZSB0aGF0
IHdhcyBub3QgbWFya2VkIGFzIHB1cmdlYWJsZS4KLSAgICAgICAgaWYgKCFDYWNoZTo6c2hvdWxk
TWFrZVJlc291cmNlUHVyZ2VhYmxlT25FdmljdGlvbigpIHx8ICFyZXNvdXJjZS0+aXNQdXJnZWFi
bGUoKSkKLSAgICAgICAgICAgIGFkanVzdFNpemUocmVzb3VyY2UtPmhhc0NsaWVudHMoKSwgLXN0
YXRpY19jYXN0PGludD4ocmVzb3VyY2UtPnNpemUoKSkpOwotICAgIH0gZWxzZQotICAgICAgICBB
U1NFUlQobV9yZXNvdXJjZXMuZ2V0KHJlc291cmNlLT51cmwoKSkgIT0gcmVzb3VyY2UpOwotCi0g
ICAgaWYgKHJlc291cmNlLT5jYW5EZWxldGUoKSkKLSAgICAgICAgZGVsZXRlIHJlc291cmNlOwot
fQotCi12b2lkIENhY2hlOjphZGRDYWNoZWRSZXNvdXJjZUxvYWRlcihDYWNoZWRSZXNvdXJjZUxv
YWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIpCi17Ci0gICAgbV9jYWNoZWRSZXNvdXJjZUxvYWRl
cnMuYWRkKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKLX0KLQotdm9pZCBDYWNoZTo6cmVtb3ZlQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9h
ZGVyKQotewotICAgIG1fY2FjaGVkUmVzb3VyY2VMb2FkZXJzLnJlbW92ZShjYWNoZWRSZXNvdXJj
ZUxvYWRlcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZmFzdExvZzIodW5zaWduZWQg
aSkKLXsKLSAgICB1bnNpZ25lZCBsb2cyID0gMDsKLSAgICBpZiAoaSAmIChpIC0gMSkpCi0gICAg
ICAgIGxvZzIgKz0gMTsKLSAgICBpZiAoaSA+PiAxNikKLSAgICAgICAgbG9nMiArPSAxNiwgaSA+
Pj0gMTY7Ci0gICAgaWYgKGkgPj4gOCkKLSAgICAgICAgbG9nMiArPSA4LCBpID4+PSA4OwotICAg
IGlmIChpID4+IDQpCi0gICAgICAgIGxvZzIgKz0gNCwgaSA+Pj0gNDsKLSAgICBpZiAoaSA+PiAy
KQotICAgICAgICBsb2cyICs9IDIsIGkgPj49IDI7Ci0gICAgaWYgKGkgPj4gMSkKLSAgICAgICAg
bG9nMiArPSAxOwotICAgIHJldHVybiBsb2cyOwotfQotCi1DYWNoZTo6TFJVTGlzdCogQ2FjaGU6
OmxydUxpc3RGb3IoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQotewotICAgIHVuc2lnbmVkIGFj
Y2Vzc0NvdW50ID0gbWF4KHJlc291cmNlLT5hY2Nlc3NDb3VudCgpLCAxVSk7Ci0gICAgdW5zaWdu
ZWQgcXVldWVJbmRleCA9IGZhc3RMb2cyKHJlc291cmNlLT5zaXplKCkgLyBhY2Nlc3NDb3VudCk7
Ci0jaWZuZGVmIE5ERUJVRwotICAgIHJlc291cmNlLT5tX2xydUluZGV4ID0gcXVldWVJbmRleDsK
LSNlbmRpZgotICAgIGlmIChtX2FsbFJlc291cmNlcy5zaXplKCkgPD0gcXVldWVJbmRleCkKLSAg
ICAgICAgbV9hbGxSZXNvdXJjZXMuZ3JvdyhxdWV1ZUluZGV4ICsgMSk7Ci0gICAgcmV0dXJuICZt
X2FsbFJlc291cmNlc1txdWV1ZUluZGV4XTsKLX0KLQotdm9pZCBDYWNoZTo6cmVtb3ZlRnJvbUxS
VUxpc3QoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQotewotICAgIC8vIElmIHdlJ3ZlIG5ldmVy
IGJlZW4gYWNjZXNzZWQsIHRoZW4gd2UncmUgYnJhbmQgbmV3IGFuZCBub3QgaW4gYW55IGxpc3Qu
Ci0gICAgaWYgKHJlc291cmNlLT5hY2Nlc3NDb3VudCgpID09IDApCi0gICAgICAgIHJldHVybjsK
LQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICB1bnNpZ25lZCBvbGRMaXN0SW5kZXggPSByZXNv
dXJjZS0+bV9scnVJbmRleDsKLSNlbmRpZgotCi0gICAgTFJVTGlzdCogbGlzdCA9IGxydUxpc3RG
b3IocmVzb3VyY2UpOwotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIC8vIFZlcmlmeSB0aGF0
IHRoZSBsaXN0IHdlIGdvdCBpcyB0aGUgbGlzdCB3ZSB3YW50LgotICAgIEFTU0VSVChyZXNvdXJj
ZS0+bV9scnVJbmRleCA9PSBvbGRMaXN0SW5kZXgpOwotCi0gICAgLy8gVmVyaWZ5IHRoYXQgd2Ug
YXJlIGluIGZhY3QgaW4gdGhpcyBsaXN0LgotICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICBm
b3IgKENhY2hlZFJlc291cmNlKiBjdXJyZW50ID0gbGlzdC0+bV9oZWFkOyBjdXJyZW50OyBjdXJy
ZW50ID0gY3VycmVudC0+bV9uZXh0SW5BbGxSZXNvdXJjZXNMaXN0KSB7Ci0gICAgICAgIGlmIChj
dXJyZW50ID09IHJlc291cmNlKSB7Ci0gICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBBU1NFUlQoZm91bmQpOwotI2VuZGlm
Ci0KLSAgICBDYWNoZWRSZXNvdXJjZSogbmV4dCA9IHJlc291cmNlLT5tX25leHRJbkFsbFJlc291
cmNlc0xpc3Q7Ci0gICAgQ2FjaGVkUmVzb3VyY2UqIHByZXYgPSByZXNvdXJjZS0+bV9wcmV2SW5B
bGxSZXNvdXJjZXNMaXN0OwotICAgIAotICAgIGlmIChuZXh0ID09IDAgJiYgcHJldiA9PSAwICYm
IGxpc3QtPm1faGVhZCAhPSByZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHJl
c291cmNlLT5tX25leHRJbkFsbFJlc291cmNlc0xpc3QgPSAwOwotICAgIHJlc291cmNlLT5tX3By
ZXZJbkFsbFJlc291cmNlc0xpc3QgPSAwOwotICAgIAotICAgIGlmIChuZXh0KQotICAgICAgICBu
ZXh0LT5tX3ByZXZJbkFsbFJlc291cmNlc0xpc3QgPSBwcmV2OwotICAgIGVsc2UgaWYgKGxpc3Qt
Pm1fdGFpbCA9PSByZXNvdXJjZSkKLSAgICAgICAgbGlzdC0+bV90YWlsID0gcHJldjsKLQotICAg
IGlmIChwcmV2KQotICAgICAgICBwcmV2LT5tX25leHRJbkFsbFJlc291cmNlc0xpc3QgPSBuZXh0
OwotICAgIGVsc2UgaWYgKGxpc3QtPm1faGVhZCA9PSByZXNvdXJjZSkKLSAgICAgICAgbGlzdC0+
bV9oZWFkID0gbmV4dDsKLX0KLQotdm9pZCBDYWNoZTo6aW5zZXJ0SW5MUlVMaXN0KENhY2hlZFJl
c291cmNlKiByZXNvdXJjZSkKLXsKLSAgICAvLyBNYWtlIHN1cmUgd2UgYXJlbid0IGluIHNvbWUg
bGlzdCBhbHJlYWR5LgotICAgIEFTU0VSVCghcmVzb3VyY2UtPm1fbmV4dEluQWxsUmVzb3VyY2Vz
TGlzdCAmJiAhcmVzb3VyY2UtPm1fcHJldkluQWxsUmVzb3VyY2VzTGlzdCk7Ci0gICAgQVNTRVJU
KHJlc291cmNlLT5pbkNhY2hlKCkpOwotICAgIEFTU0VSVChyZXNvdXJjZS0+YWNjZXNzQ291bnQo
KSA+IDApOwotICAgIAotICAgIExSVUxpc3QqIGxpc3QgPSBscnVMaXN0Rm9yKHJlc291cmNlKTsK
LQotICAgIHJlc291cmNlLT5tX25leHRJbkFsbFJlc291cmNlc0xpc3QgPSBsaXN0LT5tX2hlYWQ7
Ci0gICAgaWYgKGxpc3QtPm1faGVhZCkKLSAgICAgICAgbGlzdC0+bV9oZWFkLT5tX3ByZXZJbkFs
bFJlc291cmNlc0xpc3QgPSByZXNvdXJjZTsKLSAgICBsaXN0LT5tX2hlYWQgPSByZXNvdXJjZTsK
LSAgICAKLSAgICBpZiAoIXJlc291cmNlLT5tX25leHRJbkFsbFJlc291cmNlc0xpc3QpCi0gICAg
ICAgIGxpc3QtPm1fdGFpbCA9IHJlc291cmNlOwotICAgICAgICAKLSNpZm5kZWYgTkRFQlVHCi0g
ICAgLy8gVmVyaWZ5IHRoYXQgd2UgYXJlIGluIG5vdyBpbiB0aGUgbGlzdCBsaWtlIHdlIHNob3Vs
ZCBiZS4KLSAgICBsaXN0ID0gbHJ1TGlzdEZvcihyZXNvdXJjZSk7Ci0gICAgYm9vbCBmb3VuZCA9
IGZhbHNlOwotICAgIGZvciAoQ2FjaGVkUmVzb3VyY2UqIGN1cnJlbnQgPSBsaXN0LT5tX2hlYWQ7
IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5tX25leHRJbkFsbFJlc291cmNlc0xpc3QpIHsK
LSAgICAgICAgaWYgKGN1cnJlbnQgPT0gcmVzb3VyY2UpIHsKLSAgICAgICAgICAgIGZvdW5kID0g
dHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIEFTU0VSVChm
b3VuZCk7Ci0jZW5kaWYKLQotfQotCi12b2lkIENhY2hlOjpyZXNvdXJjZUFjY2Vzc2VkKENhY2hl
ZFJlc291cmNlKiByZXNvdXJjZSkKLXsKLSAgICBBU1NFUlQocmVzb3VyY2UtPmluQ2FjaGUoKSk7
Ci0gICAgCi0gICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgdG8gcmVtb3ZlIGJlZm9yZSB3ZSBpbmNy
ZWFzZSB0aGUgYWNjZXNzIGNvdW50LCBzaW5jZQotICAgIC8vIHRoZSBxdWV1ZSB3aWxsIHBvc3Np
Ymx5IGNoYW5nZS4KLSAgICByZW1vdmVGcm9tTFJVTGlzdChyZXNvdXJjZSk7Ci0gICAgCi0gICAg
Ly8gSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB0aGUgcmVzb3VyY2UgaGFzIGJlZW4gYWNjZXNz
ZWQsIGFkanVzdCB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUgdG8gYWNjb3VudCBmb3IgaXRzIGluaXRp
YWwgc2l6ZS4KLSAgICBpZiAoIXJlc291cmNlLT5hY2Nlc3NDb3VudCgpKQotICAgICAgICBhZGp1
c3RTaXplKHJlc291cmNlLT5oYXNDbGllbnRzKCksIHJlc291cmNlLT5zaXplKCkpOwotICAgIAot
ICAgIC8vIEFkZCB0byBvdXIgYWNjZXNzIGNvdW50LgotICAgIHJlc291cmNlLT5pbmNyZWFzZUFj
Y2Vzc0NvdW50KCk7Ci0gICAgCi0gICAgLy8gTm93IGluc2VydCBpbnRvIHRoZSBuZXcgcXVldWUu
Ci0gICAgaW5zZXJ0SW5MUlVMaXN0KHJlc291cmNlKTsKLX0KLQotdm9pZCBDYWNoZTo6cmVtb3Zl
RnJvbUxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCi17
Ci0gICAgLy8gSWYgd2UndmUgbmV2ZXIgYmVlbiBhY2Nlc3NlZCwgdGhlbiB3ZSdyZSBicmFuZCBu
ZXcgYW5kIG5vdCBpbiBhbnkgbGlzdC4KLSAgICBpZiAoIXJlc291cmNlLT5tX2luTGl2ZURlY29k
ZWRSZXNvdXJjZXNMaXN0KQotICAgICAgICByZXR1cm47Ci0gICAgcmVzb3VyY2UtPm1faW5MaXZl
RGVjb2RlZFJlc291cmNlc0xpc3QgPSBmYWxzZTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICAvLyBW
ZXJpZnkgdGhhdCB3ZSBhcmUgaW4gZmFjdCBpbiB0aGlzIGxpc3QuCi0gICAgYm9vbCBmb3VuZCA9
IGZhbHNlOwotICAgIGZvciAoQ2FjaGVkUmVzb3VyY2UqIGN1cnJlbnQgPSBtX2xpdmVEZWNvZGVk
UmVzb3VyY2VzLm1faGVhZDsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm1fbmV4dEluTGl2
ZVJlc291cmNlc0xpc3QpIHsKLSAgICAgICAgaWYgKGN1cnJlbnQgPT0gcmVzb3VyY2UpIHsKLSAg
ICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQotICAgIEFTU0VSVChmb3VuZCk7Ci0jZW5kaWYKLQotICAgIENhY2hlZFJlc291cmNlKiBu
ZXh0ID0gcmVzb3VyY2UtPm1fbmV4dEluTGl2ZVJlc291cmNlc0xpc3Q7Ci0gICAgQ2FjaGVkUmVz
b3VyY2UqIHByZXYgPSByZXNvdXJjZS0+bV9wcmV2SW5MaXZlUmVzb3VyY2VzTGlzdDsKLSAgICAK
LSAgICBpZiAobmV4dCA9PSAwICYmIHByZXYgPT0gMCAmJiBtX2xpdmVEZWNvZGVkUmVzb3VyY2Vz
Lm1faGVhZCAhPSByZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHJlc291cmNl
LT5tX25leHRJbkxpdmVSZXNvdXJjZXNMaXN0ID0gMDsKLSAgICByZXNvdXJjZS0+bV9wcmV2SW5M
aXZlUmVzb3VyY2VzTGlzdCA9IDA7Ci0gICAgCi0gICAgaWYgKG5leHQpCi0gICAgICAgIG5leHQt
Pm1fcHJldkluTGl2ZVJlc291cmNlc0xpc3QgPSBwcmV2OwotICAgIGVsc2UgaWYgKG1fbGl2ZURl
Y29kZWRSZXNvdXJjZXMubV90YWlsID09IHJlc291cmNlKQotICAgICAgICBtX2xpdmVEZWNvZGVk
UmVzb3VyY2VzLm1fdGFpbCA9IHByZXY7Ci0KLSAgICBpZiAocHJldikKLSAgICAgICAgcHJldi0+
bV9uZXh0SW5MaXZlUmVzb3VyY2VzTGlzdCA9IG5leHQ7Ci0gICAgZWxzZSBpZiAobV9saXZlRGVj
b2RlZFJlc291cmNlcy5tX2hlYWQgPT0gcmVzb3VyY2UpCi0gICAgICAgIG1fbGl2ZURlY29kZWRS
ZXNvdXJjZXMubV9oZWFkID0gbmV4dDsKLX0KLQotdm9pZCBDYWNoZTo6aW5zZXJ0SW5MaXZlRGVj
b2RlZFJlc291cmNlc0xpc3QoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQotewotICAgIC8vIE1h
a2Ugc3VyZSB3ZSBhcmVuJ3QgaW4gdGhlIGxpc3QgYWxyZWFkeS4KLSAgICBBU1NFUlQoIXJlc291
cmNlLT5tX25leHRJbkxpdmVSZXNvdXJjZXNMaXN0ICYmICFyZXNvdXJjZS0+bV9wcmV2SW5MaXZl
UmVzb3VyY2VzTGlzdCAmJiAhcmVzb3VyY2UtPm1faW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3Qp
OwotICAgIHJlc291cmNlLT5tX2luTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0ID0gdHJ1ZTsKLQot
ICAgIHJlc291cmNlLT5tX25leHRJbkxpdmVSZXNvdXJjZXNMaXN0ID0gbV9saXZlRGVjb2RlZFJl
c291cmNlcy5tX2hlYWQ7Ci0gICAgaWYgKG1fbGl2ZURlY29kZWRSZXNvdXJjZXMubV9oZWFkKQot
ICAgICAgICBtX2xpdmVEZWNvZGVkUmVzb3VyY2VzLm1faGVhZC0+bV9wcmV2SW5MaXZlUmVzb3Vy
Y2VzTGlzdCA9IHJlc291cmNlOwotICAgIG1fbGl2ZURlY29kZWRSZXNvdXJjZXMubV9oZWFkID0g
cmVzb3VyY2U7Ci0gICAgCi0gICAgaWYgKCFyZXNvdXJjZS0+bV9uZXh0SW5MaXZlUmVzb3VyY2Vz
TGlzdCkKLSAgICAgICAgbV9saXZlRGVjb2RlZFJlc291cmNlcy5tX3RhaWwgPSByZXNvdXJjZTsK
LSAgICAgICAgCi0jaWZuZGVmIE5ERUJVRwotICAgIC8vIFZlcmlmeSB0aGF0IHdlIGFyZSBpbiBu
b3cgaW4gdGhlIGxpc3QgbGlrZSB3ZSBzaG91bGQgYmUuCi0gICAgYm9vbCBmb3VuZCA9IGZhbHNl
OwotICAgIGZvciAoQ2FjaGVkUmVzb3VyY2UqIGN1cnJlbnQgPSBtX2xpdmVEZWNvZGVkUmVzb3Vy
Y2VzLm1faGVhZDsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm1fbmV4dEluTGl2ZVJlc291
cmNlc0xpc3QpIHsKLSAgICAgICAgaWYgKGN1cnJlbnQgPT0gcmVzb3VyY2UpIHsKLSAgICAgICAg
ICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQot
ICAgIEFTU0VSVChmb3VuZCk7Ci0jZW5kaWYKLQotfQotCi12b2lkIENhY2hlOjphZGRUb0xpdmVS
ZXNvdXJjZXNTaXplKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKLXsKLSAgICBtX2xpdmVTaXpl
ICs9IHJlc291cmNlLT5zaXplKCk7Ci0gICAgbV9kZWFkU2l6ZSAtPSByZXNvdXJjZS0+c2l6ZSgp
OwotfQotCi12b2lkIENhY2hlOjpyZW1vdmVGcm9tTGl2ZVJlc291cmNlc1NpemUoQ2FjaGVkUmVz
b3VyY2UqIHJlc291cmNlKQotewotICAgIG1fbGl2ZVNpemUgLT0gcmVzb3VyY2UtPnNpemUoKTsK
LSAgICBtX2RlYWRTaXplICs9IHJlc291cmNlLT5zaXplKCk7Ci19Ci0KLXZvaWQgQ2FjaGU6OmFk
anVzdFNpemUoYm9vbCBsaXZlLCBpbnQgZGVsdGEpCi17Ci0gICAgaWYgKGxpdmUpIHsKLSAgICAg
ICAgQVNTRVJUKGRlbHRhID49IDAgfHwgKChpbnQpbV9saXZlU2l6ZSArIGRlbHRhID49IDApKTsK
LSAgICAgICAgbV9saXZlU2l6ZSArPSBkZWx0YTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NF
UlQoZGVsdGEgPj0gMCB8fCAoKGludCltX2RlYWRTaXplICsgZGVsdGEgPj0gMCkpOwotICAgICAg
ICBtX2RlYWRTaXplICs9IGRlbHRhOwotICAgIH0KLX0KLQotdm9pZCBDYWNoZTo6VHlwZVN0YXRp
c3RpYzo6YWRkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqIG8pCi17Ci0gICAgYm9vbCBwdXJnZWQg
PSBvLT53YXNQdXJnZWQoKTsKLSAgICBib29sIHB1cmdlYWJsZSA9IG8tPmlzUHVyZ2VhYmxlKCkg
JiYgIXB1cmdlZDsgCi0gICAgaW50IHBhZ2VTaXplID0gKG8tPmVuY29kZWRTaXplKCkgKyBvLT5v
dmVyaGVhZFNpemUoKSArIDQwOTUpICYgfjQwOTU7Ci0gICAgY291bnQrKzsKLSAgICBzaXplICs9
IHB1cmdlZCA/IDAgOiBvLT5zaXplKCk7IAotICAgIGxpdmVTaXplICs9IG8tPmhhc0NsaWVudHMo
KSA/IG8tPnNpemUoKSA6IDA7Ci0gICAgZGVjb2RlZFNpemUgKz0gby0+ZGVjb2RlZFNpemUoKTsK
LSAgICBwdXJnZWFibGVTaXplICs9IHB1cmdlYWJsZSA/IHBhZ2VTaXplIDogMDsKLSAgICBwdXJn
ZWRTaXplICs9IHB1cmdlZCA/IHBhZ2VTaXplIDogMDsKLX0KLQotQ2FjaGU6OlN0YXRpc3RpY3Mg
Q2FjaGU6OmdldFN0YXRpc3RpY3MoKQotewotICAgIFN0YXRpc3RpY3Mgc3RhdHM7Ci0gICAgQ2Fj
aGVkUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGUgPSBtX3Jlc291cmNlcy5lbmQoKTsKLSAgICBmb3Ig
KENhY2hlZFJlc291cmNlTWFwOjppdGVyYXRvciBpID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaSAh
PSBlOyArK2kpIHsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gaS0+c2Vjb25k
OwotICAgICAgICBzd2l0Y2ggKHJlc291cmNlLT50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBDYWNo
ZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKLSAgICAgICAgICAgIHN0YXRzLmltYWdlcy5hZGRS
ZXNvdXJjZShyZXNvdXJjZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDYWNo
ZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoKLSAgICAgICAgICAgIHN0YXRzLmNzc1N0eWxlU2hl
ZXRzLmFkZFJlc291cmNlKHJlc291cmNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENhY2hlZFJlc291cmNlOjpTY3JpcHQ6Ci0gICAgICAgICAgICBzdGF0cy5zY3JpcHRzLmFk
ZFJlc291cmNlKHJlc291cmNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShYU0xU
KQotICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0OgotICAgICAgICAg
ICAgc3RhdHMueHNsU3R5bGVTaGVldHMuYWRkUmVzb3VyY2UocmVzb3VyY2UpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0jZW5kaWYKLSAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291
cmNlOgotICAgICAgICAgICAgc3RhdHMuZm9udHMuYWRkUmVzb3VyY2UocmVzb3VyY2UpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gc3RhdHM7Ci19Ci0KLXZvaWQgQ2FjaGU6OnNldERp
c2FibGVkKGJvb2wgZGlzYWJsZWQpCi17Ci0gICAgbV9kaXNhYmxlZCA9IGRpc2FibGVkOwotICAg
IGlmICghbV9kaXNhYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yICg7OykgewotICAg
ICAgICBDYWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaSA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7
Ci0gICAgICAgIGlmIChpID09IG1fcmVzb3VyY2VzLmVuZCgpKQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGV2aWN0KGktPnNlY29uZCk7Ci0gICAgfQotfQotCi0jaWZuZGVmIE5ERUJVRwot
dm9pZCBDYWNoZTo6ZHVtcFN0YXRzKCkKLXsKLSAgICBTdGF0aXN0aWNzIHMgPSBnZXRTdGF0aXN0
aWNzKCk7Ci0gICAgcHJpbnRmKCIlLTEzcyAlLTEzcyAlLTEzcyAlLTEzcyAlLTEzcyAlLTEzcyAl
LTEzc1xuIiwgIiIsICJDb3VudCIsICJTaXplIiwgIkxpdmVTaXplIiwgIkRlY29kZWRTaXplIiwg
IlB1cmdlYWJsZVNpemUiLCAiUHVyZ2VkU2l6ZSIpOwotICAgIHByaW50ZigiJS0xM3MgJS0xM3Mg
JS0xM3MgJS0xM3MgJS0xM3MgJS0xM3MgJS0xM3NcbiIsICItLS0tLS0tLS0tLS0tIiwgIi0tLS0t
LS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0t
LS0iLCAiLS0tLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLS0tIik7Ci0gICAgcHJpbnRmKCIlLTEz
cyAlMTNkICUxM2QgJTEzZCAlMTNkICUxM2QgJTEzZFxuIiwgIkltYWdlcyIsIHMuaW1hZ2VzLmNv
dW50LCBzLmltYWdlcy5zaXplLCBzLmltYWdlcy5saXZlU2l6ZSwgcy5pbWFnZXMuZGVjb2RlZFNp
emUsIHMuaW1hZ2VzLnB1cmdlYWJsZVNpemUsIHMuaW1hZ2VzLnB1cmdlZFNpemUpOwotICAgIHBy
aW50ZigiJS0xM3MgJTEzZCAlMTNkICUxM2QgJTEzZCAlMTNkICUxM2RcbiIsICJDU1MiLCBzLmNz
c1N0eWxlU2hlZXRzLmNvdW50LCBzLmNzc1N0eWxlU2hlZXRzLnNpemUsIHMuY3NzU3R5bGVTaGVl
dHMubGl2ZVNpemUsIHMuY3NzU3R5bGVTaGVldHMuZGVjb2RlZFNpemUsIHMuY3NzU3R5bGVTaGVl
dHMucHVyZ2VhYmxlU2l6ZSwgcy5jc3NTdHlsZVNoZWV0cy5wdXJnZWRTaXplKTsKLSNpZiBFTkFC
TEUoWFNMVCkKLSAgICBwcmludGYoIiUtMTNzICUxM2QgJTEzZCAlMTNkICUxM2QgJTEzZCAlMTNk
XG4iLCAiWFNMIiwgcy54c2xTdHlsZVNoZWV0cy5jb3VudCwgcy54c2xTdHlsZVNoZWV0cy5zaXpl
LCBzLnhzbFN0eWxlU2hlZXRzLmxpdmVTaXplLCBzLnhzbFN0eWxlU2hlZXRzLmRlY29kZWRTaXpl
LCBzLnhzbFN0eWxlU2hlZXRzLnB1cmdlYWJsZVNpemUsIHMueHNsU3R5bGVTaGVldHMucHVyZ2Vk
U2l6ZSk7Ci0jZW5kaWYKLSAgICBwcmludGYoIiUtMTNzICUxM2QgJTEzZCAlMTNkICUxM2QgJTEz
ZCAlMTNkXG4iLCAiSmF2YVNjcmlwdCIsIHMuc2NyaXB0cy5jb3VudCwgcy5zY3JpcHRzLnNpemUs
IHMuc2NyaXB0cy5saXZlU2l6ZSwgcy5zY3JpcHRzLmRlY29kZWRTaXplLCBzLnNjcmlwdHMucHVy
Z2VhYmxlU2l6ZSwgcy5zY3JpcHRzLnB1cmdlZFNpemUpOwotICAgIHByaW50ZigiJS0xM3MgJTEz
ZCAlMTNkICUxM2QgJTEzZCAlMTNkICUxM2RcbiIsICJGb250cyIsIHMuZm9udHMuY291bnQsIHMu
Zm9udHMuc2l6ZSwgcy5mb250cy5saXZlU2l6ZSwgcy5mb250cy5kZWNvZGVkU2l6ZSwgcy5mb250
cy5wdXJnZWFibGVTaXplLCBzLmZvbnRzLnB1cmdlZFNpemUpOwotICAgIHByaW50ZigiJS0xM3Mg
JS0xM3MgJS0xM3MgJS0xM3MgJS0xM3MgJS0xM3MgJS0xM3NcblxuIiwgIi0tLS0tLS0tLS0tLS0i
LCAiLS0tLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tLS0iLCAiLS0t
LS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tLS0iKTsKLX0KLQotdm9p
ZCBDYWNoZTo6ZHVtcExSVUxpc3RzKGJvb2wgaW5jbHVkZUxpdmUpIGNvbnN0Ci17Ci0gICAgcHJp
bnRmKCJMUlUtU1AgbGlzdHMgaW4gZXZpY3Rpb24gb3JkZXIgKEtpbG9ieXRlcyBkZWNvZGVkLCBL
aWxvYnl0ZXMgZW5jb2RlZCwgQWNjZXNzIGNvdW50LCBSZWZlcmVuY2VkLCBpc1B1cmdlYWJsZSwg
d2FzUHVyZ2VkKTpcbiIpOwotCi0gICAgaW50IHNpemUgPSBtX2FsbFJlc291cmNlcy5zaXplKCk7
Ci0gICAgZm9yIChpbnQgaSA9IHNpemUgLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICBwcmlu
dGYoIlxuXG5MaXN0ICVkOiAiLCBpKTsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIGN1cnJlbnQg
PSBtX2FsbFJlc291cmNlc1tpXS5tX3RhaWw7Ci0gICAgICAgIHdoaWxlIChjdXJyZW50KSB7Ci0g
ICAgICAgICAgICBDYWNoZWRSZXNvdXJjZSogcHJldiA9IGN1cnJlbnQtPm1fcHJldkluQWxsUmVz
b3VyY2VzTGlzdDsKLSAgICAgICAgICAgIGlmIChpbmNsdWRlTGl2ZSB8fCAhY3VycmVudC0+aGFz
Q2xpZW50cygpKQotICAgICAgICAgICAgICAgIHByaW50ZigiKCUuMWZLLCAlLjFmSywgJXVBLCAl
ZFIsICVkLCAlZCk7ICIsIGN1cnJlbnQtPmRlY29kZWRTaXplKCkgLyAxMDI0LjBmLCAoY3VycmVu
dC0+ZW5jb2RlZFNpemUoKSArIGN1cnJlbnQtPm92ZXJoZWFkU2l6ZSgpKSAvIDEwMjQuMGYsIGN1
cnJlbnQtPmFjY2Vzc0NvdW50KCksIGN1cnJlbnQtPmhhc0NsaWVudHMoKSwgY3VycmVudC0+aXNQ
dXJnZWFibGUoKSwgY3VycmVudC0+d2FzUHVyZ2VkKCkpOwotCi0gICAgICAgICAgICBjdXJyZW50
ID0gcHJldjsKLSAgICAgICAgfQotICAgIH0KLX0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlLmgJKHJldmlzaW9uIDcxNDk2KQorKysgV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyMzUgKzAsMCBAQAot
LyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5k
ZSkKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+
Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGFsbCBmdW5j
dGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0eWxlIHNoZWV0cyBhbmQgaHRt
bAotICAgIHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVtb3J5IGNhY2hlIGZvciB0aGVz
ZSBvYmplY3RzLgotKi8KLQotI2lmbmRlZiBDYWNoZV9oCi0jZGVmaW5lIENhY2hlX2gKLQotI2lu
Y2x1ZGUgIkNhY2hlUG9saWN5LmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKLSNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgImxvYWRlci5oIgotI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nSGFzaC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSAgewotCi1jbGFzcyBDYWNoZWRDU1NT
dHlsZVNoZWV0OwotY2xhc3MgQ2FjaGVkUmVzb3VyY2U7Ci1jbGFzcyBDYWNoZWRSZXNvdXJjZUxv
YWRlcjsKLWNsYXNzIEtVUkw7Ci0KLS8vIFRoaXMgY2FjaGUgaG9sZHMgc3VicmVzb3VyY2VzIHVz
ZWQgYnkgV2ViIHBhZ2VzOiBpbWFnZXMsIHNjcmlwdHMsIHN0eWxlc2hlZXRzLCBldGMuCi0KLS8v
IFRoZSBjYWNoZSBrZWVwcyBhIGZsZXhpYmxlIGJ1dCBib3VuZGVkIHdpbmRvdyBvZiBkZWFkIHJl
c291cmNlcyB0aGF0IGdyb3dzL3Nocmlua3MgCi0vLyBkZXBlbmRpbmcgb24gdGhlIGxpdmUgcmVz
b3VyY2UgbG9hZC4gSGVyZSdzIGFuIGV4YW1wbGUgb2YgY2FjaGUgZ3Jvd3RoIG92ZXIgdGltZSwK
LS8vIHdpdGggYSBtaW4gZGVhZCByZXNvdXJjZSBjYXBhY2l0eSBvZiAyNSUgYW5kIGEgbWF4IGRl
YWQgcmVzb3VyY2UgY2FwYWNpdHkgb2YgNTAlOgotCi0vLyAgICAgICAgfC0tLS0tfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIERlYWQ6IC0KLS8vICAgICAgICB8LS0tLS0tLS0tLXwgICAg
ICAgICAgICAgICAgICAgICAgICAgTGl2ZTogKwotLy8gICAgICAtLXwtLS0tLS0tLS0tfCAgICAg
ICAgICAgICAgICAgICAgICAgICBDYWNoZSBib3VuZGFyeTogfCAob2JqZWN0cyBvdXRzaWRlIHRo
aXMgbWFyayBoYXZlIGJlZW4gZXZpY3RlZCkKLS8vICAgICAgLS18LS0tLS0tLS0tLSsrKysrKysr
Kyt8Ci0vLyAtLS0tLS0tfC0tLS0tKysrKysrKysrKysrKysrfAotLy8gLS0tLS0tLXwtLS0tLSsr
KysrKysrKysrKysrK3wrKysrKwotCi0vLyBUaGUgYmVoYXZpb3Igb2YgdGhlIGNhY2hlIGNoYW5n
ZXMgaW4gdGhlIGZvbGxvd2luZyB3YXkgaWYgc2hvdWxkTWFrZVJlc291cmNlUHVyZ2VhYmxlT25F
dmljdGlvbgotLy8gcmV0dXJucyB0cnVlLgotLy8KLS8vIDEuIERlYWQgcmVzb3VyY2VzIGluIHRo
ZSBjYWNoZSBhcmUga2VwdCBpbiBub24tcHVyZ2VhYmxlIG1lbW9yeS4KLS8vIDIuIFdoZW4gd2Ug
cHJ1bmUgZGVhZCByZXNvdXJjZXMsIGluc3RlYWQgb2YgZnJlZWluZyB0aGVtLCB3ZSBtYXJrIHRo
ZWlyIG1lbW9yeSBhcyBwdXJnZWFibGUgYW5kCi0vLyAgICBrZWVwIHRoZSByZXNvdXJjZXMgdW50
aWwgdGhlIGtlcm5lbCByZWNsYWltcyB0aGUgcHVyZ2VhYmxlIG1lbW9yeS4KLS8vCi0vLyBCeSBs
ZWF2aW5nIHRoZSBpbi1jYWNoZSBkZWFkIHJlc291cmNlcyBpbiBkaXJ0eSByZXNpZGVudCBtZW1v
cnksIHdlIGRlY3JlYXNlIHRoZSBsaWtlbGlob29kIG9mCi0vLyB0aGUga2VybmVsIGNsYWltaW5n
IHRoYXQgbWVtb3J5IGFuZCBmb3JjaW5nIHVzIHRvIHJlZmV0Y2ggdGhlIHJlc291cmNlIChmb3Ig
ZXhhbXBsZSB3aGVuIGEgdXNlcgotLy8gcHJlc3NlcyBiYWNrKS4KLS8vCi0vLyBBbmQgYnkgaGF2
aW5nIGFuIHVuYm91bmRlZCBudW1iZXIgb2YgcmVzb3VyY2Ugb2JqZWN0cyB1c2luZyBwdXJnZWFi
bGUgbWVtb3J5LCB3ZSBjYW4gdXNlIGFzIG11Y2gKLS8vIG1lbW9yeSBhcyBpcyBhdmFpbGFibGUg
b24gdGhlIG1hY2hpbmUuIFRoZSB0cmFkZS1vZmYgaGVyZSBpcyB0aGF0IHRoZSBDYWNoZWRSZXNv
dXJjZSBvYmplY3QgKGFuZAotLy8gaXRzIG1lbWJlciB2YXJpYWJsZXMpIGFyZSBhbGxvY2F0ZWQg
aW4gbm9uLXB1cmdlYWJsZSBUQy1tYWxsb2MnZCBtZW1vcnkgc28gd2Ugd291bGQgc2VlIHNsaWdo
dGx5Ci0vLyBtb3JlIG1lbW9yeSB1c2UgZHVlIHRvIHRoaXMuCi0KLWNsYXNzIENhY2hlIDogcHVi
bGljIE5vbmNvcHlhYmxlIHsKLXB1YmxpYzoKLSAgICBmcmllbmQgQ2FjaGUqIGNhY2hlKCk7Ci0K
LSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBDYWNoZWRSZXNvdXJjZSo+IENhY2hlZFJlc291
cmNlTWFwOwotCi0gICAgc3RydWN0IExSVUxpc3QgewotICAgICAgICBDYWNoZWRSZXNvdXJjZSog
bV9oZWFkOwotICAgICAgICBDYWNoZWRSZXNvdXJjZSogbV90YWlsOwotICAgICAgICBMUlVMaXN0
KCkgOiBtX2hlYWQoMCksIG1fdGFpbCgwKSB7IH0KLSAgICB9OwotCi0gICAgc3RydWN0IFR5cGVT
dGF0aXN0aWMgewotICAgICAgICBpbnQgY291bnQ7Ci0gICAgICAgIGludCBzaXplOwotICAgICAg
ICBpbnQgbGl2ZVNpemU7Ci0gICAgICAgIGludCBkZWNvZGVkU2l6ZTsKLSAgICAgICAgaW50IHB1
cmdlYWJsZVNpemU7Ci0gICAgICAgIGludCBwdXJnZWRTaXplOwotICAgICAgICBUeXBlU3RhdGlz
dGljKCkgOiBjb3VudCgwKSwgc2l6ZSgwKSwgbGl2ZVNpemUoMCksIGRlY29kZWRTaXplKDApLCBw
dXJnZWFibGVTaXplKDApLCBwdXJnZWRTaXplKDApIHsgfQotICAgICAgICB2b2lkIGFkZFJlc291
cmNlKENhY2hlZFJlc291cmNlKik7Ci0gICAgfTsKLSAgICAKLSAgICBzdHJ1Y3QgU3RhdGlzdGlj
cyB7Ci0gICAgICAgIFR5cGVTdGF0aXN0aWMgaW1hZ2VzOwotICAgICAgICBUeXBlU3RhdGlzdGlj
IGNzc1N0eWxlU2hlZXRzOwotICAgICAgICBUeXBlU3RhdGlzdGljIHNjcmlwdHM7Ci0jaWYgRU5B
QkxFKFhTTFQpCi0gICAgICAgIFR5cGVTdGF0aXN0aWMgeHNsU3R5bGVTaGVldHM7Ci0jZW5kaWYK
LSAgICAgICAgVHlwZVN0YXRpc3RpYyBmb250czsKLSAgICB9OwotCi0gICAgLy8gVGhlIGxvYWRl
ciB0aGF0IGZldGNoZXMgcmVzb3VyY2VzLgotICAgIExvYWRlciogbG9hZGVyKCkgeyByZXR1cm4g
Jm1fbG9hZGVyOyB9Ci0KLSAgICAvLyBSZXF1ZXN0IHJlc291cmNlcyBmcm9tIHRoZSBjYWNoZS4g
IEEgbG9hZCB3aWxsIGJlIGluaXRpYXRlZCBhbmQgYSBjYWNoZSBvYmplY3QgY3JlYXRlZCBpZiB0
aGUgb2JqZWN0IGlzIG5vdAotICAgIC8vIGZvdW5kIGluIHRoZSBjYWNoZS4KLSAgICBDYWNoZWRS
ZXNvdXJjZSogcmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlTG9hZGVyKiwgQ2FjaGVkUmVz
b3VyY2U6OlR5cGUsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBib29s
IGlzUHJlbG9hZCA9IGZhbHNlKTsKLQotICAgIENhY2hlZENTU1N0eWxlU2hlZXQqIHJlcXVlc3RV
c2VyQ1NTU3R5bGVTaGVldChDYWNoZWRSZXNvdXJjZUxvYWRlciosIGNvbnN0IFN0cmluZyYgdXJs
LCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpOwotICAgIAotICAgIHZvaWQgcmV2YWxpZGF0ZVJlc291
cmNlKENhY2hlZFJlc291cmNlKiwgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqKTsKLSAgICB2b2lkIHJl
dmFsaWRhdGlvblN1Y2NlZWRlZChDYWNoZWRSZXNvdXJjZSogcmV2YWxpZGF0aW5nUmVzb3VyY2Us
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKLSAgICB2b2lkIHJldmFsaWRhdGlvbkZhaWxlZChD
YWNoZWRSZXNvdXJjZSogcmV2YWxpZGF0aW5nUmVzb3VyY2UpOwotICAgIAotICAgIC8vIFNldHMg
dGhlIGNhY2hlJ3MgbWVtb3J5IGNhcGFjaXRpZXMsIGluIGJ5dGVzLiBUaGVzZSB3aWxsIGhvbGQg
b25seSBhcHByb3hpbWF0ZWx5LCAKLSAgICAvLyBzaW5jZSB0aGUgZGVjb2RlZCBjb3N0IG9mIHJl
c291cmNlcyBsaWtlIHNjcmlwdHMgYW5kIHN0eWxlc2hlZXRzIGlzIG5vdCBrbm93bi4KLSAgICAv
LyAgLSBtaW5EZWFkQnl0ZXM6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGF0IGRlYWQg
cmVzb3VyY2VzIHNob3VsZCBjb25zdW1lIHdoZW4gdGhlIGNhY2hlIGlzIHVuZGVyIHByZXNzdXJl
LgotICAgIC8vICAtIG1heERlYWRCeXRlczogVGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRo
YXQgZGVhZCByZXNvdXJjZXMgc2hvdWxkIGNvbnN1bWUgd2hlbiB0aGUgY2FjaGUgaXMgbm90IHVu
ZGVyIHByZXNzdXJlLgotICAgIC8vICAtIHRvdGFsQnl0ZXM6IFRoZSBtYXhpbXVtIG51bWJlciBv
ZiBieXRlcyB0aGF0IHRoZSBjYWNoZSBzaG91bGQgY29uc3VtZSBvdmVyYWxsLgotICAgIHZvaWQg
c2V0Q2FwYWNpdGllcyh1bnNpZ25lZCBtaW5EZWFkQnl0ZXMsIHVuc2lnbmVkIG1heERlYWRCeXRl
cywgdW5zaWduZWQgdG90YWxCeXRlcyk7Ci0KLSAgICAvLyBUdXJuIHRoZSBjYWNoZSBvbiBhbmQg
b2ZmLiAgRGlzYWJsaW5nIHRoZSBjYWNoZSB3aWxsIHJlbW92ZSBhbGwgcmVzb3VyY2VzIGZyb20g
dGhlIGNhY2hlLiAgVGhleSBtYXkKLSAgICAvLyBzdGlsbCBsaXZlIG9uIGlmIHRoZXkgYXJlIHJl
ZmVyZW5jZWQgYnkgc29tZSBXZWIgcGFnZSB0aG91Z2guCi0gICAgdm9pZCBzZXREaXNhYmxlZChi
b29sKTsKLSAgICBib29sIGRpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kaXNhYmxlZDsgfQot
ICAgIAotICAgIHZvaWQgc2V0UHJ1bmVFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX3BydW5lRW5h
YmxlZCA9IGVuYWJsZWQ7IH0KLSAgICB2b2lkIHBydW5lKCkKLSAgICB7Ci0gICAgICAgIGlmICht
X2xpdmVTaXplICsgbV9kZWFkU2l6ZSA8PSBtX2NhcGFjaXR5ICYmIG1fbWF4RGVhZENhcGFjaXR5
ICYmIG1fZGVhZFNpemUgPD0gbV9tYXhEZWFkQ2FwYWNpdHkpIC8vIEZhc3QgcGF0aC4KLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICBwcnVuZURlYWRSZXNvdXJjZXMo
KTsgLy8gUHJ1bmUgZGVhZCBmaXJzdCwgaW4gY2FzZSBpdCB3YXMgImJvcnJvd2luZyIgY2FwYWNp
dHkgZnJvbSBsaXZlLgotICAgICAgICBwcnVuZUxpdmVSZXNvdXJjZXMoKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIHNldERlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwoZG91YmxlIGludGVydmFs
KSB7IG1fZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCA9IGludGVydmFsOyB9Ci0gICAg
ZG91YmxlIGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwoKSBjb25zdCB7IHJldHVybiBt
X2RlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWw7IH0KLQotICAgIC8vIFJlbW92ZSBhbiBl
eGlzdGluZyBjYWNoZSBlbnRyeSBmcm9tIGJvdGggdGhlIHJlc291cmNlIG1hcCBhbmQgZnJvbSB0
aGUgTFJVIGxpc3QuCi0gICAgdm9pZCByZW1vdmUoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKSB7
IGV2aWN0KHJlc291cmNlKTsgfQotCi0gICAgdm9pZCBhZGRDYWNoZWRSZXNvdXJjZUxvYWRlcihD
YWNoZWRSZXNvdXJjZUxvYWRlciopOwotICAgIHZvaWQgcmVtb3ZlQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqKTsKLQotICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJj
ZUZvclVSTChjb25zdCBTdHJpbmcmKTsKLQotICAgIC8vIENhbGxzIHRvIHB1dCB0aGUgY2FjaGVk
IHJlc291cmNlIGludG8gYW5kIG91dCBvZiBMUlUgbGlzdHMuCi0gICAgdm9pZCBpbnNlcnRJbkxS
VUxpc3QoQ2FjaGVkUmVzb3VyY2UqKTsKLSAgICB2b2lkIHJlbW92ZUZyb21MUlVMaXN0KENhY2hl
ZFJlc291cmNlKik7Ci0KLSAgICAvLyBDYWxsZWQgdG8gYWRqdXN0IHRoZSBjYWNoZSB0b3RhbHMg
d2hlbiBhIHJlc291cmNlIGNoYW5nZXMgc2l6ZS4KLSAgICB2b2lkIGFkanVzdFNpemUoYm9vbCBs
aXZlLCBpbnQgZGVsdGEpOwotCi0gICAgLy8gVHJhY2sgZGVjb2RlZCByZXNvdXJjZXMgdGhhdCBh
cmUgaW4gdGhlIGNhY2hlIGFuZCByZWZlcmVuY2VkIGJ5IGEgV2ViIHBhZ2UuCi0gICAgdm9pZCBp
bnNlcnRJbkxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdChDYWNoZWRSZXNvdXJjZSopOwotICAgIHZv
aWQgcmVtb3ZlRnJvbUxpdmVEZWNvZGVkUmVzb3VyY2VzTGlzdChDYWNoZWRSZXNvdXJjZSopOwot
Ci0gICAgdm9pZCBhZGRUb0xpdmVSZXNvdXJjZXNTaXplKENhY2hlZFJlc291cmNlKik7Ci0gICAg
dm9pZCByZW1vdmVGcm9tTGl2ZVJlc291cmNlc1NpemUoQ2FjaGVkUmVzb3VyY2UqKTsKLQotICAg
IHN0YXRpYyBib29sIHNob3VsZE1ha2VSZXNvdXJjZVB1cmdlYWJsZU9uRXZpY3Rpb24oKTsKLQot
ICAgIC8vIEZ1bmN0aW9uIHRvIGNvbGxlY3QgY2FjaGUgc3RhdGlzdGljcyBmb3IgdGhlIGNhY2hl
cyB3aW5kb3cgaW4gdGhlIFNhZmFyaSBEZWJ1ZyBtZW51LgotICAgIFN0YXRpc3RpY3MgZ2V0U3Rh
dGlzdGljcygpOwotCi1wcml2YXRlOgotICAgIENhY2hlKCk7Ci0gICAgfkNhY2hlKCk7IC8vIE5v
dCBpbXBsZW1lbnRlZCB0byBtYWtlIHN1cmUgbm9ib2R5IGFjY2lkZW50YWxseSBjYWxscyBkZWxl
dGUgLS0gV2ViQ29yZSBkb2VzIG5vdCBkZWxldGUgc2luZ2xldG9ucy4KLSAgICAgICAKLSAgICBM
UlVMaXN0KiBscnVMaXN0Rm9yKENhY2hlZFJlc291cmNlKik7Ci0gICAgdm9pZCByZXNvdXJjZUFj
Y2Vzc2VkKENhY2hlZFJlc291cmNlKik7Ci0jaWZuZGVmIE5ERUJVRwotICAgIHZvaWQgZHVtcFN0
YXRzKCk7Ci0gICAgdm9pZCBkdW1wTFJVTGlzdHMoYm9vbCBpbmNsdWRlTGl2ZSkgY29uc3Q7Ci0j
ZW5kaWYKLQotICAgIHVuc2lnbmVkIGxpdmVDYXBhY2l0eSgpIGNvbnN0OwotICAgIHVuc2lnbmVk
IGRlYWRDYXBhY2l0eSgpIGNvbnN0OwotICAgIAotICAgIHZvaWQgcHJ1bmVEZWFkUmVzb3VyY2Vz
KCk7IC8vIEZsdXNoIGRlY29kZWQgYW5kIGVuY29kZWQgZGF0YSBmcm9tIHJlc291cmNlcyBub3Qg
cmVmZXJlbmNlZCBieSBXZWIgcGFnZXMuCi0gICAgdm9pZCBwcnVuZUxpdmVSZXNvdXJjZXMoKTsg
Ly8gRmx1c2ggZGVjb2RlZCBkYXRhIGZyb20gcmVzb3VyY2VzIHN0aWxsIHJlZmVyZW5jZWQgYnkg
V2ViIHBhZ2VzLgotCi0gICAgYm9vbCBtYWtlUmVzb3VyY2VQdXJnZWFibGUoQ2FjaGVkUmVzb3Vy
Y2UqKTsKLSAgICB2b2lkIGV2aWN0KENhY2hlZFJlc291cmNlKik7Ci0KLSAgICAvLyBNZW1iZXIg
dmFyaWFibGVzLgotICAgIEhhc2hTZXQ8Q2FjaGVkUmVzb3VyY2VMb2FkZXIqPiBtX2NhY2hlZFJl
c291cmNlTG9hZGVyczsKLSAgICBMb2FkZXIgbV9sb2FkZXI7Ci0KLSAgICBib29sIG1fZGlzYWJs
ZWQ7ICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgY2FjaGUgaXMgZW5hYmxlZC4KLSAgICBib29sIG1f
cHJ1bmVFbmFibGVkOwotICAgIGJvb2wgbV9pblBydW5lRGVhZFJlc291cmNlczsKLQotICAgIHVu
c2lnbmVkIG1fY2FwYWNpdHk7Ci0gICAgdW5zaWduZWQgbV9taW5EZWFkQ2FwYWNpdHk7Ci0gICAg
dW5zaWduZWQgbV9tYXhEZWFkQ2FwYWNpdHk7Ci0gICAgZG91YmxlIG1fZGVhZERlY29kZWREYXRh
RGVsZXRpb25JbnRlcnZhbDsKLQotICAgIHVuc2lnbmVkIG1fbGl2ZVNpemU7IC8vIFRoZSBudW1i
ZXIgb2YgYnl0ZXMgY3VycmVudGx5IGNvbnN1bWVkIGJ5ICJsaXZlIiByZXNvdXJjZXMgaW4gdGhl
IGNhY2hlLgotICAgIHVuc2lnbmVkIG1fZGVhZFNpemU7IC8vIFRoZSBudW1iZXIgb2YgYnl0ZXMg
Y3VycmVudGx5IGNvbnN1bWVkIGJ5ICJkZWFkIiByZXNvdXJjZXMgaW4gdGhlIGNhY2hlLgotCi0g
ICAgLy8gU2l6ZS1hZGp1c3RlZCBhbmQgcG9wdWxhcml0eS1hd2FyZSBMUlUgbGlzdCBjb2xsZWN0
aW9uIGZvciBjYWNoZSBvYmplY3RzLiAgVGhpcyBjb2xsZWN0aW9uIGNhbiBob2xkCi0gICAgLy8g
bW9yZSByZXNvdXJjZXMgdGhhbiB0aGUgY2FjaGVkIHJlc291cmNlIG1hcCwgc2luY2UgaXQgY2Fu
IGFsc28gaG9sZCAic3RhbGUiIG11bHRpcGxlIHZlcnNpb25zIG9mIG9iamVjdHMgdGhhdCBhcmUK
LSAgICAvLyB3YWl0aW5nIHRvIGRpZSB3aGVuIHRoZSBjbGllbnRzIHJlZmVyZW5jaW5nIHRoZW0g
Z28gYXdheS4KLSAgICBWZWN0b3I8TFJVTGlzdCwgMzI+IG1fYWxsUmVzb3VyY2VzOwotICAgIAot
ICAgIC8vIExpc3QganVzdCBmb3IgbGl2ZSByZXNvdXJjZXMgd2l0aCBkZWNvZGVkIGRhdGEuICBB
Y2Nlc3MgdG8gdGhpcyBsaXN0IGlzIGJhc2VkIG9mZiBvZiBwYWludGluZyB0aGUgcmVzb3VyY2Uu
Ci0gICAgTFJVTGlzdCBtX2xpdmVEZWNvZGVkUmVzb3VyY2VzOwotICAgIAotICAgIC8vIEEgVVJM
LWJhc2VkIG1hcCBvZiBhbGwgcmVzb3VyY2VzIHRoYXQgYXJlIGluIHRoZSBjYWNoZSAoaW5jbHVk
aW5nIHRoZSBmcmVzaGVzdCB2ZXJzaW9uIG9mIG9iamVjdHMgdGhhdCBhcmUgY3VycmVudGx5IGJl
aW5nIAotICAgIC8vIHJlZmVyZW5jZWQgYnkgYSBXZWIgcGFnZSkuCi0gICAgSGFzaE1hcDxTdHJp
bmcsIENhY2hlZFJlc291cmNlKj4gbV9yZXNvdXJjZXM7Ci19OwotCi1pbmxpbmUgYm9vbCBDYWNo
ZTo6c2hvdWxkTWFrZVJlc291cmNlUHVyZ2VhYmxlT25FdmljdGlvbigpCi17Ci0jaWYgUExBVEZP
Uk0oSU9TKQotICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5k
aWYKLX0KLQotLy8gRnVuY3Rpb24gdG8gb2J0YWluIHRoZSBnbG9iYWwgY2FjaGUuCi1DYWNoZSog
Y2FjaGUoKTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZENTU1N0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZENTU1N0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiA3MTQ5NikKKysrIFdlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsy
Nyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ1NTU3R5bGVTaGVl
dC5oIgogCi0jaW5jbHVkZSAiQ2FjaGUuaCIKKyNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgogI2lu
Y2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VD
bGllbnRXYWxrZXIuaCIKICNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgpAQCAtNTksNyArNTksNyBA
QCB2b2lkIENhY2hlZENTU1N0eWxlU2hlZXQ6OmRpZEFkZENsaWVudChDCiAKIHZvaWQgQ2FjaGVk
Q1NTU3R5bGVTaGVldDo6YWxsQ2xpZW50c1JlbW92ZWQoKQogewotICAgIGlmICghQ2FjaGU6OnNo
b3VsZE1ha2VSZXNvdXJjZVB1cmdlYWJsZU9uRXZpY3Rpb24oKSAmJiBpc1NhZmVUb01ha2VQdXJn
ZWFibGUoKSkKKyAgICBpZiAoIU1lbW9yeUNhY2hlOjpzaG91bGRNYWtlUmVzb3VyY2VQdXJnZWFi
bGVPbkV2aWN0aW9uKCkgJiYgaXNTYWZlVG9NYWtlUHVyZ2VhYmxlKCkpCiAgICAgICAgIG1ha2VQ
dXJnZWFibGUodHJ1ZSk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZv
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3Bw
CShyZXZpc2lvbiA3MTQ5NikKKysrIFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjZGVmaW5lIFNUT1JFX0ZPTlRfQ1VT
VE9NX1BMQVRGT1JNX0RBVEEKICNlbmRpZgogCi0jaW5jbHVkZSAiQ2FjaGUuaCIKKyNpbmNsdWRl
ICJNZW1vcnlDYWNoZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCiAjaW5j
bHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCIKICNpbmNsdWRlICJGb250UGxhdGZv
cm1EYXRhLmgiCkluZGV4OiBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRGb250LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5oCShyZXZpc2lvbiA3MTQ5
NikKKysrIFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzksNyArMzksNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDYWNoZWRSZXNv
dXJjZUxvYWRlcjsKLWNsYXNzIENhY2hlOworY2xhc3MgTWVtb3J5Q2FjaGU7CiBjbGFzcyBGb250
UGxhdGZvcm1EYXRhOwogY2xhc3MgU1ZHRm9udEVsZW1lbnQ7CiAKQEAgLTgxLDcgKzgxLDcgQEAg
cHJpdmF0ZToKICAgICBSZWZQdHI8U1ZHRG9jdW1lbnQ+IG1fZXh0ZXJuYWxTVkdEb2N1bWVudDsK
ICNlbmRpZgogCi0gICAgZnJpZW5kIGNsYXNzIENhY2hlOworICAgIGZyaWVuZCBjbGFzcyBNZW1v
cnlDYWNoZTsKIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAJ
KHJldmlzaW9uIDcxNDk2KQorKysgV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2Uu
aCIKIAogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQ2FjaGUuaCIKKyNpbmNs
dWRlICJNZW1vcnlDYWNoZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCiAj
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCIKICNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZUxvYWRlci5oIgpAQCAtMzMxLDcgKzMzMSw3IEBAIHZvaWQgQ2FjaGVkSW1hZ2U6OmRl
c3Ryb3lEZWNvZGVkRGF0YSgpCiAgICAgICAgIC8vIEludm9raW5nIGFkZENsaWVudCgpIHdpbGwg
cmVjb25zdHJ1Y3QgdGhlIGltYWdlIG9iamVjdC4KICAgICAgICAgbV9pbWFnZSA9IDA7CiAgICAg
ICAgIHNldERlY29kZWRTaXplKDApOwotICAgICAgICBpZiAoIUNhY2hlOjpzaG91bGRNYWtlUmVz
b3VyY2VQdXJnZWFibGVPbkV2aWN0aW9uKCkpCisgICAgICAgIGlmICghTWVtb3J5Q2FjaGU6OnNo
b3VsZE1ha2VSZXNvdXJjZVB1cmdlYWJsZU9uRXZpY3Rpb24oKSkKICAgICAgICAgICAgIG1ha2VQ
dXJnZWFibGUodHJ1ZSk7CiAgICAgfSBlbHNlIGlmIChtX2ltYWdlICYmICFlcnJvck9jY3VycmVk
KCkpCiAgICAgICAgIG1faW1hZ2UtPmRlc3Ryb3lEZWNvZGVkRGF0YSgpOwpJbmRleDogV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRJbWFnZS5oCShyZXZpc2lvbiA3MTQ5NikKKysrIFdlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZEltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDEwICszMiwxMCBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDYWNoZWRSZXNvdXJjZUxvYWRlcjsKLWNsYXNz
IENhY2hlOworY2xhc3MgTWVtb3J5Q2FjaGU7CiAKIGNsYXNzIENhY2hlZEltYWdlIDogcHVibGlj
IENhY2hlZFJlc291cmNlLCBwdWJsaWMgSW1hZ2VPYnNlcnZlciB7Ci0gICAgZnJpZW5kIGNsYXNz
IENhY2hlOworICAgIGZyaWVuZCBjbGFzcyBNZW1vcnlDYWNoZTsKIAogcHVibGljOgogICAgIENh
Y2hlZEltYWdlKGNvbnN0IFN0cmluZyYgdXJsKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDcxNDk2KQorKysgV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKIAotI2luY2x1
ZGUgIkNhY2hlLmgiCisjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKICNpbmNsdWRlICJDYWNoZWRN
ZXRhZGF0YS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCiAjaW5jbHVkZSAi
Q2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIuaCIKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2UuaAkocmV2aXNpb24gNzE0OTYpCisrKyBXZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ2FjaGU7CitjbGFzcyBNZW1vcnlDYWNoZTsKIGNsYXNz
IENhY2hlZE1ldGFkYXRhOwogY2xhc3MgQ2FjaGVkUmVzb3VyY2VDbGllbnQ7CiBjbGFzcyBDYWNo
ZWRSZXNvdXJjZUhhbmRsZUJhc2U7CkBAIC01MCw3ICs1MCw3IEBAIGNsYXNzIFJlcXVlc3Q7CiAv
LyBmcm9tIENhY2hlZFJlc291cmNlQ2xpZW50LCB0byBnZXQgdGhlIGZ1bmN0aW9uIGNhbGxzIGlu
IGNhc2UgdGhlIHJlcXVlc3RlZCBkYXRhIGhhcyBhcnJpdmVkLgogLy8gVGhpcyBjbGFzcyBhbHNv
IGRvZXMgdGhlIGFjdHVhbCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGxvYWRlciB0byBvYnRhaW4g
dGhlIHJlc291cmNlIGZyb20gdGhlIG5ldHdvcmsuCiBjbGFzcyBDYWNoZWRSZXNvdXJjZSA6IHB1
YmxpYyBOb25jb3B5YWJsZSB7Ci0gICAgZnJpZW5kIGNsYXNzIENhY2hlOworICAgIGZyaWVuZCBj
bGFzcyBNZW1vcnlDYWNoZTsKICAgICBmcmllbmQgY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2U7CiAg
ICAgCiBwdWJsaWM6CkBAIC0yMjUsNyArMjI1LDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAg
ICB2b2lkIGFkZENsaWVudFRvU2V0KENhY2hlZFJlc291cmNlQ2xpZW50Kik7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgLy8gVGhlc2UgYXJlIGNhbGxlZCBi
eSB0aGUgZnJpZW5kbHkgQ2FjaGUgb25seQorICAgIC8vIFRoZXNlIGFyZSBjYWxsZWQgYnkgdGhl
IGZyaWVuZGx5IE1lbW9yeUNhY2hlIG9ubHkKICAgICB2b2lkIHNldFJlc291cmNlVG9SZXZhbGlk
YXRlKENhY2hlZFJlc291cmNlKik7CiAgICAgdm9pZCBzd2l0Y2hDbGllbnRzVG9SZXZhbGlkYXRl
ZFJlc291cmNlKCk7CiAgICAgdm9pZCBjbGVhclJlc291cmNlVG9SZXZhbGlkYXRlKCk7CkluZGV4
OiBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZp
c2lvbiA3MTQ5NikKKysrIFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMjMgKzI3LDIzIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKIAotI2luY2x1ZGUgImxvYWRl
ci5oIgotI2luY2x1ZGUgIkNhY2hlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ1NTU3R5bGVTaGVldC5o
IgogI2luY2x1ZGUgIkNhY2hlZEZvbnQuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2lu
Y2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkNhY2hlZFhTTFN0eWxlU2hlZXQuaCIK
ICNpbmNsdWRlICJDb25zb2xlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJE
T01XaW5kb3cuaCIKLSNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1
ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNs
dWRlICJNZW1vcnlDYWNoZS5oIgogI2luY2x1ZGUgIlBpbmdMb2FkZXIuaCIKICNpbmNsdWRlICJT
ZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAibG9hZGVy
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KIAogI2RlZmluZSBQ
UkVMT0FEX0RFQlVHIDAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
TG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIuaAkocmV2aXNpb24gNzE0OTYpCisrKyBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIGNsYXNz
IEtVUkw7CiAKIC8vIFRoZSBDYWNoZWRSZXNvdXJjZUxvYWRlciBtYW5hZ2VzIHRoZSBsb2FkaW5n
IG9mIHNjcmlwdHMvaW1hZ2VzL3N0eWxlc2hlZXRzIGZvciBhIHNpbmdsZSBkb2N1bWVudC4KIGNs
YXNzIENhY2hlZFJlc291cmNlTG9hZGVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKLWZyaWVuZCBj
bGFzcyBDYWNoZTsKK2ZyaWVuZCBjbGFzcyBNZW1vcnlDYWNoZTsKIGZyaWVuZCBjbGFzcyBJbWFn
ZUxvYWRlcjsKIAogcHVibGljOgpAQCAtMTA5LDcgKzEwOSw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBjaGVja0NhY2hlT2JqZWN0U3RhdHVzKENhY2hlZFJlc291cmNlKik7CiAgICAgYm9vbCBjYW5S
ZXF1ZXN0KENhY2hlZFJlc291cmNlOjpUeXBlLCBjb25zdCBLVVJMJik7CiAgICAgCi0gICAgQ2Fj
aGUqIG1fY2FjaGU7CisgICAgTWVtb3J5Q2FjaGUqIG1fY2FjaGU7CiAgICAgSGFzaFNldDxTdHJp
bmc+IG1fcmVsb2FkZWRVUkxzOwogICAgIG11dGFibGUgRG9jdW1lbnRSZXNvdXJjZU1hcCBtX2Rv
Y3VtZW50UmVzb3VyY2VzOwogICAgIERvY3VtZW50KiBtX2RvYzsKSW5kZXg6IFdlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkU2NyaXB0LmNwcAkocmV2aXNpb24gNzE0OTYpCisrKyBXZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRTY3JpcHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCiAKLSNpbmNs
dWRlICJDYWNoZS5oIgorI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCiAjaW5jbHVkZSAiQ2FjaGVk
UmVzb3VyY2VDbGllbnQuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudFdhbGtlci5o
IgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgpAQCAtMTExLDcgKzExMSw3IEBAIHZvaWQgQ2Fj
aGVkU2NyaXB0OjpkZXN0cm95RGVjb2RlZERhdGEoKQogewogICAgIG1fc2NyaXB0ID0gU3RyaW5n
KCk7CiAgICAgc2V0RGVjb2RlZFNpemUoMCk7Ci0gICAgaWYgKCFDYWNoZTo6c2hvdWxkTWFrZVJl
c291cmNlUHVyZ2VhYmxlT25FdmljdGlvbigpICYmIGlzU2FmZVRvTWFrZVB1cmdlYWJsZSgpKQor
ICAgIGlmICghTWVtb3J5Q2FjaGU6OnNob3VsZE1ha2VSZXNvdXJjZVB1cmdlYWJsZU9uRXZpY3Rp
b24oKSAmJiBpc1NhZmVUb01ha2VQdXJnZWFibGUoKSkKICAgICAgICAgbWFrZVB1cmdlYWJsZSh0
cnVlKTsKIH0KIApJbmRleDogV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcAkocmV2aXNp
b24gNzE0OTYpCShmcm9tIFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlLmNwcDo3MTQ5NikKKysr
IFdlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDc4OCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25v
bGxAbXBpLWhkLm1wZy5kZSkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyICht
dWVsbGVyQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJh
c3RpYW5Aa2RlLm9yZykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJDYWNoZS5oIgorCisjaW5jbHVkZSAiQ2FjaGVkQ1NTU3R5bGVTaGVl
dC5oIgorI2luY2x1ZGUgIkNhY2hlZEZvbnQuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgor
I2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgorI2luY2x1ZGUgIkNhY2hlZFhTTFN0eWxlU2hlZXQu
aCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50
LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVz
LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRl
ICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
c3RhdGljIGNvbnN0IGludCBjRGVmYXVsdENhY2hlQ2FwYWNpdHkgPSA4MTkyICogMTAyNDsKK3N0
YXRpYyBjb25zdCBkb3VibGUgY01pbkRlbGF5QmVmb3JlTGl2ZURlY29kZWRQcnVuZSA9IDE7IC8v
IFNlY29uZHMuCitzdGF0aWMgY29uc3QgZmxvYXQgY1RhcmdldFBydW5lUGVyY2VudGFnZSA9IC45
NWY7IC8vIFBlcmNlbnRhZ2Ugb2YgY2FwYWNpdHkgdG93YXJkIHdoaWNoIHdlIHBydW5lLCB0byBh
dm9pZCBpbW1lZGlhdGVseSBwcnVuaW5nIGFnYWluLgorc3RhdGljIGNvbnN0IGRvdWJsZSBjRGVm
YXVsdERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCA9IDA7CisKK0NhY2hlKiBjYWNoZSgpCit7
CisgICAgc3RhdGljIENhY2hlKiBzdGF0aWNDYWNoZSA9IG5ldyBDYWNoZTsKKyAgICByZXR1cm4g
c3RhdGljQ2FjaGU7Cit9CisKK0NhY2hlOjpDYWNoZSgpCisgICAgOiBtX2Rpc2FibGVkKGZhbHNl
KQorICAgICwgbV9wcnVuZUVuYWJsZWQodHJ1ZSkKKyAgICAsIG1faW5QcnVuZURlYWRSZXNvdXJj
ZXMoZmFsc2UpCisgICAgLCBtX2NhcGFjaXR5KGNEZWZhdWx0Q2FjaGVDYXBhY2l0eSkKKyAgICAs
IG1fbWluRGVhZENhcGFjaXR5KDApCisgICAgLCBtX21heERlYWRDYXBhY2l0eShjRGVmYXVsdENh
Y2hlQ2FwYWNpdHkpCisgICAgLCBtX2RlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwoY0Rl
ZmF1bHREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwpCisgICAgLCBtX2xpdmVTaXplKDApCisg
ICAgLCBtX2RlYWRTaXplKDApCit7Cit9CisKK3N0YXRpYyBDYWNoZWRSZXNvdXJjZSogY3JlYXRl
UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIGNoYXJzZXQpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBDYWNo
ZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRJbWFn
ZSh1cmwuc3RyaW5nKCkpOworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6
CisgICAgICAgIHJldHVybiBuZXcgQ2FjaGVkQ1NTU3R5bGVTaGVldCh1cmwuc3RyaW5nKCksIGNo
YXJzZXQpOworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdDoKKyAgICAgICAgcmV0dXJu
IG5ldyBDYWNoZWRTY3JpcHQodXJsLnN0cmluZygpLCBjaGFyc2V0KTsKKyAgICBjYXNlIENhY2hl
ZFJlc291cmNlOjpGb250UmVzb3VyY2U6CisgICAgICAgIHJldHVybiBuZXcgQ2FjaGVkRm9udCh1
cmwuc3RyaW5nKCkpOworI2lmIEVOQUJMRShYU0xUKQorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6
OlhTTFN0eWxlU2hlZXQ6CisgICAgICAgIHJldHVybiBuZXcgQ2FjaGVkWFNMU3R5bGVTaGVldCh1
cmwuc3RyaW5nKCkpOworI2VuZGlmCisjaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCisgICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6TGlua1ByZWZldGNoOgorICAgICAgICByZXR1cm4gbmV3IENhY2hl
ZFJlc291cmNlKHVybC5zdHJpbmcoKSwgQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVmZXRjaCk7Cisj
ZW5kaWYKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4g
MDsKK30KKworQ2FjaGVkUmVzb3VyY2UqIENhY2hlOjpyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVz
b3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyLCBDYWNoZWRSZXNvdXJjZTo6VHlwZSB0
eXBlLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgYm9vbCByZXF1ZXN0
SXNQcmVsb2FkKQoreworICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYWNoZTo6cmVxdWVzdFJl
c291cmNlICclcycsIGNoYXJzZXQgJyVzJywgcHJlbG9hZD0ldSIsIHVybC5zdHJpbmcoKS5sYXRp
bjEoKS5kYXRhKCksIGNoYXJzZXQubGF0aW4xKCkuZGF0YSgpLCByZXF1ZXN0SXNQcmVsb2FkKTsK
KworICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgbmVlZCB0byBzcGVjaWFsLWNhc2UgYW4gZW1w
dHkgVVJMPworICAgIC8vIFdvdWxkIGl0IGJlIGJldHRlciB0byBqdXN0IGdvIG9uIHdpdGggdGhl
IGNhY2hlIGNvZGUgYW5kIGxldCBpdCBmYWlsIGxhdGVyPworICAgIGlmICh1cmwuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIExvb2sgdXAgdGhlIHJlc291cmNlIGluIG91
ciBtYXAuCisgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gcmVzb3VyY2VGb3JVUkwodXJs
LnN0cmluZygpKTsKKworICAgIGlmIChyZXNvdXJjZSAmJiByZXF1ZXN0SXNQcmVsb2FkICYmICFy
ZXNvdXJjZS0+aXNQcmVsb2FkZWQoKSkgeworICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAi
Q2FjaGU6OnJlcXVlc3RSZXNvdXJjZSBhbHJlYWR5IGhhcyBhIHByZWxvYWQgcmVxdWVzdCBmb3Ig
dGhpcyByZXF1ZXN0LCBhbmQgaXQgaGFzbid0IGJlZW4gcHJlbG9hZGVkIHlldCIpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIWNhY2hlZFJlc291cmNlTG9hZGVyLT5kb2Mo
KS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuRGlzcGxheSh1cmwpKSB7CisgICAgICAgIExPRyhSZXNv
dXJjZUxvYWRpbmcsICIuLi5VUkwgd2FzIG5vdCBhbGxvd2VkIGJ5IFNlY3VyaXR5T3JpZ2luIik7
CisgICAgICAgIGlmICghcmVxdWVzdElzUHJlbG9hZCkKKyAgICAgICAgICAgIEZyYW1lTG9hZGVy
OjpyZXBvcnRMb2NhbExvYWRGYWlsZWQoY2FjaGVkUmVzb3VyY2VMb2FkZXItPmRvYygpLT5mcmFt
ZSgpLCB1cmwuc3RyaW5nKCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAg
aWYgKCFyZXNvdXJjZSkgeworICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVz
b3VyY2UgZm9yICclcycgd2Fzbid0IGZvdW5kIGluIGNhY2hlLiBDcmVhdGluZyBpdCIsIHVybC5z
dHJpbmcoKS5sYXRpbjEoKS5kYXRhKCkpOworICAgICAgICAvLyBUaGUgcmVzb3VyY2UgZG9lcyBu
b3QgZXhpc3QuIENyZWF0ZSBpdC4KKyAgICAgICAgcmVzb3VyY2UgPSBjcmVhdGVSZXNvdXJjZSh0
eXBlLCB1cmwsIGNoYXJzZXQpOworICAgICAgICBBU1NFUlQocmVzb3VyY2UpOworCisgICAgICAg
IC8vIFByZXRlbmQgdGhlIHJlc291cmNlIGlzIGluIHRoZSBjYWNoZSwgdG8gcHJldmVudCBpdCBm
cm9tIGJlaW5nIGRlbGV0ZWQgZHVyaW5nIHRoZSBsb2FkKCkgY2FsbC4KKyAgICAgICAgLy8gRklY
TUU6IENhY2hlZFJlc291cmNlIHNob3VsZCBqdXN0IHVzZSBub3JtYWwgcmVmY291bnRpbmcgaW5z
dGVhZC4KKyAgICAgICAgcmVzb3VyY2UtPnNldEluQ2FjaGUodHJ1ZSk7CisgICAgICAgIAorICAg
ICAgICByZXNvdXJjZS0+bG9hZChjYWNoZWRSZXNvdXJjZUxvYWRlcik7CisgICAgICAgIAorICAg
ICAgICBpZiAocmVzb3VyY2UtPmVycm9yT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgLy8gV2Ug
ZG9uJ3Qgc3VwcG9ydCBpbW1lZGlhdGUgbG9hZHMsIGJ1dCB3ZSBkbyBzdXBwb3J0IGltbWVkaWF0
ZSBmYWlsdXJlLgorICAgICAgICAgICAgLy8gSW4gdGhhdCBjYXNlIHdlIHNob3VsZCB0byBkZWxl
dGUgdGhlIHJlc291cmNlIG5vdyBhbmQgcmV0dXJuIDAgYmVjYXVzZSBvdGhlcndpc2UKKyAgICAg
ICAgICAgIC8vIGl0IHdvdWxkIGxlYWsgaWYgbm8gcmVmL2RlcmVmIHdhcyBldmVyIGRvbmUgb24g
aXQuCisgICAgICAgICAgICByZXNvdXJjZS0+c2V0SW5DYWNoZShmYWxzZSk7CisgICAgICAgICAg
ICBkZWxldGUgcmVzb3VyY2U7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICghZGlzYWJsZWQoKSkKKyAgICAgICAgICAgIG1fcmVzb3VyY2VzLnNldCh1cmwu
c3RyaW5nKCksIHJlc291cmNlKTsgIC8vIFRoZSBzaXplIHdpbGwgYmUgYWRkZWQgaW4gbGF0ZXIg
b25jZSB0aGUgcmVzb3VyY2UgaXMgbG9hZGVkIGFuZCBjYWxscyBiYWNrIHRvIHVzIHdpdGggdGhl
IG5ldyBzaXplLgorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIEtpY2sgdGhlIHJlc291
cmNlIG91dCBvZiB0aGUgY2FjaGUsIGJlY2F1c2UgdGhlIGNhY2hlIGlzIGRpc2FibGVkLgorICAg
ICAgICAgICAgcmVzb3VyY2UtPnNldEluQ2FjaGUoZmFsc2UpOworICAgICAgICAgICAgcmVzb3Vy
Y2UtPnNldENhY2hlZFJlc291cmNlTG9hZGVyKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmIChyZXNvdXJjZS0+dHlwZSgpICE9IHR5cGUpIHsKKyAgICAg
ICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hlOjpyZXF1ZXN0UmVzb3VyY2UgY2Fubm90IHVz
ZSBjYWNoZWQgcmVzb3VyY2UgZm9yICclcycgZHVlIHRvIHR5cGUgbWlzbWF0Y2giLCB1cmwuc3Ry
aW5nKCkubGF0aW4xKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
aWYgKCFkaXNhYmxlZCgpKSB7CisgICAgICAgIC8vIFRoaXMgd2lsbCBtb3ZlIHRoZSByZXNvdXJj
ZSB0byB0aGUgZnJvbnQgb2YgaXRzIExSVSBsaXN0IGFuZCBpbmNyZWFzZSBpdHMgYWNjZXNzIGNv
dW50LgorICAgICAgICByZXNvdXJjZUFjY2Vzc2VkKHJlc291cmNlKTsKKyAgICB9CisKKyAgICBM
T0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGU6OnJlcXVlc3RSZXNvdXJjZSBmb3IgJyVzJyByZXR1
cm5pbmcgcmVzb3VyY2UgJXBcbiIsIHVybC5zdHJpbmcoKS5sYXRpbjEoKS5kYXRhKCksIHJlc291
cmNlKTsKKworICAgIHJldHVybiByZXNvdXJjZTsKK30KKyAgICAKK0NhY2hlZENTU1N0eWxlU2hl
ZXQqIENhY2hlOjpyZXF1ZXN0VXNlckNTU1N0eWxlU2hlZXQoQ2FjaGVkUmVzb3VyY2VMb2FkZXIq
IGNhY2hlZFJlc291cmNlTG9hZGVyLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBj
aGFyc2V0KQoreworICAgIENhY2hlZENTU1N0eWxlU2hlZXQqIHVzZXJTaGVldDsKKyAgICBpZiAo
Q2FjaGVkUmVzb3VyY2UqIGV4aXN0aW5nID0gcmVzb3VyY2VGb3JVUkwodXJsKSkgeworICAgICAg
ICBpZiAoZXhpc3RpbmctPnR5cGUoKSAhPSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldCkK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB1c2VyU2hlZXQgPSBzdGF0aWNfY2FzdDxD
YWNoZWRDU1NTdHlsZVNoZWV0Kj4oZXhpc3RpbmcpOworICAgIH0gZWxzZSB7CisgICAgICAgIHVz
ZXJTaGVldCA9IG5ldyBDYWNoZWRDU1NTdHlsZVNoZWV0KHVybCwgY2hhcnNldCk7CisKKyAgICAg
ICAgLy8gUHJldGVuZCB0aGUgcmVzb3VyY2UgaXMgaW4gdGhlIGNhY2hlLCB0byBwcmV2ZW50IGl0
IGZyb20gYmVpbmcgZGVsZXRlZCBkdXJpbmcgdGhlIGxvYWQoKSBjYWxsLgorICAgICAgICAvLyBG
SVhNRTogQ2FjaGVkUmVzb3VyY2Ugc2hvdWxkIGp1c3QgdXNlIG5vcm1hbCByZWZjb3VudGluZyBp
bnN0ZWFkLgorICAgICAgICB1c2VyU2hlZXQtPnNldEluQ2FjaGUodHJ1ZSk7CisgICAgICAgIC8v
IERvbid0IGxvYWQgaW5jcmVtZW50YWxseSwgc2tpcCBsb2FkIGNoZWNrcywgZG9uJ3Qgc2VuZCBy
ZXNvdXJjZSBsb2FkIGNhbGxiYWNrcy4KKyAgICAgICAgdXNlclNoZWV0LT5sb2FkKGNhY2hlZFJl
c291cmNlTG9hZGVyLCBmYWxzZSwgU2tpcFNlY3VyaXR5Q2hlY2ssIGZhbHNlKTsKKyAgICAgICAg
aWYgKCFkaXNhYmxlZCgpKQorICAgICAgICAgICAgbV9yZXNvdXJjZXMuc2V0KHVybCwgdXNlclNo
ZWV0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdXNlclNoZWV0LT5zZXRJbkNhY2hlKGZh
bHNlKTsKKyAgICB9CisKKyAgICBpZiAoIWRpc2FibGVkKCkpIHsKKyAgICAgICAgLy8gVGhpcyB3
aWxsIG1vdmUgdGhlIHJlc291cmNlIHRvIHRoZSBmcm9udCBvZiBpdHMgTFJVIGxpc3QgYW5kIGlu
Y3JlYXNlIGl0cyBhY2Nlc3MgY291bnQuCisgICAgICAgIHJlc291cmNlQWNjZXNzZWQodXNlclNo
ZWV0KTsKKyAgICB9CisKKyAgICByZXR1cm4gdXNlclNoZWV0OworfQorICAgIAordm9pZCBDYWNo
ZTo6cmV2YWxpZGF0ZVJlc291cmNlKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgQ2FjaGVkUmVz
b3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyKQoreworICAgIEFTU0VSVChyZXNvdXJj
ZSk7CisgICAgQVNTRVJUKHJlc291cmNlLT5pbkNhY2hlKCkpOworICAgIEFTU0VSVChyZXNvdXJj
ZSA9PSBtX3Jlc291cmNlcy5nZXQocmVzb3VyY2UtPnVybCgpKSk7CisgICAgQVNTRVJUKCFkaXNh
YmxlZCgpKTsKKyAgICBpZiAocmVzb3VyY2UtPnJlc291cmNlVG9SZXZhbGlkYXRlKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBpZiAoIXJlc291cmNlLT5jYW5Vc2VDYWNoZVZhbGlkYXRvcigpKSB7
CisgICAgICAgIGV2aWN0KHJlc291cmNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
b25zdCBTdHJpbmcmIHVybCA9IHJlc291cmNlLT51cmwoKTsKKyAgICBDYWNoZWRSZXNvdXJjZSog
bmV3UmVzb3VyY2UgPSBjcmVhdGVSZXNvdXJjZShyZXNvdXJjZS0+dHlwZSgpLCBLVVJMKFBhcnNl
ZFVSTFN0cmluZywgdXJsKSwgcmVzb3VyY2UtPmVuY29kaW5nKCkpOworICAgIExPRyhSZXNvdXJj
ZUxvYWRpbmcsICJSZXNvdXJjZSAlcCBjcmVhdGVkIHRvIHJldmFsaWRhdGUgJXAiLCBuZXdSZXNv
dXJjZSwgcmVzb3VyY2UpOworICAgIG5ld1Jlc291cmNlLT5zZXRSZXNvdXJjZVRvUmV2YWxpZGF0
ZShyZXNvdXJjZSk7CisgICAgZXZpY3QocmVzb3VyY2UpOworICAgIG1fcmVzb3VyY2VzLnNldCh1
cmwsIG5ld1Jlc291cmNlKTsKKyAgICBuZXdSZXNvdXJjZS0+c2V0SW5DYWNoZSh0cnVlKTsKKyAg
ICByZXNvdXJjZUFjY2Vzc2VkKG5ld1Jlc291cmNlKTsKKyAgICBuZXdSZXNvdXJjZS0+bG9hZChj
YWNoZWRSZXNvdXJjZUxvYWRlcik7Cit9CisgICAgCit2b2lkIENhY2hlOjpyZXZhbGlkYXRpb25T
dWNjZWVkZWQoQ2FjaGVkUmVzb3VyY2UqIHJldmFsaWRhdGluZ1Jlc291cmNlLCBjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2Ug
PSByZXZhbGlkYXRpbmdSZXNvdXJjZS0+cmVzb3VyY2VUb1JldmFsaWRhdGUoKTsKKyAgICBBU1NF
UlQocmVzb3VyY2UpOworICAgIEFTU0VSVCghcmVzb3VyY2UtPmluQ2FjaGUoKSk7CisgICAgQVNT
RVJUKHJlc291cmNlLT5pc0xvYWRlZCgpKTsKKyAgICBBU1NFUlQocmV2YWxpZGF0aW5nUmVzb3Vy
Y2UtPmluQ2FjaGUoKSk7CisgICAgCisgICAgZXZpY3QocmV2YWxpZGF0aW5nUmVzb3VyY2UpOwor
CisgICAgQVNTRVJUKCFtX3Jlc291cmNlcy5nZXQocmVzb3VyY2UtPnVybCgpKSk7CisgICAgbV9y
ZXNvdXJjZXMuc2V0KHJlc291cmNlLT51cmwoKSwgcmVzb3VyY2UpOworICAgIHJlc291cmNlLT5z
ZXRJbkNhY2hlKHRydWUpOworICAgIHJlc291cmNlLT51cGRhdGVSZXNwb25zZUFmdGVyUmV2YWxp
ZGF0aW9uKHJlc3BvbnNlKTsKKyAgICBpbnNlcnRJbkxSVUxpc3QocmVzb3VyY2UpOworICAgIGlu
dCBkZWx0YSA9IHJlc291cmNlLT5zaXplKCk7CisgICAgaWYgKHJlc291cmNlLT5kZWNvZGVkU2l6
ZSgpICYmIHJlc291cmNlLT5oYXNDbGllbnRzKCkpCisgICAgICAgIGluc2VydEluTGl2ZURlY29k
ZWRSZXNvdXJjZXNMaXN0KHJlc291cmNlKTsKKyAgICBpZiAoZGVsdGEpCisgICAgICAgIGFkanVz
dFNpemUocmVzb3VyY2UtPmhhc0NsaWVudHMoKSwgZGVsdGEpOworICAgIAorICAgIHJldmFsaWRh
dGluZ1Jlc291cmNlLT5zd2l0Y2hDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291cmNlKCk7CisgICAg
Ly8gdGhpcyBkZWxldGVzIHRoZSByZXZhbGlkYXRpbmcgcmVzb3VyY2UKKyAgICByZXZhbGlkYXRp
bmdSZXNvdXJjZS0+Y2xlYXJSZXNvdXJjZVRvUmV2YWxpZGF0ZSgpOworfQorCit2b2lkIENhY2hl
OjpyZXZhbGlkYXRpb25GYWlsZWQoQ2FjaGVkUmVzb3VyY2UqIHJldmFsaWRhdGluZ1Jlc291cmNl
KQoreworICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJSZXZhbGlkYXRpb24gZmFpbGVkIGZvciAl
cCIsIHJldmFsaWRhdGluZ1Jlc291cmNlKTsKKyAgICBBU1NFUlQocmV2YWxpZGF0aW5nUmVzb3Vy
Y2UtPnJlc291cmNlVG9SZXZhbGlkYXRlKCkpOworICAgIHJldmFsaWRhdGluZ1Jlc291cmNlLT5j
bGVhclJlc291cmNlVG9SZXZhbGlkYXRlKCk7Cit9CisKK0NhY2hlZFJlc291cmNlKiBDYWNoZTo6
cmVzb3VyY2VGb3JVUkwoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgQ2FjaGVkUmVzb3VyY2Uq
IHJlc291cmNlID0gbV9yZXNvdXJjZXMuZ2V0KHVybCk7CisgICAgYm9vbCB3YXNQdXJnZWFibGUg
PSBDYWNoZTo6c2hvdWxkTWFrZVJlc291cmNlUHVyZ2VhYmxlT25FdmljdGlvbigpICYmIHJlc291
cmNlICYmIHJlc291cmNlLT5pc1B1cmdlYWJsZSgpOworICAgIGlmIChyZXNvdXJjZSAmJiAhcmVz
b3VyY2UtPm1ha2VQdXJnZWFibGUoZmFsc2UpKSB7CisgICAgICAgIEFTU0VSVCghcmVzb3VyY2Ut
Pmhhc0NsaWVudHMoKSk7CisgICAgICAgIGV2aWN0KHJlc291cmNlKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorICAgIC8vIEFkZCB0aGUgc2l6ZSBiYWNrIHNpbmNlIHdlIGhhZCBzdWJ0cmFj
dGVkIGl0IHdoZW4gd2UgbWFya2VkIHRoZSBtZW1vcnkgYXMgcHVyZ2VhYmxlLgorICAgIGlmICh3
YXNQdXJnZWFibGUpCisgICAgICAgIGFkanVzdFNpemUocmVzb3VyY2UtPmhhc0NsaWVudHMoKSwg
cmVzb3VyY2UtPnNpemUoKSk7CisgICAgcmV0dXJuIHJlc291cmNlOworfQorCit1bnNpZ25lZCBD
YWNoZTo6ZGVhZENhcGFjaXR5KCkgY29uc3QgCit7CisgICAgLy8gRGVhZCByZXNvdXJjZSBjYXBh
Y2l0eSBpcyB3aGF0ZXZlciBzcGFjZSBpcyBub3Qgb2NjdXBpZWQgYnkgbGl2ZSByZXNvdXJjZXMs
IGJvdW5kZWQgYnkgYW4gaW5kZXBlbmRlbnQgbWluaW11bSBhbmQgbWF4aW11bS4KKyAgICB1bnNp
Z25lZCBjYXBhY2l0eSA9IG1fY2FwYWNpdHkgLSBtaW4obV9saXZlU2l6ZSwgbV9jYXBhY2l0eSk7
IC8vIFN0YXJ0IHdpdGggYXZhaWxhYmxlIGNhcGFjaXR5LgorICAgIGNhcGFjaXR5ID0gbWF4KGNh
cGFjaXR5LCBtX21pbkRlYWRDYXBhY2l0eSk7IC8vIE1ha2Ugc3VyZSBpdCdzIGFib3ZlIHRoZSBt
aW5pbXVtLgorICAgIGNhcGFjaXR5ID0gbWluKGNhcGFjaXR5LCBtX21heERlYWRDYXBhY2l0eSk7
IC8vIE1ha2Ugc3VyZSBpdCdzIGJlbG93IHRoZSBtYXhpbXVtLgorICAgIHJldHVybiBjYXBhY2l0
eTsKK30KKwordW5zaWduZWQgQ2FjaGU6OmxpdmVDYXBhY2l0eSgpIGNvbnN0IAoreyAKKyAgICAv
LyBMaXZlIHJlc291cmNlIGNhcGFjaXR5IGlzIHdoYXRldmVyIGlzIGxlZnQgb3ZlciBhZnRlciBj
YWxjdWxhdGluZyBkZWFkIHJlc291cmNlIGNhcGFjaXR5LgorICAgIHJldHVybiBtX2NhcGFjaXR5
IC0gZGVhZENhcGFjaXR5KCk7Cit9CisKK3ZvaWQgQ2FjaGU6OnBydW5lTGl2ZVJlc291cmNlcygp
Cit7CisgICAgaWYgKCFtX3BydW5lRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5z
aWduZWQgY2FwYWNpdHkgPSBsaXZlQ2FwYWNpdHkoKTsKKyAgICBpZiAoY2FwYWNpdHkgJiYgbV9s
aXZlU2l6ZSA8PSBjYXBhY2l0eSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgdGFy
Z2V0U2l6ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjYXBhY2l0eSAqIGNUYXJnZXRQcnVuZVBl
cmNlbnRhZ2UpOyAvLyBDdXQgYnkgYSBwZXJjZW50YWdlIHRvIGF2b2lkIGltbWVkaWF0ZWx5IHBy
dW5pbmcgYWdhaW4uCisgICAgZG91YmxlIGN1cnJlbnRUaW1lID0gRnJhbWVWaWV3OjpjdXJyZW50
UGFpbnRUaW1lU3RhbXAoKTsKKyAgICBpZiAoIWN1cnJlbnRUaW1lKSAvLyBJbiBjYXNlIHBydW5l
IGlzIGNhbGxlZCBkaXJlY3RseSwgb3V0c2lkZSBvZiBhIEZyYW1lIHBhaW50LgorICAgICAgICBj
dXJyZW50VGltZSA9IFdURjo6Y3VycmVudFRpbWUoKTsKKyAgICAKKyAgICAvLyBEZXN0cm95IGFu
eSBkZWNvZGVkIGRhdGEgaW4gbGl2ZSBvYmplY3RzIHRoYXQgd2UgY2FuLgorICAgIC8vIFN0YXJ0
IGZyb20gdGhlIHRhaWwsIHNpbmNlIHRoaXMgaXMgdGhlIGxlYXN0IHJlY2VudGx5IGFjY2Vzc2Vk
IG9mIHRoZSBvYmplY3RzLgorCisgICAgLy8gVGhlIGxpc3QgbWlnaHQgbm90IGJlIHNvcnRlZCBi
eSB0aGUgbV9sYXN0RGVjb2RlZEFjY2Vzc1RpbWUuIFRoZSBpbXBhY3QKKyAgICAvLyBvZiB0aGlz
IHdlYWtlciBpbnZhcmlhbnQgaXMgbWlub3IgYXMgdGhlIGJlbG93IGlmIHN0YXRlbWVudCB0byBj
aGVjayB0aGUKKyAgICAvLyBlbGFwc2VkVGltZSB3aWxsIGV2YWx1YXRlIHRvIGZhbHNlIGFzIHRo
ZSBjdXJyZW50VGltZSB3aWxsIGJlIGEgbG90CisgICAgLy8gZ3JlYXRlciB0aGFuIHRoZSBjdXJy
ZW50LT5tX2xhc3REZWNvZGVkQWNjZXNzVGltZS4KKyAgICAvLyBGb3IgbW9yZSBkZXRhaWxzIHNl
ZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMjA5CisgICAgQ2Fj
aGVkUmVzb3VyY2UqIGN1cnJlbnQgPSBtX2xpdmVEZWNvZGVkUmVzb3VyY2VzLm1fdGFpbDsKKyAg
ICB3aGlsZSAoY3VycmVudCkgeworICAgICAgICBDYWNoZWRSZXNvdXJjZSogcHJldiA9IGN1cnJl
bnQtPm1fcHJldkluTGl2ZVJlc291cmNlc0xpc3Q7CisgICAgICAgIEFTU0VSVChjdXJyZW50LT5o
YXNDbGllbnRzKCkpOworICAgICAgICBpZiAoY3VycmVudC0+aXNMb2FkZWQoKSAmJiBjdXJyZW50
LT5kZWNvZGVkU2l6ZSgpKSB7CisgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHJl
bWFpbmluZyByZXNvdXJjZXMgYXJlIHRvbyBuZXcgdG8gcHJ1bmUuCisgICAgICAgICAgICBkb3Vi
bGUgZWxhcHNlZFRpbWUgPSBjdXJyZW50VGltZSAtIGN1cnJlbnQtPm1fbGFzdERlY29kZWRBY2Nl
c3NUaW1lOworICAgICAgICAgICAgaWYgKGVsYXBzZWRUaW1lIDwgY01pbkRlbGF5QmVmb3JlTGl2
ZURlY29kZWRQcnVuZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8v
IERlc3Ryb3kgb3VyIGRlY29kZWQgZGF0YS4gVGhpcyB3aWxsIHJlbW92ZSB1cyBmcm9tIAorICAg
ICAgICAgICAgLy8gbV9saXZlRGVjb2RlZFJlc291cmNlcywgYW5kIHBvc3NpYmx5IG1vdmUgdXMg
dG8gYSBkaWZmZXJlbnQgTFJVIAorICAgICAgICAgICAgLy8gbGlzdCBpbiBtX2FsbFJlc291cmNl
cy4KKyAgICAgICAgICAgIGN1cnJlbnQtPmRlc3Ryb3lEZWNvZGVkRGF0YSgpOworCisgICAgICAg
ICAgICBpZiAodGFyZ2V0U2l6ZSAmJiBtX2xpdmVTaXplIDw9IHRhcmdldFNpemUpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGN1cnJlbnQgPSBwcmV2OworICAg
IH0KK30KKwordm9pZCBDYWNoZTo6cHJ1bmVEZWFkUmVzb3VyY2VzKCkKK3sKKyAgICBpZiAoIW1f
cHJ1bmVFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBjYXBhY2l0eSA9
IGRlYWRDYXBhY2l0eSgpOworICAgIGlmIChjYXBhY2l0eSAmJiBtX2RlYWRTaXplIDw9IGNhcGFj
aXR5KQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCB0YXJnZXRTaXplID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGNhcGFjaXR5ICogY1RhcmdldFBydW5lUGVyY2VudGFnZSk7IC8vIEN1
dCBieSBhIHBlcmNlbnRhZ2UgdG8gYXZvaWQgaW1tZWRpYXRlbHkgcHJ1bmluZyBhZ2Fpbi4KKyAg
ICBpbnQgc2l6ZSA9IG1fYWxsUmVzb3VyY2VzLnNpemUoKTsKKyAgICAKKyAgICBpZiAoIW1faW5Q
cnVuZURlYWRSZXNvdXJjZXMpIHsKKyAgICAgICAgLy8gU2VlIGlmIHdlIGhhdmUgYW55IHB1cmdl
ZCByZXNvdXJjZXMgd2UgY2FuIGV2aWN0LgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNp
emU7IGkrKykgeworICAgICAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIGN1cnJlbnQgPSBtX2FsbFJl
c291cmNlc1tpXS5tX3RhaWw7CisgICAgICAgICAgICB3aGlsZSAoY3VycmVudCkgeworICAgICAg
ICAgICAgICAgIENhY2hlZFJlc291cmNlKiBwcmV2ID0gY3VycmVudC0+bV9wcmV2SW5BbGxSZXNv
dXJjZXNMaXN0OworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LT53YXNQdXJnZWQoKSkgewor
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWN1cnJlbnQtPmhhc0NsaWVudHMoKSk7CisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVCghY3VycmVudC0+aXNQcmVsb2FkZWQoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGV2aWN0KGN1cnJlbnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBjdXJyZW50ID0gcHJldjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBpZiAodGFyZ2V0U2l6ZSAmJiBtX2RlYWRTaXplIDw9IHRhcmdldFNpemUpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIGJvb2wgY2FuU2hyaW5rTFJVTGlzdHMgPSB0cnVl
OworICAgIG1faW5QcnVuZURlYWRSZXNvdXJjZXMgPSB0cnVlOworICAgIGZvciAoaW50IGkgPSBz
aXplIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgLy8gUmVtb3ZlIGZyb20gdGhlIHRhaWws
IHNpbmNlIHRoaXMgaXMgdGhlIGxlYXN0IGZyZXF1ZW50bHkgYWNjZXNzZWQgb2YgdGhlIG9iamVj
dHMuCisgICAgICAgIENhY2hlZFJlc291cmNlKiBjdXJyZW50ID0gbV9hbGxSZXNvdXJjZXNbaV0u
bV90YWlsOworICAgICAgICAKKyAgICAgICAgLy8gRmlyc3QgZmx1c2ggYWxsIHRoZSBkZWNvZGVk
IGRhdGEgaW4gdGhpcyBxdWV1ZS4KKyAgICAgICAgd2hpbGUgKGN1cnJlbnQpIHsKKyAgICAgICAg
ICAgIENhY2hlZFJlc291cmNlKiBwcmV2ID0gY3VycmVudC0+bV9wcmV2SW5BbGxSZXNvdXJjZXNM
aXN0OworICAgICAgICAgICAgaWYgKCFjdXJyZW50LT5oYXNDbGllbnRzKCkgJiYgIWN1cnJlbnQt
PmlzUHJlbG9hZGVkKCkgJiYgY3VycmVudC0+aXNMb2FkZWQoKSkgeworICAgICAgICAgICAgICAg
IC8vIERlc3Ryb3kgb3VyIGRlY29kZWQgZGF0YS4gVGhpcyB3aWxsIHJlbW92ZSB1cyBmcm9tIAor
ICAgICAgICAgICAgICAgIC8vIG1fbGl2ZURlY29kZWRSZXNvdXJjZXMsIGFuZCBwb3NzaWJseSBt
b3ZlIHVzIHRvIGEgZGlmZmVyZW50IAorICAgICAgICAgICAgICAgIC8vIExSVSBsaXN0IGluIG1f
YWxsUmVzb3VyY2VzLgorICAgICAgICAgICAgICAgIGN1cnJlbnQtPmRlc3Ryb3lEZWNvZGVkRGF0
YSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICh0YXJnZXRTaXplICYm
IG1fZGVhZFNpemUgPD0gdGFyZ2V0U2l6ZSkgeworICAgICAgICAgICAgICAgICAgICBtX2luUHJ1
bmVEZWFkUmVzb3VyY2VzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdXJyZW50ID0gcHJl
djsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vdyBldmljdCBvYmplY3RzIGZyb20gdGhpcyBx
dWV1ZS4KKyAgICAgICAgY3VycmVudCA9IG1fYWxsUmVzb3VyY2VzW2ldLm1fdGFpbDsKKyAgICAg
ICAgd2hpbGUgKGN1cnJlbnQpIHsKKyAgICAgICAgICAgIENhY2hlZFJlc291cmNlKiBwcmV2ID0g
Y3VycmVudC0+bV9wcmV2SW5BbGxSZXNvdXJjZXNMaXN0OworICAgICAgICAgICAgaWYgKCFjdXJy
ZW50LT5oYXNDbGllbnRzKCkgJiYgIWN1cnJlbnQtPmlzUHJlbG9hZGVkKCkgJiYgIWN1cnJlbnQt
PmlzQ2FjaGVWYWxpZGF0b3IoKSkgeworICAgICAgICAgICAgICAgIGlmICghbWFrZVJlc291cmNl
UHVyZ2VhYmxlKGN1cnJlbnQpKQorICAgICAgICAgICAgICAgICAgICBldmljdChjdXJyZW50KTsK
KworICAgICAgICAgICAgICAgIC8vIElmIGV2aWN0KCkgY2F1c2VkIHBydW5lRGVhZFJlc291cmNl
cygpIHRvIGJlIHJlLWVudGVyZWQsIGJhaWwgb3V0LiBUaGlzIGNhbiBoYXBwZW4gd2hlbiByZW1v
dmluZyBhbgorICAgICAgICAgICAgICAgIC8vIFNWRyBDYWNoZWRJbWFnZSB0aGF0IGhhcyBzdWJy
ZXNvdXJjZXMuCisgICAgICAgICAgICAgICAgaWYgKCFtX2luUHJ1bmVEZWFkUmVzb3VyY2VzKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0
U2l6ZSAmJiBtX2RlYWRTaXplIDw9IHRhcmdldFNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAg
bV9pblBydW5lRGVhZFJlc291cmNlcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY3VycmVu
dCA9IHByZXY7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAvLyBTaHJpbmsgdGhl
IHZlY3RvciBiYWNrIGRvd24gc28gd2UgZG9uJ3Qgd2FzdGUgdGltZSBpbnNwZWN0aW5nCisgICAg
ICAgIC8vIGVtcHR5IExSVSBsaXN0cyBvbiBmdXR1cmUgcHJ1bmVzLgorICAgICAgICBpZiAobV9h
bGxSZXNvdXJjZXNbaV0ubV9oZWFkKQorICAgICAgICAgICAgY2FuU2hyaW5rTFJVTGlzdHMgPSBm
YWxzZTsKKyAgICAgICAgZWxzZSBpZiAoY2FuU2hyaW5rTFJVTGlzdHMpCisgICAgICAgICAgICBt
X2FsbFJlc291cmNlcy5yZXNpemUoaSk7CisgICAgfQorICAgIG1faW5QcnVuZURlYWRSZXNvdXJj
ZXMgPSBmYWxzZTsKK30KKwordm9pZCBDYWNoZTo6c2V0Q2FwYWNpdGllcyh1bnNpZ25lZCBtaW5E
ZWFkQnl0ZXMsIHVuc2lnbmVkIG1heERlYWRCeXRlcywgdW5zaWduZWQgdG90YWxCeXRlcykKK3sK
KyAgICBBU1NFUlQobWluRGVhZEJ5dGVzIDw9IG1heERlYWRCeXRlcyk7CisgICAgQVNTRVJUKG1h
eERlYWRCeXRlcyA8PSB0b3RhbEJ5dGVzKTsKKyAgICBtX21pbkRlYWRDYXBhY2l0eSA9IG1pbkRl
YWRCeXRlczsKKyAgICBtX21heERlYWRDYXBhY2l0eSA9IG1heERlYWRCeXRlczsKKyAgICBtX2Nh
cGFjaXR5ID0gdG90YWxCeXRlczsKKyAgICBwcnVuZSgpOworfQorCitib29sIENhY2hlOjptYWtl
UmVzb3VyY2VQdXJnZWFibGUoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQoreworICAgIGlmICgh
Q2FjaGU6OnNob3VsZE1ha2VSZXNvdXJjZVB1cmdlYWJsZU9uRXZpY3Rpb24oKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFyZXNvdXJjZS0+aW5DYWNoZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAocmVzb3VyY2UtPmlzUHVyZ2VhYmxlKCkpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgaWYgKCFyZXNvdXJjZS0+aXNTYWZlVG9NYWtlUHVyZ2VhYmxl
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghcmVzb3VyY2UtPm1ha2VQdXJn
ZWFibGUodHJ1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGFkanVzdFNpemUocmVz
b3VyY2UtPmhhc0NsaWVudHMoKSwgLXN0YXRpY19jYXN0PGludD4ocmVzb3VyY2UtPnNpemUoKSkp
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ2FjaGU6OmV2aWN0KENhY2hlZFJlc291
cmNlKiByZXNvdXJjZSkKK3sKKyAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiRXZpY3RpbmcgcmVz
b3VyY2UgJXAgZm9yICclcycgZnJvbSBjYWNoZSIsIHJlc291cmNlLCByZXNvdXJjZS0+dXJsKCku
bGF0aW4xKCkuZGF0YSgpKTsKKyAgICAvLyBUaGUgcmVzb3VyY2UgbWF5IGhhdmUgYWxyZWFkeSBi
ZWVuIHJlbW92ZWQgYnkgc29tZW9uZSBvdGhlciB0aGFuIG91ciBjYWxsZXIsCisgICAgLy8gd2hv
IG5lZWRlZCBhIGZyZXNoIGNvcHkgZm9yIGEgcmVsb2FkLiBTZWUgPGh0dHA6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDc5I2M2Pi4KKyAgICBpZiAocmVzb3VyY2UtPmluQ2Fj
aGUoKSkgeworICAgICAgICAvLyBSZW1vdmUgZnJvbSB0aGUgcmVzb3VyY2UgbWFwLgorICAgICAg
ICBtX3Jlc291cmNlcy5yZW1vdmUocmVzb3VyY2UtPnVybCgpKTsKKyAgICAgICAgcmVzb3VyY2Ut
PnNldEluQ2FjaGUoZmFsc2UpOworCisgICAgICAgIC8vIFJlbW92ZSBmcm9tIHRoZSBhcHByb3By
aWF0ZSBMUlUgbGlzdC4KKyAgICAgICAgcmVtb3ZlRnJvbUxSVUxpc3QocmVzb3VyY2UpOworICAg
ICAgICByZW1vdmVGcm9tTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0KHJlc291cmNlKTsKKworICAg
ICAgICAvLyBJZiB0aGUgcmVzb3VyY2Ugd2FzIHB1cmdlZCwgaXQgbWVhbnMgd2UgaGFkIGFscmVh
ZHkgZGVjcmVtZW50ZWQgdGhlIHNpemUgd2hlbiB3ZSBtYWRlIHRoZQorICAgICAgICAvLyByZXNv
dXJjZSBwdXJnZWFibGUgaW4gbWFrZVJlc291cmNlUHVyZ2VhYmxlKCkuIFNvIGFkanVzdCB0aGUg
c2l6ZSBpZiB3ZSBhcmUgZXZpY3RpbmcgYQorICAgICAgICAvLyByZXNvdXJjZSB0aGF0IHdhcyBu
b3QgbWFya2VkIGFzIHB1cmdlYWJsZS4KKyAgICAgICAgaWYgKCFDYWNoZTo6c2hvdWxkTWFrZVJl
c291cmNlUHVyZ2VhYmxlT25FdmljdGlvbigpIHx8ICFyZXNvdXJjZS0+aXNQdXJnZWFibGUoKSkK
KyAgICAgICAgICAgIGFkanVzdFNpemUocmVzb3VyY2UtPmhhc0NsaWVudHMoKSwgLXN0YXRpY19j
YXN0PGludD4ocmVzb3VyY2UtPnNpemUoKSkpOworICAgIH0gZWxzZQorICAgICAgICBBU1NFUlQo
bV9yZXNvdXJjZXMuZ2V0KHJlc291cmNlLT51cmwoKSkgIT0gcmVzb3VyY2UpOworCisgICAgaWYg
KHJlc291cmNlLT5jYW5EZWxldGUoKSkKKyAgICAgICAgZGVsZXRlIHJlc291cmNlOworfQorCit2
b2lkIENhY2hlOjphZGRDYWNoZWRSZXNvdXJjZUxvYWRlcihDYWNoZWRSZXNvdXJjZUxvYWRlciog
Y2FjaGVkUmVzb3VyY2VMb2FkZXIpCit7CisgICAgbV9jYWNoZWRSZXNvdXJjZUxvYWRlcnMuYWRk
KGNhY2hlZFJlc291cmNlTG9hZGVyKTsKK30KKwordm9pZCBDYWNoZTo6cmVtb3ZlQ2FjaGVkUmVz
b3VyY2VMb2FkZXIoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyKQor
eworICAgIG1fY2FjaGVkUmVzb3VyY2VMb2FkZXJzLnJlbW92ZShjYWNoZWRSZXNvdXJjZUxvYWRl
cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgZmFzdExvZzIodW5zaWduZWQgaSkKK3sK
KyAgICB1bnNpZ25lZCBsb2cyID0gMDsKKyAgICBpZiAoaSAmIChpIC0gMSkpCisgICAgICAgIGxv
ZzIgKz0gMTsKKyAgICBpZiAoaSA+PiAxNikKKyAgICAgICAgbG9nMiArPSAxNiwgaSA+Pj0gMTY7
CisgICAgaWYgKGkgPj4gOCkKKyAgICAgICAgbG9nMiArPSA4LCBpID4+PSA4OworICAgIGlmIChp
ID4+IDQpCisgICAgICAgIGxvZzIgKz0gNCwgaSA+Pj0gNDsKKyAgICBpZiAoaSA+PiAyKQorICAg
ICAgICBsb2cyICs9IDIsIGkgPj49IDI7CisgICAgaWYgKGkgPj4gMSkKKyAgICAgICAgbG9nMiAr
PSAxOworICAgIHJldHVybiBsb2cyOworfQorCitDYWNoZTo6TFJVTGlzdCogQ2FjaGU6OmxydUxp
c3RGb3IoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQoreworICAgIHVuc2lnbmVkIGFjY2Vzc0Nv
dW50ID0gbWF4KHJlc291cmNlLT5hY2Nlc3NDb3VudCgpLCAxVSk7CisgICAgdW5zaWduZWQgcXVl
dWVJbmRleCA9IGZhc3RMb2cyKHJlc291cmNlLT5zaXplKCkgLyBhY2Nlc3NDb3VudCk7CisjaWZu
ZGVmIE5ERUJVRworICAgIHJlc291cmNlLT5tX2xydUluZGV4ID0gcXVldWVJbmRleDsKKyNlbmRp
ZgorICAgIGlmIChtX2FsbFJlc291cmNlcy5zaXplKCkgPD0gcXVldWVJbmRleCkKKyAgICAgICAg
bV9hbGxSZXNvdXJjZXMuZ3JvdyhxdWV1ZUluZGV4ICsgMSk7CisgICAgcmV0dXJuICZtX2FsbFJl
c291cmNlc1txdWV1ZUluZGV4XTsKK30KKwordm9pZCBDYWNoZTo6cmVtb3ZlRnJvbUxSVUxpc3Qo
Q2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQoreworICAgIC8vIElmIHdlJ3ZlIG5ldmVyIGJlZW4g
YWNjZXNzZWQsIHRoZW4gd2UncmUgYnJhbmQgbmV3IGFuZCBub3QgaW4gYW55IGxpc3QuCisgICAg
aWYgKHJlc291cmNlLT5hY2Nlc3NDb3VudCgpID09IDApCisgICAgICAgIHJldHVybjsKKworI2lm
ICFBU1NFUlRfRElTQUJMRUQKKyAgICB1bnNpZ25lZCBvbGRMaXN0SW5kZXggPSByZXNvdXJjZS0+
bV9scnVJbmRleDsKKyNlbmRpZgorCisgICAgTFJVTGlzdCogbGlzdCA9IGxydUxpc3RGb3IocmVz
b3VyY2UpOworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBs
aXN0IHdlIGdvdCBpcyB0aGUgbGlzdCB3ZSB3YW50LgorICAgIEFTU0VSVChyZXNvdXJjZS0+bV9s
cnVJbmRleCA9PSBvbGRMaXN0SW5kZXgpOworCisgICAgLy8gVmVyaWZ5IHRoYXQgd2UgYXJlIGlu
IGZhY3QgaW4gdGhpcyBsaXN0LgorICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICBmb3IgKENh
Y2hlZFJlc291cmNlKiBjdXJyZW50ID0gbGlzdC0+bV9oZWFkOyBjdXJyZW50OyBjdXJyZW50ID0g
Y3VycmVudC0+bV9uZXh0SW5BbGxSZXNvdXJjZXNMaXN0KSB7CisgICAgICAgIGlmIChjdXJyZW50
ID09IHJlc291cmNlKSB7CisgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQoZm91bmQpOworI2VuZGlmCisKKyAg
ICBDYWNoZWRSZXNvdXJjZSogbmV4dCA9IHJlc291cmNlLT5tX25leHRJbkFsbFJlc291cmNlc0xp
c3Q7CisgICAgQ2FjaGVkUmVzb3VyY2UqIHByZXYgPSByZXNvdXJjZS0+bV9wcmV2SW5BbGxSZXNv
dXJjZXNMaXN0OworICAgIAorICAgIGlmIChuZXh0ID09IDAgJiYgcHJldiA9PSAwICYmIGxpc3Qt
Pm1faGVhZCAhPSByZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHJlc291cmNl
LT5tX25leHRJbkFsbFJlc291cmNlc0xpc3QgPSAwOworICAgIHJlc291cmNlLT5tX3ByZXZJbkFs
bFJlc291cmNlc0xpc3QgPSAwOworICAgIAorICAgIGlmIChuZXh0KQorICAgICAgICBuZXh0LT5t
X3ByZXZJbkFsbFJlc291cmNlc0xpc3QgPSBwcmV2OworICAgIGVsc2UgaWYgKGxpc3QtPm1fdGFp
bCA9PSByZXNvdXJjZSkKKyAgICAgICAgbGlzdC0+bV90YWlsID0gcHJldjsKKworICAgIGlmIChw
cmV2KQorICAgICAgICBwcmV2LT5tX25leHRJbkFsbFJlc291cmNlc0xpc3QgPSBuZXh0OworICAg
IGVsc2UgaWYgKGxpc3QtPm1faGVhZCA9PSByZXNvdXJjZSkKKyAgICAgICAgbGlzdC0+bV9oZWFk
ID0gbmV4dDsKK30KKwordm9pZCBDYWNoZTo6aW5zZXJ0SW5MUlVMaXN0KENhY2hlZFJlc291cmNl
KiByZXNvdXJjZSkKK3sKKyAgICAvLyBNYWtlIHN1cmUgd2UgYXJlbid0IGluIHNvbWUgbGlzdCBh
bHJlYWR5LgorICAgIEFTU0VSVCghcmVzb3VyY2UtPm1fbmV4dEluQWxsUmVzb3VyY2VzTGlzdCAm
JiAhcmVzb3VyY2UtPm1fcHJldkluQWxsUmVzb3VyY2VzTGlzdCk7CisgICAgQVNTRVJUKHJlc291
cmNlLT5pbkNhY2hlKCkpOworICAgIEFTU0VSVChyZXNvdXJjZS0+YWNjZXNzQ291bnQoKSA+IDAp
OworICAgIAorICAgIExSVUxpc3QqIGxpc3QgPSBscnVMaXN0Rm9yKHJlc291cmNlKTsKKworICAg
IHJlc291cmNlLT5tX25leHRJbkFsbFJlc291cmNlc0xpc3QgPSBsaXN0LT5tX2hlYWQ7CisgICAg
aWYgKGxpc3QtPm1faGVhZCkKKyAgICAgICAgbGlzdC0+bV9oZWFkLT5tX3ByZXZJbkFsbFJlc291
cmNlc0xpc3QgPSByZXNvdXJjZTsKKyAgICBsaXN0LT5tX2hlYWQgPSByZXNvdXJjZTsKKyAgICAK
KyAgICBpZiAoIXJlc291cmNlLT5tX25leHRJbkFsbFJlc291cmNlc0xpc3QpCisgICAgICAgIGxp
c3QtPm1fdGFpbCA9IHJlc291cmNlOworICAgICAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgLy8g
VmVyaWZ5IHRoYXQgd2UgYXJlIGluIG5vdyBpbiB0aGUgbGlzdCBsaWtlIHdlIHNob3VsZCBiZS4K
KyAgICBsaXN0ID0gbHJ1TGlzdEZvcihyZXNvdXJjZSk7CisgICAgYm9vbCBmb3VuZCA9IGZhbHNl
OworICAgIGZvciAoQ2FjaGVkUmVzb3VyY2UqIGN1cnJlbnQgPSBsaXN0LT5tX2hlYWQ7IGN1cnJl
bnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5tX25leHRJbkFsbFJlc291cmNlc0xpc3QpIHsKKyAgICAg
ICAgaWYgKGN1cnJlbnQgPT0gcmVzb3VyY2UpIHsKKyAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVChmb3VuZCk7
CisjZW5kaWYKKworfQorCit2b2lkIENhY2hlOjpyZXNvdXJjZUFjY2Vzc2VkKENhY2hlZFJlc291
cmNlKiByZXNvdXJjZSkKK3sKKyAgICBBU1NFUlQocmVzb3VyY2UtPmluQ2FjaGUoKSk7CisgICAg
CisgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgdG8gcmVtb3ZlIGJlZm9yZSB3ZSBpbmNyZWFzZSB0
aGUgYWNjZXNzIGNvdW50LCBzaW5jZQorICAgIC8vIHRoZSBxdWV1ZSB3aWxsIHBvc3NpYmx5IGNo
YW5nZS4KKyAgICByZW1vdmVGcm9tTFJVTGlzdChyZXNvdXJjZSk7CisgICAgCisgICAgLy8gSWYg
dGhpcyBpcyB0aGUgZmlyc3QgdGltZSB0aGUgcmVzb3VyY2UgaGFzIGJlZW4gYWNjZXNzZWQsIGFk
anVzdCB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUgdG8gYWNjb3VudCBmb3IgaXRzIGluaXRpYWwgc2l6
ZS4KKyAgICBpZiAoIXJlc291cmNlLT5hY2Nlc3NDb3VudCgpKQorICAgICAgICBhZGp1c3RTaXpl
KHJlc291cmNlLT5oYXNDbGllbnRzKCksIHJlc291cmNlLT5zaXplKCkpOworICAgIAorICAgIC8v
IEFkZCB0byBvdXIgYWNjZXNzIGNvdW50LgorICAgIHJlc291cmNlLT5pbmNyZWFzZUFjY2Vzc0Nv
dW50KCk7CisgICAgCisgICAgLy8gTm93IGluc2VydCBpbnRvIHRoZSBuZXcgcXVldWUuCisgICAg
aW5zZXJ0SW5MUlVMaXN0KHJlc291cmNlKTsKK30KKwordm9pZCBDYWNoZTo6cmVtb3ZlRnJvbUxp
dmVEZWNvZGVkUmVzb3VyY2VzTGlzdChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCit7CisgICAg
Ly8gSWYgd2UndmUgbmV2ZXIgYmVlbiBhY2Nlc3NlZCwgdGhlbiB3ZSdyZSBicmFuZCBuZXcgYW5k
IG5vdCBpbiBhbnkgbGlzdC4KKyAgICBpZiAoIXJlc291cmNlLT5tX2luTGl2ZURlY29kZWRSZXNv
dXJjZXNMaXN0KQorICAgICAgICByZXR1cm47CisgICAgcmVzb3VyY2UtPm1faW5MaXZlRGVjb2Rl
ZFJlc291cmNlc0xpc3QgPSBmYWxzZTsKKworI2lmbmRlZiBOREVCVUcKKyAgICAvLyBWZXJpZnkg
dGhhdCB3ZSBhcmUgaW4gZmFjdCBpbiB0aGlzIGxpc3QuCisgICAgYm9vbCBmb3VuZCA9IGZhbHNl
OworICAgIGZvciAoQ2FjaGVkUmVzb3VyY2UqIGN1cnJlbnQgPSBtX2xpdmVEZWNvZGVkUmVzb3Vy
Y2VzLm1faGVhZDsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm1fbmV4dEluTGl2ZVJlc291
cmNlc0xpc3QpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQgPT0gcmVzb3VyY2UpIHsKKyAgICAgICAg
ICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
ICAgIEFTU0VSVChmb3VuZCk7CisjZW5kaWYKKworICAgIENhY2hlZFJlc291cmNlKiBuZXh0ID0g
cmVzb3VyY2UtPm1fbmV4dEluTGl2ZVJlc291cmNlc0xpc3Q7CisgICAgQ2FjaGVkUmVzb3VyY2Uq
IHByZXYgPSByZXNvdXJjZS0+bV9wcmV2SW5MaXZlUmVzb3VyY2VzTGlzdDsKKyAgICAKKyAgICBp
ZiAobmV4dCA9PSAwICYmIHByZXYgPT0gMCAmJiBtX2xpdmVEZWNvZGVkUmVzb3VyY2VzLm1faGVh
ZCAhPSByZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHJlc291cmNlLT5tX25l
eHRJbkxpdmVSZXNvdXJjZXNMaXN0ID0gMDsKKyAgICByZXNvdXJjZS0+bV9wcmV2SW5MaXZlUmVz
b3VyY2VzTGlzdCA9IDA7CisgICAgCisgICAgaWYgKG5leHQpCisgICAgICAgIG5leHQtPm1fcHJl
dkluTGl2ZVJlc291cmNlc0xpc3QgPSBwcmV2OworICAgIGVsc2UgaWYgKG1fbGl2ZURlY29kZWRS
ZXNvdXJjZXMubV90YWlsID09IHJlc291cmNlKQorICAgICAgICBtX2xpdmVEZWNvZGVkUmVzb3Vy
Y2VzLm1fdGFpbCA9IHByZXY7CisKKyAgICBpZiAocHJldikKKyAgICAgICAgcHJldi0+bV9uZXh0
SW5MaXZlUmVzb3VyY2VzTGlzdCA9IG5leHQ7CisgICAgZWxzZSBpZiAobV9saXZlRGVjb2RlZFJl
c291cmNlcy5tX2hlYWQgPT0gcmVzb3VyY2UpCisgICAgICAgIG1fbGl2ZURlY29kZWRSZXNvdXJj
ZXMubV9oZWFkID0gbmV4dDsKK30KKwordm9pZCBDYWNoZTo6aW5zZXJ0SW5MaXZlRGVjb2RlZFJl
c291cmNlc0xpc3QoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQoreworICAgIC8vIE1ha2Ugc3Vy
ZSB3ZSBhcmVuJ3QgaW4gdGhlIGxpc3QgYWxyZWFkeS4KKyAgICBBU1NFUlQoIXJlc291cmNlLT5t
X25leHRJbkxpdmVSZXNvdXJjZXNMaXN0ICYmICFyZXNvdXJjZS0+bV9wcmV2SW5MaXZlUmVzb3Vy
Y2VzTGlzdCAmJiAhcmVzb3VyY2UtPm1faW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QpOworICAg
IHJlc291cmNlLT5tX2luTGl2ZURlY29kZWRSZXNvdXJjZXNMaXN0ID0gdHJ1ZTsKKworICAgIHJl
c291cmNlLT5tX25leHRJbkxpdmVSZXNvdXJjZXNMaXN0ID0gbV9saXZlRGVjb2RlZFJlc291cmNl
cy5tX2hlYWQ7CisgICAgaWYgKG1fbGl2ZURlY29kZWRSZXNvdXJjZXMubV9oZWFkKQorICAgICAg
ICBtX2xpdmVEZWNvZGVkUmVzb3VyY2VzLm1faGVhZC0+bV9wcmV2SW5MaXZlUmVzb3VyY2VzTGlz
dCA9IHJlc291cmNlOworICAgIG1fbGl2ZURlY29kZWRSZXNvdXJjZXMubV9oZWFkID0gcmVzb3Vy
Y2U7CisgICAgCisgICAgaWYgKCFyZXNvdXJjZS0+bV9uZXh0SW5MaXZlUmVzb3VyY2VzTGlzdCkK
KyAgICAgICAgbV9saXZlRGVjb2RlZFJlc291cmNlcy5tX3RhaWwgPSByZXNvdXJjZTsKKyAgICAg
ICAgCisjaWZuZGVmIE5ERUJVRworICAgIC8vIFZlcmlmeSB0aGF0IHdlIGFyZSBpbiBub3cgaW4g
dGhlIGxpc3QgbGlrZSB3ZSBzaG91bGQgYmUuCisgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAg
IGZvciAoQ2FjaGVkUmVzb3VyY2UqIGN1cnJlbnQgPSBtX2xpdmVEZWNvZGVkUmVzb3VyY2VzLm1f
aGVhZDsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm1fbmV4dEluTGl2ZVJlc291cmNlc0xp
c3QpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQgPT0gcmVzb3VyY2UpIHsKKyAgICAgICAgICAgIGZv
dW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIEFT
U0VSVChmb3VuZCk7CisjZW5kaWYKKworfQorCit2b2lkIENhY2hlOjphZGRUb0xpdmVSZXNvdXJj
ZXNTaXplKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKK3sKKyAgICBtX2xpdmVTaXplICs9IHJl
c291cmNlLT5zaXplKCk7CisgICAgbV9kZWFkU2l6ZSAtPSByZXNvdXJjZS0+c2l6ZSgpOworfQor
Cit2b2lkIENhY2hlOjpyZW1vdmVGcm9tTGl2ZVJlc291cmNlc1NpemUoQ2FjaGVkUmVzb3VyY2Uq
IHJlc291cmNlKQoreworICAgIG1fbGl2ZVNpemUgLT0gcmVzb3VyY2UtPnNpemUoKTsKKyAgICBt
X2RlYWRTaXplICs9IHJlc291cmNlLT5zaXplKCk7Cit9CisKK3ZvaWQgQ2FjaGU6OmFkanVzdFNp
emUoYm9vbCBsaXZlLCBpbnQgZGVsdGEpCit7CisgICAgaWYgKGxpdmUpIHsKKyAgICAgICAgQVNT
RVJUKGRlbHRhID49IDAgfHwgKChpbnQpbV9saXZlU2l6ZSArIGRlbHRhID49IDApKTsKKyAgICAg
ICAgbV9saXZlU2l6ZSArPSBkZWx0YTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoZGVs
dGEgPj0gMCB8fCAoKGludCltX2RlYWRTaXplICsgZGVsdGEgPj0gMCkpOworICAgICAgICBtX2Rl
YWRTaXplICs9IGRlbHRhOworICAgIH0KK30KKwordm9pZCBDYWNoZTo6VHlwZVN0YXRpc3RpYzo6
YWRkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqIG8pCit7CisgICAgYm9vbCBwdXJnZWQgPSBvLT53
YXNQdXJnZWQoKTsKKyAgICBib29sIHB1cmdlYWJsZSA9IG8tPmlzUHVyZ2VhYmxlKCkgJiYgIXB1
cmdlZDsgCisgICAgaW50IHBhZ2VTaXplID0gKG8tPmVuY29kZWRTaXplKCkgKyBvLT5vdmVyaGVh
ZFNpemUoKSArIDQwOTUpICYgfjQwOTU7CisgICAgY291bnQrKzsKKyAgICBzaXplICs9IHB1cmdl
ZCA/IDAgOiBvLT5zaXplKCk7IAorICAgIGxpdmVTaXplICs9IG8tPmhhc0NsaWVudHMoKSA/IG8t
PnNpemUoKSA6IDA7CisgICAgZGVjb2RlZFNpemUgKz0gby0+ZGVjb2RlZFNpemUoKTsKKyAgICBw
dXJnZWFibGVTaXplICs9IHB1cmdlYWJsZSA/IHBhZ2VTaXplIDogMDsKKyAgICBwdXJnZWRTaXpl
ICs9IHB1cmdlZCA/IHBhZ2VTaXplIDogMDsKK30KKworQ2FjaGU6OlN0YXRpc3RpY3MgQ2FjaGU6
OmdldFN0YXRpc3RpY3MoKQoreworICAgIFN0YXRpc3RpY3Mgc3RhdHM7CisgICAgQ2FjaGVkUmVz
b3VyY2VNYXA6Oml0ZXJhdG9yIGUgPSBtX3Jlc291cmNlcy5lbmQoKTsKKyAgICBmb3IgKENhY2hl
ZFJlc291cmNlTWFwOjppdGVyYXRvciBpID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaSAhPSBlOyAr
K2kpIHsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gaS0+c2Vjb25kOworICAg
ICAgICBzd2l0Y2ggKHJlc291cmNlLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBDYWNoZWRSZXNv
dXJjZTo6SW1hZ2VSZXNvdXJjZToKKyAgICAgICAgICAgIHN0YXRzLmltYWdlcy5hZGRSZXNvdXJj
ZShyZXNvdXJjZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDYWNoZWRSZXNv
dXJjZTo6Q1NTU3R5bGVTaGVldDoKKyAgICAgICAgICAgIHN0YXRzLmNzc1N0eWxlU2hlZXRzLmFk
ZFJlc291cmNlKHJlc291cmNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENh
Y2hlZFJlc291cmNlOjpTY3JpcHQ6CisgICAgICAgICAgICBzdGF0cy5zY3JpcHRzLmFkZFJlc291
cmNlKHJlc291cmNlKTsKKyAgICAgICAgICAgIGJyZWFrOworI2lmIEVOQUJMRShYU0xUKQorICAg
ICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0OgorICAgICAgICAgICAgc3Rh
dHMueHNsU3R5bGVTaGVldHMuYWRkUmVzb3VyY2UocmVzb3VyY2UpOworICAgICAgICAgICAgYnJl
YWs7CisjZW5kaWYKKyAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlOgor
ICAgICAgICAgICAgc3RhdHMuZm9udHMuYWRkUmVzb3VyY2UocmVzb3VyY2UpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gc3RhdHM7Cit9CisKK3ZvaWQgQ2FjaGU6OnNldERpc2FibGVk
KGJvb2wgZGlzYWJsZWQpCit7CisgICAgbV9kaXNhYmxlZCA9IGRpc2FibGVkOworICAgIGlmICgh
bV9kaXNhYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yICg7OykgeworICAgICAgICBD
YWNoZWRSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaSA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7CisgICAg
ICAgIGlmIChpID09IG1fcmVzb3VyY2VzLmVuZCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGV2aWN0KGktPnNlY29uZCk7CisgICAgfQorfQorCisjaWZuZGVmIE5ERUJVRwordm9pZCBD
YWNoZTo6ZHVtcFN0YXRzKCkKK3sKKyAgICBTdGF0aXN0aWNzIHMgPSBnZXRTdGF0aXN0aWNzKCk7
CisgICAgcHJpbnRmKCIlLTEzcyAlLTEzcyAlLTEzcyAlLTEzcyAlLTEzcyAlLTEzcyAlLTEzc1xu
IiwgIiIsICJDb3VudCIsICJTaXplIiwgIkxpdmVTaXplIiwgIkRlY29kZWRTaXplIiwgIlB1cmdl
YWJsZVNpemUiLCAiUHVyZ2VkU2l6ZSIpOworICAgIHByaW50ZigiJS0xM3MgJS0xM3MgJS0xM3Mg
JS0xM3MgJS0xM3MgJS0xM3MgJS0xM3NcbiIsICItLS0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0t
LS0iLCAiLS0tLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tLS0iLCAi
LS0tLS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLS0tIik7CisgICAgcHJpbnRmKCIlLTEzcyAlMTNk
ICUxM2QgJTEzZCAlMTNkICUxM2QgJTEzZFxuIiwgIkltYWdlcyIsIHMuaW1hZ2VzLmNvdW50LCBz
LmltYWdlcy5zaXplLCBzLmltYWdlcy5saXZlU2l6ZSwgcy5pbWFnZXMuZGVjb2RlZFNpemUsIHMu
aW1hZ2VzLnB1cmdlYWJsZVNpemUsIHMuaW1hZ2VzLnB1cmdlZFNpemUpOworICAgIHByaW50Zigi
JS0xM3MgJTEzZCAlMTNkICUxM2QgJTEzZCAlMTNkICUxM2RcbiIsICJDU1MiLCBzLmNzc1N0eWxl
U2hlZXRzLmNvdW50LCBzLmNzc1N0eWxlU2hlZXRzLnNpemUsIHMuY3NzU3R5bGVTaGVldHMubGl2
ZVNpemUsIHMuY3NzU3R5bGVTaGVldHMuZGVjb2RlZFNpemUsIHMuY3NzU3R5bGVTaGVldHMucHVy
Z2VhYmxlU2l6ZSwgcy5jc3NTdHlsZVNoZWV0cy5wdXJnZWRTaXplKTsKKyNpZiBFTkFCTEUoWFNM
VCkKKyAgICBwcmludGYoIiUtMTNzICUxM2QgJTEzZCAlMTNkICUxM2QgJTEzZCAlMTNkXG4iLCAi
WFNMIiwgcy54c2xTdHlsZVNoZWV0cy5jb3VudCwgcy54c2xTdHlsZVNoZWV0cy5zaXplLCBzLnhz
bFN0eWxlU2hlZXRzLmxpdmVTaXplLCBzLnhzbFN0eWxlU2hlZXRzLmRlY29kZWRTaXplLCBzLnhz
bFN0eWxlU2hlZXRzLnB1cmdlYWJsZVNpemUsIHMueHNsU3R5bGVTaGVldHMucHVyZ2VkU2l6ZSk7
CisjZW5kaWYKKyAgICBwcmludGYoIiUtMTNzICUxM2QgJTEzZCAlMTNkICUxM2QgJTEzZCAlMTNk
XG4iLCAiSmF2YVNjcmlwdCIsIHMuc2NyaXB0cy5jb3VudCwgcy5zY3JpcHRzLnNpemUsIHMuc2Ny
aXB0cy5saXZlU2l6ZSwgcy5zY3JpcHRzLmRlY29kZWRTaXplLCBzLnNjcmlwdHMucHVyZ2VhYmxl
U2l6ZSwgcy5zY3JpcHRzLnB1cmdlZFNpemUpOworICAgIHByaW50ZigiJS0xM3MgJTEzZCAlMTNk
ICUxM2QgJTEzZCAlMTNkICUxM2RcbiIsICJGb250cyIsIHMuZm9udHMuY291bnQsIHMuZm9udHMu
c2l6ZSwgcy5mb250cy5saXZlU2l6ZSwgcy5mb250cy5kZWNvZGVkU2l6ZSwgcy5mb250cy5wdXJn
ZWFibGVTaXplLCBzLmZvbnRzLnB1cmdlZFNpemUpOworICAgIHByaW50ZigiJS0xM3MgJS0xM3Mg
JS0xM3MgJS0xM3MgJS0xM3MgJS0xM3MgJS0xM3NcblxuIiwgIi0tLS0tLS0tLS0tLS0iLCAiLS0t
LS0tLS0tLS0tLSIsICItLS0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0t
LS0tLSIsICItLS0tLS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tLS0iKTsKK30KKwordm9pZCBDYWNo
ZTo6ZHVtcExSVUxpc3RzKGJvb2wgaW5jbHVkZUxpdmUpIGNvbnN0Cit7CisgICAgcHJpbnRmKCJM
UlUtU1AgbGlzdHMgaW4gZXZpY3Rpb24gb3JkZXIgKEtpbG9ieXRlcyBkZWNvZGVkLCBLaWxvYnl0
ZXMgZW5jb2RlZCwgQWNjZXNzIGNvdW50LCBSZWZlcmVuY2VkLCBpc1B1cmdlYWJsZSwgd2FzUHVy
Z2VkKTpcbiIpOworCisgICAgaW50IHNpemUgPSBtX2FsbFJlc291cmNlcy5zaXplKCk7CisgICAg
Zm9yIChpbnQgaSA9IHNpemUgLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICBwcmludGYoIlxu
XG5MaXN0ICVkOiAiLCBpKTsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIGN1cnJlbnQgPSBtX2Fs
bFJlc291cmNlc1tpXS5tX3RhaWw7CisgICAgICAgIHdoaWxlIChjdXJyZW50KSB7CisgICAgICAg
ICAgICBDYWNoZWRSZXNvdXJjZSogcHJldiA9IGN1cnJlbnQtPm1fcHJldkluQWxsUmVzb3VyY2Vz
TGlzdDsKKyAgICAgICAgICAgIGlmIChpbmNsdWRlTGl2ZSB8fCAhY3VycmVudC0+aGFzQ2xpZW50
cygpKQorICAgICAgICAgICAgICAgIHByaW50ZigiKCUuMWZLLCAlLjFmSywgJXVBLCAlZFIsICVk
LCAlZCk7ICIsIGN1cnJlbnQtPmRlY29kZWRTaXplKCkgLyAxMDI0LjBmLCAoY3VycmVudC0+ZW5j
b2RlZFNpemUoKSArIGN1cnJlbnQtPm92ZXJoZWFkU2l6ZSgpKSAvIDEwMjQuMGYsIGN1cnJlbnQt
PmFjY2Vzc0NvdW50KCksIGN1cnJlbnQtPmhhc0NsaWVudHMoKSwgY3VycmVudC0+aXNQdXJnZWFi
bGUoKSwgY3VycmVudC0+d2FzUHVyZ2VkKCkpOworCisgICAgICAgICAgICBjdXJyZW50ID0gcHJl
djsKKyAgICAgICAgfQorICAgIH0KK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCShyZXZpc2lvbiA3MTQ5NikK
KysrIFdlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjEsNyArMjEsNyBAQAogKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNh
Y2hlLmgiCisjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKIAogI2luY2x1ZGUgIkNhY2hlZENTU1N0
eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDYWNoZWRGb250LmgiCkBAIC00OSwxMyArNDksMTMgQEAg
c3RhdGljIGNvbnN0IGRvdWJsZSBjTWluRGVsYXlCZWZvcmVMaXZlRAogc3RhdGljIGNvbnN0IGZs
b2F0IGNUYXJnZXRQcnVuZVBlcmNlbnRhZ2UgPSAuOTVmOyAvLyBQZXJjZW50YWdlIG9mIGNhcGFj
aXR5IHRvd2FyZCB3aGljaCB3ZSBwcnVuZSwgdG8gYXZvaWQgaW1tZWRpYXRlbHkgcHJ1bmluZyBh
Z2Fpbi4KIHN0YXRpYyBjb25zdCBkb3VibGUgY0RlZmF1bHREZWNvZGVkRGF0YURlbGV0aW9uSW50
ZXJ2YWwgPSAwOwogCi1DYWNoZSogY2FjaGUoKQorTWVtb3J5Q2FjaGUqIGNhY2hlKCkKIHsKLSAg
ICBzdGF0aWMgQ2FjaGUqIHN0YXRpY0NhY2hlID0gbmV3IENhY2hlOworICAgIHN0YXRpYyBNZW1v
cnlDYWNoZSogc3RhdGljQ2FjaGUgPSBuZXcgTWVtb3J5Q2FjaGU7CiAgICAgcmV0dXJuIHN0YXRp
Y0NhY2hlOwogfQogCi1DYWNoZTo6Q2FjaGUoKQorTWVtb3J5Q2FjaGU6Ok1lbW9yeUNhY2hlKCkK
ICAgICA6IG1fZGlzYWJsZWQoZmFsc2UpCiAgICAgLCBtX3BydW5lRW5hYmxlZCh0cnVlKQogICAg
ICwgbV9pblBydW5lRGVhZFJlc291cmNlcyhmYWxzZSkKQEAgLTk0LDkgKzk0LDkgQEAgc3RhdGlj
IENhY2hlZFJlc291cmNlKiBjcmVhdGVSZXNvdXJjZShDYQogICAgIHJldHVybiAwOwogfQogCi1D
YWNoZWRSZXNvdXJjZSogQ2FjaGU6OnJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZUxvYWRl
ciogY2FjaGVkUmVzb3VyY2VMb2FkZXIsIENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUsIGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBib29sIHJlcXVlc3RJc1ByZWxvYWQp
CitDYWNoZWRSZXNvdXJjZSogTWVtb3J5Q2FjaGU6OnJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNv
dXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIsIENhY2hlZFJlc291cmNlOjpUeXBlIHR5
cGUsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBib29sIHJlcXVlc3RJ
c1ByZWxvYWQpCiB7Ci0gICAgTE9HKFJlc291cmNlTG9hZGluZywgIkNhY2hlOjpyZXF1ZXN0UmVz
b3VyY2UgJyVzJywgY2hhcnNldCAnJXMnLCBwcmVsb2FkPSV1IiwgdXJsLnN0cmluZygpLmxhdGlu
MSgpLmRhdGEoKSwgY2hhcnNldC5sYXRpbjEoKS5kYXRhKCksIHJlcXVlc3RJc1ByZWxvYWQpOwor
ICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJNZW1vcnlDYWNoZTo6cmVxdWVzdFJlc291cmNlICcl
cycsIGNoYXJzZXQgJyVzJywgcHJlbG9hZD0ldSIsIHVybC5zdHJpbmcoKS5sYXRpbjEoKS5kYXRh
KCksIGNoYXJzZXQubGF0aW4xKCkuZGF0YSgpLCByZXF1ZXN0SXNQcmVsb2FkKTsKIAogICAgIC8v
IEZJWE1FOiBEbyB3ZSByZWFsbHkgbmVlZCB0byBzcGVjaWFsLWNhc2UgYW4gZW1wdHkgVVJMPwog
ICAgIC8vIFdvdWxkIGl0IGJlIGJldHRlciB0byBqdXN0IGdvIG9uIHdpdGggdGhlIGNhY2hlIGNv
ZGUgYW5kIGxldCBpdCBmYWlsIGxhdGVyPwpAQCAtMTA3LDcgKzEwNyw3IEBAIENhY2hlZFJlc291
cmNlKiBDYWNoZTo6cmVxdWVzdFJlc291cmNlKEMKICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3Vy
Y2UgPSByZXNvdXJjZUZvclVSTCh1cmwuc3RyaW5nKCkpOwogCiAgICAgaWYgKHJlc291cmNlICYm
IHJlcXVlc3RJc1ByZWxvYWQgJiYgIXJlc291cmNlLT5pc1ByZWxvYWRlZCgpKSB7Ci0gICAgICAg
IExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYWNoZTo6cmVxdWVzdFJlc291cmNlIGFscmVhZHkgaGFz
IGEgcHJlbG9hZCByZXF1ZXN0IGZvciB0aGlzIHJlcXVlc3QsIGFuZCBpdCBoYXNuJ3QgYmVlbiBw
cmVsb2FkZWQgeWV0Iik7CisgICAgICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJNZW1vcnlDYWNo
ZTo6cmVxdWVzdFJlc291cmNlIGFscmVhZHkgaGFzIGEgcHJlbG9hZCByZXF1ZXN0IGZvciB0aGlz
IHJlcXVlc3QsIGFuZCBpdCBoYXNuJ3QgYmVlbiBwcmVsb2FkZWQgeWV0Iik7CiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KIApAQCAtMTQ5LDcgKzE0OSw3IEBAIENhY2hlZFJlc291cmNlKiBDYWNo
ZTo6cmVxdWVzdFJlc291cmNlKEMKICAgICB9CiAKICAgICBpZiAocmVzb3VyY2UtPnR5cGUoKSAh
PSB0eXBlKSB7Ci0gICAgICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYWNoZTo6cmVxdWVzdFJl
c291cmNlIGNhbm5vdCB1c2UgY2FjaGVkIHJlc291cmNlIGZvciAnJXMnIGR1ZSB0byB0eXBlIG1p
c21hdGNoIiwgdXJsLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7CisgICAgICAgIExPRyhSZXNv
dXJjZUxvYWRpbmcsICJNZW1vcnlDYWNoZTo6cmVxdWVzdFJlc291cmNlIGNhbm5vdCB1c2UgY2Fj
aGVkIHJlc291cmNlIGZvciAnJXMnIGR1ZSB0byB0eXBlIG1pc21hdGNoIiwgdXJsLnN0cmluZygp
LmxhdGluMSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtMTU4LDEy
ICsxNTgsMTIgQEAgQ2FjaGVkUmVzb3VyY2UqIENhY2hlOjpyZXF1ZXN0UmVzb3VyY2UoQwogICAg
ICAgICByZXNvdXJjZUFjY2Vzc2VkKHJlc291cmNlKTsKICAgICB9CiAKLSAgICBMT0coUmVzb3Vy
Y2VMb2FkaW5nLCAiQ2FjaGU6OnJlcXVlc3RSZXNvdXJjZSBmb3IgJyVzJyByZXR1cm5pbmcgcmVz
b3VyY2UgJXBcbiIsIHVybC5zdHJpbmcoKS5sYXRpbjEoKS5kYXRhKCksIHJlc291cmNlKTsKKyAg
ICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiTWVtb3J5Q2FjaGU6OnJlcXVlc3RSZXNvdXJjZSBmb3Ig
JyVzJyByZXR1cm5pbmcgcmVzb3VyY2UgJXBcbiIsIHVybC5zdHJpbmcoKS5sYXRpbjEoKS5kYXRh
KCksIHJlc291cmNlKTsKIAogICAgIHJldHVybiByZXNvdXJjZTsKIH0KICAgICAKLUNhY2hlZENT
U1N0eWxlU2hlZXQqIENhY2hlOjpyZXF1ZXN0VXNlckNTU1N0eWxlU2hlZXQoQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3Qg
U3RyaW5nJiBjaGFyc2V0KQorQ2FjaGVkQ1NTU3R5bGVTaGVldCogTWVtb3J5Q2FjaGU6OnJlcXVl
c3RVc2VyQ1NTU3R5bGVTaGVldChDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VM
b2FkZXIsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpCiB7CiAgICAg
Q2FjaGVkQ1NTU3R5bGVTaGVldCogdXNlclNoZWV0OwogICAgIGlmIChDYWNoZWRSZXNvdXJjZSog
ZXhpc3RpbmcgPSByZXNvdXJjZUZvclVSTCh1cmwpKSB7CkBAIC0xOTIsNyArMTkyLDcgQEAgQ2Fj
aGVkQ1NTU3R5bGVTaGVldCogQ2FjaGU6OnJlcXVlc3RVc2VyQwogICAgIHJldHVybiB1c2VyU2hl
ZXQ7CiB9CiAgICAgCi12b2lkIENhY2hlOjpyZXZhbGlkYXRlUmVzb3VyY2UoQ2FjaGVkUmVzb3Vy
Y2UqIHJlc291cmNlLCBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIp
Cit2b2lkIE1lbW9yeUNhY2hlOjpyZXZhbGlkYXRlUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqIHJl
c291cmNlLCBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIpCiB7CiAg
ICAgQVNTRVJUKHJlc291cmNlKTsKICAgICBBU1NFUlQocmVzb3VyY2UtPmluQ2FjaGUoKSk7CkBA
IC0yMTUsNyArMjE1LDcgQEAgdm9pZCBDYWNoZTo6cmV2YWxpZGF0ZVJlc291cmNlKENhY2hlZFJl
cwogICAgIG5ld1Jlc291cmNlLT5sb2FkKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKIH0KICAgICAK
LXZvaWQgQ2FjaGU6OnJldmFsaWRhdGlvblN1Y2NlZWRlZChDYWNoZWRSZXNvdXJjZSogcmV2YWxp
ZGF0aW5nUmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQordm9pZCBN
ZW1vcnlDYWNoZTo6cmV2YWxpZGF0aW9uU3VjY2VlZGVkKENhY2hlZFJlc291cmNlKiByZXZhbGlk
YXRpbmdSZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAg
Q2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gcmV2YWxpZGF0aW5nUmVzb3VyY2UtPnJlc291cmNl
VG9SZXZhbGlkYXRlKCk7CiAgICAgQVNTRVJUKHJlc291cmNlKTsKQEAgLTI0MSwxNyArMjQxLDE3
IEBAIHZvaWQgQ2FjaGU6OnJldmFsaWRhdGlvblN1Y2NlZWRlZChDYWNoZWQKICAgICByZXZhbGlk
YXRpbmdSZXNvdXJjZS0+Y2xlYXJSZXNvdXJjZVRvUmV2YWxpZGF0ZSgpOwogfQogCi12b2lkIENh
Y2hlOjpyZXZhbGlkYXRpb25GYWlsZWQoQ2FjaGVkUmVzb3VyY2UqIHJldmFsaWRhdGluZ1Jlc291
cmNlKQordm9pZCBNZW1vcnlDYWNoZTo6cmV2YWxpZGF0aW9uRmFpbGVkKENhY2hlZFJlc291cmNl
KiByZXZhbGlkYXRpbmdSZXNvdXJjZSkKIHsKICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiUmV2
YWxpZGF0aW9uIGZhaWxlZCBmb3IgJXAiLCByZXZhbGlkYXRpbmdSZXNvdXJjZSk7CiAgICAgQVNT
RVJUKHJldmFsaWRhdGluZ1Jlc291cmNlLT5yZXNvdXJjZVRvUmV2YWxpZGF0ZSgpKTsKICAgICBy
ZXZhbGlkYXRpbmdSZXNvdXJjZS0+Y2xlYXJSZXNvdXJjZVRvUmV2YWxpZGF0ZSgpOwogfQogCi1D
YWNoZWRSZXNvdXJjZSogQ2FjaGU6OnJlc291cmNlRm9yVVJMKGNvbnN0IFN0cmluZyYgdXJsKQor
Q2FjaGVkUmVzb3VyY2UqIE1lbW9yeUNhY2hlOjpyZXNvdXJjZUZvclVSTChjb25zdCBTdHJpbmcm
IHVybCkKIHsKICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBtX3Jlc291cmNlcy5nZXQo
dXJsKTsKLSAgICBib29sIHdhc1B1cmdlYWJsZSA9IENhY2hlOjpzaG91bGRNYWtlUmVzb3VyY2VQ
dXJnZWFibGVPbkV2aWN0aW9uKCkgJiYgcmVzb3VyY2UgJiYgcmVzb3VyY2UtPmlzUHVyZ2VhYmxl
KCk7CisgICAgYm9vbCB3YXNQdXJnZWFibGUgPSBNZW1vcnlDYWNoZTo6c2hvdWxkTWFrZVJlc291
cmNlUHVyZ2VhYmxlT25FdmljdGlvbigpICYmIHJlc291cmNlICYmIHJlc291cmNlLT5pc1B1cmdl
YWJsZSgpOwogICAgIGlmIChyZXNvdXJjZSAmJiAhcmVzb3VyY2UtPm1ha2VQdXJnZWFibGUoZmFs
c2UpKSB7CiAgICAgICAgIEFTU0VSVCghcmVzb3VyY2UtPmhhc0NsaWVudHMoKSk7CiAgICAgICAg
IGV2aWN0KHJlc291cmNlKTsKQEAgLTI2Myw3ICsyNjMsNyBAQCBDYWNoZWRSZXNvdXJjZSogQ2Fj
aGU6OnJlc291cmNlRm9yVVJMKGNvCiAgICAgcmV0dXJuIHJlc291cmNlOwogfQogCi11bnNpZ25l
ZCBDYWNoZTo6ZGVhZENhcGFjaXR5KCkgY29uc3QgCit1bnNpZ25lZCBNZW1vcnlDYWNoZTo6ZGVh
ZENhcGFjaXR5KCkgY29uc3QgCiB7CiAgICAgLy8gRGVhZCByZXNvdXJjZSBjYXBhY2l0eSBpcyB3
aGF0ZXZlciBzcGFjZSBpcyBub3Qgb2NjdXBpZWQgYnkgbGl2ZSByZXNvdXJjZXMsIGJvdW5kZWQg
YnkgYW4gaW5kZXBlbmRlbnQgbWluaW11bSBhbmQgbWF4aW11bS4KICAgICB1bnNpZ25lZCBjYXBh
Y2l0eSA9IG1fY2FwYWNpdHkgLSBtaW4obV9saXZlU2l6ZSwgbV9jYXBhY2l0eSk7IC8vIFN0YXJ0
IHdpdGggYXZhaWxhYmxlIGNhcGFjaXR5LgpAQCAtMjcyLDEzICsyNzIsMTMgQEAgdW5zaWduZWQg
Q2FjaGU6OmRlYWRDYXBhY2l0eSgpIGNvbnN0IAogICAgIHJldHVybiBjYXBhY2l0eTsKIH0KIAot
dW5zaWduZWQgQ2FjaGU6OmxpdmVDYXBhY2l0eSgpIGNvbnN0IAordW5zaWduZWQgTWVtb3J5Q2Fj
aGU6OmxpdmVDYXBhY2l0eSgpIGNvbnN0IAogeyAKICAgICAvLyBMaXZlIHJlc291cmNlIGNhcGFj
aXR5IGlzIHdoYXRldmVyIGlzIGxlZnQgb3ZlciBhZnRlciBjYWxjdWxhdGluZyBkZWFkIHJlc291
cmNlIGNhcGFjaXR5LgogICAgIHJldHVybiBtX2NhcGFjaXR5IC0gZGVhZENhcGFjaXR5KCk7CiB9
CiAKLXZvaWQgQ2FjaGU6OnBydW5lTGl2ZVJlc291cmNlcygpCit2b2lkIE1lbW9yeUNhY2hlOjpw
cnVuZUxpdmVSZXNvdXJjZXMoKQogewogICAgIGlmICghbV9wcnVuZUVuYWJsZWQpCiAgICAgICAg
IHJldHVybjsKQEAgLTMyMiw3ICszMjIsNyBAQCB2b2lkIENhY2hlOjpwcnVuZUxpdmVSZXNvdXJj
ZXMoKQogICAgIH0KIH0KIAotdm9pZCBDYWNoZTo6cHJ1bmVEZWFkUmVzb3VyY2VzKCkKK3ZvaWQg
TWVtb3J5Q2FjaGU6OnBydW5lRGVhZFJlc291cmNlcygpCiB7CiAgICAgaWYgKCFtX3BydW5lRW5h
YmxlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNDA2LDcgKzQwNiw3IEBAIHZvaWQgQ2FjaGU6OnBy
dW5lRGVhZFJlc291cmNlcygpCiAgICAgbV9pblBydW5lRGVhZFJlc291cmNlcyA9IGZhbHNlOwog
fQogCi12b2lkIENhY2hlOjpzZXRDYXBhY2l0aWVzKHVuc2lnbmVkIG1pbkRlYWRCeXRlcywgdW5z
aWduZWQgbWF4RGVhZEJ5dGVzLCB1bnNpZ25lZCB0b3RhbEJ5dGVzKQordm9pZCBNZW1vcnlDYWNo
ZTo6c2V0Q2FwYWNpdGllcyh1bnNpZ25lZCBtaW5EZWFkQnl0ZXMsIHVuc2lnbmVkIG1heERlYWRC
eXRlcywgdW5zaWduZWQgdG90YWxCeXRlcykKIHsKICAgICBBU1NFUlQobWluRGVhZEJ5dGVzIDw9
IG1heERlYWRCeXRlcyk7CiAgICAgQVNTRVJUKG1heERlYWRCeXRlcyA8PSB0b3RhbEJ5dGVzKTsK
QEAgLTQxNiw5ICs0MTYsOSBAQCB2b2lkIENhY2hlOjpzZXRDYXBhY2l0aWVzKHVuc2lnbmVkIG1p
bkRlCiAgICAgcHJ1bmUoKTsKIH0KIAotYm9vbCBDYWNoZTo6bWFrZVJlc291cmNlUHVyZ2VhYmxl
KENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKK2Jvb2wgTWVtb3J5Q2FjaGU6Om1ha2VSZXNvdXJj
ZVB1cmdlYWJsZShDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCiB7Ci0gICAgaWYgKCFDYWNoZTo6
c2hvdWxkTWFrZVJlc291cmNlUHVyZ2VhYmxlT25FdmljdGlvbigpKQorICAgIGlmICghTWVtb3J5
Q2FjaGU6OnNob3VsZE1ha2VSZXNvdXJjZVB1cmdlYWJsZU9uRXZpY3Rpb24oKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFyZXNvdXJjZS0+aW5DYWNoZSgpKQpAQCAtNDM4LDcg
KzQzOCw3IEBAIGJvb2wgQ2FjaGU6Om1ha2VSZXNvdXJjZVB1cmdlYWJsZShDYWNoZWQKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBDYWNoZTo6ZXZpY3QoQ2FjaGVkUmVzb3VyY2UqIHJlc291
cmNlKQordm9pZCBNZW1vcnlDYWNoZTo6ZXZpY3QoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQog
ewogICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJFdmljdGluZyByZXNvdXJjZSAlcCBmb3IgJyVz
JyBmcm9tIGNhY2hlIiwgcmVzb3VyY2UsIHJlc291cmNlLT51cmwoKS5sYXRpbjEoKS5kYXRhKCkp
OwogICAgIC8vIFRoZSByZXNvdXJjZSBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBieSBz
b21lb25lIG90aGVyIHRoYW4gb3VyIGNhbGxlciwKQEAgLTQ1NSw3ICs0NTUsNyBAQCB2b2lkIENh
Y2hlOjpldmljdChDYWNoZWRSZXNvdXJjZSogcmVzb3VyCiAgICAgICAgIC8vIElmIHRoZSByZXNv
dXJjZSB3YXMgcHVyZ2VkLCBpdCBtZWFucyB3ZSBoYWQgYWxyZWFkeSBkZWNyZW1lbnRlZCB0aGUg
c2l6ZSB3aGVuIHdlIG1hZGUgdGhlCiAgICAgICAgIC8vIHJlc291cmNlIHB1cmdlYWJsZSBpbiBt
YWtlUmVzb3VyY2VQdXJnZWFibGUoKS4gU28gYWRqdXN0IHRoZSBzaXplIGlmIHdlIGFyZSBldmlj
dGluZyBhCiAgICAgICAgIC8vIHJlc291cmNlIHRoYXQgd2FzIG5vdCBtYXJrZWQgYXMgcHVyZ2Vh
YmxlLgotICAgICAgICBpZiAoIUNhY2hlOjpzaG91bGRNYWtlUmVzb3VyY2VQdXJnZWFibGVPbkV2
aWN0aW9uKCkgfHwgIXJlc291cmNlLT5pc1B1cmdlYWJsZSgpKQorICAgICAgICBpZiAoIU1lbW9y
eUNhY2hlOjpzaG91bGRNYWtlUmVzb3VyY2VQdXJnZWFibGVPbkV2aWN0aW9uKCkgfHwgIXJlc291
cmNlLT5pc1B1cmdlYWJsZSgpKQogICAgICAgICAgICAgYWRqdXN0U2l6ZShyZXNvdXJjZS0+aGFz
Q2xpZW50cygpLCAtc3RhdGljX2Nhc3Q8aW50PihyZXNvdXJjZS0+c2l6ZSgpKSk7CiAgICAgfSBl
bHNlCiAgICAgICAgIEFTU0VSVChtX3Jlc291cmNlcy5nZXQocmVzb3VyY2UtPnVybCgpKSAhPSBy
ZXNvdXJjZSk7CkBAIC00NjQsMTIgKzQ2NCwxMiBAQCB2b2lkIENhY2hlOjpldmljdChDYWNoZWRS
ZXNvdXJjZSogcmVzb3VyCiAgICAgICAgIGRlbGV0ZSByZXNvdXJjZTsKIH0KIAotdm9pZCBDYWNo
ZTo6YWRkQ2FjaGVkUmVzb3VyY2VMb2FkZXIoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJl
c291cmNlTG9hZGVyKQordm9pZCBNZW1vcnlDYWNoZTo6YWRkQ2FjaGVkUmVzb3VyY2VMb2FkZXIo
Q2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyKQogewogICAgIG1fY2Fj
aGVkUmVzb3VyY2VMb2FkZXJzLmFkZChjYWNoZWRSZXNvdXJjZUxvYWRlcik7CiB9CiAKLXZvaWQg
Q2FjaGU6OnJlbW92ZUNhY2hlZFJlc291cmNlTG9hZGVyKENhY2hlZFJlc291cmNlTG9hZGVyKiBj
YWNoZWRSZXNvdXJjZUxvYWRlcikKK3ZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZUNhY2hlZFJlc291
cmNlTG9hZGVyKENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlcikKIHsK
ICAgICBtX2NhY2hlZFJlc291cmNlTG9hZGVycy5yZW1vdmUoY2FjaGVkUmVzb3VyY2VMb2FkZXIp
OwogfQpAQCAtNDkyLDcgKzQ5Miw3IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZmFzdExvZzIo
dW5zaWduZWQKICAgICByZXR1cm4gbG9nMjsKIH0KIAotQ2FjaGU6OkxSVUxpc3QqIENhY2hlOjps
cnVMaXN0Rm9yKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKK01lbW9yeUNhY2hlOjpMUlVMaXN0
KiBNZW1vcnlDYWNoZTo6bHJ1TGlzdEZvcihDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCiB7CiAg
ICAgdW5zaWduZWQgYWNjZXNzQ291bnQgPSBtYXgocmVzb3VyY2UtPmFjY2Vzc0NvdW50KCksIDFV
KTsKICAgICB1bnNpZ25lZCBxdWV1ZUluZGV4ID0gZmFzdExvZzIocmVzb3VyY2UtPnNpemUoKSAv
IGFjY2Vzc0NvdW50KTsKQEAgLTUwNCw3ICs1MDQsNyBAQCBDYWNoZTo6TFJVTGlzdCogQ2FjaGU6
OmxydUxpc3RGb3IoQ2FjaGVkCiAgICAgcmV0dXJuICZtX2FsbFJlc291cmNlc1txdWV1ZUluZGV4
XTsKIH0KIAotdm9pZCBDYWNoZTo6cmVtb3ZlRnJvbUxSVUxpc3QoQ2FjaGVkUmVzb3VyY2UqIHJl
c291cmNlKQordm9pZCBNZW1vcnlDYWNoZTo6cmVtb3ZlRnJvbUxSVUxpc3QoQ2FjaGVkUmVzb3Vy
Y2UqIHJlc291cmNlKQogewogICAgIC8vIElmIHdlJ3ZlIG5ldmVyIGJlZW4gYWNjZXNzZWQsIHRo
ZW4gd2UncmUgYnJhbmQgbmV3IGFuZCBub3QgaW4gYW55IGxpc3QuCiAgICAgaWYgKHJlc291cmNl
LT5hY2Nlc3NDb3VudCgpID09IDApCkBAIC01NTEsNyArNTUxLDcgQEAgdm9pZCBDYWNoZTo6cmVt
b3ZlRnJvbUxSVUxpc3QoQ2FjaGVkUmVzbwogICAgICAgICBsaXN0LT5tX2hlYWQgPSBuZXh0Owog
fQogCi12b2lkIENhY2hlOjppbnNlcnRJbkxSVUxpc3QoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNl
KQordm9pZCBNZW1vcnlDYWNoZTo6aW5zZXJ0SW5MUlVMaXN0KENhY2hlZFJlc291cmNlKiByZXNv
dXJjZSkKIHsKICAgICAvLyBNYWtlIHN1cmUgd2UgYXJlbid0IGluIHNvbWUgbGlzdCBhbHJlYWR5
LgogICAgIEFTU0VSVCghcmVzb3VyY2UtPm1fbmV4dEluQWxsUmVzb3VyY2VzTGlzdCAmJiAhcmVz
b3VyY2UtPm1fcHJldkluQWxsUmVzb3VyY2VzTGlzdCk7CkBAIC01ODMsNyArNTgzLDcgQEAgdm9p
ZCBDYWNoZTo6aW5zZXJ0SW5MUlVMaXN0KENhY2hlZFJlc291cgogCiB9CiAKLXZvaWQgQ2FjaGU6
OnJlc291cmNlQWNjZXNzZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQordm9pZCBNZW1vcnlD
YWNoZTo6cmVzb3VyY2VBY2Nlc3NlZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCiB7CiAgICAg
QVNTRVJUKHJlc291cmNlLT5pbkNhY2hlKCkpOwogICAgIApAQCAtNjAyLDcgKzYwMiw3IEBAIHZv
aWQgQ2FjaGU6OnJlc291cmNlQWNjZXNzZWQoQ2FjaGVkUmVzb3UKICAgICBpbnNlcnRJbkxSVUxp
c3QocmVzb3VyY2UpOwogfQogCi12b2lkIENhY2hlOjpyZW1vdmVGcm9tTGl2ZURlY29kZWRSZXNv
dXJjZXNMaXN0KENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKK3ZvaWQgTWVtb3J5Q2FjaGU6OnJl
bW92ZUZyb21MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNl
KQogewogICAgIC8vIElmIHdlJ3ZlIG5ldmVyIGJlZW4gYWNjZXNzZWQsIHRoZW4gd2UncmUgYnJh
bmQgbmV3IGFuZCBub3QgaW4gYW55IGxpc3QuCiAgICAgaWYgKCFyZXNvdXJjZS0+bV9pbkxpdmVE
ZWNvZGVkUmVzb3VyY2VzTGlzdCkKQEAgLTY0MSw3ICs2NDEsNyBAQCB2b2lkIENhY2hlOjpyZW1v
dmVGcm9tTGl2ZURlY29kZWRSZXNvdXJjCiAgICAgICAgIG1fbGl2ZURlY29kZWRSZXNvdXJjZXMu
bV9oZWFkID0gbmV4dDsKIH0KIAotdm9pZCBDYWNoZTo6aW5zZXJ0SW5MaXZlRGVjb2RlZFJlc291
cmNlc0xpc3QoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQordm9pZCBNZW1vcnlDYWNoZTo6aW5z
ZXJ0SW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQog
ewogICAgIC8vIE1ha2Ugc3VyZSB3ZSBhcmVuJ3QgaW4gdGhlIGxpc3QgYWxyZWFkeS4KICAgICBB
U1NFUlQoIXJlc291cmNlLT5tX25leHRJbkxpdmVSZXNvdXJjZXNMaXN0ICYmICFyZXNvdXJjZS0+
bV9wcmV2SW5MaXZlUmVzb3VyY2VzTGlzdCAmJiAhcmVzb3VyY2UtPm1faW5MaXZlRGVjb2RlZFJl
c291cmNlc0xpc3QpOwpAQCAtNjY5LDE5ICs2NjksMTkgQEAgdm9pZCBDYWNoZTo6aW5zZXJ0SW5M
aXZlRGVjb2RlZFJlc291cmNlcwogCiB9CiAKLXZvaWQgQ2FjaGU6OmFkZFRvTGl2ZVJlc291cmNl
c1NpemUoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQordm9pZCBNZW1vcnlDYWNoZTo6YWRkVG9M
aXZlUmVzb3VyY2VzU2l6ZShDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCiB7CiAgICAgbV9saXZl
U2l6ZSArPSByZXNvdXJjZS0+c2l6ZSgpOwogICAgIG1fZGVhZFNpemUgLT0gcmVzb3VyY2UtPnNp
emUoKTsKIH0KIAotdm9pZCBDYWNoZTo6cmVtb3ZlRnJvbUxpdmVSZXNvdXJjZXNTaXplKENhY2hl
ZFJlc291cmNlKiByZXNvdXJjZSkKK3ZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZUZyb21MaXZlUmVz
b3VyY2VzU2l6ZShDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCiB7CiAgICAgbV9saXZlU2l6ZSAt
PSByZXNvdXJjZS0+c2l6ZSgpOwogICAgIG1fZGVhZFNpemUgKz0gcmVzb3VyY2UtPnNpemUoKTsK
IH0KIAotdm9pZCBDYWNoZTo6YWRqdXN0U2l6ZShib29sIGxpdmUsIGludCBkZWx0YSkKK3ZvaWQg
TWVtb3J5Q2FjaGU6OmFkanVzdFNpemUoYm9vbCBsaXZlLCBpbnQgZGVsdGEpCiB7CiAgICAgaWYg
KGxpdmUpIHsKICAgICAgICAgQVNTRVJUKGRlbHRhID49IDAgfHwgKChpbnQpbV9saXZlU2l6ZSAr
IGRlbHRhID49IDApKTsKQEAgLTY5Miw3ICs2OTIsNyBAQCB2b2lkIENhY2hlOjphZGp1c3RTaXpl
KGJvb2wgbGl2ZSwgaW50IGRlCiAgICAgfQogfQogCi12b2lkIENhY2hlOjpUeXBlU3RhdGlzdGlj
OjphZGRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSogbykKK3ZvaWQgTWVtb3J5Q2FjaGU6OlR5cGVT
dGF0aXN0aWM6OmFkZFJlc291cmNlKENhY2hlZFJlc291cmNlKiBvKQogewogICAgIGJvb2wgcHVy
Z2VkID0gby0+d2FzUHVyZ2VkKCk7CiAgICAgYm9vbCBwdXJnZWFibGUgPSBvLT5pc1B1cmdlYWJs
ZSgpICYmICFwdXJnZWQ7IApAQCAtNzA1LDcgKzcwNSw3IEBAIHZvaWQgQ2FjaGU6OlR5cGVTdGF0
aXN0aWM6OmFkZFJlc291cmNlKEMKICAgICBwdXJnZWRTaXplICs9IHB1cmdlZCA/IHBhZ2VTaXpl
IDogMDsKIH0KIAotQ2FjaGU6OlN0YXRpc3RpY3MgQ2FjaGU6OmdldFN0YXRpc3RpY3MoKQorTWVt
b3J5Q2FjaGU6OlN0YXRpc3RpY3MgTWVtb3J5Q2FjaGU6OmdldFN0YXRpc3RpY3MoKQogewogICAg
IFN0YXRpc3RpY3Mgc3RhdHM7CiAgICAgQ2FjaGVkUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGUgPSBt
X3Jlc291cmNlcy5lbmQoKTsKQEAgLTczNiw3ICs3MzYsNyBAQCBDYWNoZTo6U3RhdGlzdGljcyBD
YWNoZTo6Z2V0U3RhdGlzdGljcygpCiAgICAgcmV0dXJuIHN0YXRzOwogfQogCi12b2lkIENhY2hl
OjpzZXREaXNhYmxlZChib29sIGRpc2FibGVkKQordm9pZCBNZW1vcnlDYWNoZTo6c2V0RGlzYWJs
ZWQoYm9vbCBkaXNhYmxlZCkKIHsKICAgICBtX2Rpc2FibGVkID0gZGlzYWJsZWQ7CiAgICAgaWYg
KCFtX2Rpc2FibGVkKQpAQCAtNzUxLDcgKzc1MSw3IEBAIHZvaWQgQ2FjaGU6OnNldERpc2FibGVk
KGJvb2wgZGlzYWJsZWQpCiB9CiAKICNpZm5kZWYgTkRFQlVHCi12b2lkIENhY2hlOjpkdW1wU3Rh
dHMoKQordm9pZCBNZW1vcnlDYWNoZTo6ZHVtcFN0YXRzKCkKIHsKICAgICBTdGF0aXN0aWNzIHMg
PSBnZXRTdGF0aXN0aWNzKCk7CiAgICAgcHJpbnRmKCIlLTEzcyAlLTEzcyAlLTEzcyAlLTEzcyAl
LTEzcyAlLTEzcyAlLTEzc1xuIiwgIiIsICJDb3VudCIsICJTaXplIiwgIkxpdmVTaXplIiwgIkRl
Y29kZWRTaXplIiwgIlB1cmdlYWJsZVNpemUiLCAiUHVyZ2VkU2l6ZSIpOwpAQCAtNzY2LDcgKzc2
Niw3IEBAIHZvaWQgQ2FjaGU6OmR1bXBTdGF0cygpCiAgICAgcHJpbnRmKCIlLTEzcyAlLTEzcyAl
LTEzcyAlLTEzcyAlLTEzcyAlLTEzcyAlLTEzc1xuXG4iLCAiLS0tLS0tLS0tLS0tLSIsICItLS0t
LS0tLS0tLS0tIiwgIi0tLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0tLSIsICItLS0tLS0tLS0t
LS0tIiwgIi0tLS0tLS0tLS0tLS0iLCAiLS0tLS0tLS0tLS0tLSIpOwogfQogCi12b2lkIENhY2hl
OjpkdW1wTFJVTGlzdHMoYm9vbCBpbmNsdWRlTGl2ZSkgY29uc3QKK3ZvaWQgTWVtb3J5Q2FjaGU6
OmR1bXBMUlVMaXN0cyhib29sIGluY2x1ZGVMaXZlKSBjb25zdAogewogICAgIHByaW50ZigiTFJV
LVNQIGxpc3RzIGluIGV2aWN0aW9uIG9yZGVyIChLaWxvYnl0ZXMgZGVjb2RlZCwgS2lsb2J5dGVz
IGVuY29kZWQsIEFjY2VzcyBjb3VudCwgUmVmZXJlbmNlZCwgaXNQdXJnZWFibGUsIHdhc1B1cmdl
ZCk6XG4iKTsKIApJbmRleDogV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oCShyZXZpc2lvbiA3
MTQ5NikJKGZyb20gV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGUuaDo3MTQ5NikKKysrIFdlYkNv
cmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
MzUgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1o
ZC5tcGcuZGUpCisgICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciA8bXVlbGxlckBr
ZGUub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBh
bGwgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHlsZSBzaGVldHMg
YW5kIGh0bWwKKyAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9yeSBjYWNoZSBm
b3IgdGhlc2Ugb2JqZWN0cy4KKyovCisKKyNpZm5kZWYgQ2FjaGVfaAorI2RlZmluZSBDYWNoZV9o
CisKKyNpbmNsdWRlICJDYWNoZVBvbGljeS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJsb2FkZXIuaCIKKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgIHsKKworY2xhc3MgQ2Fj
aGVkQ1NTU3R5bGVTaGVldDsKK2NsYXNzIENhY2hlZFJlc291cmNlOworY2xhc3MgQ2FjaGVkUmVz
b3VyY2VMb2FkZXI7CitjbGFzcyBLVVJMOworCisvLyBUaGlzIGNhY2hlIGhvbGRzIHN1YnJlc291
cmNlcyB1c2VkIGJ5IFdlYiBwYWdlczogaW1hZ2VzLCBzY3JpcHRzLCBzdHlsZXNoZWV0cywgZXRj
LgorCisvLyBUaGUgY2FjaGUga2VlcHMgYSBmbGV4aWJsZSBidXQgYm91bmRlZCB3aW5kb3cgb2Yg
ZGVhZCByZXNvdXJjZXMgdGhhdCBncm93cy9zaHJpbmtzIAorLy8gZGVwZW5kaW5nIG9uIHRoZSBs
aXZlIHJlc291cmNlIGxvYWQuIEhlcmUncyBhbiBleGFtcGxlIG9mIGNhY2hlIGdyb3d0aCBvdmVy
IHRpbWUsCisvLyB3aXRoIGEgbWluIGRlYWQgcmVzb3VyY2UgY2FwYWNpdHkgb2YgMjUlIGFuZCBh
IG1heCBkZWFkIHJlc291cmNlIGNhcGFjaXR5IG9mIDUwJToKKworLy8gICAgICAgIHwtLS0tLXwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWFkOiAtCisvLyAgICAgICAgfC0tLS0tLS0t
LS18ICAgICAgICAgICAgICAgICAgICAgICAgIExpdmU6ICsKKy8vICAgICAgLS18LS0tLS0tLS0t
LXwgICAgICAgICAgICAgICAgICAgICAgICAgQ2FjaGUgYm91bmRhcnk6IHwgKG9iamVjdHMgb3V0
c2lkZSB0aGlzIG1hcmsgaGF2ZSBiZWVuIGV2aWN0ZWQpCisvLyAgICAgIC0tfC0tLS0tLS0tLS0r
KysrKysrKysrfAorLy8gLS0tLS0tLXwtLS0tLSsrKysrKysrKysrKysrK3wKKy8vIC0tLS0tLS18
LS0tLS0rKysrKysrKysrKysrKyt8KysrKysKKworLy8gVGhlIGJlaGF2aW9yIG9mIHRoZSBjYWNo
ZSBjaGFuZ2VzIGluIHRoZSBmb2xsb3dpbmcgd2F5IGlmIHNob3VsZE1ha2VSZXNvdXJjZVB1cmdl
YWJsZU9uRXZpY3Rpb24KKy8vIHJldHVybnMgdHJ1ZS4KKy8vCisvLyAxLiBEZWFkIHJlc291cmNl
cyBpbiB0aGUgY2FjaGUgYXJlIGtlcHQgaW4gbm9uLXB1cmdlYWJsZSBtZW1vcnkuCisvLyAyLiBX
aGVuIHdlIHBydW5lIGRlYWQgcmVzb3VyY2VzLCBpbnN0ZWFkIG9mIGZyZWVpbmcgdGhlbSwgd2Ug
bWFyayB0aGVpciBtZW1vcnkgYXMgcHVyZ2VhYmxlIGFuZAorLy8gICAga2VlcCB0aGUgcmVzb3Vy
Y2VzIHVudGlsIHRoZSBrZXJuZWwgcmVjbGFpbXMgdGhlIHB1cmdlYWJsZSBtZW1vcnkuCisvLwor
Ly8gQnkgbGVhdmluZyB0aGUgaW4tY2FjaGUgZGVhZCByZXNvdXJjZXMgaW4gZGlydHkgcmVzaWRl
bnQgbWVtb3J5LCB3ZSBkZWNyZWFzZSB0aGUgbGlrZWxpaG9vZCBvZgorLy8gdGhlIGtlcm5lbCBj
bGFpbWluZyB0aGF0IG1lbW9yeSBhbmQgZm9yY2luZyB1cyB0byByZWZldGNoIHRoZSByZXNvdXJj
ZSAoZm9yIGV4YW1wbGUgd2hlbiBhIHVzZXIKKy8vIHByZXNzZXMgYmFjaykuCisvLworLy8gQW5k
IGJ5IGhhdmluZyBhbiB1bmJvdW5kZWQgbnVtYmVyIG9mIHJlc291cmNlIG9iamVjdHMgdXNpbmcg
cHVyZ2VhYmxlIG1lbW9yeSwgd2UgY2FuIHVzZSBhcyBtdWNoCisvLyBtZW1vcnkgYXMgaXMgYXZh
aWxhYmxlIG9uIHRoZSBtYWNoaW5lLiBUaGUgdHJhZGUtb2ZmIGhlcmUgaXMgdGhhdCB0aGUgQ2Fj
aGVkUmVzb3VyY2Ugb2JqZWN0IChhbmQKKy8vIGl0cyBtZW1iZXIgdmFyaWFibGVzKSBhcmUgYWxs
b2NhdGVkIGluIG5vbi1wdXJnZWFibGUgVEMtbWFsbG9jJ2QgbWVtb3J5IHNvIHdlIHdvdWxkIHNl
ZSBzbGlnaHRseQorLy8gbW9yZSBtZW1vcnkgdXNlIGR1ZSB0byB0aGlzLgorCitjbGFzcyBDYWNo
ZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgZnJpZW5kIENhY2hlKiBjYWNo
ZSgpOworCisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FjaGVkUmVzb3VyY2UqPiBDYWNo
ZWRSZXNvdXJjZU1hcDsKKworICAgIHN0cnVjdCBMUlVMaXN0IHsKKyAgICAgICAgQ2FjaGVkUmVz
b3VyY2UqIG1faGVhZDsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIG1fdGFpbDsKKyAgICAgICAg
TFJVTGlzdCgpIDogbV9oZWFkKDApLCBtX3RhaWwoMCkgeyB9CisgICAgfTsKKworICAgIHN0cnVj
dCBUeXBlU3RhdGlzdGljIHsKKyAgICAgICAgaW50IGNvdW50OworICAgICAgICBpbnQgc2l6ZTsK
KyAgICAgICAgaW50IGxpdmVTaXplOworICAgICAgICBpbnQgZGVjb2RlZFNpemU7CisgICAgICAg
IGludCBwdXJnZWFibGVTaXplOworICAgICAgICBpbnQgcHVyZ2VkU2l6ZTsKKyAgICAgICAgVHlw
ZVN0YXRpc3RpYygpIDogY291bnQoMCksIHNpemUoMCksIGxpdmVTaXplKDApLCBkZWNvZGVkU2l6
ZSgwKSwgcHVyZ2VhYmxlU2l6ZSgwKSwgcHVyZ2VkU2l6ZSgwKSB7IH0KKyAgICAgICAgdm9pZCBh
ZGRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSopOworICAgIH07CisgICAgCisgICAgc3RydWN0IFN0
YXRpc3RpY3MgeworICAgICAgICBUeXBlU3RhdGlzdGljIGltYWdlczsKKyAgICAgICAgVHlwZVN0
YXRpc3RpYyBjc3NTdHlsZVNoZWV0czsKKyAgICAgICAgVHlwZVN0YXRpc3RpYyBzY3JpcHRzOwor
I2lmIEVOQUJMRShYU0xUKQorICAgICAgICBUeXBlU3RhdGlzdGljIHhzbFN0eWxlU2hlZXRzOwor
I2VuZGlmCisgICAgICAgIFR5cGVTdGF0aXN0aWMgZm9udHM7CisgICAgfTsKKworICAgIC8vIFRo
ZSBsb2FkZXIgdGhhdCBmZXRjaGVzIHJlc291cmNlcy4KKyAgICBMb2FkZXIqIGxvYWRlcigpIHsg
cmV0dXJuICZtX2xvYWRlcjsgfQorCisgICAgLy8gUmVxdWVzdCByZXNvdXJjZXMgZnJvbSB0aGUg
Y2FjaGUuICBBIGxvYWQgd2lsbCBiZSBpbml0aWF0ZWQgYW5kIGEgY2FjaGUgb2JqZWN0IGNyZWF0
ZWQgaWYgdGhlIG9iamVjdCBpcyBub3QKKyAgICAvLyBmb3VuZCBpbiB0aGUgY2FjaGUuCisgICAg
Q2FjaGVkUmVzb3VyY2UqIHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZUxvYWRlciosIENh
Y2hlZFJlc291cmNlOjpUeXBlLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNl
dCwgYm9vbCBpc1ByZWxvYWQgPSBmYWxzZSk7CisKKyAgICBDYWNoZWRDU1NTdHlsZVNoZWV0KiBy
ZXF1ZXN0VXNlckNTU1N0eWxlU2hlZXQoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBTdHJp
bmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKKyAgICAKKyAgICB2b2lkIHJldmFsaWRh
dGVSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSosIENhY2hlZFJlc291cmNlTG9hZGVyKik7CisgICAg
dm9pZCByZXZhbGlkYXRpb25TdWNjZWVkZWQoQ2FjaGVkUmVzb3VyY2UqIHJldmFsaWRhdGluZ1Jl
c291cmNlLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgdm9pZCByZXZhbGlkYXRpb25G
YWlsZWQoQ2FjaGVkUmVzb3VyY2UqIHJldmFsaWRhdGluZ1Jlc291cmNlKTsKKyAgICAKKyAgICAv
LyBTZXRzIHRoZSBjYWNoZSdzIG1lbW9yeSBjYXBhY2l0aWVzLCBpbiBieXRlcy4gVGhlc2Ugd2ls
bCBob2xkIG9ubHkgYXBwcm94aW1hdGVseSwgCisgICAgLy8gc2luY2UgdGhlIGRlY29kZWQgY29z
dCBvZiByZXNvdXJjZXMgbGlrZSBzY3JpcHRzIGFuZCBzdHlsZXNoZWV0cyBpcyBub3Qga25vd24u
CisgICAgLy8gIC0gbWluRGVhZEJ5dGVzOiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhh
dCBkZWFkIHJlc291cmNlcyBzaG91bGQgY29uc3VtZSB3aGVuIHRoZSBjYWNoZSBpcyB1bmRlciBw
cmVzc3VyZS4KKyAgICAvLyAgLSBtYXhEZWFkQnl0ZXM6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBi
eXRlcyB0aGF0IGRlYWQgcmVzb3VyY2VzIHNob3VsZCBjb25zdW1lIHdoZW4gdGhlIGNhY2hlIGlz
IG5vdCB1bmRlciBwcmVzc3VyZS4KKyAgICAvLyAgLSB0b3RhbEJ5dGVzOiBUaGUgbWF4aW11bSBu
dW1iZXIgb2YgYnl0ZXMgdGhhdCB0aGUgY2FjaGUgc2hvdWxkIGNvbnN1bWUgb3ZlcmFsbC4KKyAg
ICB2b2lkIHNldENhcGFjaXRpZXModW5zaWduZWQgbWluRGVhZEJ5dGVzLCB1bnNpZ25lZCBtYXhE
ZWFkQnl0ZXMsIHVuc2lnbmVkIHRvdGFsQnl0ZXMpOworCisgICAgLy8gVHVybiB0aGUgY2FjaGUg
b24gYW5kIG9mZi4gIERpc2FibGluZyB0aGUgY2FjaGUgd2lsbCByZW1vdmUgYWxsIHJlc291cmNl
cyBmcm9tIHRoZSBjYWNoZS4gIFRoZXkgbWF5CisgICAgLy8gc3RpbGwgbGl2ZSBvbiBpZiB0aGV5
IGFyZSByZWZlcmVuY2VkIGJ5IHNvbWUgV2ViIHBhZ2UgdGhvdWdoLgorICAgIHZvaWQgc2V0RGlz
YWJsZWQoYm9vbCk7CisgICAgYm9vbCBkaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJs
ZWQ7IH0KKyAgICAKKyAgICB2b2lkIHNldFBydW5lRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9w
cnVuZUVuYWJsZWQgPSBlbmFibGVkOyB9CisgICAgdm9pZCBwcnVuZSgpCisgICAgeworICAgICAg
ICBpZiAobV9saXZlU2l6ZSArIG1fZGVhZFNpemUgPD0gbV9jYXBhY2l0eSAmJiBtX21heERlYWRD
YXBhY2l0eSAmJiBtX2RlYWRTaXplIDw9IG1fbWF4RGVhZENhcGFjaXR5KSAvLyBGYXN0IHBhdGgu
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgcHJ1bmVEZWFkUmVz
b3VyY2VzKCk7IC8vIFBydW5lIGRlYWQgZmlyc3QsIGluIGNhc2UgaXQgd2FzICJib3Jyb3dpbmci
IGNhcGFjaXR5IGZyb20gbGl2ZS4KKyAgICAgICAgcHJ1bmVMaXZlUmVzb3VyY2VzKCk7CisgICAg
fQorCisgICAgdm9pZCBzZXREZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKGRvdWJsZSBp
bnRlcnZhbCkgeyBtX2RlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwgPSBpbnRlcnZhbDsg
fQorICAgIGRvdWJsZSBkZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKCkgY29uc3QgeyBy
ZXR1cm4gbV9kZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsOyB9CisKKyAgICAvLyBSZW1v
dmUgYW4gZXhpc3RpbmcgY2FjaGUgZW50cnkgZnJvbSBib3RoIHRoZSByZXNvdXJjZSBtYXAgYW5k
IGZyb20gdGhlIExSVSBsaXN0LgorICAgIHZvaWQgcmVtb3ZlKENhY2hlZFJlc291cmNlKiByZXNv
dXJjZSkgeyBldmljdChyZXNvdXJjZSk7IH0KKworICAgIHZvaWQgYWRkQ2FjaGVkUmVzb3VyY2VM
b2FkZXIoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqKTsKKyAgICB2b2lkIHJlbW92ZUNhY2hlZFJlc291
cmNlTG9hZGVyKENhY2hlZFJlc291cmNlTG9hZGVyKik7CisKKyAgICBDYWNoZWRSZXNvdXJjZSog
cmVzb3VyY2VGb3JVUkwoY29uc3QgU3RyaW5nJik7CisKKyAgICAvLyBDYWxscyB0byBwdXQgdGhl
IGNhY2hlZCByZXNvdXJjZSBpbnRvIGFuZCBvdXQgb2YgTFJVIGxpc3RzLgorICAgIHZvaWQgaW5z
ZXJ0SW5MUlVMaXN0KENhY2hlZFJlc291cmNlKik7CisgICAgdm9pZCByZW1vdmVGcm9tTFJVTGlz
dChDYWNoZWRSZXNvdXJjZSopOworCisgICAgLy8gQ2FsbGVkIHRvIGFkanVzdCB0aGUgY2FjaGUg
dG90YWxzIHdoZW4gYSByZXNvdXJjZSBjaGFuZ2VzIHNpemUuCisgICAgdm9pZCBhZGp1c3RTaXpl
KGJvb2wgbGl2ZSwgaW50IGRlbHRhKTsKKworICAgIC8vIFRyYWNrIGRlY29kZWQgcmVzb3VyY2Vz
IHRoYXQgYXJlIGluIHRoZSBjYWNoZSBhbmQgcmVmZXJlbmNlZCBieSBhIFdlYiBwYWdlLgorICAg
IHZvaWQgaW5zZXJ0SW5MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QoQ2FjaGVkUmVzb3VyY2UqKTsK
KyAgICB2b2lkIHJlbW92ZUZyb21MaXZlRGVjb2RlZFJlc291cmNlc0xpc3QoQ2FjaGVkUmVzb3Vy
Y2UqKTsKKworICAgIHZvaWQgYWRkVG9MaXZlUmVzb3VyY2VzU2l6ZShDYWNoZWRSZXNvdXJjZSop
OworICAgIHZvaWQgcmVtb3ZlRnJvbUxpdmVSZXNvdXJjZXNTaXplKENhY2hlZFJlc291cmNlKik7
CisKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRNYWtlUmVzb3VyY2VQdXJnZWFibGVPbkV2aWN0aW9u
KCk7CisKKyAgICAvLyBGdW5jdGlvbiB0byBjb2xsZWN0IGNhY2hlIHN0YXRpc3RpY3MgZm9yIHRo
ZSBjYWNoZXMgd2luZG93IGluIHRoZSBTYWZhcmkgRGVidWcgbWVudS4KKyAgICBTdGF0aXN0aWNz
IGdldFN0YXRpc3RpY3MoKTsKKworcHJpdmF0ZToKKyAgICBDYWNoZSgpOworICAgIH5DYWNoZSgp
OyAvLyBOb3QgaW1wbGVtZW50ZWQgdG8gbWFrZSBzdXJlIG5vYm9keSBhY2NpZGVudGFsbHkgY2Fs
bHMgZGVsZXRlIC0tIFdlYkNvcmUgZG9lcyBub3QgZGVsZXRlIHNpbmdsZXRvbnMuCisgICAgICAg
CisgICAgTFJVTGlzdCogbHJ1TGlzdEZvcihDYWNoZWRSZXNvdXJjZSopOworICAgIHZvaWQgcmVz
b3VyY2VBY2Nlc3NlZChDYWNoZWRSZXNvdXJjZSopOworI2lmbmRlZiBOREVCVUcKKyAgICB2b2lk
IGR1bXBTdGF0cygpOworICAgIHZvaWQgZHVtcExSVUxpc3RzKGJvb2wgaW5jbHVkZUxpdmUpIGNv
bnN0OworI2VuZGlmCisKKyAgICB1bnNpZ25lZCBsaXZlQ2FwYWNpdHkoKSBjb25zdDsKKyAgICB1
bnNpZ25lZCBkZWFkQ2FwYWNpdHkoKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHBydW5lRGVhZFJl
c291cmNlcygpOyAvLyBGbHVzaCBkZWNvZGVkIGFuZCBlbmNvZGVkIGRhdGEgZnJvbSByZXNvdXJj
ZXMgbm90IHJlZmVyZW5jZWQgYnkgV2ViIHBhZ2VzLgorICAgIHZvaWQgcHJ1bmVMaXZlUmVzb3Vy
Y2VzKCk7IC8vIEZsdXNoIGRlY29kZWQgZGF0YSBmcm9tIHJlc291cmNlcyBzdGlsbCByZWZlcmVu
Y2VkIGJ5IFdlYiBwYWdlcy4KKworICAgIGJvb2wgbWFrZVJlc291cmNlUHVyZ2VhYmxlKENhY2hl
ZFJlc291cmNlKik7CisgICAgdm9pZCBldmljdChDYWNoZWRSZXNvdXJjZSopOworCisgICAgLy8g
TWVtYmVyIHZhcmlhYmxlcy4KKyAgICBIYXNoU2V0PENhY2hlZFJlc291cmNlTG9hZGVyKj4gbV9j
YWNoZWRSZXNvdXJjZUxvYWRlcnM7CisgICAgTG9hZGVyIG1fbG9hZGVyOworCisgICAgYm9vbCBt
X2Rpc2FibGVkOyAgLy8gV2hldGhlciBvciBub3QgdGhlIGNhY2hlIGlzIGVuYWJsZWQuCisgICAg
Ym9vbCBtX3BydW5lRW5hYmxlZDsKKyAgICBib29sIG1faW5QcnVuZURlYWRSZXNvdXJjZXM7CisK
KyAgICB1bnNpZ25lZCBtX2NhcGFjaXR5OworICAgIHVuc2lnbmVkIG1fbWluRGVhZENhcGFjaXR5
OworICAgIHVuc2lnbmVkIG1fbWF4RGVhZENhcGFjaXR5OworICAgIGRvdWJsZSBtX2RlYWREZWNv
ZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWw7CisKKyAgICB1bnNpZ25lZCBtX2xpdmVTaXplOyAvLyBU
aGUgbnVtYmVyIG9mIGJ5dGVzIGN1cnJlbnRseSBjb25zdW1lZCBieSAibGl2ZSIgcmVzb3VyY2Vz
IGluIHRoZSBjYWNoZS4KKyAgICB1bnNpZ25lZCBtX2RlYWRTaXplOyAvLyBUaGUgbnVtYmVyIG9m
IGJ5dGVzIGN1cnJlbnRseSBjb25zdW1lZCBieSAiZGVhZCIgcmVzb3VyY2VzIGluIHRoZSBjYWNo
ZS4KKworICAgIC8vIFNpemUtYWRqdXN0ZWQgYW5kIHBvcHVsYXJpdHktYXdhcmUgTFJVIGxpc3Qg
Y29sbGVjdGlvbiBmb3IgY2FjaGUgb2JqZWN0cy4gIFRoaXMgY29sbGVjdGlvbiBjYW4gaG9sZAor
ICAgIC8vIG1vcmUgcmVzb3VyY2VzIHRoYW4gdGhlIGNhY2hlZCByZXNvdXJjZSBtYXAsIHNpbmNl
IGl0IGNhbiBhbHNvIGhvbGQgInN0YWxlIiBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBvYmplY3RzIHRo
YXQgYXJlCisgICAgLy8gd2FpdGluZyB0byBkaWUgd2hlbiB0aGUgY2xpZW50cyByZWZlcmVuY2lu
ZyB0aGVtIGdvIGF3YXkuCisgICAgVmVjdG9yPExSVUxpc3QsIDMyPiBtX2FsbFJlc291cmNlczsK
KyAgICAKKyAgICAvLyBMaXN0IGp1c3QgZm9yIGxpdmUgcmVzb3VyY2VzIHdpdGggZGVjb2RlZCBk
YXRhLiAgQWNjZXNzIHRvIHRoaXMgbGlzdCBpcyBiYXNlZCBvZmYgb2YgcGFpbnRpbmcgdGhlIHJl
c291cmNlLgorICAgIExSVUxpc3QgbV9saXZlRGVjb2RlZFJlc291cmNlczsKKyAgICAKKyAgICAv
LyBBIFVSTC1iYXNlZCBtYXAgb2YgYWxsIHJlc291cmNlcyB0aGF0IGFyZSBpbiB0aGUgY2FjaGUg
KGluY2x1ZGluZyB0aGUgZnJlc2hlc3QgdmVyc2lvbiBvZiBvYmplY3RzIHRoYXQgYXJlIGN1cnJl
bnRseSBiZWluZyAKKyAgICAvLyByZWZlcmVuY2VkIGJ5IGEgV2ViIHBhZ2UpLgorICAgIEhhc2hN
YXA8U3RyaW5nLCBDYWNoZWRSZXNvdXJjZSo+IG1fcmVzb3VyY2VzOworfTsKKworaW5saW5lIGJv
b2wgQ2FjaGU6OnNob3VsZE1ha2VSZXNvdXJjZVB1cmdlYWJsZU9uRXZpY3Rpb24oKQoreworI2lm
IFBMQVRGT1JNKElPUykKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNl
OworI2VuZGlmCit9CisKKy8vIEZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgZ2xvYmFsIGNhY2hlLgor
Q2FjaGUqIGNhY2hlKCk7CisKK30KKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL2xvYWRlci9jYWNo
ZS9NZW1vcnlDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9y
eUNhY2hlLmgJKHJldmlzaW9uIDcxNDk2KQorKysgV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5
Q2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsOSArNzEsOSBAQCBjbGFzcyBLVVJMOwogLy8g
aXRzIG1lbWJlciB2YXJpYWJsZXMpIGFyZSBhbGxvY2F0ZWQgaW4gbm9uLXB1cmdlYWJsZSBUQy1t
YWxsb2MnZCBtZW1vcnkgc28gd2Ugd291bGQgc2VlIHNsaWdodGx5CiAvLyBtb3JlIG1lbW9yeSB1
c2UgZHVlIHRvIHRoaXMuCiAKLWNsYXNzIENhY2hlIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK2Ns
YXNzIE1lbW9yeUNhY2hlIDogcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKLSAgICBmcmll
bmQgQ2FjaGUqIGNhY2hlKCk7CisgICAgZnJpZW5kIE1lbW9yeUNhY2hlKiBjYWNoZSgpOwogCiAg
ICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FjaGVkUmVzb3VyY2UqPiBDYWNoZWRSZXNvdXJj
ZU1hcDsKIApAQCAtMTcwLDggKzE3MCw4IEBAIHB1YmxpYzoKICAgICBTdGF0aXN0aWNzIGdldFN0
YXRpc3RpY3MoKTsKIAogcHJpdmF0ZToKLSAgICBDYWNoZSgpOwotICAgIH5DYWNoZSgpOyAvLyBO
b3QgaW1wbGVtZW50ZWQgdG8gbWFrZSBzdXJlIG5vYm9keSBhY2NpZGVudGFsbHkgY2FsbHMgZGVs
ZXRlIC0tIFdlYkNvcmUgZG9lcyBub3QgZGVsZXRlIHNpbmdsZXRvbnMuCisgICAgTWVtb3J5Q2Fj
aGUoKTsKKyAgICB+TWVtb3J5Q2FjaGUoKTsgLy8gTm90IGltcGxlbWVudGVkIHRvIG1ha2Ugc3Vy
ZSBub2JvZHkgYWNjaWRlbnRhbGx5IGNhbGxzIGRlbGV0ZSAtLSBXZWJDb3JlIGRvZXMgbm90IGRl
bGV0ZSBzaW5nbGV0b25zLgogICAgICAgIAogICAgIExSVUxpc3QqIGxydUxpc3RGb3IoQ2FjaGVk
UmVzb3VyY2UqKTsKICAgICB2b2lkIHJlc291cmNlQWNjZXNzZWQoQ2FjaGVkUmVzb3VyY2UqKTsK
QEAgLTIxOCw3ICsyMTgsNyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8U3RyaW5nLCBDYWNoZWRS
ZXNvdXJjZSo+IG1fcmVzb3VyY2VzOwogfTsKIAotaW5saW5lIGJvb2wgQ2FjaGU6OnNob3VsZE1h
a2VSZXNvdXJjZVB1cmdlYWJsZU9uRXZpY3Rpb24oKQoraW5saW5lIGJvb2wgTWVtb3J5Q2FjaGU6
OnNob3VsZE1ha2VSZXNvdXJjZVB1cmdlYWJsZU9uRXZpY3Rpb24oKQogewogI2lmIFBMQVRGT1JN
KElPUykKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIyOCw3ICsyMjgsNyBAQCBpbmxpbmUgYm9vbCBD
YWNoZTo6c2hvdWxkTWFrZVJlc291cmNlUHVyCiB9CiAKIC8vIEZ1bmN0aW9uIHRvIG9idGFpbiB0
aGUgZ2xvYmFsIGNhY2hlLgotQ2FjaGUqIGNhY2hlKCk7CitNZW1vcnlDYWNoZSogY2FjaGUoKTsK
IAogfQogCkluZGV4OiBXZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAJKHJldmlzaW9uIDcxNDk2KQorKysgV2ViQ29y
ZS9wYWdlL0V2ZW50U291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAog
CiAjaW5jbHVkZSAiRXZlbnRTb3VyY2UuaCIKIAotI2luY2x1ZGUgIkNhY2hlLmgiCisjaW5jbHVk
ZSAiTWVtb3J5Q2FjaGUuaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJFdmVu
dC5oIgogI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9uLmgiCkluZGV4OiBXZWJDb3JlL3BhZ2UvU2V0
dGluZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAkocmV2aXNpb24g
NzE0OTYpCisrKyBXZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTQz
LDcgKzE0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gIC0gSFRNTDUvRE9N
IFN0b3JhZ2UKICAgICAgICAgLy8gIC0gSWNvbiBEYXRhYmFzZQogICAgICAgICAvLyAgLSBDb25z
b2xlIE1lc3NhZ2VzCi0gICAgICAgIC8vICAtIENhY2hlCisgICAgICAgIC8vICAtIE1lbW9yeUNh
Y2hlCiAgICAgICAgIC8vICAtIEFwcGxpY2F0aW9uIENhY2hlCiAgICAgICAgIC8vICAtIEJhY2sv
Rm9yd2FyZCBQYWdlIEhpc3RvcnkKICAgICAgICAgLy8gIC0gUGFnZSBTZWFyY2ggUmVzdWx0cwpJ
bmRleDogV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gNzE0OTYpCisrKyBXZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKICNp
bmNsdWRlICJYTUxIdHRwUmVxdWVzdC5oIgogCiAjaW5jbHVkZSAiQmxvYi5oIgotI2luY2x1ZGUg
IkNhY2hlLmgiCisjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKICNpbmNsdWRlICJDcm9zc09yaWdp
bkFjY2Vzc0NvbnRyb2wuaCIKICNpbmNsdWRlICJET01Gb3JtRGF0YS5oIgogI2luY2x1ZGUgIkRP
TUltcGxlbWVudGF0aW9uLmgiCkBAIC02MDAsNyArNjAwLDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVz
dDo6Y3JlYXRlUmVxdWVzdChFeGNlcAogICAgICAgICAgICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRo
aXMpOwogCiAgICAgICAgICAgICAvLyBGb3Igbm93IHdlIHNob3VsZCBvbmx5IGJhbGFuY2UgdGhl
IG5vbkNhY2hlZCByZXF1ZXN0IGNvdW50IGZvciBtYWluLXRocmVhZCBYSFJzIGFuZCBub3QKLSAg
ICAgICAgICAgIC8vIFdvcmtlciBYSFJzLCBhcyB0aGUgQ2FjaGUgaXMgbm90IHRocmVhZC1zYWZl
LgorICAgICAgICAgICAgLy8gV29ya2VyIFhIUnMsIGFzIHRoZSBNZW1vcnlDYWNoZSBpcyBub3Qg
dGhyZWFkLXNhZmUuCiAgICAgICAgICAgICAvLyBUaGlzIHdpbGwgYmVjb21lIGlycmVsZXZhbnQg
YWZ0ZXIgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MTY1IGlzIHJl
c29sdmVkLgogICAgICAgICAgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzV29y
a2VyQ29udGV4dCgpKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTQ5OCkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMTAtMTEtMDcgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5h
bWUgQ2FjaGUgdG8gTWVtb3J5Q2FjaGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ5MTU5CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3Mu
Y3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvbWFjL1dlYlByb2Nlc3NNYWMubW06CisgICAgICAg
ICogV2ViUHJvY2Vzcy93aW4vV2ViUHJvY2Vzc1dpbi5jcHA6CisKIDIwMTAtMTEtMDYgIEJhbGF6
cyBLZWxlbWVuICA8a2JhbGF6c0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFu
ZHJlYXMgS2xpbmcuCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiA3
MTQ5NikKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDksNyArNDksNyBAQAogI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXIuaD4KIAogI2lm
bmRlZiBOREVCVUcKLSNpbmNsdWRlIDxXZWJDb3JlL0NhY2hlLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9NZW1vcnlDYWNoZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR0NDb250cm9sbGVyLmg+CiAjZW5k
aWYKIApJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9tYWMvV2ViUHJvY2Vzc01hYy5tbQkocmV2aXNp
b24gNzE0OTYpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvbWFjL1dlYlByb2Nlc3NNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIK
IAotI2luY2x1ZGUgPFdlYkNvcmUvQ2FjaGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL01lbW9yeUNh
Y2hlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlQ2FjaGUuaD4KICNpbmNsdWRlIDxXZWJLaXRT
eXN0ZW1JbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxhbGdvcml0aG0+CkluZGV4OiBXZWJLaXQyL1dl
YlByb2Nlc3Mvd2luL1dlYlByb2Nlc3NXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2Vi
UHJvY2Vzcy93aW4vV2ViUHJvY2Vzc1dpbi5jcHAJKHJldmlzaW9uIDcxNDk2KQorKysgV2ViS2l0
Mi9XZWJQcm9jZXNzL3dpbi9XZWJQcm9jZXNzV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUs
NyArMjUsNyBAQAogCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogCi0jaW5jbHVkZSA8V2ViQ29y
ZS9DYWNoZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTWVtb3J5Q2FjaGUuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VDYWNoZS5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA3
MTQ5OCkKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxOCBAQAorMjAxMC0xMS0wNyAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmFtZSBD
YWNoZSB0byBNZW1vcnlDYWNoZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDkxNTkKKworICAgICAgICAqIHB1YmxpYy9XZWJDYWNoZS5oOgorICAgICAg
ICAqIHNyYy9XZWJDYWNoZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRvUmVzb3VyY2VUeXBlU3Rh
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNhY2hlOjpzZXRDYXBhY2l0aWVzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ2FjaGU6OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2FjaGU6Omdl
dFVzYWdlU3RhdHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDYWNoZTo6Z2V0UmVzb3VyY2VUeXBl
U3RhdHMpOgorCiAyMDEwLTExLTA3ICBKYXkgQ2l2ZWxsaSAgPGpjaXZlbGxpQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW50IFRhbXVyYS4KSW5kZXg6IFdlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkNhY2hlLmgJKHJldmlzaW9uIDcxNDk2KQorKysgV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgc2l6ZV90IGRlYWRTaXplOwogICAgIH07CiAKLSAgICAvLyBBIHN0cnVjdCBtaXJyb3Jp
bmcgV2ViQ29yZTo6Q2FjaGU6OlR5cGVTdGF0aXN0aWMuCisgICAgLy8gQSBzdHJ1Y3QgbWlycm9y
aW5nIFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpUeXBlU3RhdGlzdGljLgogICAgIHN0cnVjdCBSZXNv
dXJjZVR5cGVTdGF0IHsKICAgICAgICAgc2l6ZV90IGNvdW50OwogICAgICAgICBzaXplX3Qgc2l6
ZTsKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgICAgICBzaXplX3QgZGVjb2RlZFNpemU7
CiAgICAgfTsKIAotICAgIC8vIEEgc3RydWN0IG1pcnJvcmluZyBXZWJDb3JlOjpDYWNoZTo6U3Rh
dGlzdGljcy4KKyAgICAvLyBBIHN0cnVjdCBtaXJyb3JpbmcgV2ViQ29yZTo6TWVtb3J5Q2FjaGU6
OlN0YXRpc3RpY3MuCiAgICAgc3RydWN0IFJlc291cmNlVHlwZVN0YXRzIHsKICAgICAgICAgUmVz
b3VyY2VUeXBlU3RhdCBpbWFnZXM7CiAgICAgICAgIFJlc291cmNlVHlwZVN0YXQgY3NzU3R5bGVT
aGVldHM7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNhY2hlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNhY2hlLmNwcAkocmV2aXNpb24gNzE0OTYpCisr
KyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
MjAgKzMxLDIwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViQ2FjaGUuaCIK
IAotLy8gSW5zdGVhZCBvZiBwcm92aWRpbmcgYWNjZXNzb3JzLCB3ZSBtYWtlIGFsbCBtZW1iZXJz
IG9mIENhY2hlIHB1YmxpYy4KLS8vIFRoaXMgd2lsbCBtYWtlIGl0IGVhc2llciB0byB0cmFjayBX
ZWJDb3JlIGNoYW5nZXMgdG8gdGhlIENhY2hlIGNsYXNzLgotLy8gRklYTUU6IFdlIHNob3VsZCBp
bnRyb2R1Y2UgcHVibGljIGdldHRlcnMgb24gdGhlIENhY2hlIGNsYXNzLgorLy8gSW5zdGVhZCBv
ZiBwcm92aWRpbmcgYWNjZXNzb3JzLCB3ZSBtYWtlIGFsbCBtZW1iZXJzIG9mIE1lbW9yeUNhY2hl
IHB1YmxpYy4KKy8vIFRoaXMgd2lsbCBtYWtlIGl0IGVhc2llciB0byB0cmFjayBXZWJDb3JlIGNo
YW5nZXMgdG8gdGhlIE1lbW9yeUNhY2hlIGNsYXNzLgorLy8gRklYTUU6IFdlIHNob3VsZCBpbnRy
b2R1Y2UgcHVibGljIGdldHRlcnMgb24gdGhlIE1lbW9yeUNhY2hlIGNsYXNzLgogI2RlZmluZSBw
cml2YXRlIHB1YmxpYwotI2luY2x1ZGUgIkNhY2hlLmgiCisjaW5jbHVkZSAiTWVtb3J5Q2FjaGUu
aCIKICN1bmRlZiBwcml2YXRlCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAotLy8gQSBoZWxwZXIgbWV0aG9kIGZvciBjb3ZlcnRpbmcgYSBDYWNoZTo6
VHlwZVN0YXRpc3RpYyB0byBhCisvLyBBIGhlbHBlciBtZXRob2QgZm9yIGNvdmVydGluZyBhIE1l
bW9yeUNhY2hlOjpUeXBlU3RhdGlzdGljIHRvIGEKIC8vIFdlYkNhY2hlOjpSZXNvdXJjZVR5cGVT
dGF0Lgotc3RhdGljIHZvaWQgVG9SZXNvdXJjZVR5cGVTdGF0KGNvbnN0IENhY2hlOjpUeXBlU3Rh
dGlzdGljJiBmcm9tLAorc3RhdGljIHZvaWQgVG9SZXNvdXJjZVR5cGVTdGF0KGNvbnN0IE1lbW9y
eUNhY2hlOjpUeXBlU3RhdGlzdGljJiBmcm9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYkNhY2hlOjpSZXNvdXJjZVR5cGVTdGF0JiB0bykKIHsKICAgICB0by5jb3VudCA9IHN0
YXRpY19jYXN0PHNpemVfdD4oZnJvbS5jb3VudCk7CkBAIC01Niw3ICs1Niw3IEBAIHN0YXRpYyB2
b2lkIFRvUmVzb3VyY2VUeXBlU3RhdChjb25zdCBDYWMKIHZvaWQgV2ViQ2FjaGU6OnNldENhcGFj
aXRpZXMoCiAgICAgc2l6ZV90IG1pbkRlYWRDYXBhY2l0eSwgc2l6ZV90IG1heERlYWRDYXBhY2l0
eSwgc2l6ZV90IGNhcGFjaXR5KQogewotICAgIENhY2hlKiBjYWNoZSA9IFdlYkNvcmU6OmNhY2hl
KCk7CisgICAgTWVtb3J5Q2FjaGUqIGNhY2hlID0gV2ViQ29yZTo6Y2FjaGUoKTsKICAgICBpZiAo
Y2FjaGUpCiAgICAgICAgIGNhY2hlLT5zZXRDYXBhY2l0aWVzKHN0YXRpY19jYXN0PHVuc2lnbmVk
IGludD4obWluRGVhZENhcGFjaXR5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgaW50PihtYXhEZWFkQ2FwYWNpdHkpLApAQCAtNjUsNyArNjUsNyBA
QCB2b2lkIFdlYkNhY2hlOjpzZXRDYXBhY2l0aWVzKAogCiB2b2lkIFdlYkNhY2hlOjpjbGVhcigp
CiB7Ci0gICAgQ2FjaGUqIGNhY2hlID0gV2ViQ29yZTo6Y2FjaGUoKTsKKyAgICBNZW1vcnlDYWNo
ZSogY2FjaGUgPSBXZWJDb3JlOjpjYWNoZSgpOwogICAgIGlmIChjYWNoZSAmJiAhY2FjaGUtPmRp
c2FibGVkKCkpIHsKICAgICAgICAgY2FjaGUtPnNldERpc2FibGVkKHRydWUpOwogICAgICAgICBj
YWNoZS0+c2V0RGlzYWJsZWQoZmFsc2UpOwpAQCAtNzYsNyArNzYsNyBAQCB2b2lkIFdlYkNhY2hl
OjpnZXRVc2FnZVN0YXRzKFVzYWdlU3RhdHMqCiB7CiAgICAgQVNTRVJUKHJlc3VsdCk7CiAKLSAg
ICBDYWNoZSogY2FjaGUgPSBXZWJDb3JlOjpjYWNoZSgpOworICAgIE1lbW9yeUNhY2hlKiBjYWNo
ZSA9IFdlYkNvcmU6OmNhY2hlKCk7CiAgICAgaWYgKGNhY2hlKSB7CiAgICAgICAgIHJlc3VsdC0+
bWluRGVhZENhcGFjaXR5ID0gY2FjaGUtPm1fbWluRGVhZENhcGFjaXR5OwogICAgICAgICByZXN1
bHQtPm1heERlYWRDYXBhY2l0eSA9IGNhY2hlLT5tX21heERlYWRDYXBhY2l0eTsKQEAgLTg5LDkg
Kzg5LDkgQEAgdm9pZCBXZWJDYWNoZTo6Z2V0VXNhZ2VTdGF0cyhVc2FnZVN0YXRzKgogCiB2b2lk
IFdlYkNhY2hlOjpnZXRSZXNvdXJjZVR5cGVTdGF0cyhSZXNvdXJjZVR5cGVTdGF0cyogcmVzdWx0
KQogewotICAgIENhY2hlKiBjYWNoZSA9IFdlYkNvcmU6OmNhY2hlKCk7CisgICAgTWVtb3J5Q2Fj
aGUqIGNhY2hlID0gV2ViQ29yZTo6Y2FjaGUoKTsKICAgICBpZiAoY2FjaGUpIHsKLSAgICAgICAg
Q2FjaGU6OlN0YXRpc3RpY3Mgc3RhdHMgPSBjYWNoZS0+Z2V0U3RhdGlzdGljcygpOworICAgICAg
ICBNZW1vcnlDYWNoZTo6U3RhdGlzdGljcyBzdGF0cyA9IGNhY2hlLT5nZXRTdGF0aXN0aWNzKCk7
CiAgICAgICAgIFRvUmVzb3VyY2VUeXBlU3RhdChzdGF0cy5pbWFnZXMsIHJlc3VsdC0+aW1hZ2Vz
KTsKICAgICAgICAgVG9SZXNvdXJjZVR5cGVTdGF0KHN0YXRzLmNzc1N0eWxlU2hlZXRzLCByZXN1
bHQtPmNzc1N0eWxlU2hlZXRzKTsKICAgICAgICAgVG9SZXNvdXJjZVR5cGVTdGF0KHN0YXRzLnNj
cmlwdHMsIHJlc3VsdC0+c2NyaXB0cyk7CkluZGV4OiBXZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0NoYW5nZUxvZwkocmV2aXNpb24gNzE0OTgpCisrKyBXZWJL
aXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDEwLTEx
LTA3ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIENhY2hlIHRvIE1lbW9yeUNhY2hl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTE1OQor
CisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorCiAyMDEwLTExLTA1ICBOaWNv
bGFzIER1ZnJlc25lICA8bmljb2xhcy5kdWZyZXNuZUBjb2xsYWJvcmEuY28udWs+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgpJbmRleDogV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0d2Vidmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2Vidmlldy5jcHAJKHJldmlzaW9uIDcxNDk2KQorKysgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2Vidmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAKICNpbmNsdWRlICJB
WE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1ZGUg
IkJhY2tGb3J3YXJkTGlzdEltcGwuaCIKLSNpbmNsdWRlICJDYWNoZS5oIgorI2luY2x1ZGUgIk1l
bW9yeUNhY2hlLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50R3RrLmgiCiAjaW5jbHVkZSAiQ2xp
cGJvYXJkVXRpbGl0aWVzR3RrLmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDbGllbnRHdGsuaCIK
SW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hh
bmdlTG9nCShyZXZpc2lvbiA3MTQ5OCkKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMTEtMDcgIEFkYW0gQmFydGggIDxhYmFydGhA
d2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZW5hbWUgQ2FjaGUgdG8gTWVtb3J5Q2FjaGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MTU5CisKKyAgICAgICAgKiBNaXNjL1dlYkNhY2hl
Lm1tOgorICAgICAgICAoK1tXZWJDYWNoZSBzdGF0aXN0aWNzXSk6CisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvV2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnQubW06CisgICAgICAgIChXZWJEZXZp
Y2VPcmllbnRhdGlvbkNsaWVudDo6c2V0Q29udHJvbGxlcik6CisgICAgICAgICogV2ViVmlldy9X
ZWJWaWV3Lm1tOgorCiAyMDEwLTExLTA1ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViS2l0L21h
Yy9NaXNjL1dlYkNhY2hlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvTWlzYy9XZWJDYWNo
ZS5tbQkocmV2aXNpb24gNzE0OTYpCisrKyBXZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0JKHdv
cmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbXBvcnQgIldlYlZpZXcuaCIKICNpbXBv
cnQgIldlYlZpZXdJbnRlcm5hbC5oIgogI2ltcG9ydCA8V2ViQ29yZS9BcHBsaWNhdGlvbkNhY2hl
U3RvcmFnZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9DYWNoZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9N
ZW1vcnlDYWNoZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Dcm9zc09yaWdpblByZWZsaWdodFJlc3Vs
dENhY2hlLmg+CiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJDYWNoZQpAQCAtNDMsNyArNDMsNyBAQCAr
ICh2b2lkKWluaXRpYWxpemUKIAogKyAoTlNBcnJheSAqKXN0YXRpc3RpY3MKIHsKLSAgICBXZWJD
b3JlOjpDYWNoZTo6U3RhdGlzdGljcyBzID0gV2ViQ29yZTo6Y2FjaGUoKS0+Z2V0U3RhdGlzdGlj
cygpOworICAgIFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpTdGF0aXN0aWNzIHMgPSBXZWJDb3JlOjpj
YWNoZSgpLT5nZXRTdGF0aXN0aWNzKCk7CiAKICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRo
T2JqZWN0czoKICAgICAgICAgW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRL
ZXlzOgpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJEZXZpY2VPcmllbnRhdGlv
bkNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkRl
dmljZU9yaWVudGF0aW9uQ2xpZW50Lm1tCShyZXZpc2lvbiA3MTQ5NikKKysrIFdlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnQubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDcgKzQxLDcgQEAgV2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnQ6OldlYkRldmlj
ZU9yaQogdm9pZCBXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudDo6c2V0Q29udHJvbGxlcihEZXZp
Y2VPcmllbnRhdGlvbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIpCiB7CiAgICAgLy8gVGhpcyBpcyBj
YWxsZWQgYnkgdGhlIFBhZ2UgY29uc3RydWN0b3IgYmVmb3JlIG91ciBXZWJWaWV3IGhhcyB0aGUg
cHJvdmlkZXIgc2V0IHVwLgotICAgIC8vIENhY2hlIHRoZSBjb250cm9sbGVyIGZvciBsYXRlciB1
c2UuCisgICAgLy8gTWVtb3J5Q2FjaGUgdGhlIGNvbnRyb2xsZXIgZm9yIGxhdGVyIHVzZS4KICAg
ICBtX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOwogfQogCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5t
bQkocmV2aXNpb24gNzE0OTYpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0Fic3RyYWN0
RGF0YWJhc2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvQmFja0ZvcndhcmRMaXN0SW1wbC5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9DYWNoZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9NZW1vcnlDYWNoZS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9Db2xvck1hYy5oPgogI2ltcG9ydCA8V2ViQ29yZS9DU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvQ3Vyc29yLmg+CkluZGV4OiBXZWJLaXQvcXQvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDcxNDk4
KQorKysgV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBA
CisyMDEwLTExLTA3ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIENhY2hlIHRvIE1l
bW9yeUNhY2hlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00OTE1OQorCisgICAgICAgICogQXBpL3F3ZWJwYWdlLmNwcDoKKyAgICAgICAgKiBBcGkvcXdl
YnNldHRpbmdzLmNwcDoKKwogMjAxMC0xMS0wNyAgQ2hhbmcgU2h1ICA8Y2hhbmcuc2h1QG5va2lh
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbnRvbmlvIEdvbWVzLgpJbmRleDogV2ViS2l0
L3F0L0FwaS9xd2VicGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2VicGFn
ZS5jcHAJKHJldmlzaW9uIDcxNDk2KQorKysgV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNp
bmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oIgogI2luY2x1ZGUgIkJhY2tGb3J3YXJk
TGlzdEltcGwuaCIKLSNpbmNsdWRlICJDYWNoZS5oIgorI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgi
CiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50UXQuaCIKICNpbmNs
dWRlICJDbGllbnRSZWN0LmgiCkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwCShyZXZpc2lvbiA3
MTQ5NikKKysrIFdlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgInF3ZWJwbHVnaW5kYXRhYmFzZV9wLmgiCiAKICNp
bmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgiCi0jaW5jbHVkZSAiQ2FjaGUuaCIKKyNpbmNsdWRl
ICJNZW1vcnlDYWNoZS5oIgogI2luY2x1ZGUgIkNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2Fj
aGUuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCkluZGV4OiBX
ZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL0NoYW5nZUxvZwko
cmV2aXNpb24gNzE0OTgpCisrKyBXZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDEwLTExLTA3ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVu
YW1lIENhY2hlIHRvIE1lbW9yeUNhY2hlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00OTE1OQorCisgICAgICAgICogV2ViQ2FjaGUuY3BwOgorICAgICAg
ICAoV2ViQ2FjaGU6OnN0YXRpc3RpY3MpOgorICAgICAgICAqIFdlYkZyYW1lLmNwcDoKKyAgICAg
ICAgKiBXZWJWaWV3LmNwcDoKKwogMjAxMC0xMS0wNSAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpJbmRleDogV2Vi
S2l0L3dpbi9XZWJDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJDYWNoZS5j
cHAJKHJldmlzaW9uIDcxNDk2KQorKysgV2ViS2l0L3dpbi9XZWJDYWNoZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogI3ByYWdtYSB3YXJuaW5nKHB1c2gsIDApCiAjaW5j
bHVkZSA8V2ViQ29yZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvQ2FjaGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL01lbW9yeUNhY2hlLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmg+CiAjcHJhZ21hIHdhcm5p
bmcocG9wKQogCkBAIC0xMDAsNyArMTAwLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBX
ZWJDYWNoZTo6c3RhdAogICAgIGlmICghcykKICAgICAgICAgcmV0dXJuIFNfT0s7CiAKLSAgICBX
ZWJDb3JlOjpDYWNoZTo6U3RhdGlzdGljcyBzdGF0ID0gV2ViQ29yZTo6Y2FjaGUoKS0+Z2V0U3Rh
dGlzdGljcygpOworICAgIFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpTdGF0aXN0aWNzIHN0YXQgPSBX
ZWJDb3JlOjpjYWNoZSgpLT5nZXRTdGF0aXN0aWNzKCk7CiAKICAgICBzdGF0aWMgQ0ZTdHJpbmdS
ZWYgaW1hZ2VzS2V5ID0gQ0ZTVFIoImltYWdlcyIpOwogICAgIHN0YXRpYyBDRlN0cmluZ1JlZiBz
dHlsZXNoZWV0c0tleSA9IENGU1RSKCJzdHlsZSBzaGVldHMiKTsKSW5kZXg6IFdlYktpdC93aW4v
V2ViRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViRnJhbWUuY3BwCShyZXZp
c2lvbiA3MTQ5NikKKysrIFdlYktpdC93aW4vV2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NSw3ICs1NSw3IEBACiAjaW5jbHVkZSAiV2ViVmlldy5oIgogI3ByYWdtYSB3YXJuaW5nKCBw
dXNoLCAwICkKICNpbmNsdWRlIDxXZWJDb3JlL0JTdHJpbmcuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L0NhY2hlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9NZW1vcnlDYWNoZS5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvRG9jdW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9ET01JbXBsZW1lbnRhdGlvbi5oPgpJbmRleDogV2ViS2l0L3dpbi9X
ZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lv
biA3MTQ5NikKKysrIFdlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5
LDcgKzY5LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0JTdHJpbmcuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0JhY2tGb3J3YXJkTGlzdEltcGwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0JpdG1hcEluZm8u
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0NhY2hlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9NZW1vcnlD
YWNoZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2hyb21lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9D
b250ZXh0TWVudS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29udGV4dE1lbnVDb250cm9sbGVyLmg+
CkluZGV4OiBXZWJLaXQvd3gvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9DaGFu
Z2VMb2cJKHJldmlzaW9uIDcxNDk4KQorKysgV2ViS2l0L3d4L0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEwLTExLTA3ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVuYW1lIENhY2hlIHRvIE1lbW9yeUNhY2hlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTE1OQorCisgICAgICAgICogV2ViVmlldy5jcHA6Cisg
ICAgICAgICh3eFdlYlZpZXc6OlNldENhY2hlUG9saWN5KToKKyAgICAgICAgKiBXZWJWaWV3Lmg6
CisKIDIwMTAtMTEtMDEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KSW5kZXg6IFdlYktpdC93eC9XZWJWaWV3
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvV2ViVmlldy5jcHAJKHJldmlzaW9uIDcxNDk2
KQorKysgV2ViS2l0L3d4L1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMyArMjQs
MTQgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2FjaGUuaCIKKyNp
bmNsdWRlICJXZWJWaWV3LmgiCisKICNpbmNsdWRlICJDb250ZXh0TWVudS5oIgotI2luY2x1ZGUg
IkNvbnRleHRNZW51SXRlbS5oIgogI2luY2x1ZGUgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgor
I2luY2x1ZGUgIkNvbnRleHRNZW51SXRlbS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5j
bHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgorI2luY2x1ZGUgIkVsZW1lbnQu
aCIKICNpbmNsdWRlICJFbXB0eUNsaWVudHMuaCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIK
ICNpbmNsdWRlICJGaWxlQ2hvb3Nlci5oIgpAQCAtNDEsNyArNDIsNyBAQAogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJtYXJrdXAuaCIKKyNpbmNsdWRlICJNZW1vcnlDYWNoZS5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKQEAgLTU2LDYgKzU3LDcgQEAKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN1YnN0aXR1dGVEYXRhLmgiCiAjaW5jbHVkZSAi
VGhyZWFkaW5nLmgiCisjaW5jbHVkZSAibWFya3VwLmgiCiAjaWYgX19XWE1TV19fCiAjaW5jbHVk
ZSAiV2ViQ29yZUluc3RhbmNlSGFuZGxlLmgiCiAjZW5kaWYKQEAgLTg3LDcgKzg5LDYgQEAKICNp
bmNsdWRlICJXZWJET01Ob2RlLmgiCiAKICNpbmNsdWRlICJXZWJGcmFtZS5oIgotI2luY2x1ZGUg
IldlYlZpZXcuaCIKICNpbmNsdWRlICJXZWJWaWV3UHJpdmF0ZS5oIgogCiAjaW5jbHVkZSA8d3gv
ZGVmcy5oPgpAQCAtMjY5LDEyICsyNzAsMTIgQEAgc3RhdGljIHd4V2ViVmlld0NhY2hlUG9saWN5
IGdzX2NhY2hlUG9saQogLyogc3RhdGljICovCiB2b2lkIHd4V2ViVmlldzo6U2V0Q2FjaGVQb2xp
Y3koY29uc3Qgd3hXZWJWaWV3Q2FjaGVQb2xpY3kmIGNhY2hlUG9saWN5KQogewotICAgIFdlYkNv
cmU6OkNhY2hlKiBnbG9iYWxDYWNoZSA9IFdlYkNvcmU6OmNhY2hlKCk7CisgICAgV2ViQ29yZTo6
TWVtb3J5Q2FjaGUqIGdsb2JhbENhY2hlID0gV2ViQ29yZTo6Y2FjaGUoKTsKICAgICBnbG9iYWxD
YWNoZS0+c2V0Q2FwYWNpdGllcyhjYWNoZVBvbGljeS5HZXRNaW5EZWFkQ2FwYWNpdHkoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVBvbGljeS5HZXRNYXhEZWFkQ2FwYWNp
dHkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVBvbGljeS5HZXRDYXBh
Y2l0eSgpKTsKIAotICAgIC8vIHN0b3JlIGEgY29weSBzaW5jZSB0aGVyZSBpcyBubyBnZXR0ZXIg
Zm9yIENhY2hlIHZhbHVlcworICAgIC8vIHN0b3JlIGEgY29weSBzaW5jZSB0aGVyZSBpcyBubyBn
ZXR0ZXIgZm9yIE1lbW9yeUNhY2hlIHZhbHVlcwogICAgIGdzX2NhY2hlUG9saWN5ID0gY2FjaGVQ
b2xpY3k7CiB9CiAKSW5kZXg6IFdlYktpdC93eC9XZWJWaWV3LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L3d4L1dlYlZpZXcuaAkocmV2aXNpb24gNzE0OTYpCisrKyBXZWJLaXQvd3gvV2ViVmlldy5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGV4
dGVybiBXWERMTElNUEVYUF9XRUJLSVQgY29uc3Qgd3hDaGFyKiB3eFdlYlZpZXdOYW1lU3RyOwog
I2VuZGlmCiAKLXN0YXRpYyBjb25zdCBpbnQgZGVmYXVsdENhY2hlQ2FwYWNpdHkgPSA4MTkyICog
MTAyNDsgLy8gbWlycm9ycyBDYWNoZS5jcHAKK3N0YXRpYyBjb25zdCBpbnQgZGVmYXVsdENhY2hl
Q2FwYWNpdHkgPSA4MTkyICogMTAyNDsgLy8gbWlycm9ycyBNZW1vcnlDYWNoZS5jcHAKIAogY2xh
c3MgV1hETExJTVBFWFBfV0VCS0lUIHd4V2ViVmlld0NhY2hlUG9saWN5CiB7Cg==
</data>
<flag name="review"
          id="63596"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>