<?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>231086</bug_id>
          
          <creation_ts>2021-10-01 10:56:53 -0700</creation_ts>
          <short_desc>Begin migration from WTF::Variant to std::variant</short_desc>
          <delta_ts>2021-10-12 08:47:33 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>alecflett</cc>
    
    <cc>andresg_22</cc>
    
    <cc>apinheiro</cc>
    
    <cc>beidson</cc>
    
    <cc>benjamin</cc>
    
    <cc>berto</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>cgarcia</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>eocanha</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>galpeter</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>hta</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>joepeck</cc>
    
    <cc>jsbell</cc>
    
    <cc>kangil.han</cc>
    
    <cc>keith_miller</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>macpherson</cc>
    
    <cc>mark.lam</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>msaboff</cc>
    
    <cc>pangle</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>pnormand</cc>
    
    <cc>rbuis</cc>
    
    <cc>saam</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sergio</cc>
    
    <cc>svillar</cc>
    
    <cc>tommyw</cc>
    
    <cc>tzagallo</cc>
    
    <cc>vjaquez</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1799401</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-10-01 10:56:53 -0700</bug_when>
    <thetext>Begin migration from WTF::Variant to std::variant</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799402</commentid>
    <comment_count>1</comment_count>
      <attachid>439878</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-10-01 10:57:52 -0700</bug_when>
    <thetext>Created attachment 439878
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799571</commentid>
    <comment_count>2</comment_count>
      <attachid>439916</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-10-01 15:08:42 -0700</bug_when>
    <thetext>Created attachment 439916
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799613</commentid>
    <comment_count>3</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-10-01 16:26:09 -0700</bug_when>
    <thetext>I&apos;d appreciate it if someone could get this compiling on Windows and/or Linux.  I think I&apos;ve done the bulk of the work, but this is a bit much for iterating on EWS.  The biggest thing was that visitor lambdas need to return the exact same type now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799913</commentid>
    <comment_count>4</comment_count>
      <attachid>440020</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-10-03 14:54:33 -0700</bug_when>
    <thetext>Created attachment 440020
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799936</commentid>
    <comment_count>5</comment_count>
      <attachid>440027</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-10-03 17:15:52 -0700</bug_when>
    <thetext>Created attachment 440027
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800098</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-10-04 10:07:42 -0700</bug_when>
    <thetext>Thanks, Fujii.  I added some linux developers who have recently contributed to WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800201</commentid>
    <comment_count>7</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2021-10-04 13:26:28 -0700</bug_when>
    <thetext>GTK diff: http://sprunge.us/7UCiuf</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800219</commentid>
    <comment_count>8</comment_count>
      <attachid>440103</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-10-04 14:12:12 -0700</bug_when>
    <thetext>Created attachment 440103
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800293</commentid>
    <comment_count>9</comment_count>
      <attachid>440123</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-10-04 16:39:22 -0700</bug_when>
    <thetext>Created attachment 440123
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800654</commentid>
    <comment_count>10</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-10-05 11:13:32 -0700</bug_when>
    <thetext>split most of this out into https://bugs.webkit.org/show_bug.cgi?id=231239</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802159</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-10-08 10:57:32 -0700</bug_when>
    <thetext>&lt;rdar://problem/84034814&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1802911</commentid>
    <comment_count>12</comment_count>
      <attachid>440867</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-10-11 18:04:10 -0700</bug_when>
    <thetext>Created attachment 440867
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1803139</commentid>
    <comment_count>13</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-10-12 08:47:19 -0700</bug_when>
    <thetext>Committed r283982 (242828@main): &lt;https://commits.webkit.org/242828@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 440867.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439878</attachid>
            <date>2021-10-01 10:57:52 -0700</date>
            <delta_ts>2021-10-01 15:08:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231086-20211001105751.patch</filename>
            <type>text/plain</type>
            <size>194380</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzMzU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
MTJjZmE5MTNmMzdiZDdiMGVjYzQ3N2QzMWRjMGMwMmE5MGVhMjE4Li4zZmUwZGUyYzhkNGUwYTk4
YmU5ODYxNzA5Y2I3ZjM2NjNiOThiZDU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NiBAQAorMjAyMS0xMC0wMSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3
ZWJraXQub3JnPgorCisgICAgICAgIEJlZ2luIG1pZ3JhdGlvbiBmcm9tIFdURjo6VmFyaWFudCB0
byBzdGQ6OnZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzMTA4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHA6Cisg
ICAgICAgIChKU0M6OldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hwb2lu
dCk6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJl
UmVmZXJlbmNlQW5kSW5zdGFsbFdhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpXYXRjaHBvaW50
c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDYWxsRE9NKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlI
ZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZlZhbHVl
KToKKyAgICAgICAgKiBqaXQvU25pcHBldFJlZy5oOgorICAgICAgICAoSlNDOjpTbmlwcGV0UmVn
OjpncHIgY29uc3QpOgorICAgICAgICAoSlNDOjpTbmlwcGV0UmVnOjpmcHIgY29uc3QpOgorICAg
ICAgICAoSlNDOjpTbmlwcGV0UmVnOjpqc1ZhbHVlUmVncyBjb25zdCk6CisgICAgICAgICoganNj
LmNwcDoKKyAgICAgICAgKEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgICogcGFy
c2VyL0xleGVyLmNwcDoKKyAgICAgICAgKEpTQzo6TGV4ZXI8VD46OnBhcnNlSGV4KToKKyAgICAg
ICAgKEpTQzo6TGV4ZXI8VD46OnBhcnNlQmluYXJ5KToKKyAgICAgICAgKEpTQzo6TGV4ZXI8VD46
OnBhcnNlT2N0YWwpOgorICAgICAgICAoSlNDOjpMZXhlcjxUPjo6cGFyc2VEZWNpbWFsKToKKyAg
ICAgICAgKEpTQzo6TGV4ZXI8VD46OmxleFdpdGhvdXRDbGVhcmluZ0xpbmVUZXJtaW5hdG9yKToK
KyAgICAgICAgKiBwYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5jcHA6CisgICAgICAgIChKU0M6
OkNvbXBhY3RURFpFbnZpcm9ubWVudDo6dG9URFpFbnZpcm9ubWVudFNsb3cgY29uc3QpOgorICAg
ICAgICAqIHBhcnNlci9WYXJpYWJsZUVudmlyb25tZW50Lmg6CisgICAgICAgIChKU0M6OkNvbXBh
Y3RURFpFbnZpcm9ubWVudDo6dG9URFpFbnZpcm9ubWVudCBjb25zdCk6CisgICAgICAgICogcnVu
dGltZS9DYWNoZVBheWxvYWQuY3BwOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6OmRhdGEg
Y29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6OnNpemUgY29uc3QpOgorICAgICAg
ICAqIHJ1bnRpbWUvQ2FjaGVVcGRhdGUuY3BwOgorICAgICAgICAoSlNDOjpDYWNoZVVwZGF0ZTo6
Q2FjaGVVcGRhdGUpOgorICAgICAgICAoSlNDOjpDYWNoZVVwZGF0ZTo6aXNHbG9iYWwgY29uc3Qp
OgorICAgICAgICAoSlNDOjpDYWNoZVVwZGF0ZTo6YXNHbG9iYWwgY29uc3QpOgorICAgICAgICAo
SlNDOjpDYWNoZVVwZGF0ZTo6YXNGdW5jdGlvbiBjb25zdCk6CisgICAgICAgICogcnVudGltZS9D
YWNoZWRUeXBlcy5jcHA6CisgICAgICAgIChKU0M6OkNhY2hlZENvbXBhY3RURFpFbnZpcm9ubWVu
dDo6ZW5jb2RlKToKKyAgICAgICAgKiBydW50aW1lL1RlbXBvcmFsVGltZVpvbmUuY3BwOgorICAg
ICAgICAoSlNDOjpUZW1wb3JhbFRpbWVab25lOjpjcmVhdGVGcm9tSUQpOgorICAgICAgICAoSlND
OjpUZW1wb3JhbFRpbWVab25lOjpjcmVhdGVGcm9tVVRDT2Zmc2V0KToKKyAgICAgICAgKiB3YXNt
L1dhc21MTEludEdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJh
dG9yOjpDb250cm9sVHlwZTo6aXNJZik6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50R2VuZXJh
dG9yOjpDb250cm9sVHlwZTo6aXNUb3BMZXZlbCk6CisgICAgICAgIChKU0M6Oldhc206OkxMSW50
R2VuZXJhdG9yOjpDb250cm9sVHlwZTo6dGFyZ2V0TGFiZWxGb3JCcmFuY2ggY29uc3QpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRvcjo6Q29udHJvbFR5cGU6OmJyYW5jaFRhcmdl
dEFyaXR5IGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJbnRHZW5lcmF0b3I6OkNvbnRy
b2xUeXBlOjpicmFuY2hUYXJnZXRUeXBlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TExJ
bnRHZW5lcmF0b3I6OmFkZEVsc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpMTEludEdlbmVyYXRv
cjo6YWRkRWxzZVRvVW5yZWFjaGFibGUpOgorCiAyMDIxLTA5LTMwICBZdXN1a2UgU3V6dWtpICA8
eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgVXBncmFkZSBHQ0MgcmVxdWlyZW1lbnQgdG8g
OC4zLjAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFu
Z2VMb2cKaW5kZXggOWViM2U1NjBmNjgyMTEyMzcyZTEwNzI4M2M0YjRiNGRkNDA5NzJlMy4uZDc4
ZTA2NjQwZmI3YzgwNDE4N2QyMmRmOTc4NjM2NDRlNjFiZDU5YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NSBA
QAorMjAyMS0xMC0wMSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3Jn
PgorCisgICAgICAgIEJlZ2luIG1pZ3JhdGlvbiBmcm9tIFdURjo6VmFyaWFudCB0byBzdGQ6OnZh
cmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
MTA4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
d3RmL0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvSGFzaGVyLmg6CisgICAgICAgIChXVEY6OmFk
ZCk6CisgICAgICAgICogd3RmL0xpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0Lmg6CisgICAg
ICAgIChXVEY6Okxpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0OjppdGVyYXRvcjo6b3BlcmF0
b3IqIGNvbnN0KToKKyAgICAgICAgKiB3dGYvVmFyaWFudC5oOgorICAgICAgICAoV1RGOjpzd2l0
Y2hPbik6CisgICAgICAgIChXVEY6OmluX3BsYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6Ol9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6PSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fdmFyaWFudF9z
dG9yYWdlOjpfX2dldCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fdmFyaWFudF9zdG9yYWdl
OjpfX2dldF9ycmVmKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X192YXJpYW50X3N0b3JhZ2U6
Ol9fZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fc3RvcmFnZV93cmFwcGVyOjpf
X2NvbnN0cnVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fc3RvcmFnZV93cmFwcGVyOjpf
X3N0b3JhZ2Vfd3JhcHBlcik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fc3RvcmFnZV93cmFw
cGVyOjpfX2dldCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fc3RvcmFnZV93cmFwcGVyOjpf
X2dldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fc3RvcmFnZV93cmFwcGVyOjpf
X2Rlc3Ryb3kpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjxfVHlw
ZTo6X19zdG9yYWdlX3dyYXBwZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vf
d3JhcHBlcjxfVHlwZTo6X19nZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vf
d3JhcHBlcjxfVHlwZTo6X19nZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3Zh
cmlhbnRfYmFzZTo6fl9fdmFyaWFudF9iYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19i
YWNrdXBfc3RvcmFnZV9vcHM6Ol9fbW92ZV9jb25zdHJ1Y3RfZnVuYyk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Ol9fYmFja3VwX3N0b3JhZ2Vfb3BzOjpfX2Rlc3Ryb3lfZnVuYyk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6Ol9fYmFja3VwX3N0b3JhZ2U6Ol9fYmFja3VwX3N0b3JhZ2UpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpfX2JhY2t1cF9zdG9yYWdlOjpfX2Rlc3Ryb3kpOiBEZWxldGVk
LgorICAgICAgICAoV1RGOjpfX2JhY2t1cF9zdG9yYWdlOjp+X19iYWNrdXBfc3RvcmFnZSk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OlZhcmlhbnQ8Pjo6c3dhcCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6Ol9fTk9FWENFUFRfKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X192YXJpYW50X2Fj
Y2Vzc29yOjpnZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpnZXQpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpnZXRfaWYpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3Zpc2l0b3JfdGFi
bGU6Ol9fdHJhbXBvbGluZV9mdW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dmlzaXQpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpfX2FyZ19zZWxlY3Rvcik6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6Ol9fdmlzaXRfaGVscGVyMjo6X192aXNpdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpvcGVyYXRvciE9KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6b3BlcmF0b3I8KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6b3Bl
cmF0b3I+KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6b3BlcmF0b3I+PSk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Om9wZXJhdG9yPD0pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX2hhc2hf
dmlzaXRvcjo6b3BlcmF0b3IoKSk6IERlbGV0ZWQuCisKIDIwMjEtMDktMzAgIFNpaHVpIExpdSAg
PHNpaHVpX2xpdUBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBGaWxlIFN5c3RlbSBBY2Nlc3Mg
QVBJIGF2YWlsYWJsZSBpbiBXb3JrZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiMWZhMDBmZTdjYzA4MWRmM2M5
OTAyZjdkNTk3YmQ5ZDM3Njg4OTdmLi41MjllNzZmNDU0YzBjOTVhYjg3MWEyZWQ4MDY1OGJlM2M1
MTZhZDE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQyIEBACisyMDIxLTEwLTAxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQmVnaW4gbWln
cmF0aW9uIGZyb20gV1RGOjpWYXJpYW50IHRvIHN0ZDo6dmFyaWFudAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMDg2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisK
KyAgICAgICAgKiBNb2R1bGVzL2FwcGxlcGF5L3BheW1lbnRyZXF1ZXN0L0FwcGxlUGF5UGF5bWVu
dEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGVQYXlQYXltZW50SGFuZGxlcjo6
aGFuZGxlc0lkZW50aWZpZXIpOgorICAgICAgICAqIE1vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0Ns
aXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xp
cGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZTo6aW52b2tlQ29tcGxldGlvbkhhbmRsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZTo6Q2xpcGJv
YXJkSXRlbVR5cGVMb2FkZXI6OnNhbml0aXplRGF0YUlmTmVlZGVkKToKKyAgICAgICAgKiBNb2R1
bGVzL2NhY2hlL0RPTUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUNhY2hlOjpyZXF1
ZXN0RnJvbUluZm8pOgorICAgICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmlzQmxvYiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGZXRjaEJvZHk6OmlzRm9ybURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hC
b2R5Ojppc0FycmF5QnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6
aXNBcnJheUJ1ZmZlclZpZXcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojpp
c1VSTFNlYXJjaFBhcmFtcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6Omlz
VGV4dCBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZmlsbEhlYWRlck1hcCk6CisgICAgICAgICogTW9kdWxlcy9mZXRj
aC9GZXRjaFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hSZXF1ZXN0OjpjcmVh
dGUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJDdXJzb3I6OmNvbnRpbnVlUHJpbWFyeUtleSk6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0
YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
Ojp0cmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KToK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQlJlcXVlc3Q6OnJlcXVlc3RlZEluZGV4UmVjb3JkVHlwZSBjb25zdCk6CisgICAg
ICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSVENQZWVyQ29ubmVjdGlvbjo6YWRkVHJhbnNjZWl2ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Y2VydGlmaWNhdGVUeXBlRnJvbUFsZ29yaXRobUlkZW50aWZpZXIpOgorICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRwU0ZyYW1lVHJhbnNmb3JtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJUQ1J0cFNGcmFtZVRyYW5zZm9ybTo6c2V0RW5jcnlwdGlvbktleSk6Cisg
ICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDUnRwU2VuZGVy
QmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBh
bmltYXRpb24vQW5pbWF0aW9uRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlv
bkVmZmVjdDo6dXBkYXRlVGltaW5nKToKKyAgICAgICAgKiBhbmltYXRpb24vS2V5ZnJhbWVFZmZl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cHJvY2Vzc0l0ZXJhYmxlS2V5ZnJhbWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OnByb2Nlc3NQcm9wZXJ0eUluZGV4ZWRLZXlmcmFtZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6S2V5ZnJhbWVFZmZlY3Q6OmNyZWF0ZSk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSURCQmluZGluZ1V0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbmplY3RJREJL
ZXlJbnRvU2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6bWF5YmVDcmVhdGVJREJLZXlG
cm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbkluamVjdElE
QktleUludG9TY3JpcHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVLZXlQYXRoQXJy
YXkpOgorICAgICAgICAoV2ViQ29yZTo6ZGVzZXJpYWxpemVJREJWYWx1ZVdpdGhLZXlJbmplY3Rp
b24pOgorICAgICAgICAqIGNyeXB0by9TdWJ0bGVDcnlwdG8uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6bm9ybWFsaXplQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyk6CisgICAgICAgICogY3NzL0NT
U0N1c3RvbVByb3BlcnR5VmFsdWUuaDoKKyAgICAgICAgKiBjc3MvU3R5bGVSdWxlLmg6CisgICAg
ICAgICogZG9tL0RvY3VtZW50TWFya2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1h
cmtlcjo6ZGVzY3JpcHRpb24gY29uc3QpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNjcm9sbEludG9WaWV3KToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6OmFuaW1hdGUpOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5o
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6aGFzTWVkaWFTdHJlYW1TcmNP
YmplY3QgY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRDb2xvciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50IGNvbnN0KToKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9DYW52YXNTdHlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
U3R5bGU6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6Omlz
Q3VycmVudENvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjpjYW52
YXNHcmFkaWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6Y2FudmFz
UGF0dGVybiBjb25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTY29wZWRTaGFkZXJQcm9n
cmFtSGlnaGxpZ2h0OjpzYXZlQmxlbmRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JTY29wZWRTaGFkZXJQcm9ncmFtSGlnaGxpZ2h0OjpoYXNCdWZmZXJCaW5kaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclNjb3BlZFNoYWRlclByb2dyYW1IaWdobGlnaHQ6Omhhc0Zy
YW1lYnVmZmVyUGFyYW1ldGVyQXR0YWNobWVudCk6CisgICAgICAgICogaHRtbC90cmFjay9WVFRD
dWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VlRUQ3VlOjpzZXRMaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OlZUVEN1ZTo6c2V0UG9zaXRpb24pOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlv
bi9MYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXRJbnRlZ3JhdGlvbjo6UGF0aFJ1bjo6bGVnYWN5SW5saW5lQm94IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpQYXRoUnVuOjppbmxpbmVCb3ggY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRhLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmNvcHlQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEN1
c3RvbURhdGE6OnJlYWRCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2Fy
ZEN1c3RvbURhdGE6OnJlYWRTdHJpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVi
b2FyZEN1c3RvbURhdGE6OmZvckVhY2hQbGF0Zm9ybVN0cmluZyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpQYXN0ZWJvYXJkQ3VzdG9tRGF0YTo6Zm9yRWFjaFBsYXRmb3JtU3RyaW5nT3JCdWZm
ZXIgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OnRha2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmNvbnRhaW5zTWFwcGVkRmlsZURhdGEgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0RlY29kaW5nT3B0aW9ucy5oOgorICAgICAgICAo
V2ViQ29yZTo6RGVjb2RpbmdPcHRpb25zOjpoYXMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL1BhdGguaDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6Omhhc0lubGluZURhdGEg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVG
aWxsR3JhZGllbnQ6OlNldElubGluZUZpbGxHcmFkaWVudCk6CisgICAgICAgICogcGxhdGZvcm0v
aW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUl0
ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkxpc3QpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QbGF0
Zm9ybVBhc3RlYm9hcmRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9h
cmQ6OndyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVBhc3RlYm9hcmRJdGVtKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tNZWRpYURldmljZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6TW9ja01lZGlhRGV2aWNlOjppc01pY3JvcGhvbmUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TW9ja01lZGlhRGV2aWNlOjppc1NwZWFrZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TW9ja01lZGlhRGV2aWNlOjppc0NhbWVyYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNb2Nr
TWVkaWFEZXZpY2U6OmlzRGlzcGxheSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vbW9jay9N
b2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb2NrUmVhbHRp
bWVWaWRlb1NvdXJjZTo6bW9ja0Rpc3BsYXlUeXBlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpNb2Nr
UmVhbHRpbWVWaWRlb1NvdXJjZTo6bW9ja0NhbWVyYSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZTo6bW9ja0Rpc3BsYXkgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvRE5TLmg6CisgICAgICAgIChXZWJDb3JlOjpJUEFkZHJlc3M6Omlz
SVB2NCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJUEFkZHJlc3M6OmlzSVB2NiBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGb3JtRGF0YTo6YXBwZW5kTXVsdGlQYXJ0S2V5VmFsdWVQYWlySXRlbXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZE5vbk11bHRpUGFydEtleVZhbHVlUGFpckl0ZW1z
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpjb250YWluc0Jsb2JFbGVtZW50IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphc1NoYXJlZEJ1ZmZlciBjb25zdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6Omhhc1VwbG9hZCBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0veHIvUGxhdGZvcm1YUi5oOgorICAgICAgICAoUGxhdGZvcm1YUjo6RGV2
aWNlOjpGcmFtZURhdGE6OlZpZXc6OmVuY29kZSBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJsb2NrRmxvdy5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93Ojpo
YXNMaW5lTGF5b3V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6
aGFzTGVnYWN5TGluZUxheW91dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
a0Zsb3c6Omhhc01vZGVybkxpbmVMYXlvdXQgY29uc3QpOgorICAgICAgICAqIHN0eWxlL1N0eWxl
QnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlcjo6YXBwbHlDdXN0
b21Qcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlcjo6YXBwbHlQcm9w
ZXJ0eSk6CisgICAgICAgICogd29ya2Vycy9zZXJ2aWNlL2NvbnRleHQvU2VydmljZVdvcmtlclRo
cmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlV29ya2VyVGhyZWFkOjpxdWV1ZVRh
c2tUb1Bvc3RNZXNzYWdlKToKKyAgICAgICAgKiB3b3JrZXJzL3NlcnZpY2Uvc2VydmVyL1NXU2Vy
dmVySm9iUXVldWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1dTZXJ2ZXJKb2JRdWV1ZTo6Y2Fu
Y2VsSm9ic0Zyb21TZXJ2aWNlV29ya2VyKToKKwogMjAyMS0wOS0zMCAgU2ltb24gRnJhc2VyICA8
c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5hbWUgc25hcFJ1YmJlckJhbmQo
KSB0byBoYXZlIGEgY2xlYXJlciBuYW1lCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGFiZThmNjdlZjVmMGZmMzFkNzY3
MGMxZDE1OGI2YzM5NTc3MmI1OGIuLjVmYWZkY2RkNWUzNDQ3NmIzN2JmMWIwMTliNjZmZWJkZWEw
NDZhMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMjEtMTAtMDEgIEFsZXggQ2hyaXN0
ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBCZWdpbiBtaWdyYXRp
b24gZnJvbSBXVEY6OlZhcmlhbnQgdG8gc3RkOjp2YXJpYW50CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEwODYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2Rl
cnMuY3BwOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFBhc3RlYm9hcmRDdXN0b21EYXRh
OjpFbnRyeT46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8SURCS2V5UGF0
aD46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8U2VydmljZVdvcmtlck9y
Q2xpZW50RGF0YT46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8U2Vydmlj
ZVdvcmtlck9yQ2xpZW50SWRlbnRpZmllcj46OmVuY29kZSk6CisgICAgICAgICogU2hhcmVkL1dl
YlByZWZlcmVuY2VzU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0Ojp2YWx1ZUZvcktleSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL1Byb2Nlc3NUaHJvdHRsZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpQcm9jZXNzVGhyb3R0bGVyOjppc1ZhbGlkQmFja2dyb3VuZEFjdGl2aXR5KToKKyAgICAgICAg
KFdlYktpdDo6UHJvY2Vzc1Rocm90dGxlcjo6aXNWYWxpZEZvcmVncm91bmRBY3Rpdml0eSk6Cisg
ICAgICAgIChXZWJLaXQ6OlByb2Nlc3NUaHJvdHRsZXI6OlRpbWVkQWN0aXZpdHk6OnVwZGF0ZVRp
bWVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRv
ci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkF1dGhlbnRpY2F0b3I6OmhhbmRsZVJlcXVlc3QpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yTWFuYWdl
ci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvcmU6OmdldFJwSWQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb3JlOjpnZXRVc2VyTmFtZSk6CisgICAgICAgIChXZWJLaXQ6OkF1dGhlbnRpY2F0
b3JNYW5hZ2VyOjpyZXNwb25kUmVjZWl2ZWQpOgorICAgICAgICAoV2ViS2l0OjpBdXRoZW50aWNh
dG9yTWFuYWdlcjo6aW52b2tlUGVuZGluZ0NvbXBsZXRpb25IYW5kbGVyKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vV2ViQXV0aGVudGljYXRpb25SZXF1ZXN0RGF0YS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OmdldENsaWVudERhdGFUeXBlKToKKyAgICAgICAgKFdlYktp
dDo6Z2V0VXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50KToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNyZWF0ZSk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFy
ZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJT
aGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlTWFwcGVkSU9TdXJmYWNlQmFj
a2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlTWFwcGVkSU9T
dXJmYWNlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1N0b3JhZ2UvV2Vi
U2VydmljZVdvcmtlckZldGNoVGFza0NsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNl
cnZpY2VXb3JrZXJGZXRjaFRhc2tDbGllbnQ6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Lm1tOgor
ICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHk6OnJlbW92ZUFubm90
YXRpb25SZWxhdGl2ZVRvU2VsZWN0aW9uKToKKwogMjAyMS0wOS0zMCAgU2FtIFdlaW5pZyAgPHdl
aW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGR1bXBpbmcgZm9yIFVJVmlld3Mgd2l0aCBz
ZXBhcmF0ZWQgbGF5ZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAKaW5kZXgg
NDY3ODQ2Yzg1NDQ4MDljMDFjNDg2ODUzODI5YTliMDdlOGM1MTRkNC4uNGI4YjJiNzUxOGZiODZk
MmQ0YjdjZGM1ZWNhYjY2NmU1YTZmYWM1MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBv
aW50LmNwcApAQCAtNjUsOSArNjUsOSBAQCBpbmxpbmUgYm9vbCBXYXRjaHBvaW50c09uU3RydWN0
dXJlU3R1YkluZm86OmlzVmFsaWQoKSBjb25zdAogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJ
bmZvOjpOb2RlJiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmFkZFdhdGNocG9pbnQo
Y29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKIHsKICAgICBpZiAoIWtleSB8fCBr
ZXkuY29uZGl0aW9uKCkua2luZCgpICE9IFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZSkK
LSAgICAgICAgcmV0dXJuICptX3dhdGNocG9pbnRzLmFkZChXVEY6OmluX3BsYWNlPFN0cnVjdHVy
ZVRyYW5zaXRpb25TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50Piwga2V5LCAqdGhpcyk7
CisgICAgICAgIHJldHVybiAqbV93YXRjaHBvaW50cy5hZGQoc3RkOjppbl9wbGFjZV90eXBlPFN0
cnVjdHVyZVRyYW5zaXRpb25TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50Piwga2V5LCAq
dGhpcyk7CiAgICAgQVNTRVJUKGtleS5jb25kaXRpb24oKS5raW5kKCkgPT0gUHJvcGVydHlDb25k
aXRpb246OkVxdWl2YWxlbmNlKTsKLSAgICByZXR1cm4gKm1fd2F0Y2hwb2ludHMuYWRkKFdURjo6
aW5fcGxhY2U8QWRhcHRpdmVWYWx1ZVN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+LCBr
ZXksICp0aGlzKTsKKyAgICByZXR1cm4gKm1fd2F0Y2hwb2ludHMuYWRkKHN0ZDo6aW5fcGxhY2Vf
dHlwZTxBZGFwdGl2ZVZhbHVlU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4sIGtleSwg
KnRoaXMpOwogfQogCiB2b2lkIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJl
UmVmZXJlbmNlQW5kSW5zdGFsbFdhdGNocG9pbnQoCkBAIC04NCwxMCArODQsMTAgQEAgdm9pZCBX
YXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJlZmVyZW5jZUFuZEluc3RhbGxX
YXRjaHBvaW50KAogICAgIEFTU0VSVCghIWtleSk7CiAgICAgYXV0byYgd2F0Y2hwb2ludFZhcmlh
bnQgPSBob2xkZXJSZWYtPmFkZFdhdGNocG9pbnQoa2V5KTsKICAgICBpZiAoa2V5LmtpbmQoKSA9
PSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2UpIHsKLSAgICAgICAgYXV0byYgYWRhcHRp
dmVXYXRjaHBvaW50ID0gV1RGOjpnZXQ8QWRhcHRpdmVWYWx1ZVN0cnVjdHVyZVN0dWJDbGVhcmlu
Z1dhdGNocG9pbnQ+KHdhdGNocG9pbnRWYXJpYW50KTsKKyAgICAgICAgYXV0byYgYWRhcHRpdmVX
YXRjaHBvaW50ID0gc3RkOjpnZXQ8QWRhcHRpdmVWYWx1ZVN0cnVjdHVyZVN0dWJDbGVhcmluZ1dh
dGNocG9pbnQ+KHdhdGNocG9pbnRWYXJpYW50KTsKICAgICAgICAgYWRhcHRpdmVXYXRjaHBvaW50
Lmluc3RhbGwoY29kZUJsb2NrLT52bSgpKTsKICAgICB9IGVsc2UgewotICAgICAgICBhdXRvKiBz
dHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCA9ICZXVEY6OmdldDxTdHJ1Y3R1cmVUcmFuc2l0
aW9uU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4od2F0Y2hwb2ludFZhcmlhbnQpOwor
ICAgICAgICBhdXRvKiBzdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCA9ICZzdGQ6OmdldDxT
dHJ1Y3R1cmVUcmFuc2l0aW9uU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4od2F0Y2hw
b2ludFZhcmlhbnQpOwogICAgICAgICBrZXkub2JqZWN0KCktPnN0cnVjdHVyZSgpLT5hZGRUcmFu
c2l0aW9uV2F0Y2hwb2ludChzdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCk7CiAgICAgfQog
fQpAQCAtMTAzLDcgKzEwMyw3IEBAIFdhdGNocG9pbnQqIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVT
dHViSW5mbzo6ZW5zdXJlUmVmZXJlbmNlQW5kQWRkV2F0Y2hwb2ludCgKICAgICAgICAgQVNTRVJU
KGhvbGRlclJlZi0+bV9zdHViSW5mbyA9PSBzdHViSW5mbyk7CiAgICAgfQogICAgIAotICAgIHJl
dHVybiAmV1RGOjpnZXQ8U3RydWN0dXJlVHJhbnNpdGlvblN0cnVjdHVyZVN0dWJDbGVhcmluZ1dh
dGNocG9pbnQ+KGhvbGRlclJlZi0+YWRkV2F0Y2hwb2ludChPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bigpKSk7CisgICAgcmV0dXJuICZzdGQ6OmdldDxTdHJ1Y3R1cmVUcmFuc2l0aW9uU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4oaG9sZGVyUmVmLT5hZGRXYXRjaHBvaW50KE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uKCkpKTsKIH0KIAogdm9pZCBBZGFwdGl2ZVZhbHVlU3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludDo6aGFuZGxlRmlyZShWTSYsIGNvbnN0IEZpcmVEZXRhaWwmKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAppbmRl
eCBiNGM4Zjg2MGI1MTRlNmQ3OWRmMDFhYzdmMjk2ZmMwODFkZTdhMWY2Li5iNWFiMjI3MDM2ZGQ3
ZmMyODA2ODBjYWFkOTMwOWFlOGY3NzQ4NjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtMTA1NDgsMTMgKzEwNTQ4LDE0IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDYWxsRE9NKE5vZGUqIG5vZGUpCiAKICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGhhdmUgYSB3YXkgdG8gY2FsbCBmdW5jdGlvbnMgd2l0aCB0aGUgdmVj
dG9yIG9mIHJlZ2lzdGVycy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYzMDk5Ci0gICAgVmVjdG9yPFZhcmlhbnQ8U3BlY3VsYXRlQ2VsbE9wZXJhbmQs
IFNwZWN1bGF0ZUludDMyT3BlcmFuZCwgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ+LCBKU0NfRE9N
SklUX1NJR05BVFVSRV9NQVhfQVJHVU1FTlRTX0lOQ0xVRElOR19USElTPiBvcGVyYW5kczsKKyAg
ICB1c2luZyBPcGVyYW5kVmFyaWFudCA9IFZhcmlhbnQ8U3BlY3VsYXRlQ2VsbE9wZXJhbmQsIFNw
ZWN1bGF0ZUludDMyT3BlcmFuZCwgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ+OworICAgIFZlY3Rv
cjxPcGVyYW5kVmFyaWFudCwgSlNDX0RPTUpJVF9TSUdOQVRVUkVfTUFYX0FSR1VNRU5UU19JTkNM
VURJTkdfVEhJUz4gb3BlcmFuZHM7CiAgICAgVmVjdG9yPEdQUlJlZywgSlNDX0RPTUpJVF9TSUdO
QVRVUkVfTUFYX0FSR1VNRU5UU19JTkNMVURJTkdfVEhJUz4gcmVnczsKIAogICAgIGF1dG8gYXBw
ZW5kQ2VsbCA9IFsmXShFZGdlJiBlZGdlKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IG9wZXJhbmQodGhpcywgZWRnZSk7CiAgICAgICAgIHJlZ3MuYXBwZW5kKG9wZXJhbmQuZ3ByKCkp
OwotICAgICAgICBvcGVyYW5kcy5hcHBlbmQoV1RGTW92ZShvcGVyYW5kKSk7CisgICAgICAgIG9w
ZXJhbmRzLmFwcGVuZChPcGVyYW5kVmFyaWFudChzdGQ6OmluX3BsYWNlX3R5cGU8U3BlY3VsYXRl
Q2VsbE9wZXJhbmQ+LCBXVEZNb3ZlKG9wZXJhbmQpKSk7CiAgICAgfTsKIAogICAgIGF1dG8gYXBw
ZW5kU3RyaW5nID0gWyZdKEVkZ2UmIGVkZ2UpIHsKQEAgLTEwNTYyLDE5ICsxMDU2MywxOSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2FsbERPTShOb2RlKiBub2RlKQogICAgICAgICBH
UFJSZWcgZ3ByID0gb3BlcmFuZC5ncHIoKTsKICAgICAgICAgcmVncy5hcHBlbmQoZ3ByKTsKICAg
ICAgICAgc3BlY3VsYXRlU3RyaW5nKGVkZ2UsIGdwcik7Ci0gICAgICAgIG9wZXJhbmRzLmFwcGVu
ZChXVEZNb3ZlKG9wZXJhbmQpKTsKKyAgICAgICAgb3BlcmFuZHMuYXBwZW5kKE9wZXJhbmRWYXJp
YW50KHN0ZDo6aW5fcGxhY2VfdHlwZTxTcGVjdWxhdGVDZWxsT3BlcmFuZD4sIFdURk1vdmUob3Bl
cmFuZCkpKTsKICAgICB9OwogCiAgICAgYXV0byBhcHBlbmRJbnQzMiA9IFsmXShFZGdlJiBlZGdl
KSB7CiAgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBvcGVyYW5kKHRoaXMsIGVkZ2UpOwog
ICAgICAgICByZWdzLmFwcGVuZChvcGVyYW5kLmdwcigpKTsKLSAgICAgICAgb3BlcmFuZHMuYXBw
ZW5kKFdURk1vdmUob3BlcmFuZCkpOworICAgICAgICBvcGVyYW5kcy5hcHBlbmQoT3BlcmFuZFZh
cmlhbnQoc3RkOjppbl9wbGFjZV90eXBlPFNwZWN1bGF0ZUludDMyT3BlcmFuZD4sIFdURk1vdmUo
b3BlcmFuZCkpKTsKICAgICB9OwogCiAgICAgYXV0byBhcHBlbmRCb29sZWFuID0gWyZdKEVkZ2Um
IGVkZ2UpIHsKICAgICAgICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgb3BlcmFuZCh0aGlzLCBl
ZGdlKTsKICAgICAgICAgcmVncy5hcHBlbmQob3BlcmFuZC5ncHIoKSk7Ci0gICAgICAgIG9wZXJh
bmRzLmFwcGVuZChXVEZNb3ZlKG9wZXJhbmQpKTsKKyAgICAgICAgb3BlcmFuZHMuYXBwZW5kKE9w
ZXJhbmRWYXJpYW50KHN0ZDo6aW5fcGxhY2VfdHlwZTxTcGVjdWxhdGVCb29sZWFuT3BlcmFuZD4s
IFdURk1vdmUob3BlcmFuZCkpKTsKICAgICB9OwogCiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCmluZGV4IDI3
Y2FkYjhiMTBhODU0NGRlYjBlNjE5MWQzMzM5Yzg0MDllZGYyZWQuLjRmYTMwOTcyOGYwYWI0MDQ1
ZGE0ZjFmMTJhYWY4NjY4M2IyODE0MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5jcHAKQEAgLTkwNiwxMCArOTA2LDEwIEBAIEFzc2VtYmx5SGVscGVy
czo6SnVtcExpc3QgQXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZlZhbHVlKFZNJiB2bSwgSlNWYWx1
ZVJlZ3MgdmFsCiAgICAgICAgIEp1bXBMaXN0IGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZDsK
ICAgICAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmFwcGVuZChicmFuY2hUZXN0OCha
ZXJvLCBBZGRyZXNzKHZhbHVlLnBheWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpKTsKICAgICAgICAg
ZW1pdExvYWRTdHJ1Y3R1cmUodm0sIHZhbHVlLnBheWxvYWRHUFIoKSwgc2NyYXRjaCwgc2NyYXRj
aElmU2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKTsKLSAgICAgICAgaWYgKFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8SlNHbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKQotICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKFdURjo6Z2V0PEpTR2xvYmFsT2JqZWN0Kj4oZ2xvYmFs
T2JqZWN0KSksIHNjcmF0Y2hJZlNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCk7Cisg
ICAgICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPEpTR2xvYmFsT2JqZWN0Kj4oZ2xvYmFs
T2JqZWN0KSkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihzdGQ6OmdldDxKU0dsb2Jh
bE9iamVjdCo+KGdsb2JhbE9iamVjdCkpLCBzY3JhdGNoSWZTaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtb3ZlKFdURjo6Z2V0PEdQ
UlJlZz4oZ2xvYmFsT2JqZWN0KSwgc2NyYXRjaElmU2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKTsKKyAgICAgICAgICAgIG1vdmUoc3RkOjpnZXQ8R1BSUmVnPihnbG9iYWxPYmplY3Qp
LCBzY3JhdGNoSWZTaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQpOwogICAgICAgICBp
c05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRk
cmVzcyhzY3JhdGNoLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgc2NyYXRjaElm
U2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAKICAgICAgICAgLy8gV2UgYWN0
IGxpa2Ugd2UgYXJlICJ1bmRlZmluZWQiIGhlcmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1NuaXBwZXRSZWcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU25p
cHBldFJlZy5oCmluZGV4IDI0YTBjMGZmZDg4NDNmMzg3Y2VjNTdhMmQ0NDNkYzAwZTA2NTNhN2Mu
LjIxNjJiYWIyN2U4YTk5OWExNjRiNTRlZmJjNmQ3YTliNDhhZDZiM2UgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU25pcHBldFJlZy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvU25pcHBldFJlZy5oCkBAIC03MiwxNyArNzIsMTcgQEAgcHVibGljOgogICAg
IEdQUlJlZyBncHIoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzR1BSKCkpOwotICAg
ICAgICByZXR1cm4gV1RGOjpnZXQ8R1BSUmVnPihtX3ZhcmlhbnQpOworICAgICAgICByZXR1cm4g
c3RkOjpnZXQ8R1BSUmVnPihtX3ZhcmlhbnQpOwogICAgIH0KICAgICBGUFJSZWcgZnByKCkgY29u
c3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0ZQUigpKTsKLSAgICAgICAgcmV0dXJuIFdURjo6
Z2V0PEZQUlJlZz4obV92YXJpYW50KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PEZQUlJlZz4o
bV92YXJpYW50KTsKICAgICB9CiAgICAgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MoKSBjb25zdAog
ICAgIHsKICAgICAgICAgQVNTRVJUKGlzSlNWYWx1ZVJlZ3MoKSk7Ci0gICAgICAgIHJldHVybiBX
VEY6OmdldDxKU1ZhbHVlUmVncz4obV92YXJpYW50KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0
PEpTVmFsdWVSZWdzPihtX3ZhcmlhbnQpOwogICAgIH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAKaW5kZXggOWYwYTQyNmE3OWJkODllN2E1MDIzNzg5ZTgwYWYzNDdjYWQ0MzczOC4uNDhh
NjdhMjFlMzEzYjA1ZmZkZWU5YTRhYjBkZmIyYzdkZWQ3MWY4ZCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5j
cHAKQEAgLTIxNDcsMTYgKzIxNDcsMTYgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0
aW9uRG9sbGFyQWdlbnRSZWNlaXZlQnJvYWRjYXN0LCAoSlNHbG9iYWxPYmplY3QqIGcKIAogICAg
IGF1dG8gY29udGVudCA9IG1lc3NhZ2UtPnJlbGVhc2VDb250ZW50cygpOwogICAgIEpTVmFsdWUg
cmVzdWx0ID0gKFsmXSgpIC0+IEpTVmFsdWUgewotICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxBcnJheUJ1ZmZlckNvbnRlbnRzPihjb250ZW50KSkgewotICAgICAgICAgICAgYXV0
byBuYXRpdmVCdWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKFdURjo6Z2V0PEFycmF5QnVmZmVy
Q29udGVudHM+KFdURk1vdmUoY29udGVudCkpKTsKKyAgICAgICAgaWYgKHN0ZDo6aG9sZHNfYWx0
ZXJuYXRpdmU8QXJyYXlCdWZmZXJDb250ZW50cz4oY29udGVudCkpIHsKKyAgICAgICAgICAgIGF1
dG8gbmF0aXZlQnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShzdGQ6OmdldDxBcnJheUJ1ZmZl
ckNvbnRlbnRzPihXVEZNb3ZlKGNvbnRlbnQpKSk7CiAgICAgICAgICAgICBBcnJheUJ1ZmZlclNo
YXJpbmdNb2RlIHNoYXJpbmdNb2RlID0gbmF0aXZlQnVmZmVyLT5zaGFyaW5nTW9kZSgpOwogICAg
ICAgICAgICAgcmV0dXJuIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5h
cnJheUJ1ZmZlclN0cnVjdHVyZShzaGFyaW5nTW9kZSksIFdURk1vdmUobmF0aXZlQnVmZmVyKSk7
CiAgICAgICAgIH0KICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgICAgIGlmIChXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPFJlZjxXYXNtOjpNZW1vcnlIYW5kbGU+Pihjb250ZW50KSkgeworICAg
ICAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8V2FzbTo6TWVtb3J5SGFuZGxlPj4o
Y29udGVudCkpIHsKICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIGpzTWVtb3J5ID0g
SlNDOjpKU1dlYkFzc2VtYmx5TWVtb3J5Ojp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCB2bSwgZ2xv
YmFsT2JqZWN0LT53ZWJBc3NlbWJseU1lbW9yeVN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgIHNj
b3BlLnJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpOwotICAgICAgICAgICAgUmVmPFdhc206Ok1l
bW9yeT4gbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUoV1RGOjpnZXQ8UmVmPFdhc206Ok1l
bW9yeUhhbmRsZT4+KFdURk1vdmUoY29udGVudCkpLAorICAgICAgICAgICAgUmVmPFdhc206Ok1l
bW9yeT4gbWVtb3J5ID0gV2FzbTo6TWVtb3J5OjpjcmVhdGUoc3RkOjpnZXQ8UmVmPFdhc206Ok1l
bW9yeUhhbmRsZT4+KFdURk1vdmUoY29udGVudCkpLAogICAgICAgICAgICAgICAgIFsmdm1dIChX
YXNtOjpNZW1vcnk6Ok5vdGlmeVByZXNzdXJlKSB7IHZtLmhlYXAuY29sbGVjdEFzeW5jKENvbGxl
Y3Rpb25TY29wZTo6RnVsbCk7IH0sCiAgICAgICAgICAgICAgICAgWyZ2bV0gKFdhc206Ok1lbW9y
eTo6U3luY1RyeVRvUmVjbGFpbSkgeyB2bS5oZWFwLmNvbGxlY3RTeW5jKENvbGxlY3Rpb25TY29w
ZTo6RnVsbCk7IH0sCiAgICAgICAgICAgICAgICAgWyZ2bSwganNNZW1vcnldIChXYXNtOjpNZW1v
cnk6Okdyb3dTdWNjZXNzLCBXYXNtOjpQYWdlQ291bnQgb2xkUGFnZUNvdW50LCBXYXNtOjpQYWdl
Q291bnQgbmV3UGFnZUNvdW50KSB7IGpzTWVtb3J5LT5ncm93U3VjY2Vzc0NhbGxiYWNrKHZtLCBv
bGRQYWdlQ291bnQsIG5ld1BhZ2VDb3VudCk7IH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L0xleGVyLmNwcAppbmRleCAwZmJlMGJjOGY3YWZmMWRiYTI2NmQyMjg2NjEzZmNlNzE5Mzk0ZmE5
Li4wMzVlYWE1ZWVkY2UxOTIyNzhjYjBkNDg2ZGVkOTE5OGJkZjlmZjcwIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcApAQCAtMTU1MCw3ICsxNTUwLDcgQEAgQUxXQVlTX0lO
TElORSBhdXRvIExleGVyPFQ+OjpwYXJzZUhleCgpIC0+IHN0ZDo6b3B0aW9uYWw8TnVtYmVyUGFy
c2VSZXN1bHQ+CiAgICAgfSB3aGlsZSAoaXNBU0NJSUhleERpZ2l0T3JTZXBhcmF0b3IobV9jdXJy
ZW50KSAmJiBtYXhpbXVtRGlnaXRzID49IDApOwogCiAgICAgaWYgKExJS0VMWShtYXhpbXVtRGln
aXRzID49IDAgJiYgbV9jdXJyZW50ICE9ICduJykpCi0gICAgICAgIHJldHVybiBOdW1iZXJQYXJz
ZVJlc3VsdCB7IGhleFZhbHVlIH07CisgICAgICAgIHJldHVybiBOdW1iZXJQYXJzZVJlc3VsdCB7
IHN0YXRpY19jYXN0PGRvdWJsZT4oaGV4VmFsdWUpIH07CiAKICAgICAvLyBObyBtb3JlIHBsYWNl
IGluIHRoZSBoZXhWYWx1ZSBidWZmZXIuCiAgICAgLy8gVGhlIHZhbHVlcyBhcmUgc2hpZnRlZCBv
dXQgYW5kIHBsYWNlZCBpbnRvIHRoZSBtX2J1ZmZlcjggdmVjdG9yLgpAQCAtMTYwOSw3ICsxNjA5
LDcgQEAgQUxXQVlTX0lOTElORSBhdXRvIExleGVyPFQ+OjpwYXJzZUJpbmFyeSgpIC0+IHN0ZDo6
b3B0aW9uYWw8TnVtYmVyUGFyc2VSZXN1bHQ+CiAgICAgfSB3aGlsZSAoaXNBU0NJSUJpbmFyeURp
Z2l0T3JTZXBhcmF0b3IobV9jdXJyZW50KSAmJiBkaWdpdCA+PSAwKTsKIAogICAgIGlmIChMSUtF
TFkoIWlzQVNDSUlEaWdpdE9yU2VwYXJhdG9yKG1fY3VycmVudCkgJiYgZGlnaXQgPj0gMCAmJiBt
X2N1cnJlbnQgIT0gJ24nKSkKLSAgICAgICAgcmV0dXJuIE51bWJlclBhcnNlUmVzdWx0IHsgYmlu
YXJ5VmFsdWUgfTsKKyAgICAgICAgcmV0dXJuIE51bWJlclBhcnNlUmVzdWx0IHsgc3RhdGljX2Nh
c3Q8ZG91YmxlPihiaW5hcnlWYWx1ZSkgfTsKIAogICAgIGZvciAoaW50IGkgPSBtYXhpbXVtRGln
aXRzIC0gMTsgaSA+IGRpZ2l0OyAtLWkpCiAgICAgICAgIHJlY29yZDgoZGlnaXRzW2ldKTsKQEAg
LTE2NjUsNyArMTY2NSw3IEBAIEFMV0FZU19JTkxJTkUgYXV0byBMZXhlcjxUPjo6cGFyc2VPY3Rh
bCgpIC0+IHN0ZDo6b3B0aW9uYWw8TnVtYmVyUGFyc2VSZXN1bHQ+CiAgICAgfSB3aGlsZSAoaXNB
U0NJSU9jdGFsRGlnaXRPclNlcGFyYXRvcihtX2N1cnJlbnQpICYmIGRpZ2l0ID49IDApOwogCiAg
ICAgaWYgKExJS0VMWSghaXNBU0NJSURpZ2l0T3JTZXBhcmF0b3IobV9jdXJyZW50KSAmJiBkaWdp
dCA+PSAwICYmIG1fY3VycmVudCAhPSAnbicpKQotICAgICAgICByZXR1cm4gTnVtYmVyUGFyc2VS
ZXN1bHQgeyBvY3RhbFZhbHVlIH07CisgICAgICAgIHJldHVybiBOdW1iZXJQYXJzZVJlc3VsdCB7
IHN0YXRpY19jYXN0PGRvdWJsZT4ob2N0YWxWYWx1ZSkgfTsKIAogICAgIGZvciAoaW50IGkgPSBt
YXhpbXVtRGlnaXRzIC0gMTsgaSA+IGRpZ2l0OyAtLWkpCiAgICAgICAgICByZWNvcmQ4KGRpZ2l0
c1tpXSk7CkBAIC0xNzI0LDcgKzE3MjQsNyBAQCBBTFdBWVNfSU5MSU5FIGF1dG8gTGV4ZXI8VD46
OnBhcnNlRGVjaW1hbCgpIC0+IHN0ZDo6b3B0aW9uYWw8TnVtYmVyUGFyc2VSZXN1bHQ+CiAgICAg
ICAgIH0gd2hpbGUgKGlzQVNDSUlEaWdpdE9yU2VwYXJhdG9yKG1fY3VycmVudCkgJiYgZGlnaXQg
Pj0gMCk7CiAKICAgICAgICAgaWYgKGRpZ2l0ID49IDAgJiYgbV9jdXJyZW50ICE9ICcuJyAmJiAh
aXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChtX2N1cnJlbnQsICdlJykgJiYgbV9jdXJyZW50ICE9
ICduJykKLSAgICAgICAgICAgIHJldHVybiBOdW1iZXJQYXJzZVJlc3VsdCB7IGRlY2ltYWxWYWx1
ZSB9OworICAgICAgICAgICAgcmV0dXJuIE51bWJlclBhcnNlUmVzdWx0IHsgc3RhdGljX2Nhc3Q8
ZG91YmxlPihkZWNpbWFsVmFsdWUpIH07CiAKICAgICAgICAgZm9yIChpbnQgaSA9IG1heGltdW1E
aWdpdHMgLSAxOyBpID4gZGlnaXQ7IC0taSkKICAgICAgICAgICAgIHJlY29yZDgoZGlnaXRzW2ld
KTsKQEAgLTIyOTcsMTIgKzIyOTcsMTIgQEAgc3RhcnQ6CiAgICAgICAgICAgICBhdXRvIHBhcnNl
TnVtYmVyUmVzdWx0ID0gcGFyc2VIZXgoKTsKICAgICAgICAgICAgIGlmICghcGFyc2VOdW1iZXJS
ZXN1bHQpCiAgICAgICAgICAgICAgICAgdG9rZW5EYXRhLT5kb3VibGVWYWx1ZSA9IDA7Ci0gICAg
ICAgICAgICBlbHNlIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4oKnBhcnNlTnVt
YmVyUmVzdWx0KSkKLSAgICAgICAgICAgICAgICB0b2tlbkRhdGEtPmRvdWJsZVZhbHVlID0gV1RG
OjpnZXQ8ZG91YmxlPigqcGFyc2VOdW1iZXJSZXN1bHQpOworICAgICAgICAgICAgZWxzZSBpZiAo
c3RkOjpob2xkc19hbHRlcm5hdGl2ZTxkb3VibGU+KCpwYXJzZU51bWJlclJlc3VsdCkpCisgICAg
ICAgICAgICAgICAgdG9rZW5EYXRhLT5kb3VibGVWYWx1ZSA9IHN0ZDo6Z2V0PGRvdWJsZT4oKnBh
cnNlTnVtYmVyUmVzdWx0KTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIHRv
a2VuID0gQklHSU5UOwogICAgICAgICAgICAgICAgIHNoaWZ0KCk7Ci0gICAgICAgICAgICAgICAg
dG9rZW5EYXRhLT5iaWdJbnRTdHJpbmcgPSBXVEY6OmdldDxjb25zdCBJZGVudGlmaWVyKj4oKnBh
cnNlTnVtYmVyUmVzdWx0KTsKKyAgICAgICAgICAgICAgICB0b2tlbkRhdGEtPmJpZ0ludFN0cmlu
ZyA9IHN0ZDo6Z2V0PGNvbnN0IElkZW50aWZpZXIqPigqcGFyc2VOdW1iZXJSZXN1bHQpOwogICAg
ICAgICAgICAgICAgIHRva2VuRGF0YS0+cmFkaXggPSAxNjsKICAgICAgICAgICAgIH0KIApAQCAt
MjMzNiwxMiArMjMzNiwxMiBAQCBzdGFydDoKICAgICAgICAgICAgIGF1dG8gcGFyc2VOdW1iZXJS
ZXN1bHQgPSBwYXJzZUJpbmFyeSgpOwogICAgICAgICAgICAgaWYgKCFwYXJzZU51bWJlclJlc3Vs
dCkKICAgICAgICAgICAgICAgICB0b2tlbkRhdGEtPmRvdWJsZVZhbHVlID0gMDsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPigqcGFyc2VOdW1iZXJS
ZXN1bHQpKQotICAgICAgICAgICAgICAgIHRva2VuRGF0YS0+ZG91YmxlVmFsdWUgPSBXVEY6Omdl
dDxkb3VibGU+KCpwYXJzZU51bWJlclJlc3VsdCk7CisgICAgICAgICAgICBlbHNlIGlmIChzdGQ6
OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4oKnBhcnNlTnVtYmVyUmVzdWx0KSkKKyAgICAgICAg
ICAgICAgICB0b2tlbkRhdGEtPmRvdWJsZVZhbHVlID0gc3RkOjpnZXQ8ZG91YmxlPigqcGFyc2VO
dW1iZXJSZXN1bHQpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgdG9rZW4g
PSBCSUdJTlQ7CiAgICAgICAgICAgICAgICAgc2hpZnQoKTsKLSAgICAgICAgICAgICAgICB0b2tl
bkRhdGEtPmJpZ0ludFN0cmluZyA9IFdURjo6Z2V0PGNvbnN0IElkZW50aWZpZXIqPigqcGFyc2VO
dW1iZXJSZXN1bHQpOworICAgICAgICAgICAgICAgIHRva2VuRGF0YS0+YmlnSW50U3RyaW5nID0g
c3RkOjpnZXQ8Y29uc3QgSWRlbnRpZmllcio+KCpwYXJzZU51bWJlclJlc3VsdCk7CiAgICAgICAg
ICAgICAgICAgdG9rZW5EYXRhLT5yYWRpeCA9IDI7CiAgICAgICAgICAgICB9CiAKQEAgLTIzNzYs
MTIgKzIzNzYsMTIgQEAgc3RhcnQ6CiAgICAgICAgICAgICBhdXRvIHBhcnNlTnVtYmVyUmVzdWx0
ID0gcGFyc2VPY3RhbCgpOwogICAgICAgICAgICAgaWYgKCFwYXJzZU51bWJlclJlc3VsdCkKICAg
ICAgICAgICAgICAgICB0b2tlbkRhdGEtPmRvdWJsZVZhbHVlID0gMDsKLSAgICAgICAgICAgIGVs
c2UgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPigqcGFyc2VOdW1iZXJSZXN1bHQp
KQotICAgICAgICAgICAgICAgIHRva2VuRGF0YS0+ZG91YmxlVmFsdWUgPSBXVEY6OmdldDxkb3Vi
bGU+KCpwYXJzZU51bWJlclJlc3VsdCk7CisgICAgICAgICAgICBlbHNlIGlmIChzdGQ6OmhvbGRz
X2FsdGVybmF0aXZlPGRvdWJsZT4oKnBhcnNlTnVtYmVyUmVzdWx0KSkKKyAgICAgICAgICAgICAg
ICB0b2tlbkRhdGEtPmRvdWJsZVZhbHVlID0gc3RkOjpnZXQ8ZG91YmxlPigqcGFyc2VOdW1iZXJS
ZXN1bHQpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgdG9rZW4gPSBCSUdJ
TlQ7CiAgICAgICAgICAgICAgICAgc2hpZnQoKTsKLSAgICAgICAgICAgICAgICB0b2tlbkRhdGEt
PmJpZ0ludFN0cmluZyA9IFdURjo6Z2V0PGNvbnN0IElkZW50aWZpZXIqPigqcGFyc2VOdW1iZXJS
ZXN1bHQpOworICAgICAgICAgICAgICAgIHRva2VuRGF0YS0+YmlnSW50U3RyaW5nID0gc3RkOjpn
ZXQ8Y29uc3QgSWRlbnRpZmllcio+KCpwYXJzZU51bWJlclJlc3VsdCk7CiAgICAgICAgICAgICAg
ICAgdG9rZW5EYXRhLT5yYWRpeCA9IDg7CiAgICAgICAgICAgICB9CiAKQEAgLTI0MTcsOCArMjQx
Nyw4IEBAIHN0YXJ0OgogICAgICAgICB9CiAgICAgICAgIGlmIChpc0FTQ0lJT2N0YWxEaWdpdCht
X2N1cnJlbnQpKSB7CiAgICAgICAgICAgICBhdXRvIHBhcnNlTnVtYmVyUmVzdWx0ID0gcGFyc2VP
Y3RhbCgpOwotICAgICAgICAgICAgaWYgKHBhcnNlTnVtYmVyUmVzdWx0ICYmIFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8ZG91YmxlPigqcGFyc2VOdW1iZXJSZXN1bHQpKSB7Ci0gICAgICAgICAgICAg
ICAgdG9rZW5EYXRhLT5kb3VibGVWYWx1ZSA9IFdURjo6Z2V0PGRvdWJsZT4oKnBhcnNlTnVtYmVy
UmVzdWx0KTsKKyAgICAgICAgICAgIGlmIChwYXJzZU51bWJlclJlc3VsdCAmJiBzdGQ6OmhvbGRz
X2FsdGVybmF0aXZlPGRvdWJsZT4oKnBhcnNlTnVtYmVyUmVzdWx0KSkgeworICAgICAgICAgICAg
ICAgIHRva2VuRGF0YS0+ZG91YmxlVmFsdWUgPSBzdGQ6OmdldDxkb3VibGU+KCpwYXJzZU51bWJl
clJlc3VsdCk7CiAgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlblR5cGVGb3JJbnRlZ2VyTGlr
ZVRva2VuKHRva2VuRGF0YS0+ZG91YmxlVmFsdWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CkBAIC0yNDI3LDEzICsyNDI3LDEzIEBAIHN0YXJ0OgogICAgICAgICBpZiAoTElLRUxZKHRva2Vu
ICE9IElOVEVHRVIgJiYgdG9rZW4gIT0gRE9VQkxFKSkgewogICAgICAgICAgICAgYXV0byBwYXJz
ZU51bWJlclJlc3VsdCA9IHBhcnNlRGVjaW1hbCgpOwogICAgICAgICAgICAgaWYgKHBhcnNlTnVt
YmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8
ZG91YmxlPigqcGFyc2VOdW1iZXJSZXN1bHQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRva2Vu
RGF0YS0+ZG91YmxlVmFsdWUgPSBXVEY6OmdldDxkb3VibGU+KCpwYXJzZU51bWJlclJlc3VsdCk7
CisgICAgICAgICAgICAgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPigqcGFy
c2VOdW1iZXJSZXN1bHQpKSB7CisgICAgICAgICAgICAgICAgICAgIHRva2VuRGF0YS0+ZG91Ymxl
VmFsdWUgPSBzdGQ6OmdldDxkb3VibGU+KCpwYXJzZU51bWJlclJlc3VsdCk7CiAgICAgICAgICAg
ICAgICAgICAgIHRva2VuID0gdG9rZW5UeXBlRm9ySW50ZWdlckxpa2VUb2tlbih0b2tlbkRhdGEt
PmRvdWJsZVZhbHVlKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICB0b2tlbiA9IEJJR0lOVDsKICAgICAgICAgICAgICAgICAgICAgc2hpZnQoKTsKLSAgICAg
ICAgICAgICAgICAgICAgdG9rZW5EYXRhLT5iaWdJbnRTdHJpbmcgPSBXVEY6OmdldDxjb25zdCBJ
ZGVudGlmaWVyKj4oKnBhcnNlTnVtYmVyUmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgdG9r
ZW5EYXRhLT5iaWdJbnRTdHJpbmcgPSBzdGQ6OmdldDxjb25zdCBJZGVudGlmaWVyKj4oKnBhcnNl
TnVtYmVyUmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAgdG9rZW5EYXRhLT5yYWRpeCA9IDEw
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9WYXJpYWJsZUVudmlyb25tZW50LmNwcAppbmRleCBi
ZDY3M2M2OGY1NDZkMjgzOGRiMmRlODE0ZDFjNGJkMGRjMzI1YzBmLi4yOGRhMTk5NzQzZTA1NmQy
NGQ5ZTNiNWRhNmNlZWU2OWRiMDk4NGM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1ZhcmlhYmxlRW52aXJvbm1lbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5jcHAKQEAgLTI3NywxNCArMjc3LDE0IEBA
IFREWkVudmlyb25tZW50JiBDb21wYWN0VERaRW52aXJvbm1lbnQ6OnRvVERaRW52aXJvbm1lbnRT
bG93KCkgY29uc3QKIHsKICAgICBJbmZsYXRlZCBpbmZsYXRlZDsKICAgICB7Ci0gICAgICAgIGF1
dG8mIGNvbXBhY3QgPSBXVEY6OmdldDxDb21wYWN0PihtX3ZhcmlhYmxlcyk7CisgICAgICAgIGF1
dG8mIGNvbXBhY3QgPSBzdGQ6OmdldDxDb21wYWN0PihtX3ZhcmlhYmxlcyk7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY29tcGFjdC5zaXplKCk7ICsraSkgewogICAgICAgICAgICAg
YXV0byBhZGRSZXN1bHQgPSBpbmZsYXRlZC5hZGQoY29tcGFjdFtpXSk7CiAgICAgICAgICAgICBB
U1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwogICAgICAgICB9
CiAgICAgfQogICAgIG1fdmFyaWFibGVzID0gVmFyaWFibGVzKFdURk1vdmUoaW5mbGF0ZWQpKTsK
LSAgICByZXR1cm4gY29uc3RfY2FzdDxJbmZsYXRlZCY+KFdURjo6Z2V0PEluZmxhdGVkPihtX3Zh
cmlhYmxlcykpOworICAgIHJldHVybiBjb25zdF9jYXN0PEluZmxhdGVkJj4oc3RkOjpnZXQ8SW5m
bGF0ZWQ+KG1fdmFyaWFibGVzKSk7CiB9CiAKIENvbXBhY3RURFpFbnZpcm9ubWVudE1hcDo6SGFu
ZGxlIENvbXBhY3RURFpFbnZpcm9ubWVudE1hcDo6Z2V0KGNvbnN0IFREWkVudmlyb25tZW50JiBl
bnYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1ZhcmlhYmxlRW52
aXJvbm1lbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVmFyaWFibGVFbnZpcm9u
bWVudC5oCmluZGV4IGU1ZDU3YzJmZmMzYjMyMjhmYmExMjk1NzZjMTgwMGJkZThkMzIzNjkuLjkx
MDc2YzUyZjE4ZGRlM2I3NjBkMTEwMDFjMjEyZjEzODRmY2YzMzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvVmFyaWFibGVFbnZpcm9ubWVudC5oCkBAIC0zNTUsOCAr
MzU1LDggQEAgcHVibGljOgogCiAgICAgVERaRW52aXJvbm1lbnQmIHRvVERaRW52aXJvbm1lbnQo
KSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SW5mbGF0
ZWQ+KG1fdmFyaWFibGVzKSkKLSAgICAgICAgICAgIHJldHVybiBjb25zdF9jYXN0PFREWkVudmly
b25tZW50Jj4oV1RGOjpnZXQ8SW5mbGF0ZWQ+KG1fdmFyaWFibGVzKSk7CisgICAgICAgIGlmIChz
dGQ6OmhvbGRzX2FsdGVybmF0aXZlPEluZmxhdGVkPihtX3ZhcmlhYmxlcykpCisgICAgICAgICAg
ICByZXR1cm4gY29uc3RfY2FzdDxURFpFbnZpcm9ubWVudCY+KHN0ZDo6Z2V0PEluZmxhdGVkPiht
X3ZhcmlhYmxlcykpOwogICAgICAgICByZXR1cm4gdG9URFpFbnZpcm9ubWVudFNsb3coKTsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5
bG9hZC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuY3Bw
CmluZGV4IDYxNjhmZWU5NjZjYjY1YzU2Y2Q2NjU1NTY2NmNmNTRiZmRiNzI5YmQuLjI3ZDJiN2I3
NDFhN2RmNWZhNjc4OWQ3MmU4MjIxZGY0ODgzYjc1NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNwcApAQCAtNjEsMjEgKzYxLDIxIEBAIGNvbnN0
IHVpbnQ4X3QqIENhY2hlUGF5bG9hZDo6ZGF0YSgpIGNvbnN0CiAgICAgcmV0dXJuIFdURjo6c3dp
dGNoT24obV9kYXRhLAogICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0
YSYgZGF0YSkgewogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihkYXRhLmRhdGEoKSk7Ci0gICAgICAgIH0sCi0gICAgICAgIFtdKGNvbnN0IHN0ZDo6cGFpcjxN
YWxsb2NQdHI8dWludDhfdCwgVk1NYWxsb2M+LCBzaXplX3Q+JiBkYXRhKSB7CisgICAgICAgIH0s
IFtdKGNvbnN0IHN0ZDo6cGFpcjxNYWxsb2NQdHI8dWludDhfdCwgVk1NYWxsb2M+LCBzaXplX3Q+
JiBkYXRhKSAtPiBjb25zdCB1aW50OF90KiB7CiAgICAgICAgICAgICByZXR1cm4gZGF0YS5maXJz
dC5nZXQoKTsKLSAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICApOwogfQogCiBzaXplX3QgQ2Fj
aGVQYXlsb2FkOjpzaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX2Rh
dGEsCi0gICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7
CisgICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSAtPiBz
aXplX3QgewogICAgICAgICAgICAgcmV0dXJuIGRhdGEuc2l6ZSgpOwotICAgICAgICB9LAotICAg
ICAgICBbXShjb25zdCBzdGQ6OnBhaXI8TWFsbG9jUHRyPHVpbnQ4X3QsIFZNTWFsbG9jPiwgc2l6
ZV90PiYgZGF0YSkgeworICAgICAgICB9LCBbXShjb25zdCBzdGQ6OnBhaXI8TWFsbG9jUHRyPHVp
bnQ4X3QsIFZNTWFsbG9jPiwgc2l6ZV90PiYgZGF0YSkgLT4gc2l6ZV90IHsKICAgICAgICAgICAg
IHJldHVybiBkYXRhLnNlY29uZDsKLSAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICApOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlVXBkYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
Y2hlVXBkYXRlLmNwcAppbmRleCA3MGQzNmIzODVhYjViMmY4OTBhOTY3MzA5YzNjNGFkMDcxOTdk
ZGEzLi5iMTU0Njg1OThjMWE5NzcwYTU2NTg4MTlhYTlkYWZkNTk0NzY3OTEyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZVVwZGF0ZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVVcGRhdGUuY3BwCkBAIC0zOSwxMSArMzks
OCBAQCBDYWNoZVVwZGF0ZTo6Q2FjaGVVcGRhdGUoRnVuY3Rpb25VcGRhdGUmJiB1cGRhdGUpCiB9
CiAKIENhY2hlVXBkYXRlOjpDYWNoZVVwZGF0ZShDYWNoZVVwZGF0ZSYmIG90aGVyKQorICAgIDog
bV91cGRhdGUoV1RGTW92ZShvdGhlci5tX3VwZGF0ZSkpCiB7Ci0gICAgaWYgKFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8R2xvYmFsVXBkYXRlPihvdGhlci5tX3VwZGF0ZSkpCi0gICAgICAgIG5ldyAo
dGhpcykgQ2FjaGVVcGRhdGUoV1RGTW92ZShXVEY6OmdldDxHbG9iYWxVcGRhdGU+KG90aGVyLm1f
dXBkYXRlKSkpOwotICAgIGVsc2UKLSAgICAgICAgbmV3ICh0aGlzKSBDYWNoZVVwZGF0ZShXVEZN
b3ZlKFdURjo6Z2V0PEZ1bmN0aW9uVXBkYXRlPihvdGhlci5tX3VwZGF0ZSkpKTsKIH0KIAogQ2Fj
aGVVcGRhdGUmIENhY2hlVXBkYXRlOjpvcGVyYXRvcj0oQ2FjaGVVcGRhdGUmJiBvdGhlcikKQEAg
LTU0LDE5ICs1MSwxOSBAQCBDYWNoZVVwZGF0ZSYgQ2FjaGVVcGRhdGU6Om9wZXJhdG9yPShDYWNo
ZVVwZGF0ZSYmIG90aGVyKQogCiBib29sIENhY2hlVXBkYXRlOjppc0dsb2JhbCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8R2xvYmFsVXBkYXRlPihtX3VwZGF0
ZSk7CisgICAgcmV0dXJuIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8R2xvYmFsVXBkYXRlPihtX3Vw
ZGF0ZSk7CiB9CiAKIGNvbnN0IENhY2hlVXBkYXRlOjpHbG9iYWxVcGRhdGUmIENhY2hlVXBkYXRl
Ojphc0dsb2JhbCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzR2xvYmFsKCkpOwotICAgIHJldHVy
biBXVEY6OmdldDxHbG9iYWxVcGRhdGU+KG1fdXBkYXRlKTsKKyAgICByZXR1cm4gc3RkOjpnZXQ8
R2xvYmFsVXBkYXRlPihtX3VwZGF0ZSk7CiB9CiAKIGNvbnN0IENhY2hlVXBkYXRlOjpGdW5jdGlv
blVwZGF0ZSYgQ2FjaGVVcGRhdGU6OmFzRnVuY3Rpb24oKSBjb25zdAogewogICAgIEFTU0VSVCgh
aXNHbG9iYWwoKSk7Ci0gICAgcmV0dXJuIFdURjo6Z2V0PEZ1bmN0aW9uVXBkYXRlPihtX3VwZGF0
ZSk7CisgICAgcmV0dXJuIHN0ZDo6Z2V0PEZ1bmN0aW9uVXBkYXRlPihtX3VwZGF0ZSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2FjaGVkVHlwZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVkVHlwZXMuY3BwCmluZGV4IDhiM2ZmODgxZmZjNmE2NWFjN2VmYmQ1MjZkYjViZjZlM2I0Yzlj
ZjYuLjNmYmU0ZTEyNmIyOTZhZjRlY2FkZTdkYTY3YTM0MDFmNzQ2MTgyNzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKQEAgLTEwMzcsMTEgKzEw
MzcsMTEgQEAgY2xhc3MgQ2FjaGVkQ29tcGFjdFREWkVudmlyb25tZW50IDogcHVibGljIENhY2hl
ZE9iamVjdDxDb21wYWN0VERaRW52aXJvbm1lbnQ+IHsKIHB1YmxpYzoKICAgICB2b2lkIGVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDb21wYWN0VERaRW52aXJvbm1lbnQmIGVudikKICAg
ICB7Ci0gICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbXBhY3RURFpFbnZpcm9u
bWVudDo6Q29tcGFjdD4oZW52Lm1fdmFyaWFibGVzKSkKLSAgICAgICAgICAgIG1fdmFyaWFibGVz
LmVuY29kZShlbmNvZGVyLCBXVEY6OmdldDxDb21wYWN0VERaRW52aXJvbm1lbnQ6OkNvbXBhY3Q+
KGVudi5tX3ZhcmlhYmxlcykpOworICAgICAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxD
b21wYWN0VERaRW52aXJvbm1lbnQ6OkNvbXBhY3Q+KGVudi5tX3ZhcmlhYmxlcykpCisgICAgICAg
ICAgICBtX3ZhcmlhYmxlcy5lbmNvZGUoZW5jb2Rlciwgc3RkOjpnZXQ8Q29tcGFjdFREWkVudmly
b25tZW50OjpDb21wYWN0PihlbnYubV92YXJpYWJsZXMpKTsKICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICBDb21wYWN0VERaRW52aXJvbm1lbnQ6OkNvbXBhY3QgY29tcGFjdDsKLSAgICAgICAg
ICAgIGZvciAoYXV0byYga2V5IDogV1RGOjpnZXQ8Q29tcGFjdFREWkVudmlyb25tZW50OjpJbmZs
YXRlZD4oZW52Lm1fdmFyaWFibGVzKSkKKyAgICAgICAgICAgIGZvciAoYXV0byYga2V5IDogc3Rk
OjpnZXQ8Q29tcGFjdFREWkVudmlyb25tZW50OjpJbmZsYXRlZD4oZW52Lm1fdmFyaWFibGVzKSkK
ICAgICAgICAgICAgICAgICBjb21wYWN0LmFwcGVuZChrZXkpOwogICAgICAgICAgICAgbV92YXJp
YWJsZXMuZW5jb2RlKGVuY29kZXIsIGNvbXBhY3QpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbFRpbWVab25lLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsVGltZVpvbmUuY3BwCmluZGV4IDc3ZGI0
MDk1ZDI3YzFiZjJmYzE3NzBjZmUwMzlkNTY5OGExNmJlY2MuLjgzYTM5MDZiZDU0NTA2MjJlYWVh
OWFjOTAzYmJkMjgxNWNkMDljZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1RlbXBvcmFsVGltZVpvbmUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1RlbXBvcmFsVGltZVpvbmUuY3BwCkBAIC0zNSwxNCArMzUsMTQgQEAgY29uc3QgQ2xh
c3NJbmZvIFRlbXBvcmFsVGltZVpvbmU6OnNfaW5mbyA9IHsgIk9iamVjdCIsICZCYXNlOjpzX2lu
Zm8sIG51bGxwdHIsIG4KIAogVGVtcG9yYWxUaW1lWm9uZSogVGVtcG9yYWxUaW1lWm9uZTo6Y3Jl
YXRlRnJvbUlEKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFRpbWVab25lSUQgaWRlbnRp
ZmllcikKIHsKLSAgICBUZW1wb3JhbFRpbWVab25lKiBmb3JtYXQgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxUZW1wb3JhbFRpbWVab25lPih2bS5oZWFwKSkgVGVtcG9yYWxUaW1lWm9uZSh2
bSwgc3RydWN0dXJlLCBUaW1lWm9uZSB7IFdURjo6aW5fcGxhY2U8MD4sIGlkZW50aWZpZXIgfSk7
CisgICAgVGVtcG9yYWxUaW1lWm9uZSogZm9ybWF0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8VGVtcG9yYWxUaW1lWm9uZT4odm0uaGVhcCkpIFRlbXBvcmFsVGltZVpvbmUodm0sIHN0cnVj
dHVyZSwgVGltZVpvbmUgeyBzdGQ6OmluX3BsYWNlX2luZGV4X3Q8MD4oKSwgaWRlbnRpZmllciB9
KTsKICAgICBmb3JtYXQtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gZm9ybWF0Owog
fQogCiBUZW1wb3JhbFRpbWVab25lKiBUZW1wb3JhbFRpbWVab25lOjpjcmVhdGVGcm9tVVRDT2Zm
c2V0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDY0X3QgdXRjT2Zmc2V0KQogewot
ICAgIFRlbXBvcmFsVGltZVpvbmUqIGZvcm1hdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PFRlbXBvcmFsVGltZVpvbmU+KHZtLmhlYXApKSBUZW1wb3JhbFRpbWVab25lKHZtLCBzdHJ1Y3R1
cmUsIFRpbWVab25lIHsgV1RGOjppbl9wbGFjZTwxPiwgdXRjT2Zmc2V0IH0pOworICAgIFRlbXBv
cmFsVGltZVpvbmUqIGZvcm1hdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFRlbXBvcmFs
VGltZVpvbmU+KHZtLmhlYXApKSBUZW1wb3JhbFRpbWVab25lKHZtLCBzdHJ1Y3R1cmUsIFRpbWVa
b25lIHsgc3RkOjppbl9wbGFjZV9pbmRleF90PDE+KCksIHV0Y09mZnNldCB9KTsKICAgICBmb3Jt
YXQtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gZm9ybWF0OwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKaW5kZXggODFh
NWNkYmNhZTMyODZiZTMyY2E0OTBkZTQ1ZWUzYWZmNzgxOTg1Ni4uN2NmOGEzNDJkNWFmNjcxYWUx
NjQwYmM4NWYwNWI0MmVmMTA4YTkwMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3BwCkBAIC05MCwyMiArOTAsMjIgQEAgcHVibGljOgog
ICAgICAgICAgICAgcmV0dXJuIENvbnRyb2xUeXBlKHNpZ25hdHVyZSwgc3RhY2tTaXplIC0gc2ln
bmF0dXJlLT5hcmd1bWVudENvdW50KCksIFdURk1vdmUoY29udGludWF0aW9uKSwgQ29udHJvbElm
IHsgV1RGTW92ZShhbHRlcm5hdGUpIH0pOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIGJv
b2wgaXNJZihjb25zdCBDb250cm9sVHlwZSYgY29udHJvbCkgeyByZXR1cm4gV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxDb250cm9sSWY+KGNvbnRyb2wpOyB9Ci0gICAgICAgIHN0YXRpYyBib29sIGlz
VG9wTGV2ZWwoY29uc3QgQ29udHJvbFR5cGUmIGNvbnRyb2wpIHsgcmV0dXJuIFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8Q29udHJvbFRvcExldmVsPihjb250cm9sKTsgfQorICAgICAgICBzdGF0aWMg
Ym9vbCBpc0lmKGNvbnN0IENvbnRyb2xUeXBlJiBjb250cm9sKSB7IHJldHVybiBzdGQ6OmhvbGRz
X2FsdGVybmF0aXZlPENvbnRyb2xJZj4oY29udHJvbCk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wg
aXNUb3BMZXZlbChjb25zdCBDb250cm9sVHlwZSYgY29udHJvbCkgeyByZXR1cm4gc3RkOjpob2xk
c19hbHRlcm5hdGl2ZTxDb250cm9sVG9wTGV2ZWw+KGNvbnRyb2wpOyB9CiAKICAgICAgICAgdW5z
aWduZWQgc3RhY2tTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja1NpemU7IH0KICAgICAgICAg
QmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zaWduYXR1cmU7IH0K
IAogICAgICAgICBSZWZQdHI8TGFiZWw+IHRhcmdldExhYmVsRm9yQnJhbmNoKCkgY29uc3QKICAg
ICAgICAgewotICAgICAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbExv
b3A+KCp0aGlzKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpnZXQ8Q29udHJvbExvb3A+
KCp0aGlzKS5tX2JvZHkucHRyKCk7CisgICAgICAgICAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5h
dGl2ZTxDb250cm9sTG9vcD4oKnRoaXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Omdl
dDxDb250cm9sTG9vcD4oKnRoaXMpLm1fYm9keS5wdHIoKTsKICAgICAgICAgICAgIHJldHVybiBt
X2NvbnRpbnVhdGlvbjsKICAgICAgICAgfQogCiAgICAgICAgIFNpZ25hdHVyZUFyZ0NvdW50IGJy
YW5jaFRhcmdldEFyaXR5KCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgaWYgKFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbExvb3A+KCp0aGlzKSkKKyAgICAgICAgICAgIGlmIChz
dGQ6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xMb29wPigqdGhpcykpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5hcmd1bWVudENvdW50KCk7CiAgICAgICAgICAgICByZXR1
cm4gbV9zaWduYXR1cmUtPnJldHVybkNvdW50KCk7CiAgICAgICAgIH0KQEAgLTExMyw3ICsxMTMs
NyBAQCBwdWJsaWM6CiAgICAgICAgIFR5cGUgYnJhbmNoVGFyZ2V0VHlwZSh1bnNpZ25lZCBpKSBj
b25zdAogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoaSA8IGJyYW5jaFRhcmdldEFyaXR5
KCkpOwotICAgICAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29udHJvbExvb3A+
KCp0aGlzKSkKKyAgICAgICAgICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPENvbnRyb2xM
b29wPigqdGhpcykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fc2lnbmF0dXJlLT5hcmd1bWVu
dChpKTsKICAgICAgICAgICAgIHJldHVybiBtX3NpZ25hdHVyZS0+cmV0dXJuVHlwZShpKTsKICAg
ICAgICAgfQpAQCAtOTU5LDcgKzk1OSw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZElmKEV4
cHJlc3Npb25UeXBlIGNvbmRpdGlvbiwgQmxvY2tTaWduYXR1cmUgc2lnbmF0dXJlLCBTCiAKIGF1
dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVsc2UoQ29udHJvbFR5cGUmIGRhdGEsIFN0YWNrJiBleHBy
ZXNzaW9uU3RhY2spIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBBU1NFUlQoV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxDb250cm9sSWY+KGRhdGEpKTsKKyAgICBBU1NFUlQoc3RkOjpob2xkc19hbHRl
cm5hdGl2ZTxDb250cm9sSWY+KGRhdGEpKTsKICAgICBtYXRlcmlhbGl6ZUNvbnN0YW50c0FuZExv
Y2FscyhleHByZXNzaW9uU3RhY2spOwogICAgIFdhc21KbXA6OmVtaXQodGhpcywgZGF0YS5tX2Nv
bnRpbnVhdGlvbi0+YmluZCh0aGlzKSk7CiAgICAgcmV0dXJuIGFkZEVsc2VUb1VucmVhY2hhYmxl
KGRhdGEpOwpAQCAtOTY5LDcgKzk2OSw3IEBAIGF1dG8gTExJbnRHZW5lcmF0b3I6OmFkZEVsc2VU
b1VucmVhY2hhYmxlKENvbnRyb2xUeXBlJiBkYXRhKSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAgICAg
bV9zdGFja1NpemUgPSBkYXRhLnN0YWNrU2l6ZSgpICsgZGF0YS5tX3NpZ25hdHVyZS0+YXJndW1l
bnRDb3VudCgpOwogCi0gICAgQ29udHJvbElmJiBjb250cm9sID0gV1RGOjpnZXQ8Q29udHJvbElm
PihkYXRhKTsKKyAgICBDb250cm9sSWYmIGNvbnRyb2wgPSBzdGQ6OmdldDxDb250cm9sSWY+KGRh
dGEpOwogICAgIGVtaXRMYWJlbChjb250cm9sLm1fYWx0ZXJuYXRlLmdldCgpKTsKICAgICBkYXRh
ID0gQ29udHJvbFR5cGU6OmJsb2NrKGRhdGEubV9zaWduYXR1cmUsIG1fc3RhY2tTaXplLCBXVEZN
b3ZlKGRhdGEubV9jb250aW51YXRpb24pKTsKICAgICByZXR1cm4geyB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvRm9yd2FyZC5oIGIvU291cmNlL1dURi93dGYvRm9yd2FyZC5oCmluZGV4
IDNhNzI5NzQzN2I1OWQ0NTNkYmQ2ZTk2ODQzNDY5NzRlNTNjODZjZjkuLmYwMGNlMzk2MDk5ZWZi
Y2Y5MGQzZWExY2IxOGM0NWU0ODdhNzIyNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Zv
cndhcmQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKQEAgLTgzLDcgKzgzLDYgQEAg
dGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIFN0cmluZ0J1ZmZlcjsKIHRlbXBsYXRlPHR5cGVuYW1l
PiBjbGFzcyBTdHJpbmdQYXJzaW5nQnVmZmVyOwogdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1l
ID0gdm9pZD4gY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xh
c3MgVW5pcXVlUmVmOwotdGVtcGxhdGU8dHlwZW5hbWUuLi4+IGNsYXNzIFZhcmlhbnQ7CiB0ZW1w
bGF0ZTx0eXBlbmFtZSwgc2l6ZV90ID0gMCwgdHlwZW5hbWUgPSBDcmFzaE9uT3ZlcmZsb3csIHNp
emVfdCA9IDE2LCB0eXBlbmFtZSBNYWxsb2MgPSBWZWN0b3JNYWxsb2M+IGNsYXNzIFZlY3RvcjsK
IHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSA9IEVtcHR5Q291bnRlcj4gY2xhc3MgV2Vha1B0
cjsKIApAQCAtMTU3LDcgKzE1Niw2IEBAIHVzaW5nIFdURjo6VGV4dFBvc2l0aW9uOwogdXNpbmcg
V1RGOjpUZXh0U3RyZWFtOwogdXNpbmcgV1RGOjpVUkw7CiB1c2luZyBXVEY6OlVuaXF1ZVJlZjsK
LXVzaW5nIFdURjo6VmFyaWFudDsKIHVzaW5nIFdURjo6VmVjdG9yOwogCiB0ZW1wbGF0ZTxjbGFz
cyBULCBjbGFzcyBFPiB1c2luZyBFeHBlY3RlZCA9IHN0ZDo6ZXhwZXJpbWVudGFsOjpleHBlY3Rl
ZDxULCBFPjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hlci5oIGIvU291cmNlL1dU
Ri93dGYvSGFzaGVyLmgKaW5kZXggOGZlOWIyNDBjMGVmYWM3MDhhYzgwM2Y1NTAxNTBkOGNhNTkz
NTJkMi4uYTc3YTQ4YTllY2E4OGE1MTc3MmViNDgxNWNlOGJhMDA1OTkzMzdhOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvSGFzaGVyLmgKKysrIGIvU291cmNlL1dURi93dGYvSGFzaGVyLmgK
QEAgLTIxLDYgKzIxLDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8b3B0aW9uYWw+Cisj
aW5jbHVkZSA8dmFyaWFudD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVk
ZSA8d3RmL1VSTC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KQEAgLTE2Niwx
MCArMTY3LDEwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYWRkKEhhc2hlciYgaGFzaGVy
LCBjb25zdCBzdGQ6Om9wdGlvbmFsPFQ+JiBvcHRpb25hbCkKICAgICAgICAgYWRkKGhhc2hlciwg
b3B0aW9uYWwudmFsdWUoKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPiB2b2lk
IGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgVmFyaWFudDxUeXBlcy4uLj4mIHZhcmlhbnQpCit0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4gdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0
IHN0ZDo6dmFyaWFudDxUeXBlcy4uLj4mIHZhcmlhbnQpCiB7CiAgICAgYWRkKGhhc2hlciwgdmFy
aWFudC5pbmRleCgpKTsKLSAgICB2aXNpdChbJmhhc2hlcl0gKGF1dG8mIHZhbHVlKSB7CisgICAg
c3RkOjp2aXNpdChbJmhhc2hlcl0gKGF1dG8mIHZhbHVlKSB7CiAgICAgICAgIGFkZChoYXNoZXIs
IHZhbHVlKTsKICAgICB9LCB2YXJpYW50KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L0xpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0LmggYi9Tb3VyY2UvV1RGL3d0Zi9MaWtlbHlE
ZW5zZVVuc2lnbmVkSW50ZWdlclNldC5oCmluZGV4IDAyMTBmOTQyOGU2Y2U0MmYzZTJkYWZkMDI4
MDcwYzFmY2RiOTRjNzcuLjc0NDJhNDMxYTM4OWRhYTJkMjBmMDUyNjdjZDkxNGVjMGUyZWE2YmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0xpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0
LmgKKysrIGIvU291cmNlL1dURi93dGYvTGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQuaApA
QCAtMjA1LDggKzIwNSw4IEBAIHB1YmxpYzoKICAgICAgICAgSW5kZXhUeXBlIG9wZXJhdG9yKigp
IGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fdW5k
ZXJseWluZywKLSAgICAgICAgICAgICAgICBbJl0oY29uc3QgQml0VmVjdG9yOjppdGVyYXRvciYg
aXQpIHsgcmV0dXJuICppdCArIG1fc2hpZnQ7IH0sCi0gICAgICAgICAgICAgICAgW10oY29uc3Qg
dHlwZW5hbWUgU2V0OjppdGVyYXRvciYgaXQpIHsgcmV0dXJuICppdDsgfSk7CisgICAgICAgICAg
ICAgICAgWyZdKGNvbnN0IEJpdFZlY3Rvcjo6aXRlcmF0b3ImIGl0KSAtPiBJbmRleFR5cGUgeyBy
ZXR1cm4gKml0ICsgbV9zaGlmdDsgfSwKKyAgICAgICAgICAgICAgICBbXShjb25zdCB0eXBlbmFt
ZSBTZXQ6Oml0ZXJhdG9yJiBpdCkgLT4gSW5kZXhUeXBlIHsgcmV0dXJuICppdDsgfSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBj
b25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVmFyaWFudC5oIGIvU291cmNlL1dURi93
dGYvVmFyaWFudC5oCmluZGV4IDNjYTdlYmZlOWQwNDc5NmQwYjhhMDU2NzNjY2EwZmUzMThlMDJk
MzIuLjIzMjkzYzgzOTFhN2IyODI2ZWQ5OTkyYjFkYjM3NDY4MDg1YjNhODggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgK
QEAgLTQ3LDIwMzggKzQ3LDIzIEBACiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHR5cGVf
dHJhaXRzPgogI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8dmFyaWFudD4KICNpbmNsdWRl
IDx3dGYvQ29tcGlsZXIuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKLSNpZiBD
T01QSUxFUihNU1ZDKQotI3ByYWdtYSB3YXJuaW5nKHB1c2gpCi0jcHJhZ21hIHdhcm5pbmcoZGlz
YWJsZTo0MjQ1KQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDUyMSkKLSNwcmFnbWEgd2Fybmlu
ZyhkaXNhYmxlOjQ1MjIpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0ODE0KQotI2VuZGlmCi0K
LSNpZiAhQ09NUElMRVIoQ0xBTkcpIHx8IFdURl9DUFBfU1REX1ZFUiA+PSAxNAotCiBuYW1lc3Bh
Y2UgV1RGIHsKIAotI2lmIENPTVBJTEVSX1NVUFBPUlRTKEVYQ0VQVElPTlMpCi0jZGVmaW5lIF9f
VEhST1dfRVhDRVBUSU9OKF9fZXhjZXB0aW9uKSB0aHJvdyBfX2V4Y2VwdGlvbjsKLSNkZWZpbmUg
X19OT0VYQ0VQVCBub2V4Y2VwdAotI2RlZmluZSBfX05PRVhDRVBUXyhfX2V4Y2VwdGlvbikgbm9l
eGNlcHQoX19leGNlcHRpb24pCi0jZWxzZQotI2RlZmluZSBfX1RIUk9XX0VYQ0VQVElPTihfX2V4
Y2VwdGlvbikgZG8geyAodm9pZClfX2V4Y2VwdGlvbjsgQ1JBU0goKTsgfSB3aGlsZSAoMCk7Ci0j
ZGVmaW5lIF9fTk9FWENFUFQKLSNkZWZpbmUgX19OT0VYQ0VQVF8oLi4uKQotI2VuZGlmCi0KLXN0
cnVjdCBfX2luX3BsYWNlX3ByaXZhdGV7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWU+Ci0gICAgc3Ry
dWN0IF9fdHlwZV9ob2xkZXI7Ci0KLSAgICB0ZW1wbGF0ZTxzaXplX3Q+Ci0gICAgc3RydWN0IF9f
dmFsdWVfaG9sZGVyOwotfTsKLQotCi1zdHJ1Y3QgaW5fcGxhY2VfdGFnIHsKLSAgICBpbl9wbGFj
ZV90YWcoKSA9IGRlbGV0ZTsKLX07Ci0KLXVzaW5nIGluX3BsYWNlX3QgPSBpbl9wbGFjZV90YWco
JikoX19pbl9wbGFjZV9wcml2YXRlJik7Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVHlwZT4KLXVzaW5n
IGluX3BsYWNlX3R5cGVfdCA9IGluX3BsYWNlX3RhZygmKShfX2luX3BsYWNlX3ByaXZhdGU6Ol9f
dHlwZV9ob2xkZXI8X1R5cGU+Jik7Ci0KLXRlbXBsYXRlIDxzaXplX3QgX0luZGV4PgotdXNpbmcg
aW5fcGxhY2VfaW5kZXhfdCA9IGluX3BsYWNlX3RhZygmKShfX2luX3BsYWNlX3ByaXZhdGU6Ol9f
dmFsdWVfaG9sZGVyPF9JbmRleD4mKTsKLQotaW5fcGxhY2VfdGFnIGluX3BsYWNlKF9faW5fcGxh
Y2VfcHJpdmF0ZSYpOwotCi10ZW1wbGF0ZSA8Y2xhc3MgX1R5cGU+Ci1pbl9wbGFjZV90YWcgaW5f
cGxhY2UoX19pbl9wbGFjZV9wcml2YXRlOjpfX3R5cGVfaG9sZGVyPF9UeXBlPiAmKSB7Ci0gICAg
X19USFJPV19FWENFUFRJT04oX19pbl9wbGFjZV9wcml2YXRlKCkpOwotfQotCi10ZW1wbGF0ZSA8
c2l6ZV90IF9JbmRleD4KLWluX3BsYWNlX3RhZyBpbl9wbGFjZShfX2luX3BsYWNlX3ByaXZhdGU6
Ol9fdmFsdWVfaG9sZGVyPF9JbmRleD4gJikgewotICAgIF9fVEhST1dfRVhDRVBUSU9OKF9faW5f
cGxhY2VfcHJpdmF0ZSgpKTsKLX0KLQotY2xhc3MgYmFkX3ZhcmlhbnRfYWNjZXNzOiBwdWJsaWMg
c3RkOjpsb2dpY19lcnJvcnsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBiYWRfdmFyaWFudF9hY2Nl
c3MoY29uc3Qgc3RkOjpzdHJpbmcmIHdoYXRfYXJnKToKLSAgICAgICAgc3RkOjpsb2dpY19lcnJv
cih3aGF0X2FyZykKLSAgICB7fQotICAgIGV4cGxpY2l0IGJhZF92YXJpYW50X2FjY2Vzcyhjb25z
dCBjaGFyKiB3aGF0X2FyZyk6Ci0gICAgICAgIHN0ZDo6bG9naWNfZXJyb3Iod2hhdF9hcmcpCi0g
ICAge30KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1OT19SRVRVUk5fRFVFX1RPX0NSQVNI
IGlubGluZSBUIF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzKGNvbnN0IGNoYXIqIHdoYXRfYXJn
KXsKLSAgICBfX1RIUk9XX0VYQ0VQVElPTihiYWRfdmFyaWFudF9hY2Nlc3Mod2hhdF9hcmcpKQot
fQotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAu
Li4gX1R5cGVzPgotc3RydWN0IF9fdHlwZV9pbmRleF9oZWxwZXI7Ci0KLXRlbXBsYXRlPHB0cmRp
ZmZfdCBfT2Zmc2V0LHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBf
UmVzdD4KLXN0cnVjdCBfX3R5cGVfaW5kZXhfaGVscGVyPF9PZmZzZXQsX1R5cGUsX0hlYWQsX1Jl
c3QuLi4+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgcHRyZGlmZl90IF9fdmFsdWU9Ci0gICAgICAg
IF9fdHlwZV9pbmRleF9oZWxwZXI8X09mZnNldCsxLF9UeXBlLF9SZXN0Li4uPjo6X192YWx1ZTsK
LX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfT2Zmc2V0LHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1l
IC4uLiBfUmVzdD4KLXN0cnVjdCBfX3R5cGVfaW5kZXhfaGVscGVyPF9PZmZzZXQsX1R5cGUsX1R5
cGUsX1Jlc3QuLi4+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgcHRyZGlmZl90IF9fdmFsdWU9X09m
ZnNldDsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+
Ci1zdHJ1Y3QgX190eXBlX2luZGV4ewotICAgIHN0YXRpYyBjb25zdGV4cHIgcHRyZGlmZl90IF9f
dmFsdWU9Ci0gICAgICAgIF9fdHlwZV9pbmRleF9oZWxwZXI8MCxfVHlwZSxfVHlwZXMuLi4+Ojpf
X3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5
cGVzPgotc3RydWN0IF9faW5kZXhlZF90eXBlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0
eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19pbmRleGVkX3R5cGU8MCxfSGVhZCxfUmVzdC4u
Lj57Ci0gICAgdHlwZWRlZiBfSGVhZCBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBf
SGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19pbmRleGVkX3R5cGU8LTEsX0hlYWQs
X1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgdm9pZCBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxwdHJk
aWZmX3QgX0luZGV4LHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBf
X2luZGV4ZWRfdHlwZTxfSW5kZXgsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgdHlwZW5h
bWUgX19pbmRleGVkX3R5cGU8X0luZGV4LTEsX1Jlc3QuLi4+OjpfX3R5cGUgX190eXBlOwotfTsK
LQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi5fVHlwZXM+Ci1zdHJ1Y3Qg
X19uZXh0X2luZGV4ewotICAgIHN0YXRpYyBjb25zdGV4cHIgcHRyZGlmZl90IF9fdmFsdWU9Ci0g
ICAgICAgIChfSW5kZXg+PXB0cmRpZmZfdChzaXplb2YuLi4oX1R5cGVzKS0xKSk/LTE6X0luZGV4
KzE7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY2xhc3MgVmFyaWFudDsK
LQotdGVtcGxhdGU8dHlwZW5hbWU+Ci1zdHJ1Y3QgdmFyaWFudF9zaXplOwotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgdmFyaWFudF9zaXplPGNvbnN0IF9UeXBlPiA6IHZhcmlh
bnRfc2l6ZTxfVHlwZT4ge307Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2
YXJpYW50X3NpemU8dm9sYXRpbGUgX1R5cGU+IDogdmFyaWFudF9zaXplPF9UeXBlPiB7fTsKLQot
dGVtcGxhdGUgPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IHZhcmlhbnRfc2l6ZTxjb25zdCB2b2xh
dGlsZSBfVHlwZT4gOiB2YXJpYW50X3NpemU8X1R5cGU+IHt9OwotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUuLi4gX1R5cGVzPgotc3RydWN0IHZhcmlhbnRfc2l6ZTxWYXJpYW50PF9UeXBlcy4uLj4+Ci0g
ICAgOiBzdGQ6OmludGVncmFsX2NvbnN0YW50PHNpemVfdCwgc2l6ZW9mLi4uKF9UeXBlcyk+IHt9
OwotCi10ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IHZhcmlh
bnRfYWx0ZXJuYXRpdmU7Ci0KLXRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgX1R5cGU+
Ci11c2luZyB2YXJpYW50X2FsdGVybmF0aXZlX3Q9dHlwZW5hbWUgdmFyaWFudF9hbHRlcm5hdGl2
ZTxfSW5kZXgsX1R5cGU+Ojp0eXBlOwotCi10ZW1wbGF0ZSA8c2l6ZV90IF9JbmRleCwgdHlwZW5h
bWUgX1R5cGU+Ci1zdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxfSW5kZXgsIGNvbnN0IF9UeXBl
PnsKLSAgICB1c2luZyB0eXBlPXN0ZDo6YWRkX2NvbnN0X3Q8dmFyaWFudF9hbHRlcm5hdGl2ZV90
PF9JbmRleCxfVHlwZT4+OwotfTsKLQotdGVtcGxhdGUgPHNpemVfdCBfSW5kZXgsIHR5cGVuYW1l
IF9UeXBlPgotc3RydWN0IHZhcmlhbnRfYWx0ZXJuYXRpdmU8X0luZGV4LCB2b2xhdGlsZSBfVHlw
ZT57Ci0gICAgdXNpbmcgdHlwZT1zdGQ6OmFkZF92b2xhdGlsZV90PHZhcmlhbnRfYWx0ZXJuYXRp
dmVfdDxfSW5kZXgsX1R5cGU+PjsKLX07Ci0KLXRlbXBsYXRlIDxzaXplX3QgX0luZGV4LCB0eXBl
bmFtZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlPF9JbmRleCwgdm9sYXRpbGUg
Y29uc3QgX1R5cGU+ewotICAgIHVzaW5nIHR5cGU9c3RkOjphZGRfdm9sYXRpbGVfdDxzdGQ6OmFk
ZF9jb25zdF90PHZhcmlhbnRfYWx0ZXJuYXRpdmVfdDxfSW5kZXgsX1R5cGU+Pj47Ci19OwotCi10
ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgdmFyaWFu
dF9hbHRlcm5hdGl2ZTxfSW5kZXgsVmFyaWFudDxfVHlwZXMuLi4+PnsKLSAgICB1c2luZyB0eXBl
PXR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGU7Ci19Owot
Ci1jb25zdGV4cHIgc2l6ZV90IHZhcmlhbnRfbnBvcz0tMTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
X1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBfVHlwZSYgZ2V0KFZhcmlhbnQ8
X1R5cGVzLi4uPiYpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5
cGVzPgotY29uc3RleHByIF9UeXBlIGNvbnN0JiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0
Jik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25z
dGV4cHIgX1R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+JiYpOwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGNvbnN0IF9UeXBlJiYg
Z2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYmKTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9J
bmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHR5cGVuYW1lIF9faW5kZXhlZF90
eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mKTsK
LQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3Rl
eHByIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmJiBn
ZXQoVmFyaWFudDxfVHlwZXMuLi4+JiYpOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5
cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0lu
ZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBjb25zdCYgZ2V0KAotICAgIFZhcmlhbnQ8X1R5cGVzLi4u
PiBjb25zdCYpOwotCi10ZW1wbGF0ZSA8cHRyZGlmZl90IF9JbmRleCwgdHlwZW5hbWUuLi4gX1R5
cGVzPgotY29uc3RleHByIGNvbnN0IHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCwgX1R5
cGVzLi4uPjo6X190eXBlICYmCi1nZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0ICYmKTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBz
dGQ6OmFkZF9wb2ludGVyX3Q8X1R5cGU+IGdldF9pZihWYXJpYW50PF9UeXBlcy4uLj4mKTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBz
dGQ6OmFkZF9wb2ludGVyX3Q8X1R5cGUgY29uc3Q+IGdldF9pZihWYXJpYW50PF9UeXBlcy4uLj4g
Y29uc3QmKTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVz
PgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDx0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxf
SW5kZXgsX1R5cGVzLi4uPjo6X190eXBlPiBnZXRfaWYoVmFyaWFudDxfVHlwZXMuLi4+Jik7Ci0K
LXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhw
ciBzdGQ6OmFkZF9wb2ludGVyX3Q8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBl
cy4uLj46Ol9fdHlwZSBjb25zdD4gZ2V0X2lmKAotICAgIFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25z
dCYpOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1z
dHJ1Y3QgX192YXJpYW50X2FjY2Vzc29yOwotCi10ZW1wbGF0ZTxzaXplX3QgX19jb3VudCwKLSAg
ICAgICAgIGJvb2wgX19sYXJnZXJfdGhhbl9jaGFyPShfX2NvdW50PlNDSEFSX01BWCksCi0gICAg
Ym9vbCBfX2xhcmdlcl90aGFuX3Nob3J0PShfX2NvdW50PlNIUlRfTUFYKSwKLSAgICBib29sIF9f
bGFyZ2VyX3RoYW5faW50PShfX2NvdW50PklOVF9NQVgpPgotc3RydWN0IF9fZGlzY3JpbWluYXRv
cl90eXBlewotICAgIHR5cGVkZWYgc2lnbmVkIGNoYXIgX190eXBlOwotfTsKLQotdGVtcGxhdGU8
c2l6ZV90IF9fY291bnQ+Ci1zdHJ1Y3QgX19kaXNjcmltaW5hdG9yX3R5cGU8X19jb3VudCx0cnVl
LGZhbHNlLGZhbHNlPnsKLSAgICB0eXBlZGVmIHNpZ25lZCBzaG9ydCBfX3R5cGU7Ci19OwotCi10
ZW1wbGF0ZTxzaXplX3QgX19jb3VudD4KLXN0cnVjdCBfX2Rpc2NyaW1pbmF0b3JfdHlwZTxfX2Nv
dW50LHRydWUsdHJ1ZSxmYWxzZT57Ci0gICAgdHlwZWRlZiBpbnQgX190eXBlOwotfTsKLXRlbXBs
YXRlPHNpemVfdCBfX2NvdW50Pgotc3RydWN0IF9fZGlzY3JpbWluYXRvcl90eXBlPF9fY291bnQs
dHJ1ZSx0cnVlLHRydWU+ewotICAgIHR5cGVkZWYgc2lnbmVkIGxvbmcgX190eXBlOwotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX19zdG9yZWRfdHlwZXsKLSAgICB0eXBl
ZGVmIF9UeXBlIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0
IF9fc3RvcmVkX3R5cGU8X1R5cGUmPnsKLSAgICB0eXBlZGVmIF9UeXBlKiBfX3R5cGU7Ci19Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYWxsX3RyaXZpYWxseV9k
ZXN0cnVjdGlibGU7Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBfX2FsbF90cml2aWFsbHlfZGVzdHJ1
Y3RpYmxlPD4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBfX3ZhbHVlPXRydWU7Ci19Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBfX2FsbF90cml2aWFsbHlfZGVzdHJ1
Y3RpYmxlPF9UeXBlPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fdmFsdWU9Ci0gICAg
ICAgIHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTx0eXBlbmFtZSBfX3N0b3JlZF90eXBl
PF9UeXBlPjo6X190eXBlPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0
eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxf
SGVhZCxfUmVzdC4uLj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBfX3ZhbHVlPQotICAg
ICAgICBfX2FsbF90cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPF9IZWFkPjo6X192YWx1ZSAmJgotICAg
ICAgICBfX2FsbF90cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPF9SZXN0Li4uPjo6X192YWx1ZTsKLX07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UYXJnZXQsdHlwZW5hbWUgLi4uIF9BcmdzPgotc3RydWN0
IF9fc3RvcmFnZV9ub3Rocm93X2NvbnN0cnVjdGlibGV7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wg
X192YWx1ZT0KLSAgICAgICAgc3RkOjppc19ub3Rocm93X2NvbnN0cnVjdGlibGU8X1RhcmdldCwg
X0FyZ3MuLi4+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1z
dHJ1Y3QgX19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlOwotCi10ZW1wbGF0ZTw+
Ci1zdHJ1Y3QgX19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPD4gewotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBfX3ZhbHVlPXRydWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHlwZT4KLXN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X1R5
cGU+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgX192YWx1ZT0KLSAgICAgICAgc3RkOjpp
c19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTwKLSAgICAgICAgdHlwZW5hbWUgX19zdG9yZWRf
dHlwZTxfVHlwZT46Ol9fdHlwZT46OnZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hl
YWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29u
c3RydWN0aWJsZTxfSGVhZCxfUmVzdC4uLj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBf
X3ZhbHVlPQotICAgICAgICBfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X0hl
YWQ+OjpfX3ZhbHVlICYmCi0gICAgICAgIF9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0
aWJsZTxfUmVzdC4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4
LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19vdGhlcl9zdG9yYWdlX25vdGhyb3dfbW92
ZV9jb25zdHJ1Y3RpYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4g
X1Jlc3Q+Ci1zdHJ1Y3QgX19vdGhlcl9zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxl
PDAsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWU9X19zdG9y
YWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9SZXN0Li4uPjo6X192YWx1ZTsKLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX290
aGVyX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8LTEsX0hlYWQsX1Jlc3QuLi4+
ewotICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWU9Ci0gICAgICAgIF9fc3RvcmFnZV9ub3Ro
cm93X21vdmVfY29uc3RydWN0aWJsZTxfSGVhZCxfUmVzdC4uLj46Ol9fdmFsdWU7Ci19OwotCi10
ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVz
dD4KLXN0cnVjdCBfX290aGVyX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X0lu
ZGV4LF9IZWFkLF9SZXN0Li4uPnsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBfX3ZhbHVlPQotICAg
ICAgICBfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X0hlYWQ+OjpfX3ZhbHVl
ICYmCi0gICAgICAgIF9fb3RoZXJfc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxf
SW5kZXgtMSxfUmVzdC4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0lu
ZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19iYWNrdXBfc3RvcmFnZV9yZXF1aXJl
ZHsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBfX3ZhbHVlPQotICAgICAgICAhX19zdG9yYWdlX25v
dGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPAotICAgICAgICB0eXBlbmFtZSBfX2luZGV4ZWRfdHlw
ZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlPjo6X192YWx1ZSAmJgotICAgICAgICAhX19vdGhl
cl9zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9JbmRleCxfVHlwZXMuLi4+Ojpf
X3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCxwdHJkaWZmX3QgX0NvdW50
LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWly
ZWRfaW1wbHsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBfX3ZhbHVlPQotICAgICAgICBfX2JhY2t1
cF9zdG9yYWdlX3JlcXVpcmVkPF9JbmRleCxfVHlwZXMuLi4+OjpfX3ZhbHVlIHx8Ci0gICAgICAg
IF9fYW55X2JhY2t1cF9zdG9yYWdlX3JlcXVpcmVkX2ltcGw8X0luZGV4KzEsX0NvdW50LTEsX1R5
cGVzLi4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5h
bWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FueV9iYWNrdXBfc3RvcmFnZV9yZXF1aXJlZF9pbXBs
PF9JbmRleCwwLF9UeXBlcy4uLj57Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1ZT1mYWxz
ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50Pgotc3RydWN0IF9fYW55X2JhY2t1
cF9zdG9yYWdlX3JlcXVpcmVkOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3Ry
dWN0IF9fYW55X2JhY2t1cF9zdG9yYWdlX3JlcXVpcmVkPFZhcmlhbnQ8X1R5cGVzLi4uPiA+ewot
ICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWU9Ci0gICAgICAgIF9fYW55X2JhY2t1cF9zdG9y
YWdlX3JlcXVpcmVkX2ltcGw8MCxzaXplb2YuLi4oX1R5cGVzKSxfVHlwZXMuLi4+OjpfX3ZhbHVl
OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXVuaW9uIF9fdmFyaWFudF9k
YXRhOwotCi0vLyBzdGQ6OmlzX2xpdGVyYWxfdHlwZSBpcyBkZXByZWNhdGVkIGluIEMrKzE3IGFu
ZCByZW1vdmVkIGluIEMrKzIwCi1BTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgot
dGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsYm9vbD1zdGQ6OmlzX2xpdGVyYWxfdHlwZTxfVHlwZT46
OnZhbHVlPgotc3RydWN0IF9fdmFyaWFudF9zdG9yYWdlewotICAgIHR5cGVkZWYgX1R5cGUgX190
eXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYgX19nZXQoX190eXBlJiBfX3ZhbCl7
Ci0gICAgICAgIHJldHVybiBfX3ZhbDsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlw
ZSYmIF9fZ2V0X3JyZWYoX190eXBlJiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1vdmUo
X192YWwpOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IF9UeXBlJiBfX2dldChf
X3R5cGUgY29uc3QmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIF9fdmFsOwotICAgIH0KLSAgICBz
dGF0aWMgY29uc3RleHByIGNvbnN0IF9UeXBlJiYgX19nZXRfcnJlZihfX3R5cGUgY29uc3QmIF9f
dmFsKXsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZShfX3ZhbCk7Ci0gICAgfQotICAgIHN0YXRp
YyB2b2lkIF9fZGVzdHJveShfX3R5cGUmKXt9Ci19OwotQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJB
VElPTlNfRU5ECi0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fc3RvcmFnZV93
cmFwcGVyewotICAgIHR5cGVuYW1lIHN0ZDo6YWxpZ25lZF9zdG9yYWdlPHNpemVvZihfVHlwZSks
YWxpZ25vZihfVHlwZSk+Ojp0eXBlIF9fc3RvcmFnZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IC4uLiBfQXJncz4KLSAgICBzdGF0aWMgY29uc3RleHByIHZvaWQgX19jb25zdHJ1Y3Qodm9pZCog
X19wLF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIG5ldyAoX19wKSBfVHlwZShzdGQ6OmZv
cndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgIH0KLQotICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBfRHVtbXkgPSBfVHlwZT4KLSAgICBfX3N0b3JhZ2Vfd3JhcHBlcigKLSAgICAgICAgdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19kZWZhdWx0X2NvbnN0cnVjdGlibGU8X0R1bW15Pjo6
dmFsdWUsCi0gICAgICAgIHZvaWQgKF9fc3RvcmFnZV93cmFwcGVyOjoqKSgpPjo6dHlwZSA9IG51
bGxwdHIpIHsKLSAgICAgIF9fY29uc3RydWN0KCZfX3N0b3JhZ2UpOwotICAgIH0KLQotICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBfRHVtbXkgPSBfVHlwZT4KLSAgICBfX3N0b3JhZ2Vfd3JhcHBlcigK
LSAgICAgICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfZGVmYXVsdF9jb25zdHJ1
Y3RpYmxlPF9EdW1teT46OnZhbHVlLAotICAgICAgICB2b2lkIChfX3N0b3JhZ2Vfd3JhcHBlcjo6
KikoKT46OnR5cGUgPSBudWxscHRyKSB7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIF9GaXJzdCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgX19zdG9yYWdlX3dyYXBwZXIoX0Zp
cnN0JiYgX19maXJzdCxfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICBfX2NvbnN0cnVjdCgm
X19zdG9yYWdlLHN0ZDo6Zm9yd2FyZDxfRmlyc3Q+KF9fZmlyc3QpLHN0ZDo6Zm9yd2FyZDxfQXJn
cz4oX19hcmdzKS4uLik7Ci0gICAgfQotCi0gICAgX1R5cGUmIF9fZ2V0KCl7Ci0gICAgICAgIHJl
dHVybiAqc3RhdGljX2Nhc3Q8X1R5cGUqPihzdGF0aWNfY2FzdDx2b2lkKj4oJl9fc3RvcmFnZSkp
OwotICAgIH0KLSAgICBjb25zdGV4cHIgX1R5cGUgY29uc3QmIF9fZ2V0KCkgY29uc3R7Ci0gICAg
ICAgIHJldHVybiAqc3RhdGljX2Nhc3Q8X1R5cGUgY29uc3QqPihzdGF0aWNfY2FzdDx2b2lkIGNv
bnN0Kj4oJl9fc3RvcmFnZSkpOwotICAgIH0KLSAgICB2b2lkIF9fZGVzdHJveSgpewotICAgICAg
ICBfX2dldCgpLn5fVHlwZSgpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBl
Pgotc3RydWN0IF9fc3RvcmFnZV93cmFwcGVyPF9UeXBlJj57Ci0gICAgX1R5cGUqIF9fc3RvcmFn
ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Bcmc+Ci0gICAgY29uc3RleHByIF9fc3RvcmFn
ZV93cmFwcGVyKF9BcmcmIF9fYXJnKToKLSAgICAgICAgX19zdG9yYWdlKCZfX2FyZyl7fQotCi0g
ICAgX1R5cGUmIF9fZ2V0KCl7Ci0gICAgICAgIHJldHVybiAqX19zdG9yYWdlOwotICAgIH0KLSAg
ICBjb25zdGV4cHIgX1R5cGUgY29uc3QmIF9fZ2V0KCkgY29uc3R7Ci0gICAgICAgIHJldHVybiAq
X19zdG9yYWdlOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0
IF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlLGZhbHNlPnsKLSAgICB0eXBlZGVmIF9fc3RvcmFnZV93
cmFwcGVyPF9UeXBlPiBfX3R5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiBfX2dl
dChfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIF9fdmFsLl9fZ2V0KCk7Ci0gICAgfQot
ICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmJiBfX2dldF9ycmVmKF9fdHlwZSYgX192YWwpewot
ICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9fdmFsLl9fZ2V0KCkpOwotICAgIH0KLSAgICBzdGF0
aWMgY29uc3RleHByIGNvbnN0IF9UeXBlJiBfX2dldChfX3R5cGUgY29uc3QmIF9fdmFsKXsKLSAg
ICAgICAgcmV0dXJuIF9fdmFsLl9fZ2V0KCk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIg
Y29uc3QgX1R5cGUmJiBfX2dldF9ycmVmKF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAgICBy
ZXR1cm4gc3RkOjptb3ZlKF9fdmFsLl9fZ2V0KCkpOwotICAgIH0KLSAgICBzdGF0aWMgdm9pZCBf
X2Rlc3Ryb3koX190eXBlJiBfX3ZhbCl7Ci0gICAgICAgIF9fdmFsLl9fZGVzdHJveSgpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLGJvb2wgX19iPgotc3RydWN0IF9fdmFy
aWFudF9zdG9yYWdlPF9UeXBlJixfX2I+ewotICAgIHR5cGVkZWYgX1R5cGUqIF9fdHlwZTsKLQot
ICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0KF9fdHlwZSYgX192YWwpewotICAgICAg
ICByZXR1cm4gKl9fdmFsOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiBfX2dl
dF9ycmVmKF9fdHlwZSYgX192YWwpewotICAgICAgICByZXR1cm4gKl9fdmFsOwotICAgIH0KLSAg
ICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiBfX2dldChfX3R5cGUgY29uc3QmIF9fdmFsKXsKLSAg
ICAgICAgcmV0dXJuICpfX3ZhbDsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYg
X19nZXRfcnJlZihfX3R5cGUgY29uc3QmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuICpfX3ZhbDsK
LSAgICB9Ci0gICAgc3RhdGljIHZvaWQgX19kZXN0cm95KF9fdHlwZSYpe30KLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIF9UeXBlLGJvb2wgX19iPgotc3RydWN0IF9fdmFyaWFudF9zdG9yYWdlPF9U
eXBlJiYsX19iPnsKLSAgICB0eXBlZGVmIF9UeXBlKiBfX3R5cGU7Ci0KLSAgICBzdGF0aWMgY29u
c3RleHByIF9UeXBlJiYgX19nZXQoX190eXBlJiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxfVHlwZSYmPigqX192YWwpOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIF9U
eXBlJiYgX19nZXRfcnJlZihfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PF9UeXBlJiY+KCpfX3ZhbCk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUm
JiBfX2dldChfX3R5cGUgY29uc3QmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PF9UeXBlJiY+KCpfX3ZhbCk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmJiBf
X2dldF9ycmVmKF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8X1R5cGUmJj4oKl9fdmFsKTsKLSAgICB9Ci0gICAgc3RhdGljIHZvaWQgX19kZXN0cm95KF9f
dHlwZSYpe30KLX07Ci0KLXRlbXBsYXRlPD4KLXVuaW9uIF9fdmFyaWFudF9kYXRhPD57Ci0gICAg
Y29uc3RleHByIF9fdmFyaWFudF9kYXRhKCl7fQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5
cGU+Ci11bmlvbiBfX3ZhcmlhbnRfZGF0YTxfVHlwZT57Ci0gICAgdHlwZW5hbWUgX192YXJpYW50
X3N0b3JhZ2U8X1R5cGU+OjpfX3R5cGUgX192YWw7Ci0gICAgc3RydWN0IF9fZHVtbXlfdHlwZXt9
IF9fZHVtbXk7Ci0KLSAgICBjb25zdGV4cHIgX192YXJpYW50X2RhdGEoKTpfX2R1bW15KCl7fQot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIGNvbnN0ZXhwciBfX3Zhcmlh
bnRfZGF0YShpbl9wbGFjZV9pbmRleF90PDA+LF9BcmdzJiYgLi4uIF9fYXJncyk6Ci0gICAgICAg
IF9fdmFsKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLil7fQotCi0gICAgX1R5cGUmIF9f
Z2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3Jh
Z2U8X1R5cGU+OjpfX2dldChfX3ZhbCk7Ci0gICAgfQotICAgIC8qY29uc3RleHByKi8gX1R5cGUm
JiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICByZXR1cm4gX192YXJp
YW50X3N0b3JhZ2U8X1R5cGU+OjpfX2dldF9ycmVmKF9fdmFsKTsKLSAgICB9Ci0gICAgY29uc3Rl
eHByIGNvbnN0IF9UeXBlJiBfX2dldChpbl9wbGFjZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAg
ICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlPjo6X19nZXQoX192YWwpOwotICAgIH0K
LSAgICBjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8
MD4pIGNvbnN0ewotICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGU+OjpfX2dl
dF9ycmVmKF9fdmFsKTsKLSAgICB9Ci0gICAgdm9pZCBfX2Rlc3Ryb3koaW5fcGxhY2VfaW5kZXhf
dDwwPil7Ci0gICAgICAgIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlPjo6X19kZXN0cm95KF9fdmFs
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXVuaW9uIF9fdmFyaWFu
dF9kYXRhPF9UeXBlJj57Ci0gICAgdHlwZW5hbWUgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6
X190eXBlIF9fdmFsOwotICAgIHN0cnVjdCBfX2R1bW15X3R5cGV7fSBfX2R1bW15OwotCi0gICAg
Y29uc3RleHByIF9fdmFyaWFudF9kYXRhKCk6X19kdW1teSgpe30KLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIC4uLiBfQXJncz4KLSAgICBjb25zdGV4cHIgX192YXJpYW50X2RhdGEoaW5fcGxhY2Vf
aW5kZXhfdDwwPixfQXJncyYmIC4uLiBfX2FyZ3MpOgotICAgICAgICBfX3ZhbCgmc3RkOjpmb3J3
YXJkPF9BcmdzPihfX2FyZ3MpLi4uKXt9Ci0KLSAgICBfVHlwZSYgX19nZXQoaW5fcGxhY2VfaW5k
ZXhfdDwwPil7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSY+OjpfX2dl
dChfX3ZhbCk7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBfVHlwZSYgX19nZXQoaW5fcGxhY2VfaW5k
ZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSY+
OjpfX2dldChfX3ZhbCk7Ci0gICAgfQotCi0gICAgX1R5cGUmIF9fZ2V0X3JyZWYoaW5fcGxhY2Vf
aW5kZXhfdDwwPil7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSY+Ojpf
X2dldF9ycmVmKF9fdmFsKTsKLSAgICB9Ci0gICAgY29uc3RleHByIF9UeXBlJiBfX2dldF9ycmVm
KGluX3BsYWNlX2luZGV4X3Q8MD4pIGNvbnN0ewotICAgICAgICByZXR1cm4gX192YXJpYW50X3N0
b3JhZ2U8X1R5cGUmPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
X19kZXN0cm95KGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICBfX3ZhcmlhbnRfc3RvcmFn
ZTxfVHlwZSY+OjpfX2Rlc3Ryb3koX192YWwpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIF9UeXBlPgotdW5pb24gX192YXJpYW50X2RhdGE8X1R5cGUmJj57Ci0gICAgdHlwZW5hbWUg
X192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJj46Ol9fdHlwZSBfX3ZhbDsKLSAgICBzdHJ1Y3QgX19k
dW1teV90eXBle30gX19kdW1teTsKLQotICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YSgpOl9f
ZHVtbXkoKXt9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQXJnPgotICAgIF9fdmFyaWFudF9k
YXRhKGluX3BsYWNlX2luZGV4X3Q8MD4sX0FyZyYmIF9fYXJnKToKLSAgICAgICAgX192YWwoJl9f
YXJnKXt9Ci0KLSAgICBfVHlwZSYmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAg
ICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJj46Ol9fZ2V0KF9fdmFsKTsKLSAgICB9
Ci0gICAgY29uc3RleHByIF9UeXBlJiYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPikgY29uc3R7
Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYmPjo6X19nZXQoX192YWwp
OwotICAgIH0KLSAgICBfVHlwZSYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDwwPil7Ci0g
ICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYmPjo6X19nZXRfcnJlZihfX3Zh
bCk7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5k
ZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYm
Pjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIHZvaWQgX19kZXN0cm95KGluX3BsYWNl
X2luZGV4X3Q8MD4pewotICAgICAgICBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYmPjo6X19kZXN0
cm95KF9fdmFsKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFt
ZSAuLi4gX1Jlc3Q+Ci11bmlvbiBfX3ZhcmlhbnRfZGF0YTxfSGVhZCxfUmVzdC4uLj57Ci0gICAg
X192YXJpYW50X2RhdGE8X0hlYWQ+IF9faGVhZDsKLSAgICBfX3ZhcmlhbnRfZGF0YTxfUmVzdC4u
Lj4gX19yZXN0OwotCi0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKCk6Ci0gICAgICAgIF9f
aGVhZCgpe30KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBjb25zdGV4
cHIgX192YXJpYW50X2RhdGEoaW5fcGxhY2VfaW5kZXhfdDwwPixfQXJncyYmIC4uLiBfX2FyZ3Mp
OgotICAgICAgICBfX2hlYWQoaW5fcGxhY2U8MD4sc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3Mp
Li4uKXt9Ci0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0g
ICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKGluX3BsYWNlX2luZGV4X3Q8X0luZGV4PixfQXJn
cyYmIC4uLiBfX2FyZ3MpOgotICAgICAgICBfX3Jlc3QoaW5fcGxhY2U8X0luZGV4LTE+LHN0ZDo6
Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLil7fQotCi0gICAgX0hlYWQmIF9fZ2V0KGluX3BsYWNl
X2luZGV4X3Q8MD4pewotICAgICAgICByZXR1cm4gX19oZWFkLl9fZ2V0KGluX3BsYWNlPDA+KTsK
LSAgICB9Ci0KLSAgICAvKmNvbnN0ZXhwciovIF9IZWFkJiYgX19nZXRfcnJlZihpbl9wbGFjZV9p
bmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9faGVhZC5fX2dldF9ycmVmKGluX3BsYWNlPDA+
KTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3RleHByIGNvbnN0IF9IZWFkJiBfX2dldChpbl9wbGFj
ZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9faGVhZC5fX2dldChpbl9wbGFj
ZTwwPik7Ci0gICAgfQotCi0gICAgY29uc3RleHByIGNvbnN0IF9IZWFkJiYgX19nZXRfcnJlZihp
bl9wbGFjZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9faGVhZC5fX2dldF9y
cmVmKGluX3BsYWNlPDA+KTsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRl
eD4KLSAgICB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlw
ZSYgX19nZXQoCi0gICAgICAgIGluX3BsYWNlX2luZGV4X3Q8X0luZGV4Pil7Ci0gICAgICAgIHJl
dHVybiBfX3Jlc3QuX19nZXQoaW5fcGxhY2U8X0luZGV4LTE+KTsKLSAgICB9Ci0KLSAgICB0ZW1w
bGF0ZTxzaXplX3QgX0luZGV4PgotICAgIC8qY29uc3RleHByKi8gdHlwZW5hbWUgX19pbmRleGVk
X3R5cGU8X0luZGV4LTEsX1Jlc3QuLi4+OjpfX3R5cGUmJiBfX2dldF9ycmVmKAotICAgICAgICBp
bl9wbGFjZV9pbmRleF90PF9JbmRleD4pewotICAgICAgICByZXR1cm4gX19yZXN0Ll9fZ2V0X3Jy
ZWYoaW5fcGxhY2U8X0luZGV4LTE+KTsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8c2l6ZV90
IF9JbmRleD4KLSAgICBjb25zdGV4cHIgY29uc3QgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0lu
ZGV4LTEsX1Jlc3QuLi4+OjpfX3R5cGUmIF9fZ2V0KAotICAgICAgICBpbl9wbGFjZV9pbmRleF90
PF9JbmRleD4pIGNvbnN0ewotICAgICAgICByZXR1cm4gX19yZXN0Ll9fZ2V0KGluX3BsYWNlPF9J
bmRleC0xPik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleD4KLSAgICBjb25z
dGV4cHIgY29uc3QgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LTEsX1Jlc3QuLi4+Ojpf
X3R5cGUmJiBfX2dldF9ycmVmKAotICAgICAgICBpbl9wbGFjZV9pbmRleF90PF9JbmRleD4pIGNv
bnN0ewotICAgICAgICByZXR1cm4gX19yZXN0Ll9fZ2V0X3JyZWYoaW5fcGxhY2U8X0luZGV4LTE+
KTsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgdm9pZCBfX2Rlc3Ryb3koaW5fcGxhY2VfaW5kZXhf
dDwwPil7Ci0gICAgICAgIF9faGVhZC5fX2Rlc3Ryb3koaW5fcGxhY2U8MD4pOwotICAgIH0KLSAg
ICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgotICAgIHZvaWQgX19kZXN0cm95KGluX3BsYWNlX2lu
ZGV4X3Q8X0luZGV4Pil7Ci0gICAgICAgIF9fcmVzdC5fX2Rlc3Ryb3koaW5fcGxhY2U8X0luZGV4
LTE+KTsKLSAgICB9Ci19OwotCi0KLXRlbXBsYXRlPHB0cmRpZmZfdC4uLiBfSW5kaWNlcz4KLXN0
cnVjdCBfX2luZGV4X3NlcXVlbmNlewotICAgIHR5cGVkZWYgX19pbmRleF9zZXF1ZW5jZTxfSW5k
aWNlcy4uLixzaXplb2YuLi4oX0luZGljZXMpPiBfX25leHQ7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBzaXplX3QgX19sZW5ndGg9c2l6ZW9mLi4uKF9JbmRpY2VzKTsKLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX190eXBlX2luZGljZXM7Ci0KLXRlbXBsYXRlPD4K
LXN0cnVjdCBfX3R5cGVfaW5kaWNlczw+ewotICAgIHR5cGVkZWYgX19pbmRleF9zZXF1ZW5jZTw+
IF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fdHlwZV9p
bmRpY2VzPF9UeXBlPnsKLSAgICB0eXBlZGVmIF9faW5kZXhfc2VxdWVuY2U8MD4gX190eXBlOwot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0
IF9fdHlwZV9pbmRpY2VzPF9UeXBlLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9f
dHlwZV9pbmRpY2VzPF9SZXN0Li4uPjo6X190eXBlOjpfX25leHQgX190eXBlOwotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQ+Ci1zdHJ1Y3QgX192YXJpYW50X2luZGljZXM7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX192YXJpYW50X2luZGljZXM8VmFy
aWFudDxfVHlwZXMuLi4+PnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV9pbmRpY2VzPF9U
eXBlcy4uLj46Ol9fdHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFu
dCwKLSAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2Vz
PF9WYXJpYW50Pjo6X190eXBlPgotc3RydWN0IF9fbW92ZV9jb25zdHJ1Y3Rfb3BfdGFibGU7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1
Y3QgX19tb3ZlX2NvbnN0cnVjdF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9J
bmRpY2VzLi4uPj57Ci0gICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19mdW5jX3R5cGUpKF9WYXJp
YW50KixfVmFyaWFudCYpOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0g
ICAgc3RhdGljIHZvaWQgX19tb3ZlX2NvbnN0cnVjdF9mdW5jKAotICAgICAgICBfVmFyaWFudCAq
IF9fbGhzLF9WYXJpYW50JiBfX3Jocyl7Ci0gICAgICAgIF9fbGhzLT50ZW1wbGF0ZSBfX2VtcGxh
Y2VfY29uc3RydWN0PF9JbmRleD4oCi0gICAgICAgICAgICBzdGQ6Om1vdmUoZ2V0PF9JbmRleD4o
X19yaHMpKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IF9fZnVuY190eXBlIF9fYXBwbHlb
c2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxw
dHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19tb3ZlX2NvbnN0cnVjdF9v
cF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46OgotX19mdW5j
X3R5cGUKLV9fbW92ZV9jb25zdHJ1Y3Rfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5j
ZTxfSW5kaWNlcy4uLj4+OjpfX2FwcGx5WwotICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAg
ICAgICAgJl9fbW92ZV9jb25zdHJ1Y3RfZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVu
YW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotc3RydWN0IF9fbW92ZV9h
c3NpZ25fb3BfdGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAu
Li4gX0luZGljZXM+Ci1zdHJ1Y3QgX19tb3ZlX2Fzc2lnbl9vcF90YWJsZTxfVmFyaWFudCxfX2lu
ZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0gICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19m
dW5jX3R5cGUpKF9WYXJpYW50KixfVmFyaWFudCYpOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRp
ZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGljIHZvaWQgX19tb3ZlX2Fzc2lnbl9mdW5jKAotICAgICAg
ICBfVmFyaWFudCAqIF9fbGhzLF9WYXJpYW50JiBfX3Jocyl7Ci0gICAgICAgIGdldDxfSW5kZXg+
KCpfX2xocyk9c3RkOjptb3ZlKGdldDxfSW5kZXg+KF9fcmhzKSk7Ci0gICAgfQotCi0gICAgc3Rh
dGljIGNvbnN0IF9fZnVuY190eXBlIF9fYXBwbHlbc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci19Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29u
c3QgdHlwZW5hbWUgX19tb3ZlX2Fzc2lnbl9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVl
bmNlPF9JbmRpY2VzLi4uPj46OgotX19mdW5jX3R5cGUKLV9fbW92ZV9hc3NpZ25fb3BfdGFibGU8
X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2FwcGx5WwotICAgIHNp
emVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9fbW92ZV9hc3NpZ25fZnVuYzxfSW5kaWNl
cz4uLi4KLSAgICB9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5
cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190
eXBlPgotc3RydWN0IF9fY29weV9jb25zdHJ1Y3Rfb3BfdGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX19jb3B5X2NvbnN0
cnVjdF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0g
ICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19mdW5jX3R5cGUpKF9WYXJpYW50KixfVmFyaWFudCBj
b25zdCYpOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGlj
IHZvaWQgX19jb3B5X2NvbnN0cnVjdF9mdW5jKAotICAgICAgICBfVmFyaWFudCAqIF9fbGhzLF9W
YXJpYW50IGNvbnN0JiBfX3Jocyl7Ci0gICAgICAgIF9fbGhzLT50ZW1wbGF0ZSBfX2VtcGxhY2Vf
Y29uc3RydWN0PF9JbmRleD4oCi0gICAgICAgICAgICBnZXQ8X0luZGV4PihfX3JocykpOwotICAg
IH0KLQotICAgIHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlwZSBfX2FwcGx5W3NpemVvZi4uLihfSW5k
aWNlcyldOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBf
SW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fY29weV9jb25zdHJ1Y3Rfb3BfdGFibGU8X1Zhcmlh
bnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKLV9fZnVuY190eXBlCi1fX2NvcHlf
Y29uc3RydWN0X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+
Pjo6X19hcHBseVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX2NvcHlf
Y29uc3RydWN0X2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
X1ZhcmlhbnQsCi0gICAgICAgICB0eXBlbmFtZSBfSW5kaWNlcz10eXBlbmFtZSBfX3ZhcmlhbnRf
aW5kaWNlczxfVmFyaWFudD46Ol9fdHlwZT4KLXN0cnVjdCBfX2NvcHlfYXNzaWduX29wX3RhYmxl
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgot
c3RydWN0IF9fY29weV9hc3NpZ25fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxf
SW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fZnVuY190eXBlKShfVmFy
aWFudCosX1ZhcmlhbnQgY29uc3QmKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0lu
ZGV4PgotICAgIHN0YXRpYyB2b2lkIF9fY29weV9hc3NpZ25fZnVuYygKLSAgICAgICAgX1Zhcmlh
bnQgKiBfX2xocyxfVmFyaWFudCBjb25zdCYgX19yaHMpewotICAgICAgICBnZXQ8X0luZGV4Pigq
X19saHMpPWdldDxfSW5kZXg+KF9fcmhzKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgX19m
dW5jX3R5cGUgX19hcHBseVtzaXplb2YuLi4oX0luZGljZXMpXTsKLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1jb25zdCB0eXBlbmFtZSBf
X2NvcHlfYXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMu
Li4+Pjo6Ci1fX2Z1bmNfdHlwZQotX19jb3B5X2Fzc2lnbl9vcF90YWJsZTxfVmFyaWFudCxfX2lu
ZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fYXBwbHlbCi0gICAgc2l6ZW9mLi4uKF9JbmRp
Y2VzKV09ewotICAgICAgICAmX19jb3B5X2Fzc2lnbl9mdW5jPF9JbmRpY2VzPi4uLgotICAgIH07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGlj
ZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3Qg
X19kZXN0cm95X29wX3RhYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZm
X3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9fZGVzdHJveV9vcF90YWJsZTxfVmFyaWFudCxfX2lu
ZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0gICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19m
dW5jX3R5cGUpKF9WYXJpYW50Kik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRl
eD4KLSAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3lfZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgKiBf
X3NlbGYpewotICAgICAgICBpZihfX3NlbGYtPl9faW5kZXg+PTApewotICAgICAgICAgICAgX19z
ZWxmLT5fX3N0b3JhZ2UuX19kZXN0cm95KGluX3BsYWNlPF9JbmRleD4pOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgc3RhdGljIGNvbnN0IF9fZnVuY190eXBlIF9fYXBwbHlbc2l6ZW9mLi4uKF9J
bmRpY2VzKV07Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4u
IF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19kZXN0cm95X29wX3RhYmxlPF9WYXJpYW50LF9f
aW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6Ci1fX2Z1bmNfdHlwZQotX19kZXN0cm95X29w
X3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19hcHBseVsK
LSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX2Rlc3Ryb3lfZnVuYzxfSW5k
aWNlcz4uLi4KLSAgICB9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAg
IHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6
X190eXBlPgotc3RydWN0IF9fc3dhcF9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zh
cmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX3N3YXBfb3BfdGFibGU8X1Zh
cmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgq
IGNvbnN0IF9fZnVuY190eXBlKShfVmFyaWFudCYsX1ZhcmlhbnQmKTsKLSAgICAKLSAgICB0ZW1w
bGF0ZTxwdHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyB2b2lkIF9fc3dhcF9mdW5jKAotICAg
ICAgICBfVmFyaWFudCAmIF9fbGhzLF9WYXJpYW50ICYgX19yaHMpewotICAgICAgICBzd2FwKGdl
dDxfSW5kZXg+KF9fbGhzKSxnZXQ8X0luZGV4PihfX3JocykpOwotICAgIH0KLQotICAgIHN0YXRp
YyBjb25zdCBfX2Z1bmNfdHlwZSBfX2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyldOwotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0
IHR5cGVuYW1lIF9fc3dhcF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRp
Y2VzLi4uPj46OgotX19mdW5jX3R5cGUKLV9fc3dhcF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4
X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fYXBwbHlbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2Vz
KV09ewotICAgICAgICAmX19zd2FwX2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0gICAgICAgICB0eXBlbmFtZSBfSW5kaWNlcz10eXBlbmFt
ZSBfX3ZhcmlhbnRfaW5kaWNlczxfVmFyaWFudD46Ol9fdHlwZT4KLXN0cnVjdCBfX2VxdWFsaXR5
X29wX3RhYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9J
bmRpY2VzPgotc3RydWN0IF9fZXF1YWxpdHlfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1
ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgYm9vbCgqIGNvbnN0IF9fY29tcGFyZV9m
dW5jX3R5cGUpKF9WYXJpYW50IGNvbnN0JixfVmFyaWFudCBjb25zdCYpOwotICAgIAotICAgIHRl
bXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fZXF1
YWxpdHlfY29tcGFyZV9mdW5jKAotICAgICAgICBfVmFyaWFudCBjb25zdCYgX19saHMsX1Zhcmlh
bnQgY29uc3QmIF9fcmhzKXsKLSAgICAgICAgcmV0dXJuIGdldDxfSW5kZXg+KF9fbGhzKT09Z2V0
PF9JbmRleD4oX19yaHMpOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdGV4cHIgX19jb21wYXJl
X2Z1bmNfdHlwZSBfX2VxdWFsaXR5X2NvbXBhcmVbc2l6ZW9mLi4uKF9JbmRpY2VzKV09ewotICAg
ICAgICAmX19lcXVhbGl0eV9jb21wYXJlX2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1jb25z
dGV4cHIgdHlwZW5hbWUgX19lcXVhbGl0eV9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVl
bmNlPF9JbmRpY2VzLi4uPj46OgotX19jb21wYXJlX2Z1bmNfdHlwZQotX19lcXVhbGl0eV9vcF90
YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fZXF1YWxpdHlf
Y29tcGFyZVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
X1ZhcmlhbnQsCi0gICAgICAgICB0eXBlbmFtZSBfSW5kaWNlcz10eXBlbmFtZSBfX3ZhcmlhbnRf
aW5kaWNlczxfVmFyaWFudD46Ol9fdHlwZT4KLXN0cnVjdCBfX2xlc3NfdGhhbl9vcF90YWJsZTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0
cnVjdCBfX2xlc3NfdGhhbl9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRp
Y2VzLi4uPj57Ci0gICAgdHlwZWRlZiBib29sKCogY29uc3QgX19jb21wYXJlX2Z1bmNfdHlwZSko
X1ZhcmlhbnQgY29uc3QmLF9WYXJpYW50IGNvbnN0Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRy
ZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgX19sZXNzX3RoYW5fY29t
cGFyZV9mdW5jKAotICAgICAgICBfVmFyaWFudCBjb25zdCYgX19saHMsX1ZhcmlhbnQgY29uc3Qm
IF9fcmhzKXsKLSAgICAgICAgcmV0dXJuIGdldDxfSW5kZXg+KF9fbGhzKTxnZXQ8X0luZGV4Pihf
X3Jocyk7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBfX2NvbXBhcmVfZnVuY190eXBl
IF9fbGVzc190aGFuX2NvbXBhcmVbc2l6ZW9mLi4uKF9JbmRpY2VzKV09ewotICAgICAgICAmX19s
ZXNzX3RoYW5fY29tcGFyZV9mdW5jPF9JbmRpY2VzPi4uLgotICAgIH07Ci19OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3RleHByIHR5
cGVuYW1lIF9fbGVzc190aGFuX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0lu
ZGljZXMuLi4+Pjo6Ci1fX2NvbXBhcmVfZnVuY190eXBlCi1fX2xlc3NfdGhhbl9vcF90YWJsZTxf
VmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fbGVzc190aGFuX2NvbXBh
cmVbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJp
YW50Pgotc3RydWN0IF9fdmFyaWFudF9zdG9yYWdlX3R5cGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IF9EZXJpdmVkLGJvb2wgX190cml2aWFsX2Rlc3RydWN0b3I+Ci1zdHJ1Y3QgX192YXJpYW50X2Jh
c2UKLXsKLSAgICB+X192YXJpYW50X2Jhc2UoKXsKLSAgICAgICAgc3RhdGljX2Nhc3Q8X0Rlcml2
ZWQqPih0aGlzKS0+X19kZXN0cm95X3NlbGYoKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBfRGVyaXZlZD4KLXN0cnVjdCBfX3ZhcmlhbnRfYmFzZTxfRGVyaXZlZCx0cnVlPnsKLX07
Ci0KLQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJlbnRTZXF1ZW5j
ZSwKLSAgICAgICAgIHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3Qg
X19hbGxfaW5kaWNlc19oZWxwZXI7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfT2Zmc2V0LHB0cmRp
ZmZfdCAuLi4gX0luZGljZXMsCi0gICAgICAgICB0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4g
X1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfaW5kaWNlc19oZWxwZXI8Ci0gICAgX09mZnNldCxfX2luZGV4
X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiwKLSAgICBfVHlwZSxfVHlwZSxfUmVzdC4uLj57Ci0gICAg
dHlwZWRlZiB0eXBlbmFtZSBfX2FsbF9pbmRpY2VzX2hlbHBlcjwKLSAgICAgICAgX09mZnNldCsx
LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4sX09mZnNldD4sX1R5cGUsX1Jlc3QuLi4+Ojpf
X3R5cGUKLSAgICAgICAgX190eXBlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQs
dHlwZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSwKLSAgICAgICAgIHR5cGVuYW1lIF9UeXBlLHR5cGVu
YW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2FsbF9pbmRpY2VzX2hlbHBl
cjxfT2Zmc2V0LF9DdXJyZW50U2VxdWVuY2UsX1R5cGUsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5
cGVkZWYgdHlwZW5hbWUgX19hbGxfaW5kaWNlc19oZWxwZXI8Ci0gICAgICAgIF9PZmZzZXQrMSxf
Q3VycmVudFNlcXVlbmNlLF9UeXBlLF9SZXN0Li4uPjo6X190eXBlIF9fdHlwZTsKLX07Ci0KLXRl
bXBsYXRlPHB0cmRpZmZfdCBfT2Zmc2V0LHR5cGVuYW1lIF9DdXJyZW50U2VxdWVuY2UsdHlwZW5h
bWUgX1R5cGU+Ci1zdHJ1Y3QgX19hbGxfaW5kaWNlc19oZWxwZXI8X09mZnNldCxfQ3VycmVudFNl
cXVlbmNlLF9UeXBlPnsKLSAgICB0eXBlZGVmIF9DdXJyZW50U2VxdWVuY2UgX190eXBlOwotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBf
X2FsbF9pbmRpY2VzewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hbGxfaW5kaWNlc19oZWxwZXI8
Ci0gICAgICAgIDAsX19pbmRleF9zZXF1ZW5jZTw+LF9UeXBlLF9UeXBlcy4uLj46Ol9fdHlwZSBf
X3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1NlcXVlbmNlcz4KLXN0cnVjdCBf
X2NvbWJpbmVfc2VxdWVuY2VzOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzMSxw
dHJkaWZmX3QgLi4uIF9JbmRpY2VzMj4KLXN0cnVjdCBfX2NvbWJpbmVfc2VxdWVuY2VzPAotICAg
IF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMxLi4uPixfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2Vz
Mi4uLj4+ewotICAgIHR5cGVkZWYgX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlczEuLi4sX0luZGlj
ZXMyLi4uPiBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfU2VxdWVuY2UsdHlwZW5h
bWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fY29tYmluZV9zZXF1ZW5jZXM8X1NlcXVlbmNlLF9SZXN0
Li4uPnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fY29tYmluZV9zZXF1ZW5jZXM8Ci0gICAgICAg
IF9TZXF1ZW5jZSwKLSAgICAgICAgdHlwZW5hbWUgX19jb21iaW5lX3NlcXVlbmNlczxfUmVzdC4u
Lj46Ol9fdHlwZT46Ol9fdHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSW5k
aWNlcz4KLXN0cnVjdCBfX2ZpcnN0X2luZGV4OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0ZpcnN0
SW5kZXgscHRyZGlmZl90IC4uLiBfUmVzdD4KLXN0cnVjdCBfX2ZpcnN0X2luZGV4PF9faW5kZXhf
c2VxdWVuY2U8X0ZpcnN0SW5kZXgsX1Jlc3QuLi4+PnsKLSAgICBzdGF0aWMgY29uc3RleHByIHB0
cmRpZmZfdCBfX3ZhbHVlPV9GaXJzdEluZGV4OwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9P
ZmZzZXQsdHlwZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSwKLSAgICAgICAgIHR5cGVuYW1lIF9UeXBl
LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19jb25zdHJ1Y3RpYmxlX21hdGNoZXNfaGVs
cGVyOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBfU2VxdWVuY2UsdHlw
ZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX19jb25zdHJ1Y3RpYmxlX21hdGNoZXNfaGVscGVyPAotICAg
IF9PZmZzZXQsX1NlcXVlbmNlLF9UeXBlPnsKLSAgICB0eXBlZGVmIF9TZXF1ZW5jZSBfX3R5cGU7
Ci19OwotCi10ZW1wbGF0ZTxib29sIF9BY2NlcHQscHRyZGlmZl90IF9FbnRyeT4KLXN0cnVjdCBf
X3NlcXVlbmNlX29yX2VtcHR5ewotICAgIHR5cGVkZWYgX19pbmRleF9zZXF1ZW5jZTw+IF9fdHlw
ZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfRW50cnk+Ci1zdHJ1Y3QgX19zZXF1ZW5jZV9v
cl9lbXB0eTx0cnVlLF9FbnRyeT57Ci0gICAgdHlwZWRlZiBfX2luZGV4X3NlcXVlbmNlPF9FbnRy
eT4gX190eXBlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX0N1
cnJlbnRTZXF1ZW5jZSwKLSAgICAgICAgIHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIF9IZWFkLHR5
cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2NvbnN0cnVjdGlibGVfbWF0Y2hlc19oZWxwZXI8
Ci0gICAgX09mZnNldCxfQ3VycmVudFNlcXVlbmNlLF9UeXBlLF9IZWFkLF9SZXN0Li4uPnsKLSAg
ICB0eXBlZGVmCi0gICAgdHlwZW5hbWUgX19jb25zdHJ1Y3RpYmxlX21hdGNoZXNfaGVscGVyPAot
ICAgICAgICBfT2Zmc2V0KzEsCi0gICAgICAgIHR5cGVuYW1lIF9fY29tYmluZV9zZXF1ZW5jZXM8
Ci0gICAgICAgICAgICBfQ3VycmVudFNlcXVlbmNlLAotICAgICAgICAgICAgdHlwZW5hbWUgX19z
ZXF1ZW5jZV9vcl9lbXB0eTwKLSAgICAgICAgICAgICAgICBzdGQ6OmlzX2NvbnN0cnVjdGlibGU8
X0hlYWQsX1R5cGU+Ojp2YWx1ZSwKLSAgICAgICAgICAgICAgICBfT2Zmc2V0Pjo6X190eXBlPjo6
X190eXBlLAotICAgICAgICBfVHlwZSxfUmVzdC4uLj46Ol9fdHlwZSBfX3R5cGU7Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fY29u
c3RydWN0aWJsZV9tYXRjaGVzewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19jb25zdHJ1Y3RpYmxl
X21hdGNoZXNfaGVscGVyPAotICAgICAgICAwLF9faW5kZXhfc2VxdWVuY2U8PixfVHlwZSxfVHlw
ZXMuLi4+OjpfX3R5cGUgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlw
ZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3R5cGVfaW5kZXhfdG9fY29uc3RydWN0ewotICAg
IHR5cGVkZWYgdHlwZW5hbWUgX19hbGxfaW5kaWNlczxfVHlwZSxfVHlwZXMuLi4+OjpfX3R5cGUg
X19kaXJlY3RfbWF0Y2hlczsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fYWxsX2luZGljZXM8Ci0g
ICAgICAgIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PAotICAgICAgICAgICAgdHlwZW5hbWUg
c3RkOjpyZW1vdmVfcmVmZXJlbmNlPF9UeXBlPjo6dHlwZQotICAgICAgICAgICAgPjo6dHlwZSxf
VHlwZXMuLi4+OjpfX3R5cGUgX192YWx1ZV9tYXRjaGVzOwotICAgIHR5cGVkZWYgdHlwZW5hbWUg
X19hbGxfaW5kaWNlczwKLSAgICAgICAgX1R5cGUsCi0gICAgICAgIHR5cGVuYW1lIHN0ZDo6cmVt
b3ZlX2NvbnN0PAotICAgICAgICAgICAgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPF9U
eXBlcz46OnR5cGUKLSAgICAgICAgICAgID46OnR5cGUuLi4+OjpfX3R5cGUgX19ycmVmX21hdGNo
ZXM7Ci0KLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fY29uc3RydWN0aWJsZV9tYXRjaGVzPF9UeXBl
LF9UeXBlcy4uLj46Ol9fdHlwZQotICAgIF9fY29uc3RydWN0aWJsZXM7Ci0KLSAgICBzdGF0aWNf
YXNzZXJ0KAotICAgICAgICAoX19kaXJlY3RfbWF0Y2hlczo6X19sZW5ndGg+MCkgfHwKLSAgICAg
ICAgKF9fdmFsdWVfbWF0Y2hlczo6X19sZW5ndGg+MCkgfHwKLSAgICAgICAgKF9fcnJlZl9tYXRj
aGVzOjpfX2xlbmd0aD4wKSB8fAotICAgICAgICAoX19jb25zdHJ1Y3RpYmxlczo6X19sZW5ndGg9
PTEpLAotICAgICAgICAiRm9yIGNvbnZlcnNpb24gY29uc3RydWN0aW9uIG9mIHZhcmlhbnRzLCBl
eGFjdGx5IG9uZSB0eXBlIG11c3QgYmUgY29uc3RydWN0aWJsZSIpOwotICAgIAotICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX19jb21iaW5lX3NlcXVlbmNlczwKLSAgICAgICAgX19kaXJlY3RfbWF0Y2hl
cyxfX3ZhbHVlX21hdGNoZXMsX19ycmVmX21hdGNoZXMsCi0gICAgICAgIF9fY29uc3RydWN0aWJs
ZXM+OjpfX3R5cGUgX19hbGxfbWF0Y2hlczsKLSAgICAKLSAgICBzdGF0aWMgY29uc3RleHByIHB0
cmRpZmZfdCBfX3ZhbHVlPV9fZmlyc3RfaW5kZXg8X19hbGxfbWF0Y2hlcz46Ol9fdmFsdWU7Ci19
OwotCi1zdHJ1Y3QgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXJ7Ci0gICAgdGVtcGxhdGU8Ci0g
ICAgICAgIHB0cmRpZmZfdCBfSW5kZXgsCi0gICAgICAgIGJvb2wgX19jb25zdHJ1Y3RfZGlyZWN0
bHksCi0gICAgICAgIGJvb2wgX19pbmRleGVkX3R5cGVfaGFzX25vdGhyb3dfbW92ZSwKLSAgICAg
ICAgYm9vbCBfX290aGVyX3R5cGVzX2hhdmVfbm90aHJvd19tb3ZlPgotICAgIHN0cnVjdCBfX2hl
bHBlcjsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LAotICAgICAgICAgICAgIHR5
cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190
eXBlPgotICAgIHN0cnVjdCBfX29wX3RhYmxlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgcHRyZGlm
Zl90IF9JbmRleCwKLSAgICBib29sIF9fb3RoZXJfdHlwZXNfaGF2ZV9ub3Rocm93X21vdmU+Ci1z
dHJ1Y3QgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9faGVscGVyPAotICAgIF9JbmRleCxm
YWxzZSx0cnVlLF9fb3RoZXJfdHlwZXNfaGF2ZV9ub3Rocm93X21vdmU+ewotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgX1ZhcmlhbnQsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHN0YXRpYyB2b2lk
IF9fdHJhbXBvbGluZShfVmFyaWFudCYgX192LF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAg
IF9fdi50ZW1wbGF0ZSBfX3R3b19zdGFnZV9yZXBsYWNlPF9JbmRleD4oX19hcmdzLi4uKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTwKLSAgICBwdHJkaWZmX3QgX0luZGV4LAotICAgIGJvb2wgX19p
bmRleGVkX3R5cGVfaGFzX25vdGhyb3dfbW92ZSwKLSAgICBib29sIF9fb3RoZXJfdHlwZXNfaGF2
ZV9ub3Rocm93X21vdmU+Ci1zdHJ1Y3QgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9faGVs
cGVyPAotICAgIF9JbmRleCx0cnVlLF9faW5kZXhlZF90eXBlX2hhc19ub3Rocm93X21vdmUsCi0g
ICAgX19vdGhlcl90eXBlc19oYXZlX25vdGhyb3dfbW92ZT57Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVmFyaWFudCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgc3RhdGljIHZvaWQgX190cmFt
cG9saW5lKF9WYXJpYW50JiBfX3YsX0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgX192LnRl
bXBsYXRlIF9fZGlyZWN0X3JlcGxhY2U8X0luZGV4PihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJn
cykuLi4pOwotICAgIH0KLX07Ci0KLQotdGVtcGxhdGU8Ci0gICAgcHRyZGlmZl90IF9JbmRleD4K
LXN0cnVjdCBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19oZWxwZXI8Ci0gICAgX0luZGV4
LGZhbHNlLGZhbHNlLHRydWU+ewotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsdHlw
ZW5hbWUgLi4uIF9BcmdzPgotICAgIHN0YXRpYyB2b2lkIF9fdHJhbXBvbGluZShfVmFyaWFudCYg
X192LF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIF9fdi50ZW1wbGF0ZSBfX2xvY2FsX2Jh
Y2t1cF9yZXBsYWNlPF9JbmRleD4oc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTwKLSAgICBwdHJkaWZmX3QgX0luZGV4Pgotc3RydWN0IF9fcmVw
bGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX2hlbHBlcjwKLSAgICBfSW5kZXgsZmFsc2UsZmFsc2Us
ZmFsc2U+ewotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsdHlwZW5hbWUgLi4uIF9B
cmdzPgotICAgIHN0YXRpYyB2b2lkIF9fdHJhbXBvbGluZShfVmFyaWFudCYgX192LF9BcmdzJiYg
Li4uIF9fYXJncyl7Ci0gICAgICAgIF9fdi50ZW1wbGF0ZSBfX2RpcmVjdF9yZXBsYWNlPF9JbmRl
eD4oc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9fcmVw
bGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVu
Y2U8X0luZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX21vdmVfZnVuY190
eXBlKShfVmFyaWFudCosX1ZhcmlhbnQmKTsKLSAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Nv
cHlfZnVuY190eXBlKShfVmFyaWFudCosX1ZhcmlhbnQgY29uc3QmKTsKLSAgICAKLSAgICB0ZW1w
bGF0ZTxwdHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyB2b2lkIF9fbW92ZV9hc3NpZ25fZnVu
YygKLSAgICAgICAgX1ZhcmlhbnQgKiBfX2xocyxfVmFyaWFudCYgX19yaHMpewotICAgICAgICBf
X2xocy0+dGVtcGxhdGUgX19yZXBsYWNlX2NvbnN0cnVjdDxfSW5kZXg+KHN0ZDo6bW92ZShnZXQ8
X0luZGV4PihfX3JocykpKTsKLSAgICAgICAgX19yaHMuX19kZXN0cm95X3NlbGYoKTsKLSAgICB9
Ci0KLSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyB2b2lkIF9fY29w
eV9hc3NpZ25fZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgKiBfX2xocyxfVmFyaWFudCBjb25zdCYg
X19yaHMpewotICAgICAgICBfX2xocy0+dGVtcGxhdGUgX19yZXBsYWNlX2NvbnN0cnVjdDxfSW5k
ZXg+KGdldDxfSW5kZXg+KF9fcmhzKSk7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBjb25zdCBf
X21vdmVfZnVuY190eXBlIF9fbW92ZV9hc3NpZ25bc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci0gICAg
c3RhdGljIGNvbnN0IF9fY29weV9mdW5jX3R5cGUgX19jb3B5X2Fzc2lnbltzaXplb2YuLi4oX0lu
ZGljZXMpXTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4g
X0luZGljZXM+Ci1jb25zdCB0eXBlbmFtZSBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19v
cF90YWJsZTwKLSAgICBfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9f
bW92ZV9mdW5jX3R5cGUKLV9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPAot
ICAgIF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19tb3ZlX2Fzc2ln
blsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX21vdmVfYXNzaWduX2Z1
bmM8X0luZGljZXM+Li4uCi0gICAgfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRy
ZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fcmVwbGFjZV9jb25zdHJ1Y3Rf
aGVscGVyOjpfX29wX3RhYmxlPAotICAgIF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGlj
ZXMuLi4+Pjo6X19jb3B5X2Z1bmNfdHlwZQotX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9f
b3BfdGFibGU8Ci0gICAgX1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+Ojpf
X2NvcHlfYXNzaWduWwotICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9fY29w
eV9hc3NpZ25fZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3Qg
X0luZGV4LHB0cmRpZmZfdCBfTWFza0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlPgotc3RydWN0IF9f
YmFja3VwX3N0b3JhZ2Vfb3BzewotICAgIHN0YXRpYyB2b2lkIF9fbW92ZV9jb25zdHJ1Y3RfZnVu
YygKLSAgICAgICAgX1N0b3JhZ2UgKiBfX2Rlc3QsX1N0b3JhZ2UmIF9fc291cmNlKXsKLSAgICAg
ICAgbmV3KF9fZGVzdCkgX1N0b3JhZ2UoCi0gICAgICAgICAgICBpbl9wbGFjZTxfSW5kZXg+LAot
ICAgICAgICAgICAgc3RkOjptb3ZlKF9fc291cmNlLl9fZ2V0KGluX3BsYWNlPF9JbmRleD4pKSk7
Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIF9fZGVzdHJveV9mdW5jKF9TdG9yYWdlICogX19vYmop
ewotICAgICAgICBfX29iai0+X19kZXN0cm95KGluX3BsYWNlPF9JbmRleD4pOwotICAgIH07Ci19
OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlPgotc3RydWN0
IF9fYmFja3VwX3N0b3JhZ2Vfb3BzPF9JbmRleCxfSW5kZXgsX1N0b3JhZ2U+ewotICAgIHN0YXRp
YyB2b2lkIF9fbW92ZV9jb25zdHJ1Y3RfZnVuYyhfU3RvcmFnZSAqLF9TdG9yYWdlJil7Ci0gICAg
ICAgIF9fVEhST1dfRVhDRVBUSU9OKHN0ZDo6YmFkX2FsbG9jKCkpOwotICAgIH07Ci0gICAgc3Rh
dGljIHZvaWQgX19kZXN0cm95X2Z1bmMoX1N0b3JhZ2UgKil7Ci0gICAgICAgIF9fVEhST1dfRVhD
RVBUSU9OKHN0ZDo6YmFkX2FsbG9jKCkpOwotICAgIH07Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZm
X3QgX01hc2tJbmRleCx0eXBlbmFtZSBfU3RvcmFnZSx0eXBlbmFtZSBfSW5kaWNlcz4KLXN0cnVj
dCBfX2JhY2t1cF9zdG9yYWdlX29wX3RhYmxlOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX01hc2tJ
bmRleCx0eXBlbmFtZSBfU3RvcmFnZSxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9f
YmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8Ci0gICAgX01hc2tJbmRleCxfU3RvcmFnZSxfX2luZGV4
X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiA+Ci17Ci0gICAgdHlwZWRlZiB2b2lkICgqX19tb3ZlX2Z1
bmNfdHlwZSkoX1N0b3JhZ2UgKiBfX2Rlc3QsX1N0b3JhZ2UmIF9fc291cmNlKTsKLSAgICB0eXBl
ZGVmIHZvaWQgKCpfX2Rlc3Ryb3lfZnVuY190eXBlKShfU3RvcmFnZSAqIF9fb2JqKTsKLSAgICAK
LSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgotICAgIHN0cnVjdCBfX2hlbHBlcnsKLSAgICAg
ICAgdHlwZWRlZiBfX2JhY2t1cF9zdG9yYWdlX29wczxfSW5kZXgsX01hc2tJbmRleCxfU3RvcmFn
ZT4gX19vcHM7Ci0gICAgfTsKLQotICAgIHN0YXRpYyBjb25zdCBfX21vdmVfZnVuY190eXBlIF9f
bW92ZV9vcHNbc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci0gICAgc3RhdGljIGNvbnN0IF9fZGVzdHJv
eV9mdW5jX3R5cGUgX19kZXN0cm95X29wc1tzaXplb2YuLi4oX0luZGljZXMpXTsKLX07Ci0KLXRl
bXBsYXRlPHB0cmRpZmZfdCBfTWFza0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlLHB0cmRpZmZfdCAu
Li4gX0luZGljZXM+Ci1jb25zdCB0eXBlbmFtZSBfX2JhY2t1cF9zdG9yYWdlX29wX3RhYmxlPAot
ICAgIF9NYXNrSW5kZXgsX1N0b3JhZ2UsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4gPjo6
X19tb3ZlX2Z1bmNfdHlwZQotX19iYWNrdXBfc3RvcmFnZV9vcF90YWJsZTwKLSAgICBfTWFza0lu
ZGV4LF9TdG9yYWdlLF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+ID46Ol9fbW92ZV9vcHNb
Ci0gICAgICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9faGVscGVyPF9JbmRp
Y2VzPjo6X19vcHM6Ol9fbW92ZV9jb25zdHJ1Y3RfZnVuYy4uLgotICAgIH07Ci0KLXRlbXBsYXRl
PHB0cmRpZmZfdCBfTWFza0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlLHB0cmRpZmZfdCAuLi4gX0lu
ZGljZXM+Ci1jb25zdCB0eXBlbmFtZSBfX2JhY2t1cF9zdG9yYWdlX29wX3RhYmxlPAotICAgIF9N
YXNrSW5kZXgsX1N0b3JhZ2UsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4gPjo6X19kZXN0
cm95X2Z1bmNfdHlwZQotX19iYWNrdXBfc3RvcmFnZV9vcF90YWJsZTwKLSAgICBfTWFza0luZGV4
LF9TdG9yYWdlLF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+ID46Ol9fZGVzdHJveV9vcHNb
Ci0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09ewotICAgICAgICAmX19oZWxwZXI8X0luZGljZXM+
OjpfX29wczo6X19kZXN0cm95X2Z1bmMuLi4KLSAgICB9OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3Qg
X0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19iYWNrdXBfc3RvcmFnZXsKLSAg
ICB0eXBlZGVmIF9fdmFyaWFudF9kYXRhPF9UeXBlcy4uLj4gX19zdG9yYWdlX3R5cGU7Ci0KLSAg
ICB0eXBlZGVmIF9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8Ci0gICAgICAgIF9JbmRleCxfX3N0
b3JhZ2VfdHlwZSx0eXBlbmFtZSBfX3R5cGVfaW5kaWNlczxfVHlwZXMuLi4+OjpfX3R5cGU+Ci0g
ICAgX19vcF90YWJsZV90eXBlOwotCi0gICAgcHRyZGlmZl90IF9fYmFja3VwX2luZGV4OwotICAg
IF9fc3RvcmFnZV90eXBlJiBfX2xpdmVfc3RvcmFnZTsKLSAgICBfX3N0b3JhZ2VfdHlwZSBfX2Jh
Y2t1cDsKLQotICAgIF9fYmFja3VwX3N0b3JhZ2UocHRyZGlmZl90IF9fbGl2ZV9pbmRleF8sX19z
dG9yYWdlX3R5cGUmIF9fbGl2ZV9zdG9yYWdlXyk6Ci0gICAgICAgIF9fYmFja3VwX2luZGV4KF9f
bGl2ZV9pbmRleF8pLF9fbGl2ZV9zdG9yYWdlKF9fbGl2ZV9zdG9yYWdlXyl7Ci0gICAgICAgIGlm
KF9fYmFja3VwX2luZGV4Pj0wKXsKLSAgICAgICAgICAgIF9fb3BfdGFibGVfdHlwZTo6X19tb3Zl
X29wc1tfX2JhY2t1cF9pbmRleF0oCi0gICAgICAgICAgICAgICAgJl9fYmFja3VwLF9fbGl2ZV9z
dG9yYWdlKTsKLSAgICAgICAgICAgIF9fb3BfdGFibGVfdHlwZTo6X19kZXN0cm95X29wc1tfX2Jh
Y2t1cF9pbmRleF0oCi0gICAgICAgICAgICAgICAgJl9fbGl2ZV9zdG9yYWdlKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICB2b2lkIF9fZGVzdHJveSgpewotICAgICAgICBpZihfX2JhY2t1cF9pbmRl
eD49MCkKLSAgICAgICAgICAgIF9fb3BfdGFibGVfdHlwZTo6X19kZXN0cm95X29wc1tfX2JhY2t1
cF9pbmRleF0oCi0gICAgICAgICAgICAgICAgJl9fYmFja3VwKTsKLSAgICAgICAgX19iYWNrdXBf
aW5kZXg9LTE7Ci0gICAgfQotICAgIAotICAgIH5fX2JhY2t1cF9zdG9yYWdlKCl7Ci0gICAgICAg
IGlmKF9fYmFja3VwX2luZGV4Pj0wKXsKLSAgICAgICAgICAgIF9fb3BfdGFibGVfdHlwZTo6X19t
b3ZlX29wc1tfX2JhY2t1cF9pbmRleF0oCi0gICAgICAgICAgICAgICAgJl9fbGl2ZV9zdG9yYWdl
LF9fYmFja3VwKTsKLSAgICAgICAgICAgIF9fZGVzdHJveSgpOwotICAgICAgICB9Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9tb3ZlX2Nv
bnN0cnVjdGlibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVz
dD4KLXN0cnVjdCBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X0hlYWQsX1Jlc3QuLi4+Ci17Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXN0ZDo6aXNfbW92ZV9jb25zdHJ1Y3RpYmxl
PF9IZWFkPjo6dmFsdWUgJiYgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9SZXN0Li4uPjo6dmFs
dWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPD46
Ci0gICAgc3RkOjp0cnVlX3R5cGV7fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4K
LXN0cnVjdCBfX2FsbF9tb3ZlX2Fzc2lnbmFibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFk
LHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2FsbF9tb3ZlX2Fzc2lnbmFibGU8X0hlYWQs
X1Jlc3QuLi4+Ci17Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXN0ZDo6aXNfbW92
ZV9hc3NpZ25hYmxlPF9IZWFkPjo6dmFsdWUgJiYgX19hbGxfbW92ZV9hc3NpZ25hYmxlPF9SZXN0
Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19hbGxfbW92ZV9hc3NpZ25h
YmxlPD46Ci0gICAgc3RkOjp0cnVlX3R5cGV7fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9U
eXBlcz4KLXN0cnVjdCBfX2FsbF9jb3B5X2Fzc2lnbmFibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8
X0hlYWQsX1Jlc3QuLi4+Ci17Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXN0ZDo6
aXNfY29weV9hc3NpZ25hYmxlPF9IZWFkPjo6dmFsdWUgJiYgX19hbGxfY29weV9hc3NpZ25hYmxl
PF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19hbGxfY29weV9h
c3NpZ25hYmxlPD46Ci0gICAgc3RkOjp0cnVlX3R5cGV7fTsKLQotbmFtZXNwYWNlIF9fc3dhcF90
ZXN0X2RldGFpbHsKLXVzaW5nIHN0ZDo6c3dhcDsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX090aGVy
Pgotc3RydWN0IF9fc3dhcF9yZXN1bHR7fTsKLQotdGVtcGxhdGU8dHlwZW5hbWU+Ci1zdGF0aWMg
Y2hhciBfX3Rlc3QoLi4uKTsKLXRlbXBsYXRlIDx0eXBlbmFtZSBfT3RoZXI+Ci1zdGF0aWMgc3Rk
OjpwYWlyPGNoYXIsIHN0ZDo6cGFpcjxjaGFyLCBfX3N3YXBfcmVzdWx0PGRlY2x0eXBlKAotICAg
IHN3YXAoc3RkOjpkZWNsdmFsPF9PdGhlciAmPigpLHN0ZDo6ZGVjbHZhbDxfT3RoZXIgJj4oKSkp
Pj4+Ci1fX3Rlc3QoX090aGVyICopOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgX1R5cGU+IHN0
cnVjdCBfX2lzX3N3YXBwYWJsZSB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0K
LSAgICAgICAgc2l6ZW9mKF9fc3dhcF90ZXN0X2RldGFpbDo6X190ZXN0PF9UeXBlPihudWxscHRy
KSkgIT0gMTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19h
bGxfc3dhcHBhYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jl
c3Q+Ci1zdHJ1Y3QgX19hbGxfc3dhcHBhYmxlPF9IZWFkLF9SZXN0Li4uPgotewotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1fX2lzX3N3YXBwYWJsZTxfSGVhZD46OnZhbHVlICYmIF9f
YWxsX3N3YXBwYWJsZTxfUmVzdC4uLj46OnZhbHVlOwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0
IF9fYWxsX3N3YXBwYWJsZTw+OgotICAgIHN0ZDo6dHJ1ZV90eXBle307Ci0KLXRlbXBsYXRlPGJv
b2wgX01vdmVDb25zdHJ1Y3RpYmxlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19ub2V4
Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0X2ltcGx7fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
X0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3Zl
X2NvbnN0cnVjdF9pbXBsPHRydWUsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCB2YWx1ZT1ub2V4Y2VwdChfSGVhZChzdGQ6OmRlY2x2YWw8X0hlYWQmJj4oKSkpICYm
IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2NvbnN0cnVjdF9pbXBsPHRydWUsX1Jlc3QuLi4+Ojp2
YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9j
b25zdHJ1Y3RfaW1wbDx0cnVlPnsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9dHJ1
ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2Vw
dF92YXJpYW50X21vdmVfY29uc3RydWN0OgotX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3Ry
dWN0X2ltcGw8X19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLF9UeXBl
cy4uLj4KLXt9OwotCi10ZW1wbGF0ZTxib29sIF9Nb3ZlQXNzaWduYWJsZSx0eXBlbmFtZSAuLi4g
X1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Fzc2lnbl9pbXBse307Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBfSGVhZCwgdHlwZW5hbWUuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19u
b2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduX2ltcGw8dHJ1ZSwgX0hlYWQsIF9SZXN0Li4uPiB7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0KLSAgICAgICAgc3RkOjppc19ub3Ro
cm93X21vdmVfYXNzaWduYWJsZTxfSGVhZD46OnZhbHVlICYmCi0gICAgICAgIHN0ZDo6aXNfbm90
aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X0hlYWQ+Ojp2YWx1ZSAmJgotICAgICAgICBfX25vZXhj
ZXB0X3ZhcmlhbnRfbW92ZV9hc3NpZ25faW1wbDx0cnVlLCBfUmVzdC4uLj46OnZhbHVlOwotfTsK
LQotdGVtcGxhdGU8Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Fzc2lnbl9pbXBs
PHRydWU+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT10cnVlOwotfTsKLQotdGVt
cGxhdGUgPHR5cGVuYW1lLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbW92
ZV9hc3NpZ24KLSAgICA6IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Fzc2lnbl9pbXBsPAotICAg
ICAgICAgIF9fYWxsX21vdmVfYXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAg
ICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsCi0gICAg
ICAgICAgX1R5cGVzLi4uPiB7fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0
cnVjdCBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFk
LHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X0hl
YWQsX1Jlc3QuLi4+Ci17Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXN0ZDo6aXNf
Y29weV9jb25zdHJ1Y3RpYmxlPF9IZWFkPjo6dmFsdWUgJiYgX19hbGxfY29weV9jb25zdHJ1Y3Rp
YmxlPF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19hbGxfY29w
eV9jb25zdHJ1Y3RpYmxlPD46Ci0gICAgc3RkOjp0cnVlX3R5cGV7fTsKLQotdGVtcGxhdGU8Ym9v
bCBfQ29weUNvbnN0cnVjdGlibGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhj
ZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbHt9OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50
X2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8dHJ1ZSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIHZhbHVlPW5vZXhjZXB0KF9IZWFkKHN0ZDo6ZGVjbHZhbDxfSGVh
ZCBjb25zdCY+KCkpKSAmJiBfX25vZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25zdHJ1Y3Rf
aW1wbDx0cnVlLF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19u
b2V4Y2VwdF92YXJpYW50X2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8dHJ1ZT57Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXRydWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAu
Li4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9jb25zdF9jb3B5X2NvbnN0cnVj
dDoKLV9fbm9leGNlcHRfdmFyaWFudF9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBsPF9fYWxsX2Nv
cHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxfVHlwZXMuLi4+Ci17fTsKLQotdGVt
cGxhdGU8Ym9vbCBfQ29weU5vbl9Db25zdHJ1Y3RpYmxlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1z
dHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBse307
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBf
X25vZXhjZXB0X3ZhcmlhbnRfbm9uX2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8dHJ1ZSxfSGVh
ZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPW5vZXhjZXB0KF9I
ZWFkKHN0ZDo6ZGVjbHZhbDxfSGVhZCY+KCkpKSAmJiBfX25vZXhjZXB0X3ZhcmlhbnRfbm9uX2Nv
bnN0X2NvcHlfY29uc3RydWN0X2ltcGw8dHJ1ZSxfUmVzdC4uLj46OnZhbHVlOwotfTsKLQotdGVt
cGxhdGU8Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9ub25fY29uc3RfY29weV9jb25zdHJ1
Y3RfaW1wbDx0cnVlPnsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9dHJ1ZTsKLX07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJp
YW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVjdDoKLV9fbm9leGNlcHRfdmFyaWFudF9ub25fY29u
c3RfY29weV9jb25zdHJ1Y3RfaW1wbDxfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4u
Pjo6dmFsdWUsX1R5cGVzLi4uPgote307Ci0KLXRlbXBsYXRlPGJvb2wgX1N3YXBwYWJsZSx0eXBl
bmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9zd2FwX2ltcGx7fTsK
LQotdGVtcGxhdGUgPHR5cGVuYW1lIF9IZWFkLCB0eXBlbmFtZS4uLiBfUmVzdD4KLXN0cnVjdCBf
X25vZXhjZXB0X3ZhcmlhbnRfc3dhcF9pbXBsPHRydWUsIF9IZWFkLCBfUmVzdC4uLj4gewotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZSA9Ci0gICAgICAgIG5vZXhjZXB0KHN3YXAoc3Rk
OjpkZWNsdmFsPF9IZWFkJj4oKSxzdGQ6OmRlY2x2YWw8X0hlYWQmPigpKSkgJiYKLSAgICAgICAg
X19ub2V4Y2VwdF92YXJpYW50X3N3YXBfaW1wbDx0cnVlLCBfUmVzdC4uLj46OnZhbHVlOwotfTsK
LQotdGVtcGxhdGU8Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9zd2FwX2ltcGw8dHJ1ZT57
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXRydWU7Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9zd2FwOgotX19u
b2V4Y2VwdF92YXJpYW50X3N3YXBfaW1wbDxfX2FsbF9zd2FwcGFibGU8X1R5cGVzLi4uPjo6dmFs
dWUsX1R5cGVzLi4uPgote307Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jbGFz
cyBWYXJpYW50OgotICAgICAgICBwcml2YXRlIF9fdmFyaWFudF9iYXNlPAotICAgIFZhcmlhbnQ8
X1R5cGVzLi4uPixfX2FsbF90cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPF9UeXBlcy4uLj46Ol9fdmFs
dWU+Ci17Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgdHlwZWRlZiBfX3Zhcmlh
bnRfYmFzZTxWYXJpYW50PF9UeXBlcy4uLj4sX19hbGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxf
VHlwZXMuLi4+OjpfX3ZhbHVlPiBfX2Jhc2VfdHlwZTsKLSAgICBmcmllbmQgX19iYXNlX3R5cGU7
Ci0gICAgZnJpZW5kIHN0cnVjdCBfX2NvcHlfY29uc3RydWN0X29wX3RhYmxlPFZhcmlhbnQ+Owot
ICAgIGZyaWVuZCBzdHJ1Y3QgX19jb3B5X2Fzc2lnbl9vcF90YWJsZTxWYXJpYW50PjsKLSAgICBm
cmllbmQgc3RydWN0IF9fbW92ZV9jb25zdHJ1Y3Rfb3BfdGFibGU8VmFyaWFudD47Ci0gICAgZnJp
ZW5kIHN0cnVjdCBfX21vdmVfYXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+OwotICAgIGZyaWVuZCBz
dHJ1Y3QgX19kZXN0cm95X29wX3RhYmxlPFZhcmlhbnQ+OwotICAgIAotICAgIHRlbXBsYXRlPHB0
cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlczI+Ci0gICAgZnJpZW5kIHN0cnVjdCBf
X3ZhcmlhbnRfYWNjZXNzb3I7Ci0KLSAgICBmcmllbmQgc3RydWN0IF9fcmVwbGFjZV9jb25zdHJ1
Y3RfaGVscGVyOwotCi0gICAgdHlwZWRlZiBfX3ZhcmlhbnRfZGF0YTxfVHlwZXMuLi4+IF9fc3Rv
cmFnZV90eXBlOwotICAgIF9fc3RvcmFnZV90eXBlIF9fc3RvcmFnZTsKLSAgICB0eXBlbmFtZSBf
X2Rpc2NyaW1pbmF0b3JfdHlwZTxzaXplb2YgLi4uIChfVHlwZXMpPjo6X190eXBlIF9faW5kZXg7
Ci0KLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBz
aXplX3QgX19lbXBsYWNlX2NvbnN0cnVjdChfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICBu
ZXcoJl9fc3RvcmFnZSkgX19zdG9yYWdlX3R5cGUoCi0gICAgICAgICAgICBpbl9wbGFjZTxfSW5k
ZXg+LHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7Ci0gICAgICAgIHJldHVybiAgX0lu
ZGV4OwotICAgIH0KLSAgICAKLSAgICB2b2lkIF9fZGVzdHJveV9zZWxmKCl7Ci0gICAgICAgIGlm
KHZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
X19kZXN0cm95X29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W2luZGV4KCldKHRoaXMpOwotICAg
ICAgICBfX2luZGV4PS0xOwotICAgIH0KLSAgICAKLSAgICBwdHJkaWZmX3QgX19tb3ZlX2NvbnN0
cnVjdChWYXJpYW50JiBfX290aGVyKXsKLSAgICAgICAgcHRyZGlmZl90IGNvbnN0IF9fb3RoZXJf
aW5kZXg9X19vdGhlci5pbmRleCgpOwotICAgICAgICBpZihfX290aGVyX2luZGV4PT0tMSkKLSAg
ICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgX19tb3ZlX2NvbnN0cnVjdF9vcF90YWJsZTxW
YXJpYW50Pjo6X19hcHBseVtfX290aGVyX2luZGV4XSh0aGlzLF9fb3RoZXIpOwotICAgICAgICBf
X290aGVyLl9fZGVzdHJveV9zZWxmKCk7Ci0gICAgICAgIHJldHVybiBfX290aGVyX2luZGV4Owot
ICAgIH0KLQotICAgIHB0cmRpZmZfdCBfX2NvcHlfY29uc3RydWN0KFZhcmlhbnQgY29uc3QmIF9f
b3RoZXIpewotICAgICAgICBwdHJkaWZmX3QgY29uc3QgX19vdGhlcl9pbmRleD1fX290aGVyLmlu
ZGV4KCk7Ci0gICAgICAgIGlmKF9fb3RoZXJfaW5kZXg9PS0xKQotICAgICAgICAgICAgcmV0dXJu
IC0xOwotICAgICAgICBfX2NvcHlfY29uc3RydWN0X29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5
W19fb3RoZXJfaW5kZXhdKHRoaXMsX19vdGhlcik7Ci0gICAgICAgIHJldHVybiBfX290aGVyX2lu
ZGV4OwotICAgIH0KLQotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9B
cmdzPgotICAgIHZvaWQgX19yZXBsYWNlX2NvbnN0cnVjdChfQXJncyYmIC4uLiBfX2FyZ3Mpewot
ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+
OjpfX3R5cGUgX190aGlzX3R5cGU7Ci0gICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVy
OjpfX2hlbHBlcjwKLSAgICAgICAgICAgIF9JbmRleCwKLSAgICAgICAgICAgIF9fc3RvcmFnZV9u
b3Rocm93X2NvbnN0cnVjdGlibGU8X190aGlzX3R5cGUsX0FyZ3MuLi4+OjpfX3ZhbHVlIHx8Ci0g
ICAgICAgICAgICAoc2l6ZW9mLi4uKF9UeXBlcyk9PTEpLAotICAgICAgICAgICAgX19zdG9yYWdl
X25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9fdGhpc190eXBlPjo6X192YWx1ZSwKLSAgICAg
ICAgICAgIF9fb3RoZXJfc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTwKLSAgICAg
ICAgICAgICAgICBfSW5kZXgsX1R5cGVzLi4uPjo6X192YWx1ZQotICAgICAgICAgICAgPjo6X190
cmFtcG9saW5lKCp0aGlzLHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7Ci0gICAgfQot
Ci0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgdm9p
ZCBfX3R3b19zdGFnZV9yZXBsYWNlKF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBfX3R5
cGU7Ci0gICAgICAgIF9fdmFyaWFudF9kYXRhPF9fdHlwZT4gX19sb2NhbCgKLSAgICAgICAgICAg
IGluX3BsYWNlPDA+LHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7Ci0gICAgICAgIF9f
ZGVzdHJveV9zZWxmKCk7Ci0gICAgICAgIF9fZW1wbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PigKLSAg
ICAgICAgICAgIHN0ZDo6bW92ZShfX2xvY2FsLl9fZ2V0KGluX3BsYWNlPDA+KSkpOwotICAgICAg
ICBfX2luZGV4PV9JbmRleDsKLSAgICAgICAgX19sb2NhbC5fX2Rlc3Ryb3koaW5fcGxhY2U8MD4p
OwotICAgIH0KLQotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9Bcmdz
PgotICAgIHZvaWQgX19sb2NhbF9iYWNrdXBfcmVwbGFjZShfQXJncyYmIC4uLiBfX2FyZ3Mpewot
ICAgICAgICBfX2JhY2t1cF9zdG9yYWdlPF9JbmRleCxfVHlwZXMuLi4+IF9fYmFja3VwKF9faW5k
ZXgsX19zdG9yYWdlKTsKLSAgICAgICAgX19lbXBsYWNlX2NvbnN0cnVjdDxfSW5kZXg+KHN0ZDo6
Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7Ci0gICAgICAgIF9faW5kZXg9X0luZGV4OwotICAg
ICAgICBfX2JhY2t1cC5fX2Rlc3Ryb3koKTsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8c2l6
ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgdm9pZCBfX2RpcmVjdF9yZXBsYWNl
KF9BcmdzJiYgLi4uIF9fYXJncykgewotICAgICAgICBfX2Rlc3Ryb3lfc2VsZigpOwotICAgICAg
ICBfX2VtcGxhY2VfY29uc3RydWN0PF9JbmRleD4oc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3Mp
Li4uKTsKLSAgICAgICAgX19pbmRleD1fSW5kZXg7Ci0gICAgfQotCi0gICAgc3RydWN0IF9fcHJp
dmF0ZV90eXBle307Ci0KLXB1YmxpYzoKLSAgICBjb25zdGV4cHIgVmFyaWFudCgpCi0gICAgICAg
IF9fTk9FWENFUFRfKG5vZXhjZXB0KHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPDAsX1R5cGVzLi4u
Pjo6X190eXBlKCkpKToKLSAgICAgICAgX19zdG9yYWdlKGluX3BsYWNlPDA+KSwKLSAgICAgICAg
X19pbmRleCgwKQotICAgIHt9Ci0KLSAgICBjb25zdGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6
OmNvbmRpdGlvbmFsPF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxW
YXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSYmIF9fb3RoZXIpCi0gICAgX19OT0VYQ0VQVF8o
X19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0PF9UeXBlcy4uLj46OnZhbHVlKToKLSAg
ICAgICAgX19pbmRleChfX21vdmVfY29uc3RydWN0KF9fb3RoZXIpKQotICAgIHt9Ci0KLSAgICBj
b25zdGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPCFfX2FsbF9tb3ZlX2Nv
bnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsVmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5
cGUmJiBfX290aGVyKT1kZWxldGU7Ci0gICAgCi0gICAgY29uc3RleHByIFZhcmlhbnQodHlwZW5h
bWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6
dmFsdWUsVmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5cGUmIF9fb3RoZXIpCi0gICAgX19OT0VY
Q0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVjdDxfVHlwZXMu
Li4+Ojp2YWx1ZSk6Ci0gICAgICAgIF9faW5kZXgoX19jb3B5X2NvbnN0cnVjdChfX290aGVyKSkK
LSAgICB7fQotCi0gICAgY29uc3RleHByIFZhcmlhbnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25h
bDwhX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLFZhcmlhbnQsX19w
cml2YXRlX3R5cGU+Ojp0eXBlJiBfX290aGVyKT1kZWxldGU7Ci0KLSAgICBjb25zdGV4cHIgVmFy
aWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxf
VHlwZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSBjb25zdCYgX19v
dGhlcikKLSAgICBfX05PRVhDRVBUXyhfX25vZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25z
dHJ1Y3Q8X1R5cGVzLi4uPjo6dmFsdWUpOgotICAgICAgICBfX2luZGV4KF9fY29weV9jb25zdHJ1
Y3QoX19vdGhlcikpCi0gICAge30KLQotICAgIGNvbnN0ZXhwciBWYXJpYW50KHR5cGVuYW1lIHN0
ZDo6Y29uZGl0aW9uYWw8IV9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1
ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSBjb25zdCYgX19vdGhlcik9ZGVsZXRlOwot
ICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfQXJncz4KLSAg
ICBleHBsaWNpdCBjb25zdGV4cHIgVmFyaWFudChpbl9wbGFjZV90eXBlX3Q8X1R5cGU+LF9Bcmdz
JiYgLi4uIF9fYXJncyk6Ci0gICAgICAgIF9fc3RvcmFnZSgKLSAgICAgICAgICAgIGluX3BsYWNl
PF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPiwKLSAgICAgICAgICAgIHN0
ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLiksCi0gICAgICAgIF9faW5kZXgoX190eXBlX2lu
ZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWUpCi0gICAgewotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfY29uc3RydWN0aWJsZTxfVHlwZSxfQXJncy4uLj46OnZhbHVlLCJUeXBlIG11
c3QgYmUgY29uc3RydWN0aWJsZSBmcm9tIGFyZ3MiKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxz
aXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBleHBsaWNpdCBjb25zdGV4cHIg
VmFyaWFudChpbl9wbGFjZV9pbmRleF90PF9JbmRleD4sX0FyZ3MmJiAuLi4gX19hcmdzKToKLSAg
ICAgICAgX19zdG9yYWdlKGluX3BsYWNlPF9JbmRleD4sc3RkOjpmb3J3YXJkPF9BcmdzPihfX2Fy
Z3MpLi4uKSwKLSAgICAgICAgX19pbmRleChfSW5kZXgpCi0gICAgewotICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfY29uc3RydWN0aWJsZTx0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5k
ZXgsX1R5cGVzLi4uPjo6X190eXBlLF9BcmdzLi4uPjo6dmFsdWUsIlR5cGUgbXVzdCBiZSBjb25z
dHJ1Y3RpYmxlIGZyb20gYXJncyIpOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHlwZT4KLSAgICBjb25zdGV4cHIgVmFyaWFudChfVHlwZSYmIF9feCk6Ci0gICAgICAgIF9f
c3RvcmFnZSgKLSAgICAgICAgICAgIGluX3BsYWNlPAotICAgICAgICAgICAgX190eXBlX2luZGV4
X3RvX2NvbnN0cnVjdDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPiwKLSAgICAgICAgICAgIHN0
ZDo6Zm9yd2FyZDxfVHlwZT4oX194KSksCi0gICAgICAgIF9faW5kZXgoX190eXBlX2luZGV4X3Rv
X2NvbnN0cnVjdDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlKQotICAgIHt9Ci0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHlwZSwKLSAgICAgICAgICAgICB0eXBlbmFtZSBfRW5hYmxlPQotICAg
ICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAgICAgICAgICAgICAgICAoX19j
b25zdHJ1Y3RpYmxlX21hdGNoZXM8c3RkOjppbml0aWFsaXplcl9saXN0PF9UeXBlPixfVHlwZXMu
Li4+OjpfX3R5cGU6Ol9fbGVuZ3RoPjApCi0gICAgICAgICAgICAgPjo6dHlwZT4KLSAgICBjb25z
dGV4cHIgVmFyaWFudChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X1R5cGU+IF9feCk6Ci0gICAgICAg
IF9fc3RvcmFnZSgKLSAgICAgICAgICAgIGluX3BsYWNlPAotICAgICAgICAgICAgX190eXBlX2lu
ZGV4X3RvX2NvbnN0cnVjdDxzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X1R5cGU+LF9UeXBlcy4uLj46
Ol9fdmFsdWU+LAotICAgICAgICAgICAgX194KSwKLSAgICAgICAgX19pbmRleChfX3R5cGVfaW5k
ZXhfdG9fY29uc3RydWN0PHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfVHlwZT4sX1R5cGVzLi4uPjo6
X192YWx1ZSkKLSAgICB7fQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotICAg
IFZhcmlhbnQmIG9wZXJhdG9yPShfVHlwZSYmIF9feCl7Ci0gICAgICAgIGNvbnN0ZXhwciBzaXpl
X3QgX0luZGV4PQotICAgICAgICAgICAgX190eXBlX2luZGV4X3RvX2NvbnN0cnVjdDxfVHlwZSxf
VHlwZXMuLi4+OjpfX3ZhbHVlOwotICAgICAgICBpZihfSW5kZXg9PV9faW5kZXgpewotICAgICAg
ICAgICAgZ2V0PF9JbmRleD4oKnRoaXMpPXN0ZDo6Zm9yd2FyZDxfVHlwZT4oX194KTsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlewotICAgICAgICAgICAgX19yZXBsYWNlX2NvbnN0cnVjdDxfSW5k
ZXg+KHN0ZDo6Zm9yd2FyZDxfVHlwZT4oX194KSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
ICp0aGlzOwotICAgIH0KLQotICAgIFZhcmlhbnQgJm9wZXJhdG9yPSgKLSAgICAgICAgdHlwZW5h
bWUgc3RkOjpjb25kaXRpb25hbDwKLSAgICAgICAgICAgICEoX19hbGxfY29weV9jb25zdHJ1Y3Rp
YmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgIF9fYWxsX21vdmVfY29uc3Ry
dWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICBfX2FsbF9jb3B5X2Fz
c2lnbmFibGU8X1R5cGVzLi4uPjo6dmFsdWUpLAotICAgICAgICAgICAgVmFyaWFudCwgX19wcml2
YXRlX3R5cGU+Ojp0eXBlIGNvbnN0ICZfX290aGVyKSA9IGRlbGV0ZTsKLQotICAgIFZhcmlhbnQg
Jm9wZXJhdG9yPSgKLSAgICAgICAgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwKLSAgICAgICAg
ICAgIF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAg
ICAgICAgICAgIF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgot
ICAgICAgICAgICAgICAgIF9fYWxsX2NvcHlfYXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSwK
LSAgICAgICAgICAgIFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZSBjb25zdCAmX19vdGhl
cikgewotICAgICAgICBpZiAoX19vdGhlci52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHsKLSAg
ICAgICAgICAgIF9fZGVzdHJveV9zZWxmKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZihf
X290aGVyLmluZGV4KCk9PWluZGV4KCkpewotICAgICAgICAgICAgX19jb3B5X2Fzc2lnbl9vcF90
YWJsZTxWYXJpYW50Pjo6X19hcHBseVtpbmRleCgpXSh0aGlzLF9fb3RoZXIpOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgICBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6
X19vcF90YWJsZTxWYXJpYW50Pjo6X19jb3B5X2Fzc2lnblsKLSAgICAgICAgICAgICAgICBfX290
aGVyLmluZGV4KCldKHRoaXMsX19vdGhlcik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICp0
aGlzOwotICAgIH0KLSAgICBWYXJpYW50ICZvcGVyYXRvcj0oCi0gICAgICAgIHR5cGVuYW1lIHN0
ZDo6Y29uZGl0aW9uYWw8Ci0gICAgICAgICAgICAhKF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxf
VHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGli
bGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgX19hbGxfY29weV9hc3NpZ25h
YmxlPF9UeXBlcy4uLj46OnZhbHVlKSwKLSAgICAgICAgICAgIFZhcmlhbnQsIF9fcHJpdmF0ZV90
eXBlPjo6dHlwZSAmX19vdGhlcikgPSBkZWxldGU7Ci0KLSAgICBWYXJpYW50ICZvcGVyYXRvcj0o
Ci0gICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8Ci0gICAgICAgICAgICBfX2FsbF9j
b3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgICBf
X2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAg
ICAgICBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8X1R5cGVzLi4uPjo6dmFsdWUsCi0gICAgICAgICAg
ICBWYXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgJl9fb3RoZXIpIHsKLSAgICAgICAgaWYo
X19vdGhlci52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpewotICAgICAgICAgICAgX19kZXN0cm95
X3NlbGYoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKF9fb3RoZXIuaW5kZXgoKT09aW5k
ZXgoKSl7Ci0gICAgICAgICAgICBfX2NvcHlfYXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2Fw
cGx5W2luZGV4KCldKHRoaXMsX19vdGhlcik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZXsKLSAg
ICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPFZhcmlhbnQ+
OjpfX2NvcHlfYXNzaWduWwotICAgICAgICAgICAgICAgIF9fb3RoZXIuaW5kZXgoKV0odGhpcyxf
X290aGVyKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIFZh
cmlhbnQgJm9wZXJhdG9yPSgKLSAgICAgICAgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwKLSAg
ICAgICAgICAgICEoX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlICYm
Ci0gICAgICAgICAgICAgIF9fYWxsX21vdmVfYXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSks
Ci0gICAgICAgICAgICBWYXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgJiZfX290aGVyKSA9
IGRlbGV0ZTsKLQotICAgIFZhcmlhbnQgJm9wZXJhdG9yPSgKLSAgICAgICAgdHlwZW5hbWUgc3Rk
Ojpjb25kaXRpb25hbDxfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUg
JiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hbGxfbW92ZV9hc3Np
Z25hYmxlPF9UeXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZSAmJgotICAgICAgICAgICAgX19vdGhl
cikgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduPF9UeXBlcy4uLj46
OnZhbHVlKSB7Ci0gICAgICAgIGlmIChfX290aGVyLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkg
ewotICAgICAgICAgICAgX19kZXN0cm95X3NlbGYoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNl
IGlmKF9fb3RoZXIuaW5kZXgoKT09aW5kZXgoKSl7Ci0gICAgICAgICAgICBfX21vdmVfYXNzaWdu
X29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W2luZGV4KCldKHRoaXMsX19vdGhlcik7Ci0gICAg
ICAgICAgICBfX290aGVyLl9fZGVzdHJveV9zZWxmKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZXsKLSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPFZh
cmlhbnQ+OjpfX21vdmVfYXNzaWduWwotICAgICAgICAgICAgICAgIF9fb3RoZXIuaW5kZXgoKV0o
dGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHZv
aWQgZW1wbGFjZShfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICBfX2RpcmVjdF9yZXBsYWNl
PF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPigKLSAgICAgICAgICAgIHN0
ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRl
PHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHZvaWQgZW1wbGFjZShfQXJn
cyYmIC4uLiBfX2FyZ3MpewotICAgICAgICBfX2RpcmVjdF9yZXBsYWNlPF9JbmRleD4oc3RkOjpm
b3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3RleHByIGJv
b2wgdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpIGNvbnN0IF9fTk9FWENFUFR7Ci0gICAgICAgIHJl
dHVybiBfX2luZGV4PT0tMTsKLSAgICB9Ci0gICAgY29uc3RleHByIHB0cmRpZmZfdCBpbmRleCgp
IGNvbnN0IF9fTk9FWENFUFR7Ci0gICAgICAgIHJldHVybiBfX2luZGV4OwotICAgIH0KLQotICAg
IHZvaWQgc3dhcCgKLSAgICAgICAgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwKLSAgICAgICAg
ICAgIF9fYWxsX3N3YXBwYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICAg
IF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSwKLSAgICAgICAgICAg
IFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZQotICAgICAgICAgICAgJl9fb3RoZXIpIF9f
Tk9FWENFUFRfKF9fbm9leGNlcHRfdmFyaWFudF9zd2FwPF9UeXBlcy4uLj46OnZhbHVlKSB7Ci0g
ICAgICAgIGlmIChfX290aGVyLmluZGV4KCkgPT0gaW5kZXgoKSkgewotICAgICAgICAgICAgaWYo
IXZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkKLSAgICAgICAgICAgICAgICBfX3N3YXBfb3BfdGFi
bGU8VmFyaWFudD46Ol9fYXBwbHlbaW5kZXgoKV0oKnRoaXMsX19vdGhlcik7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZXsKLSAgICAgICAgICAgIFZhcmlhbnQgX190ZW1wKHN0ZDo6bW92ZShfX290
aGVyKSk7Ci0gICAgICAgICAgICBfX290aGVyLl9faW5kZXg9X19vdGhlci5fX21vdmVfY29uc3Ry
dWN0KCp0aGlzKTsKLSAgICAgICAgICAgIF9faW5kZXg9X19tb3ZlX2NvbnN0cnVjdChfX3RlbXAp
OwotICAgICAgICB9Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PgotY2xhc3MgVmFyaWFudDw+ewot
cHVibGljOgotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIFZhcmlhbnQoKT1kZWxl
dGU7Ci0gICAgCi0gICAgY29uc3RleHByIGJvb2wgdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpIGNv
bnN0IF9fTk9FWENFUFR7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBjb25zdGV4
cHIgcHRyZGlmZl90IGluZGV4KCkgY29uc3QgX19OT0VYQ0VQVHsKLSAgICAgICAgcmV0dXJuIC0x
OwotICAgIH0KLQotICAgIHZvaWQgc3dhcChWYXJpYW50Jil7fQotfTsKLQotdGVtcGxhdGUgPHR5
cGVuYW1lLi4uIF9UeXBlcz4KLXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPF9fYWxsX3N3YXBwYWJs
ZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWxs
X21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHZvaWQ+Ojp0eXBlCi1zd2FwKFZhcmlhbnQ8X1R5cGVzLi4uPiAmX19saHMsIFZhcmlh
bnQ8X1R5cGVzLi4uPiAmX19yaHMpIF9fTk9FWENFUFRfKAotICAgIF9fbm9leGNlcHRfdmFyaWFu
dF9zd2FwPF9UeXBlcy4uLj46OnZhbHVlKSB7Ci0gICAgX19saHMuc3dhcChfX3Jocyk7Ci19Ci0K
LXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBf
X3ZhcmlhbnRfYWNjZXNzb3J7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxf
SW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIF9fdHlwZTsKLSAgICBzdGF0aWMgY29uc3RleHByIF9f
dHlwZSYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYgX192KXsKLSAgICAgICAgcmV0dXJuIF9fdi5f
X3N0b3JhZ2UuX19nZXQoaW5fcGxhY2U8X0luZGV4Pik7Ci0gICAgfQotICAgIHN0YXRpYyBjb25z
dGV4cHIgX190eXBlIGNvbnN0JiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Ypewot
ICAgICAgICByZXR1cm4gX192Ll9fc3RvcmFnZS5fX2dldChpbl9wbGFjZTxfSW5kZXg+KTsKLSAg
ICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfX3R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+
JiYgX192KXsKLSAgICAgICAgcmV0dXJuIF9fdi5fX3N0b3JhZ2UuX19nZXRfcnJlZihpbl9wbGFj
ZTxfSW5kZXg+KTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBfX3R5cGUmJiBn
ZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiYgX192KXsKLSAgICAgICAgcmV0dXJuIF9fdi5f
X3N0b3JhZ2UuX19nZXRfcnJlZihpbl9wbGFjZTxfSW5kZXg+KTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIF9UeXBl
JiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAgIHJldHVybiBnZXQ8X190eXBlX2lu
ZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU+KF9fdik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgX1R5cGUmJiBnZXQoVmFy
aWFudDxfVHlwZXMuLi4+JiYgX192KXsKLSAgICByZXR1cm4gZ2V0PF9fdHlwZV9pbmRleDxfVHlw
ZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPihzdGQ6Om1vdmUoX192KSk7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgX1R5cGUgY29uc3Qm
IGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdil7Ci0gICAgcmV0dXJuIGdldDxfX3R5
cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZT4oX192KTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBjb25zdCBfVHlw
ZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmJiBfX3YpewotICAgIHJldHVybiBnZXQ8
X190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU+KHN0ZDo6bW92ZShfX3YpKTsK
LX0KLQotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1j
b25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlw
ZSBjb25zdCYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX192KXsKLSAgICByZXR1cm4g
KigKLSAgICAgICAgKF9JbmRleCE9X192LmluZGV4KCkpCi0gICAgICAgICAgICA/IHN0ZDo6YWRk
cmVzc29mKF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPHR5cGVuYW1lIF9faW5kZXhlZF90eXBl
PF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3QmPigiQmFkIFZhcmlhbnQgaW5kZXggaW4g
Z2V0IikpCi0gICAgICAgICAgICA6IHN0ZDo6YWRkcmVzc29mKF9fdmFyaWFudF9hY2Nlc3Nvcjxf
SW5kZXgsX1R5cGVzLi4uPjo6Z2V0KF9fdikpCi0gICAgKTsKLX0KLQotdGVtcGxhdGU8cHRyZGlm
Zl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHR5cGVuYW1lIF9faW5k
ZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmIGdldChWYXJpYW50PF9UeXBlcy4u
Lj4mIF9fdil7Ci0gICAgcmV0dXJuICooCi0gICAgICAgIChfSW5kZXghPV9fdi5pbmRleCgpKQot
ICAgICAgICAgICAgPyBzdGQ6OmFkZHJlc3NvZihfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0
eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJj4oIkJhZCBW
YXJpYW50IGluZGV4IGluIGdldCIpKQotICAgICAgICAgICAgOiBzdGQ6OmFkZHJlc3NvZihfX3Zh
cmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldChfX3YpKQotICAgICk7Ci19Ci0K
LXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhw
ciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJiYgZ2V0
KFZhcmlhbnQ8X1R5cGVzLi4uPiYmIF9fdil7Ci0gICAgcmV0dXJuIF9fdmFyaWFudF9hY2Nlc3Nv
cjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KAotICAgICAgICAoKChfSW5kZXghPV9fdi5pbmRleCgp
KSA/IF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPGludD4oIkJhZCBWYXJpYW50IGluZGV4IGlu
IGdldCIpIDogMCksIHN0ZDo6bW92ZShfX3YpKQotICAgICk7Ci19Ci0KLXRlbXBsYXRlPHB0cmRp
ZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBjb25zdCB0eXBlbmFt
ZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJiYgZ2V0KFZhcmlhbnQ8
X1R5cGVzLi4uPiBjb25zdCYmIF9fdil7Ci0gICAgcmV0dXJuIF9fdmFyaWFudF9hY2Nlc3Nvcjxf
SW5kZXgsX1R5cGVzLi4uPjo6Z2V0KAotICAgICAgICAoKChfSW5kZXghPV9fdi5pbmRleCgpKSA/
IF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPGludD4oIkJhZCBWYXJpYW50IGluZGV4IGluIGdl
dCIpIDogMCksIHN0ZDo6bW92ZShfX3YpKQotICAgICk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90
PF9UeXBlPiBnZXRfaWYoVmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAgIHJldHVybiAoX190
eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWUhPV9fdi5pbmRleCgpKT9udWxscHRy
OnN0ZDo6YWRkcmVzc29mKGdldDxfVHlwZT4oX192KSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90
PF9UeXBlIGNvbnN0PiBnZXRfaWYoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpewotICAg
IHJldHVybiAoX190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWUhPV9fdi5pbmRl
eCgpKT9udWxscHRyOnN0ZDo6YWRkcmVzc29mKGdldDxfVHlwZT4oX192KSk7Ci19Ci0KLXRlbXBs
YXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBzdGQ6
OmFkZF9wb2ludGVyX3Q8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46
Ol9fdHlwZT4gZ2V0X2lmKFZhcmlhbnQ8X1R5cGVzLi4uPiYgX192KXsKLSAgICByZXR1cm4gKChf
SW5kZXghPV9fdi5pbmRleCgpKT9udWxscHRyOgotICAgICAgICBzdGQ6OmFkZHJlc3NvZihfX3Zh
cmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldChfX3YpKSk7Ci19Ci0KLXRlbXBs
YXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBzdGQ6
OmFkZF9wb2ludGVyX3Q8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46
Ol9fdHlwZSBjb25zdD4gZ2V0X2lmKAotICAgIFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX192
KXsKLSAgICByZXR1cm4gKChfSW5kZXghPV9fdi5pbmRleCgpKT9udWxscHRyOgotICAgICAgICBz
dGQ6OmFkZHJlc3NvZihfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldChf
X3YpKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+
Ci1jb25zdGV4cHIgYm9vbCBob2xkc19hbHRlcm5hdGl2ZShWYXJpYW50PF9UeXBlcy4uLj4gY29u
c3QmIF9fdikgX19OT0VYQ0VQVHsKLSAgICByZXR1cm4gX192LmluZGV4KCk9PV9fdHlwZV9pbmRl
eDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmlz
aXRvcix0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdmlzaXRvcl9yZXR1cm5fdHlwZTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3I+Ci1zdHJ1Y3QgX192aXNpdG9yX3JldHVybl90
eXBlPF9WaXNpdG9yPnsKLSAgICB0eXBlZGVmIGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxfVmlzaXRv
ciY+KCkoKSkgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5h
bWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fdmlzaXRvcl9yZXR1cm5fdHlw
ZTxfVmlzaXRvcixfSGVhZCxfUmVzdC4uLj57Ci0gICAgdHlwZWRlZiBkZWNsdHlwZShzdGQ6OmRl
Y2x2YWw8X1Zpc2l0b3ImPigpKHN0ZDo6ZGVjbHZhbDxfSGVhZCY+KCkpKSBfX3R5cGU7Ci19Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0
IF9fdmlzaXRvcl90YWJsZXsKLSAgICB0eXBlZGVmIFZhcmlhbnQ8X1R5cGVzLi4uPiBfX3Zhcmlh
bnRfdHlwZTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlz
aXRvcixfVHlwZXMuLi4+OjpfX3R5cGUgX19yZXR1cm5fdHlwZTsKLSAgICB0eXBlZGVmIF9fcmV0
dXJuX3R5cGUgKCpfX2Z1bmNfdHlwZSkoX1Zpc2l0b3ImLF9fdmFyaWFudF90eXBlJik7Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLSAgICBzdGF0aWMgX19yZXR1cm5fdHlwZSBfX3Ry
YW1wb2xpbmVfZnVuYyhfVmlzaXRvciYgX192aXNpdG9yLF9fdmFyaWFudF90eXBlJiBfX3Ypewot
ICAgICAgICByZXR1cm4gX192aXNpdG9yKGdldDxfVHlwZT4oX192KSk7Ci0gICAgfQotCi0gICAg
c3RhdGljIGNvbnN0IF9fZnVuY190eXBlIF9fdHJhbXBvbGluZVtzaXplb2YuLi4oX1R5cGVzKV07
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1R5cGVzPgot
Y29uc3QgdHlwZW5hbWUgX192aXNpdG9yX3RhYmxlPF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fZnVu
Y190eXBlIF9fdmlzaXRvcl90YWJsZTxfVmlzaXRvcixfVHlwZXMuLi4+OjpfX3RyYW1wb2xpbmVb
c2l6ZW9mLi4uKF9UeXBlcyldPXsKLSAgICAgICAgJl9fdHJhbXBvbGluZV9mdW5jPF9UeXBlcz4u
Li4KLSAgICB9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1R5
cGVzPgotY29uc3RleHByIHR5cGVuYW1lIF9fdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixf
VHlwZXMuLi4+OjpfX3R5cGUKLXZpc2l0KF9WaXNpdG9yJiYgX192aXNpdG9yLFZhcmlhbnQ8X1R5
cGVzLi4uPiYgX192KXsKLSAgICByZXR1cm4gKF9fdi52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkp
Ci0gICAgICAgID8gX190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3M8dHlwZW5hbWUgX192aXNpdG9y
X3JldHVybl90eXBlPF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fdHlwZT4oIlZpc2l0aW5nIG9mIGVt
cHR5IFZhcmlhbnQiKQotICAgICAgICA6IF9fdmlzaXRvcl90YWJsZTxfVmlzaXRvcixfVHlwZXMu
Li4+OjpfX3RyYW1wb2xpbmVbX192LmluZGV4KCldKF9fdmlzaXRvcixfX3YpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1ZhcmlhbnRzPgotc3RydWN0IF9f
bXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlwZXsKLSAgICB0eXBlZGVmIGRlY2x0eXBlKHN0ZDo6ZGVj
bHZhbDxfVmlzaXRvciY+KCkoZ2V0PDA+KHN0ZDo6ZGVjbHZhbDxfVmFyaWFudHM+KCkpLi4uKSkK
LSAgICBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxzaXplX3QgX1ZhcmlhbnRJbmRleCx0eXBlbmFt
ZSBfSW5kaWNlcz4KLXN0cnVjdCBfX3Zpc2l0X2hlbHBlcjsKLQotdGVtcGxhdGU8cHRyZGlmZl90
IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX3Zpc2l0X2hlbHBlcjwwLF9faW5kZXhfc2VxdWVuY2U8
X0luZGljZXMuLi4+PnsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAu
Li4gX1ZhcmlhbnRzPgotICAgIHN0YXRpYyBjb25zdGV4cHIgdHlwZW5hbWUgX19tdWx0aV92aXNp
dG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9WYXJpYW50cy4uLj46Ol9fdHlwZQotICAgIF9fdmlz
aXQoX1Zpc2l0b3ImIF9fdmlzaXRvcixfVmFyaWFudHMmIC4uLiBfX3YpewotICAgICAgICByZXR1
cm4gX192aXNpdG9yKGdldDxfSW5kaWNlcz4oX192KS4uLik7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci1zdHJ1Y3QgX19hcmdfc2VsZWN0
b3JfdDsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3Ry
dWN0IF9fYXJnX3NlbGVjdG9yX3Q8MCxfSGVhZCxfUmVzdC4uLj57Ci0gICAgdHlwZWRlZiBfSGVh
ZCBfX3R5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIF9fdHlwZSYgX19zZWxlY3QoX0hlYWQm
IF9faGVhZCxfUmVzdCYgLi4uKXsKLSAgICAgICAgcmV0dXJuIF9faGVhZDsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVz
dD4KLXN0cnVjdCBfX2FyZ19zZWxlY3Rvcl90PF9JbmRleCxfSGVhZCxfUmVzdC4uLj57Ci0gICAg
dHlwZWRlZiB0eXBlbmFtZSBfX2FyZ19zZWxlY3Rvcl90PF9JbmRleC0xLF9SZXN0Li4uPjo6X190
eXBlIF9fdHlwZTsKLSAgICBzdGF0aWMgY29uc3RleHByIF9fdHlwZSYgX19zZWxlY3QoX0hlYWQm
LF9SZXN0JiAuLi4gX19yZXN0KXsKLSAgICAgICAgcmV0dXJuIF9fYXJnX3NlbGVjdG9yX3Q8X0lu
ZGV4LTEsX1Jlc3QuLi4+OjpfX3NlbGVjdChfX3Jlc3QuLi4pOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgotY29uc3RleHByIHR5cGVuYW1l
IF9fYXJnX3NlbGVjdG9yX3Q8X0luZGV4LF9BcmdzLi4uPjo6X190eXBlJiYgX19hcmdfc2VsZWN0
b3IoX0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAgICByZXR1cm4gc3RkOjpmb3J3YXJkPHR5cGVuYW1l
IF9fYXJnX3NlbGVjdG9yX3Q8X0luZGV4LF9BcmdzLi4uPjo6X190eXBlPigKLSAgICAgICAgX19h
cmdfc2VsZWN0b3JfdDxfSW5kZXgsX0FyZ3MuLi4+OjpfX3NlbGVjdChfX2FyZ3MuLi4pKTsKLX0K
LQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCxzaXplX3QgX1ZhcmlhbnRJbmRleCxwdHJkaWZm
X3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9fdmlzaXRfaGVscGVyMnsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1ZhcmlhbnRzPgotICAgIHN0YXRpYyBjb25z
dGV4cHIgdHlwZW5hbWUgX19tdWx0aV92aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9WYXJp
YW50cy4uLj46Ol9fdHlwZQotICAgIF9fdmlzaXQoX1Zpc2l0b3ImIF9fdmlzaXRvcixfVmFyaWFu
dHMmJiAuLi4gX192KXsKLSAgICAgICAgcmV0dXJuIChfX2FyZ19zZWxlY3RvcjxfVmFyaWFudElu
ZGV4LTE+KF9fdi4uLikuaW5kZXgoKT09X0luZGV4KQotICAgICAgICAgICAgPyBfX3Zpc2l0X2hl
bHBlcjxfVmFyaWFudEluZGV4LTEsX19pbmRleF9zZXF1ZW5jZTxfSW5kZXgsX0luZGljZXMuLi4+
Pjo6X192aXNpdChfX3Zpc2l0b3Isc3RkOjpmb3J3YXJkPF9WYXJpYW50cz4oX192KS4uLikKLSAg
ICAgICAgICAgIDogX192aXNpdF9oZWxwZXIyPF9JbmRleC0xLF9WYXJpYW50SW5kZXgsX0luZGlj
ZXMuLi4+OjpfX3Zpc2l0KF9fdmlzaXRvcixzdGQ6OmZvcndhcmQ8X1ZhcmlhbnRzPihfX3YpLi4u
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTxzaXplX3QgX1ZhcmlhbnRJbmRleCxwdHJkaWZmX3Qg
Li4uIF9JbmRpY2VzPgotc3RydWN0IF9fdmlzaXRfaGVscGVyMjwtMSxfVmFyaWFudEluZGV4LF9J
bmRpY2VzLi4uPnsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4g
X1ZhcmlhbnRzPgotICAgIHN0YXRpYyBjb25zdGV4cHIgdHlwZW5hbWUgX19tdWx0aV92aXNpdG9y
X3JldHVybl90eXBlPF9WaXNpdG9yLF9WYXJpYW50cy4uLj46Ol9fdHlwZQotICAgIF9fdmlzaXQo
X1Zpc2l0b3ImLF9WYXJpYW50cyYmIC4uLil7Ci0gICAgICAgIHJldHVybiBfX3Rocm93X2JhZF92
YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0
b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlPigiVmlzaXRpbmcgb2YgZW1wdHkgVmFyaWFudCIpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50Pgotc3RydWN0IF9fdmFyaWFu
dF90eXBlX2NvdW50OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9f
dmFyaWFudF90eXBlX2NvdW50PFZhcmlhbnQ8X1R5cGVzLi4uPj57Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBzaXplX3QgX192YWx1ZT1zaXplb2YuLi4oX1R5cGVzKTsKLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIF9WYXJpYW50Pgotc3RydWN0IF9fdmFyaWFudF90eXBlX2NvdW50PF9WYXJpYW50Jj57
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgX192YWx1ZT1fX3ZhcmlhbnRfdHlwZV9jb3Vu
dDxfVmFyaWFudD46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudD4K
LXN0cnVjdCBfX3ZhcmlhbnRfdHlwZV9jb3VudDxfVmFyaWFudCBjb25zdCY+ewotICAgIHN0YXRp
YyBjb25zdGV4cHIgc2l6ZV90IF9fdmFsdWU9X192YXJpYW50X3R5cGVfY291bnQ8X1ZhcmlhbnQ+
OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8c2l6ZV90IF9WYXJpYW50SW5kZXgscHRyZGlmZl90
IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX3Zpc2l0X2hlbHBlcjxfVmFyaWFudEluZGV4LF9faW5k
ZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WaXNp
dG9yLHR5cGVuYW1lIC4uLiBfVmFyaWFudHM+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB0eXBlbmFt
ZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190
eXBlCi0gICAgX192aXNpdChfVmlzaXRvciYgX192aXNpdG9yLF9WYXJpYW50cyYmIC4uLiBfX3Yp
ewotICAgICAgICByZXR1cm4gX192aXNpdF9oZWxwZXIyPAotICAgICAgICAgICAgX192YXJpYW50
X3R5cGVfY291bnQ8Ci0gICAgICAgICAgICAgICAgdHlwZW5hbWUgX19hcmdfc2VsZWN0b3JfdDwK
LSAgICAgICAgICAgICAgICAgICAgX1ZhcmlhbnRJbmRleC0xLF9WYXJpYW50cy4uLj46Ol9fdHlw
ZT46Ol9fdmFsdWUtMSwKLSAgICAgICAgICAgIF9WYXJpYW50SW5kZXgsX0luZGljZXMuLi4+Ojpf
X3Zpc2l0KAotICAgICAgICAgICAgICAgIF9fdmlzaXRvcixzdGQ6OmZvcndhcmQ8X1ZhcmlhbnRz
JiY+KF9fdikuLi4pOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5
cGVuYW1lIC4uLiBfVmFyaWFudHM+Ci1jb25zdGV4cHIgdHlwZW5hbWUgX19tdWx0aV92aXNpdG9y
X3JldHVybl90eXBlPF9WaXNpdG9yLF9WYXJpYW50cy4uLj46Ol9fdHlwZQotdmlzaXQoX1Zpc2l0
b3ImJiBfX3Zpc2l0b3IsX1ZhcmlhbnRzJiYgLi4uIF9fdil7Ci0gICAgcmV0dXJuIF9fdmlzaXRf
aGVscGVyPHNpemVvZi4uLihfVmFyaWFudHMpLF9faW5kZXhfc2VxdWVuY2U8Pj46Ol9fdmlzaXQo
Ci0gICAgICAgIF9fdmlzaXRvcixzdGQ6OmZvcndhcmQ8X1ZhcmlhbnRzPihfX3YpLi4uKTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9y
PT0oVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX2xocyxWYXJpYW50PF9UeXBlcy4uLj4gY29u
c3QmIF9fcmhzKXsKLSAgICByZXR1cm4gKF9fbGhzLmluZGV4KCk9PV9fcmhzLmluZGV4KCkpICYm
Ci0gICAgICAgICgoX19saHMuaW5kZXgoKT09LTEpIHx8Ci0gICAgICAgICBfX2VxdWFsaXR5X29w
X3RhYmxlPFZhcmlhbnQ8X1R5cGVzLi4uPj46Ol9fZXF1YWxpdHlfY29tcGFyZVtfX2xocy5pbmRl
eCgpXSgKLSAgICAgICAgICAgICBfX2xocyxfX3JocykpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShWYXJpYW50PF9UeXBlcy4u
Lj4gY29uc3QmIF9fbGhzLFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19yaHMpewotICAgIHJl
dHVybiAhKF9fbGhzPT1fX3Jocyk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+
Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX2xo
cyxWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsKLSAgICByZXR1cm4gKF9fbGhzLmlu
ZGV4KCk8X19yaHMuaW5kZXgoKSkgfHwKLSAgICAgICAgKChfX2xocy5pbmRleCgpPT1fX3Jocy5p
bmRleCgpKSAmJgotICAgICAgICAgKChfX2xocy5pbmRleCgpIT0tMSkgJiYKLSAgICAgICAgICBf
X2xlc3NfdGhhbl9vcF90YWJsZTxWYXJpYW50PF9UeXBlcy4uLj4+OjoKLSAgICAgICAgICBfX2xl
c3NfdGhhbl9jb21wYXJlW19fbGhzLmluZGV4KCldKF9fbGhzLF9fcmhzKSkpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KFZhcmlh
bnQ8X1R5cGVzLi4uPiBjb25zdCYgX19saHMsVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Jo
cyl7Ci0gICAgcmV0dXJuIF9fcmhzPF9fbGhzOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4g
X1R5cGVzPgotY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShWYXJpYW50PF9UeXBlcy4uLj4gY29u
c3QmIF9fbGhzLFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19yaHMpewotICAgIHJldHVybiAh
KF9fbGhzPF9fcmhzKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0
ZXhwciBib29sIG9wZXJhdG9yPD0oVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX2xocyxWYXJp
YW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsKLSAgICByZXR1cm4gIShfX2xocz5fX3Jocyk7
Ci19Ci0KLXN0cnVjdCBNb25vc3RhdGV7fTsKLQotY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShN
b25vc3RhdGUgY29uc3QmLCBNb25vc3RhdGUgY29uc3QmKSB7IHJldHVybiB0cnVlOyB9Ci1jb25z
dGV4cHIgYm9vbCBvcGVyYXRvciE9KE1vbm9zdGF0ZSBjb25zdCYsIE1vbm9zdGF0ZSBjb25zdCYp
IHsgcmV0dXJuIGZhbHNlOyB9Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KE1vbm9zdGF0ZSBj
b25zdCYsIE1vbm9zdGF0ZSBjb25zdCYpIHsgcmV0dXJuIHRydWU7IH0KLWNvbnN0ZXhwciBib29s
IG9wZXJhdG9yPD0oTW9ub3N0YXRlIGNvbnN0JiwgTW9ub3N0YXRlIGNvbnN0JikgeyByZXR1cm4g
dHJ1ZTsgfQotY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KE1vbm9zdGF0ZSBjb25zdCYsIE1vbm9z
dGF0ZSBjb25zdCYpIHsgcmV0dXJuIGZhbHNlOyB9Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwo
TW9ub3N0YXRlIGNvbnN0JiwgTW9ub3N0YXRlIGNvbnN0JikgeyByZXR1cm4gZmFsc2U7IH0KLQot
c3RydWN0IF9faGFzaF92aXNpdG9yewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotICAg
IHNpemVfdCBvcGVyYXRvcigpKF9UeXBlIGNvbnN0JiBfX3gpewotICAgICAgICByZXR1cm4gc3Rk
OjpoYXNoPF9UeXBlPigpKF9feCk7Ci0gICAgfQotfTsKLQotLy8gLS0gV2ViS2l0IEFkZGl0aW9u
cyAtLQordXNpbmcgTW9ub3N0YXRlID0gc3RkOjptb25vc3RhdGU7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBUeXBlcz4KK3VzaW5nIFZhcmlhbnQgPSBzdGQ6OnZhcmlhbnQ8VHlwZXMuLi4+OwogCiB0
ZW1wbGF0ZTxjbGFzcyBWLCBjbGFzcy4uLiBGPgotYXV0byBzd2l0Y2hPbihWJiYgdiwgRiYmLi4u
IGYpIC0+IGRlY2x0eXBlKFdURjo6dmlzaXQobWFrZVZpc2l0b3Ioc3RkOjpmb3J3YXJkPEY+KGYp
Li4uKSwgc3RkOjpmb3J3YXJkPFY+KHYpKSkKK2F1dG8gc3dpdGNoT24oViYmIHYsIEYmJi4uLiBm
KSAtPiBkZWNsdHlwZShzdGQ6OnZpc2l0KG1ha2VWaXNpdG9yKHN0ZDo6Zm9yd2FyZDxGPihmKS4u
LiksIHN0ZDo6Zm9yd2FyZDxWPih2KSkpCiB7Ci0gICAgcmV0dXJuIFdURjo6dmlzaXQobWFrZVZp
c2l0b3Ioc3RkOjpmb3J3YXJkPEY+KGYpLi4uKSwgc3RkOjpmb3J3YXJkPFY+KHYpKTsKKyAgICBy
ZXR1cm4gc3RkOjp2aXNpdChtYWtlVmlzaXRvcihzdGQ6OmZvcndhcmQ8Rj4oZikuLi4pLCBzdGQ6
OmZvcndhcmQ8Vj4odikpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAotbmFtZXNwYWNlIHN0
ZCB7Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBoYXNoPFdURjo6TW9ub3N0YXRlPnsKLSAgICBzaXpl
X3Qgb3BlcmF0b3IoKShXVEY6Ok1vbm9zdGF0ZSkgX19OT0VYQ0VQVHsKLSAgICAgICAgcmV0dXJu
IDQyOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3Qg
aGFzaDxXVEY6OlZhcmlhbnQ8X1R5cGVzLi4uPj57Ci0gICAgc2l6ZV90IG9wZXJhdG9yKCkoV1RG
OjpWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QgJnYpIF9fTk9FWENFUFQgewotICAgICAgICByZXR1
cm4gc3RkOjpoYXNoPHB0cmRpZmZfdD4oKSh2LmluZGV4KCkpIF4gV1RGOjp2aXNpdChXVEY6Ol9f
aGFzaF92aXNpdG9yKCksIHYpOwotICAgIH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIHN0ZAotCiB1
c2luZyBXVEY6Ok1vbm9zdGF0ZTsKIHVzaW5nIFdURjo6VmFyaWFudDsKLQotI2VuZGlmIC8vICFD
T01QSUxFUihDTEFORykgfHwgV1RGX0NQUF9TVERfVkVSID49IDE0Ci0KLSNpZiBDT01QSUxFUihN
U1ZDKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9hcHBsZXBheS9wYXltZW50cmVxdWVzdC9BcHBsZVBheVBheW1lbnRIYW5k
bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGVwYXkvcGF5bWVudHJlcXVlc3Qv
QXBwbGVQYXlQYXltZW50SGFuZGxlci5jcHAKaW5kZXggZDFmZWNmZDNjZjdiZjIzMDVkMGViZTMx
NWYyMDIwMjUwYmEyODIxZS4uZWEzODVjYjE3MDY4ZmVlNjI4M2Q4NmRjZWQyMzJiNDkxYjM5OTM3
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsZXBheS9wYXltZW50cmVx
dWVzdC9BcHBsZVBheVBheW1lbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2FwcGxlcGF5L3BheW1lbnRyZXF1ZXN0L0FwcGxlUGF5UGF5bWVudEhhbmRsZXIuY3BwCkBA
IC0xMDIsNyArMTAyLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gQXBwbGVQYXlQYXltZW50SGFuZGxl
cjo6dmFsaWRhdGVEYXRhKERvY3VtZW50JiBkb2N1bWVudCwgSlNDOjoKIAogYm9vbCBBcHBsZVBh
eVBheW1lbnRIYW5kbGVyOjpoYW5kbGVzSWRlbnRpZmllcihjb25zdCBQYXltZW50UmVxdWVzdDo6
TWV0aG9kSWRlbnRpZmllciYgaWRlbnRpZmllcikKIHsKLSAgICBpZiAoIVdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8VVJMPihpZGVudGlmaWVyKSkKKyAgICBpZiAoIXN0ZDo6aG9sZHNfYWx0ZXJuYXRp
dmU8VVJMPihpZGVudGlmaWVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byYg
dXJsID0gV1RGOjpnZXQ8VVJMPihpZGVudGlmaWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3Vy
Y2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJk
SXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKaW5kZXggZDcxZDkxMzg4MTBkMWYzNmI5Mjc5MTI3
NzU1MDViZjM0YzBjZjQxZS4uNmVmYjM5MTE5OGFjZTBlZWJlOTE5MzVlZTc1MmQxNTYzYTAyNzYy
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xp
cGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAK
QEAgLTIxMiw5ICsyMTIsOSBAQCB2b2lkIENsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2U6
Omludm9rZUNvbXBsZXRpb25IYW5kbGVyKCkKICAgICBmb3IgKGF1dG8mIGl0ZW1UeXBlTG9hZGVy
IDogaXRlbVR5cGVMb2FkZXJzKSB7CiAgICAgICAgIGF1dG8gdHlwZSA9IGl0ZW1UeXBlTG9hZGVy
LT50eXBlKCk7CiAgICAgICAgIGF1dG8mIGRhdGEgPSBpdGVtVHlwZUxvYWRlci0+ZGF0YSgpOwot
ICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGRhdGEpICYmICEhV1RG
OjpnZXQ8U3RyaW5nPihkYXRhKSkKKyAgICAgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8
U3RyaW5nPihkYXRhKSAmJiAhIVdURjo6Z2V0PFN0cmluZz4oZGF0YSkpCiAgICAgICAgICAgICBj
dXN0b21EYXRhLndyaXRlU3RyaW5nKHR5cGUsIFdURjo6Z2V0PFN0cmluZz4oZGF0YSkpOwotICAg
ICAgICBlbHNlIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxTaGFyZWRCdWZmZXI+Pihk
YXRhKSkKKyAgICAgICAgZWxzZSBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8U2hhcmVk
QnVmZmVyPj4oZGF0YSkpCiAgICAgICAgICAgICBjdXN0b21EYXRhLndyaXRlRGF0YSh0eXBlLCBX
VEY6OmdldDxSZWY8U2hhcmVkQnVmZmVyPj4oZGF0YSkuY29weVJlZigpKTsKICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGQ6Om51bGxvcHQpOwpAQCAtMjYz
LDEwICsyNjMsMTAgQEAgdm9pZCBDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlOjpDbGlw
Ym9hcmRJdGVtVHlwZUxvYWRlcjo6c2FuaXRpemVEYXRhSWZOZWUKIHsKICAgICBpZiAobV90eXBl
ID09ICJ0ZXh0L2h0bWwiX3MpIHsKICAgICAgICAgU3RyaW5nIG1hcmt1cFRvU2FuaXRpemU7Ci0g
ICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxTaGFyZWRCdWZmZXI+PihtX2Rh
dGEpKSB7CisgICAgICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxTaGFyZWRCdWZm
ZXI+PihtX2RhdGEpKSB7CiAgICAgICAgICAgICBhdXRvJiBidWZmZXIgPSBXVEY6OmdldDxSZWY8
U2hhcmVkQnVmZmVyPj4obV9kYXRhKTsKICAgICAgICAgICAgIG1hcmt1cFRvU2FuaXRpemUgPSBT
dHJpbmc6OmZyb21VVEY4KGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7Ci0gICAgICAg
IH0gZWxzZSBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KG1fZGF0YSkpCisgICAg
ICAgIH0gZWxzZSBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KG1fZGF0YSkpCiAg
ICAgICAgICAgICBtYXJrdXBUb1Nhbml0aXplID0gV1RGOjpnZXQ8U3RyaW5nPihtX2RhdGEpOwog
CiAgICAgICAgIGlmIChtYXJrdXBUb1Nhbml0aXplLmlzRW1wdHkoKSkKQEAgLTI3Nyw5ICsyNzcs
OSBAQCB2b2lkIENsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2U6OkNsaXBib2FyZEl0ZW1U
eXBlTG9hZGVyOjpzYW5pdGl6ZURhdGFJZk5lZQogCiAgICAgaWYgKG1fdHlwZSA9PSAiaW1hZ2Uv
cG5nIl9zKSB7CiAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlclRvU2FuaXRpemU7
Ci0gICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxTaGFyZWRCdWZmZXI+Piht
X2RhdGEpKQorICAgICAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8U2hhcmVkQnVm
ZmVyPj4obV9kYXRhKSkKICAgICAgICAgICAgIGJ1ZmZlclRvU2FuaXRpemUgPSBXVEY6OmdldDxS
ZWY8U2hhcmVkQnVmZmVyPj4obV9kYXRhKS5wdHIoKTsKLSAgICAgICAgZWxzZSBpZiAoV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KG1fZGF0YSkpCisgICAgICAgIGVsc2UgaWYgKHN0ZDo6
aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihtX2RhdGEpKQogICAgICAgICAgICAgYnVmZmVyVG9T
YW5pdGl6ZSA9IHV0ZjhCdWZmZXIoV1RGOjpnZXQ8U3RyaW5nPihtX2RhdGEpKTsKIAogICAgICAg
ICBpZiAoIWJ1ZmZlclRvU2FuaXRpemUgfHwgYnVmZmVyVG9TYW5pdGl6ZS0+aXNFbXB0eSgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9ET01DYWNoZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlLmNwcAppbmRleCA0Y2ZhZmQ3Nzcy
ZDkzZWIzMDM0OWU0Yjc1MTM2M2NhY2E1NmFmN2NkLi5hMmRhOTk4NmJjMDdiNzQ4OGQ4NmE5NmRj
ZDczNTg3YTRmZTI0NzYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hl
L0RPTUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hl
LmNwcApAQCAtMjA2LDcgKzIwNiw3IEBAIHByaXZhdGU6CiBFeGNlcHRpb25PcjxSZWY8RmV0Y2hS
ZXF1ZXN0Pj4gRE9NQ2FjaGU6OnJlcXVlc3RGcm9tSW5mbyhSZXF1ZXN0SW5mbyYmIGluZm8sIGJv
b2wgaWdub3JlTWV0aG9kKQogewogICAgIFJlZlB0cjxGZXRjaFJlcXVlc3Q+IHJlcXVlc3Q7Ci0g
ICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPEZldGNoUmVxdWVzdD4+KGluZm8p
KSB7CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPEZldGNoUmVxdWVzdD4+
KGluZm8pKSB7CiAgICAgICAgIHJlcXVlc3QgPSBXVEY6OmdldDxSZWZQdHI8RmV0Y2hSZXF1ZXN0
Pj4oaW5mbykucmVsZWFzZU5vbk51bGwoKTsKICAgICAgICAgaWYgKHJlcXVlc3QtPm1ldGhvZCgp
ICE9ICJHRVQiICYmICFpZ25vcmVNZXRob2QpCiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgVHlwZUVycm9yLCAiUmVxdWVzdCBtZXRob2QgaXMgbm90IEdFVCJfcyB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmgKaW5kZXggMThmMjdkNWVlNjI2OTA5MmQ1MTAx
ODE1YTAzMDQ2NWZiMGZjNGE2YS4uNmRjZjU1MThlZmM0NzFjZjFhOWE2YTg3NGRkZmIzYWUzZmQ0
NzJjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHku
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5oCkBAIC04NCw4
ICs4NCw4IEBAIHB1YmxpYzoKICAgICAgICAgbV9yZWFkYWJsZVN0cmVhbSA9IFdURk1vdmUoc3Ry
ZWFtKTsKICAgICB9CiAKLSAgICBib29sIGlzQmxvYigpIGNvbnN0IHsgcmV0dXJuIFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8UmVmPGNvbnN0IEJsb2I+PihtX2RhdGEpOyB9Ci0gICAgYm9vbCBpc0Zv
cm1EYXRhKCkgY29uc3QgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Rm9ybURh
dGE+PihtX2RhdGEpOyB9CisgICAgYm9vbCBpc0Jsb2IoKSBjb25zdCB7IHJldHVybiBzdGQ6Omhv
bGRzX2FsdGVybmF0aXZlPFJlZjxjb25zdCBCbG9iPj4obV9kYXRhKTsgfQorICAgIGJvb2wgaXNG
b3JtRGF0YSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPEZvcm1E
YXRhPj4obV9kYXRhKTsgfQogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEZldGNoQm9keShSZWY8
Y29uc3QgQmxvYj4mJiBkYXRhKSA6IG1fZGF0YShXVEZNb3ZlKGRhdGEpKSB7IH0KQEAgLTEwNSwx
MCArMTA1LDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb25zdW1lQmxvYihGZXRjaEJvZHlPd25l
ciYsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwogICAgIHZvaWQgY29uc3VtZUZvcm1EYXRhKEZl
dGNoQm9keU93bmVyJiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CiAKLSAgICBib29sIGlzQXJy
YXlCdWZmZXIoKSBjb25zdCB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxjb25z
dCBBcnJheUJ1ZmZlcj4+KG1fZGF0YSk7IH0KLSAgICBib29sIGlzQXJyYXlCdWZmZXJWaWV3KCkg
Y29uc3QgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Y29uc3QgQXJyYXlCdWZm
ZXJWaWV3Pj4obV9kYXRhKTsgfQotICAgIGJvb2wgaXNVUkxTZWFyY2hQYXJhbXMoKSBjb25zdCB7
IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxjb25zdCBVUkxTZWFyY2hQYXJhbXM+
PihtX2RhdGEpOyB9Ci0gICAgYm9vbCBpc1RleHQoKSBjb25zdCB7IHJldHVybiBXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPFN0cmluZz4obV9kYXRhKTsgfQorICAgIGJvb2wgaXNBcnJheUJ1ZmZlcigp
IGNvbnN0IHsgcmV0dXJuIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPGNvbnN0IEFycmF5QnVm
ZmVyPj4obV9kYXRhKTsgfQorICAgIGJvb2wgaXNBcnJheUJ1ZmZlclZpZXcoKSBjb25zdCB7IHJl
dHVybiBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxjb25zdCBBcnJheUJ1ZmZlclZpZXc+Piht
X2RhdGEpOyB9CisgICAgYm9vbCBpc1VSTFNlYXJjaFBhcmFtcygpIGNvbnN0IHsgcmV0dXJuIHN0
ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPGNvbnN0IFVSTFNlYXJjaFBhcmFtcz4+KG1fZGF0YSk7
IH0KKyAgICBib29sIGlzVGV4dCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6aG9sZHNfYWx0ZXJuYXRp
dmU8U3RyaW5nPihtX2RhdGEpOyB9CiAKICAgICBjb25zdCBCbG9iJiBibG9iQm9keSgpIGNvbnN0
IHsgcmV0dXJuIFdURjo6Z2V0PFJlZjxjb25zdCBCbG9iPj4obV9kYXRhKS5nZXQoKTsgfQogICAg
IEZvcm1EYXRhJiBmb3JtRGF0YUJvZHkoKSB7IHJldHVybiBXVEY6OmdldDxSZWY8Rm9ybURhdGE+
PihtX2RhdGEpLmdldCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Zl
dGNoL0ZldGNoSGVhZGVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNo
SGVhZGVycy5jcHAKaW5kZXggYzNkYWNjN2I5MDAyYzg5ZGMyMzUyMmE1YThlZTFlMzBhY2UzM2E5
Zi4uYjJlZjBhOTRkYzczYjBlNWE1NTI5ZmZiMDI3ZDlmYWIyNzdhMDliZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmNwcApAQCAtOTgsNyArOTgsNyBA
QCBzdGF0aWMgRXhjZXB0aW9uT3I8dm9pZD4gYXBwZW5kVG9IZWFkZXJNYXAoY29uc3QgSFRUUEhl
YWRlck1hcDo6SFRUUEhlYWRlck1hcENvbgogLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5v
cmcvI2NvbmNlcHQtaGVhZGVycy1maWxsCiBzdGF0aWMgRXhjZXB0aW9uT3I8dm9pZD4gZmlsbEhl
YWRlck1hcChIVFRQSGVhZGVyTWFwJiBoZWFkZXJzLCBjb25zdCBGZXRjaEhlYWRlcnM6OkluaXQm
IGhlYWRlcnNJbml0LCBGZXRjaEhlYWRlcnM6Okd1YXJkIGd1YXJkKQogewotICAgIGlmIChXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4+KGhlYWRlcnNJbml0KSkg
eworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4+
KGhlYWRlcnNJbml0KSkgewogICAgICAgICBhdXRvJiBzZXF1ZW5jZSA9IFdURjo6Z2V0PFZlY3Rv
cjxWZWN0b3I8U3RyaW5nPj4+KGhlYWRlcnNJbml0KTsKICAgICAgICAgZm9yIChhdXRvJiBoZWFk
ZXIgOiBzZXF1ZW5jZSkgewogICAgICAgICAgICAgaWYgKGhlYWRlci5zaXplKCkgIT0gMikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXF1ZXN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXF1ZXN0LmNwcAppbmRleCBmZDU5
MTM4MWQzMmVlY2JkZWRiNmI0MDFhZjM3ODk1MWI0MjkyMGE0Li4wMTExMDdkZmI2YTBkZWQ2YWUy
N2NkZjU3NTJlOWMyMTBhZDE1NWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2ZldGNoL0ZldGNoUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRj
aC9GZXRjaFJlcXVlc3QuY3BwCkBAIC0yNzUsNyArMjc1LDcgQEAgRXhjZXB0aW9uT3I8UmVmPEZl
dGNoUmVxdWVzdD4+IEZldGNoUmVxdWVzdDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnQKIHsKICAgICBhdXRvIHJlcXVlc3QgPSBhZG9wdFJlZigqbmV3IEZldGNoUmVxdWVzdChj
b250ZXh0LCBzdGQ6Om51bGxvcHQsIEZldGNoSGVhZGVyczo6Y3JlYXRlKEZldGNoSGVhZGVyczo6
R3VhcmQ6OlJlcXVlc3QpLCB7IH0sIHsgfSwgeyB9KSk7CiAKLSAgICBpZiAoV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxTdHJpbmc+KGlucHV0KSkgeworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0
aXZlPFN0cmluZz4oaW5wdXQpKSB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gcmVxdWVzdC0+aW5p
dGlhbGl6ZVdpdGgoV1RGOjpnZXQ8U3RyaW5nPihpbnB1dCksIFdURk1vdmUoaW5pdCkpOwogICAg
ICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dC5yZWxlYXNlRXhjZXB0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ3Vyc29yLmNwcAppbmRleCBhYWFkZTMwMTYxNzkyZjAwYzQyYmVhM2VkZTBlZDNkZWEy
NGUyYzcxLi44NzM3ZDc2OTA5MGJhMjY2NzA5MDExN2JhZTk4MGQ2MWMzYmU3NWU0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKQEAgLTE5MSw3
ICsxOTEsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJREJDdXJzb3I6OmNvbnRpbnVlUHJpbWFyeUtl
eShKU0dsb2JhbE9iamVjdCYgc3RhdGUsIEpTVmFsdWUgawogICAgIGlmIChzb3VyY2VzRGVsZXRl
ZCgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJGYWls
ZWQgdG8gZXhlY3V0ZSAnY29udGludWVQcmltYXJ5S2V5JyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1
cnNvcidzIHNvdXJjZSBvciBlZmZlY3RpdmUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQu
Il9zIH07CiAKLSAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPElEQkluZGV4
Pj4obV9zb3VyY2UpKQorICAgIGlmICghc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8SURC
SW5kZXg+PihtX3NvdXJjZSkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNj
ZXNzRXJyb3IsICJGYWlsZWQgdG8gZXhlY3V0ZSAnY29udGludWVQcmltYXJ5S2V5JyBvbiAnSURC
Q3Vyc29yJzogVGhlIGN1cnNvcidzIHNvdXJjZSBpcyBub3QgYW4gaW5kZXguIl9zIH07CiAKICAg
ICBhdXRvIGRpcmVjdGlvbiA9IG1faW5mby5jdXJzb3JEaXJlY3Rpb24oKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAppbmRleCA5M2Q2ZWNm
YTUyNmNlNDcxYWZlMjBkODRmZjVkODVmNGE4Y2YwNGY0Li5jNWMyNDRmMzc0NjBkMDA0YTRlZDE4
YjAzYjM5ZjM1ZWY5ZjVmMGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2UuY3BwCkBAIC0xNTIsNyArMTUyLDcgQEAgRXhjZXB0aW9uT3I8UmVm
PElEQk9iamVjdFN0b3JlPj4gSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0
cmluZyYgbmEKICAgICBpZiAobV9pbmZvLmhhc09iamVjdFN0b3JlKG5hbWUpKQogICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgQ29uc3RyYWludEVycm9yLCAiRmFpbGVkIHRvIGV4ZWN1dGUgJ2Ny
ZWF0ZU9iamVjdFN0b3JlJyBvbiAnSURCRGF0YWJhc2UnOiBBbiBvYmplY3Qgc3RvcmUgd2l0aCB0
aGUgc3BlY2lmaWVkIG5hbWUgYWxyZWFkeSBleGlzdHMuIl9zIH07CiAKLSAgICBpZiAoa2V5UGF0
aCAmJiBwYXJhbWV0ZXJzLmF1dG9JbmNyZW1lbnQgJiYgKChXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PFN0cmluZz4oa2V5UGF0aC52YWx1ZSgpKSAmJiBXVEY6OmdldDxTdHJpbmc+KGtleVBhdGgudmFs
dWUoKSkuaXNFbXB0eSgpKSB8fCBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxTdHJpbmc+
PihrZXlQYXRoLnZhbHVlKCkpKSkKKyAgICBpZiAoa2V5UGF0aCAmJiBwYXJhbWV0ZXJzLmF1dG9J
bmNyZW1lbnQgJiYgKChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oa2V5UGF0aC52YWx1
ZSgpKSAmJiBXVEY6OmdldDxTdHJpbmc+KGtleVBhdGgudmFsdWUoKSkuaXNFbXB0eSgpKSB8fCBz
dGQ6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxTdHJpbmc+PihrZXlQYXRoLnZhbHVlKCkpKSkK
ICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciwgIkZhaWxlZCB0
byBleGVjdXRlICdjcmVhdGVPYmplY3RTdG9yZScgb24gJ0lEQkRhdGFiYXNlJzogVGhlIGF1dG9J
bmNyZW1lbnQgb3B0aW9uIHdhcyBzZXQgYnV0IHRoZSBrZXlQYXRoIG9wdGlvbiB3YXMgZW1wdHkg
b3IgYW4gYXJyYXkuIl9zIH07CiAKICAgICAvLyBJbnN0YWxsIHRoZSBuZXcgT2JqZWN0U3RvcmUg
aW50byB0aGUgY29ubmVjdGlvbidzIG1ldGFkYXRhLgpAQCAtMTc1LDcgKzE3NSw3IEBAIEV4Y2Vw
dGlvbk9yPFJlZjxJREJUcmFuc2FjdGlvbj4+IElEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbihTdHJp
bmdPclZlY3Rvck9mU3RyaW5nCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3Rh
dGVFcnJvciwgIkZhaWxlZCB0byBleGVjdXRlICd0cmFuc2FjdGlvbicgb24gJ0lEQkRhdGFiYXNl
JzogVGhlIGRhdGFiYXNlIGNvbm5lY3Rpb24gaXMgY2xvc2luZy4iX3MgfTsKIAogICAgIFZlY3Rv
cjxTdHJpbmc+IG9iamVjdFN0b3JlczsKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxW
ZWN0b3I8U3RyaW5nPj4oc3RvcmVOYW1lcykpCisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRp
dmU8VmVjdG9yPFN0cmluZz4+KHN0b3JlTmFtZXMpKQogICAgICAgICBvYmplY3RTdG9yZXMgPSBX
VEZNb3ZlKFdURjo6Z2V0PFZlY3RvcjxTdHJpbmc+PihzdG9yZU5hbWVzKSk7CiAgICAgZWxzZQog
ICAgICAgICBvYmplY3RTdG9yZXMuYXBwZW5kKFdURk1vdmUoV1RGOjpnZXQ8U3RyaW5nPihzdG9y
ZU5hbWVzKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmUuY3BwCmluZGV4IDBiNzU1Yzg4N2I4MGFmYjYwMzFiZTg5MTMyZGQwMmIwMDUy
YjViY2MuLjYxNDg2N2U0YThlZTI0OWZiYWViMWU3YmFiZDExZDVmNmZkZjkwNjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAK
QEAgLTQ3OSw3ICs0NzksNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCSW5kZXg+PiBJREJPYmplY3RT
dG9yZTo6Y3JlYXRlSW5kZXgoSlNHbG9iYWxPYmplY3QmLCBjb25zdCBTdAogICAgIGlmIChuYW1l
LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yIH07CiAKLSAg
ICBpZiAocGFyYW1ldGVycy5tdWx0aUVudHJ5ICYmIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVj
dG9yPFN0cmluZz4+KGtleVBhdGgpKQorICAgIGlmIChwYXJhbWV0ZXJzLm11bHRpRW50cnkgJiYg
c3RkOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4oa2V5UGF0aCkpCiAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsICJGYWlsZWQgdG8gZXhlY3V0
ZSAnY3JlYXRlSW5kZXgnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBrZXlQYXRoIGFyZ3VtZW50
IHdhcyBhbiBhcnJheSBhbmQgdGhlIG11bHRpRW50cnkgb3B0aW9uIGlzIHRydWUuIl9zIH07CiAK
ICAgICAvLyBJbnN0YWxsIHRoZSBuZXcgSW5kZXggaW50byB0aGUgT2JqZWN0U3RvcmUncyBpbmZv
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVz
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcApp
bmRleCA1NGU3OGJhY2JmYjU5YTZiNGQ2YWNjM2IzZGViZGU5N2JiOGEyNmM0Li45OTY3NGQ2M2Ni
MTNkOGJmYTQ1N2EwOTMzMjdkNTI1MzZjMzg2NjdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcApAQCAtMjM3LDcgKzIzNyw3IEBAIEluZGV4
ZWREQjo6SW5kZXhSZWNvcmRUeXBlIElEQlJlcXVlc3Q6OnJlcXVlc3RlZEluZGV4UmVjb3JkVHlw
ZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNhbkN1cnJlbnRUaHJlYWRBY2Nlc3NUaHJlYWRMb2Nh
bERhdGEob3JpZ2luVGhyZWFkKCkpKTsKICAgICBBU1NFUlQobV9zb3VyY2UpOwotICAgIEFTU0VS
VChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxJREJJbmRleD4+KG1fc291cmNlLnZhbHVl
KCkpKTsKKyAgICBBU1NFUlQoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8SURCSW5kZXg+
PihtX3NvdXJjZS52YWx1ZSgpKSk7CiAKICAgICByZXR1cm4gbV9yZXF1ZXN0ZWRJbmRleFJlY29y
ZFR5cGU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1JUQ1BlZXJDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCmluZGV4IDNjNzZjNTdhOGI3MzVkYjBlNWIxODhjZjJl
NDZmY2UyZjlhOWUzNTEuLjI5NzNkNTgxMTkzOTk1OWFiMjc3ZDNjYzE2MzY1ZDM0NGVjZDUzMTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNv
bm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRD
UGVlckNvbm5lY3Rpb24uY3BwCkBAIC0xODIsNyArMTgyLDcgQEAgRXhjZXB0aW9uT3I8UmVmPFJU
Q1J0cFRyYW5zY2VpdmVyPj4gUlRDUGVlckNvbm5lY3Rpb246OmFkZFRyYW5zY2VpdmVyKEFkZFRy
YW5zY2UKIHsKICAgICBJTkZPX0xPRyhMT0dJREVOVElGSUVSKTsKIAotICAgIGlmIChXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPFN0cmluZz4od2l0aFRyYWNrKSkgeworICAgIGlmIChzdGQ6OmhvbGRz
X2FsdGVybmF0aXZlPFN0cmluZz4od2l0aFRyYWNrKSkgewogICAgICAgICBjb25zdCBTdHJpbmcm
IGtpbmQgPSBXVEY6OmdldDxTdHJpbmc+KHdpdGhUcmFjayk7CiAgICAgICAgIGlmIChraW5kICE9
ICJhdWRpbyJfcyAmJiBraW5kICE9ICJ2aWRlbyJfcykKICAgICAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBUeXBlRXJyb3IgfTsKQEAgLTg0Myw3ICs4NDMsNyBAQCB2b2lkIFJUQ1BlZXJDb25u
ZWN0aW9uOjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKIAogc3RhdGljIGlubGluZSBFeGNl
cHRpb25PcjxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkNlcnRpZmljYXRlSW5mb3JtYXRpb24+IGNl
cnRpZmljYXRlVHlwZUZyb21BbGdvcml0aG1JZGVudGlmaWVyKEpTQzo6SlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIFJUQ1BlZXJDb25uZWN0aW9uOjpBbGdvcml0aG1JZGVudGlm
aWVyJiYgYWxnb3JpdGhtSWRlbnRpZmllcikKIHsKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxTdHJpbmc+KGFsZ29yaXRobUlkZW50aWZpZXIpKQorICAgIGlmIChzdGQ6OmhvbGRzX2Fs
dGVybmF0aXZlPFN0cmluZz4oYWxnb3JpdGhtSWRlbnRpZmllcikpCiAgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciwgIkFsZ29yaXRobSBpcyBub3Qgc3VwcG9ydGVk
Il9zIH07CiAKICAgICBhdXRvJiB2YWx1ZSA9IFdURjo6Z2V0PEpTQzo6U3Ryb25nPEpTQzo6SlNP
YmplY3Q+PihhbGdvcml0aG1JZGVudGlmaWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRwU0ZyYW1lVHJhbnNmb3JtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRwU0ZyYW1lVHJhbnNmb3JtLmNwcAppbmRl
eCAwZjA0MzZlZjJjZmMzZDBhODE3YTY1Yjc4ODFkOTZlYjNjNzgxMDNlLi5kZDVhMDJjYmVhMTY1
OTA5YWYyMjdhODNlY2MyYjlmN2QwN2Y3MDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL1JUQ1J0cFNGcmFtZVRyYW5zZm9ybS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENSdHBTRnJhbWVUcmFuc2Zvcm0uY3BwCkBA
IC02Nyw3ICs2Nyw3IEBAIFJUQ1J0cFNGcmFtZVRyYW5zZm9ybTo6flJUQ1J0cFNGcmFtZVRyYW5z
Zm9ybSgpCiB2b2lkIFJUQ1J0cFNGcmFtZVRyYW5zZm9ybTo6c2V0RW5jcnlwdGlvbktleShDcnlw
dG9LZXkmIGtleSwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4ga2V5SWQsIERPTVByb21pc2VEZWZl
cnJlZDx2b2lkPiYmIHByb21pc2UpCiB7CiAgICAgYXV0byBhbGdvcml0aG0gPSBrZXkuYWxnb3Jp
dGhtKCk7Ci0gICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENyeXB0b0tleUFsZ29yaXRo
bT4oYWxnb3JpdGhtKSkgeworICAgIGlmICghc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxDcnlwdG9L
ZXlBbGdvcml0aG0+KGFsZ29yaXRobSkpIHsKICAgICAgICAgcHJvbWlzZS5yZWplY3QoRXhjZXB0
aW9uIHsgVHlwZUVycm9yLCAiSW52YWxpZCBrZXkiX3MgfSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndl
YnJ0Yy9MaWJXZWJSVENSdHBTZW5kZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1J0cFNlbmRlckJhY2tlbmQuY3BwCmlu
ZGV4IGQwMDcxODJhZTE3NjI0MDE0NWJmNGYyMTBkYzJkOGY5ZmFlMTE5M2EuLjJlZmU1YTIzYWZh
NDVhM2Q3ODliMjcyN2Y2ZDcyYTVmNWVhOTMwNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1J0cFNlbmRlckJhY2tlbmQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xp
YldlYlJUQ1J0cFNlbmRlckJhY2tlbmQuY3BwCkBAIC02MiwxMSArNjIsMTEgQEAgTGliV2ViUlRD
UnRwU2VuZGVyQmFja2VuZDo6fkxpYldlYlJUQ1J0cFNlbmRlckJhY2tlbmQoKQogc3RhdGljIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBMaWJXZWJSVENSdHBTZW5kZXJCYWNrZW5kOjpTb3VyY2UmIGEs
IGNvbnN0IExpYldlYlJUQ1J0cFNlbmRlckJhY2tlbmQ6OlNvdXJjZSYgYikKIHsKICAgICByZXR1
cm4gc3dpdGNoT24oYSwgWyZiXShjb25zdCBSZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNl
PiYgc291cmNlKSB7Ci0gICAgICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxS
ZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2U+PihiKSAmJiBzb3VyY2UucHRyKCkgPT0gV1RGOjpn
ZXQ8UmVmPFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZT4+KGIpLnB0cigpOworICAgICAgICBy
ZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291
cmNlPj4oYikgJiYgc291cmNlLnB0cigpID09IFdURjo6Z2V0PFJlZjxSZWFsdGltZU91dGdvaW5n
QXVkaW9Tb3VyY2U+PihiKS5wdHIoKTsKICAgICB9LCBbJmJdKGNvbnN0IFJlZjxSZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2U+JiBzb3VyY2UpIHsKLSAgICAgICAgcmV0dXJuIFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8UmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZT4+KGIpICYmIHNvdXJj
ZS5wdHIoKSA9PSBXVEY6OmdldDxSZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlPj4oYiku
cHRyKCk7CisgICAgICAgIHJldHVybiBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxSZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2U+PihiKSAmJiBzb3VyY2UucHRyKCkgPT0gV1RGOjpnZXQ8UmVm
PFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZT4+KGIpLnB0cigpOwogICAgIH0sIFsmYl0oc3Rk
OjpudWxscHRyX3QpIHsKLSAgICAgICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8c3Rk
OjpudWxscHRyX3Q+KGIpOworICAgICAgICByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxz
dGQ6Om51bGxwdHJfdD4oYik7CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FuaW1hdGlvbi9BbmltYXRpb25FZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0
aW9uL0FuaW1hdGlvbkVmZmVjdC5jcHAKaW5kZXggOGJiM2JmYWJlNTk4ZTMwZWVhYTFjNTUxZWM1
MDUxYTI4MjA5ODVhMy4uZDc2MmEzZTZkYWRlYTU3MjlmYmU5YjVhZWFkMjc4Y2I1MmFmMTRjNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlvbkVmZmVjdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlvbkVmZmVjdC5jcHAKQEAgLTM4
NCw3ICszODQsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBBbmltYXRpb25FZmZlY3Q6OnVwZGF0ZVRp
bWluZyhzdGQ6Om9wdGlvbmFsPE9wdGlvbmFsRWZmZWN0VGltaQogICAgIC8vIDMuIElmIHRoZSBk
dXJhdGlvbiBtZW1iZXIgb2YgaW5wdXQgaXMgcHJlc2VudCwgYW5kIGxlc3MgdGhhbiB6ZXJvIG9y
IGlzIHRoZSB2YWx1ZSBOYU4sIHRocm93IGEgVHlwZUVycm9yIGFuZCBhYm9ydCB0aGlzIHByb2Nl
ZHVyZS4KICAgICAvLyBGSVhNRTogc2hvdWxkIGl0IG5vdCB0aHJvdyBhbiBleGNlcHRpb24gb24g
YSBzdHJpbmcgb3RoZXIgdGhhbiAiYXV0byI/CiAgICAgaWYgKHRpbWluZy0+ZHVyYXRpb24pIHsK
LSAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPih0aW1pbmctPmR1cmF0
aW9uLnZhbHVlKCkpKSB7CisgICAgICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJs
ZT4odGltaW5nLT5kdXJhdGlvbi52YWx1ZSgpKSkgewogICAgICAgICAgICAgYXV0byBkdXJhdGlv
bkFzRG91YmxlID0gV1RGOjpnZXQ8ZG91YmxlPih0aW1pbmctPmR1cmF0aW9uLnZhbHVlKCkpOwog
ICAgICAgICAgICAgaWYgKGR1cmF0aW9uQXNEb3VibGUgPCAwIHx8IHN0ZDo6aXNuYW4oZHVyYXRp
b25Bc0RvdWJsZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJv
ciB9OwpAQCAtNDI5LDcgKzQyOSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEFuaW1hdGlvbkVmZmVj
dDo6dXBkYXRlVGltaW5nKHN0ZDo6b3B0aW9uYWw8T3B0aW9uYWxFZmZlY3RUaW1pCiAgICAgICAg
IG1faXRlcmF0aW9ucyA9IHRpbWluZy0+aXRlcmF0aW9ucy52YWx1ZSgpOwogCiAgICAgaWYgKHRp
bWluZy0+ZHVyYXRpb24pCi0gICAgICAgIG1faXRlcmF0aW9uRHVyYXRpb24gPSBXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPGRvdWJsZT4odGltaW5nLT5kdXJhdGlvbi52YWx1ZSgpKSA/IFNlY29uZHM6
OmZyb21NaWxsaXNlY29uZHMoV1RGOjpnZXQ8ZG91YmxlPih0aW1pbmctPmR1cmF0aW9uLnZhbHVl
KCkpKSA6IDBfczsKKyAgICAgICAgbV9pdGVyYXRpb25EdXJhdGlvbiA9IHN0ZDo6aG9sZHNfYWx0
ZXJuYXRpdmU8ZG91YmxlPih0aW1pbmctPmR1cmF0aW9uLnZhbHVlKCkpID8gU2Vjb25kczo6ZnJv
bU1pbGxpc2Vjb25kcyhXVEY6OmdldDxkb3VibGU+KHRpbWluZy0+ZHVyYXRpb24udmFsdWUoKSkp
IDogMF9zOwogCiAgICAgaWYgKHRpbWluZy0+ZGlyZWN0aW9uKQogICAgICAgICBtX2RpcmVjdGlv
biA9IHRpbWluZy0+ZGlyZWN0aW9uLnZhbHVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9u
L0tleWZyYW1lRWZmZWN0LmNwcAppbmRleCBiNDkxMDhiMGNiYzNhMTU3MmE3ZTI5ZDU5OWJiMDNk
Nzg4MjNmNWUyLi5jZDcwZTljMDQ4ZmY3NDk4YjQyOGNhNjcxNDk4MmFjZjQ1MTI4MzU4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAKQEAgLTMyMywyMCAr
MzIzLDIwIEBAIHN0YXRpYyBpbmxpbmUgRXhjZXB0aW9uT3I8dm9pZD4gcHJvY2Vzc0l0ZXJhYmxl
S2V5ZnJhbWVzKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsCiAKICAgICAgICAgLy8gV2hlbiBjYWxs
aW5nIHByb2Nlc3NLZXlmcmFtZUxpa2VPYmplY3QoKSB3aXRoIHRoZSAiYWxsb3cgbGlzdHMiIGZs
YWcgc2V0IHRvIGZhbHNlLCB0aGUgb25seSBvZmZzZXQKICAgICAgICAgLy8gYWx0ZXJuYXRpdmVz
IHdlIHNob3VsZCBleHBlY3QgYXJlIGRvdWJsZSBhbmQgbnVsbHB0ci4KLSAgICAgICAgaWYgKFdU
Rjo6aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPihrZXlmcmFtZUxpa2VPYmplY3QuYmFzZVByb3Bl
cnRpZXMub2Zmc2V0KSkKKyAgICAgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8ZG91Ymxl
PihrZXlmcmFtZUxpa2VPYmplY3QuYmFzZVByb3BlcnRpZXMub2Zmc2V0KSkKICAgICAgICAgICAg
IGtleWZyYW1lT3V0cHV0Lm9mZnNldCA9IFdURjo6Z2V0PGRvdWJsZT4oa2V5ZnJhbWVMaWtlT2Jq
ZWN0LmJhc2VQcm9wZXJ0aWVzLm9mZnNldCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIEFT
U0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPHN0ZDo6bnVsbHB0cl90PihrZXlmcmFtZUxpa2VP
YmplY3QuYmFzZVByb3BlcnRpZXMub2Zmc2V0KSk7CisgICAgICAgICAgICBBU1NFUlQoc3RkOjpo
b2xkc19hbHRlcm5hdGl2ZTxzdGQ6Om51bGxwdHJfdD4oa2V5ZnJhbWVMaWtlT2JqZWN0LmJhc2VQ
cm9wZXJ0aWVzLm9mZnNldCkpOwogCiAgICAgICAgIC8vIFdoZW4gY2FsbGluZyBwcm9jZXNzS2V5
ZnJhbWVMaWtlT2JqZWN0KCkgd2l0aCB0aGUgImFsbG93IGxpc3RzIiBmbGFnIHNldCB0byBmYWxz
ZSwgdGhlIG9ubHkgZWFzaW5nCiAgICAgICAgIC8vIGFsdGVybmF0aXZlIHdlIHNob3VsZCBleHBl
Y3QgaXMgU3RyaW5nLgotICAgICAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJp
bmc+KGtleWZyYW1lTGlrZU9iamVjdC5iYXNlUHJvcGVydGllcy5lYXNpbmcpKTsKKyAgICAgICAg
QVNTRVJUKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihrZXlmcmFtZUxpa2VPYmplY3Qu
YmFzZVByb3BlcnRpZXMuZWFzaW5nKSk7CiAgICAgICAgIGtleWZyYW1lT3V0cHV0LmVhc2luZyA9
IFdURjo6Z2V0PFN0cmluZz4oa2V5ZnJhbWVMaWtlT2JqZWN0LmJhc2VQcm9wZXJ0aWVzLmVhc2lu
Zyk7CiAKICAgICAgICAgLy8gV2hlbiBjYWxsaW5nIHByb2Nlc3NLZXlmcmFtZUxpa2VPYmplY3Qo
KSB3aXRoIHRoZSAiYWxsb3cgbGlzdHMiIGZsYWcgc2V0IHRvIGZhbHNlLCB0aGUgb25seSBjb21w
b3NpdGUKICAgICAgICAgLy8gYWx0ZXJuYXRpdmVzIHdlIHNob3VsZCBleHBlY3QgaXMgQ29tcG9z
aXRlT3BlcmF0aW9uQXV0by4KICAgICAgICAgaWYgKGRvY3VtZW50LnNldHRpbmdzKCkud2ViQW5p
bWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkKCkpIHsKLSAgICAgICAgICAgIEFTU0VS
VChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbXBvc2l0ZU9wZXJhdGlvbk9yQXV0bz4oa2V5ZnJh
bWVMaWtlT2JqZWN0LmJhc2VQcm9wZXJ0aWVzLmNvbXBvc2l0ZSkpOworICAgICAgICAgICAgQVNT
RVJUKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29tcG9zaXRlT3BlcmF0aW9uT3JBdXRvPihrZXlm
cmFtZUxpa2VPYmplY3QuYmFzZVByb3BlcnRpZXMuY29tcG9zaXRlKSk7CiAgICAgICAgICAgICBr
ZXlmcmFtZU91dHB1dC5jb21wb3NpdGUgPSBXVEY6OmdldDxDb21wb3NpdGVPcGVyYXRpb25PckF1
dG8+KGtleWZyYW1lTGlrZU9iamVjdC5iYXNlUHJvcGVydGllcy5jb21wb3NpdGUpOwogICAgICAg
ICB9CiAKQEAgLTQzNywxMSArNDM3LDExIEBAIHN0YXRpYyBpbmxpbmUgRXhjZXB0aW9uT3I8dm9p
ZD4gcHJvY2Vzc1Byb3BlcnR5SW5kZXhlZEtleWZyYW1lcyhKU0dsb2JhbE9iamVjdCYKICAgICAv
LyAgICAtIHNlcXVlbmNlPGRvdWJsZT8+LCB0aGUgdmFsdWUgb2Yg4oCcb2Zmc2V04oCdIGFzLWlz
LgogICAgIC8vICAgIC0gZG91YmxlPywgYSBzZXF1ZW5jZSBvZiBsZW5ndGggb25lIHdpdGggdGhl
IHZhbHVlIG9mIOKAnG9mZnNldOKAnSBhcyBpdHMgc2luZ2xlIGl0ZW0sIGkuZS4gwqsgb2Zmc2V0
IMK7LAogICAgIFZlY3RvcjxzdGQ6Om9wdGlvbmFsPGRvdWJsZT4+IG9mZnNldHM7Ci0gICAgaWYg
KFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPHN0ZDo6b3B0aW9uYWw8ZG91YmxlPj4+KHBy
b3BlcnR5SW5kZXhlZEtleWZyYW1lLmJhc2VQcm9wZXJ0aWVzLm9mZnNldCkpCisgICAgaWYgKHN0
ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPHN0ZDo6b3B0aW9uYWw8ZG91YmxlPj4+KHByb3Bl
cnR5SW5kZXhlZEtleWZyYW1lLmJhc2VQcm9wZXJ0aWVzLm9mZnNldCkpCiAgICAgICAgIG9mZnNl
dHMgPSBXVEY6OmdldDxWZWN0b3I8c3RkOjpvcHRpb25hbDxkb3VibGU+Pj4ocHJvcGVydHlJbmRl
eGVkS2V5ZnJhbWUuYmFzZVByb3BlcnRpZXMub2Zmc2V0KTsKLSAgICBlbHNlIGlmIChXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPGRvdWJsZT4ocHJvcGVydHlJbmRleGVkS2V5ZnJhbWUuYmFzZVByb3Bl
cnRpZXMub2Zmc2V0KSkKKyAgICBlbHNlIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJs
ZT4ocHJvcGVydHlJbmRleGVkS2V5ZnJhbWUuYmFzZVByb3BlcnRpZXMub2Zmc2V0KSkKICAgICAg
ICAgb2Zmc2V0cy5hcHBlbmQoV1RGOjpnZXQ8ZG91YmxlPihwcm9wZXJ0eUluZGV4ZWRLZXlmcmFt
ZS5iYXNlUHJvcGVydGllcy5vZmZzZXQpKTsKLSAgICBlbHNlIGlmIChXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPHN0ZDo6bnVsbHB0cl90Pihwcm9wZXJ0eUluZGV4ZWRLZXlmcmFtZS5iYXNlUHJvcGVy
dGllcy5vZmZzZXQpKQorICAgIGVsc2UgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8c3RkOjpu
dWxscHRyX3Q+KHByb3BlcnR5SW5kZXhlZEtleWZyYW1lLmJhc2VQcm9wZXJ0aWVzLm9mZnNldCkp
CiAgICAgICAgIG9mZnNldHMuYXBwZW5kKHN0ZDo6bnVsbG9wdCk7CiAKICAgICAvLyA2LiBBc3Np
Z24gZWFjaCB2YWx1ZSBpbiBvZmZzZXRzIHRvIHRoZSBrZXlmcmFtZSBvZmZzZXQgb2YgdGhlIGtl
eWZyYW1lIHdpdGggY29ycmVzcG9uZGluZyBwb3NpdGlvbiBpbiBwcm9wZXJ0eSBrZXlmcmFtZXMg
dW50aWwgdGhlIGVuZCBvZiBlaXRoZXIgc2VxdWVuY2UgaXMgcmVhY2hlZC4KQEAgLTQ1Miw5ICs0
NTIsOSBAQCBzdGF0aWMgaW5saW5lIEV4Y2VwdGlvbk9yPHZvaWQ+IHByb2Nlc3NQcm9wZXJ0eUlu
ZGV4ZWRLZXlmcmFtZXMoSlNHbG9iYWxPYmplY3QmCiAgICAgLy8gICAgLSBzZXF1ZW5jZTxET01T
dHJpbmc+LCB0aGUgdmFsdWUgb2Yg4oCcZWFzaW5n4oCdIGFzLWlzLgogICAgIC8vICAgIC0gRE9N
U3RyaW5nLCBhIHNlcXVlbmNlIG9mIGxlbmd0aCBvbmUgd2l0aCB0aGUgdmFsdWUgb2Yg4oCcZWFz
aW5n4oCdIGFzIGl0cyBzaW5nbGUgaXRlbSwgaS5lLiDCqyBlYXNpbmcgwrssCiAgICAgVmVjdG9y
PFN0cmluZz4gZWFzaW5nczsKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8
U3RyaW5nPj4ocHJvcGVydHlJbmRleGVkS2V5ZnJhbWUuYmFzZVByb3BlcnRpZXMuZWFzaW5nKSkK
KyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4ocHJvcGVydHlJ
bmRleGVkS2V5ZnJhbWUuYmFzZVByb3BlcnRpZXMuZWFzaW5nKSkKICAgICAgICAgZWFzaW5ncyA9
IFdURjo6Z2V0PFZlY3RvcjxTdHJpbmc+Pihwcm9wZXJ0eUluZGV4ZWRLZXlmcmFtZS5iYXNlUHJv
cGVydGllcy5lYXNpbmcpOwotICAgIGVsc2UgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3Ry
aW5nPihwcm9wZXJ0eUluZGV4ZWRLZXlmcmFtZS5iYXNlUHJvcGVydGllcy5lYXNpbmcpKQorICAg
IGVsc2UgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihwcm9wZXJ0eUluZGV4ZWRL
ZXlmcmFtZS5iYXNlUHJvcGVydGllcy5lYXNpbmcpKQogICAgICAgICBlYXNpbmdzLmFwcGVuZChX
VEY6OmdldDxTdHJpbmc+KHByb3BlcnR5SW5kZXhlZEtleWZyYW1lLmJhc2VQcm9wZXJ0aWVzLmVh
c2luZykpOwogCiAgICAgLy8gOC4gSWYgZWFzaW5ncyBpcyBhbiBlbXB0eSBzZXF1ZW5jZSwgbGV0
IGl0IGJlIGEgc2VxdWVuY2Ugb2YgbGVuZ3RoIG9uZSBjb250YWluaW5nIHRoZSBzaW5nbGUgdmFs
dWUg4oCcbGluZWFy4oCdLCBpLmUuIMKrICJsaW5lYXIiIMK7LgpAQCAtNDgxLDkgKzQ4MSw5IEBA
IHN0YXRpYyBpbmxpbmUgRXhjZXB0aW9uT3I8dm9pZD4gcHJvY2Vzc1Byb3BlcnR5SW5kZXhlZEtl
eWZyYW1lcyhKU0dsb2JhbE9iamVjdCYKICAgICAvLyAxMi4gSWYgdGhlIOKAnGNvbXBvc2l0ZeKA
nSBtZW1iZXIgb2YgdGhlIHByb3BlcnR5LWluZGV4ZWQga2V5ZnJhbWUgaXMgbm90IGFuIGVtcHR5
IHNlcXVlbmNlOgogICAgIGlmIChkb2N1bWVudC5zZXR0aW5ncygpLndlYkFuaW1hdGlvbnNDb21w
b3NpdGVPcGVyYXRpb25zRW5hYmxlZCgpKSB7CiAgICAgICAgIFZlY3RvcjxDb21wb3NpdGVPcGVy
YXRpb25PckF1dG8+IGNvbXBvc2l0ZU1vZGVzOwotICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxWZWN0b3I8Q29tcG9zaXRlT3BlcmF0aW9uT3JBdXRvPj4ocHJvcGVydHlJbmRleGVk
S2V5ZnJhbWUuYmFzZVByb3BlcnRpZXMuY29tcG9zaXRlKSkKKyAgICAgICAgaWYgKHN0ZDo6aG9s
ZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPENvbXBvc2l0ZU9wZXJhdGlvbk9yQXV0bz4+KHByb3BlcnR5
SW5kZXhlZEtleWZyYW1lLmJhc2VQcm9wZXJ0aWVzLmNvbXBvc2l0ZSkpCiAgICAgICAgICAgICBj
b21wb3NpdGVNb2RlcyA9IFdURjo6Z2V0PFZlY3RvcjxDb21wb3NpdGVPcGVyYXRpb25PckF1dG8+
Pihwcm9wZXJ0eUluZGV4ZWRLZXlmcmFtZS5iYXNlUHJvcGVydGllcy5jb21wb3NpdGUpOwotICAg
ICAgICBlbHNlIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbXBvc2l0ZU9wZXJhdGlvbk9y
QXV0bz4ocHJvcGVydHlJbmRleGVkS2V5ZnJhbWUuYmFzZVByb3BlcnRpZXMuY29tcG9zaXRlKSkK
KyAgICAgICAgZWxzZSBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxDb21wb3NpdGVPcGVyYXRp
b25PckF1dG8+KHByb3BlcnR5SW5kZXhlZEtleWZyYW1lLmJhc2VQcm9wZXJ0aWVzLmNvbXBvc2l0
ZSkpCiAgICAgICAgICAgICBjb21wb3NpdGVNb2Rlcy5hcHBlbmQoV1RGOjpnZXQ8Q29tcG9zaXRl
T3BlcmF0aW9uT3JBdXRvPihwcm9wZXJ0eUluZGV4ZWRLZXlmcmFtZS5iYXNlUHJvcGVydGllcy5j
b21wb3NpdGUpKTsKICAgICAgICAgaWYgKCFjb21wb3NpdGVNb2Rlcy5pc0VtcHR5KCkpIHsKICAg
ICAgICAgICAgIC8vIDEuIExldCBjb21wb3NpdGUgbW9kZXMgYmUgYSBzZXF1ZW5jZSBvZiBDb21w
b3NpdGVPcGVyYXRpb25PckF1dG8gdmFsdWVzIGFzc2lnbmVkIGZyb20gdGhlIOKAnGNvbXBvc2l0
ZeKAnSBtZW1iZXIgb2YgcHJvcGVydHktaW5kZXhlZCBrZXlmcmFtZS4gSWYgdGhhdCBtZW1iZXIg
aXMgYSBzaW5nbGUKQEAgLTUxNCw3ICs1MTQsNyBAQCBFeGNlcHRpb25PcjxSZWY8S2V5ZnJhbWVF
ZmZlY3Q+PiBLZXlmcmFtZUVmZmVjdDo6Y3JlYXRlKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsRwog
ICAgIGlmIChvcHRpb25zKSB7CiAgICAgICAgIE9wdGlvbmFsRWZmZWN0VGltaW5nIHRpbWluZzsK
ICAgICAgICAgYXV0byBvcHRpb25zVmFsdWUgPSBvcHRpb25zLnZhbHVlKCk7Ci0gICAgICAgIGlm
IChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4ob3B0aW9uc1ZhbHVlKSkgeworICAgICAg
ICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxkb3VibGU+KG9wdGlvbnNWYWx1ZSkpIHsKICAg
ICAgICAgICAgIFZhcmlhbnQ8ZG91YmxlLCBTdHJpbmc+IGR1cmF0aW9uID0gV1RGOjpnZXQ8ZG91
YmxlPihvcHRpb25zVmFsdWUpOwogICAgICAgICAgICAgdGltaW5nLmR1cmF0aW9uID0gZHVyYXRp
b247CiAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCmluZGV4IGJhZWRkMGMwNjljYTI4MWIyOTg0NzFlMzBi
Njk3NGI1MjU2ZDMzMGUuLmM5ZDM1NGZhMjQxMGIxZGJmMjNhNmMzMDliNDcxY2VjYmQwY2M5ZjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRp
ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRp
ZXMuY3BwCkBAIC0zMjcsNyArMzI3LDcgQEAgYm9vbCBpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFs
dWUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIGNvbnN0IElEQksKIHsKICAg
ICBMT0coSW5kZXhlZERCLCAiaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlIik7CiAKLSAgICBB
U1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGtleVBhdGgpKTsKKyAgICBBU1NF
UlQoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGtleVBhdGgpKTsKIAogICAgIFZlY3Rv
cjxTdHJpbmc+IGtleVBhdGhFbGVtZW50czsKICAgICBJREJLZXlQYXRoUGFyc2VFcnJvciBlcnJv
cjsKQEAgLTM1OCw3ICszNTgsNyBAQCBib29sIGluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgSURCSwogCiBSZWZQdHI8
SURCS2V5PiBtYXliZUNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUsIGNvbnN0IElEQktl
eVBhdGgmIGtleVBhdGgpCiB7Ci0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9y
PFN0cmluZz4+KGtleVBhdGgpKSB7CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVj
dG9yPFN0cmluZz4+KGtleVBhdGgpKSB7CiAgICAgICAgIGF1dG8mIGFycmF5ID0gV1RGOjpnZXQ8
VmVjdG9yPFN0cmluZz4+KGtleVBhdGgpOwogICAgICAgICBWZWN0b3I8UmVmUHRyPElEQktleT4+
IHJlc3VsdDsKICAgICAgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYXJyYXkuc2l6
ZSgpKTsKQEAgLTM3OCw3ICszNzgsNyBAQCBib29sIGNhbkluamVjdElEQktleUludG9TY3JpcHRW
YWx1ZShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNWYWx1ZQogewogICAg
IExPRyhTdG9yYWdlQVBJLCAiY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlIik7CiAKLSAg
ICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGtleVBhdGgpKTsKKyAgICBB
U1NFUlQoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGtleVBhdGgpKTsKICAgICBWZWN0
b3I8U3RyaW5nPiBrZXlQYXRoRWxlbWVudHM7CiAgICAgSURCS2V5UGF0aFBhcnNlRXJyb3IgZXJy
b3I7CiAgICAgSURCUGFyc2VLZXlQYXRoKFdURjo6Z2V0PFN0cmluZz4oa2V5UGF0aCksIGtleVBh
dGhFbGVtZW50cywgZXJyb3IpOwpAQCAtNDQwLDcgKzQ0MCw3IEBAIHN0YXRpYyBWZWN0b3I8SURC
S2V5RGF0YT4gY3JlYXRlS2V5UGF0aEFycmF5KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0CiB7CiAgICAgYXV0byB2aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcihbJl0oY29uc3Qg
U3RyaW5nJiBzdHJpbmcpIC0+IFZlY3RvcjxJREJLZXlEYXRhPiB7CiAgICAgICAgIC8vIFZhbHVl
IGRvZXNuJ3QgY29udGFpbiBhdXRvLWdlbmVyYXRlZCBrZXksIHNvIHdlIG5lZWQgdG8gbWFudWFs
bHkgYWRkIGtleSBpZiBpdCBpcyBwb3NzaWJseSBhdXRvLWdlbmVyYXRlZC4KLSAgICAgICAgaWYg
KG9iamVjdFN0b3JlS2V5UGF0aCAmJiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4ob2Jq
ZWN0U3RvcmVLZXlQYXRoLnZhbHVlKCkpICYmIElEQktleVBhdGgoc3RyaW5nKSA9PSBvYmplY3RT
dG9yZUtleVBhdGgudmFsdWUoKSkKKyAgICAgICAgaWYgKG9iamVjdFN0b3JlS2V5UGF0aCAmJiBz
dGQ6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4ob2JqZWN0U3RvcmVLZXlQYXRoLnZhbHVlKCkp
ICYmIElEQktleVBhdGgoc3RyaW5nKSA9PSBvYmplY3RTdG9yZUtleVBhdGgudmFsdWUoKSkKICAg
ICAgICAgICAgIHJldHVybiB7IG9iamVjdFN0b3JlS2V5IH07CiAKICAgICAgICAgYXV0byBpZGJL
ZXkgPSBpbnRlcm5hbENyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgobGV4aWNh
bEdsb2JhbE9iamVjdCwgdmFsdWUsIHN0cmluZyk7CkBAIC00NTcsNyArNDU3LDcgQEAgc3RhdGlj
IFZlY3RvcjxJREJLZXlEYXRhPiBjcmVhdGVLZXlQYXRoQXJyYXkoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QKICAgICB9LCBbJl0oY29uc3QgVmVjdG9yPFN0cmluZz4mIHZlY3Rv
cikgLT4gVmVjdG9yPElEQktleURhdGE+IHsKICAgICAgICAgVmVjdG9yPElEQktleURhdGE+IGtl
eXM7CiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiB2ZWN0b3IpIHsKLSAgICAgICAgICAgIGlm
IChvYmplY3RTdG9yZUtleVBhdGggJiYgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KG9i
amVjdFN0b3JlS2V5UGF0aC52YWx1ZSgpKSAmJiBJREJLZXlQYXRoKGVudHJ5KSA9PSBvYmplY3RT
dG9yZUtleVBhdGgudmFsdWUoKSkKKyAgICAgICAgICAgIGlmIChvYmplY3RTdG9yZUtleVBhdGgg
JiYgc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KG9iamVjdFN0b3JlS2V5UGF0aC52YWx1
ZSgpKSAmJiBJREJLZXlQYXRoKGVudHJ5KSA9PSBvYmplY3RTdG9yZUtleVBhdGgudmFsdWUoKSkK
ICAgICAgICAgICAgICAgICBrZXlzLmFwcGVuZChvYmplY3RTdG9yZUtleSk7CiAgICAgICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgICAgICBhdXRvIGtleSA9IGludGVybmFsQ3JlYXRlSURCS2V5
RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgZW50
cnkpOwpAQCAtNTEyLDcgKzUxMiw3IEBAIEluZGV4SURUb0luZGV4S2V5TWFwIGdlbmVyYXRlSW5k
ZXhLZXlNYXBGb3JWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvCiBzdGQ6Om9w
dGlvbmFsPEpTQzo6SlNWYWx1ZT4gZGVzZXJpYWxpemVJREJWYWx1ZVdpdGhLZXlJbmplY3Rpb24o
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIGNvbnN0IElEQlZhbHVlJiB2YWx1
ZSwgY29uc3QgSURCS2V5RGF0YSYga2V5LCBjb25zdCBzdGQ6Om9wdGlvbmFsPElEQktleVBhdGg+
JiBrZXlQYXRoKQogewogICAgIGF1dG8ganNWYWx1ZSA9IGRlc2VyaWFsaXplSURCVmFsdWVUb0pT
VmFsdWUobGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwotICAgIGlmIChqc1ZhbHVlLmlzVW5k
ZWZpbmVkKCkgfHwgIWtleVBhdGggfHwgIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihr
ZXlQYXRoLnZhbHVlKCkpIHx8ICFpc0lEQktleVBhdGhWYWxpZChrZXlQYXRoLnZhbHVlKCkpKQor
ICAgIGlmIChqc1ZhbHVlLmlzVW5kZWZpbmVkKCkgfHwgIWtleVBhdGggfHwgIXN0ZDo6aG9sZHNf
YWx0ZXJuYXRpdmU8U3RyaW5nPihrZXlQYXRoLnZhbHVlKCkpIHx8ICFpc0lEQktleVBhdGhWYWxp
ZChrZXlQYXRoLnZhbHVlKCkpKQogICAgICAgICByZXR1cm4ganNWYWx1ZTsKIAogICAgIEpTTG9j
a0hvbGRlciBsb2NrZXIobGV4aWNhbEdsb2JhbE9iamVjdC52bSgpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2NyeXB0by9TdWJ0bGVDcnlwdG8uY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5
cHRvL1N1YnRsZUNyeXB0by5jcHAKaW5kZXggY2EzOTQzYTNjOTUzNTBhNDFkNzM4YzhhMjFkNTEx
NjllYTc0ODc2OS4uZWQ0ZTg5MTgyYjEwMWMxYWI2MjU5ZTlhN2I2YzE5NmJlMWI0NWU2NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL1N1YnRsZUNyeXB0by5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3J5cHRvL1N1YnRsZUNyeXB0by5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgc3Rh
dGljIEV4Y2VwdGlvbk9yPHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJz
Pj4gbm9ybWFsaXplQ3J5cHRvQWwKICAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmIChXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPFN0cmluZz4oYWxnb3JpdGhtSWRlbnRpZmllcikpIHsKKyAgICBpZiAoc3RkOjpo
b2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGFsZ29yaXRobUlkZW50aWZpZXIpKSB7CiAgICAgICAg
IGF1dG8gbmV3UGFyYW1zID0gU3Ryb25nPEpTT2JqZWN0Pih2bSwgY29uc3RydWN0RW1wdHlPYmpl
Y3QoJnN0YXRlKSk7CiAgICAgICAgIG5ld1BhcmFtcy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAibmFtZSIpLCBqc1N0cmluZyh2bSwgV1RGOjpnZXQ8U3RyaW5nPihh
bGdvcml0aG1JZGVudGlmaWVyKSkpOwogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Q3VzdG9tUHJvcGVydHlWYWx1ZS5oCmluZGV4IDNhNjc3Njg1YjQ0ZWU0ZmUyOGM5YjdhM2MxNTMz
MTNjM2ZmMmQxZTcuLmViYjJlODlmYTY5ZTQ0Y2U3MWE1NjNjMmEzYWZmYWE3N2NlOTZjM2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0N1c3RvbVByb3BlcnR5VmFsdWUuaApAQCAtODMsOSAr
ODMsOSBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGN1c3RvbUNTU1RleHQoKSBjb25zdDsKIAogICAg
IGNvbnN0IEF0b21TdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICBi
b29sIGlzUmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiAhV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxS
ZWY8Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZT4+KG1fdmFsdWUpOyB9Ci0gICAgYm9vbCBpc1Vu
c2V0KCkgY29uc3QgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDU1NWYWx1ZUlEPiht
X3ZhbHVlKSAmJiBXVEY6OmdldDxDU1NWYWx1ZUlEPihtX3ZhbHVlKSA9PSBDU1NWYWx1ZVVuc2V0
OyB9Ci0gICAgYm9vbCBpc0ludmFsaWQoKSBjb25zdCB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPENTU1ZhbHVlSUQ+KG1fdmFsdWUpICYmIFdURjo6Z2V0PENTU1ZhbHVlSUQ+KG1fdmFs
dWUpID09IENTU1ZhbHVlSW52YWxpZDsgfQorICAgIGJvb2wgaXNSZXNvbHZlZCgpIGNvbnN0IHsg
cmV0dXJuICFzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxDU1NWYXJpYWJsZVJlZmVyZW5jZVZh
bHVlPj4obV92YWx1ZSk7IH0KKyAgICBib29sIGlzVW5zZXQoKSBjb25zdCB7IHJldHVybiBzdGQ6
OmhvbGRzX2FsdGVybmF0aXZlPENTU1ZhbHVlSUQ+KG1fdmFsdWUpICYmIFdURjo6Z2V0PENTU1Zh
bHVlSUQ+KG1fdmFsdWUpID09IENTU1ZhbHVlVW5zZXQ7IH0KKyAgICBib29sIGlzSW52YWxpZCgp
IGNvbnN0IHsgcmV0dXJuIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8Q1NTVmFsdWVJRD4obV92YWx1
ZSkgJiYgV1RGOjpnZXQ8Q1NTVmFsdWVJRD4obV92YWx1ZSkgPT0gQ1NTVmFsdWVJbnZhbGlkOyB9
CiAKICAgICBjb25zdCBWYXJpYW50VmFsdWUmIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmgKaW5kZXggYmIyOTc1MWQwYTdkZmI1ZmYxYzc3Yjdk
NWMxYzNjOTIyOGVjYTE0MC4uNTQ3YTZlYTJiYjBkMDM1Y2JiZDViY2ZiZDMxYTJhMTY0N2VhMTJk
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaApAQCAtMjk1LDcgKzI5NSw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgUmVmPFN0eWxlUnVsZUxheWVyPiBjcmVhdGVCbG9jayhDYXNjYWRlTGF5ZXJOYW1l
JiYsIHN0ZDo6dW5pcXVlX3B0cjxEZWZlcnJlZFN0eWxlR3JvdXBSdWxlTGlzdD4mJik7CiAgICAg
UmVmPFN0eWxlUnVsZUxheWVyPiBjb3B5KCkgY29uc3QgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBT
dHlsZVJ1bGVMYXllcigqdGhpcykpOyB9CiAKLSAgICBib29sIGlzU3RhdGVtZW50KCkgY29uc3Qg
eyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8Q2FzY2FkZUxheWVyTmFtZT4+
KG1fbmFtZVZhcmlhbnQpOyB9CisgICAgYm9vbCBpc1N0YXRlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPENhc2NhZGVMYXllck5hbWU+PihtX25hbWVW
YXJpYW50KTsgfQogCiAgICAgYXV0byYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIFdURjo6Z2V0PENh
c2NhZGVMYXllck5hbWU+KG1fbmFtZVZhcmlhbnQpOyB9CiAgICAgYXV0byYgbmFtZUxpc3QoKSBj
b25zdCB7IHJldHVybiBXVEY6OmdldDxWZWN0b3I8Q2FzY2FkZUxheWVyTmFtZT4+KG1fbmFtZVZh
cmlhbnQpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5oCmluZGV4IGE4MTc2MWQ3Y2Fl
NTdkYzViZDM4OTU1YjExNzFmODExMTQ2ZjhiOTUuLjNhZmNhNmEyNWJjNmNlOWZkMzEzYWQ5YWIy
NjkyNDZiMGQ5NDZkMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1h
cmtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5oCkBAIC0xNzUs
NyArMTc1LDcgQEAgaW5saW5lIHZvaWQgRG9jdW1lbnRNYXJrZXI6OnNoaWZ0T2Zmc2V0cyhpbnQg
ZGVsdGEpCiAKIGlubGluZSBjb25zdCBTdHJpbmcmIERvY3VtZW50TWFya2VyOjpkZXNjcmlwdGlv
bigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPiht
X2RhdGEpID8gV1RGOjpnZXQ8U3RyaW5nPihtX2RhdGEpIDogZW1wdHlTdHJpbmcoKTsKKyAgICBy
ZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KG1fZGF0YSkgPyBXVEY6OmdldDxT
dHJpbmc+KG1fZGF0YSkgOiBlbXB0eVN0cmluZygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggOTk4YjBhMWI1NzYwYjBiMWYzMTcyMTUwOTEz
NDhlMTliZDUzN2FiZS4uZDc5N2I0OGU2Nzc5N2ExZWYxZWIwYTdmODk3OTk2NzIzODM2MTk2NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtOTE4LDcgKzkxOCw3IEBAIHZvaWQgRWxlbWVudDo6
c2Nyb2xsSW50b1ZpZXcoc3RkOjpvcHRpb25hbDxWYXJpYW50PGJvb2wsIFNjcm9sbEludG9WaWV3
T3B0aW9ucz4+CiAgICAgU2Nyb2xsSW50b1ZpZXdPcHRpb25zIG9wdGlvbnM7CiAgICAgaWYgKGFy
ZykgewogICAgICAgICBhdXRvIHZhbHVlID0gYXJnLnZhbHVlKCk7Ci0gICAgICAgIGlmIChXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPFNjcm9sbEludG9WaWV3T3B0aW9ucz4odmFsdWUpKQorICAgICAg
ICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxTY3JvbGxJbnRvVmlld09wdGlvbnM+KHZhbHVl
KSkKICAgICAgICAgICAgIG9wdGlvbnMgPSBXVEY6OmdldDxTY3JvbGxJbnRvVmlld09wdGlvbnM+
KHZhbHVlKTsKICAgICAgICAgZWxzZSBpZiAoIVdURjo6Z2V0PGJvb2w+KHZhbHVlKSkKICAgICAg
ICAgICAgIG9wdGlvbnMuYmxvY2tQb3NpdGlvbiA9IFNjcm9sbExvZ2ljYWxQb3NpdGlvbjo6RW5k
OwpAQCAtNDYyMCw3ICs0NjIwLDcgQEAgRXhjZXB0aW9uT3I8UmVmPFdlYkFuaW1hdGlvbj4+IEVs
ZW1lbnQ6OmFuaW1hdGUoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2IKICAgICBpZiAo
b3B0aW9ucykgewogICAgICAgICBhdXRvIG9wdGlvbnNWYWx1ZSA9IG9wdGlvbnMudmFsdWUoKTsK
ICAgICAgICAgVmFyaWFudDxkb3VibGUsIEtleWZyYW1lRWZmZWN0T3B0aW9ucz4ga2V5ZnJhbWVF
ZmZlY3RPcHRpb25zVmFyaWFudDsKLSAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8
ZG91YmxlPihvcHRpb25zVmFsdWUpKQorICAgICAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2
ZTxkb3VibGU+KG9wdGlvbnNWYWx1ZSkpCiAgICAgICAgICAgICBrZXlmcmFtZUVmZmVjdE9wdGlv
bnNWYXJpYW50ID0gV1RGOjpnZXQ8ZG91YmxlPihvcHRpb25zVmFsdWUpOwogICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgIGF1dG8ga2V5ZnJhbWVFZmZlY3RPcHRpb25zID0gV1RGOjpnZXQ8S2V5
ZnJhbWVBbmltYXRpb25PcHRpb25zPihvcHRpb25zVmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZWRpYUVsZW1lbnQuaAppbmRleCA0MzRlOGU0ZjYwMjdlYzcyMzcxM2MzYjJiNjVlMDQwNjE5
NDcxYjg5Li44ZjlkN2JjYzQzMDkyNzAxZTY3NzBmN2ZhYmJkNmI5NWVlMDg5Njk2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaApAQCAtNTQ4LDcgKzU0OCw3IEBAIHB1Ymxp
YzoKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgdm9pZCBtZWRpYVN0cmVhbUNhcHR1
cmVTdGFydGVkKCk7Ci0gICAgYm9vbCBoYXNNZWRpYVN0cmVhbVNyY09iamVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fbWVkaWFQcm92aWRlciAmJiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxN
ZWRpYVN0cmVhbT4+KCptX21lZGlhUHJvdmlkZXIpOyB9CisgICAgYm9vbCBoYXNNZWRpYVN0cmVh
bVNyY09iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFQcm92aWRlciAmJiBzdGQ6OmhvbGRz
X2FsdGVybmF0aXZlPFJlZlB0cjxNZWRpYVN0cmVhbT4+KCptX21lZGlhUHJvdmlkZXIpOyB9CiAj
ZW5kaWYKIAogICAgIGJvb2wgc3VwcG9ydHNTZWVraW5nKCkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAKaW5kZXggOGQ3YTZhYTIxNjBj
MGVlZmY1YmQ0MzI4ODQ0ZmEyM2E3YmFjMWZhMy4uYWFiZGRhMDNhMDBmNzRkNGI1YTZiZGNjMjI0
ZjZhYTMyYjI3NTMxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxl
LmNwcApAQCAtMTQyLDcgKzE0Miw3IEBAIENhbnZhc1N0eWxlIENhbnZhc1N0eWxlOjpjcmVhdGVG
cm9tU3RyaW5nV2l0aE92ZXJyaWRlQWxwaGEoY29uc3QgU3RyaW5nJiBjb2xvclN0CiAKIGJvb2wg
Q2FudmFzU3R5bGU6OmlzRXF1aXZhbGVudENvbG9yKGNvbnN0IENhbnZhc1N0eWxlJiBvdGhlcikg
Y29uc3QKIHsKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb2xvcj4obV9zdHlsZSkg
JiYgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb2xvcj4ob3RoZXIubV9zdHlsZSkpCisgICAgaWYg
KHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+KG1fc3R5bGUpICYmIHN0ZDo6aG9sZHNfYWx0
ZXJuYXRpdmU8Q29sb3I+KG90aGVyLm1fc3R5bGUpKQogICAgICAgICByZXR1cm4gV1RGOjpnZXQ8
Q29sb3I+KG1fc3R5bGUpID09IFdURjo6Z2V0PENvbG9yPihvdGhlci5tX3N0eWxlKTsKIAogICAg
IHJldHVybiBmYWxzZTsKQEAgLTE1MCw3ICsxNTAsNyBAQCBib29sIENhbnZhc1N0eWxlOjppc0Vx
dWl2YWxlbnRDb2xvcihjb25zdCBDYW52YXNTdHlsZSYgb3RoZXIpIGNvbnN0CiAKIGJvb2wgQ2Fu
dmFzU3R5bGU6OmlzRXF1aXZhbGVudChjb25zdCBTUkdCQTxmbG9hdD4mIGNvbXBvbmVudHMpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+KG1fc3R5bGUp
ICYmIFdURjo6Z2V0PENvbG9yPihtX3N0eWxlKSA9PSBjb252ZXJ0Q29sb3I8U1JHQkE8dWludDhf
dD4+KGNvbXBvbmVudHMpOworICAgIHJldHVybiBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9y
PihtX3N0eWxlKSAmJiBXVEY6OmdldDxDb2xvcj4obV9zdHlsZSkgPT0gY29udmVydENvbG9yPFNS
R0JBPHVpbnQ4X3Q+Pihjb21wb25lbnRzKTsKIH0KIAogdm9pZCBDYW52YXNTdHlsZTo6YXBwbHlT
dHJva2VDb2xvcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuaAppbmRleCBhMjgzNjNmOTJiODE3NWZkYTlkYWQ3ODdj
YWU4OTVlODkxN2VjNmM1Li5hNTQwMjgwZTI4ZDZkZDEwNzYxZDM5YTNlNDg2NTg4ODgzOTc4Njk2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmgKQEAgLTQ5LDggKzQ5
LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBDYW52YXNTdHlsZSBjcmVhdGVGcm9tU3RyaW5nKGNv
bnN0IFN0cmluZyYgY29sb3IsIENhbnZhc0Jhc2UmKTsKICAgICBzdGF0aWMgQ2FudmFzU3R5bGUg
Y3JlYXRlRnJvbVN0cmluZ1dpdGhPdmVycmlkZUFscGhhKGNvbnN0IFN0cmluZyYgY29sb3IsIGZs
b2F0IGFscGhhLCBDYW52YXNCYXNlJik7CiAKLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJl
dHVybiAhV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxJbnZhbGlkPihtX3N0eWxlKTsgfQotICAgIGJv
b2wgaXNDdXJyZW50Q29sb3IoKSBjb25zdCB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PEN1cnJlbnRDb2xvcj4obV9zdHlsZSk7IH0KKyAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJl
dHVybiAhc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxJbnZhbGlkPihtX3N0eWxlKTsgfQorICAgIGJv
b2wgaXNDdXJyZW50Q29sb3IoKSBjb25zdCB7IHJldHVybiBzdGQ6OmhvbGRzX2FsdGVybmF0aXZl
PEN1cnJlbnRDb2xvcj4obV9zdHlsZSk7IH0KICAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBvdmVy
cmlkZUFscGhhKCkgY29uc3QgeyByZXR1cm4gV1RGOjpnZXQ8Q3VycmVudENvbG9yPihtX3N0eWxl
KS5vdmVycmlkZUFscGhhOyB9CiAKICAgICBTdHJpbmcgY29sb3IoKSBjb25zdDsKQEAgLTg4LDE0
ICs4OCwxNCBAQCBpbmxpbmUgQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKCkKIAogaW5saW5lIFJl
ZlB0cjxDYW52YXNHcmFkaWVudD4gQ2FudmFzU3R5bGU6OmNhbnZhc0dyYWRpZW50KCkgY29uc3QK
IHsKLSAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPENhbnZhc0dyYWRpZW50
Pj4obV9zdHlsZSkpCisgICAgaWYgKCFzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxDYW52
YXNHcmFkaWVudD4+KG1fc3R5bGUpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1
cm4gV1RGOjpnZXQ8UmVmUHRyPENhbnZhc0dyYWRpZW50Pj4obV9zdHlsZSk7CiB9CiAKIGlubGlu
ZSBSZWZQdHI8Q2FudmFzUGF0dGVybj4gQ2FudmFzU3R5bGU6OmNhbnZhc1BhdHRlcm4oKSBjb25z
dAogewotICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8Q2FudmFzUGF0dGVy
bj4+KG1fc3R5bGUpKQorICAgIGlmICghc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8Q2Fu
dmFzUGF0dGVybj4+KG1fc3R5bGUpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1
cm4gV1RGOjpnZXQ8UmVmUHRyPENhbnZhc1BhdHRlcm4+PihtX3N0eWxlKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5jcHAKaW5kZXggMjg0YjA1NTM5OWJkMGQyM2ZmYTA2Y2I0YmIxN2Y3YTU2YzA0Y2UxMi4uOGQ3
ZTI3ZGVlZmEyZWU5ZDA5N2NkYzcyMjhjYWU3MTAwNTliNGY2MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAK
QEAgLTczMCw3ICs3MzAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2F2ZUJsZW5kVmFsdWUoR0NH
TGVudW0gYXR0YWNobWVudCwgVCYgZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICBXZWJHTEFu
eSBwYXJhbSA9IG1fY29udGV4dC5nZXRQYXJhbWV0ZXIoYXR0YWNobWVudCk7Ci0gICAgICAgIGlm
IChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFQ+KHBhcmFtKSkKKyAgICAgICAgaWYgKHN0ZDo6aG9s
ZHNfYWx0ZXJuYXRpdmU8VD4ocGFyYW0pKQogICAgICAgICAgICAgZGVzdGluYXRpb24gPSBXVEY6
OmdldDxUPihwYXJhbSk7CiAgICAgfQogCkBAIC03MzgsMTYgKzczOCwxNiBAQCBwcml2YXRlOgog
ICAgIHsKICAgICAgICAgV2ViR0xBbnkgYmluZGluZyA9IG1fY29udGV4dC5nZXRQYXJhbWV0ZXIo
cG5hbWUpOwogICAgICAgICBpZiAocG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVG
RkVSX0JJTkRJTkcpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxS
ZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4+KGJpbmRpbmcpICYmIFdURjo6Z2V0PFJlZlB0cjxXZWJH
TEZyYW1lYnVmZmVyPj4oYmluZGluZyk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpob2xkc19h
bHRlcm5hdGl2ZTxSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4+KGJpbmRpbmcpICYmIFdURjo6Z2V0
PFJlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPj4oYmluZGluZyk7CiAgICAgICAgIGlmIChwbmFtZSA9
PSBHcmFwaGljc0NvbnRleHRHTDo6UkVOREVSQlVGRkVSX0JJTkRJTkcpCi0gICAgICAgICAgICBy
ZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+Pihi
aW5kaW5nKSAmJiBXVEY6OmdldDxSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+PihiaW5kaW5nKTsK
KyAgICAgICAgICAgIHJldHVybiBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxXZWJHTFJl
bmRlcmJ1ZmZlcj4+KGJpbmRpbmcpICYmIFdURjo6Z2V0PFJlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZl
cj4+KGJpbmRpbmcpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgYm9vbCBo
YXNGcmFtZWJ1ZmZlclBhcmFtZXRlckF0dGFjaG1lbnQoR0NHTGVudW0gYXR0YWNobWVudCkKICAg
ICB7CiAgICAgICAgIFdlYkdMQW55IGF0dGFjaG1lbnRQYXJhbWV0ZXIgPSBtX2NvbnRleHQuZ2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJV
RkZFUiwgYXR0YWNobWVudCwgR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfT0JKRUNUX1RZUEUpOwotICAgICAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8dW5z
aWduZWQ+KGF0dGFjaG1lbnRQYXJhbWV0ZXIpKQorICAgICAgICBpZiAoIXN0ZDo6aG9sZHNfYWx0
ZXJuYXRpdmU8dW5zaWduZWQ+KGF0dGFjaG1lbnRQYXJhbWV0ZXIpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICBpZiAoV1RGOjpnZXQ8dW5zaWduZWQ+KGF0dGFjaG1lbnRQYXJh
bWV0ZXIpICE9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihHcmFwaGljc0NvbnRleHRHTDo6UkVOREVS
QlVGRkVSKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvdHJhY2svVlRUQ3VlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
VlRUQ3VlLmNwcAppbmRleCBlOGE2ODhmYzFmODU1MDgyN2FlYzBiNTBmZWJlNWU3YjhlOGY0Yzlk
Li5kN2ZhMjEwNTgxZTY3ODFiZWQ3MmJiNjczMDA3MTIwYzU1MWUwMWU0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1ZUVEN1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9WVFRDdWUuY3BwCkBAIC0zOTIsNyArMzkyLDcgQEAgRXhjZXB0aW9uT3I8dm9p
ZD4gVlRUQ3VlOjpzZXRMaW5lKGNvbnN0IExpbmVBbmRQb3NpdGlvblNldHRpbmcmIHBvc2l0aW9u
KQogewogICAgIGRvdWJsZSBsaW5lUG9zaXRpb24gPSAwOwogCi0gICAgaWYgKFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8QXV0b0tleXdvcmQ+KHBvc2l0aW9uKSkgeworICAgIGlmIChzdGQ6OmhvbGRz
X2FsdGVybmF0aXZlPEF1dG9LZXl3b3JkPihwb3NpdGlvbikpIHsKICAgICAgICAgaWYgKHN0ZDo6
aXNuYW4obV9saW5lUG9zaXRpb24pKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAg
bGluZVBvc2l0aW9uID0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsK
QEAgLTQ2NCw3ICs0NjQsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBWVFRDdWU6OnNldFBvc2l0aW9u
KGNvbnN0IExpbmVBbmRQb3NpdGlvblNldHRpbmcmIHBvc2l0aW9uKQogICAgIC8vIHBvc2l0aW9u
IG11c3QgYmUgc2V0IHRvIHRoZSBuZXcgdmFsdWU7IGlmIHRoZSBuZXcgdmFsdWUgaXMgdGhlIHN0
cmluZwogICAgIC8vICJhdXRvIiwgdGhlbiBpdCBtdXN0IGJlIGludGVycHJldGVkIGFzIHRoZSBz
cGVjaWFsIHZhbHVlIGF1dG8uCiAgICAgZG91YmxlIHRleHRQb3NpdGlvbiA9IDA7Ci0gICAgaWYg
KFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8QXV0b0tleXdvcmQ+KHBvc2l0aW9uKSkgeworICAgIGlm
IChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPEF1dG9LZXl3b3JkPihwb3NpdGlvbikpIHsKICAgICAg
ICAgaWYgKHRleHRQb3NpdGlvbklzQXV0bygpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICAgICAgdGV4dFBvc2l0aW9uID0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9O
YU4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9ySW5kZXhlZERCQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKaW5kZXggN2Y4MDZkNGZjODFjZDJiMDQzMjJiM2Qw
ZDgwYmU0NDQwNGJiZDA2ZS4uODZiNTlhZDliMDA4ZjM4NmRlYjZmMjcxNzBmZWZmNjhlZjU4OGRm
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JJ
bmRleGVkREJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKQEAgLTExNiw3ICsxMTYsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIH0KIAogICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gcmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpOwotICAgICAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPElE
QkRhdGFiYXNlPj4ocmVzdWx0VmFsdWUpKSB7CisgICAgICAgIGlmICghc3RkOjpob2xkc19hbHRl
cm5hdGl2ZTxSZWZQdHI8SURCRGF0YWJhc2U+PihyZXN1bHRWYWx1ZSkpIHsKICAgICAgICAgICAg
IG1fZXhlY3V0YWJsZVdpdGhEYXRhYmFzZS0+cmVxdWVzdENhbGxiYWNrKCkuc2VuZEZhaWx1cmUo
IlVuZXhwZWN0ZWQgcmVzdWx0IHR5cGUuIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KQEAgLTM2Miw3ICszNjIsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIGF1dG8gcmVzdWx0VmFsdWUgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7Ci0gICAg
ICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8SURCQ3Vyc29yPj4ocmVzdWx0
VmFsdWUpKSB7CisgICAgICAgIGlmICghc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8SURC
Q3Vyc29yPj4ocmVzdWx0VmFsdWUpKSB7CiAgICAgICAgICAgICBlbmQoZmFsc2UpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaApp
bmRleCA0MTIxZmRiMzU0OWJhODRmYzU0NmJiYTE2ZjM0ODcyMzg0YzljOTc5Li41OTY0YTEzYTQ0
OWJmMjkwODk2NTk5NjkzNjllMTQ5YjExNzk5MmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblJ1bkl0
ZXJhdG9yLmgKQEAgLTI5NCw3ICsyOTQsNyBAQCBpbmxpbmUgY29uc3QgUmVuZGVyT2JqZWN0JiBQ
YXRoUnVuOjpyZW5kZXJlcigpIGNvbnN0CiAKIGlubGluZSBjb25zdCBMZWdhY3lJbmxpbmVCb3gq
IFBhdGhSdW46OmxlZ2FjeUlubGluZUJveCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPFJ1bkl0ZXJhdG9yTGVnYWN5UGF0aD4obV9wYXRoVmFyaWFudCkpCisgICAg
aWYgKCFzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJ1bkl0ZXJhdG9yTGVnYWN5UGF0aD4obV9wYXRo
VmFyaWFudCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBXVEY6OmdldDxS
dW5JdGVyYXRvckxlZ2FjeVBhdGg+KG1fcGF0aFZhcmlhbnQpLmxlZ2FjeUlubGluZUJveCgpOwog
fQpAQCAtMzAyLDcgKzMwMiw3IEBAIGlubGluZSBjb25zdCBMZWdhY3lJbmxpbmVCb3gqIFBhdGhS
dW46OmxlZ2FjeUlubGluZUJveCgpIGNvbnN0CiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5H
X0NPTlRFWFQpCiBpbmxpbmUgY29uc3QgSW5saW5lRGlzcGxheTo6Qm94KiBQYXRoUnVuOjppbmxp
bmVCb3goKSBjb25zdAogewotICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSdW5JdGVy
YXRvck1vZGVyblBhdGg+KG1fcGF0aFZhcmlhbnQpKQorICAgIGlmICghc3RkOjpob2xkc19hbHRl
cm5hdGl2ZTxSdW5JdGVyYXRvck1vZGVyblBhdGg+KG1fcGF0aFZhcmlhbnQpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gJldURjo6Z2V0PFJ1bkl0ZXJhdG9yTW9kZXJuUGF0
aD4obV9wYXRoVmFyaWFudCkuYm94KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9QYXN0ZWJvYXJkQ3VzdG9tRGF0YS5jcHAKaW5kZXggZGU5NDAwNjE5ZjUyYmIxNzdmMWE3YWFm
MTI3NTU1NWM1ZWZhODE0OC4uNTM2ZmZmOWEzYTk5Y2IwNjZhMDRjOWI4YTc0ZGJkNmI4MWI4ZjE2
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZEN1c3RvbURh
dGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRDdXN0b21EYXRh
LmNwcApAQCAtMzUsMTAgKzM1LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIFZh
cmlhbnQ8U3RyaW5nLCBSZWY8U2hhcmVkQnVmZmVyPj4gY29weVBsYXRmb3JtRGF0YShjb25zdCBW
YXJpYW50PFN0cmluZywgUmVmPFNoYXJlZEJ1ZmZlcj4+JiBvdGhlcikKIHsKLSAgICBpZiAoV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KG90aGVyKSkKKyAgICBpZiAoc3RkOjpob2xkc19h
bHRlcm5hdGl2ZTxTdHJpbmc+KG90aGVyKSkKICAgICAgICAgcmV0dXJuIHsgV1RGOjpnZXQ8U3Ry
aW5nPihvdGhlcikgfTsKIAotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxTaGFy
ZWRCdWZmZXI+PihvdGhlcikpCisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPFNo
YXJlZEJ1ZmZlcj4+KG90aGVyKSkKICAgICAgICAgcmV0dXJuIHsgV1RGOjpnZXQ8UmVmPFNoYXJl
ZEJ1ZmZlcj4+KG90aGVyKS5jb3B5UmVmKCkgfTsKIAogICAgIHJldHVybiB7IH07CkBAIC0yMDgs
NyArMjA4LDcgQEAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gUGFzdGVib2FyZEN1c3RvbURhdGE6OnJl
YWRCdWZmZXIoY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdAogICAgICAgICBpZiAoZW50cnkudHlw
ZSAhPSB0eXBlKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8UmVmPFNoYXJlZEJ1ZmZlcj4+KGVudHJ5LnBsYXRmb3JtRGF0YSkpCisg
ICAgICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxTaGFyZWRCdWZmZXI+PihlbnRy
eS5wbGF0Zm9ybURhdGEpKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6Z2V0PFJlZjxTaGFyZWRC
dWZmZXI+PihlbnRyeS5wbGF0Zm9ybURhdGEpLmNvcHlSZWYoKTsKIAogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKQEAgLTIyMiw3ICsyMjIsNyBAQCBTdHJpbmcgUGFzdGVib2FyZEN1c3RvbURhdGE6
OnJlYWRTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdAogICAgICAgICBpZiAoZW50cnku
dHlwZSAhPSB0eXBlKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihlbnRyeS5wbGF0Zm9ybURhdGEpKQorICAgICAgICBp
ZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGVudHJ5LnBsYXRmb3JtRGF0YSkpCiAg
ICAgICAgICAgICByZXR1cm4gV1RGOjpnZXQ8U3RyaW5nPihlbnRyeS5wbGF0Zm9ybURhdGEpOwog
CiAgICAgICAgIHJldHVybiB7IH07CkBAIC0yNDgsNyArMjQ4LDcgQEAgdm9pZCBQYXN0ZWJvYXJk
Q3VzdG9tRGF0YTo6Zm9yRWFjaFR5cGUoRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mJiBm
dW5jdGlvbikKIHZvaWQgUGFzdGVib2FyZEN1c3RvbURhdGE6OmZvckVhY2hQbGF0Zm9ybVN0cmlu
ZyhGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKT4m
JiBmdW5jdGlvbikgY29uc3QKIHsKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9kYXRhKSB7Ci0g
ICAgICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGVudHJ5LnBsYXRmb3Jt
RGF0YSkpCisgICAgICAgIGlmICghc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGVudHJ5
LnBsYXRmb3JtRGF0YSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBhdXRvIHN0
cmluZyA9IFdURjo6Z2V0PFN0cmluZz4oZW50cnkucGxhdGZvcm1EYXRhKTsKQEAgLTI2OSw3ICsy
NjksNyBAQCB2b2lkIFBhc3RlYm9hcmRDdXN0b21EYXRhOjpmb3JFYWNoUGxhdGZvcm1TdHJpbmdP
ckJ1ZmZlcihGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cgogewogICAgIGZvciAoYXV0byYgZW50cnkg
OiBtX2RhdGEpIHsKICAgICAgICAgYXV0byYgZGF0YSA9IGVudHJ5LnBsYXRmb3JtRGF0YTsKLSAg
ICAgICAgaWYgKChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oZGF0YSkgJiYgIVdURjo6
Z2V0PFN0cmluZz4oZGF0YSkuaXNOdWxsKCkpIHx8IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVm
PFNoYXJlZEJ1ZmZlcj4+KGRhdGEpKQorICAgICAgICBpZiAoKHN0ZDo6aG9sZHNfYWx0ZXJuYXRp
dmU8U3RyaW5nPihkYXRhKSAmJiAhV1RGOjpnZXQ8U3RyaW5nPihkYXRhKS5pc051bGwoKSkgfHwg
c3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8U2hhcmVkQnVmZmVyPj4oZGF0YSkpCiAgICAgICAg
ICAgICBmdW5jdGlvbihlbnRyeS50eXBlLCBkYXRhKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAppbmRleCBmZDllYzc1OTczN2Q0Yzk3NTk4MzFlNzcy
NDM1OWJlMmU4NjYyNDMwLi4wMGVhYmM1OTNlZWUwMzQxZWQyYjdkMzRjNGEzODdkMWQ1MTk3ZTlk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKQEAgLTE0NCw3ICsx
NDQsNyBAQCBWZWN0b3I8dWludDhfdD4gU2hhcmVkQnVmZmVyOjp0YWtlRGF0YSgpCiAgICAgICAg
IHJldHVybiB7IH07CiAKICAgICBWZWN0b3I8dWludDhfdD4gY29tYmluZWREYXRhOwotICAgIGlm
IChoYXNPbmVTZWdtZW50KCkgJiYgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8dWludDhf
dD4+KG1fc2VnbWVudHNbMF0uc2VnbWVudC0+bV9pbW11dGFibGVEYXRhKSkKKyAgICBpZiAoaGFz
T25lU2VnbWVudCgpICYmIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPHVpbnQ4X3Q+Piht
X3NlZ21lbnRzWzBdLnNlZ21lbnQtPm1faW1tdXRhYmxlRGF0YSkpCiAgICAgICAgIGNvbWJpbmVk
RGF0YSA9IHN0ZDo6ZXhjaGFuZ2UoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihtX3NlZ21lbnRz
WzBdLnNlZ21lbnQtPm1faW1tdXRhYmxlRGF0YSksIFZlY3Rvcjx1aW50OF90PigpKTsKICAgICBl
bHNlCiAgICAgICAgIGNvbWJpbmVkRGF0YSA9IGNvbWJpbmVTZWdtZW50c0RhdGEobV9zZWdtZW50
cywgbV9zaXplKTsKQEAgLTM1OSw3ICszNTksNyBAQCBjb25zdCB1aW50OF90KiBTaGFyZWRCdWZm
ZXI6OkRhdGFTZWdtZW50OjpkYXRhKCkgY29uc3QKIAogYm9vbCBTaGFyZWRCdWZmZXI6OkRhdGFT
ZWdtZW50Ojpjb250YWluc01hcHBlZEZpbGVEYXRhKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YT4obV9pbW11dGFi
bGVEYXRhKTsKKyAgICByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxGaWxlU3lzdGVtOjpN
YXBwZWRGaWxlRGF0YT4obV9pbW11dGFibGVEYXRhKTsKIH0KIAogI2lmICFVU0UoQ0YpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EZWNvZGluZ09wdGlvbnMu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0RlY29kaW5nT3B0aW9ucy5oCmlu
ZGV4IDAzNzhlOGQ1NWJlNzBhZTE0ZmQ5N2I0MTMwODljYTAzZGE1MzA5YjguLmNhMDY1YzM2MjFl
NmM2ZDJlNTE1MDU5ODg4NmExMTAyM2FlMTU0MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0RlY29kaW5nT3B0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0RlY29kaW5nT3B0aW9ucy5oCkBAIC0xMjMsNyArMTIzLDcgQEAg
cHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIGJvb2wgaGFzKCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFQ+KG1fZGVjb2Rp
bmdNb2RlT3JTaXplKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8VD4o
bV9kZWNvZGluZ01vZGVPclNpemUpOwogICAgIH0KIAogICAgIGJvb2wgaGFzRGVjb2RpbmdNb2Rl
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bh
dGguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAppbmRleCA3MjFh
ZmJmZmY3MzExZTk1YjkwOTNkNThiNDY1Yzc2NjFkZWQwNjEyLi5mN2YxNDVkOTNmZWVkN2RhYzFh
MzM4YzRhNDc1MTJhZDk2MDU1MDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGF0aC5oCkBAIC00MTksNyArNDE5LDcgQEAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RkOjpv
cHRpb25hbDxQYXRoPiBQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIAogdGVtcGxhdGUg
PHR5cGVuYW1lIERhdGFUeXBlPiBpbmxpbmUgYm9vbCBQYXRoOjpoYXNJbmxpbmVEYXRhKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxEYXRhVHlwZT4obV9pbmxp
bmVEYXRhKTsKKyAgICByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxEYXRhVHlwZT4obV9p
bmxpbmVEYXRhKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRGF0YVR5cGU+IGlubGluZSBjb25z
dCBEYXRhVHlwZSYgUGF0aDo6aW5saW5lRGF0YSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtcy5jcHAKaW5kZXggNzljOTZhZWNkMmUxZDc0ZDE3NjZmMmQ3YWQ4ZjZmZDRlMzQx
Yjg3MS4uZjI1YzIzYTI5ZDBjY2ZlZjM2MTU5MThkYzAyNjk0NDhlMGEzZDg2ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcApAQCAtMTQyLDcgKzE0Miw3IEBAIFNldElubGlu
ZUZpbGxHcmFkaWVudDo6U2V0SW5saW5lRmlsbEdyYWRpZW50KGZsb2F0IG9mZnNldHNbbWF4Q29s
b3JTdG9wQ291bnRdLCBTCiAKIFNldElubGluZUZpbGxHcmFkaWVudDo6U2V0SW5saW5lRmlsbEdy
YWRpZW50KGNvbnN0IFNldElubGluZUZpbGxHcmFkaWVudCYgb3RoZXIpCiB7Ci0gICAgaWYgKFdU
Rjo6aG9sZHNfYWx0ZXJuYXRpdmU8R3JhZGllbnQ6OlJhZGlhbERhdGE+KG90aGVyLm1fZGF0YSkg
fHwgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxHcmFkaWVudDo6TGluZWFyRGF0YT4ob3RoZXIubV9k
YXRhKSB8fCBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEdyYWRpZW50OjpDb25pY0RhdGE+KG90aGVy
Lm1fZGF0YSkpIHsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxHcmFkaWVudDo6UmFk
aWFsRGF0YT4ob3RoZXIubV9kYXRhKSB8fCBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPEdyYWRpZW50
OjpMaW5lYXJEYXRhPihvdGhlci5tX2RhdGEpIHx8IHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8R3Jh
ZGllbnQ6OkNvbmljRGF0YT4ob3RoZXIubV9kYXRhKSkgewogICAgICAgICBtX2RhdGEgPSBvdGhl
ci5tX2RhdGE7CiAgICAgICAgIG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSA9IG90aGVyLm1fZ3Jh
ZGllbnRTcGFjZVRyYW5zZm9ybTsKICAgICAgICAgbV9zcHJlYWRNZXRob2QgPSBvdGhlci5tX3Nw
cmVhZE1ldGhvZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0
Zm9ybVBhc3RlYm9hcmRJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZv
cm1QYXN0ZWJvYXJkSU9TLm1tCmluZGV4IDY0MGE0NTI2YzU3YWVlZTFmOTEyZGU3ZjU2M2U2Mzcz
MTI2ZjEzZmUuLmRiNTE1NGRkNTFiOGU1YTQ0NWVkY2MzNDhmNjAyMmI1MDgzZDg5MDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1Mu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElP
Uy5tbQpAQCAtNjU2LDcgKzY1Niw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8V2ViSXRlbVByb3ZpZGVy
UmVnaXN0cmF0aW9uSW5mb0xpc3Q+IGNyZWF0ZUl0ZW1Qcm92aWRlclJlZ2lzdHJhCiAgICAgICAg
IGlmIChjb2NvYVR5cGUuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
IGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4odmFsdWUpKSB7CisgICAgICAgIGlm
IChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4odmFsdWUpKSB7CiAgICAgICAgICAgICBp
ZiAoV1RGOjpnZXQ8U3RyaW5nPih2YWx1ZSkuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1Q
YXN0ZWJvYXJkTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtUGFz
dGVib2FyZE1hYy5tbQppbmRleCAzMGE2YWE4OGM1Y2U4MTAwMmE3YmVmMzJhYmJmMGY1NTllNWIx
ZjYzLi4xNWZkYjhhOTBjNjk2MzA3YTczMzI5NmYzNDM2NGMwMzUzNDFlY2NmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0K
QEAgLTI2MywxMCArMjYzLDEwIEBAIGludDY0X3QgUGxhdGZvcm1QYXN0ZWJvYXJkOjp3cml0ZShj
b25zdCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSYgZGF0YSkKICAgICAgICAgaWYgKHBsYXRmb3JtVHlw
ZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8UmVmPFNoYXJlZEJ1ZmZlcj4+KHN0cmluZ09yQnVmZmVyKSkgeworICAg
ICAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8U2hhcmVkQnVmZmVyPj4oc3RyaW5n
T3JCdWZmZXIpKSB7CiAgICAgICAgICAgICBpZiAoYXV0byBwbGF0Zm9ybURhdGEgPSBXVEY6Omdl
dDxSZWY8U2hhcmVkQnVmZmVyPj4oc3RyaW5nT3JCdWZmZXIpLT5jcmVhdGVOU0RhdGEoKSkKICAg
ICAgICAgICAgICAgICBbbV9wYXN0ZWJvYXJkIHNldERhdGE6cGxhdGZvcm1EYXRhLmdldCgpIGZv
clR5cGU6cGxhdGZvcm1UeXBlXTsKLSAgICAgICAgfSBlbHNlIGlmIChXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPFN0cmluZz4oc3RyaW5nT3JCdWZmZXIpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoc3Rk
Ojpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KHN0cmluZ09yQnVmZmVyKSkgewogICAgICAgICAg
ICAgYXV0byBzdHJpbmcgPSBXVEY6OmdldDxTdHJpbmc+KHN0cmluZ09yQnVmZmVyKTsKICAgICAg
ICAgICAgIGlmICghIXN0cmluZykKICAgICAgICAgICAgICAgICBbbV9wYXN0ZWJvYXJkIHNldFN0
cmluZzpzdHJpbmcgZm9yVHlwZTpwbGF0Zm9ybVR5cGVdOwpAQCAtNTA1LDEwICs1MDUsMTAgQEAg
c3RhdGljIFJldGFpblB0cjxOU1Bhc3RlYm9hcmRJdGVtPiBjcmVhdGVQYXN0ZWJvYXJkSXRlbShj
b25zdCBQYXN0ZWJvYXJkQ3VzdG9tRGEKICAgICAgICAgaWYgKCFwbGF0Zm9ybVR5cGUpCiAgICAg
ICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVm
PFNoYXJlZEJ1ZmZlcj4+KHN0cmluZ09yQnVmZmVyKSkgeworICAgICAgICBpZiAoc3RkOjpob2xk
c19hbHRlcm5hdGl2ZTxSZWY8U2hhcmVkQnVmZmVyPj4oc3RyaW5nT3JCdWZmZXIpKSB7CiAgICAg
ICAgICAgICBpZiAoYXV0byBwbGF0Zm9ybURhdGEgPSBXVEY6OmdldDxSZWY8U2hhcmVkQnVmZmVy
Pj4oc3RyaW5nT3JCdWZmZXIpLT5jcmVhdGVOU0RhdGEoKSkKICAgICAgICAgICAgICAgICBbaXRl
bSBzZXREYXRhOnBsYXRmb3JtRGF0YS5nZXQoKSBmb3JUeXBlOnBsYXRmb3JtVHlwZV07Ci0gICAg
ICAgIH0gZWxzZSBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KHN0cmluZ09yQnVm
ZmVyKSkgeworICAgICAgICB9IGVsc2UgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5n
PihzdHJpbmdPckJ1ZmZlcikpIHsKICAgICAgICAgICAgIGF1dG8gc3RyaW5nID0gV1RGOjpnZXQ8
U3RyaW5nPihzdHJpbmdPckJ1ZmZlcik7CiAgICAgICAgICAgICBpZiAoISFzdHJpbmcpCiAgICAg
ICAgICAgICAgICAgW2l0ZW0gc2V0U3RyaW5nOnN0cmluZyBmb3JUeXBlOnBsYXRmb3JtVHlwZV07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tNZWRpYURldmlj
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFEZXZpY2UuaAppbmRl
eCA0NjdkOTEzOTQ0NDNlZmEyODM2M2E4NmE4ZDU0ZmQyYzQ0NTg1M2NhLi5kNTQ5ZmFkNzM3NjFi
ZTcxOTY4NmRkOTM2YTY2OTY2Njg4Y2E2OWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tb2NrL01vY2tNZWRpYURldmljZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21vY2svTW9ja01lZGlhRGV2aWNlLmgKQEAgLTE2MCwxMCArMTYwLDEwIEBAIHN0cnVjdCBN
b2NrRGlzcGxheVByb3BlcnRpZXMgewogfTsKIAogc3RydWN0IE1vY2tNZWRpYURldmljZSB7Ci0g
ICAgYm9vbCBpc01pY3JvcGhvbmUoKSBjb25zdCB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPE1vY2tNaWNyb3Bob25lUHJvcGVydGllcz4ocHJvcGVydGllcyk7IH0KLSAgICBib29sIGlz
U3BlYWtlcigpIGNvbnN0IHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8TW9ja1NwZWFr
ZXJQcm9wZXJ0aWVzPihwcm9wZXJ0aWVzKTsgfQotICAgIGJvb2wgaXNDYW1lcmEoKSBjb25zdCB7
IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPE1vY2tDYW1lcmFQcm9wZXJ0aWVzPihwcm9w
ZXJ0aWVzKTsgfQotICAgIGJvb2wgaXNEaXNwbGF5KCkgY29uc3QgeyByZXR1cm4gV1RGOjpob2xk
c19hbHRlcm5hdGl2ZTxNb2NrRGlzcGxheVByb3BlcnRpZXM+KHByb3BlcnRpZXMpOyB9CisgICAg
Ym9vbCBpc01pY3JvcGhvbmUoKSBjb25zdCB7IHJldHVybiBzdGQ6OmhvbGRzX2FsdGVybmF0aXZl
PE1vY2tNaWNyb3Bob25lUHJvcGVydGllcz4ocHJvcGVydGllcyk7IH0KKyAgICBib29sIGlzU3Bl
YWtlcigpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8TW9ja1NwZWFrZXJQ
cm9wZXJ0aWVzPihwcm9wZXJ0aWVzKTsgfQorICAgIGJvb2wgaXNDYW1lcmEoKSBjb25zdCB7IHJl
dHVybiBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPE1vY2tDYW1lcmFQcm9wZXJ0aWVzPihwcm9wZXJ0
aWVzKTsgfQorICAgIGJvb2wgaXNEaXNwbGF5KCkgY29uc3QgeyByZXR1cm4gc3RkOjpob2xkc19h
bHRlcm5hdGl2ZTxNb2NrRGlzcGxheVByb3BlcnRpZXM+KHByb3BlcnRpZXMpOyB9CiAKICAgICBD
YXB0dXJlRGV2aWNlIGNhcHR1cmVEZXZpY2UoKSBjb25zdAogICAgIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAK
aW5kZXggZjgxMmVmNDM5ZWMyMWQ2Mzg1YmI1MmJlMTI0ODkxYmM5ZWYyOGJhYi4uNTY3YjU4ZWMy
NTIyYTRhMzkxMDYwMmJiOGY3MTMxZTJlMDNhZmE5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKQEAgLTQ4
NSw3ICs0ODUsNyBAQCBJbWFnZUJ1ZmZlciogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmltYWdl
QnVmZmVyKCkgY29uc3QKIAogYm9vbCBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZTo6bW9ja0Rpc3Bs
YXlUeXBlKENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGUgdHlwZSkgY29uc3QKIHsKLSAgICBpZiAo
IVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8TW9ja0Rpc3BsYXlQcm9wZXJ0aWVzPihtX2RldmljZS5w
cm9wZXJ0aWVzKSkKKyAgICBpZiAoIXN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8TW9ja0Rpc3BsYXlQ
cm9wZXJ0aWVzPihtX2RldmljZS5wcm9wZXJ0aWVzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgcmV0dXJuIFdURjo6Z2V0PE1vY2tEaXNwbGF5UHJvcGVydGllcz4obV9kZXZpY2UucHJv
cGVydGllcykudHlwZSA9PSB0eXBlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5oCmluZGV4IDMwMjA0YTUyNTk5MWIyZjBm
ZmY1MjhiYzA1MWMzNjA3NzY5NTE5MWQuLjkzNWM2ZGRlY2I4ZDQ1OGM5MTY2ZjViMjY3YWM1YzQ5
NGZmMzQzYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1Jl
YWx0aW1lVmlkZW9Tb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01v
Y2tSZWFsdGltZVZpZGVvU291cmNlLmgKQEAgLTk1LDggKzk1LDggQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgZGVsYXlTYW1wbGVzKFNlY29uZHMpIGZpbmFsOwogCi0gICAgYm9vbCBtb2NrQ2FtZXJh
KCkgY29uc3QgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxNb2NrQ2FtZXJhUHJvcGVy
dGllcz4obV9kZXZpY2UucHJvcGVydGllcyk7IH0KLSAgICBib29sIG1vY2tEaXNwbGF5KCkgY29u
c3QgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxNb2NrRGlzcGxheVByb3BlcnRpZXM+
KG1fZGV2aWNlLnByb3BlcnRpZXMpOyB9CisgICAgYm9vbCBtb2NrQ2FtZXJhKCkgY29uc3QgeyBy
ZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxNb2NrQ2FtZXJhUHJvcGVydGllcz4obV9kZXZp
Y2UucHJvcGVydGllcyk7IH0KKyAgICBib29sIG1vY2tEaXNwbGF5KCkgY29uc3QgeyByZXR1cm4g
c3RkOjpob2xkc19hbHRlcm5hdGl2ZTxNb2NrRGlzcGxheVByb3BlcnRpZXM+KG1fZGV2aWNlLnBy
b3BlcnRpZXMpOyB9CiAgICAgYm9vbCBtb2NrU2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbW9ja0Rp
c3BsYXlUeXBlKENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OlNjcmVlbik7IH0KICAgICBib29s
IG1vY2tXaW5kb3coKSBjb25zdCB7IHJldHVybiBtb2NrRGlzcGxheVR5cGUoQ2FwdHVyZURldmlj
ZTo6RGV2aWNlVHlwZTo6V2luZG93KTsgfQogICAgIGJvb2wgbW9ja0Rpc3BsYXlUeXBlKENhcHR1
cmVEZXZpY2U6OkRldmljZVR5cGUpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9ETlMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
RE5TLmgKaW5kZXggMzViZDdhMDA5NGY1NDczZDI5YWYxYmFlZmFmYWRmNGM0Y2E5N2QzNy4uMzQz
ZjZlN2NkYjE1MmZhNzdmZjQ4OTJkNTVlNmUzZWI4YTM3YjEwNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ETlMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0ROUy5oCkBAIC01MSw4ICs1MSw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogCi0gICAgYm9vbCBpc0lQdjQoKSBjb25zdCB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPHN0cnVjdCBpbl9hZGRyPihtX2FkZHJlc3MpOyB9Ci0gICAgYm9vbCBpc0lQdjYoKSBjb25z
dCB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPHN0cnVjdCBpbjZfYWRkcj4obV9hZGRy
ZXNzKTsgfQorICAgIGJvb2wgaXNJUHY0KCkgY29uc3QgeyByZXR1cm4gc3RkOjpob2xkc19hbHRl
cm5hdGl2ZTxzdHJ1Y3QgaW5fYWRkcj4obV9hZGRyZXNzKTsgfQorICAgIGJvb2wgaXNJUHY2KCkg
Y29uc3QgeyByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxzdHJ1Y3QgaW42X2FkZHI+KG1f
YWRkcmVzcyk7IH0KIAogICAgIGNvbnN0IHN0cnVjdCBpbl9hZGRyJiBpcHY0QWRkcmVzcygpIGNv
bnN0IHsgcmV0dXJuIFdURjo6Z2V0PHN0cnVjdCBpbl9hZGRyPihtX2FkZHJlc3MpOyB9CiAgICAg
Y29uc3Qgc3RydWN0IGluNl9hZGRyJiBpcHY2QWRkcmVzcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6
Z2V0PHN0cnVjdCBpbjZfYWRkcj4obV9hZGRyZXNzKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAppbmRleCBjZTllOWY1MGFjNGU2OGQ4ZWFmNjYzYmY4
NjE1OGY0ZmRjNjJlNTJiLi44OTcwMGNlMmVkOGRiMTY0MjUyNzc3ZjNiYjI5MmMwNDQ2MjY0OWNk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcApAQCAt
MjU0LDcgKzI1NCw3IEBAIHZvaWQgRm9ybURhdGE6OmFwcGVuZE11bHRpUGFydEtleVZhbHVlUGFp
ckl0ZW1zKGNvbnN0IERPTUZvcm1EYXRhJiBmb3JtRGF0YSkKICAgICAgICAgVmVjdG9yPGNoYXI+
IGhlYWRlcjsKICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjpiZWdpbk11bHRpUGFydEhlYWRlciho
ZWFkZXIsIG1fYm91bmRhcnkuZGF0YSgpLCBub3JtYWxpemVkTmFtZSk7CiAKLSAgICAgICAgaWYg
KFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPEZpbGU+PihpdGVtLmRhdGEpKQorICAgICAg
ICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8RmlsZT4+KGl0ZW0uZGF0YSkpCiAg
ICAgICAgICAgICBhcHBlbmRNdWx0aVBhcnRGaWxlVmFsdWUoKldURjo6Z2V0PFJlZlB0cjxGaWxl
Pj4oaXRlbS5kYXRhKSwgaGVhZGVyLCBlbmNvZGluZyk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIGFwcGVuZE11bHRpUGFydFN0cmluZ1ZhbHVlKFdURjo6Z2V0PFN0cmluZz4oaXRlbS5kYXRh
KSwgaGVhZGVyLCBlbmNvZGluZyk7CkBAIC0yNzUsMTAgKzI3NSwxMCBAQCB2b2lkIEZvcm1EYXRh
OjphcHBlbmROb25NdWx0aVBhcnRLZXlWYWx1ZVBhaXJJdGVtcyhjb25zdCBET01Gb3JtRGF0YSYg
Zm9ybURhdGEsCiAgICAgZm9yIChhdXRvJiBpdGVtIDogZm9ybURhdGEuaXRlbXMoKSkgewogICAg
ICAgICAvLyBGSVhNRTogVGhlIGV4cGVjdGVkIGJlaGF2aW9yIGlzIHRvIGNvbnZlcnQgZmlsZXMg
dG8gc3RyaW5nIGZvciBlbmN0eXBlICJ0ZXh0L3BsYWluIi4gQ29udmVyc2lvbiBtYXkgYmUgYWRk
ZWQgYXQgInZvaWQgRE9NRm9ybURhdGE6OnNldChjb25zdCBTdHJpbmcmIG5hbWUsIEJsb2ImIGJs
b2IsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpIiBvciBoZXJlLgogICAgICAgICAvLyBGSVhNRTog
UmVtb3ZlIHRoZSBmb2xsb3dpbmcgaWYgc3RhdGVtZW50IHdoZW4gZml4ZWQuCi0gICAgICAgIGlm
ICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGl0ZW0uZGF0YSkpCisgICAgICAgIGlm
ICghc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGl0ZW0uZGF0YSkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgCi0gICAgICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPFN0cmluZz4oaXRlbS5kYXRhKSk7CisgICAgICAgIEFTU0VSVChzdGQ6OmhvbGRzX2FsdGVy
bmF0aXZlPFN0cmluZz4oaXRlbS5kYXRhKSk7CiAKICAgICAgICAgYXV0byBub3JtYWxpemVkTmFt
ZSA9IG5vcm1hbGl6ZVN0cmluZ0RhdGEoZW5jb2RpbmcsIGl0ZW0ubmFtZSk7CiAgICAgICAgIGF1
dG8gbm9ybWFsaXplZFN0cmluZ0RhdGEgPSBub3JtYWxpemVTdHJpbmdEYXRhKGVuY29kaW5nLCBX
VEY6OmdldDxTdHJpbmc+KGl0ZW0uZGF0YSkpOwpAQCAtMzMyLDcgKzMzMiw3IEBAIHN0YXRpYyB2
b2lkIGFwcGVuZEJsb2JSZXNvbHZlZChCbG9iUmVnaXN0cnlJbXBsKiBibG9iUmVnaXN0cnksIEZv
cm1EYXRhJiBmb3JtRGF0CiBib29sIEZvcm1EYXRhOjpjb250YWluc0Jsb2JFbGVtZW50KCkgY29u
c3QKIHsKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBtX2VsZW1lbnRzKSB7Ci0gICAgICAgIGlm
IChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEZvcm1EYXRhRWxlbWVudDo6RW5jb2RlZEJsb2JEYXRh
PihlbGVtZW50LmRhdGEpKQorICAgICAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxGb3Jt
RGF0YUVsZW1lbnQ6OkVuY29kZWRCbG9iRGF0YT4oZWxlbWVudC5kYXRhKSkKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC00MTQsNyArNDE0LDcg
QEAgdWludDY0X3QgRm9ybURhdGE6Omxlbmd0aEluQnl0ZXMoKSBjb25zdAogUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gRm9ybURhdGE6OmFzU2hhcmVkQnVmZmVyKCkgY29uc3QKIHsKICAgICBmb3IgKGF1
dG8mIGVsZW1lbnQgOiBtX2VsZW1lbnRzKSB7Ci0gICAgICAgIGlmICghV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxWZWN0b3I8dWludDhfdD4+KGVsZW1lbnQuZGF0YSkpCisgICAgICAgIGlmICghc3Rk
Ojpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8dWludDhfdD4+KGVsZW1lbnQuZGF0YSkpCiAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlKGZsYXR0ZW4oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAppbmRleCA5MmRmNTJhYWU2ZTZjMThkODNh
YzZmZDMzNzVmZjg0ZWFkZDBhYTdlLi42YzVmODY1YzVjMjdiNzI0NzkxNDExOTk0NmU2ODFjODNl
ZDE5MTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlUmVxdWVzdEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKQEAgLTUwMiw3ICs1MDIsNyBAQCBib29sIFJlc291cmNl
UmVxdWVzdEJhc2U6Omhhc1VwbG9hZCgpIGNvbnN0CiB7CiAgICAgaWYgKGF1dG8qIGJvZHkgPSBo
dHRwQm9keSgpKSB7CiAgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGJvZHktPmVsZW1lbnRz
KCkpIHsKLSAgICAgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFdlYkNvcmU6OkZv
cm1EYXRhRWxlbWVudDo6RW5jb2RlZEZpbGVEYXRhPihlbGVtZW50LmRhdGEpIHx8IFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8V2ViQ29yZTo6Rm9ybURhdGFFbGVtZW50OjpFbmNvZGVkQmxvYkRhdGE+
KGVsZW1lbnQuZGF0YSkpCisgICAgICAgICAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxX
ZWJDb3JlOjpGb3JtRGF0YUVsZW1lbnQ6OkVuY29kZWRGaWxlRGF0YT4oZWxlbWVudC5kYXRhKSB8
fCBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFdlYkNvcmU6OkZvcm1EYXRhRWxlbWVudDo6RW5jb2Rl
ZEJsb2JEYXRhPihlbGVtZW50LmRhdGEpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIv
UGxhdGZvcm1YUi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvUGxhdGZvcm1YUi5oCmlu
ZGV4IGZjMjRmOGE0ZjYxZjgxMzQ4ZGE2NjRhMTBkYWQ0ODBhN2VjMjkzMjguLjdkMjU4MmQ4YzYw
N2Y2MTE3YTI5M2NiNzgzNmIyOGEwZDU0MjgzZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3hyL1BsYXRmb3JtWFIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94
ci9QbGF0Zm9ybVhSLmgKQEAgLTM2MiwxNCArMzYyLDE0IEBAIHZvaWQgRGV2aWNlOjpGcmFtZURh
dGE6OlZpZXc6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIg
PDwgb2Zmc2V0OwogCi0gICAgYm9vbCBoYXNGb3YgPSBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFBs
YXRmb3JtWFI6OkRldmljZTo6RnJhbWVEYXRhOjpGb3Y+KHByb2plY3Rpb24pOworICAgIGJvb2wg
aGFzRm92ID0gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxQbGF0Zm9ybVhSOjpEZXZpY2U6OkZyYW1l
RGF0YTo6Rm92Pihwcm9qZWN0aW9uKTsKICAgICBlbmNvZGVyIDw8IGhhc0ZvdjsKICAgICBpZiAo
aGFzRm92KSB7CiAgICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8UGxhdGZvcm1YUjo6RGV2aWNl
OjpGcmFtZURhdGE6OkZvdj4ocHJvamVjdGlvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBib29sIGhhc1Byb2plY3Rpb25NYXRyaXggPSBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFBs
YXRmb3JtWFI6OkRldmljZTo6RnJhbWVEYXRhOjpQcm9qZWN0aW9uTWF0cml4Pihwcm9qZWN0aW9u
KTsKKyAgICBib29sIGhhc1Byb2plY3Rpb25NYXRyaXggPSBzdGQ6OmhvbGRzX2FsdGVybmF0aXZl
PFBsYXRmb3JtWFI6OkRldmljZTo6RnJhbWVEYXRhOjpQcm9qZWN0aW9uTWF0cml4Pihwcm9qZWN0
aW9uKTsKICAgICBlbmNvZGVyIDw8IGhhc1Byb2plY3Rpb25NYXRyaXg7CiAgICAgaWYgKGhhc1By
b2plY3Rpb25NYXRyaXgpIHsKICAgICAgICAgZm9yIChmbG9hdCBmIDogV1RGOjpnZXQ8UGxhdGZv
cm1YUjo6RGV2aWNlOjpGcmFtZURhdGE6OlByb2plY3Rpb25NYXRyaXg+KHByb2plY3Rpb24pKQpA
QCAtMzc3LDcgKzM3Nyw3IEBAIHZvaWQgRGV2aWNlOjpGcmFtZURhdGE6OlZpZXc6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQVNT
RVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8c3RkOjpudWxscHRyX3Q+KHByb2plY3Rpb24pKTsK
KyAgICBBU1NFUlQoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxzdGQ6Om51bGxwdHJfdD4ocHJvamVj
dGlvbikpOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCmluZGV4IGNiMzBlNmQzYTM3NzVkNWRiM2EzNDM5Y2Yz
NzNmMTY5ODdiZTIwMDAuLmVkNzE1NWEwMDVjZWEwOWVjN2NlYTU4YjE1ZGYxNDY4NTVmYTUxNmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKQEAgLTU5OCwx
MiArNTk4LDEyIEBAIHByaXZhdGU6CiAKIGlubGluZSBib29sIFJlbmRlckJsb2NrRmxvdzo6aGFz
TGluZUxheW91dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PFdURjo6TW9ub3N0YXRlPihtX2xpbmVMYXlvdXQpOworICAgIHJldHVybiAhc3RkOjpob2xkc19h
bHRlcm5hdGl2ZTxXVEY6Ok1vbm9zdGF0ZT4obV9saW5lTGF5b3V0KTsKIH0KIAogaW5saW5lIGJv
b2wgUmVuZGVyQmxvY2tGbG93OjpoYXNMZWdhY3lMaW5lTGF5b3V0KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxzdGQ6OnVuaXF1ZV9wdHI8TGVnYWN5TGluZUxh
eW91dD4+KG1fbGluZUxheW91dCk7CisgICAgcmV0dXJuIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8
c3RkOjp1bmlxdWVfcHRyPExlZ2FjeUxpbmVMYXlvdXQ+PihtX2xpbmVMYXlvdXQpOwogfQogCiBp
bmxpbmUgY29uc3QgTGVnYWN5TGluZUxheW91dCogUmVuZGVyQmxvY2tGbG93OjpsZWdhY3lMaW5l
TGF5b3V0KCkgY29uc3QKQEAgLTYxOSw3ICs2MTksNyBAQCBpbmxpbmUgTGVnYWN5TGluZUxheW91
dCogUmVuZGVyQmxvY2tGbG93OjpsZWdhY3lMaW5lTGF5b3V0KCkKICNpZiBFTkFCTEUoTEFZT1VU
X0ZPUk1BVFRJTkdfQ09OVEVYVCkKIGlubGluZSBib29sIFJlbmRlckJsb2NrRmxvdzo6aGFzTW9k
ZXJuTGluZUxheW91dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8c3RkOjp1bmlxdWVfcHRyPExheW91dEludGVncmF0aW9uOjpMaW5lTGF5b3V0Pj4obV9saW5l
TGF5b3V0KTsKKyAgICByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxzdGQ6OnVuaXF1ZV9w
dHI8TGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ+PihtX2xpbmVMYXlvdXQpOwogfQogCiBp
bmxpbmUgY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQqIFJlbmRlckJsb2NrRmxv
dzo6bW9kZXJuTGluZUxheW91dCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVy
LmNwcAppbmRleCA5YjFjZWQ0OWYwNGRkNDdhYzcyYzU0Mzk1NTkzZjVkNjY5Yzk0MTBiLi4wNGU3
ODc2NTU5ZDU0NTM0Nzc3YTJmMGUyZDU2ZjhkNDhiZGY3NzE3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1N0eWxlQnVpbGRlci5jcHAKQEAgLTIwNCw3ICsyMDQsNyBAQCB2b2lkIEJ1aWxkZXI6OmFwcGx5
Q3VzdG9tUHJvcGVydHkoY29uc3QgU3RyaW5nJiBuYW1lKQogCiAgICAgICAgIG1fc3RhdGUubV9p
blByb2dyZXNzUHJvcGVydGllc0N1c3RvbS5hZGQobmFtZSk7CiAKLSAgICAgICAgaWYgKFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPENTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWU+Pih2YWx1ZVRv
QXBwbHktPnZhbHVlKCkpKSB7CisgICAgICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJl
ZjxDU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlPj4odmFsdWVUb0FwcGx5LT52YWx1ZSgpKSkgewog
ICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZSA9IHJlc29sdmVkVmFyaWFi
bGVWYWx1ZShDU1NQcm9wZXJ0eUN1c3RvbSwgdmFsdWVUb0FwcGx5LmdldCgpKTsKIAogICAgICAg
ICAgICAgaWYgKG1fc3RhdGUubV9hcHBsaWVkQ3VzdG9tUHJvcGVydGllcy5jb250YWlucyhuYW1l
KSkKQEAgLTIzMyw3ICsyMzMsNyBAQCB2b2lkIEJ1aWxkZXI6OmFwcGx5Q3VzdG9tUHJvcGVydHko
Y29uc3QgU3RyaW5nJiBuYW1lKQogCiAgICAgICAgIFJlZiB2YWx1ZVRvQXBwbHkgPSBkb3duY2Fz
dDxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPigqcHJvcGVydHkuY3NzVmFsdWVbaW5kZXhdKTsKIAot
ICAgICAgICBpZiAoaW5DeWNsZSAmJiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxDU1NWYXJp
YWJsZVJlZmVyZW5jZVZhbHVlPj4odmFsdWVUb0FwcGx5LT52YWx1ZSgpKSkgeworICAgICAgICBp
ZiAoaW5DeWNsZSAmJiBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxDU1NWYXJpYWJsZVJlZmVy
ZW5jZVZhbHVlPj4odmFsdWVUb0FwcGx5LT52YWx1ZSgpKSkgewogICAgICAgICAgICAgLy8gUmVz
b2x2ZSB0aGlzIHZhbHVlIHNvIHRoYXQgd2UgcmVzZXQgaXRzIGRlcGVuZGVuY2llcy4KICAgICAg
ICAgICAgIHJlc29sdmVkVmFyaWFibGVWYWx1ZShDU1NQcm9wZXJ0eUN1c3RvbSwgdmFsdWVUb0Fw
cGx5LmdldCgpKTsKICAgICAgICAgfQpAQCAtMjgzLDcgKzI4Myw3IEBAIHZvaWQgQnVpbGRlcjo6
YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSYgdmFsdWUsIFNlbGVjdG9y
Q2hlY2tlcjo6CiAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5Q3VzdG9tKSB7CiAgICAgICAgIGN1
c3RvbVByb3BlcnR5VmFsdWUgPSBkb3duY2FzdDxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPih2YWx1
ZVRvQXBwbHkucHRyKCkpOwogICAgICAgICBBU1NFUlQoY3VzdG9tUHJvcGVydHlWYWx1ZS0+aXNS
ZXNvbHZlZCgpKTsKLSAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q1NTVmFsdWVJ
RD4oY3VzdG9tUHJvcGVydHlWYWx1ZS0+dmFsdWUoKSkpCisgICAgICAgIGlmIChzdGQ6OmhvbGRz
X2FsdGVybmF0aXZlPENTU1ZhbHVlSUQ+KGN1c3RvbVByb3BlcnR5VmFsdWUtPnZhbHVlKCkpKQog
ICAgICAgICAgICAgY3VzdG9tUHJvcGVydHlWYWx1ZUlEID0gV1RGOjpnZXQ8Q1NTVmFsdWVJRD4o
Y3VzdG9tUHJvcGVydHlWYWx1ZS0+dmFsdWUoKSk7CiAgICAgICAgIGF1dG8mIG5hbWUgPSBjdXN0
b21Qcm9wZXJ0eVZhbHVlLT5uYW1lKCk7CiAgICAgICAgIGN1c3RvbVByb3BlcnR5UmVnaXN0ZXJl
ZCA9IG1fc3RhdGUuZG9jdW1lbnQoKS5nZXRDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHlTZXQo
KS5nZXQobmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uv
Y29udGV4dC9TZXJ2aWNlV29ya2VyVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
c2VydmljZS9jb250ZXh0L1NlcnZpY2VXb3JrZXJUaHJlYWQuY3BwCmluZGV4IGU3MTQ2MDNmMzU2
NDA5MThhZTA2YTlhZmE5MWY4MTk3N2Q1N2EzNmEuLjIxNjAzZTE4MmRlNWMxMjgzZTAyMDZlN2M5
YWM1OTAwMzE2MTA4YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2Vydmlj
ZS9jb250ZXh0L1NlcnZpY2VXb3JrZXJUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvc2VydmljZS9jb250ZXh0L1NlcnZpY2VXb3JrZXJUaHJlYWQuY3BwCkBAIC0xNDQsNyAr
MTQ0LDcgQEAgdm9pZCBTZXJ2aWNlV29ya2VyVGhyZWFkOjpxdWV1ZVRhc2tUb1Bvc3RNZXNzYWdl
KE1lc3NhZ2VXaXRoTWVzc2FnZVBvcnRzJiYgbWVzc2EKICAgICBzZXJ2aWNlV29ya2VyR2xvYmFs
U2NvcGUtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpET01NYW5pcHVsYXRpb24s
IFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpLCBzZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUs
IG1lc3NhZ2UgPSBXVEZNb3ZlKG1lc3NhZ2UpLCBzb3VyY2VEYXRhID0gV1RGTW92ZShzb3VyY2VE
YXRhKV0oKSBtdXRhYmxlIHsKICAgICAgICAgVVJMIHNvdXJjZVVSTDsKICAgICAgICAgRXh0ZW5k
YWJsZU1lc3NhZ2VFdmVudFNvdXJjZSBzb3VyY2U7Ci0gICAgICAgIGlmIChXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPFNlcnZpY2VXb3JrZXJDbGllbnREYXRhPihzb3VyY2VEYXRhKSkgeworICAgICAg
ICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxTZXJ2aWNlV29ya2VyQ2xpZW50RGF0YT4oc291
cmNlRGF0YSkpIHsKICAgICAgICAgICAgIFJlZlB0cjxTZXJ2aWNlV29ya2VyQ2xpZW50PiBzb3Vy
Y2VDbGllbnQgPSBTZXJ2aWNlV29ya2VyQ2xpZW50OjpnZXRPckNyZWF0ZShzZXJ2aWNlV29ya2Vy
R2xvYmFsU2NvcGUsIFdURk1vdmUoV1RGOjpnZXQ8U2VydmljZVdvcmtlckNsaWVudERhdGE+KHNv
dXJjZURhdGEpKSk7CiAKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFzb3VyY2VDbGllbnQt
PnVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSB8fCAhc2VydmljZVdvcmtlckdsb2JhbFNj
b3BlLT51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkgfHwgcHJvdG9jb2xIb3N0QW5kUG9y
dEFyZUVxdWFsKHNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS0+dXJsKCksIHNvdXJjZUNsaWVudC0+
dXJsKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2
ZXIvU1dTZXJ2ZXJKb2JRdWV1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL3NlcnZpY2Uv
c2VydmVyL1NXU2VydmVySm9iUXVldWUuY3BwCmluZGV4IDdlZmViZWQ1YThjZjdlYmM4NGViNGQw
NGE1YTBkMjVhMzE3NjllNWIuLmU1OGQxZGY5MjIzOWI2Y2Q5MDZmZTI1MWNlNjk0MGViYjAzMjg0
ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvc2VydmljZS9zZXJ2ZXIvU1dT
ZXJ2ZXJKb2JRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9zZXJ2aWNlL3Nl
cnZlci9TV1NlcnZlckpvYlF1ZXVlLmNwcApAQCAtNDAzLDcgKzQwMyw3IEBAIHZvaWQgU1dTZXJ2
ZXJKb2JRdWV1ZTo6Y2FuY2VsSm9ic0Zyb21Db25uZWN0aW9uKFNXU2VydmVyQ29ubmVjdGlvbklk
ZW50aWZpZXIgY29uCiB2b2lkIFNXU2VydmVySm9iUXVldWU6OmNhbmNlbEpvYnNGcm9tU2Vydmlj
ZVdvcmtlcihTZXJ2aWNlV29ya2VySWRlbnRpZmllciBzZXJ2aWNlV29ya2VySWRlbnRpZmllcikK
IHsKICAgICByZW1vdmVBbGxKb2JzTWF0Y2hpbmcoW3NlcnZpY2VXb3JrZXJJZGVudGlmaWVyXShh
dXRvJiBqb2IpIHsKLSAgICAgICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U2Vydmlj
ZVdvcmtlcklkZW50aWZpZXI+KGpvYi5zb3VyY2VDb250ZXh0KSAmJiBXVEY6OmdldDxTZXJ2aWNl
V29ya2VySWRlbnRpZmllcj4oam9iLnNvdXJjZUNvbnRleHQpID09IHNlcnZpY2VXb3JrZXJJZGVu
dGlmaWVyOworICAgICAgICByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxTZXJ2aWNlV29y
a2VySWRlbnRpZmllcj4oam9iLnNvdXJjZUNvbnRleHQpICYmIFdURjo6Z2V0PFNlcnZpY2VXb3Jr
ZXJJZGVudGlmaWVyPihqb2Iuc291cmNlQ29udGV4dCkgPT0gc2VydmljZVdvcmtlcklkZW50aWZp
ZXI7CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNv
cmVBcmd1bWVudENvZGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1l
bnRDb2RlcnMuY3BwCmluZGV4IDRlMTE3MzFmZmMzZmVkODRmMzM3OWY0YjNhYjgxZWI3MzZkZTEz
NWIuLmIyNGNkYzgyOTI5MmViMzUxMjZhYTEwNzcwYWU2M2VhMjhlZmE2ODIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcApAQCAtMTYwMCwxMiAr
MTYwMCwxMiBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8UGFzdGVib2FyZEN1c3RvbURhdGE6OkVudHJ5
Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0CiAgICAgZW5jb2RlciA8PCBkYXRhLnR5
cGUgPDwgZGF0YS5jdXN0b21EYXRhOwogCiAgICAgYXV0byYgcGxhdGZvcm1EYXRhID0gZGF0YS5w
bGF0Zm9ybURhdGE7Ci0gICAgYm9vbCBoYXNTdHJpbmcgPSBXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PFN0cmluZz4ocGxhdGZvcm1EYXRhKTsKKyAgICBib29sIGhhc1N0cmluZyA9IHN0ZDo6aG9sZHNf
YWx0ZXJuYXRpdmU8U3RyaW5nPihwbGF0Zm9ybURhdGEpOwogICAgIGVuY29kZXIgPDwgaGFzU3Ry
aW5nOwogICAgIGlmIChoYXNTdHJpbmcpCiAgICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8U3Ry
aW5nPihwbGF0Zm9ybURhdGEpOwogCi0gICAgYm9vbCBoYXNCdWZmZXIgPSBXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPFJlZjxTaGFyZWRCdWZmZXI+PihwbGF0Zm9ybURhdGEpOworICAgIGJvb2wgaGFz
QnVmZmVyID0gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8U2hhcmVkQnVmZmVyPj4ocGxhdGZv
cm1EYXRhKTsKICAgICBlbmNvZGVyIDw8IGhhc0J1ZmZlcjsKICAgICBpZiAoaGFzQnVmZmVyKQog
ICAgICAgICBlbmNvZGVTaGFyZWRCdWZmZXIoZW5jb2RlciwgV1RGOjpnZXQ8UmVmPFNoYXJlZEJ1
ZmZlcj4+KHBsYXRmb3JtRGF0YSkucHRyKCkpOwpAQCAtMjgwMSw3ICsyODAxLDcgQEAgYm9vbCBB
cmd1bWVudENvZGVyPE1lZGlhQ29uc3RyYWludHM+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
V2ViQ29yZTo6TWVkaWFDb24KIAogdm9pZCBBcmd1bWVudENvZGVyPElEQktleVBhdGg+OjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsKLSAgICBi
b29sIGlzU3RyaW5nID0gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGtleVBhdGgpOwor
ICAgIGJvb2wgaXNTdHJpbmcgPSBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oa2V5UGF0
aCk7CiAgICAgZW5jb2RlciA8PCBpc1N0cmluZzsKICAgICBpZiAoaXNTdHJpbmcpCiAgICAgICAg
IGVuY29kZXIgPDwgV1RGOjpnZXQ8U3RyaW5nPihrZXlQYXRoKTsKQEAgLTI4MzEsNyArMjgzMSw3
IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxJREJLZXlQYXRoPjo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIElEQktleVBhdGgmIGtleVBhdGgpCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogdm9p
ZCBBcmd1bWVudENvZGVyPFNlcnZpY2VXb3JrZXJPckNsaWVudERhdGE+OjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgU2VydmljZVdvcmtlck9yQ2xpZW50RGF0YSYgZGF0YSkKIHsKLSAg
ICBib29sIGlzU2VydmljZVdvcmtlckRhdGEgPSBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFNlcnZp
Y2VXb3JrZXJEYXRhPihkYXRhKTsKKyAgICBib29sIGlzU2VydmljZVdvcmtlckRhdGEgPSBzdGQ6
OmhvbGRzX2FsdGVybmF0aXZlPFNlcnZpY2VXb3JrZXJEYXRhPihkYXRhKTsKICAgICBlbmNvZGVy
IDw8IGlzU2VydmljZVdvcmtlckRhdGE7CiAgICAgaWYgKGlzU2VydmljZVdvcmtlckRhdGEpCiAg
ICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8U2VydmljZVdvcmtlckRhdGE+KGRhdGEpOwpAQCAt
Mjg2NCw3ICsyODY0LDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPFNlcnZpY2VXb3JrZXJPckNsaWVu
dERhdGE+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU2VydmljZVcKIAogdm9pZCBBcmd1bWVu
dENvZGVyPFNlcnZpY2VXb3JrZXJPckNsaWVudElkZW50aWZpZXI+OjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlciwgY29uc3QgU2VydmljZVdvcmtlck9yQ2xpZW50SWRlbnRpZmllciYgaWRlbnRpZmll
cikKIHsKLSAgICBib29sIGlzU2VydmljZVdvcmtlcklkZW50aWZpZXIgPSBXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPFNlcnZpY2VXb3JrZXJJZGVudGlmaWVyPihpZGVudGlmaWVyKTsKKyAgICBib29s
IGlzU2VydmljZVdvcmtlcklkZW50aWZpZXIgPSBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFNlcnZp
Y2VXb3JrZXJJZGVudGlmaWVyPihpZGVudGlmaWVyKTsKICAgICBlbmNvZGVyIDw8IGlzU2Vydmlj
ZVdvcmtlcklkZW50aWZpZXI7CiAgICAgaWYgKGlzU2VydmljZVdvcmtlcklkZW50aWZpZXIpCiAg
ICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8U2VydmljZVdvcmtlcklkZW50aWZpZXI+KGlkZW50
aWZpZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNT
dG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmNwcApp
bmRleCA5ZDZmZDE5ZWVhN2Q2MDYyM2IyYTQ2MGMxYzliNzJhZmI4NDg2ODZlLi43OGZmNzMyMDkx
ZTVlMzU2ZTQyMjlhNTMzZjQ5YTE4MzUyZWQ1NjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmNwcApAQCAtODAsMTYgKzgwLDE2IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIE1hcHBlZFR5cGU+CiBzdGF0aWMgTWFwcGVkVHlwZSB2YWx1ZUZvcktleShjb25zdCBX
ZWJQcmVmZXJlbmNlc1N0b3JlOjpWYWx1ZU1hcCYgdmFsdWVzLCBjb25zdCBXZWJQcmVmZXJlbmNl
c1N0b3JlOjpWYWx1ZU1hcCYgb3ZlcnJpZGRlbkRlZmF1bHRzLCBjb25zdCBTdHJpbmcmIGtleSkK
IHsKICAgICBhdXRvIHZhbHVlc0l0ID0gdmFsdWVzLmZpbmQoa2V5KTsKLSAgICBpZiAodmFsdWVz
SXQgIT0gdmFsdWVzLmVuZCgpICYmIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8TWFwcGVkVHlwZT4o
dmFsdWVzSXQtPnZhbHVlKSkKKyAgICBpZiAodmFsdWVzSXQgIT0gdmFsdWVzLmVuZCgpICYmIHN0
ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8TWFwcGVkVHlwZT4odmFsdWVzSXQtPnZhbHVlKSkKICAgICAg
ICAgcmV0dXJuIFdURjo6Z2V0PE1hcHBlZFR5cGU+KHZhbHVlc0l0LT52YWx1ZSk7CiAKICAgICBh
dXRvIG92ZXJyaWRkZW5EZWZhdWx0c0l0ID0gb3ZlcnJpZGRlbkRlZmF1bHRzLmZpbmQoa2V5KTsK
LSAgICBpZiAob3ZlcnJpZGRlbkRlZmF1bHRzSXQgIT0gb3ZlcnJpZGRlbkRlZmF1bHRzLmVuZCgp
ICYmIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8TWFwcGVkVHlwZT4ob3ZlcnJpZGRlbkRlZmF1bHRz
SXQtPnZhbHVlKSkKKyAgICBpZiAob3ZlcnJpZGRlbkRlZmF1bHRzSXQgIT0gb3ZlcnJpZGRlbkRl
ZmF1bHRzLmVuZCgpICYmIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8TWFwcGVkVHlwZT4ob3ZlcnJp
ZGRlbkRlZmF1bHRzSXQtPnZhbHVlKSkKICAgICAgICAgcmV0dXJuIFdURjo6Z2V0PE1hcHBlZFR5
cGU+KG92ZXJyaWRkZW5EZWZhdWx0c0l0LT52YWx1ZSk7CiAKICAgICBhdXRvJiBkZWZhdWx0c01h
cCA9IFdlYlByZWZlcmVuY2VzU3RvcmU6OmRlZmF1bHRzKCk7CiAgICAgYXV0byBkZWZhdWx0c0l0
ID0gZGVmYXVsdHNNYXAuZmluZChrZXkpOwotICAgIGlmIChkZWZhdWx0c0l0ICE9IGRlZmF1bHRz
TWFwLmVuZCgpICYmIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8TWFwcGVkVHlwZT4oZGVmYXVsdHNJ
dC0+dmFsdWUpKQorICAgIGlmIChkZWZhdWx0c0l0ICE9IGRlZmF1bHRzTWFwLmVuZCgpICYmIHN0
ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8TWFwcGVkVHlwZT4oZGVmYXVsdHNJdC0+dmFsdWUpKQogICAg
ICAgICByZXR1cm4gV1RGOjpnZXQ8TWFwcGVkVHlwZT4oZGVmYXVsdHNJdC0+dmFsdWUpOwogCiAg
ICAgcmV0dXJuIE1hcHBlZFR5cGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1Byb2Nlc3NUaHJvdHRsZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUHJvY2Vz
c1Rocm90dGxlci5jcHAKaW5kZXggNzJjZTllZjc2MmQ5OTdjNmE3OGQxYzU0OWJkOGRiZTUxY2Ni
MmQ2OS4uNmUyMDU3Y2UwMGJmMzE0ZjZhZDZjMTE5MTlmYWU5NWRiMjkwYjhkNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUHJvY2Vzc1Rocm90dGxlci5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvUHJvY2Vzc1Rocm90dGxlci5jcHAKQEAgLTI0NSwxNCArMjQ1
LDE0IEBAIHZvaWQgUHJvY2Vzc1Rocm90dGxlcjo6YXNzZXJ0aW9uV2FzSW52YWxpZGF0ZWQoKQog
CiBib29sIFByb2Nlc3NUaHJvdHRsZXI6OmlzVmFsaWRCYWNrZ3JvdW5kQWN0aXZpdHkoY29uc3Qg
UHJvY2Vzc1Rocm90dGxlcjo6QWN0aXZpdHlWYXJpYW50JiBhY3Rpdml0eSkKIHsKLSAgICBpZiAo
IVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VW5pcXVlUmVmPFByb2Nlc3NUaHJvdHRsZXI6OkJhY2tn
cm91bmRBY3Rpdml0eT4+KGFjdGl2aXR5KSkKKyAgICBpZiAoIXN0ZDo6aG9sZHNfYWx0ZXJuYXRp
dmU8VW5pcXVlUmVmPFByb2Nlc3NUaHJvdHRsZXI6OkJhY2tncm91bmRBY3Rpdml0eT4+KGFjdGl2
aXR5KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBXVEY6OmdldDxVbmlxdWVS
ZWY8UHJvY2Vzc1Rocm90dGxlcjo6QmFja2dyb3VuZEFjdGl2aXR5Pj4oYWN0aXZpdHkpLT5pc1Zh
bGlkKCk7CiB9CiAKIGJvb2wgUHJvY2Vzc1Rocm90dGxlcjo6aXNWYWxpZEZvcmVncm91bmRBY3Rp
dml0eShjb25zdCBQcm9jZXNzVGhyb3R0bGVyOjpBY3Rpdml0eVZhcmlhbnQmIGFjdGl2aXR5KQog
ewotICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxVbmlxdWVSZWY8UHJvY2Vzc1Rocm90
dGxlcjo6Rm9yZWdyb3VuZEFjdGl2aXR5Pj4oYWN0aXZpdHkpKQorICAgIGlmICghc3RkOjpob2xk
c19hbHRlcm5hdGl2ZTxVbmlxdWVSZWY8UHJvY2Vzc1Rocm90dGxlcjo6Rm9yZWdyb3VuZEFjdGl2
aXR5Pj4oYWN0aXZpdHkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIFdURjo6
Z2V0PFVuaXF1ZVJlZjxQcm9jZXNzVGhyb3R0bGVyOjpGb3JlZ3JvdW5kQWN0aXZpdHk+PihhY3Rp
dml0eSktPmlzVmFsaWQoKTsKIH0KQEAgLTI4MCw3ICsyODAsNyBAQCB2b2lkIFByb2Nlc3NUaHJv
dHRsZXI6OlRpbWVkQWN0aXZpdHk6OmFjdGl2aXR5VGltZWRPdXQoKQogCiB2b2lkIFByb2Nlc3NU
aHJvdHRsZXI6OlRpbWVkQWN0aXZpdHk6OnVwZGF0ZVRpbWVyKCkKIHsKLSAgICBpZiAoV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxzdGQ6Om51bGxwdHJfdD4obV9hY3Rpdml0eSkpCisgICAgaWYgKHN0
ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8c3RkOjpudWxscHRyX3Q+KG1fYWN0aXZpdHkpKQogICAgICAg
ICBtX3RpbWVyLnN0b3AoKTsKICAgICBlbHNlCiAgICAgICAgIG1fdGltZXIuc3RhcnRPbmVTaG90
KG1fdGltZW91dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRo
ZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkF1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0b3IuY3BwCmluZGV4IGZjNjdmNzdjNmQyZGM3OTU3
NzFhMDBkZTRkOTkxZjk2ZTk4MjkwZGMuLjNiNzg3OWYwMjliYWVmZWYxZGQxMzQ3NWI1ZmE5YWZi
ZGRmZGIyNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRp
Y2F0aW9uL0F1dGhlbnRpY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkF1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0b3IuY3BwCkBAIC0zOSw3ICszOSw3IEBAIHZvaWQg
QXV0aGVudGljYXRvcjo6aGFuZGxlUmVxdWVzdChjb25zdCBXZWJBdXRoZW50aWNhdGlvblJlcXVl
c3REYXRhJiBkYXRhKQogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbd2Vha1RoaXMgPSBt
YWtlV2Vha1B0cigqdGhpcyksIHRoaXNdIHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8V2ViQ29y
ZTo6UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucz4obV9wZW5kaW5nUmVxdWVzdERh
dGEub3B0aW9ucykpCisgICAgICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFdlYkNvcmU6
OlB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM+KG1fcGVuZGluZ1JlcXVlc3REYXRh
Lm9wdGlvbnMpKQogICAgICAgICAgICAgbWFrZUNyZWRlbnRpYWwoKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgZ2V0QXNzZXJ0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yTWFuYWdlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdG9yTWFuYWdl
ci5jcHAKaW5kZXggYjk0OGVmYjBlZmU4ZGVhYWQzZGY0YTViMTNkOTdkYWM2YWVkMzlmYi4uNGY3
YWI2NDI5MGM4NzFlZTliZTAxYmM0ODllZTQxMzc5N2Q0ZTc1MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRvck1hbmFnZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL0F1dGhl
bnRpY2F0b3JNYW5hZ2VyLmNwcApAQCAtMTQ5LDE0ICsxNDksMTQgQEAgc3RhdGljIHZvaWQgcHJv
Y2Vzc0dvb2dsZUxlZ2FjeUFwcElkU3VwcG9ydEV4dGVuc2lvbihjb25zdCBzdGQ6Om9wdGlvbmFs
PEF1dGhlbnQKIAogc3RhdGljIFN0cmluZyBnZXRScElkKGNvbnN0IFZhcmlhbnQ8UHVibGljS2V5
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucywgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRp
b25zPiYgb3B0aW9ucykKIHsKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxQdWJsaWNL
ZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zPihvcHRpb25zKSkKKyAgICBpZiAoc3RkOjpob2xk
c19hbHRlcm5hdGl2ZTxQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zPihvcHRpb25z
KSkKICAgICAgICAgcmV0dXJuIFdURjo6Z2V0PFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnM+KG9wdGlvbnMpLnJwLmlkOwogICAgIHJldHVybiBXVEY6OmdldDxQdWJsaWNLZXlDcmVk
ZW50aWFsUmVxdWVzdE9wdGlvbnM+KG9wdGlvbnMpLnJwSWQ7CiB9CiAKIHN0YXRpYyBTdHJpbmcg
Z2V0VXNlck5hbWUoY29uc3QgVmFyaWFudDxQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRp
b25zLCBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM+JiBvcHRpb25zKQogewotICAg
IGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnM+KG9wdGlvbnMpKQorICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFB1YmxpY0tl
eUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM+KG9wdGlvbnMpKQogICAgICAgICByZXR1cm4gV1RG
OjpnZXQ8UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucz4ob3B0aW9ucykudXNlci5u
YW1lOwogICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogfQpAQCAtMjg1LDcgKzI4NSw3IEBAIHZv
aWQgQXV0aGVudGljYXRvck1hbmFnZXI6OnJlc3BvbmRSZWNlaXZlZChSZXNwb25kJiYgcmVzcG9u
ZCkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChtX3BlbmRpbmdDb21wbGV0aW9uSGFuZGxl
cik7CiAKLSAgICBhdXRvIHNob3VsZENvbXBsZXRlID0gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxS
ZWY8QXV0aGVudGljYXRvclJlc3BvbnNlPj4ocmVzcG9uZCk7CisgICAgYXV0byBzaG91bGRDb21w
bGV0ZSA9IHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPEF1dGhlbnRpY2F0b3JSZXNwb25zZT4+
KHJlc3BvbmQpOwogICAgIGlmICghc2hvdWxkQ29tcGxldGUpCiAgICAgICAgIHNob3VsZENvbXBs
ZXRlID0gV1RGOjpnZXQ8RXhjZXB0aW9uRGF0YT4ocmVzcG9uZCkuY29kZSA9PSBJbnZhbGlkU3Rh
dGVFcnJvcjsKICAgICBpZiAoc2hvdWxkQ29tcGxldGUpIHsKQEAgLTQ5OCw3ICs0OTgsNyBAQCB2
b2lkIEF1dGhlbnRpY2F0b3JNYW5hZ2VyOjpydW5QcmVzZW50ZXJJbnRlcm5hbChjb25zdCBUcmFu
c3BvcnRTZXQmIHRyYW5zcG9ydHMpCiAKIHZvaWQgQXV0aGVudGljYXRvck1hbmFnZXI6Omludm9r
ZVBlbmRpbmdDb21wbGV0aW9uSGFuZGxlcihSZXNwb25kJiYgcmVzcG9uZCkKIHsKLSAgICBhdXRv
IHJlc3VsdCA9IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPEF1dGhlbnRpY2F0b3JSZXNwb25z
ZT4+KHJlc3BvbmQpID8gV2ViQXV0aGVudGljYXRpb25SZXN1bHQ6OlN1Y2NlZWRlZCA6IFdlYkF1
dGhlbnRpY2F0aW9uUmVzdWx0OjpGYWlsZWQ7CisgICAgYXV0byByZXN1bHQgPSBzdGQ6OmhvbGRz
X2FsdGVybmF0aXZlPFJlZjxBdXRoZW50aWNhdG9yUmVzcG9uc2U+PihyZXNwb25kKSA/IFdlYkF1
dGhlbnRpY2F0aW9uUmVzdWx0OjpTdWNjZWVkZWQgOiBXZWJBdXRoZW50aWNhdGlvblJlc3VsdDo6
RmFpbGVkOwogCiAgICAgLy8gVGhpcyBpcyBmb3IgdGhlIG5ldyBVSS4KICAgICBpZiAobV9wcmVz
ZW50ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJBdXRoZW50aWNh
dGlvbi9XZWJBdXRoZW50aWNhdGlvblJlcXVlc3REYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEuY3Bw
CmluZGV4IDViMGM2YzJmMTdhMGM2MWU0MDJjMDcwODNhZTU1NzkxMGJiZjQ0YzEuLmZjZDgwZTE5
MTlkNzJiMGEwYzU2YjA5MTUxOTRiYWE5MzUxMGRlNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dlYkF1dGhlbnRpY2F0aW9uUmVxdWVzdERh
dGEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkF1dGhlbnRpY2F0aW9uL1dl
YkF1dGhlbnRpY2F0aW9uUmVxdWVzdERhdGEuY3BwCkBAIC0zNSwxNCArMzUsMTQgQEAgdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKIENsaWVudERhdGFUeXBlIGdldENsaWVudERhdGFUeXBlKGNv
bnN0IFZhcmlhbnQ8UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucywgUHVibGljS2V5
Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zPiYgb3B0aW9ucykKIHsKLSAgICBpZiAoV1RGOjpob2xk
c19hbHRlcm5hdGl2ZTxQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zPihvcHRpb25z
KSkKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxQdWJsaWNLZXlDcmVkZW50aWFsQ3Jl
YXRpb25PcHRpb25zPihvcHRpb25zKSkKICAgICAgICAgcmV0dXJuIENsaWVudERhdGFUeXBlOjpD
cmVhdGU7CiAgICAgcmV0dXJuIENsaWVudERhdGFUeXBlOjpHZXQ7CiB9CiAKIFVzZXJWZXJpZmlj
YXRpb25SZXF1aXJlbWVudCBnZXRVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQoY29uc3QgVmFy
aWFudDxQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLCBQdWJsaWNLZXlDcmVkZW50
aWFsUmVxdWVzdE9wdGlvbnM+JiBvcHRpb25zKQogewotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM+KG9wdGlvbnMpKSB7Cisg
ICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9u
T3B0aW9ucz4ob3B0aW9ucykpIHsKICAgICAgICAgaWYgKGF1dG8gYXV0aGVudGljYXRvclNlbGVj
dGlvbiA9IFdURjo6Z2V0PFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnM+KG9wdGlv
bnMpLmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24pCiAgICAgICAgICAgICByZXR1cm4gYXV0aGVudGlj
YXRvclNlbGVjdGlvbi0+dXNlclZlcmlmaWNhdGlvbjsKICAgICAgICAgcmV0dXJuIFVzZXJWZXJp
ZmljYXRpb25SZXF1aXJlbWVudDo6UHJlZmVycmVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tl
bmQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZl
clNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwCmluZGV4IDQ0ODg2YWU5NTk5NmRmOTQwNDIzNzQ3
YzNlMGM2MTljNDhhNzU2ZDMuLmIxNmE1ZDdjMGUyYWQ5OTEyZTgxMWNjYmY4Yzc5NWQ0Mjk5YWE3
ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1h
Z2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5j
cHAKQEAgLTk4LDcgKzk4LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxl
Qml0bWFwQmFja2VuZD4gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWMKIAogc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZD4gSW1hZ2VCdWZmZXJTaGFy
ZWFibGVCaXRtYXBCYWNrZW5kOjpjcmVhdGUoY29uc3QgUGFyYW1ldGVycyYgcGFyYW1ldGVycywg
SW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGhhbmRsZSkKIHsKLSAgICBpZiAoIVdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8U2hhcmVhYmxlQml0bWFwOjpIYW5kbGU+KGhhbmRsZSkpIHsKKyAgICBpZiAo
IXN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8U2hhcmVhYmxlQml0bWFwOjpIYW5kbGU+KGhhbmRsZSkp
IHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFi
bGVJT1N1cmZhY2VCYWNrZW5kLmNwcAppbmRleCA2MGU4OWUxNDYwOWRmY2UwZGYxZGFkMzY4NWRh
ZmQ4NDg4NTJjMjM1Li42ZDMzOTUzMDZhMTY4ZmI1MWMxY2VjZmEyZWIyZDMzMDA4OWQ2MWZlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0lt
YWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3Vy
ZmFjZUJhY2tlbmQuY3BwCkBAIC01NSw3ICs1NSw3IEBAIHNpemVfdCBJbWFnZUJ1ZmZlclNoYXJl
YWJsZUlPU3VyZmFjZUJhY2tlbmQ6OmNhbGN1bGF0ZUV4dGVybmFsTWVtb3J5Q29zdChjb25zdCBQ
CiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ+
IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IFBhcmFt
ZXRlcnMmIHBhcmFtZXRlcnMsIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUpCiB7Ci0g
ICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPE1hY2hTZW5kUmlnaHQ+KGhhbmRsZSkpIHsK
KyAgICBpZiAoIXN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8TWFjaFNlbmRSaWdodD4oaGFuZGxlKSkg
ewogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlTWFwcGVkSU9TdXJmYWNlQmFja2Vu
ZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdl
QnVmZmVyU2hhcmVhYmxlTWFwcGVkSU9TdXJmYWNlQmFja2VuZC5jcHAKaW5kZXggNzU3MmUwN2U0
NGE5N2Q0NmI5MDJjMWVhNjc0YmMyNWY3OGVjNjg1My4uMTAwZDY0YjVmOTcyODA4YTAxN2RlYjNj
YjM3OTJiYjZlMjVkOGVmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZU1hcHBlZElPU3VyZmFjZUJhY2tl
bmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2Ev
SW1hZ2VCdWZmZXJTaGFyZWFibGVNYXBwZWRJT1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtNjAsNyAr
NjAsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVNYXBwZWRJT1N1cmZh
Y2VCYWNrZW5kPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZQogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXJTaGFyZWFibGVNYXBwZWRJT1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlclNoYXJlYWJs
ZU1hcHBlZElPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBQYXJhbWV0ZXJzJiBwYXJhbWV0
ZXJzLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFuZGxlKQogewotICAgIGlmICghV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxNYWNoU2VuZFJpZ2h0PihoYW5kbGUpKSB7CisgICAgaWYgKCFzdGQ6
OmhvbGRzX2FsdGVybmF0aXZlPE1hY2hTZW5kUmlnaHQ+KGhhbmRsZSkpIHsKICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9TdG9yYWdlL1dlYlNlcnZpY2VXb3JrZXJG
ZXRjaFRhc2tDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1N0b3JhZ2UvV2Vi
U2VydmljZVdvcmtlckZldGNoVGFza0NsaWVudC5jcHAKaW5kZXggZjk1OGZlNmQ0YjIwZjI0YzQ4
MmIzNTY2NjE2ZDllMjU2MzY4ZTk2Ny4uYzllMmNjZjcwOWZhZjNiNDNhZTNjZTU5ZjMxYjJlNDEy
ODZhZTc5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1N0b3JhZ2UvV2Vi
U2VydmljZVdvcmtlckZldGNoVGFza0NsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1N0b3JhZ2UvV2ViU2VydmljZVdvcmtlckZldGNoVGFza0NsaWVudC5jcHAKQEAgLTc3
LDcgKzc3LDcgQEAgdm9pZCBXZWJTZXJ2aWNlV29ya2VyRmV0Y2hUYXNrQ2xpZW50OjpkaWRSZWNl
aXZlRGF0YShSZWY8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKG1fd2FpdGluZ0ZvckNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlTWVzc2FnZSkgewot
ICAgICAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPFNoYXJlZEJ1ZmZlcj4+KG1f
cmVzcG9uc2VEYXRhKSkKKyAgICAgICAgaWYgKCFzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxT
aGFyZWRCdWZmZXI+PihtX3Jlc3BvbnNlRGF0YSkpCiAgICAgICAgICAgICBtX3Jlc3BvbnNlRGF0
YSA9IGJ1ZmZlci0+Y29weSgpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBXVEY6OmdldDxS
ZWY8U2hhcmVkQnVmZmVyPj4obV9yZXNwb25zZURhdGEpLT5hcHBlbmQoV1RGTW92ZShidWZmZXIp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1Rl
eHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5tbQppbmRleCBjMGY4N2U1
NGVhYTgxOWYzYjNhMTdmMTdhYjg1NWU5MTRjNThhNmY4Li42NjRlOTgxNTI4NzQ3YWMzYzFhZjM0
YTM0MTNjZTdlOWVhMTNlNDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHkubW0KKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJvbGxlclBy
b3h5Lm1tCkBAIC0xNTcsNyArMTU3LDcgQEAgdm9pZCBUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJv
eHk6OnJlbW92ZUFubm90YXRpb25SZWxhdGl2ZVRvU2VsZWN0aW9uKGNvbnN0IFN0cmkKICAgICBh
dXRvIHR5cGVzID0gcmVtb3ZlQ29yZVNwZWxsaW5nTWFya2VycyA/IHJlbGV2YW50TWFya2VyVHlw
ZXMoKSA6IFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2luZzsKICAg
ICBSZWZQdHIgZG9jdW1lbnQgPSBDaGVja2VkUmVmKG1fcGFnZS5jb3JlUGFnZSgpLT5mb2N1c0Nv
bnRyb2xsZXIoKSktPmZvY3VzZWRPck1haW5GcmFtZSgpLmRvY3VtZW50KCk7CiAgICAgZG9jdW1l
bnQtPm1hcmtlcnMoKS5maWx0ZXJNYXJrZXJzKHJhbmdlQW5kT2Zmc2V0LT5yYW5nZSwgWyZdIChj
b25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyKSB7Ci0gICAgICAgIGlmICghV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmdE
YXRhPihtYXJrZXIuZGF0YSgpKSkKKyAgICAgICAgaWYgKCFzdGQ6OmhvbGRzX2FsdGVybmF0aXZl
PFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2luZ0RhdGE+KG1hcmtl
ci5kYXRhKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gV1RG
OjpnZXQ8V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4dENoZWNraW5nRGF0YT4o
bWFya2VyLmRhdGEoKSkua2V5ICE9IGFubm90YXRpb247CiAgICAgfSwgdHlwZXMpOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGM2NTMyMzc2Mzdh
ZGE1MGJhN2Q3YjdlNmFlZGU5ZTE1NWY4ZDFlYmMuLjMwOThlYTA4MzhhOGM3ODJlODQ1YmRmNjY4
ZmVjZDIwYzhlNzE5NmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMS0xMC0wMSAgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEJlZ2luIG1pZ3JhdGlvbiBmcm9t
IFdURjo6VmFyaWFudCB0byBzdGQ6OnZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTA4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5j
cHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAyMS0wOS0zMCAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFN0b3AgbWFr
aW5nIGEgZmlsZSBuYW1lZCBudWxsIHdoZW4gcnVubmluZyBBUEkgdGVzdHMKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQuY3BwIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHAKaW5kZXggNTFlY2EwNzY4ZDJjY2UxYzlhMzI5
NTU1MmQzNTAwOWZmNGZkNTZiYi4uNjMxN2FkN2FhNjc4MTY4YjRjNGFiODQ1NjgyODk1OTM2ZmVh
YmY4MCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5j
cHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHAKQEAgLTU4
LDE2ICs1OCwxNiBAQCBURVNUKFdURl9WYXJpYW50LCBCYXNpYykKICAgICBFWFBFQ1RfVFJVRShX
VEY6OmdldDxpbnQ+KHZhcmlhbnQpID09IDEpOwogICAgIEVYUEVDVF9UUlVFKCpXVEY6OmdldF9p
ZjxpbnQ+KHZhcmlhbnQpID09IDEpOwogICAgIEVYUEVDVF9UUlVFKFdURjo6Z2V0X2lmPGRvdWJs
ZT4odmFyaWFudCkgPT0gbnVsbHB0cik7Ci0gICAgRVhQRUNUX1RSVUUoV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxpbnQ+KHZhcmlhbnQpKTsKLSAgICBFWFBFQ1RfRkFMU0UoV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxkb3VibGU+KHZhcmlhbnQpKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmhvbGRzX2Fs
dGVybmF0aXZlPGludD4odmFyaWFudCkpOworICAgIEVYUEVDVF9GQUxTRShzdGQ6OmhvbGRzX2Fs
dGVybmF0aXZlPGRvdWJsZT4odmFyaWFudCkpOwogCiAgICAgdmFyaWFudCA9IDEuMDsKICAgICBF
WFBFQ1RfVFJVRSh2YXJpYW50LmluZGV4KCkgPT0gMSk7CiAgICAgRVhQRUNUX1RSVUUoV1RGOjpn
ZXQ8ZG91YmxlPih2YXJpYW50KSA9PSAxKTsKICAgICBFWFBFQ1RfVFJVRSgqV1RGOjpnZXRfaWY8
ZG91YmxlPih2YXJpYW50KSA9PSAxLjApOwogICAgIEVYUEVDVF9UUlVFKFdURjo6Z2V0X2lmPGlu
dD4odmFyaWFudCkgPT0gbnVsbHB0cik7Ci0gICAgRVhQRUNUX1RSVUUoV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxkb3VibGU+KHZhcmlhbnQpKTsKLSAgICBFWFBFQ1RfRkFMU0UoV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxpbnQ+KHZhcmlhbnQpKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmhvbGRzX2Fs
dGVybmF0aXZlPGRvdWJsZT4odmFyaWFudCkpOworICAgIEVYUEVDVF9GQUxTRShzdGQ6OmhvbGRz
X2FsdGVybmF0aXZlPGludD4odmFyaWFudCkpOwogfQogCiBURVNUKFdURl9WYXJpYW50LCBCYXNp
Y1Zpc2l0b3IpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439916</attachid>
            <date>2021-10-01 15:08:42 -0700</date>
            <delta_ts>2021-10-03 14:54:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231086-20211001150841.patch</filename>
            <type>text/plain</type>
            <size>163607</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzMzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
MWUyNzVhZmMxOWIzYzk5NGEwZGUxMTNkNzNiODc4OGFmYmE5Y2Q0Li42YTRiOGNkOGMzZDc0NzU0
ZjE2YTA3YjE4M2MwZTg2YTdiNmUwMDczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOCBAQAorMjAyMS0xMC0wMSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3
ZWJraXQub3JnPgorCisgICAgICAgIEJlZ2luIG1pZ3JhdGlvbiBmcm9tIFdURjo6VmFyaWFudCB0
byBzdGQ6OnZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzMTA4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHA6Cisg
ICAgICAgIChKU0M6OldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hwb2lu
dCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNhbGxET00pOgorICAgICAgICAqIHBhcnNlci9M
ZXhlci5jcHA6CisgICAgICAgIChKU0M6OkxleGVyPFQ+OjpwYXJzZUhleCk6CisgICAgICAgIChK
U0M6OkxleGVyPFQ+OjpwYXJzZUJpbmFyeSk6CisgICAgICAgIChKU0M6OkxleGVyPFQ+OjpwYXJz
ZU9jdGFsKToKKyAgICAgICAgKEpTQzo6TGV4ZXI8VD46OnBhcnNlRGVjaW1hbCk6CisgICAgICAg
ICogcnVudGltZS9DYWNoZVBheWxvYWQuY3BwOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6
OmRhdGEgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6OnNpemUgY29uc3QpOgor
ICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVVcGRhdGUuY3BwOgorICAgICAgICAoSlNDOjpDYWNoZVVw
ZGF0ZTo6Q2FjaGVVcGRhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxUaW1lWm9uZS5j
cHA6CisgICAgICAgIChKU0M6OlRlbXBvcmFsVGltZVpvbmU6OmNyZWF0ZUZyb21JRCk6CisgICAg
ICAgIChKU0M6OlRlbXBvcmFsVGltZVpvbmU6OmNyZWF0ZUZyb21VVENPZmZzZXQpOgorCiAyMDIx
LTEwLTAxICBYYW4gTMOzcGV6ICA8eGFuQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0pTQ11bMzJi
aXRdIEZpeCBidWlsZCBhZnRlciB1bmxpbmtlZCBiYXNlbGluZSBKSVQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggYzIyYWVmYmVl
MWI3YTkzYmJiOTQxNTc4ODhhZmUyY2FmYTQ0Yjc3Ni4uZmM0YjBiNDgyYWJmM2IzOGQxNGY0MGJh
NWQ4OTIzZTJiZmNjZTQxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NCBAQAorMjAyMS0xMC0wMSAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEJlZ2luIG1p
Z3JhdGlvbiBmcm9tIFdURjo6VmFyaWFudCB0byBzdGQ6OnZhcmlhbnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTA4NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0ZvcndhcmQuaDoKKyAgICAg
ICAgKiB3dGYvSGFzaGVyLmg6CisgICAgICAgIChXVEY6OmFkZCk6CisgICAgICAgICogd3RmL0xp
a2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0Lmg6CisgICAgICAgIChXVEY6Okxpa2VseURlbnNl
VW5zaWduZWRJbnRlZ2VyU2V0OjppdGVyYXRvcjo6b3BlcmF0b3IqIGNvbnN0KToKKyAgICAgICAg
KiB3dGYvVmFyaWFudC5oOgorICAgICAgICAoV1RGOjpnZXQpOgorICAgICAgICAoV1RGOjpzd2l0
Y2hPbik6CisgICAgICAgIChXVEY6OmluX3BsYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
X190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjo9KTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6X192YXJpYW50X3N0b3JhZ2U6Ol9fZ2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6X192YXJpYW50X3N0b3JhZ2U6Ol9fZ2V0X3JyZWYpOiBEZWxldGVk
LgorICAgICAgICAoV1RGOjpfX3ZhcmlhbnRfc3RvcmFnZTo6X19kZXN0cm95KTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6X19zdG9yYWdlX3dyYXBwZXI6Ol9fY29uc3RydWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6X19zdG9yYWdlX3dyYXBwZXI6Ol9fc3RvcmFnZV93cmFwcGVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6X19zdG9yYWdlX3dyYXBwZXI6Ol9fZ2V0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6X19zdG9yYWdlX3dyYXBwZXI6Ol9fZ2V0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6X19zdG9yYWdlX3dyYXBwZXI6Ol9fZGVzdHJveSk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Ol9fc3RvcmFnZV93cmFwcGVyPF9UeXBlOjpfX3N0b3JhZ2Vfd3JhcHBlcik6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fc3RvcmFnZV93cmFwcGVyPF9UeXBlOjpfX2dldCk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fc3RvcmFnZV93cmFwcGVyPF9UeXBlOjpfX2dldCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fdmFyaWFudF9iYXNlOjp+X192YXJpYW50
X2Jhc2UpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX2JhY2t1cF9zdG9yYWdlX29wczo6X19t
b3ZlX2NvbnN0cnVjdF9mdW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19iYWNrdXBfc3Rv
cmFnZV9vcHM6Ol9fZGVzdHJveV9mdW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19iYWNr
dXBfc3RvcmFnZTo6X19iYWNrdXBfc3RvcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9f
YmFja3VwX3N0b3JhZ2U6Ol9fZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fYmFj
a3VwX3N0b3JhZ2U6On5fX2JhY2t1cF9zdG9yYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
VmFyaWFudDw+Ojpzd2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19OT0VYQ0VQVF8pOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpfX3ZhcmlhbnRfYWNjZXNzb3I6OmdldCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OmdldF9pZik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fdmlzaXRv
cl90YWJsZTo6X190cmFtcG9saW5lX2Z1bmMpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjp2aXNp
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fYXJnX3NlbGVjdG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6X192aXNpdF9oZWxwZXIyOjpfX3Zpc2l0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6b3BlcmF0b3I9PSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Om9wZXJhdG9yIT0pOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpvcGVyYXRvcjwpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpvcGVyYXRvcj4pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpvcGVyYXRvcj49KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6b3BlcmF0b3I8PSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9f
aGFzaF92aXNpdG9yOjpvcGVyYXRvcigpKTogRGVsZXRlZC4KKwogMjAyMS0xMC0wMSAgWW91ZW5u
IEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIFB1
c2hFdmVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDRhNTYxNTI4NzljYWQ0ZTM2YTY2Y2YyY2VmZjExYmZhYmIw
NmQxNjkuLjc2ZTQ4MDk0OTU3NTcxOTFmNjU5ZWFiNTBhZjkzZmU2N2VlNWU0ZjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMjQgQEAKKzIwMjEtMTAtMDEgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hy
aXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBCZWdpbiBtaWdyYXRpb24gZnJvbSBXVEY6
OlZhcmlhbnQgdG8gc3RkOjp2YXJpYW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMzEwODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIE1vZHVsZXMvY2FjaGUvRE9NQ2FjaGVFbmdpbmUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6Omlzb2xhdGVkUmVzcG9uc2VCb2R5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpjb3B5UmVzcG9uc2VCb2R5KToKKyAgICAg
ICAgKiBNb2R1bGVzL2ZldGNoL0ZldGNoQm9keU93bmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZldGNoQm9keU93bmVyOjpsb2FkaW5nRXhjZXB0aW9uIGNvbnN0KToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzSURCS2V5
UGF0aFZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6Omlzb2xhdGVkQ29weSk6CisgICAgICAgIChX
ZWJDb3JlOjpsb2dnaW5nU3RyaW5nKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJS
ZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNvdXJjZU9iamVjdFN0
b3JlSWRlbnRpZmllciBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L0lEQlNlcmlhbGl6YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplSURCS2V5
UGF0aCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0OjpkaXNwbGF5TmFtZUZv
clRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0OjpzaG93TWVkaWFD
b250cm9sc0NvbnRleHRNZW51KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Bl
ZXJDb25uZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJUQ1BlZXJDb25uZWN0aW9uOjph
ZGRJY2VDYW5kaWRhdGUpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRwVHJh
bnNmb3JtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJUQ1J0cFRyYW5zZm9ybTo6aXNBdHRhY2hl
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBNb2R1
bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENSdHBTZW5kZXJCYWNrZW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkxpYldlYlJUQ1J0cFNlbmRlckJhY2tlbmQ6OnZpZGVvU291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkxpYldlYlJUQ1J0cFNlbmRlckJhY2tlbmQ6Omhhc1NvdXJj
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBNb2R1bGVzL3dlYnhyL1dlYlhSRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
WFJGcmFtZTo6Z2V0Vmlld2VyUG9zZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pc29sYXRl
ZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVk
T2JqZWN0OjppbnRQb2ludEF0dHJpYnV0ZVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFYSXNvbGF0ZWRPYmplY3Q6Om9iamVjdEF0dHJpYnV0ZVZhbHVlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6OnJlY3RBdHRyaWJ1dGVWYWx1ZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkT2JqZWN0Ojp2ZWN0b3JBdHRyaWJ1dGVWYWx1ZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkT2JqZWN0OjpvcHRpb25TZXRBdHRy
aWJ1dGVWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkT2JqZWN0Ojpw
YWlyQXR0cmlidXRlVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZE9i
amVjdDo6dWludDY0QXR0cmlidXRlVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QVhJ
c29sYXRlZE9iamVjdDo6dXJsQXR0cmlidXRlVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6QVhJc29sYXRlZE9iamVjdDo6cGF0aEF0dHJpYnV0ZVZhbHVlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6OmNvbG9yQXR0cmlidXRlVmFsdWUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZE9iamVjdDo6ZmxvYXRBdHRyaWJ1dGVWYWx1ZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkT2JqZWN0Ojpkb3VibGVBdHRyaWJ1
dGVWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkT2JqZWN0Ojp1bnNp
Z25lZEF0dHJpYnV0ZVZhbHVlIGNvbnN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9CdWZmZXJT
b3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJ1ZmZlclNvdXJjZTo6ZGF0YSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCdWZmZXJTb3VyY2U6Omxlbmd0aCBjb25zdCk6CisgICAgICAgICog
YmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVLZXlQYXRoQXJyYXkpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydFVu
aW9uLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0V2ViR0wuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y29udmVydFRvSlNWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6Om1ldGhvZERldGFpbHMgY29uc3QpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTVmFsdWVJbldyYXBwZWRPYmplY3QuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTVmFsdWVJbldyYXBwZWRPYmplY3Q6Om9wZXJhdG9yIEpTQzo6SlNWYWx1ZSBjb25zdCk6
CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpjb25zdW1lRm9udFdlaWdodCk6CisgICAgICAgICogY3NzL3R5cGVkb20vQ1NTVW5w
YXJzZWRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NVbnBhcnNlZFZhbHVlOjpzZXJp
YWxpemUgY29uc3QpOgorICAgICAgICAqIGRvbS9FdmVudFRhcmdldC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudFRhcmdldDo6YWRkRXZlbnRMaXN0ZW5lckZvckJpbmRpbmdzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjpyZW1vdmVFdmVudExpc3RlbmVyRm9yQmluZGluZ3Mp
OgorICAgICAgICAqIGRvbS9NZXNzYWdlRXZlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVz
c2FnZUV2ZW50OjptZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyk6
CisgICAgICAgICogZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6RXhjbHVzaW9uUnVsZTo6
bWF0Y2ggY29uc3QpOgorICAgICAgICAqIGh0bWwvVVJMU2VhcmNoUGFyYW1zLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlVSTFNlYXJjaFBhcmFtczo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyU3ViRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRUZXhJbWFnZVNvdXJjZVNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2VTb3Vy
Y2VIZWxwZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzOjpjYW52YXNDb250ZXh0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhczo6Y2FudmFzRWxlbWVudCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXM6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzOjpidWlsZE9iamVjdEZv
ckNhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXM6OmluZGV4Rm9yRGF0
YSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclByb2dyYW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbTo6cHJvZ3JhbSBjb25zdCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3I6OmtleVBhdGhGcm9tSURCS2V5UGF0aCk6CisgICAg
ICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2hh
cmVkQnVmZmVyOjpEYXRhU2VnbWVudDo6c2l6ZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Y2YvU2hhcmVkQnVmZmVyQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpj
cmVhdGVDRkRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpoaW50
TWVtb3J5Tm90TmVlZGVkU29vbiBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhc2NhZGVGb250cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWFsaXplTmV4dEZhbGxi
YWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RJdGVtQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpzYWZlQ29w
eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbVR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OnBhZGRlZFNpemVP
ZlR5cGVBbmRJdGVtSW5CeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6ZGlz
cGxheUxpc3RJdGVtVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFEZXZp
Y2UuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYURldmljZTo6ZW5jb2RlIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvcm1EYXRhOjppbWFnZU9yTWVkaWFGaWxlc0NvdW50IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZvcm1EYXRhRWxlbWVudDo6bGVuZ3RoSW5CeXRlcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGb3JtRGF0YUVsZW1lbnQ6Omlzb2xhdGVkQ29weSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0
YTo6ZmxhdHRlbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6cHJlcGFyZUZv
clVwbG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXNCbG9iVVJMIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmg6CisgICAgICAgIChXZWJDb3Jl
OjpGb3JtRGF0YUVsZW1lbnQ6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvY2YvRm9ybURhdGFTdHJlYW1DRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjph
ZHZhbmNlQ3VycmVudFN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRIVFRQQm9keSk6Cisg
ICAgICAgICogc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6cmVzb2x2ZUZvckZvbnRSYXcpOgorCiAyMDIxLTEwLTAxICBBbGFuIEJ1anRh
cyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNdIEFkZCBhIGRlZGljYXRl
ZCBmdW5jdGlvbiB0byBzZXQgdGhlIGxpbmUgYnJlYWsgYm94J3MgdmVydGljYWwgZ2VvbWV0cnkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggOWRiYzA0ZjMyYjk2YTVhYWEzNDY3MmU4ZTY3NzY5MWI4OTRiNTU3Ny4uMTcz
OTE5MzY4ZGE2NGE0NWU0NjVhNzViM2NmYmI3ZGM0YjgzMDBjMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyOCBAQAorMjAyMS0xMC0wMSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJr
aXQub3JnPgorCisgICAgICAgIEJlZ2luIG1pZ3JhdGlvbiBmcm9tIFdURjo6VmFyaWFudCB0byBz
dGQ6OnZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzMTA4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVzb2x2ZUJs
b2JSZWZlcmVuY2VzKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VM
b2FkUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRQ
YXJhbWV0ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Bcmd1bWVu
dENvZGVycy5oOgorICAgICAgICAoSVBDOjpWYXJpYW50Q29kZXI6OmVuY29kZSk6CisgICAgICAg
IChJUEM6OlZhcmlhbnRDb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRm9y
bURhdGFSZWZlcmVuY2UuaDoKKyAgICAgICAgKElQQzo6Rm9ybURhdGFSZWZlcmVuY2U6OmVuY29k
ZSBjb25zdCk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL01lc3NhZ2VSZWNlaXZlUXVldWVNYXAu
Y3BwOgorICAgICAgICAoSVBDOjpNZXNzYWdlUmVjZWl2ZVF1ZXVlTWFwOjpnZXQgY29uc3QpOgor
ICAgICAgICAqIFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVDdXJzb3Iu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpNZWRpYVNhbXBsZUN1cnNvcjo6bG9jYXRlSXRlcmF0b3Ig
Y29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5l
bC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1NpbXVsYXRlZElucHV0RGlzcGF0
Y2hlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93c2luZ1dhcm5pbmcu
aDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5Lmg6CisKIDIwMjEtMTAtMDEgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+
CiAKICAgICAgICAgUHJvdGVjdCBXZWJGcmFtZSBkdXJpbmcgaW52YWxpZGF0ZVBvbGljeUxpc3Rl
bmVyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAppbmRleCA0Njc4NDZjODU0
NDgwOWMwMWM0ODY4NTM4MjlhOWIwN2U4YzUxNGQ0Li5iYWExYzBlYWFkMmYxM2JjYWFjOTE3NjNm
ZGY5NDNiODI4MzM1ZmFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwCkBA
IC02NSw5ICs2NSw5IEBAIGlubGluZSBib29sIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5m
bzo6aXNWYWxpZCgpIGNvbnN0CiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86Ok5vZGUm
IFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hwb2ludChjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQogewogICAgIGlmICgha2V5IHx8IGtleS5jb25kaXRp
b24oKS5raW5kKCkgIT0gUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlKQotICAgICAgICBy
ZXR1cm4gKm1fd2F0Y2hwb2ludHMuYWRkKFdURjo6aW5fcGxhY2U8U3RydWN0dXJlVHJhbnNpdGlv
blN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+LCBrZXksICp0aGlzKTsKKyAgICAgICAg
cmV0dXJuICptX3dhdGNocG9pbnRzLmFkZChzdGQ6OmluX3BsYWNlX3R5cGU8U3RydWN0dXJlVHJh
bnNpdGlvblN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+LCBrZXksICp0aGlzKTsKICAg
ICBBU1NFUlQoa2V5LmNvbmRpdGlvbigpLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1
aXZhbGVuY2UpOwotICAgIHJldHVybiAqbV93YXRjaHBvaW50cy5hZGQoV1RGOjppbl9wbGFjZTxB
ZGFwdGl2ZVZhbHVlU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4sIGtleSwgKnRoaXMp
OworICAgIHJldHVybiAqbV93YXRjaHBvaW50cy5hZGQoc3RkOjppbl9wbGFjZV90eXBlPEFkYXB0
aXZlVmFsdWVTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50Piwga2V5LCAqdGhpcyk7CiB9
CiAKIHZvaWQgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VB
bmRJbnN0YWxsV2F0Y2hwb2ludCgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggYjRjOGY4NjBiNTE0ZTZkNzlkZjAxYWM3ZjI5NmZjMDgx
ZGU3YTFmNi4uYjVhYjIyNzAzNmRkN2ZjMjgwNjgwY2FhZDkzMDlhZThmNzc0ODY2YSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKQEAgLTEw
NTQ4LDEzICsxMDU0OCwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2FsbERPTShO
b2RlKiBub2RlKQogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZlIGEgd2F5IHRvIGNhbGwg
ZnVuY3Rpb25zIHdpdGggdGhlIHZlY3RvciBvZiByZWdpc3RlcnMuCiAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzA5OQotICAgIFZlY3RvcjxWYXJpYW50
PFNwZWN1bGF0ZUNlbGxPcGVyYW5kLCBTcGVjdWxhdGVJbnQzMk9wZXJhbmQsIFNwZWN1bGF0ZUJv
b2xlYW5PcGVyYW5kPiwgSlNDX0RPTUpJVF9TSUdOQVRVUkVfTUFYX0FSR1VNRU5UU19JTkNMVURJ
TkdfVEhJUz4gb3BlcmFuZHM7CisgICAgdXNpbmcgT3BlcmFuZFZhcmlhbnQgPSBWYXJpYW50PFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kLCBTcGVjdWxhdGVJbnQzMk9wZXJhbmQsIFNwZWN1bGF0ZUJvb2xl
YW5PcGVyYW5kPjsKKyAgICBWZWN0b3I8T3BlcmFuZFZhcmlhbnQsIEpTQ19ET01KSVRfU0lHTkFU
VVJFX01BWF9BUkdVTUVOVFNfSU5DTFVESU5HX1RISVM+IG9wZXJhbmRzOwogICAgIFZlY3RvcjxH
UFJSZWcsIEpTQ19ET01KSVRfU0lHTkFUVVJFX01BWF9BUkdVTUVOVFNfSU5DTFVESU5HX1RISVM+
IHJlZ3M7CiAKICAgICBhdXRvIGFwcGVuZENlbGwgPSBbJl0oRWRnZSYgZWRnZSkgewogICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcGVyYW5kKHRoaXMsIGVkZ2UpOwogICAgICAgICByZWdz
LmFwcGVuZChvcGVyYW5kLmdwcigpKTsKLSAgICAgICAgb3BlcmFuZHMuYXBwZW5kKFdURk1vdmUo
b3BlcmFuZCkpOworICAgICAgICBvcGVyYW5kcy5hcHBlbmQoT3BlcmFuZFZhcmlhbnQoc3RkOjpp
bl9wbGFjZV90eXBlPFNwZWN1bGF0ZUNlbGxPcGVyYW5kPiwgV1RGTW92ZShvcGVyYW5kKSkpOwog
ICAgIH07CiAKICAgICBhdXRvIGFwcGVuZFN0cmluZyA9IFsmXShFZGdlJiBlZGdlKSB7CkBAIC0x
MDU2MiwxOSArMTA1NjMsMTkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNhbGxET00o
Tm9kZSogbm9kZSkKICAgICAgICAgR1BSUmVnIGdwciA9IG9wZXJhbmQuZ3ByKCk7CiAgICAgICAg
IHJlZ3MuYXBwZW5kKGdwcik7CiAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhlZGdlLCBncHIpOwot
ICAgICAgICBvcGVyYW5kcy5hcHBlbmQoV1RGTW92ZShvcGVyYW5kKSk7CisgICAgICAgIG9wZXJh
bmRzLmFwcGVuZChPcGVyYW5kVmFyaWFudChzdGQ6OmluX3BsYWNlX3R5cGU8U3BlY3VsYXRlQ2Vs
bE9wZXJhbmQ+LCBXVEZNb3ZlKG9wZXJhbmQpKSk7CiAgICAgfTsKIAogICAgIGF1dG8gYXBwZW5k
SW50MzIgPSBbJl0oRWRnZSYgZWRnZSkgewogICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQg
b3BlcmFuZCh0aGlzLCBlZGdlKTsKICAgICAgICAgcmVncy5hcHBlbmQob3BlcmFuZC5ncHIoKSk7
Ci0gICAgICAgIG9wZXJhbmRzLmFwcGVuZChXVEZNb3ZlKG9wZXJhbmQpKTsKKyAgICAgICAgb3Bl
cmFuZHMuYXBwZW5kKE9wZXJhbmRWYXJpYW50KHN0ZDo6aW5fcGxhY2VfdHlwZTxTcGVjdWxhdGVJ
bnQzMk9wZXJhbmQ+LCBXVEZNb3ZlKG9wZXJhbmQpKSk7CiAgICAgfTsKIAogICAgIGF1dG8gYXBw
ZW5kQm9vbGVhbiA9IFsmXShFZGdlJiBlZGdlKSB7CiAgICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5P
cGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSk7CiAgICAgICAgIHJlZ3MuYXBwZW5kKG9wZXJhbmQu
Z3ByKCkpOwotICAgICAgICBvcGVyYW5kcy5hcHBlbmQoV1RGTW92ZShvcGVyYW5kKSk7CisgICAg
ICAgIG9wZXJhbmRzLmFwcGVuZChPcGVyYW5kVmFyaWFudChzdGQ6OmluX3BsYWNlX3R5cGU8U3Bl
Y3VsYXRlQm9vbGVhbk9wZXJhbmQ+LCBXVEZNb3ZlKG9wZXJhbmQpKSk7CiAgICAgfTsKIAogICAg
IHVuc2lnbmVkIGluZGV4ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTGV4ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAK
aW5kZXggMGZiZTBiYzhmN2FmZjFkYmEyNjZkMjI4NjYxM2ZjZTcxOTM5NGZhOS4uMmE4YTY3YWYz
ZjIyY2I1ZmMyNTQyODI1MmYyNmZkYTIzOTRmODM1YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9MZXhlci5jcHAKQEAgLTE1NTAsNyArMTU1MCw3IEBAIEFMV0FZU19JTkxJTkUgYXV0byBM
ZXhlcjxUPjo6cGFyc2VIZXgoKSAtPiBzdGQ6Om9wdGlvbmFsPE51bWJlclBhcnNlUmVzdWx0Pgog
ICAgIH0gd2hpbGUgKGlzQVNDSUlIZXhEaWdpdE9yU2VwYXJhdG9yKG1fY3VycmVudCkgJiYgbWF4
aW11bURpZ2l0cyA+PSAwKTsKIAogICAgIGlmIChMSUtFTFkobWF4aW11bURpZ2l0cyA+PSAwICYm
IG1fY3VycmVudCAhPSAnbicpKQotICAgICAgICByZXR1cm4gTnVtYmVyUGFyc2VSZXN1bHQgeyBo
ZXhWYWx1ZSB9OworICAgICAgICByZXR1cm4gTnVtYmVyUGFyc2VSZXN1bHQgeyBzdGF0aWNfY2Fz
dDxkb3VibGU+KGhleFZhbHVlKSB9OwogCiAgICAgLy8gTm8gbW9yZSBwbGFjZSBpbiB0aGUgaGV4
VmFsdWUgYnVmZmVyLgogICAgIC8vIFRoZSB2YWx1ZXMgYXJlIHNoaWZ0ZWQgb3V0IGFuZCBwbGFj
ZWQgaW50byB0aGUgbV9idWZmZXI4IHZlY3Rvci4KQEAgLTE2MDksNyArMTYwOSw3IEBAIEFMV0FZ
U19JTkxJTkUgYXV0byBMZXhlcjxUPjo6cGFyc2VCaW5hcnkoKSAtPiBzdGQ6Om9wdGlvbmFsPE51
bWJlclBhcnNlUmVzdWx0PgogICAgIH0gd2hpbGUgKGlzQVNDSUlCaW5hcnlEaWdpdE9yU2VwYXJh
dG9yKG1fY3VycmVudCkgJiYgZGlnaXQgPj0gMCk7CiAKICAgICBpZiAoTElLRUxZKCFpc0FTQ0lJ
RGlnaXRPclNlcGFyYXRvcihtX2N1cnJlbnQpICYmIGRpZ2l0ID49IDAgJiYgbV9jdXJyZW50ICE9
ICduJykpCi0gICAgICAgIHJldHVybiBOdW1iZXJQYXJzZVJlc3VsdCB7IGJpbmFyeVZhbHVlIH07
CisgICAgICAgIHJldHVybiBOdW1iZXJQYXJzZVJlc3VsdCB7IHN0YXRpY19jYXN0PGRvdWJsZT4o
YmluYXJ5VmFsdWUpIH07CiAKICAgICBmb3IgKGludCBpID0gbWF4aW11bURpZ2l0cyAtIDE7IGkg
PiBkaWdpdDsgLS1pKQogICAgICAgICByZWNvcmQ4KGRpZ2l0c1tpXSk7CkBAIC0xNjY1LDcgKzE2
NjUsNyBAQCBBTFdBWVNfSU5MSU5FIGF1dG8gTGV4ZXI8VD46OnBhcnNlT2N0YWwoKSAtPiBzdGQ6
Om9wdGlvbmFsPE51bWJlclBhcnNlUmVzdWx0PgogICAgIH0gd2hpbGUgKGlzQVNDSUlPY3RhbERp
Z2l0T3JTZXBhcmF0b3IobV9jdXJyZW50KSAmJiBkaWdpdCA+PSAwKTsKIAogICAgIGlmIChMSUtF
TFkoIWlzQVNDSUlEaWdpdE9yU2VwYXJhdG9yKG1fY3VycmVudCkgJiYgZGlnaXQgPj0gMCAmJiBt
X2N1cnJlbnQgIT0gJ24nKSkKLSAgICAgICAgcmV0dXJuIE51bWJlclBhcnNlUmVzdWx0IHsgb2N0
YWxWYWx1ZSB9OworICAgICAgICByZXR1cm4gTnVtYmVyUGFyc2VSZXN1bHQgeyBzdGF0aWNfY2Fz
dDxkb3VibGU+KG9jdGFsVmFsdWUpIH07CiAKICAgICBmb3IgKGludCBpID0gbWF4aW11bURpZ2l0
cyAtIDE7IGkgPiBkaWdpdDsgLS1pKQogICAgICAgICAgcmVjb3JkOChkaWdpdHNbaV0pOwpAQCAt
MTcyNCw3ICsxNzI0LDcgQEAgQUxXQVlTX0lOTElORSBhdXRvIExleGVyPFQ+OjpwYXJzZURlY2lt
YWwoKSAtPiBzdGQ6Om9wdGlvbmFsPE51bWJlclBhcnNlUmVzdWx0PgogICAgICAgICB9IHdoaWxl
IChpc0FTQ0lJRGlnaXRPclNlcGFyYXRvcihtX2N1cnJlbnQpICYmIGRpZ2l0ID49IDApOwogCiAg
ICAgICAgIGlmIChkaWdpdCA+PSAwICYmIG1fY3VycmVudCAhPSAnLicgJiYgIWlzQVNDSUlBbHBo
YUNhc2VsZXNzRXF1YWwobV9jdXJyZW50LCAnZScpICYmIG1fY3VycmVudCAhPSAnbicpCi0gICAg
ICAgICAgICByZXR1cm4gTnVtYmVyUGFyc2VSZXN1bHQgeyBkZWNpbWFsVmFsdWUgfTsKKyAgICAg
ICAgICAgIHJldHVybiBOdW1iZXJQYXJzZVJlc3VsdCB7IHN0YXRpY19jYXN0PGRvdWJsZT4oZGVj
aW1hbFZhbHVlKSB9OwogCiAgICAgICAgIGZvciAoaW50IGkgPSBtYXhpbXVtRGlnaXRzIC0gMTsg
aSA+IGRpZ2l0OyAtLWkpCiAgICAgICAgICAgICByZWNvcmQ4KGRpZ2l0c1tpXSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNwcAppbmRleCA2MTY4ZmVl
OTY2Y2I2NWM1NmNkNjY1NTU2NjZjZjU0YmZkYjcyOWJkLi4yN2QyYjdiNzQxYTdkZjVmYTY3ODlk
NzJlODIyMWRmNDg4M2I3NTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZVBheWxvYWQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NhY2hlUGF5bG9hZC5jcHAKQEAgLTYxLDIxICs2MSwyMSBAQCBjb25zdCB1aW50OF90KiBDYWNo
ZVBheWxvYWQ6OmRhdGEoKSBjb25zdAogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fZGF0YSwK
ICAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsKICAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKCkp
OwotICAgICAgICB9LAotICAgICAgICBbXShjb25zdCBzdGQ6OnBhaXI8TWFsbG9jUHRyPHVpbnQ4
X3QsIFZNTWFsbG9jPiwgc2l6ZV90PiYgZGF0YSkgeworICAgICAgICB9LCBbXShjb25zdCBzdGQ6
OnBhaXI8TWFsbG9jUHRyPHVpbnQ4X3QsIFZNTWFsbG9jPiwgc2l6ZV90PiYgZGF0YSkgLT4gY29u
c3QgdWludDhfdCogewogICAgICAgICAgICAgcmV0dXJuIGRhdGEuZmlyc3QuZ2V0KCk7Ci0gICAg
ICAgIH0pOworICAgICAgICB9CisgICAgKTsKIH0KIAogc2l6ZV90IENhY2hlUGF5bG9hZDo6c2l6
ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9kYXRhLAotICAgICAgICBb
XShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeworICAgICAgICBbXShj
b25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgLT4gc2l6ZV90IHsKICAgICAg
ICAgICAgIHJldHVybiBkYXRhLnNpemUoKTsKLSAgICAgICAgfSwKLSAgICAgICAgW10oY29uc3Qg
c3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90LCBWTU1hbGxvYz4sIHNpemVfdD4mIGRhdGEpIHsK
KyAgICAgICAgfSwgW10oY29uc3Qgc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90LCBWTU1hbGxv
Yz4sIHNpemVfdD4mIGRhdGEpIC0+IHNpemVfdCB7CiAgICAgICAgICAgICByZXR1cm4gZGF0YS5z
ZWNvbmQ7Ci0gICAgICAgIH0pOworICAgICAgICB9CisgICAgKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZVVw
ZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZVVwZGF0ZS5jcHAK
aW5kZXggNzBkMzZiMzg1YWI1YjJmODkwYTk2NzMwOWMzYzRhZDA3MTk3ZGRhMy4uNjA3MTU0MzEw
NWUzZDk0NTZkM2Q0Mjk4MWI4MzFkYWE3NjZlYzU0OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVVcGRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhY2hlVXBkYXRlLmNwcApAQCAtMzksMTEgKzM5LDggQEAgQ2FjaGVVcGRh
dGU6OkNhY2hlVXBkYXRlKEZ1bmN0aW9uVXBkYXRlJiYgdXBkYXRlKQogfQogCiBDYWNoZVVwZGF0
ZTo6Q2FjaGVVcGRhdGUoQ2FjaGVVcGRhdGUmJiBvdGhlcikKKyAgICA6IG1fdXBkYXRlKFdURk1v
dmUob3RoZXIubV91cGRhdGUpKQogewotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEds
b2JhbFVwZGF0ZT4ob3RoZXIubV91cGRhdGUpKQotICAgICAgICBuZXcgKHRoaXMpIENhY2hlVXBk
YXRlKFdURk1vdmUoV1RGOjpnZXQ8R2xvYmFsVXBkYXRlPihvdGhlci5tX3VwZGF0ZSkpKTsKLSAg
ICBlbHNlCi0gICAgICAgIG5ldyAodGhpcykgQ2FjaGVVcGRhdGUoV1RGTW92ZShXVEY6OmdldDxG
dW5jdGlvblVwZGF0ZT4ob3RoZXIubV91cGRhdGUpKSk7CiB9CiAKIENhY2hlVXBkYXRlJiBDYWNo
ZVVwZGF0ZTo6b3BlcmF0b3I9KENhY2hlVXBkYXRlJiYgb3RoZXIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbFRpbWVab25lLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsVGltZVpvbmUuY3BwCmluZGV4IDc3ZGI0MDk1
ZDI3YzFiZjJmYzE3NzBjZmUwMzlkNTY5OGExNmJlY2MuLjgzYTM5MDZiZDU0NTA2MjJlYWVhOWFj
OTAzYmJkMjgxNWNkMDljZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1RlbXBvcmFsVGltZVpvbmUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1RlbXBvcmFsVGltZVpvbmUuY3BwCkBAIC0zNSwxNCArMzUsMTQgQEAgY29uc3QgQ2xhc3NJ
bmZvIFRlbXBvcmFsVGltZVpvbmU6OnNfaW5mbyA9IHsgIk9iamVjdCIsICZCYXNlOjpzX2luZm8s
IG51bGxwdHIsIG4KIAogVGVtcG9yYWxUaW1lWm9uZSogVGVtcG9yYWxUaW1lWm9uZTo6Y3JlYXRl
RnJvbUlEKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFRpbWVab25lSUQgaWRlbnRpZmll
cikKIHsKLSAgICBUZW1wb3JhbFRpbWVab25lKiBmb3JtYXQgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxUZW1wb3JhbFRpbWVab25lPih2bS5oZWFwKSkgVGVtcG9yYWxUaW1lWm9uZSh2bSwg
c3RydWN0dXJlLCBUaW1lWm9uZSB7IFdURjo6aW5fcGxhY2U8MD4sIGlkZW50aWZpZXIgfSk7Cisg
ICAgVGVtcG9yYWxUaW1lWm9uZSogZm9ybWF0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
VGVtcG9yYWxUaW1lWm9uZT4odm0uaGVhcCkpIFRlbXBvcmFsVGltZVpvbmUodm0sIHN0cnVjdHVy
ZSwgVGltZVpvbmUgeyBzdGQ6OmluX3BsYWNlX2luZGV4X3Q8MD4oKSwgaWRlbnRpZmllciB9KTsK
ICAgICBmb3JtYXQtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gZm9ybWF0OwogfQog
CiBUZW1wb3JhbFRpbWVab25lKiBUZW1wb3JhbFRpbWVab25lOjpjcmVhdGVGcm9tVVRDT2Zmc2V0
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDY0X3QgdXRjT2Zmc2V0KQogewotICAg
IFRlbXBvcmFsVGltZVpvbmUqIGZvcm1hdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFRl
bXBvcmFsVGltZVpvbmU+KHZtLmhlYXApKSBUZW1wb3JhbFRpbWVab25lKHZtLCBzdHJ1Y3R1cmUs
IFRpbWVab25lIHsgV1RGOjppbl9wbGFjZTwxPiwgdXRjT2Zmc2V0IH0pOworICAgIFRlbXBvcmFs
VGltZVpvbmUqIGZvcm1hdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFRlbXBvcmFsVGlt
ZVpvbmU+KHZtLmhlYXApKSBUZW1wb3JhbFRpbWVab25lKHZtLCBzdHJ1Y3R1cmUsIFRpbWVab25l
IHsgc3RkOjppbl9wbGFjZV9pbmRleF90PDE+KCksIHV0Y09mZnNldCB9KTsKICAgICBmb3JtYXQt
PmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gZm9ybWF0OwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvRm9yd2FyZC5oIGIvU291cmNlL1dURi93dGYvRm9yd2FyZC5oCmluZGV4
IDNhNzI5NzQzN2I1OWQ0NTNkYmQ2ZTk2ODQzNDY5NzRlNTNjODZjZjkuLmYwMGNlMzk2MDk5ZWZi
Y2Y5MGQzZWExY2IxOGM0NWU0ODdhNzIyNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Zv
cndhcmQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKQEAgLTgzLDcgKzgzLDYgQEAg
dGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIFN0cmluZ0J1ZmZlcjsKIHRlbXBsYXRlPHR5cGVuYW1l
PiBjbGFzcyBTdHJpbmdQYXJzaW5nQnVmZmVyOwogdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1l
ID0gdm9pZD4gY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xh
c3MgVW5pcXVlUmVmOwotdGVtcGxhdGU8dHlwZW5hbWUuLi4+IGNsYXNzIFZhcmlhbnQ7CiB0ZW1w
bGF0ZTx0eXBlbmFtZSwgc2l6ZV90ID0gMCwgdHlwZW5hbWUgPSBDcmFzaE9uT3ZlcmZsb3csIHNp
emVfdCA9IDE2LCB0eXBlbmFtZSBNYWxsb2MgPSBWZWN0b3JNYWxsb2M+IGNsYXNzIFZlY3RvcjsK
IHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSA9IEVtcHR5Q291bnRlcj4gY2xhc3MgV2Vha1B0
cjsKIApAQCAtMTU3LDcgKzE1Niw2IEBAIHVzaW5nIFdURjo6VGV4dFBvc2l0aW9uOwogdXNpbmcg
V1RGOjpUZXh0U3RyZWFtOwogdXNpbmcgV1RGOjpVUkw7CiB1c2luZyBXVEY6OlVuaXF1ZVJlZjsK
LXVzaW5nIFdURjo6VmFyaWFudDsKIHVzaW5nIFdURjo6VmVjdG9yOwogCiB0ZW1wbGF0ZTxjbGFz
cyBULCBjbGFzcyBFPiB1c2luZyBFeHBlY3RlZCA9IHN0ZDo6ZXhwZXJpbWVudGFsOjpleHBlY3Rl
ZDxULCBFPjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hlci5oIGIvU291cmNlL1dU
Ri93dGYvSGFzaGVyLmgKaW5kZXggOGZlOWIyNDBjMGVmYWM3MDhhYzgwM2Y1NTAxNTBkOGNhNTkz
NTJkMi4uYTc3YTQ4YTllY2E4OGE1MTc3MmViNDgxNWNlOGJhMDA1OTkzMzdhOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvSGFzaGVyLmgKKysrIGIvU291cmNlL1dURi93dGYvSGFzaGVyLmgK
QEAgLTIxLDYgKzIxLDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8b3B0aW9uYWw+Cisj
aW5jbHVkZSA8dmFyaWFudD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVk
ZSA8d3RmL1VSTC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KQEAgLTE2Niwx
MCArMTY3LDEwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYWRkKEhhc2hlciYgaGFzaGVy
LCBjb25zdCBzdGQ6Om9wdGlvbmFsPFQ+JiBvcHRpb25hbCkKICAgICAgICAgYWRkKGhhc2hlciwg
b3B0aW9uYWwudmFsdWUoKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPiB2b2lk
IGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgVmFyaWFudDxUeXBlcy4uLj4mIHZhcmlhbnQpCit0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4gdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0
IHN0ZDo6dmFyaWFudDxUeXBlcy4uLj4mIHZhcmlhbnQpCiB7CiAgICAgYWRkKGhhc2hlciwgdmFy
aWFudC5pbmRleCgpKTsKLSAgICB2aXNpdChbJmhhc2hlcl0gKGF1dG8mIHZhbHVlKSB7CisgICAg
c3RkOjp2aXNpdChbJmhhc2hlcl0gKGF1dG8mIHZhbHVlKSB7CiAgICAgICAgIGFkZChoYXNoZXIs
IHZhbHVlKTsKICAgICB9LCB2YXJpYW50KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L0xpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0LmggYi9Tb3VyY2UvV1RGL3d0Zi9MaWtlbHlE
ZW5zZVVuc2lnbmVkSW50ZWdlclNldC5oCmluZGV4IDAyMTBmOTQyOGU2Y2U0MmYzZTJkYWZkMDI4
MDcwYzFmY2RiOTRjNzcuLjc0NDJhNDMxYTM4OWRhYTJkMjBmMDUyNjdjZDkxNGVjMGUyZWE2YmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0xpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0
LmgKKysrIGIvU291cmNlL1dURi93dGYvTGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQuaApA
QCAtMjA1LDggKzIwNSw4IEBAIHB1YmxpYzoKICAgICAgICAgSW5kZXhUeXBlIG9wZXJhdG9yKigp
IGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fdW5k
ZXJseWluZywKLSAgICAgICAgICAgICAgICBbJl0oY29uc3QgQml0VmVjdG9yOjppdGVyYXRvciYg
aXQpIHsgcmV0dXJuICppdCArIG1fc2hpZnQ7IH0sCi0gICAgICAgICAgICAgICAgW10oY29uc3Qg
dHlwZW5hbWUgU2V0OjppdGVyYXRvciYgaXQpIHsgcmV0dXJuICppdDsgfSk7CisgICAgICAgICAg
ICAgICAgWyZdKGNvbnN0IEJpdFZlY3Rvcjo6aXRlcmF0b3ImIGl0KSAtPiBJbmRleFR5cGUgeyBy
ZXR1cm4gKml0ICsgbV9zaGlmdDsgfSwKKyAgICAgICAgICAgICAgICBbXShjb25zdCB0eXBlbmFt
ZSBTZXQ6Oml0ZXJhdG9yJiBpdCkgLT4gSW5kZXhUeXBlIHsgcmV0dXJuICppdDsgfSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBj
b25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVmFyaWFudC5oIGIvU291cmNlL1dURi93
dGYvVmFyaWFudC5oCmluZGV4IDNjYTdlYmZlOWQwNDc5NmQwYjhhMDU2NzNjY2EwZmUzMThlMDJk
MzIuLmNiZjkyYjlmYWYyOWYwYzM5OGExZDY1MDQzNjRiNjM0NmZhZThiZTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgK
QEAgLTQ3LDE5ICs0NywxMCBAQAogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx0eXBlX3Ry
YWl0cz4KICNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHZhcmlhbnQ+CiAjaW5jbHVkZSA8
d3RmL0NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCi0jaWYgQ09N
UElMRVIoTVNWQykKLSNwcmFnbWEgd2FybmluZyhwdXNoKQotI3ByYWdtYSB3YXJuaW5nKGRpc2Fi
bGU6NDI0NSkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ1MjEpCi0jcHJhZ21hIHdhcm5pbmco
ZGlzYWJsZTo0NTIyKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDgxNCkKLSNlbmRpZgotCi0j
aWYgIUNPTVBJTEVSKENMQU5HKSB8fCBXVEZfQ1BQX1NURF9WRVIgPj0gMTQKLQogbmFtZXNwYWNl
IFdURiB7CiAKICNpZiBDT01QSUxFUl9TVVBQT1JUUyhFWENFUFRJT05TKQpAQCAtNzIsMjAxMyAr
NjMsNDcgQEAgbmFtZXNwYWNlIFdURiB7CiAjZGVmaW5lIF9fTk9FWENFUFRfKC4uLikKICNlbmRp
ZgogCi1zdHJ1Y3QgX19pbl9wbGFjZV9wcml2YXRlewotICAgIHRlbXBsYXRlPHR5cGVuYW1lPgot
ICAgIHN0cnVjdCBfX3R5cGVfaG9sZGVyOwotCi0gICAgdGVtcGxhdGU8c2l6ZV90PgotICAgIHN0
cnVjdCBfX3ZhbHVlX2hvbGRlcjsKLX07Ci0KLQotc3RydWN0IGluX3BsYWNlX3RhZyB7Ci0gICAg
aW5fcGxhY2VfdGFnKCkgPSBkZWxldGU7Ci19OwotCi11c2luZyBpbl9wbGFjZV90ID0gaW5fcGxh
Y2VfdGFnKCYpKF9faW5fcGxhY2VfcHJpdmF0ZSYpOwotCi10ZW1wbGF0ZSA8Y2xhc3MgX1R5cGU+
Ci11c2luZyBpbl9wbGFjZV90eXBlX3QgPSBpbl9wbGFjZV90YWcoJikoX19pbl9wbGFjZV9wcml2
YXRlOjpfX3R5cGVfaG9sZGVyPF9UeXBlPiYpOwotCi10ZW1wbGF0ZSA8c2l6ZV90IF9JbmRleD4K
LXVzaW5nIGluX3BsYWNlX2luZGV4X3QgPSBpbl9wbGFjZV90YWcoJikoX19pbl9wbGFjZV9wcml2
YXRlOjpfX3ZhbHVlX2hvbGRlcjxfSW5kZXg+Jik7Ci0KLWluX3BsYWNlX3RhZyBpbl9wbGFjZShf
X2luX3BsYWNlX3ByaXZhdGUmKTsKLQotdGVtcGxhdGUgPGNsYXNzIF9UeXBlPgotaW5fcGxhY2Vf
dGFnIGluX3BsYWNlKF9faW5fcGxhY2VfcHJpdmF0ZTo6X190eXBlX2hvbGRlcjxfVHlwZT4gJikg
ewotICAgIF9fVEhST1dfRVhDRVBUSU9OKF9faW5fcGxhY2VfcHJpdmF0ZSgpKTsKLX0KLQotdGVt
cGxhdGUgPHNpemVfdCBfSW5kZXg+Ci1pbl9wbGFjZV90YWcgaW5fcGxhY2UoX19pbl9wbGFjZV9w
cml2YXRlOjpfX3ZhbHVlX2hvbGRlcjxfSW5kZXg+ICYpIHsKLSAgICBfX1RIUk9XX0VYQ0VQVElP
TihfX2luX3BsYWNlX3ByaXZhdGUoKSk7Ci19Ci0KLWNsYXNzIGJhZF92YXJpYW50X2FjY2Vzczog
cHVibGljIHN0ZDo6bG9naWNfZXJyb3J7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgYmFkX3Zhcmlh
bnRfYWNjZXNzKGNvbnN0IHN0ZDo6c3RyaW5nJiB3aGF0X2FyZyk6Ci0gICAgICAgIHN0ZDo6bG9n
aWNfZXJyb3Iod2hhdF9hcmcpCi0gICAge30KLSAgICBleHBsaWNpdCBiYWRfdmFyaWFudF9hY2Nl
c3MoY29uc3QgY2hhciogd2hhdF9hcmcpOgotICAgICAgICBzdGQ6OmxvZ2ljX2Vycm9yKHdoYXRf
YXJnKQotICAgIHt9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotTk9fUkVUVVJOX0RVRV9U
T19DUkFTSCBpbmxpbmUgVCBfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzcyhjb25zdCBjaGFyKiB3
aGF0X2FyZyl7Ci0gICAgX19USFJPV19FWENFUFRJT04oYmFkX3ZhcmlhbnRfYWNjZXNzKHdoYXRf
YXJnKSkKLX0KLQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX1R5cGUsdHlw
ZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3R5cGVfaW5kZXhfaGVscGVyOwotCi10ZW1wbGF0
ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSBfSGVhZCx0eXBlbmFt
ZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX190eXBlX2luZGV4X2hlbHBlcjxfT2Zmc2V0LF9UeXBlLF9I
ZWFkLF9SZXN0Li4uPnsKLSAgICBzdGF0aWMgY29uc3RleHByIHB0cmRpZmZfdCBfX3ZhbHVlPQot
ICAgICAgICBfX3R5cGVfaW5kZXhfaGVscGVyPF9PZmZzZXQrMSxfVHlwZSxfUmVzdC4uLj46Ol9f
dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBfVHlwZSx0
eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX190eXBlX2luZGV4X2hlbHBlcjxfT2Zmc2V0LF9U
eXBlLF9UeXBlLF9SZXN0Li4uPnsKLSAgICBzdGF0aWMgY29uc3RleHByIHB0cmRpZmZfdCBfX3Zh
bHVlPV9PZmZzZXQ7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4g
X1R5cGVzPgotc3RydWN0IF9fdHlwZV9pbmRleHsKLSAgICBzdGF0aWMgY29uc3RleHByIHB0cmRp
ZmZfdCBfX3ZhbHVlPQotICAgICAgICBfX3R5cGVfaW5kZXhfaGVscGVyPDAsX1R5cGUsX1R5cGVz
Li4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUg
Li4uIF9UeXBlcz4KLXN0cnVjdCBfX2luZGV4ZWRfdHlwZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
X0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9faW5kZXhlZF90eXBlPDAsX0hlYWQs
X1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgX0hlYWQgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9faW5kZXhlZF90eXBlPC0x
LF9IZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIHZvaWQgX190eXBlOwotfTsKLQotdGVtcGxh
dGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1z
dHJ1Y3QgX19pbmRleGVkX3R5cGU8X0luZGV4LF9IZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVm
IHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleC0xLF9SZXN0Li4uPjo6X190eXBlIF9fdHlw
ZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uX1R5cGVzPgot
c3RydWN0IF9fbmV4dF9pbmRleHsKLSAgICBzdGF0aWMgY29uc3RleHByIHB0cmRpZmZfdCBfX3Zh
bHVlPQotICAgICAgICAoX0luZGV4Pj1wdHJkaWZmX3Qoc2l6ZW9mLi4uKF9UeXBlcyktMSkpPy0x
Ol9JbmRleCsxOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNsYXNzIFZh
cmlhbnQ7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lPgotc3RydWN0IHZhcmlhbnRfc2l6ZTsKLQotdGVt
cGxhdGUgPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IHZhcmlhbnRfc2l6ZTxjb25zdCBfVHlwZT4g
OiB2YXJpYW50X3NpemU8X1R5cGU+IHt9OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgX1R5cGU+Ci1z
dHJ1Y3QgdmFyaWFudF9zaXplPHZvbGF0aWxlIF9UeXBlPiA6IHZhcmlhbnRfc2l6ZTxfVHlwZT4g
e307Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50X3NpemU8Y29u
c3Qgdm9sYXRpbGUgX1R5cGU+IDogdmFyaWFudF9zaXplPF9UeXBlPiB7fTsKLQotdGVtcGxhdGUg
PHR5cGVuYW1lLi4uIF9UeXBlcz4KLXN0cnVjdCB2YXJpYW50X3NpemU8VmFyaWFudDxfVHlwZXMu
Li4+PgotICAgIDogc3RkOjppbnRlZ3JhbF9jb25zdGFudDxzaXplX3QsIHNpemVvZi4uLihfVHlw
ZXMpPiB7fTsKLQotdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSBfVHlwZT4KLXN0cnVj
dCB2YXJpYW50X2FsdGVybmF0aXZlOwotCi10ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1l
IF9UeXBlPgotdXNpbmcgdmFyaWFudF9hbHRlcm5hdGl2ZV90PXR5cGVuYW1lIHZhcmlhbnRfYWx0
ZXJuYXRpdmU8X0luZGV4LF9UeXBlPjo6dHlwZTsKLQotdGVtcGxhdGUgPHNpemVfdCBfSW5kZXgs
IHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IHZhcmlhbnRfYWx0ZXJuYXRpdmU8X0luZGV4LCBjb25z
dCBfVHlwZT57Ci0gICAgdXNpbmcgdHlwZT1zdGQ6OmFkZF9jb25zdF90PHZhcmlhbnRfYWx0ZXJu
YXRpdmVfdDxfSW5kZXgsX1R5cGU+PjsKLX07Ci0KLXRlbXBsYXRlIDxzaXplX3QgX0luZGV4LCB0
eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlPF9JbmRleCwgdm9sYXRp
bGUgX1R5cGU+ewotICAgIHVzaW5nIHR5cGU9c3RkOjphZGRfdm9sYXRpbGVfdDx2YXJpYW50X2Fs
dGVybmF0aXZlX3Q8X0luZGV4LF9UeXBlPj47Ci19OwotCi10ZW1wbGF0ZSA8c2l6ZV90IF9JbmRl
eCwgdHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxfSW5kZXgsIHZv
bGF0aWxlIGNvbnN0IF9UeXBlPnsKLSAgICB1c2luZyB0eXBlPXN0ZDo6YWRkX3ZvbGF0aWxlX3Q8
c3RkOjphZGRfY29uc3RfdDx2YXJpYW50X2FsdGVybmF0aXZlX3Q8X0luZGV4LF9UeXBlPj4+Owot
fTsKLQotdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0
IHZhcmlhbnRfYWx0ZXJuYXRpdmU8X0luZGV4LFZhcmlhbnQ8X1R5cGVzLi4uPj57Ci0gICAgdXNp
bmcgdHlwZT10eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBl
OwotfTsKLQotY29uc3RleHByIHNpemVfdCB2YXJpYW50X25wb3M9LTE7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgX1R5cGUmIGdldChW
YXJpYW50PF9UeXBlcy4uLj4mKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUg
Li4uIF9UeXBlcz4KLWNvbnN0ZXhwciBfVHlwZSBjb25zdCYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4u
PiBjb25zdCYpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVz
PgotY29uc3RleHByIF9UeXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYmKTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBjb25zdCBf
VHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmJik7Ci0KLXRlbXBsYXRlPHB0cmRp
ZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2lu
ZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJiBnZXQoVmFyaWFudDxfVHlwZXMu
Li4+Jik7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4K
LWNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190
eXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYmKTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9J
bmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHR5cGVuYW1lIF9faW5kZXhlZF90
eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3QmIGdldCgKLSAgICBWYXJpYW50PF9U
eXBlcy4uLj4gY29uc3QmKTsKLQotdGVtcGxhdGUgPHB0cmRpZmZfdCBfSW5kZXgsIHR5cGVuYW1l
Li4uIF9UeXBlcz4KLWNvbnN0ZXhwciBjb25zdCB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5k
ZXgsIF9UeXBlcy4uLj46Ol9fdHlwZSAmJgotZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCAm
Jik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25z
dGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PF9UeXBlPiBnZXRfaWYoVmFyaWFudDxfVHlwZXMuLi4+
Jik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25z
dGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PF9UeXBlIGNvbnN0PiBnZXRfaWYoVmFyaWFudDxfVHlw
ZXMuLi4+IGNvbnN0Jik7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4u
IF9UeXBlcz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8dHlwZW5hbWUgX19pbmRleGVk
X3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZT4gZ2V0X2lmKFZhcmlhbnQ8X1R5cGVzLi4u
PiYpOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1j
b25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRl
eCxfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3Q+IGdldF9pZigKLSAgICBWYXJpYW50PF9UeXBlcy4u
Lj4gY29uc3QmKTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5
cGVzPgotc3RydWN0IF9fdmFyaWFudF9hY2Nlc3NvcjsKLQotdGVtcGxhdGU8c2l6ZV90IF9fY291
bnQsCi0gICAgICAgICBib29sIF9fbGFyZ2VyX3RoYW5fY2hhcj0oX19jb3VudD5TQ0hBUl9NQVgp
LAotICAgIGJvb2wgX19sYXJnZXJfdGhhbl9zaG9ydD0oX19jb3VudD5TSFJUX01BWCksCi0gICAg
Ym9vbCBfX2xhcmdlcl90aGFuX2ludD0oX19jb3VudD5JTlRfTUFYKT4KLXN0cnVjdCBfX2Rpc2Ny
aW1pbmF0b3JfdHlwZXsKLSAgICB0eXBlZGVmIHNpZ25lZCBjaGFyIF9fdHlwZTsKLX07Ci0KLXRl
bXBsYXRlPHNpemVfdCBfX2NvdW50Pgotc3RydWN0IF9fZGlzY3JpbWluYXRvcl90eXBlPF9fY291
bnQsdHJ1ZSxmYWxzZSxmYWxzZT57Ci0gICAgdHlwZWRlZiBzaWduZWQgc2hvcnQgX190eXBlOwot
fTsKLQotdGVtcGxhdGU8c2l6ZV90IF9fY291bnQ+Ci1zdHJ1Y3QgX19kaXNjcmltaW5hdG9yX3R5
cGU8X19jb3VudCx0cnVlLHRydWUsZmFsc2U+ewotICAgIHR5cGVkZWYgaW50IF9fdHlwZTsKLX07
Ci10ZW1wbGF0ZTxzaXplX3QgX19jb3VudD4KLXN0cnVjdCBfX2Rpc2NyaW1pbmF0b3JfdHlwZTxf
X2NvdW50LHRydWUsdHJ1ZSx0cnVlPnsKLSAgICB0eXBlZGVmIHNpZ25lZCBsb25nIF9fdHlwZTsK
LX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fc3RvcmVkX3R5cGV7Ci0g
ICAgdHlwZWRlZiBfVHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4K
LXN0cnVjdCBfX3N0b3JlZF90eXBlPF9UeXBlJj57Ci0gICAgdHlwZWRlZiBfVHlwZSogX190eXBl
OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF90cml2
aWFsbHlfZGVzdHJ1Y3RpYmxlOwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19hbGxfdHJpdmlhbGx5
X2Rlc3RydWN0aWJsZTw+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgX192YWx1ZT10cnVl
OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX19hbGxfdHJpdmlhbGx5
X2Rlc3RydWN0aWJsZTxfVHlwZT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBfX3ZhbHVl
PQotICAgICAgICBzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8dHlwZW5hbWUgX19zdG9y
ZWRfdHlwZTxfVHlwZT46Ol9fdHlwZT46OnZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
X0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fYWxsX3RyaXZpYWxseV9kZXN0cnVj
dGlibGU8X0hlYWQsX1Jlc3QuLi4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgX192YWx1
ZT0KLSAgICAgICAgX19hbGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxfSGVhZD46Ol9fdmFsdWUg
JiYKLSAgICAgICAgX19hbGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxfUmVzdC4uLj46Ol9fdmFs
dWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVGFyZ2V0LHR5cGVuYW1lIC4uLiBfQXJncz4K
LXN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19jb25zdHJ1Y3RpYmxlewotICAgIHN0YXRpYyBjb25z
dCBib29sIF9fdmFsdWU9Ci0gICAgICAgIHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlPF9U
YXJnZXQsIF9BcmdzLi4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5
cGVzPgotc3RydWN0IF9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTsKLQotdGVt
cGxhdGU8Pgotc3RydWN0IF9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTw+IHsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgX192YWx1ZT10cnVlOwotfTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3Rp
YmxlPF9UeXBlPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fdmFsdWU9Ci0gICAgICAg
IHN0ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8Ci0gICAgICAgIHR5cGVuYW1lIF9f
c3RvcmVkX3R5cGU8X1R5cGU+OjpfX3R5cGU+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19t
b3ZlX2NvbnN0cnVjdGlibGU8X0hlYWQsX1Jlc3QuLi4+IHsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgX192YWx1ZT0KLSAgICAgICAgX19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3Rp
YmxlPF9IZWFkPjo6X192YWx1ZSAmJgotICAgICAgICBfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2Nv
bnN0cnVjdGlibGU8X1Jlc3QuLi4+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90
IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fb3RoZXJfc3RvcmFnZV9ub3Ro
cm93X21vdmVfY29uc3RydWN0aWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5h
bWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fb3RoZXJfc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3Ry
dWN0aWJsZTwwLF9IZWFkLF9SZXN0Li4uPnsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBfX3ZhbHVl
PV9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxfUmVzdC4uLj46Ol9fdmFsdWU7
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1
Y3QgX19vdGhlcl9zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPC0xLF9IZWFkLF9S
ZXN0Li4uPnsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBfX3ZhbHVlPQotICAgICAgICBfX3N0b3Jh
Z2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X0hlYWQsX1Jlc3QuLi4+OjpfX3ZhbHVlOwot
fTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAu
Li4gX1Jlc3Q+Ci1zdHJ1Y3QgX19vdGhlcl9zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3Rp
YmxlPF9JbmRleCxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1
ZT0KLSAgICAgICAgX19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkPjo6
X192YWx1ZSAmJgotICAgICAgICBfX290aGVyX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVj
dGlibGU8X0luZGV4LTEsX1Jlc3QuLi4+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlm
Zl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2Vf
cmVxdWlyZWR7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1ZT0KLSAgICAgICAgIV9fc3Rv
cmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTwKLSAgICAgICAgdHlwZW5hbWUgX19pbmRl
eGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZT46Ol9fdmFsdWUgJiYKLSAgICAgICAg
IV9fb3RoZXJfc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxfSW5kZXgsX1R5cGVz
Li4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgscHRyZGlmZl90
IF9Db3VudCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYW55X2JhY2t1cF9zdG9yYWdl
X3JlcXVpcmVkX2ltcGx7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1ZT0KLSAgICAgICAg
X19iYWNrdXBfc3RvcmFnZV9yZXF1aXJlZDxfSW5kZXgsX1R5cGVzLi4uPjo6X192YWx1ZSB8fAot
ICAgICAgICBfX2FueV9iYWNrdXBfc3RvcmFnZV9yZXF1aXJlZF9pbXBsPF9JbmRleCsxLF9Db3Vu
dC0xLF9UeXBlcy4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4
LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWly
ZWRfaW1wbDxfSW5kZXgsMCxfVHlwZXMuLi4+ewotICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFs
dWU9ZmFsc2U7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudD4KLXN0cnVjdCBfX2Fu
eV9iYWNrdXBfc3RvcmFnZV9yZXF1aXJlZDsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBl
cz4KLXN0cnVjdCBfX2FueV9iYWNrdXBfc3RvcmFnZV9yZXF1aXJlZDxWYXJpYW50PF9UeXBlcy4u
Lj4gPnsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBfX3ZhbHVlPQotICAgICAgICBfX2FueV9iYWNr
dXBfc3RvcmFnZV9yZXF1aXJlZF9pbXBsPDAsc2l6ZW9mLi4uKF9UeXBlcyksX1R5cGVzLi4uPjo6
X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci11bmlvbiBfX3Zh
cmlhbnRfZGF0YTsKLQotLy8gc3RkOjppc19saXRlcmFsX3R5cGUgaXMgZGVwcmVjYXRlZCBpbiBD
KysxNyBhbmQgcmVtb3ZlZCBpbiBDKysyMAotQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNf
QkVHSU4KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLGJvb2w9c3RkOjppc19saXRlcmFsX3R5cGU8
X1R5cGU+Ojp2YWx1ZT4KLXN0cnVjdCBfX3ZhcmlhbnRfc3RvcmFnZXsKLSAgICB0eXBlZGVmIF9U
eXBlIF9fdHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0KF9fdHlwZSYg
X192YWwpewotICAgICAgICByZXR1cm4gX192YWw7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4
cHIgX1R5cGUmJiBfX2dldF9ycmVmKF9fdHlwZSYgX192YWwpewotICAgICAgICByZXR1cm4gc3Rk
Ojptb3ZlKF9fdmFsKTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBfVHlwZSYg
X19nZXQoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBfX3ZhbDsKLSAgICB9
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBfVHlwZSYmIF9fZ2V0X3JyZWYoX190eXBlIGNv
bnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1vdmUoX192YWwpOwotICAgIH0KLSAg
ICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3koX190eXBlJil7fQotfTsKLUFMTE9XX0RFUFJFQ0FURURf
REVDTEFSQVRJT05TX0VORAotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBfX3N0
b3JhZ2Vfd3JhcHBlcnsKLSAgICB0eXBlbmFtZSBzdGQ6OmFsaWduZWRfc3RvcmFnZTxzaXplb2Yo
X1R5cGUpLGFsaWdub2YoX1R5cGUpPjo6dHlwZSBfX3N0b3JhZ2U7Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB2b2lkIF9fY29uc3RydWN0
KHZvaWQqIF9fcCxfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICBuZXcgKF9fcCkgX1R5cGUo
c3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgX0R1bW15ID0gX1R5cGU+Ci0gICAgX19zdG9yYWdlX3dyYXBwZXIoCi0gICAgICAg
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPF9E
dW1teT46OnZhbHVlLAotICAgICAgICB2b2lkIChfX3N0b3JhZ2Vfd3JhcHBlcjo6KikoKT46OnR5
cGUgPSBudWxscHRyKSB7Ci0gICAgICBfX2NvbnN0cnVjdCgmX19zdG9yYWdlKTsKLSAgICB9Ci0K
LSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0R1bW15ID0gX1R5cGU+Ci0gICAgX19zdG9yYWdlX3dy
YXBwZXIoCi0gICAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX2RlZmF1bHRf
Y29uc3RydWN0aWJsZTxfRHVtbXk+Ojp2YWx1ZSwKLSAgICAgICAgdm9pZCAoX19zdG9yYWdlX3dy
YXBwZXI6OiopKCk+Ojp0eXBlID0gbnVsbHB0cikgewotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRmlyc3QsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIF9fc3RvcmFnZV93cmFw
cGVyKF9GaXJzdCYmIF9fZmlyc3QsX0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgX19jb25z
dHJ1Y3QoJl9fc3RvcmFnZSxzdGQ6OmZvcndhcmQ8X0ZpcnN0PihfX2ZpcnN0KSxzdGQ6OmZvcndh
cmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgIH0KLQotICAgIF9UeXBlJiBfX2dldCgpewotICAg
ICAgICByZXR1cm4gKnN0YXRpY19jYXN0PF9UeXBlKj4oc3RhdGljX2Nhc3Q8dm9pZCo+KCZfX3N0
b3JhZ2UpKTsKLSAgICB9Ci0gICAgY29uc3RleHByIF9UeXBlIGNvbnN0JiBfX2dldCgpIGNvbnN0
ewotICAgICAgICByZXR1cm4gKnN0YXRpY19jYXN0PF9UeXBlIGNvbnN0Kj4oc3RhdGljX2Nhc3Q8
dm9pZCBjb25zdCo+KCZfX3N0b3JhZ2UpKTsKLSAgICB9Ci0gICAgdm9pZCBfX2Rlc3Ryb3koKXsK
LSAgICAgICAgX19nZXQoKS5+X1R5cGUoKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHlwZT4KLXN0cnVjdCBfX3N0b3JhZ2Vfd3JhcHBlcjxfVHlwZSY+ewotICAgIF9UeXBlKiBf
X3N0b3JhZ2U7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQXJnPgotICAgIGNvbnN0ZXhwciBf
X3N0b3JhZ2Vfd3JhcHBlcihfQXJnJiBfX2FyZyk6Ci0gICAgICAgIF9fc3RvcmFnZSgmX19hcmcp
e30KLQotICAgIF9UeXBlJiBfX2dldCgpewotICAgICAgICByZXR1cm4gKl9fc3RvcmFnZTsKLSAg
ICB9Ci0gICAgY29uc3RleHByIF9UeXBlIGNvbnN0JiBfX2dldCgpIGNvbnN0ewotICAgICAgICBy
ZXR1cm4gKl9fc3RvcmFnZTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4K
LXN0cnVjdCBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSxmYWxzZT57Ci0gICAgdHlwZWRlZiBfX3N0
b3JhZ2Vfd3JhcHBlcjxfVHlwZT4gX190eXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlw
ZSYgX19nZXQoX190eXBlJiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBfX3ZhbC5fX2dldCgpOwot
ICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiYgX19nZXRfcnJlZihfX3R5cGUmIF9f
dmFsKXsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZShfX3ZhbC5fX2dldCgpKTsKLSAgICB9Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBfVHlwZSYgX19nZXQoX190eXBlIGNvbnN0JiBfX3Zh
bCl7Ci0gICAgICAgIHJldHVybiBfX3ZhbC5fX2dldCgpOwotICAgIH0KLSAgICBzdGF0aWMgY29u
c3RleHByIGNvbnN0IF9UeXBlJiYgX19nZXRfcnJlZihfX3R5cGUgY29uc3QmIF9fdmFsKXsKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6bW92ZShfX3ZhbC5fX2dldCgpKTsKLSAgICB9Ci0gICAgc3RhdGlj
IHZvaWQgX19kZXN0cm95KF9fdHlwZSYgX192YWwpewotICAgICAgICBfX3ZhbC5fX2Rlc3Ryb3ko
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSxib29sIF9fYj4KLXN0cnVj
dCBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYsX19iPnsKLSAgICB0eXBlZGVmIF9UeXBlKiBfX3R5
cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiBfX2dldChfX3R5cGUmIF9fdmFsKXsK
LSAgICAgICAgcmV0dXJuICpfX3ZhbDsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlw
ZSYgX19nZXRfcnJlZihfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuICpfX3ZhbDsKLSAg
ICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYgX19nZXQoX190eXBlIGNvbnN0JiBfX3Zh
bCl7Ci0gICAgICAgIHJldHVybiAqX192YWw7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIg
X1R5cGUmIF9fZ2V0X3JyZWYoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiAq
X192YWw7Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIF9fZGVzdHJveShfX3R5cGUmKXt9Ci19Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSxib29sIF9fYj4KLXN0cnVjdCBfX3ZhcmlhbnRfc3Rv
cmFnZTxfVHlwZSYmLF9fYj57Ci0gICAgdHlwZWRlZiBfVHlwZSogX190eXBlOwotCi0gICAgc3Rh
dGljIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0KF9fdHlwZSYgX192YWwpewotICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8X1R5cGUmJj4oKl9fdmFsKTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBfVHlwZSYmIF9fZ2V0X3JyZWYoX190eXBlJiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxfVHlwZSYmPigqX192YWwpOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHBy
IF9UeXBlJiYgX19nZXQoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxfVHlwZSYmPigqX192YWwpOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIF9U
eXBlJiYgX19nZXRfcnJlZihfX3R5cGUgY29uc3QmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PF9UeXBlJiY+KCpfX3ZhbCk7Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIF9fZGVz
dHJveShfX3R5cGUmKXt9Ci19OwotCi10ZW1wbGF0ZTw+Ci11bmlvbiBfX3ZhcmlhbnRfZGF0YTw+
ewotICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YSgpe30KLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIF9UeXBlPgotdW5pb24gX192YXJpYW50X2RhdGE8X1R5cGU+ewotICAgIHR5cGVuYW1lIF9f
dmFyaWFudF9zdG9yYWdlPF9UeXBlPjo6X190eXBlIF9fdmFsOwotICAgIHN0cnVjdCBfX2R1bW15
X3R5cGV7fSBfX2R1bW15OwotCi0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKCk6X19kdW1t
eSgpe30KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBjb25zdGV4cHIg
X192YXJpYW50X2RhdGEoaW5fcGxhY2VfaW5kZXhfdDwwPixfQXJncyYmIC4uLiBfX2FyZ3MpOgot
ICAgICAgICBfX3ZhbChzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pe30KLQotICAgIF9U
eXBlJiBfX2dldChpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFu
dF9zdG9yYWdlPF9UeXBlPjo6X19nZXQoX192YWwpOwotICAgIH0KLSAgICAvKmNvbnN0ZXhwciov
IF9UeXBlJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJu
IF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQotICAg
IGNvbnN0ZXhwciBjb25zdCBfVHlwZSYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPikgY29uc3R7
Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fZ2V0KF9fdmFsKTsK
LSAgICB9Ci0gICAgY29uc3RleHByIGNvbnN0IF9UeXBlJiYgX19nZXRfcnJlZihpbl9wbGFjZV9p
bmRleF90PDA+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBl
Pjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIHZvaWQgX19kZXN0cm95KGluX3BsYWNl
X2luZGV4X3Q8MD4pewotICAgICAgICBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fZGVzdHJv
eShfX3ZhbCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci11bmlvbiBf
X3ZhcmlhbnRfZGF0YTxfVHlwZSY+ewotICAgIHR5cGVuYW1lIF9fdmFyaWFudF9zdG9yYWdlPF9U
eXBlJj46Ol9fdHlwZSBfX3ZhbDsKLSAgICBzdHJ1Y3QgX19kdW1teV90eXBle30gX19kdW1teTsK
LQotICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YSgpOl9fZHVtbXkoKXt9Ci0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKGlu
X3BsYWNlX2luZGV4X3Q8MD4sX0FyZ3MmJiAuLi4gX19hcmdzKToKLSAgICAgICAgX192YWwoJnN0
ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLil7fQotCi0gICAgX1R5cGUmIF9fZ2V0KGluX3Bs
YWNlX2luZGV4X3Q8MD4pewotICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUm
Pjo6X19nZXQoX192YWwpOwotICAgIH0KLSAgICBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0KGluX3Bs
YWNlX2luZGV4X3Q8MD4pIGNvbnN0ewotICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8
X1R5cGUmPjo6X19nZXQoX192YWwpOwotICAgIH0KLQotICAgIF9UeXBlJiBfX2dldF9ycmVmKGlu
X3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5
cGUmPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBfVHlwZSYgX19n
ZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9fdmFy
aWFudF9zdG9yYWdlPF9UeXBlJj46Ol9fZ2V0X3JyZWYoX192YWwpOwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIF9fZGVzdHJveShpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgX192YXJpYW50
X3N0b3JhZ2U8X1R5cGUmPjo6X19kZXN0cm95KF9fdmFsKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBfVHlwZT4KLXVuaW9uIF9fdmFyaWFudF9kYXRhPF9UeXBlJiY+ewotICAgIHR5
cGVuYW1lIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJiY+OjpfX3R5cGUgX192YWw7Ci0gICAgc3Ry
dWN0IF9fZHVtbXlfdHlwZXt9IF9fZHVtbXk7Ci0KLSAgICBjb25zdGV4cHIgX192YXJpYW50X2Rh
dGEoKTpfX2R1bW15KCl7fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZz4KLSAgICBfX3Zh
cmlhbnRfZGF0YShpbl9wbGFjZV9pbmRleF90PDA+LF9BcmcmJiBfX2FyZyk6Ci0gICAgICAgIF9f
dmFsKCZfX2FyZyl7fQotCi0gICAgX1R5cGUmJiBfX2dldChpbl9wbGFjZV9pbmRleF90PDA+KXsK
LSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJiY+OjpfX2dldChfX3ZhbCk7
Ci0gICAgfQotICAgIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4p
IGNvbnN0ewotICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJj46Ol9fZ2V0
KF9fdmFsKTsKLSAgICB9Ci0gICAgX1R5cGUmJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8
MD4pewotICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJj46Ol9fZ2V0X3Jy
ZWYoX192YWwpOwotICAgIH0KLSAgICBjb25zdGV4cHIgX1R5cGUmJiBfX2dldF9ycmVmKGluX3Bs
YWNlX2luZGV4X3Q8MD4pIGNvbnN0ewotICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8
X1R5cGUmJj46Ol9fZ2V0X3JyZWYoX192YWwpOwotICAgIH0KLSAgICB2b2lkIF9fZGVzdHJveShp
bl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJj46
Ol9fZGVzdHJveShfX3ZhbCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQs
dHlwZW5hbWUgLi4uIF9SZXN0PgotdW5pb24gX192YXJpYW50X2RhdGE8X0hlYWQsX1Jlc3QuLi4+
ewotICAgIF9fdmFyaWFudF9kYXRhPF9IZWFkPiBfX2hlYWQ7Ci0gICAgX192YXJpYW50X2RhdGE8
X1Jlc3QuLi4+IF9fcmVzdDsKLQotICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YSgpOgotICAg
ICAgICBfX2hlYWQoKXt9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAg
Y29uc3RleHByIF9fdmFyaWFudF9kYXRhKGluX3BsYWNlX2luZGV4X3Q8MD4sX0FyZ3MmJiAuLi4g
X19hcmdzKToKLSAgICAgICAgX19oZWFkKGluX3BsYWNlPDA+LHN0ZDo6Zm9yd2FyZDxfQXJncz4o
X19hcmdzKS4uLil7fQotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9B
cmdzPgotICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YShpbl9wbGFjZV9pbmRleF90PF9JbmRl
eD4sX0FyZ3MmJiAuLi4gX19hcmdzKToKLSAgICAgICAgX19yZXN0KGluX3BsYWNlPF9JbmRleC0x
PixzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pe30KLQotICAgIF9IZWFkJiBfX2dldChp
bl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9faGVhZC5fX2dldChpbl9wbGFj
ZTwwPik7Ci0gICAgfQotCi0gICAgLypjb25zdGV4cHIqLyBfSGVhZCYmIF9fZ2V0X3JyZWYoaW5f
cGxhY2VfaW5kZXhfdDwwPil7Ci0gICAgICAgIHJldHVybiBfX2hlYWQuX19nZXRfcnJlZihpbl9w
bGFjZTwwPik7Ci0gICAgfQotICAgIAotICAgIGNvbnN0ZXhwciBjb25zdCBfSGVhZCYgX19nZXQo
aW5fcGxhY2VfaW5kZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX2hlYWQuX19nZXQo
aW5fcGxhY2U8MD4pOwotICAgIH0KLQotICAgIGNvbnN0ZXhwciBjb25zdCBfSGVhZCYmIF9fZ2V0
X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX2hlYWQu
X19nZXRfcnJlZihpbl9wbGFjZTwwPik7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHNpemVf
dCBfSW5kZXg+Ci0gICAgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LTEsX1Jlc3QuLi4+
OjpfX3R5cGUmIF9fZ2V0KAotICAgICAgICBpbl9wbGFjZV9pbmRleF90PF9JbmRleD4pewotICAg
ICAgICByZXR1cm4gX19yZXN0Ll9fZ2V0KGluX3BsYWNlPF9JbmRleC0xPik7Ci0gICAgfQotCi0g
ICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleD4KLSAgICAvKmNvbnN0ZXhwciovIHR5cGVuYW1lIF9f
aW5kZXhlZF90eXBlPF9JbmRleC0xLF9SZXN0Li4uPjo6X190eXBlJiYgX19nZXRfcnJlZigKLSAg
ICAgICAgaW5fcGxhY2VfaW5kZXhfdDxfSW5kZXg+KXsKLSAgICAgICAgcmV0dXJuIF9fcmVzdC5f
X2dldF9ycmVmKGluX3BsYWNlPF9JbmRleC0xPik7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRl
PHNpemVfdCBfSW5kZXg+Ci0gICAgY29uc3RleHByIGNvbnN0IHR5cGVuYW1lIF9faW5kZXhlZF90
eXBlPF9JbmRleC0xLF9SZXN0Li4uPjo6X190eXBlJiBfX2dldCgKLSAgICAgICAgaW5fcGxhY2Vf
aW5kZXhfdDxfSW5kZXg+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9fcmVzdC5fX2dldChpbl9w
bGFjZTxfSW5kZXgtMT4pOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0g
ICAgY29uc3RleHByIGNvbnN0IHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleC0xLF9SZXN0
Li4uPjo6X190eXBlJiYgX19nZXRfcnJlZigKLSAgICAgICAgaW5fcGxhY2VfaW5kZXhfdDxfSW5k
ZXg+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9fcmVzdC5fX2dldF9ycmVmKGluX3BsYWNlPF9J
bmRleC0xPik7Ci0gICAgfQotICAgIAotICAgIAotICAgIHZvaWQgX19kZXN0cm95KGluX3BsYWNl
X2luZGV4X3Q8MD4pewotICAgICAgICBfX2hlYWQuX19kZXN0cm95KGluX3BsYWNlPDA+KTsKLSAg
ICB9Ci0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleD4KLSAgICB2b2lkIF9fZGVzdHJveShpbl9w
bGFjZV9pbmRleF90PF9JbmRleD4pewotICAgICAgICBfX3Jlc3QuX19kZXN0cm95KGluX3BsYWNl
PF9JbmRleC0xPik7Ci0gICAgfQotfTsKLQotCi10ZW1wbGF0ZTxwdHJkaWZmX3QuLi4gX0luZGlj
ZXM+Ci1zdHJ1Y3QgX19pbmRleF9zZXF1ZW5jZXsKLSAgICB0eXBlZGVmIF9faW5kZXhfc2VxdWVu
Y2U8X0luZGljZXMuLi4sc2l6ZW9mLi4uKF9JbmRpY2VzKT4gX19uZXh0OwotICAgIHN0YXRpYyBj
b25zdGV4cHIgc2l6ZV90IF9fbGVuZ3RoPXNpemVvZi4uLihfSW5kaWNlcyk7Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdHlwZV9pbmRpY2VzOwotCi10ZW1w
bGF0ZTw+Ci1zdHJ1Y3QgX190eXBlX2luZGljZXM8PnsKLSAgICB0eXBlZGVmIF9faW5kZXhfc2Vx
dWVuY2U8PiBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBf
X3R5cGVfaW5kaWNlczxfVHlwZT57Ci0gICAgdHlwZWRlZiBfX2luZGV4X3NlcXVlbmNlPDA+IF9f
dHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfUmVzdD4K
LXN0cnVjdCBfX3R5cGVfaW5kaWNlczxfVHlwZSxfUmVzdC4uLj57Ci0gICAgdHlwZWRlZiB0eXBl
bmFtZSBfX3R5cGVfaW5kaWNlczxfUmVzdC4uLj46Ol9fdHlwZTo6X19uZXh0IF9fdHlwZTsKLX07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50Pgotc3RydWN0IF9fdmFyaWFudF9pbmRpY2Vz
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdmFyaWFudF9pbmRp
Y2VzPFZhcmlhbnQ8X1R5cGVzLi4uPj57Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfaW5k
aWNlczxfVHlwZXMuLi4+OjpfX3R5cGUgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
X1ZhcmlhbnQsCi0gICAgICAgICB0eXBlbmFtZSBfSW5kaWNlcz10eXBlbmFtZSBfX3ZhcmlhbnRf
aW5kaWNlczxfVmFyaWFudD46Ol9fdHlwZT4KLXN0cnVjdCBfX21vdmVfY29uc3RydWN0X29wX3Rh
YmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2Vz
Pgotc3RydWN0IF9fbW92ZV9jb25zdHJ1Y3Rfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1
ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fZnVuY190eXBl
KShfVmFyaWFudCosX1ZhcmlhbnQmKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0lu
ZGV4PgotICAgIHN0YXRpYyB2b2lkIF9fbW92ZV9jb25zdHJ1Y3RfZnVuYygKLSAgICAgICAgX1Zh
cmlhbnQgKiBfX2xocyxfVmFyaWFudCYgX19yaHMpewotICAgICAgICBfX2xocy0+dGVtcGxhdGUg
X19lbXBsYWNlX2NvbnN0cnVjdDxfSW5kZXg+KAotICAgICAgICAgICAgc3RkOjptb3ZlKGdldDxf
SW5kZXg+KF9fcmhzKSkpOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlwZSBf
X2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyldOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zh
cmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fbW92ZV9jb25z
dHJ1Y3Rfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoK
LV9fZnVuY190eXBlCi1fX21vdmVfY29uc3RydWN0X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhf
c2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19hcHBseVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMp
XT17Ci0gICAgICAgICZfX21vdmVfY29uc3RydWN0X2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0gICAgICAgICB0eXBlbmFtZSBfSW5kaWNl
cz10eXBlbmFtZSBfX3ZhcmlhbnRfaW5kaWNlczxfVmFyaWFudD46Ol9fdHlwZT4KLXN0cnVjdCBf
X21vdmVfYXNzaWduX29wX3RhYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJk
aWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9fbW92ZV9hc3NpZ25fb3BfdGFibGU8X1Zhcmlh
bnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNv
bnN0IF9fZnVuY190eXBlKShfVmFyaWFudCosX1ZhcmlhbnQmKTsKLSAgICAKLSAgICB0ZW1wbGF0
ZTxwdHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyB2b2lkIF9fbW92ZV9hc3NpZ25fZnVuYygK
LSAgICAgICAgX1ZhcmlhbnQgKiBfX2xocyxfVmFyaWFudCYgX19yaHMpewotICAgICAgICBnZXQ8
X0luZGV4PigqX19saHMpPXN0ZDo6bW92ZShnZXQ8X0luZGV4PihfX3JocykpOwotICAgIH0KLQot
ICAgIHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlwZSBfX2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyld
OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNl
cz4KLWNvbnN0IHR5cGVuYW1lIF9fbW92ZV9hc3NpZ25fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRl
eF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKLV9fZnVuY190eXBlCi1fX21vdmVfYXNzaWduX29w
X3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19hcHBseVsK
LSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX21vdmVfYXNzaWduX2Z1bmM8
X0luZGljZXM+Li4uCi0gICAgfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0gICAg
ICAgICB0eXBlbmFtZSBfSW5kaWNlcz10eXBlbmFtZSBfX3ZhcmlhbnRfaW5kaWNlczxfVmFyaWFu
dD46Ol9fdHlwZT4KLXN0cnVjdCBfX2NvcHlfY29uc3RydWN0X29wX3RhYmxlOwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9fY29w
eV9jb25zdHJ1Y3Rfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4u
Lj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fZnVuY190eXBlKShfVmFyaWFudCosX1Zh
cmlhbnQgY29uc3QmKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4PgotICAg
IHN0YXRpYyB2b2lkIF9fY29weV9jb25zdHJ1Y3RfZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgKiBf
X2xocyxfVmFyaWFudCBjb25zdCYgX19yaHMpewotICAgICAgICBfX2xocy0+dGVtcGxhdGUgX19l
bXBsYWNlX2NvbnN0cnVjdDxfSW5kZXg+KAotICAgICAgICAgICAgZ2V0PF9JbmRleD4oX19yaHMp
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgX19mdW5jX3R5cGUgX19hcHBseVtzaXplb2Yu
Li4oX0luZGljZXMpXTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZf
dCAuLi4gX0luZGljZXM+Ci1jb25zdCB0eXBlbmFtZSBfX2NvcHlfY29uc3RydWN0X29wX3RhYmxl
PF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6Ci1fX2Z1bmNfdHlwZQot
X19jb3B5X2NvbnN0cnVjdF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRp
Y2VzLi4uPj46Ol9fYXBwbHlbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09ewotICAgICAgICAm
X19jb3B5X2NvbnN0cnVjdF9mdW5jPF9JbmRpY2VzPi4uLgotICAgIH07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIF9WYXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192
YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19jb3B5X2Fzc2lnbl9v
cF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5k
aWNlcz4KLXN0cnVjdCBfX2NvcHlfYXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2Vx
dWVuY2U8X0luZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Z1bmNfdHlw
ZSkoX1ZhcmlhbnQqLF9WYXJpYW50IGNvbnN0Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlm
Zl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX2NvcHlfYXNzaWduX2Z1bmMoCi0gICAgICAg
IF9WYXJpYW50ICogX19saHMsX1ZhcmlhbnQgY29uc3QmIF9fcmhzKXsKLSAgICAgICAgZ2V0PF9J
bmRleD4oKl9fbGhzKT1nZXQ8X0luZGV4PihfX3Jocyk7Ci0gICAgfQotCi0gICAgc3RhdGljIGNv
bnN0IF9fZnVuY190eXBlIF9fYXBwbHlbc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlw
ZW5hbWUgX19jb3B5X2Fzc2lnbl9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9J
bmRpY2VzLi4uPj46OgotX19mdW5jX3R5cGUKLV9fY29weV9hc3NpZ25fb3BfdGFibGU8X1Zhcmlh
bnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2FwcGx5WwotICAgIHNpemVvZi4u
LihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9fY29weV9hc3NpZ25fZnVuYzxfSW5kaWNlcz4uLi4K
LSAgICB9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1l
IF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgot
c3RydWN0IF9fZGVzdHJveV9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQs
cHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX2Rlc3Ryb3lfb3BfdGFibGU8X1Zhcmlh
bnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNv
bnN0IF9fZnVuY190eXBlKShfVmFyaWFudCopOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRpZmZf
dCBfSW5kZXg+Ci0gICAgc3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMoCi0gICAgICAgIF9WYXJp
YW50ICogX19zZWxmKXsKLSAgICAgICAgaWYoX19zZWxmLT5fX2luZGV4Pj0wKXsKLSAgICAgICAg
ICAgIF9fc2VsZi0+X19zdG9yYWdlLl9fZGVzdHJveShpbl9wbGFjZTxfSW5kZXg+KTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlwZSBfX2FwcGx5W3NpemVv
Zi4uLihfSW5kaWNlcyldOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlm
Zl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fZGVzdHJveV9vcF90YWJsZTxfVmFy
aWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46OgotX19mdW5jX3R5cGUKLV9fZGVz
dHJveV9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9f
YXBwbHlbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09ewotICAgICAgICAmX19kZXN0cm95X2Z1
bmM8X0luZGljZXM+Li4uCi0gICAgfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0g
ICAgICAgICB0eXBlbmFtZSBfSW5kaWNlcz10eXBlbmFtZSBfX3ZhcmlhbnRfaW5kaWNlczxfVmFy
aWFudD46Ol9fdHlwZT4KLXN0cnVjdCBfX3N3YXBfb3BfdGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX19zd2FwX29wX3Rh
YmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKLSAgICB0eXBlZGVm
IHZvaWQoKiBjb25zdCBfX2Z1bmNfdHlwZSkoX1ZhcmlhbnQmLF9WYXJpYW50Jik7Ci0gICAgCi0g
ICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX3N3YXBfZnVu
YygKLSAgICAgICAgX1ZhcmlhbnQgJiBfX2xocyxfVmFyaWFudCAmIF9fcmhzKXsKLSAgICAgICAg
c3dhcChnZXQ8X0luZGV4PihfX2xocyksZ2V0PF9JbmRleD4oX19yaHMpKTsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgY29uc3QgX19mdW5jX3R5cGUgX19hcHBseVtzaXplb2YuLi4oX0luZGljZXMpXTsK
LX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+
Ci1jb25zdCB0eXBlbmFtZSBfX3N3YXBfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5j
ZTxfSW5kaWNlcy4uLj4+OjoKLV9fZnVuY190eXBlCi1fX3N3YXBfb3BfdGFibGU8X1ZhcmlhbnQs
X19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2FwcGx5WwotICAgIHNpemVvZi4uLihf
SW5kaWNlcyldPXsKLSAgICAgICAgJl9fc3dhcF9mdW5jPF9JbmRpY2VzPi4uLgotICAgIH07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9
dHlwZW5hbWUgX192YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19l
cXVhbGl0eV9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90
IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX2VxdWFsaXR5X29wX3RhYmxlPF9WYXJpYW50LF9faW5k
ZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIGJvb2woKiBjb25zdCBfX2Nv
bXBhcmVfZnVuY190eXBlKShfVmFyaWFudCBjb25zdCYsX1ZhcmlhbnQgY29uc3QmKTsKLSAgICAK
LSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBfX2VxdWFsaXR5X2NvbXBhcmVfZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgY29uc3QmIF9fbGhz
LF9WYXJpYW50IGNvbnN0JiBfX3Jocyl7Ci0gICAgICAgIHJldHVybiBnZXQ8X0luZGV4PihfX2xo
cyk9PWdldDxfSW5kZXg+KF9fcmhzKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIF9f
Y29tcGFyZV9mdW5jX3R5cGUgX19lcXVhbGl0eV9jb21wYXJlW3NpemVvZi4uLihfSW5kaWNlcyld
PXsKLSAgICAgICAgJl9fZXF1YWxpdHlfY29tcGFyZV9mdW5jPF9JbmRpY2VzPi4uLgotICAgIH07
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2Vz
PgotY29uc3RleHByIHR5cGVuYW1lIF9fZXF1YWxpdHlfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRl
eF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKLV9fY29tcGFyZV9mdW5jX3R5cGUKLV9fZXF1YWxp
dHlfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2Vx
dWFsaXR5X2NvbXBhcmVbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIF9WYXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192
YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19sZXNzX3RoYW5fb3Bf
dGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGlj
ZXM+Ci1zdHJ1Y3QgX19sZXNzX3RoYW5fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5j
ZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgYm9vbCgqIGNvbnN0IF9fY29tcGFyZV9mdW5j
X3R5cGUpKF9WYXJpYW50IGNvbnN0JixfVmFyaWFudCBjb25zdCYpOwotICAgIAotICAgIHRlbXBs
YXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fbGVzc190
aGFuX2NvbXBhcmVfZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgY29uc3QmIF9fbGhzLF9WYXJpYW50
IGNvbnN0JiBfX3Jocyl7Ci0gICAgICAgIHJldHVybiBnZXQ8X0luZGV4PihfX2xocyk8Z2V0PF9J
bmRleD4oX19yaHMpOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdGV4cHIgX19jb21wYXJlX2Z1
bmNfdHlwZSBfX2xlc3NfdGhhbl9jb21wYXJlW3NpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAg
ICAgJl9fbGVzc190aGFuX2NvbXBhcmVfZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OwotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0
ZXhwciB0eXBlbmFtZSBfX2xlc3NfdGhhbl9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVl
bmNlPF9JbmRpY2VzLi4uPj46OgotX19jb21wYXJlX2Z1bmNfdHlwZQotX19sZXNzX3RoYW5fb3Bf
dGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2xlc3NfdGhh
bl9jb21wYXJlWwotICAgIHNpemVvZi4uLihfSW5kaWNlcyldOwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfVmFyaWFudD4KLXN0cnVjdCBfX3ZhcmlhbnRfc3RvcmFnZV90eXBlOwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBfRGVyaXZlZCxib29sIF9fdHJpdmlhbF9kZXN0cnVjdG9yPgotc3RydWN0IF9fdmFy
aWFudF9iYXNlCi17Ci0gICAgfl9fdmFyaWFudF9iYXNlKCl7Ci0gICAgICAgIHN0YXRpY19jYXN0
PF9EZXJpdmVkKj4odGhpcyktPl9fZGVzdHJveV9zZWxmKCk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgX0Rlcml2ZWQ+Ci1zdHJ1Y3QgX192YXJpYW50X2Jhc2U8X0Rlcml2ZWQsdHJ1
ZT57Ci19OwotCi0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfT2Zmc2V0LHR5cGVuYW1lIF9DdXJyZW50
U2VxdWVuY2UsCi0gICAgICAgICB0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgot
c3RydWN0IF9fYWxsX2luZGljZXNfaGVscGVyOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNl
dCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzLAotICAgICAgICAgdHlwZW5hbWUgX1R5cGUsdHlwZW5h
bWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fYWxsX2luZGljZXNfaGVscGVyPAotICAgIF9PZmZzZXQs
X19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4sCi0gICAgX1R5cGUsX1R5cGUsX1Jlc3QuLi4+
ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hbGxfaW5kaWNlc19oZWxwZXI8Ci0gICAgICAgIF9P
ZmZzZXQrMSxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uLF9PZmZzZXQ+LF9UeXBlLF9SZXN0
Li4uPjo6X190eXBlCi0gICAgICAgIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBf
T2Zmc2V0LHR5cGVuYW1lIF9DdXJyZW50U2VxdWVuY2UsCi0gICAgICAgICB0eXBlbmFtZSBfVHlw
ZSx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfaW5kaWNl
c19oZWxwZXI8X09mZnNldCxfQ3VycmVudFNlcXVlbmNlLF9UeXBlLF9IZWFkLF9SZXN0Li4uPnsK
LSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fYWxsX2luZGljZXNfaGVscGVyPAotICAgICAgICBfT2Zm
c2V0KzEsX0N1cnJlbnRTZXF1ZW5jZSxfVHlwZSxfUmVzdC4uLj46Ol9fdHlwZSBfX3R5cGU7Ci19
OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBfQ3VycmVudFNlcXVlbmNl
LHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fYWxsX2luZGljZXNfaGVscGVyPF9PZmZzZXQsX0N1
cnJlbnRTZXF1ZW5jZSxfVHlwZT57Ci0gICAgdHlwZWRlZiBfQ3VycmVudFNlcXVlbmNlIF9fdHlw
ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1z
dHJ1Y3QgX19hbGxfaW5kaWNlc3sKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fYWxsX2luZGljZXNf
aGVscGVyPAotICAgICAgICAwLF9faW5kZXhfc2VxdWVuY2U8PixfVHlwZSxfVHlwZXMuLi4+Ojpf
X3R5cGUgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9TZXF1ZW5jZXM+Ci1z
dHJ1Y3QgX19jb21iaW5lX3NlcXVlbmNlczsKLQotdGVtcGxhdGU8cHRyZGlmZl90IC4uLiBfSW5k
aWNlczEscHRyZGlmZl90IC4uLiBfSW5kaWNlczI+Ci1zdHJ1Y3QgX19jb21iaW5lX3NlcXVlbmNl
czwKLSAgICBfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzMS4uLj4sX19pbmRleF9zZXF1ZW5jZTxf
SW5kaWNlczIuLi4+PnsKLSAgICB0eXBlZGVmIF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMxLi4u
LF9JbmRpY2VzMi4uLj4gX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1NlcXVlbmNl
LHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2NvbWJpbmVfc2VxdWVuY2VzPF9TZXF1ZW5j
ZSxfUmVzdC4uLj57Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2NvbWJpbmVfc2VxdWVuY2VzPAot
ICAgICAgICBfU2VxdWVuY2UsCi0gICAgICAgIHR5cGVuYW1lIF9fY29tYmluZV9zZXF1ZW5jZXM8
X1Jlc3QuLi4+OjpfX3R5cGU+OjpfX3R5cGUgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgX0luZGljZXM+Ci1zdHJ1Y3QgX19maXJzdF9pbmRleDsKLQotdGVtcGxhdGU8cHRyZGlmZl90
IF9GaXJzdEluZGV4LHB0cmRpZmZfdCAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19maXJzdF9pbmRleDxf
X2luZGV4X3NlcXVlbmNlPF9GaXJzdEluZGV4LF9SZXN0Li4uPj57Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBwdHJkaWZmX3QgX192YWx1ZT1fRmlyc3RJbmRleDsKLX07Ci0KLXRlbXBsYXRlPHB0cmRp
ZmZfdCBfT2Zmc2V0LHR5cGVuYW1lIF9DdXJyZW50U2VxdWVuY2UsCi0gICAgICAgICB0eXBlbmFt
ZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fY29uc3RydWN0aWJsZV9tYXRj
aGVzX2hlbHBlcjsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX1NlcXVl
bmNlLHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fY29uc3RydWN0aWJsZV9tYXRjaGVzX2hlbHBl
cjwKLSAgICBfT2Zmc2V0LF9TZXF1ZW5jZSxfVHlwZT57Ci0gICAgdHlwZWRlZiBfU2VxdWVuY2Ug
X190eXBlOwotfTsKLQotdGVtcGxhdGU8Ym9vbCBfQWNjZXB0LHB0cmRpZmZfdCBfRW50cnk+Ci1z
dHJ1Y3QgX19zZXF1ZW5jZV9vcl9lbXB0eXsKLSAgICB0eXBlZGVmIF9faW5kZXhfc2VxdWVuY2U8
PiBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0VudHJ5Pgotc3RydWN0IF9fc2Vx
dWVuY2Vfb3JfZW1wdHk8dHJ1ZSxfRW50cnk+ewotICAgIHR5cGVkZWYgX19pbmRleF9zZXF1ZW5j
ZTxfRW50cnk+IF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfT2Zmc2V0LHR5cGVu
YW1lIF9DdXJyZW50U2VxdWVuY2UsCi0gICAgICAgICB0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSBf
SGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19jb25zdHJ1Y3RpYmxlX21hdGNoZXNf
aGVscGVyPAotICAgIF9PZmZzZXQsX0N1cnJlbnRTZXF1ZW5jZSxfVHlwZSxfSGVhZCxfUmVzdC4u
Lj57Ci0gICAgdHlwZWRlZgotICAgIHR5cGVuYW1lIF9fY29uc3RydWN0aWJsZV9tYXRjaGVzX2hl
bHBlcjwKLSAgICAgICAgX09mZnNldCsxLAotICAgICAgICB0eXBlbmFtZSBfX2NvbWJpbmVfc2Vx
dWVuY2VzPAotICAgICAgICAgICAgX0N1cnJlbnRTZXF1ZW5jZSwKLSAgICAgICAgICAgIHR5cGVu
YW1lIF9fc2VxdWVuY2Vfb3JfZW1wdHk8Ci0gICAgICAgICAgICAgICAgc3RkOjppc19jb25zdHJ1
Y3RpYmxlPF9IZWFkLF9UeXBlPjo6dmFsdWUsCi0gICAgICAgICAgICAgICAgX09mZnNldD46Ol9f
dHlwZT46Ol9fdHlwZSwKLSAgICAgICAgX1R5cGUsX1Jlc3QuLi4+OjpfX3R5cGUgX190eXBlOwot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVj
dCBfX2NvbnN0cnVjdGlibGVfbWF0Y2hlc3sKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fY29uc3Ry
dWN0aWJsZV9tYXRjaGVzX2hlbHBlcjwKLSAgICAgICAgMCxfX2luZGV4X3NlcXVlbmNlPD4sX1R5
cGUsX1R5cGVzLi4uPjo6X190eXBlIF9fdHlwZTsKLX07Cit1c2luZyBNb25vc3RhdGUgPSBzdGQ6
Om1vbm9zdGF0ZTsKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPgordXNpbmcgVmFyaWFudCA9
IHN0ZDo6dmFyaWFudDxUeXBlcy4uLj47CiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX190eXBlX2luZGV4X3RvX2NvbnN0cnVjdHsKLSAgICB0
eXBlZGVmIHR5cGVuYW1lIF9fYWxsX2luZGljZXM8X1R5cGUsX1R5cGVzLi4uPjo6X190eXBlIF9f
ZGlyZWN0X21hdGNoZXM7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2FsbF9pbmRpY2VzPAotICAg
ICAgICB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDwKLSAgICAgICAgICAgIHR5cGVuYW1lIHN0
ZDo6cmVtb3ZlX3JlZmVyZW5jZTxfVHlwZT46OnR5cGUKLSAgICAgICAgICAgID46OnR5cGUsX1R5
cGVzLi4uPjo6X190eXBlIF9fdmFsdWVfbWF0Y2hlczsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9f
YWxsX2luZGljZXM8Ci0gICAgICAgIF9UeXBlLAotICAgICAgICB0eXBlbmFtZSBzdGQ6OnJlbW92
ZV9jb25zdDwKLSAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxfVHlw
ZXM+Ojp0eXBlCi0gICAgICAgICAgICA+Ojp0eXBlLi4uPjo6X190eXBlIF9fcnJlZl9tYXRjaGVz
OwotCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2NvbnN0cnVjdGlibGVfbWF0Y2hlczxfVHlwZSxf
VHlwZXMuLi4+OjpfX3R5cGUKLSAgICBfX2NvbnN0cnVjdGlibGVzOwotCi0gICAgc3RhdGljX2Fz
c2VydCgKLSAgICAgICAgKF9fZGlyZWN0X21hdGNoZXM6Ol9fbGVuZ3RoPjApIHx8Ci0gICAgICAg
IChfX3ZhbHVlX21hdGNoZXM6Ol9fbGVuZ3RoPjApIHx8Ci0gICAgICAgIChfX3JyZWZfbWF0Y2hl
czo6X19sZW5ndGg+MCkgfHwKLSAgICAgICAgKF9fY29uc3RydWN0aWJsZXM6Ol9fbGVuZ3RoPT0x
KSwKLSAgICAgICAgIkZvciBjb252ZXJzaW9uIGNvbnN0cnVjdGlvbiBvZiB2YXJpYW50cywgZXhh
Y3RseSBvbmUgdHlwZSBtdXN0IGJlIGNvbnN0cnVjdGlibGUiKTsKLSAgICAKLSAgICB0eXBlZGVm
IHR5cGVuYW1lIF9fY29tYmluZV9zZXF1ZW5jZXM8Ci0gICAgICAgIF9fZGlyZWN0X21hdGNoZXMs
X192YWx1ZV9tYXRjaGVzLF9fcnJlZl9tYXRjaGVzLAotICAgICAgICBfX2NvbnN0cnVjdGlibGVz
Pjo6X190eXBlIF9fYWxsX21hdGNoZXM7Ci0gICAgCi0gICAgc3RhdGljIGNvbnN0ZXhwciBwdHJk
aWZmX3QgX192YWx1ZT1fX2ZpcnN0X2luZGV4PF9fYWxsX21hdGNoZXM+OjpfX3ZhbHVlOwotfTsK
LQotc3RydWN0IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyewotICAgIHRlbXBsYXRlPAotICAg
ICAgICBwdHJkaWZmX3QgX0luZGV4LAotICAgICAgICBib29sIF9fY29uc3RydWN0X2RpcmVjdGx5
LAotICAgICAgICBib29sIF9faW5kZXhlZF90eXBlX2hhc19ub3Rocm93X21vdmUsCi0gICAgICAg
IGJvb2wgX19vdGhlcl90eXBlc19oYXZlX25vdGhyb3dfbW92ZT4KLSAgICBzdHJ1Y3QgX19oZWxw
ZXI7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgICAgICB0eXBl
bmFtZSBfSW5kaWNlcz10eXBlbmFtZSBfX3ZhcmlhbnRfaW5kaWNlczxfVmFyaWFudD46Ol9fdHlw
ZT4KLSAgICBzdHJ1Y3QgX19vcF90YWJsZTsKLX07Ci0KLXRlbXBsYXRlPAotICAgIHB0cmRpZmZf
dCBfSW5kZXgsCi0gICAgYm9vbCBfX290aGVyX3R5cGVzX2hhdmVfbm90aHJvd19tb3ZlPgotc3Ry
dWN0IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX2hlbHBlcjwKLSAgICBfSW5kZXgsZmFs
c2UsdHJ1ZSxfX290aGVyX3R5cGVzX2hhdmVfbm90aHJvd19tb3ZlPnsKLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIF9WYXJpYW50LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBzdGF0aWMgdm9pZCBf
X3RyYW1wb2xpbmUoX1ZhcmlhbnQmIF9fdixfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICBf
X3YudGVtcGxhdGUgX190d29fc3RhZ2VfcmVwbGFjZTxfSW5kZXg+KF9fYXJncy4uLik7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8Ci0gICAgcHRyZGlmZl90IF9JbmRleCwKLSAgICBib29sIF9faW5k
ZXhlZF90eXBlX2hhc19ub3Rocm93X21vdmUsCi0gICAgYm9vbCBfX290aGVyX3R5cGVzX2hhdmVf
bm90aHJvd19tb3ZlPgotc3RydWN0IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX2hlbHBl
cjwKLSAgICBfSW5kZXgsdHJ1ZSxfX2luZGV4ZWRfdHlwZV9oYXNfbm90aHJvd19tb3ZlLAotICAg
IF9fb3RoZXJfdHlwZXNfaGF2ZV9ub3Rocm93X21vdmU+ewotCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgX1ZhcmlhbnQsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHN0YXRpYyB2b2lkIF9fdHJhbXBv
bGluZShfVmFyaWFudCYgX192LF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIF9fdi50ZW1w
bGF0ZSBfX2RpcmVjdF9yZXBsYWNlPF9JbmRleD4oc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3Mp
Li4uKTsKLSAgICB9Ci19OwotCi0KLXRlbXBsYXRlPAotICAgIHB0cmRpZmZfdCBfSW5kZXg+Ci1z
dHJ1Y3QgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9faGVscGVyPAotICAgIF9JbmRleCxm
YWxzZSxmYWxzZSx0cnVlPnsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHR5cGVu
YW1lIC4uLiBfQXJncz4KLSAgICBzdGF0aWMgdm9pZCBfX3RyYW1wb2xpbmUoX1ZhcmlhbnQmIF9f
dixfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICBfX3YudGVtcGxhdGUgX19sb2NhbF9iYWNr
dXBfcmVwbGFjZTxfSW5kZXg+KHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8Ci0gICAgcHRyZGlmZl90IF9JbmRleD4KLXN0cnVjdCBfX3JlcGxh
Y2VfY29uc3RydWN0X2hlbHBlcjo6X19oZWxwZXI8Ci0gICAgX0luZGV4LGZhbHNlLGZhbHNlLGZh
bHNlPnsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHR5cGVuYW1lIC4uLiBfQXJn
cz4KLSAgICBzdGF0aWMgdm9pZCBfX3RyYW1wb2xpbmUoX1ZhcmlhbnQmIF9fdixfQXJncyYmIC4u
LiBfX2FyZ3MpewotICAgICAgICBfX3YudGVtcGxhdGUgX19kaXJlY3RfcmVwbGFjZTxfSW5kZXg+
KHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX3JlcGxh
Y2VfY29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNl
PF9JbmRpY2VzLi4uPj57Ci0gICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19tb3ZlX2Z1bmNfdHlw
ZSkoX1ZhcmlhbnQqLF9WYXJpYW50Jik7Ci0gICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19jb3B5
X2Z1bmNfdHlwZSkoX1ZhcmlhbnQqLF9WYXJpYW50IGNvbnN0Jik7Ci0gICAgCi0gICAgdGVtcGxh
dGU8cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX21vdmVfYXNzaWduX2Z1bmMo
Ci0gICAgICAgIF9WYXJpYW50ICogX19saHMsX1ZhcmlhbnQmIF9fcmhzKXsKLSAgICAgICAgX19s
aHMtPnRlbXBsYXRlIF9fcmVwbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PihzdGQ6Om1vdmUoZ2V0PF9J
bmRleD4oX19yaHMpKSk7Ci0gICAgICAgIF9fcmhzLl9fZGVzdHJveV9zZWxmKCk7Ci0gICAgfQot
Ci0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX2NvcHlf
YXNzaWduX2Z1bmMoCi0gICAgICAgIF9WYXJpYW50ICogX19saHMsX1ZhcmlhbnQgY29uc3QmIF9f
cmhzKXsKLSAgICAgICAgX19saHMtPnRlbXBsYXRlIF9fcmVwbGFjZV9jb25zdHJ1Y3Q8X0luZGV4
PihnZXQ8X0luZGV4PihfX3JocykpOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgY29uc3QgX19t
b3ZlX2Z1bmNfdHlwZSBfX21vdmVfYXNzaWduW3NpemVvZi4uLihfSW5kaWNlcyldOwotICAgIHN0
YXRpYyBjb25zdCBfX2NvcHlfZnVuY190eXBlIF9fY29weV9hc3NpZ25bc2l6ZW9mLi4uKF9JbmRp
Y2VzKV07Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9J
bmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3Bf
dGFibGU8Ci0gICAgX1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX21v
dmVfZnVuY190eXBlCi1fX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTwKLSAg
ICBfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fbW92ZV9hc3NpZ25b
Ci0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09ewotICAgICAgICAmX19tb3ZlX2Fzc2lnbl9mdW5j
PF9JbmRpY2VzPi4uLgotICAgIH07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRp
ZmZfdCAuLi4gX0luZGljZXM+Ci1jb25zdCB0eXBlbmFtZSBfX3JlcGxhY2VfY29uc3RydWN0X2hl
bHBlcjo6X19vcF90YWJsZTwKLSAgICBfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2Vz
Li4uPj46Ol9fY29weV9mdW5jX3R5cGUKLV9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29w
X3RhYmxlPAotICAgIF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19j
b3B5X2Fzc2lnblsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX2NvcHlf
YXNzaWduX2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9J
bmRleCxwdHJkaWZmX3QgX01hc2tJbmRleCx0eXBlbmFtZSBfU3RvcmFnZT4KLXN0cnVjdCBfX2Jh
Y2t1cF9zdG9yYWdlX29wc3sKLSAgICBzdGF0aWMgdm9pZCBfX21vdmVfY29uc3RydWN0X2Z1bmMo
Ci0gICAgICAgIF9TdG9yYWdlICogX19kZXN0LF9TdG9yYWdlJiBfX3NvdXJjZSl7Ci0gICAgICAg
IG5ldyhfX2Rlc3QpIF9TdG9yYWdlKAotICAgICAgICAgICAgaW5fcGxhY2U8X0luZGV4PiwKLSAg
ICAgICAgICAgIHN0ZDo6bW92ZShfX3NvdXJjZS5fX2dldChpbl9wbGFjZTxfSW5kZXg+KSkpOwot
ICAgIH0KLSAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3lfZnVuYyhfU3RvcmFnZSAqIF9fb2JqKXsK
LSAgICAgICAgX19vYmotPl9fZGVzdHJveShpbl9wbGFjZTxfSW5kZXg+KTsKLSAgICB9OwotfTsK
LQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSBfU3RvcmFnZT4KLXN0cnVjdCBf
X2JhY2t1cF9zdG9yYWdlX29wczxfSW5kZXgsX0luZGV4LF9TdG9yYWdlPnsKLSAgICBzdGF0aWMg
dm9pZCBfX21vdmVfY29uc3RydWN0X2Z1bmMoX1N0b3JhZ2UgKixfU3RvcmFnZSYpewotICAgICAg
ICBfX1RIUk9XX0VYQ0VQVElPTihzdGQ6OmJhZF9hbGxvYygpKTsKLSAgICB9OwotICAgIHN0YXRp
YyB2b2lkIF9fZGVzdHJveV9mdW5jKF9TdG9yYWdlICopewotICAgICAgICBfX1RIUk9XX0VYQ0VQ
VElPTihzdGQ6OmJhZF9hbGxvYygpKTsKLSAgICB9OwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90
IF9NYXNrSW5kZXgsdHlwZW5hbWUgX1N0b3JhZ2UsdHlwZW5hbWUgX0luZGljZXM+Ci1zdHJ1Y3Qg
X19iYWNrdXBfc3RvcmFnZV9vcF90YWJsZTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9NYXNrSW5k
ZXgsdHlwZW5hbWUgX1N0b3JhZ2UscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX2Jh
Y2t1cF9zdG9yYWdlX29wX3RhYmxlPAotICAgIF9NYXNrSW5kZXgsX1N0b3JhZ2UsX19pbmRleF9z
ZXF1ZW5jZTxfSW5kaWNlcy4uLj4gPgotewotICAgIHR5cGVkZWYgdm9pZCAoKl9fbW92ZV9mdW5j
X3R5cGUpKF9TdG9yYWdlICogX19kZXN0LF9TdG9yYWdlJiBfX3NvdXJjZSk7Ci0gICAgdHlwZWRl
ZiB2b2lkICgqX19kZXN0cm95X2Z1bmNfdHlwZSkoX1N0b3JhZ2UgKiBfX29iaik7Ci0gICAgCi0g
ICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleD4KLSAgICBzdHJ1Y3QgX19oZWxwZXJ7Ci0gICAgICAg
IHR5cGVkZWYgX19iYWNrdXBfc3RvcmFnZV9vcHM8X0luZGV4LF9NYXNrSW5kZXgsX1N0b3JhZ2U+
IF9fb3BzOwotICAgIH07Ci0KLSAgICBzdGF0aWMgY29uc3QgX19tb3ZlX2Z1bmNfdHlwZSBfX21v
dmVfb3BzW3NpemVvZi4uLihfSW5kaWNlcyldOwotICAgIHN0YXRpYyBjb25zdCBfX2Rlc3Ryb3lf
ZnVuY190eXBlIF9fZGVzdHJveV9vcHNbc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci19OwotCi10ZW1w
bGF0ZTxwdHJkaWZmX3QgX01hc2tJbmRleCx0eXBlbmFtZSBfU3RvcmFnZSxwdHJkaWZmX3QgLi4u
IF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19iYWNrdXBfc3RvcmFnZV9vcF90YWJsZTwKLSAg
ICBfTWFza0luZGV4LF9TdG9yYWdlLF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+ID46Ol9f
bW92ZV9mdW5jX3R5cGUKLV9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8Ci0gICAgX01hc2tJbmRl
eCxfU3RvcmFnZSxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiA+OjpfX21vdmVfb3BzWwot
ICAgICAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX2hlbHBlcjxfSW5kaWNl
cz46Ol9fb3BzOjpfX21vdmVfY29uc3RydWN0X2Z1bmMuLi4KLSAgICB9OwotCi10ZW1wbGF0ZTxw
dHJkaWZmX3QgX01hc2tJbmRleCx0eXBlbmFtZSBfU3RvcmFnZSxwdHJkaWZmX3QgLi4uIF9JbmRp
Y2VzPgotY29uc3QgdHlwZW5hbWUgX19iYWNrdXBfc3RvcmFnZV9vcF90YWJsZTwKLSAgICBfTWFz
a0luZGV4LF9TdG9yYWdlLF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+ID46Ol9fZGVzdHJv
eV9mdW5jX3R5cGUKLV9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8Ci0gICAgX01hc2tJbmRleCxf
U3RvcmFnZSxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiA+OjpfX2Rlc3Ryb3lfb3BzWwot
ICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9faGVscGVyPF9JbmRpY2VzPjo6
X19vcHM6Ol9fZGVzdHJveV9mdW5jLi4uCi0gICAgfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9J
bmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2V7Ci0gICAg
dHlwZWRlZiBfX3ZhcmlhbnRfZGF0YTxfVHlwZXMuLi4+IF9fc3RvcmFnZV90eXBlOwotCi0gICAg
dHlwZWRlZiBfX2JhY2t1cF9zdG9yYWdlX29wX3RhYmxlPAotICAgICAgICBfSW5kZXgsX19zdG9y
YWdlX3R5cGUsdHlwZW5hbWUgX190eXBlX2luZGljZXM8X1R5cGVzLi4uPjo6X190eXBlPgotICAg
IF9fb3BfdGFibGVfdHlwZTsKLQotICAgIHB0cmRpZmZfdCBfX2JhY2t1cF9pbmRleDsKLSAgICBf
X3N0b3JhZ2VfdHlwZSYgX19saXZlX3N0b3JhZ2U7Ci0gICAgX19zdG9yYWdlX3R5cGUgX19iYWNr
dXA7Ci0KLSAgICBfX2JhY2t1cF9zdG9yYWdlKHB0cmRpZmZfdCBfX2xpdmVfaW5kZXhfLF9fc3Rv
cmFnZV90eXBlJiBfX2xpdmVfc3RvcmFnZV8pOgotICAgICAgICBfX2JhY2t1cF9pbmRleChfX2xp
dmVfaW5kZXhfKSxfX2xpdmVfc3RvcmFnZShfX2xpdmVfc3RvcmFnZV8pewotICAgICAgICBpZihf
X2JhY2t1cF9pbmRleD49MCl7Ci0gICAgICAgICAgICBfX29wX3RhYmxlX3R5cGU6Ol9fbW92ZV9v
cHNbX19iYWNrdXBfaW5kZXhdKAotICAgICAgICAgICAgICAgICZfX2JhY2t1cCxfX2xpdmVfc3Rv
cmFnZSk7Ci0gICAgICAgICAgICBfX29wX3RhYmxlX3R5cGU6Ol9fZGVzdHJveV9vcHNbX19iYWNr
dXBfaW5kZXhdKAotICAgICAgICAgICAgICAgICZfX2xpdmVfc3RvcmFnZSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgdm9pZCBfX2Rlc3Ryb3koKXsKLSAgICAgICAgaWYoX19iYWNrdXBfaW5kZXg+
PTApCi0gICAgICAgICAgICBfX29wX3RhYmxlX3R5cGU6Ol9fZGVzdHJveV9vcHNbX19iYWNrdXBf
aW5kZXhdKAotICAgICAgICAgICAgICAgICZfX2JhY2t1cCk7Ci0gICAgICAgIF9fYmFja3VwX2lu
ZGV4PS0xOwotICAgIH0KLSAgICAKLSAgICB+X19iYWNrdXBfc3RvcmFnZSgpewotICAgICAgICBp
ZihfX2JhY2t1cF9pbmRleD49MCl7Ci0gICAgICAgICAgICBfX29wX3RhYmxlX3R5cGU6Ol9fbW92
ZV9vcHNbX19iYWNrdXBfaW5kZXhdKAotICAgICAgICAgICAgICAgICZfX2xpdmVfc3RvcmFnZSxf
X2JhY2t1cCk7Ci0gICAgICAgICAgICBfX2Rlc3Ryb3koKTsKLSAgICAgICAgfQotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbGxfbW92ZV9jb25z
dHJ1Y3RpYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+
Ci1zdHJ1Y3QgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPgorY29uc3Rl
eHByIGJvb2wgaG9sZHNfYWx0ZXJuYXRpdmUoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Yp
IF9fTk9FWENFUFQKIHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9c3RkOjppc19t
b3ZlX2NvbnN0cnVjdGlibGU8X0hlYWQ+Ojp2YWx1ZSAmJiBfX2FsbF9tb3ZlX2NvbnN0cnVjdGli
bGU8X1Jlc3QuLi4+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBfX2FsbF9tb3Zl
X2NvbnN0cnVjdGlibGU8PjoKLSAgICBzdGQ6OnRydWVfdHlwZXt9OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYWxsX21vdmVfYXNzaWduYWJsZTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fYWxsX21vdmVf
YXNzaWduYWJsZTxfSGVhZCxfUmVzdC4uLj4KLXsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
dmFsdWU9c3RkOjppc19tb3ZlX2Fzc2lnbmFibGU8X0hlYWQ+Ojp2YWx1ZSAmJiBfX2FsbF9tb3Zl
X2Fzc2lnbmFibGU8X1Jlc3QuLi4+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBf
X2FsbF9tb3ZlX2Fzc2lnbmFibGU8PjoKLSAgICBzdGQ6OnRydWVfdHlwZXt9OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYWxsX2NvcHlfYXNzaWduYWJsZTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fYWxs
X2NvcHlfYXNzaWduYWJsZTxfSGVhZCxfUmVzdC4uLj4KLXsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgdmFsdWU9c3RkOjppc19jb3B5X2Fzc2lnbmFibGU8X0hlYWQ+Ojp2YWx1ZSAmJiBfX2Fs
bF9jb3B5X2Fzc2lnbmFibGU8X1Jlc3QuLi4+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0
cnVjdCBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8PjoKLSAgICBzdGQ6OnRydWVfdHlwZXt9OwotCi1u
YW1lc3BhY2UgX19zd2FwX3Rlc3RfZGV0YWlsewotdXNpbmcgc3RkOjpzd2FwOwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBfT3RoZXI+Ci1zdHJ1Y3QgX19zd2FwX3Jlc3VsdHt9OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZT4KLXN0YXRpYyBjaGFyIF9fdGVzdCguLi4pOwotdGVtcGxhdGUgPHR5cGVuYW1lIF9P
dGhlcj4KLXN0YXRpYyBzdGQ6OnBhaXI8Y2hhciwgc3RkOjpwYWlyPGNoYXIsIF9fc3dhcF9yZXN1
bHQ8ZGVjbHR5cGUoCi0gICAgc3dhcChzdGQ6OmRlY2x2YWw8X090aGVyICY+KCksc3RkOjpkZWNs
dmFsPF9PdGhlciAmPigpKSk+Pj4KLV9fdGVzdChfT3RoZXIgKik7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBfVHlwZT4gc3RydWN0IF9faXNfc3dhcHBhYmxlIHsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgdmFsdWUgPQotICAgICAgICBzaXplb2YoX19zd2FwX3Rlc3RfZGV0YWlsOjpfX3Rl
c3Q8X1R5cGU+KG51bGxwdHIpKSAhPSAxOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9U
eXBlcz4KLXN0cnVjdCBfX2FsbF9zd2FwcGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFk
LHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2FsbF9zd2FwcGFibGU8X0hlYWQsX1Jlc3Qu
Li4+Ci17Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPV9faXNfc3dhcHBhYmxlPF9I
ZWFkPjo6dmFsdWUgJiYgX19hbGxfc3dhcHBhYmxlPF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10
ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19hbGxfc3dhcHBhYmxlPD46Ci0gICAgc3RkOjp0cnVlX3R5cGV7
fTsKLQotdGVtcGxhdGU8Ym9vbCBfTW92ZUNvbnN0cnVjdGlibGUsdHlwZW5hbWUgLi4uIF9UeXBl
cz4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9jb25zdHJ1Y3RfaW1wbHt9OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19ub2V4
Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0X2ltcGw8dHJ1ZSxfSGVhZCxfUmVzdC4uLj57Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPW5vZXhjZXB0KF9IZWFkKHN0ZDo6ZGVjbHZh
bDxfSGVhZCYmPigpKSkgJiYgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0X2ltcGw8
dHJ1ZSxfUmVzdC4uLj46OnZhbHVlOwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fbm9leGNl
cHRfdmFyaWFudF9tb3ZlX2NvbnN0cnVjdF9pbXBsPHRydWU+ewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCB2YWx1ZT10cnVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4K
LXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9jb25zdHJ1Y3Q6Ci1fX25vZXhjZXB0X3Zh
cmlhbnRfbW92ZV9jb25zdHJ1Y3RfaW1wbDxfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVz
Li4uPjo6dmFsdWUsX1R5cGVzLi4uPgote307Ci0KLXRlbXBsYXRlPGJvb2wgX01vdmVBc3NpZ25h
YmxlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVf
YXNzaWduX2ltcGx7fTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIF9IZWFkLCB0eXBlbmFtZS4uLiBf
UmVzdD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9hc3NpZ25faW1wbDx0cnVlLCBf
SGVhZCwgX1Jlc3QuLi4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWUgPQotICAg
ICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9hc3NpZ25hYmxlPF9IZWFkPjo6dmFsdWUgJiYKLSAg
ICAgICAgc3RkOjppc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxfSGVhZD46OnZhbHVlICYm
Ci0gICAgICAgIF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Fzc2lnbl9pbXBsPHRydWUsIF9SZXN0
Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50
X21vdmVfYXNzaWduX2ltcGw8dHJ1ZT57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVl
PXRydWU7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9l
eGNlcHRfdmFyaWFudF9tb3ZlX2Fzc2lnbgotICAgIDogX19ub2V4Y2VwdF92YXJpYW50X21vdmVf
YXNzaWduX2ltcGw8Ci0gICAgICAgICAgX19hbGxfbW92ZV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46
OnZhbHVlICYmCi0gICAgICAgICAgICAgIF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMu
Li4+Ojp2YWx1ZSwKLSAgICAgICAgICBfVHlwZXMuLi4+IHt9OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fYWxsX2NvcHlf
Y29uc3RydWN0aWJsZTxfSGVhZCxfUmVzdC4uLj4KLXsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgdmFsdWU9c3RkOjppc19jb3B5X2NvbnN0cnVjdGlibGU8X0hlYWQ+Ojp2YWx1ZSAmJiBfX2Fs
bF9jb3B5X2NvbnN0cnVjdGlibGU8X1Jlc3QuLi4+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPD4K
LXN0cnVjdCBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8PjoKLSAgICBzdGQ6OnRydWVfdHlwZXt9
OwotCi10ZW1wbGF0ZTxib29sIF9Db3B5Q29uc3RydWN0aWJsZSx0eXBlbmFtZSAuLi4gX1R5cGVz
Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBse307
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBf
X25vZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDx0cnVlLF9IZWFkLF9S
ZXN0Li4uPnsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9bm9leGNlcHQoX0hlYWQo
c3RkOjpkZWNsdmFsPF9IZWFkIGNvbnN0Jj4oKSkpICYmIF9fbm9leGNlcHRfdmFyaWFudF9jb25z
dF9jb3B5X2NvbnN0cnVjdF9pbXBsPHRydWUsX1Jlc3QuLi4+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBs
YXRlPD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25zdHJ1Y3RfaW1w
bDx0cnVlPnsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9dHJ1ZTsKLX07Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X2Nv
bnN0X2NvcHlfY29uc3RydWN0OgotX19ub2V4Y2VwdF92YXJpYW50X2NvbnN0X2NvcHlfY29uc3Ry
dWN0X2ltcGw8X19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLF9UeXBl
cy4uLj4KLXt9OwotCi10ZW1wbGF0ZTxib29sIF9Db3B5Tm9uX0NvbnN0cnVjdGlibGUsdHlwZW5h
bWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbm9uX2NvbnN0X2NvcHlf
Y29uc3RydWN0X2ltcGx7fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4u
IF9SZXN0Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9ub25fY29uc3RfY29weV9jb25zdHJ1
Y3RfaW1wbDx0cnVlLF9IZWFkLF9SZXN0Li4uPnsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
dmFsdWU9bm9leGNlcHQoX0hlYWQoc3RkOjpkZWNsdmFsPF9IZWFkJj4oKSkpICYmIF9fbm9leGNl
cHRfdmFyaWFudF9ub25fY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDx0cnVlLF9SZXN0Li4uPjo6
dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X25vbl9j
b25zdF9jb3B5X2NvbnN0cnVjdF9pbXBsPHRydWU+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCB2YWx1ZT10cnVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVj
dCBfX25vZXhjZXB0X3ZhcmlhbnRfbm9uX2NvbnN0X2NvcHlfY29uc3RydWN0OgotX19ub2V4Y2Vw
dF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBsPF9fYWxsX2NvcHlfY29uc3Ry
dWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxfVHlwZXMuLi4+Ci17fTsKLQotdGVtcGxhdGU8Ym9v
bCBfU3dhcHBhYmxlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJp
YW50X3N3YXBfaW1wbHt9OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgX0hlYWQsIHR5cGVuYW1lLi4u
IF9SZXN0Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9zd2FwX2ltcGw8dHJ1ZSwgX0hlYWQs
IF9SZXN0Li4uPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0KLSAgICAgICAg
bm9leGNlcHQoc3dhcChzdGQ6OmRlY2x2YWw8X0hlYWQmPigpLHN0ZDo6ZGVjbHZhbDxfSGVhZCY+
KCkpKSAmJgotICAgICAgICBfX25vZXhjZXB0X3ZhcmlhbnRfc3dhcF9pbXBsPHRydWUsIF9SZXN0
Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50
X3N3YXBfaW1wbDx0cnVlPnsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9dHJ1ZTsK
LX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92
YXJpYW50X3N3YXA6Ci1fX25vZXhjZXB0X3ZhcmlhbnRfc3dhcF9pbXBsPF9fYWxsX3N3YXBwYWJs
ZTxfVHlwZXMuLi4+Ojp2YWx1ZSxfVHlwZXMuLi4+Ci17fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
Li4uIF9UeXBlcz4KLWNsYXNzIFZhcmlhbnQ6Ci0gICAgICAgIHByaXZhdGUgX192YXJpYW50X2Jh
c2U8Ci0gICAgVmFyaWFudDxfVHlwZXMuLi4+LF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8
X1R5cGVzLi4uPjo6X192YWx1ZT4KLXsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAg
ICB0eXBlZGVmIF9fdmFyaWFudF9iYXNlPFZhcmlhbnQ8X1R5cGVzLi4uPixfX2FsbF90cml2aWFs
bHlfZGVzdHJ1Y3RpYmxlPF9UeXBlcy4uLj46Ol9fdmFsdWU+IF9fYmFzZV90eXBlOwotICAgIGZy
aWVuZCBfX2Jhc2VfdHlwZTsKLSAgICBmcmllbmQgc3RydWN0IF9fY29weV9jb25zdHJ1Y3Rfb3Bf
dGFibGU8VmFyaWFudD47Ci0gICAgZnJpZW5kIHN0cnVjdCBfX2NvcHlfYXNzaWduX29wX3RhYmxl
PFZhcmlhbnQ+OwotICAgIGZyaWVuZCBzdHJ1Y3QgX19tb3ZlX2NvbnN0cnVjdF9vcF90YWJsZTxW
YXJpYW50PjsKLSAgICBmcmllbmQgc3RydWN0IF9fbW92ZV9hc3NpZ25fb3BfdGFibGU8VmFyaWFu
dD47Ci0gICAgZnJpZW5kIHN0cnVjdCBfX2Rlc3Ryb3lfb3BfdGFibGU8VmFyaWFudD47Ci0gICAg
Ci0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzMj4KLSAg
ICBmcmllbmQgc3RydWN0IF9fdmFyaWFudF9hY2Nlc3NvcjsKLQotICAgIGZyaWVuZCBzdHJ1Y3Qg
X19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI7Ci0KLSAgICB0eXBlZGVmIF9fdmFyaWFudF9kYXRh
PF9UeXBlcy4uLj4gX19zdG9yYWdlX3R5cGU7Ci0gICAgX19zdG9yYWdlX3R5cGUgX19zdG9yYWdl
OwotICAgIHR5cGVuYW1lIF9fZGlzY3JpbWluYXRvcl90eXBlPHNpemVvZiAuLi4gKF9UeXBlcyk+
OjpfX3R5cGUgX19pbmRleDsKLQotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUg
Li4uIF9BcmdzPgotICAgIHNpemVfdCBfX2VtcGxhY2VfY29uc3RydWN0KF9BcmdzJiYgLi4uIF9f
YXJncyl7Ci0gICAgICAgIG5ldygmX19zdG9yYWdlKSBfX3N0b3JhZ2VfdHlwZSgKLSAgICAgICAg
ICAgIGluX3BsYWNlPF9JbmRleD4sc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAg
ICAgICAgcmV0dXJuICBfSW5kZXg7Ci0gICAgfQotICAgIAotICAgIHZvaWQgX19kZXN0cm95X3Nl
bGYoKXsKLSAgICAgICAgaWYodmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBfX2Rlc3Ryb3lfb3BfdGFibGU8VmFyaWFudD46Ol9fYXBwbHlbaW5k
ZXgoKV0odGhpcyk7Ci0gICAgICAgIF9faW5kZXg9LTE7Ci0gICAgfQotICAgIAotICAgIHB0cmRp
ZmZfdCBfX21vdmVfY29uc3RydWN0KFZhcmlhbnQmIF9fb3RoZXIpewotICAgICAgICBwdHJkaWZm
X3QgY29uc3QgX19vdGhlcl9pbmRleD1fX290aGVyLmluZGV4KCk7Ci0gICAgICAgIGlmKF9fb3Ro
ZXJfaW5kZXg9PS0xKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBfX21vdmVfY29u
c3RydWN0X29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W19fb3RoZXJfaW5kZXhdKHRoaXMsX19v
dGhlcik7Ci0gICAgICAgIF9fb3RoZXIuX19kZXN0cm95X3NlbGYoKTsKLSAgICAgICAgcmV0dXJu
IF9fb3RoZXJfaW5kZXg7Ci0gICAgfQotCi0gICAgcHRyZGlmZl90IF9fY29weV9jb25zdHJ1Y3Qo
VmFyaWFudCBjb25zdCYgX19vdGhlcil7Ci0gICAgICAgIHB0cmRpZmZfdCBjb25zdCBfX290aGVy
X2luZGV4PV9fb3RoZXIuaW5kZXgoKTsKLSAgICAgICAgaWYoX19vdGhlcl9pbmRleD09LTEpCi0g
ICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIF9fY29weV9jb25zdHJ1Y3Rfb3BfdGFibGU8
VmFyaWFudD46Ol9fYXBwbHlbX19vdGhlcl9pbmRleF0odGhpcyxfX290aGVyKTsKLSAgICAgICAg
cmV0dXJuIF9fb3RoZXJfaW5kZXg7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRl
eCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgdm9pZCBfX3JlcGxhY2VfY29uc3RydWN0KF9Bcmdz
JiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8
X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBfX3RoaXNfdHlwZTsKLSAgICAgICAgX19yZXBsYWNl
X2NvbnN0cnVjdF9oZWxwZXI6Ol9faGVscGVyPAotICAgICAgICAgICAgX0luZGV4LAotICAgICAg
ICAgICAgX19zdG9yYWdlX25vdGhyb3dfY29uc3RydWN0aWJsZTxfX3RoaXNfdHlwZSxfQXJncy4u
Lj46Ol9fdmFsdWUgfHwKLSAgICAgICAgICAgIChzaXplb2YuLi4oX1R5cGVzKT09MSksCi0gICAg
ICAgICAgICBfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X190aGlzX3R5cGU+
OjpfX3ZhbHVlLAotICAgICAgICAgICAgX19vdGhlcl9zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25z
dHJ1Y3RpYmxlPAotICAgICAgICAgICAgICAgIF9JbmRleCxfVHlwZXMuLi4+OjpfX3ZhbHVlCi0g
ICAgICAgICAgICA+OjpfX3RyYW1wb2xpbmUoKnRoaXMsc3RkOjpmb3J3YXJkPF9BcmdzPihfX2Fy
Z3MpLi4uKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIC4u
LiBfQXJncz4KLSAgICB2b2lkIF9fdHdvX3N0YWdlX3JlcGxhY2UoX0FyZ3MmJiAuLi4gX19hcmdz
KXsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVz
Li4uPjo6X190eXBlIF9fdHlwZTsKLSAgICAgICAgX192YXJpYW50X2RhdGE8X190eXBlPiBfX2xv
Y2FsKAotICAgICAgICAgICAgaW5fcGxhY2U8MD4sc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3Mp
Li4uKTsKLSAgICAgICAgX19kZXN0cm95X3NlbGYoKTsKLSAgICAgICAgX19lbXBsYWNlX2NvbnN0
cnVjdDxfSW5kZXg+KAotICAgICAgICAgICAgc3RkOjptb3ZlKF9fbG9jYWwuX19nZXQoaW5fcGxh
Y2U8MD4pKSk7Ci0gICAgICAgIF9faW5kZXg9X0luZGV4OwotICAgICAgICBfX2xvY2FsLl9fZGVz
dHJveShpbl9wbGFjZTwwPik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0
eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgdm9pZCBfX2xvY2FsX2JhY2t1cF9yZXBsYWNlKF9Bcmdz
JiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIF9fYmFja3VwX3N0b3JhZ2U8X0luZGV4LF9UeXBlcy4u
Lj4gX19iYWNrdXAoX19pbmRleCxfX3N0b3JhZ2UpOwotICAgICAgICBfX2VtcGxhY2VfY29uc3Ry
dWN0PF9JbmRleD4oc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICAgICAgX19p
bmRleD1fSW5kZXg7Ci0gICAgICAgIF9fYmFja3VwLl9fZGVzdHJveSgpOwotICAgIH0KLSAgICAK
LSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICB2b2lk
IF9fZGlyZWN0X3JlcGxhY2UoX0FyZ3MmJiAuLi4gX19hcmdzKSB7Ci0gICAgICAgIF9fZGVzdHJv
eV9zZWxmKCk7Ci0gICAgICAgIF9fZW1wbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PihzdGQ6OmZvcndh
cmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgICAgICBfX2luZGV4PV9JbmRleDsKLSAgICB9Ci0K
LSAgICBzdHJ1Y3QgX19wcml2YXRlX3R5cGV7fTsKLQotcHVibGljOgotICAgIGNvbnN0ZXhwciBW
YXJpYW50KCkKLSAgICAgICAgX19OT0VYQ0VQVF8obm9leGNlcHQodHlwZW5hbWUgX19pbmRleGVk
X3R5cGU8MCxfVHlwZXMuLi4+OjpfX3R5cGUoKSkpOgotICAgICAgICBfX3N0b3JhZ2UoaW5fcGxh
Y2U8MD4pLAotICAgICAgICBfX2luZGV4KDApCi0gICAge30KLQotICAgIGNvbnN0ZXhwciBWYXJp
YW50KHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8X19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9U
eXBlcy4uLj46OnZhbHVlLFZhcmlhbnQsX19wcml2YXRlX3R5cGU+Ojp0eXBlJiYgX19vdGhlcikK
LSAgICBfX05PRVhDRVBUXyhfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9jb25zdHJ1Y3Q8X1R5cGVz
Li4uPjo6dmFsdWUpOgotICAgICAgICBfX2luZGV4KF9fbW92ZV9jb25zdHJ1Y3QoX19vdGhlcikp
Ci0gICAge30KLQotICAgIGNvbnN0ZXhwciBWYXJpYW50KHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9u
YWw8IV9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9f
cHJpdmF0ZV90eXBlPjo6dHlwZSYmIF9fb3RoZXIpPWRlbGV0ZTsKLSAgICAKLSAgICBjb25zdGV4
cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9fYWxsX2NvcHlfY29uc3RydWN0
aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSYgX19v
dGhlcikKLSAgICBfX05PRVhDRVBUXyhfX25vZXhjZXB0X3ZhcmlhbnRfbm9uX2NvbnN0X2NvcHlf
Y29uc3RydWN0PF9UeXBlcy4uLj46OnZhbHVlKToKLSAgICAgICAgX19pbmRleChfX2NvcHlfY29u
c3RydWN0KF9fb3RoZXIpKQotICAgIHt9Ci0KLSAgICBjb25zdGV4cHIgVmFyaWFudCh0eXBlbmFt
ZSBzdGQ6OmNvbmRpdGlvbmFsPCFfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6
dmFsdWUsVmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5cGUmIF9fb3RoZXIpPWRlbGV0ZTsKLQot
ICAgIGNvbnN0ZXhwciBWYXJpYW50KHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8X19hbGxfY29w
eV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLFZhcmlhbnQsX19wcml2YXRlX3R5cGU+
Ojp0eXBlIGNvbnN0JiBfX290aGVyKQotICAgIF9fTk9FWENFUFRfKF9fbm9leGNlcHRfdmFyaWFu
dF9jb25zdF9jb3B5X2NvbnN0cnVjdDxfVHlwZXMuLi4+Ojp2YWx1ZSk6Ci0gICAgICAgIF9faW5k
ZXgoX19jb3B5X2NvbnN0cnVjdChfX290aGVyKSkKLSAgICB7fQotCi0gICAgY29uc3RleHByIFZh
cmlhbnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwhX19hbGxfY29weV9jb25zdHJ1Y3RpYmxl
PF9UeXBlcy4uLj46OnZhbHVlLFZhcmlhbnQsX19wcml2YXRlX3R5cGU+Ojp0eXBlIGNvbnN0JiBf
X290aGVyKT1kZWxldGU7Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5h
bWUgLi4uIF9BcmdzPgotICAgIGV4cGxpY2l0IGNvbnN0ZXhwciBWYXJpYW50KGluX3BsYWNlX3R5
cGVfdDxfVHlwZT4sX0FyZ3MmJiAuLi4gX19hcmdzKToKLSAgICAgICAgX19zdG9yYWdlKAotICAg
ICAgICAgICAgaW5fcGxhY2U8X190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU+
LAotICAgICAgICAgICAgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKSwKLSAgICAgICAg
X19pbmRleChfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19jb25zdHJ1Y3RpYmxlPF9UeXBlLF9BcmdzLi4u
Pjo6dmFsdWUsIlR5cGUgbXVzdCBiZSBjb25zdHJ1Y3RpYmxlIGZyb20gYXJncyIpOwotICAgIH0K
LQotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIGV4
cGxpY2l0IGNvbnN0ZXhwciBWYXJpYW50KGluX3BsYWNlX2luZGV4X3Q8X0luZGV4PixfQXJncyYm
IC4uLiBfX2FyZ3MpOgotICAgICAgICBfX3N0b3JhZ2UoaW5fcGxhY2U8X0luZGV4PixzdGQ6OmZv
cndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pLAotICAgICAgICBfX2luZGV4KF9JbmRleCkKLSAgICB7
Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19jb25zdHJ1Y3RpYmxlPHR5cGVuYW1lIF9f
aW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUsX0FyZ3MuLi4+Ojp2YWx1ZSwi
VHlwZSBtdXN0IGJlIGNvbnN0cnVjdGlibGUgZnJvbSBhcmdzIik7Ci0gICAgfQotICAgIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotICAgIGNvbnN0ZXhwciBWYXJpYW50KF9UeXBlJiYg
X194KToKLSAgICAgICAgX19zdG9yYWdlKAotICAgICAgICAgICAgaW5fcGxhY2U8Ci0gICAgICAg
ICAgICBfX3R5cGVfaW5kZXhfdG9fY29uc3RydWN0PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU+
LAotICAgICAgICAgICAgc3RkOjpmb3J3YXJkPF9UeXBlPihfX3gpKSwKLSAgICAgICAgX19pbmRl
eChfX3R5cGVfaW5kZXhfdG9fY29uc3RydWN0PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWUpCi0g
ICAge30KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLAotICAgICAgICAgICAgIHR5cGVu
YW1lIF9FbmFibGU9Ci0gICAgICAgICAgICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8Ci0gICAg
ICAgICAgICAgICAgIChfX2NvbnN0cnVjdGlibGVfbWF0Y2hlczxzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8X1R5cGU+LF9UeXBlcy4uLj46Ol9fdHlwZTo6X19sZW5ndGg+MCkKLSAgICAgICAgICAgICA+
Ojp0eXBlPgotICAgIGNvbnN0ZXhwciBWYXJpYW50KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfVHlw
ZT4gX194KToKLSAgICAgICAgX19zdG9yYWdlKAotICAgICAgICAgICAgaW5fcGxhY2U8Ci0gICAg
ICAgICAgICBfX3R5cGVfaW5kZXhfdG9fY29uc3RydWN0PHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxf
VHlwZT4sX1R5cGVzLi4uPjo6X192YWx1ZT4sCi0gICAgICAgICAgICBfX3gpLAotICAgICAgICBf
X2luZGV4KF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8c3RkOjppbml0aWFsaXplcl9saXN0PF9U
eXBlPixfVHlwZXMuLi4+OjpfX3ZhbHVlKQotICAgIHt9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1R5cGU+Ci0gICAgVmFyaWFudCYgb3BlcmF0b3I9KF9UeXBlJiYgX194KXsKLSAgICAg
ICAgY29uc3RleHByIHNpemVfdCBfSW5kZXg9Ci0gICAgICAgICAgICBfX3R5cGVfaW5kZXhfdG9f
Y29uc3RydWN0PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU7Ci0gICAgICAgIGlmKF9JbmRleD09
X19pbmRleCl7Ci0gICAgICAgICAgICBnZXQ8X0luZGV4PigqdGhpcyk9c3RkOjpmb3J3YXJkPF9U
eXBlPihfX3gpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgICBfX3JlcGxh
Y2VfY29uc3RydWN0PF9JbmRleD4oc3RkOjpmb3J3YXJkPF9UeXBlPihfX3gpKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgVmFyaWFudCAmb3BlcmF0b3I9
KAotICAgICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAotICAgICAgICAgICAgIShfX2Fs
bF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAg
X19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAg
ICAgIF9fYWxsX2NvcHlfYXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSksCi0gICAgICAgICAg
ICBWYXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgY29uc3QgJl9fb3RoZXIpID0gZGVsZXRl
OwotCi0gICAgVmFyaWFudCAmb3BlcmF0b3I9KAotICAgICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRp
dGlvbmFsPAotICAgICAgICAgICAgX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46
OnZhbHVlICYmCi0gICAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBl
cy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgICAgX19hbGxfY29weV9hc3NpZ25hYmxlPF9U
eXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgICAgVmFyaWFudCwgX19wcml2YXRlX3R5cGU+Ojp0
eXBlIGNvbnN0ICZfX290aGVyKSB7Ci0gICAgICAgIGlmIChfX290aGVyLnZhbHVlbGVzc19ieV9l
eGNlcHRpb24oKSkgewotICAgICAgICAgICAgX19kZXN0cm95X3NlbGYoKTsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlIGlmKF9fb3RoZXIuaW5kZXgoKT09aW5kZXgoKSl7Ci0gICAgICAgICAgICBf
X2NvcHlfYXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W2luZGV4KCldKHRoaXMsX19v
dGhlcik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAgIF9fcmVwbGFjZV9j
b25zdHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2NvcHlfYXNzaWduWwotICAg
ICAgICAgICAgICAgIF9fb3RoZXIuaW5kZXgoKV0odGhpcyxfX290aGVyKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIFZhcmlhbnQgJm9wZXJhdG9yPSgKLSAg
ICAgICAgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwKLSAgICAgICAgICAgICEoX19hbGxfY29w
eV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgIF9fYWxs
X21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICBf
X2FsbF9jb3B5X2Fzc2lnbmFibGU8X1R5cGVzLi4uPjo6dmFsdWUpLAotICAgICAgICAgICAgVmFy
aWFudCwgX19wcml2YXRlX3R5cGU+Ojp0eXBlICZfX290aGVyKSA9IGRlbGV0ZTsKLQotICAgIFZh
cmlhbnQgJm9wZXJhdG9yPSgKLSAgICAgICAgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwKLSAg
ICAgICAgICAgIF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgot
ICAgICAgICAgICAgICAgIF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1
ZSAmJgotICAgICAgICAgICAgICAgIF9fYWxsX2NvcHlfYXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2
YWx1ZSwKLSAgICAgICAgICAgIFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZSAmX19vdGhl
cikgewotICAgICAgICBpZihfX290aGVyLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSl7Ci0gICAg
ICAgICAgICBfX2Rlc3Ryb3lfc2VsZigpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoX19v
dGhlci5pbmRleCgpPT1pbmRleCgpKXsKLSAgICAgICAgICAgIF9fY29weV9hc3NpZ25fb3BfdGFi
bGU8VmFyaWFudD46Ol9fYXBwbHlbaW5kZXgoKV0odGhpcyxfX290aGVyKTsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlewotICAgICAgICAgICAgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9f
b3BfdGFibGU8VmFyaWFudD46Ol9fY29weV9hc3NpZ25bCi0gICAgICAgICAgICAgICAgX19vdGhl
ci5pbmRleCgpXSh0aGlzLF9fb3RoZXIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAqdGhp
czsKLSAgICB9Ci0gICAgVmFyaWFudCAmb3BlcmF0b3I9KAotICAgICAgICB0eXBlbmFtZSBzdGQ6
OmNvbmRpdGlvbmFsPAotICAgICAgICAgICAgIShfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5
cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgX19hbGxfbW92ZV9hc3NpZ25hYmxlPF9U
eXBlcy4uLj46OnZhbHVlKSwKLSAgICAgICAgICAgIFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6
dHlwZSAmJl9fb3RoZXIpID0gZGVsZXRlOwotCi0gICAgVmFyaWFudCAmb3BlcmF0b3I9KAotICAg
ICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxf
VHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2FsbF9tb3ZlX2Fzc2lnbmFibGU8X1R5cGVzLi4uPjo6dmFsdWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVmFyaWFudCwgX19wcml2YXRlX3R5cGU+Ojp0eXBlICYmCi0g
ICAgICAgICAgICBfX290aGVyKSBfX05PRVhDRVBUXyhfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9h
c3NpZ248X1R5cGVzLi4uPjo6dmFsdWUpIHsKLSAgICAgICAgaWYgKF9fb3RoZXIudmFsdWVsZXNz
X2J5X2V4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICBfX2Rlc3Ryb3lfc2VsZigpOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UgaWYoX19vdGhlci5pbmRleCgpPT1pbmRleCgpKXsKLSAgICAgICAg
ICAgIF9fbW92ZV9hc3NpZ25fb3BfdGFibGU8VmFyaWFudD46Ol9fYXBwbHlbaW5kZXgoKV0odGhp
cyxfX290aGVyKTsKLSAgICAgICAgICAgIF9fb3RoZXIuX19kZXN0cm95X3NlbGYoKTsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlewotICAgICAgICAgICAgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxw
ZXI6Ol9fb3BfdGFibGU8VmFyaWFudD46Ol9fbW92ZV9hc3NpZ25bCi0gICAgICAgICAgICAgICAg
X19vdGhlci5pbmRleCgpXSh0aGlzLF9fb3RoZXIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biAqdGhpczsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAu
Li4gX0FyZ3M+Ci0gICAgdm9pZCBlbXBsYWNlKF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAg
IF9fZGlyZWN0X3JlcGxhY2U8X190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU+
KAotICAgICAgICAgICAgc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9Ci0g
ICAgCi0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAg
dm9pZCBlbXBsYWNlKF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIF9fZGlyZWN0X3JlcGxh
Y2U8X0luZGV4PihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgIH0KLSAgICAK
LSAgICBjb25zdGV4cHIgYm9vbCB2YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgY29uc3QgX19OT0VY
Q0VQVHsKLSAgICAgICAgcmV0dXJuIF9faW5kZXg9PS0xOwotICAgIH0KLSAgICBjb25zdGV4cHIg
cHRyZGlmZl90IGluZGV4KCkgY29uc3QgX19OT0VYQ0VQVHsKLSAgICAgICAgcmV0dXJuIF9faW5k
ZXg7Ci0gICAgfQotCi0gICAgdm9pZCBzd2FwKAotICAgICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRp
dGlvbmFsPAotICAgICAgICAgICAgX19hbGxfc3dhcHBhYmxlPF9UeXBlcy4uLj46OnZhbHVlICYm
Ci0gICAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZh
bHVlLAotICAgICAgICAgICAgVmFyaWFudCwgX19wcml2YXRlX3R5cGU+Ojp0eXBlCi0gICAgICAg
ICAgICAmX19vdGhlcikgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X3N3YXA8X1R5cGVz
Li4uPjo6dmFsdWUpIHsKLSAgICAgICAgaWYgKF9fb3RoZXIuaW5kZXgoKSA9PSBpbmRleCgpKSB7
Ci0gICAgICAgICAgICBpZighdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKQotICAgICAgICAgICAg
ICAgIF9fc3dhcF9vcF90YWJsZTxWYXJpYW50Pjo6X19hcHBseVtpbmRleCgpXSgqdGhpcyxfX290
aGVyKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlewotICAgICAgICAgICAgVmFyaWFudCBfX3Rl
bXAoc3RkOjptb3ZlKF9fb3RoZXIpKTsKLSAgICAgICAgICAgIF9fb3RoZXIuX19pbmRleD1fX290
aGVyLl9fbW92ZV9jb25zdHJ1Y3QoKnRoaXMpOwotICAgICAgICAgICAgX19pbmRleD1fX21vdmVf
Y29uc3RydWN0KF9fdGVtcCk7Ci0gICAgICAgIH0KLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+Ci1j
bGFzcyBWYXJpYW50PD57Ci1wdWJsaWM6Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0g
ICAgVmFyaWFudCgpPWRlbGV0ZTsKLSAgICAKLSAgICBjb25zdGV4cHIgYm9vbCB2YWx1ZWxlc3Nf
YnlfZXhjZXB0aW9uKCkgY29uc3QgX19OT0VYQ0VQVHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIGNvbnN0ZXhwciBwdHJkaWZmX3QgaW5kZXgoKSBjb25zdCBfX05PRVhDRVBUewot
ICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgdm9pZCBzd2FwKFZhcmlhbnQmKXt9Ci19
OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gX1R5cGVzPgotdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8X19hbGxfc3dhcHBhYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZD46OnR5cGUKLXN3YXAoVmFyaWFudDxfVHlwZXMu
Li4+ICZfX2xocywgVmFyaWFudDxfVHlwZXMuLi4+ICZfX3JocykgX19OT0VYQ0VQVF8oCi0gICAg
X19ub2V4Y2VwdF92YXJpYW50X3N3YXA8X1R5cGVzLi4uPjo6dmFsdWUpIHsKLSAgICBfX2xocy5z
d2FwKF9fcmhzKTsKLX0KLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4g
X1R5cGVzPgotc3RydWN0IF9fdmFyaWFudF9hY2Nlc3NvcnsKLSAgICB0eXBlZGVmIHR5cGVuYW1l
IF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgX190eXBlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgX190eXBlJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAg
ICAgICByZXR1cm4gX192Ll9fc3RvcmFnZS5fX2dldChpbl9wbGFjZTxfSW5kZXg+KTsKLSAgICB9
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfX3R5cGUgY29uc3QmIGdldChWYXJpYW50PF9UeXBlcy4u
Lj4gY29uc3QmIF9fdil7Ci0gICAgICAgIHJldHVybiBfX3YuX19zdG9yYWdlLl9fZ2V0KGluX3Bs
YWNlPF9JbmRleD4pOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIF9fdHlwZSYmIGdldChW
YXJpYW50PF9UeXBlcy4uLj4mJiBfX3YpewotICAgICAgICByZXR1cm4gX192Ll9fc3RvcmFnZS5f
X2dldF9ycmVmKGluX3BsYWNlPF9JbmRleD4pOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHBy
IGNvbnN0IF9fdHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmJiBfX3YpewotICAg
ICAgICByZXR1cm4gX192Ll9fc3RvcmFnZS5fX2dldF9ycmVmKGluX3BsYWNlPF9JbmRleD4pOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+
Ci1jb25zdGV4cHIgX1R5cGUmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mIF9fdil7Ci0gICAgcmV0
dXJuIGdldDxfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZT4oX192KTsKKyAg
ICByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxfVHlwZT4oX192KTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBfVHlwZSYm
IGdldChWYXJpYW50PF9UeXBlcy4uLj4mJiBfX3YpewotICAgIHJldHVybiBnZXQ8X190eXBlX2lu
ZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU+KHN0ZDo6bW92ZShfX3YpKTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBfVHlw
ZSBjb25zdCYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX192KXsKLSAgICByZXR1cm4g
Z2V0PF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPihfX3YpOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGNv
bnN0IF9UeXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYmIF9fdil7Ci0gICAgcmV0
dXJuIGdldDxfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZT4oc3RkOjptb3Zl
KF9fdikpOwotfQotCi0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9U
eXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4u
Pjo6X190eXBlIGNvbnN0JiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpewotICAg
IHJldHVybiAqKAotICAgICAgICAoX0luZGV4IT1fX3YuaW5kZXgoKSkKLSAgICAgICAgICAgID8g
c3RkOjphZGRyZXNzb2YoX190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3M8dHlwZW5hbWUgX19pbmRl
eGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBjb25zdCY+KCJCYWQgVmFyaWFudCBp
bmRleCBpbiBnZXQiKSkKLSAgICAgICAgICAgIDogc3RkOjphZGRyZXNzb2YoX192YXJpYW50X2Fj
Y2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoX192KSkKLSAgICApOwotfQotCi10ZW1wbGF0
ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgdHlwZW5h
bWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYgZ2V0KFZhcmlhbnQ8
X1R5cGVzLi4uPiYgX192KXsKLSAgICByZXR1cm4gKigKLSAgICAgICAgKF9JbmRleCE9X192Lmlu
ZGV4KCkpCi0gICAgICAgICAgICA/IHN0ZDo6YWRkcmVzc29mKF9fdGhyb3dfYmFkX3ZhcmlhbnRf
YWNjZXNzPHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUm
PigiQmFkIFZhcmlhbnQgaW5kZXggaW4gZ2V0IikpCi0gICAgICAgICAgICA6IHN0ZDo6YWRkcmVz
c29mKF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KF9fdikpCi0gICAg
KTsKLX0KLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgot
Y29uc3RleHByIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5
cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+JiYgX192KXsKLSAgICByZXR1cm4gX192YXJpYW50
X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoCi0gICAgICAgICgoKF9JbmRleCE9X192
LmluZGV4KCkpID8gX190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3M8aW50PigiQmFkIFZhcmlhbnQg
aW5kZXggaW4gZ2V0IikgOiAwKSwgc3RkOjptb3ZlKF9fdikpCi0gICAgKTsKLX0KLQotdGVtcGxh
dGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGNvbnN0
IHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmJiBnZXQo
VmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiYgX192KXsKLSAgICByZXR1cm4gX192YXJpYW50X2Fj
Y2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoCi0gICAgICAgICgoKF9JbmRleCE9X192Lmlu
ZGV4KCkpID8gX190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3M8aW50PigiQmFkIFZhcmlhbnQgaW5k
ZXggaW4gZ2V0IikgOiAwKSwgc3RkOjptb3ZlKF9fdikpCi0gICAgKTsKK2NvbnN0ZXhwciBfVHlw
ZSYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYgX192KQoreworICAgIHJldHVybiBzdGQ6OmdldDxf
VHlwZT4oX192KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9U
eXBlcz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8X1R5cGU+IGdldF9pZihWYXJpYW50
PF9UeXBlcy4uLj4mIF9fdil7Ci0gICAgcmV0dXJuIChfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVz
Li4uPjo6X192YWx1ZSE9X192LmluZGV4KCkpP251bGxwdHI6c3RkOjphZGRyZXNzb2YoZ2V0PF9U
eXBlPihfX3YpKTsKK2NvbnN0ZXhwciBfVHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mJiBf
X3YpCit7CisgICAgcmV0dXJuIHN0ZDo6Z2V0PF9UeXBlPihXVEZNb3ZlKF9fdikpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHN0
ZDo6YWRkX3BvaW50ZXJfdDxfVHlwZSBjb25zdD4gZ2V0X2lmKFZhcmlhbnQ8X1R5cGVzLi4uPiBj
b25zdCYgX192KXsKLSAgICByZXR1cm4gKF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+Ojpf
X3ZhbHVlIT1fX3YuaW5kZXgoKSk/bnVsbHB0cjpzdGQ6OmFkZHJlc3NvZihnZXQ8X1R5cGU+KF9f
dikpOwotfQotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+
Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9J
bmRleCxfVHlwZXMuLi4+OjpfX3R5cGU+IGdldF9pZihWYXJpYW50PF9UeXBlcy4uLj4mIF9fdil7
Ci0gICAgcmV0dXJuICgoX0luZGV4IT1fX3YuaW5kZXgoKSk/bnVsbHB0cjoKLSAgICAgICAgc3Rk
OjphZGRyZXNzb2YoX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoX192
KSkpOwotfQotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+
Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9J
bmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3Q+IGdldF9pZigKLSAgICBWYXJpYW50PF9UeXBl
cy4uLj4gY29uc3QmIF9fdil7Ci0gICAgcmV0dXJuICgoX0luZGV4IT1fX3YuaW5kZXgoKSk/bnVs
bHB0cjoKLSAgICAgICAgc3RkOjphZGRyZXNzb2YoX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxf
VHlwZXMuLi4+OjpnZXQoX192KSkpOworY29uc3RleHByIF9UeXBlIGNvbnN0JiBnZXQoVmFyaWFu
dDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpCit7CisgICAgcmV0dXJuIHN0ZDo6Z2V0PF9UeXBlPihf
X3YpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgot
Y29uc3RleHByIGJvb2wgaG9sZHNfYWx0ZXJuYXRpdmUoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0
JiBfX3YpIF9fTk9FWENFUFR7Ci0gICAgcmV0dXJuIF9fdi5pbmRleCgpPT1fX3R5cGVfaW5kZXg8
X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0
b3IsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yPgotc3RydWN0IF9fdmlzaXRvcl9yZXR1cm5fdHlw
ZTxfVmlzaXRvcj57Ci0gICAgdHlwZWRlZiBkZWNsdHlwZShzdGQ6OmRlY2x2YWw8X1Zpc2l0b3Im
PigpKCkpIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1l
IF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8
X1Zpc2l0b3IsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgZGVjbHR5cGUoc3RkOjpkZWNs
dmFsPF9WaXNpdG9yJj4oKShzdGQ6OmRlY2x2YWw8X0hlYWQmPigpKSkgX190eXBlOwotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBf
X3Zpc2l0b3JfdGFibGV7Ci0gICAgdHlwZWRlZiBWYXJpYW50PF9UeXBlcy4uLj4gX192YXJpYW50
X3R5cGU7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0
b3IsX1R5cGVzLi4uPjo6X190eXBlIF9fcmV0dXJuX3R5cGU7Ci0gICAgdHlwZWRlZiBfX3JldHVy
bl90eXBlICgqX19mdW5jX3R5cGUpKF9WaXNpdG9yJixfX3ZhcmlhbnRfdHlwZSYpOwotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci0gICAgc3RhdGljIF9fcmV0dXJuX3R5cGUgX190cmFt
cG9saW5lX2Z1bmMoX1Zpc2l0b3ImIF9fdmlzaXRvcixfX3ZhcmlhbnRfdHlwZSYgX192KXsKLSAg
ICAgICAgcmV0dXJuIF9fdmlzaXRvcihnZXQ8X1R5cGU+KF9fdikpOwotICAgIH0KLQotICAgIHN0
YXRpYyBjb25zdCBfX2Z1bmNfdHlwZSBfX3RyYW1wb2xpbmVbc2l6ZW9mLi4uKF9UeXBlcyldOwot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNv
bnN0IHR5cGVuYW1lIF9fdmlzaXRvcl90YWJsZTxfVmlzaXRvcixfVHlwZXMuLi4+OjpfX2Z1bmNf
dHlwZSBfX3Zpc2l0b3JfdGFibGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190cmFtcG9saW5lW3Np
emVvZi4uLihfVHlwZXMpXT17Ci0gICAgICAgICZfX3RyYW1wb2xpbmVfZnVuYzxfVHlwZXM+Li4u
Ci0gICAgfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9UeXBl
cz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1R5
cGVzLi4uPjo6X190eXBlCi12aXNpdChfVmlzaXRvciYmIF9fdmlzaXRvcixWYXJpYW50PF9UeXBl
cy4uLj4mIF9fdil7Ci0gICAgcmV0dXJuIChfX3YudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKQot
ICAgICAgICA/IF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPHR5cGVuYW1lIF9fdmlzaXRvcl9y
ZXR1cm5fdHlwZTxfVmlzaXRvcixfVHlwZXMuLi4+OjpfX3R5cGU+KCJWaXNpdGluZyBvZiBlbXB0
eSBWYXJpYW50IikKLSAgICAgICAgOiBfX3Zpc2l0b3JfdGFibGU8X1Zpc2l0b3IsX1R5cGVzLi4u
Pjo6X190cmFtcG9saW5lW19fdi5pbmRleCgpXShfX3Zpc2l0b3IsX192KTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KLXN0cnVjdCBfX211
bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGV7Ci0gICAgdHlwZWRlZiBkZWNsdHlwZShzdGQ6OmRlY2x2
YWw8X1Zpc2l0b3ImPigpKGdldDwwPihzdGQ6OmRlY2x2YWw8X1ZhcmlhbnRzPigpKS4uLikpCi0g
ICAgX190eXBlOwotfTsKLQotdGVtcGxhdGU8c2l6ZV90IF9WYXJpYW50SW5kZXgsdHlwZW5hbWUg
X0luZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXI7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCAu
Li4gX0luZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXI8MCxfX2luZGV4X3NlcXVlbmNlPF9J
bmRpY2VzLi4uPj57Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4u
IF9WYXJpYW50cz4KLSAgICBzdGF0aWMgY29uc3RleHByIHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRv
cl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFudHMuLi4+OjpfX3R5cGUKLSAgICBfX3Zpc2l0
KF9WaXNpdG9yJiBfX3Zpc2l0b3IsX1ZhcmlhbnRzJiAuLi4gX192KXsKLSAgICAgICAgcmV0dXJu
IF9fdmlzaXRvcihnZXQ8X0luZGljZXM+KF9fdikuLi4pOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgotc3RydWN0IF9fYXJnX3NlbGVjdG9y
X3Q7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVj
dCBfX2FyZ19zZWxlY3Rvcl90PDAsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgX0hlYWQg
X190eXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBfX3R5cGUmIF9fc2VsZWN0KF9IZWFkJiBf
X2hlYWQsX1Jlc3QmIC4uLil7Ci0gICAgICAgIHJldHVybiBfX2hlYWQ7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+
Ci1zdHJ1Y3QgX19hcmdfc2VsZWN0b3JfdDxfSW5kZXgsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5
cGVkZWYgdHlwZW5hbWUgX19hcmdfc2VsZWN0b3JfdDxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlw
ZSBfX3R5cGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfX3R5cGUmIF9fc2VsZWN0KF9IZWFkJixf
UmVzdCYgLi4uIF9fcmVzdCl7Ci0gICAgICAgIHJldHVybiBfX2FyZ19zZWxlY3Rvcl90PF9JbmRl
eC0xLF9SZXN0Li4uPjo6X19zZWxlY3QoX19yZXN0Li4uKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfQXJncz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBf
X2FyZ19zZWxlY3Rvcl90PF9JbmRleCxfQXJncy4uLj46Ol9fdHlwZSYmIF9fYXJnX3NlbGVjdG9y
KF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgcmV0dXJuIHN0ZDo6Zm9yd2FyZDx0eXBlbmFtZSBf
X2FyZ19zZWxlY3Rvcl90PF9JbmRleCxfQXJncy4uLj46Ol9fdHlwZT4oCi0gICAgICAgIF9fYXJn
X3NlbGVjdG9yX3Q8X0luZGV4LF9BcmdzLi4uPjo6X19zZWxlY3QoX19hcmdzLi4uKSk7Ci19Ci0K
LXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsc2l6ZV90IF9WYXJpYW50SW5kZXgscHRyZGlmZl90
IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX3Zpc2l0X2hlbHBlcjJ7Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KLSAgICBzdGF0aWMgY29uc3Rl
eHByIHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFu
dHMuLi4+OjpfX3R5cGUKLSAgICBfX3Zpc2l0KF9WaXNpdG9yJiBfX3Zpc2l0b3IsX1ZhcmlhbnRz
JiYgLi4uIF9fdil7Ci0gICAgICAgIHJldHVybiAoX19hcmdfc2VsZWN0b3I8X1ZhcmlhbnRJbmRl
eC0xPihfX3YuLi4pLmluZGV4KCk9PV9JbmRleCkKLSAgICAgICAgICAgID8gX192aXNpdF9oZWxw
ZXI8X1ZhcmlhbnRJbmRleC0xLF9faW5kZXhfc2VxdWVuY2U8X0luZGV4LF9JbmRpY2VzLi4uPj46
Ol9fdmlzaXQoX192aXNpdG9yLHN0ZDo6Zm9yd2FyZDxfVmFyaWFudHM+KF9fdikuLi4pCi0gICAg
ICAgICAgICA6IF9fdmlzaXRfaGVscGVyMjxfSW5kZXgtMSxfVmFyaWFudEluZGV4LF9JbmRpY2Vz
Li4uPjo6X192aXNpdChfX3Zpc2l0b3Isc3RkOjpmb3J3YXJkPF9WYXJpYW50cz4oX192KS4uLik7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8c2l6ZV90IF9WYXJpYW50SW5kZXgscHRyZGlmZl90IC4u
LiBfSW5kaWNlcz4KLXN0cnVjdCBfX3Zpc2l0X2hlbHBlcjI8LTEsX1ZhcmlhbnRJbmRleCxfSW5k
aWNlcy4uLj57Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9W
YXJpYW50cz4KLSAgICBzdGF0aWMgY29uc3RleHByIHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9y
ZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFudHMuLi4+OjpfX3R5cGUKLSAgICBfX3Zpc2l0KF9W
aXNpdG9yJixfVmFyaWFudHMmJiAuLi4pewotICAgICAgICByZXR1cm4gX190aHJvd19iYWRfdmFy
aWFudF9hY2Nlc3M8dHlwZW5hbWUgX19tdWx0aV92aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9y
LF9WYXJpYW50cy4uLj46Ol9fdHlwZT4oIlZpc2l0aW5nIG9mIGVtcHR5IFZhcmlhbnQiKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudD4KLXN0cnVjdCBfX3ZhcmlhbnRf
dHlwZV9jb3VudDsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3Zh
cmlhbnRfdHlwZV9jb3VudDxWYXJpYW50PF9UeXBlcy4uLj4+ewotICAgIHN0YXRpYyBjb25zdGV4
cHIgc2l6ZV90IF9fdmFsdWU9c2l6ZW9mLi4uKF9UeXBlcyk7Ci19OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBfVmFyaWFudD4KLXN0cnVjdCBfX3ZhcmlhbnRfdHlwZV9jb3VudDxfVmFyaWFudCY+ewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IF9fdmFsdWU9X192YXJpYW50X3R5cGVfY291bnQ8
X1ZhcmlhbnQ+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQ+Ci1z
dHJ1Y3QgX192YXJpYW50X3R5cGVfY291bnQ8X1ZhcmlhbnQgY29uc3QmPnsKLSAgICBzdGF0aWMg
Y29uc3RleHByIHNpemVfdCBfX3ZhbHVlPV9fdmFyaWFudF90eXBlX2NvdW50PF9WYXJpYW50Pjo6
X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHNpemVfdCBfVmFyaWFudEluZGV4LHB0cmRpZmZfdCAu
Li4gX0luZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXI8X1ZhcmlhbnRJbmRleCxfX2luZGV4
X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRv
cix0eXBlbmFtZSAuLi4gX1ZhcmlhbnRzPgotICAgIHN0YXRpYyBjb25zdGV4cHIgdHlwZW5hbWUg
X19tdWx0aV92aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9WYXJpYW50cy4uLj46Ol9fdHlw
ZQotICAgIF9fdmlzaXQoX1Zpc2l0b3ImIF9fdmlzaXRvcixfVmFyaWFudHMmJiAuLi4gX192KXsK
LSAgICAgICAgcmV0dXJuIF9fdmlzaXRfaGVscGVyMjwKLSAgICAgICAgICAgIF9fdmFyaWFudF90
eXBlX2NvdW50PAotICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9fYXJnX3NlbGVjdG9yX3Q8Ci0g
ICAgICAgICAgICAgICAgICAgIF9WYXJpYW50SW5kZXgtMSxfVmFyaWFudHMuLi4+OjpfX3R5cGU+
OjpfX3ZhbHVlLTEsCi0gICAgICAgICAgICBfVmFyaWFudEluZGV4LF9JbmRpY2VzLi4uPjo6X192
aXNpdCgKLSAgICAgICAgICAgICAgICBfX3Zpc2l0b3Isc3RkOjpmb3J3YXJkPF9WYXJpYW50cyYm
PihfX3YpLi4uKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBl
bmFtZSAuLi4gX1ZhcmlhbnRzPgotY29uc3RleHByIHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9y
ZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFudHMuLi4+OjpfX3R5cGUKLXZpc2l0KF9WaXNpdG9y
JiYgX192aXNpdG9yLF9WYXJpYW50cyYmIC4uLiBfX3YpewotICAgIHJldHVybiBfX3Zpc2l0X2hl
bHBlcjxzaXplb2YuLi4oX1ZhcmlhbnRzKSxfX2luZGV4X3NlcXVlbmNlPD4+OjpfX3Zpc2l0KAot
ICAgICAgICBfX3Zpc2l0b3Isc3RkOjpmb3J3YXJkPF9WYXJpYW50cz4oX192KS4uLik7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09
KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19saHMsVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0
JiBfX3Jocyl7Ci0gICAgcmV0dXJuIChfX2xocy5pbmRleCgpPT1fX3Jocy5pbmRleCgpKSAmJgot
ICAgICAgICAoKF9fbGhzLmluZGV4KCk9PS0xKSB8fAotICAgICAgICAgX19lcXVhbGl0eV9vcF90
YWJsZTxWYXJpYW50PF9UeXBlcy4uLj4+OjpfX2VxdWFsaXR5X2NvbXBhcmVbX19saHMuaW5kZXgo
KV0oCi0gICAgICAgICAgICAgX19saHMsX19yaHMpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
Li4uIF9UeXBlcz4KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oVmFyaWFudDxfVHlwZXMuLi4+
IGNvbnN0JiBfX2xocyxWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsKLSAgICByZXR1
cm4gIShfX2xocz09X19yaHMpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgot
Y29uc3RleHByIGJvb2wgb3BlcmF0b3I8KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19saHMs
VmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Jocyl7Ci0gICAgcmV0dXJuIChfX2xocy5pbmRl
eCgpPF9fcmhzLmluZGV4KCkpIHx8Ci0gICAgICAgICgoX19saHMuaW5kZXgoKT09X19yaHMuaW5k
ZXgoKSkgJiYKLSAgICAgICAgICgoX19saHMuaW5kZXgoKSE9LTEpICYmCi0gICAgICAgICAgX19s
ZXNzX3RoYW5fb3BfdGFibGU8VmFyaWFudDxfVHlwZXMuLi4+Pjo6Ci0gICAgICAgICAgX19sZXNz
X3RoYW5fY29tcGFyZVtfX2xocy5pbmRleCgpXShfX2xocyxfX3JocykpKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihWYXJpYW50
PF9UeXBlcy4uLj4gY29uc3QmIF9fbGhzLFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19yaHMp
ewotICAgIHJldHVybiBfX3JoczxfX2xoczsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9U
eXBlcz4KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0oVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0
JiBfX2xocyxWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsKLSAgICByZXR1cm4gIShf
X2xoczxfX3Jocyk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4
cHIgYm9vbCBvcGVyYXRvcjw9KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19saHMsVmFyaWFu
dDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Jocyl7Ci0gICAgcmV0dXJuICEoX19saHM+X19yaHMpOwor
Y29uc3RleHByIGNvbnN0IF9UeXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYmIF9f
dikKK3sKKyAgICByZXR1cm4gc3RkOjpnZXQ8X1R5cGU+KFdURk1vdmUoX192KSk7CiB9CiAKLXN0
cnVjdCBNb25vc3RhdGV7fTsKLQotY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShNb25vc3RhdGUg
Y29uc3QmLCBNb25vc3RhdGUgY29uc3QmKSB7IHJldHVybiB0cnVlOyB9Ci1jb25zdGV4cHIgYm9v
bCBvcGVyYXRvciE9KE1vbm9zdGF0ZSBjb25zdCYsIE1vbm9zdGF0ZSBjb25zdCYpIHsgcmV0dXJu
IGZhbHNlOyB9Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KE1vbm9zdGF0ZSBjb25zdCYsIE1v
bm9zdGF0ZSBjb25zdCYpIHsgcmV0dXJuIHRydWU7IH0KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9y
PD0oTW9ub3N0YXRlIGNvbnN0JiwgTW9ub3N0YXRlIGNvbnN0JikgeyByZXR1cm4gdHJ1ZTsgfQot
Y29uc3RleHByIGJvb2wgb3BlcmF0b3I+KE1vbm9zdGF0ZSBjb25zdCYsIE1vbm9zdGF0ZSBjb25z
dCYpIHsgcmV0dXJuIGZhbHNlOyB9Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoTW9ub3N0YXRl
IGNvbnN0JiwgTW9ub3N0YXRlIGNvbnN0JikgeyByZXR1cm4gZmFsc2U7IH0KLQotc3RydWN0IF9f
aGFzaF92aXNpdG9yewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotICAgIHNpemVfdCBv
cGVyYXRvcigpKF9UeXBlIGNvbnN0JiBfX3gpewotICAgICAgICByZXR1cm4gc3RkOjpoYXNoPF9U
eXBlPigpKF9feCk7Ci0gICAgfQotfTsKLQotLy8gLS0gV2ViS2l0IEFkZGl0aW9ucyAtLQotCiB0
ZW1wbGF0ZTxjbGFzcyBWLCBjbGFzcy4uLiBGPgotYXV0byBzd2l0Y2hPbihWJiYgdiwgRiYmLi4u
IGYpIC0+IGRlY2x0eXBlKFdURjo6dmlzaXQobWFrZVZpc2l0b3Ioc3RkOjpmb3J3YXJkPEY+KGYp
Li4uKSwgc3RkOjpmb3J3YXJkPFY+KHYpKSkKK2F1dG8gc3dpdGNoT24oViYmIHYsIEYmJi4uLiBm
KSAtPiBkZWNsdHlwZShzdGQ6OnZpc2l0KG1ha2VWaXNpdG9yKHN0ZDo6Zm9yd2FyZDxGPihmKS4u
LiksIHN0ZDo6Zm9yd2FyZDxWPih2KSkpCiB7Ci0gICAgcmV0dXJuIFdURjo6dmlzaXQobWFrZVZp
c2l0b3Ioc3RkOjpmb3J3YXJkPEY+KGYpLi4uKSwgc3RkOjpmb3J3YXJkPFY+KHYpKTsKKyAgICBy
ZXR1cm4gc3RkOjp2aXNpdChtYWtlVmlzaXRvcihzdGQ6OmZvcndhcmQ8Rj4oZikuLi4pLCBzdGQ6
OmZvcndhcmQ8Vj4odikpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAotbmFtZXNwYWNlIHN0
ZCB7Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBoYXNoPFdURjo6TW9ub3N0YXRlPnsKLSAgICBzaXpl
X3Qgb3BlcmF0b3IoKShXVEY6Ok1vbm9zdGF0ZSkgX19OT0VYQ0VQVHsKLSAgICAgICAgcmV0dXJu
IDQyOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3Qg
aGFzaDxXVEY6OlZhcmlhbnQ8X1R5cGVzLi4uPj57Ci0gICAgc2l6ZV90IG9wZXJhdG9yKCkoV1RG
OjpWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QgJnYpIF9fTk9FWENFUFQgewotICAgICAgICByZXR1
cm4gc3RkOjpoYXNoPHB0cmRpZmZfdD4oKSh2LmluZGV4KCkpIF4gV1RGOjp2aXNpdChXVEY6Ol9f
aGFzaF92aXNpdG9yKCksIHYpOwotICAgIH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIHN0ZAotCiB1
c2luZyBXVEY6Ok1vbm9zdGF0ZTsKIHVzaW5nIFdURjo6VmFyaWFudDsKLQotI2VuZGlmIC8vICFD
T01QSUxFUihDTEFORykgfHwgV1RGX0NQUF9TVERfVkVSID49IDE0Ci0KLSNpZiBDT01QSUxFUihN
U1ZDKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9jYWNoZS9ET01DYWNoZUVuZ2luZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2NhY2hlL0RPTUNhY2hlRW5naW5lLmNwcAppbmRleCBlMTkwNGRiYjc2YWQyMDJjYzYz
ZjZhMjY3ZjgwZTk0ZWUxOTY3YjY2Li4yNTkxNGI0MGJiMjM4M2EwNzg4MDRmODliMTFiNDBkODk3
MGI0MzA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hl
RW5naW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlRW5n
aW5lLmNwcApAQCAtMTI5LDIyICsxMjksMjIgQEAgYm9vbCBxdWVyeUNhY2hlTWF0Y2goY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBVUkwmIHVybCwgYm9vbCBoYXNWYXIKIAog
UmVzcG9uc2VCb2R5IGlzb2xhdGVkUmVzcG9uc2VCb2R5KGNvbnN0IFJlc3BvbnNlQm9keSYgYm9k
eSkKIHsKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihib2R5LCBbXShjb25zdCBSZWY8Rm9ybURh
dGE+JiBmb3JtRGF0YSkgeworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGJvZHksIFtdKGNvbnN0
IFJlZjxGb3JtRGF0YT4mIGZvcm1EYXRhKSAtPiBSZXNwb25zZUJvZHkgewogICAgICAgICByZXR1
cm4gZm9ybURhdGEtPmlzb2xhdGVkQ29weSgpOwotICAgIH0sIFtdKGNvbnN0IFJlZjxTaGFyZWRC
dWZmZXI+JiBidWZmZXIpIHsKKyAgICB9LCBbXShjb25zdCBSZWY8U2hhcmVkQnVmZmVyPiYgYnVm
ZmVyKSAtPiBSZXNwb25zZUJvZHkgewogICAgICAgICByZXR1cm4gYnVmZmVyLT5jb3B5KCk7Ci0g
ICAgfSwgW10oY29uc3Qgc3RkOjpudWxscHRyX3QmKSB7CisgICAgfSwgW10oY29uc3Qgc3RkOjpu
dWxscHRyX3QmKSAtPiBSZXNwb25zZUJvZHkgewogICAgICAgICByZXR1cm4gRE9NQ2FjaGVFbmdp
bmU6OlJlc3BvbnNlQm9keSB7IH07CiAgICAgfSk7CiB9CiAKIFJlc3BvbnNlQm9keSBjb3B5UmVz
cG9uc2VCb2R5KGNvbnN0IFJlc3BvbnNlQm9keSYgYm9keSkKIHsKLSAgICByZXR1cm4gV1RGOjpz
d2l0Y2hPbihib2R5LCBbXShjb25zdCBSZWY8Rm9ybURhdGE+JiBmb3JtRGF0YSkgeworICAgIHJl
dHVybiBXVEY6OnN3aXRjaE9uKGJvZHksIFtdKGNvbnN0IFJlZjxGb3JtRGF0YT4mIGZvcm1EYXRh
KSAtPiBSZXNwb25zZUJvZHkgewogICAgICAgICByZXR1cm4gZm9ybURhdGEuY29weVJlZigpOwot
ICAgIH0sIFtdKGNvbnN0IFJlZjxTaGFyZWRCdWZmZXI+JiBidWZmZXIpIHsKKyAgICB9LCBbXShj
b25zdCBSZWY8U2hhcmVkQnVmZmVyPiYgYnVmZmVyKSAtPiBSZXNwb25zZUJvZHkgewogICAgICAg
ICByZXR1cm4gYnVmZmVyLmNvcHlSZWYoKTsKLSAgICB9LCBbXShjb25zdCBzdGQ6Om51bGxwdHJf
dCYpIHsKKyAgICB9LCBbXShjb25zdCBzdGQ6Om51bGxwdHJfdCYpIC0+IFJlc3BvbnNlQm9keSB7
CiAgICAgICAgIHJldHVybiBET01DYWNoZUVuZ2luZTo6UmVzcG9uc2VCb2R5IHsgfTsKICAgICB9
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5
T3duZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlPd25lci5j
cHAKaW5kZXggZWY2ZGEwNDk4OThlYmFkODFlNjc3NTgxZjBkMTJiZDMzOGY2MTI1My4uODg0Yzhi
ODc4MzkxOTkwYzM3NzVjMjFjODNjMDExMTNjYzA4MWE1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlPd25lci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlPd25lci5jcHAKQEAgLTM4OCw5ICszODgsOSBAQCBS
ZXNvdXJjZUVycm9yIEZldGNoQm9keU93bmVyOjpsb2FkaW5nRXJyb3IoKSBjb25zdAogCiBzdGQ6
Om9wdGlvbmFsPEV4Y2VwdGlvbj4gRmV0Y2hCb2R5T3duZXI6OmxvYWRpbmdFeGNlcHRpb24oKSBj
b25zdAogewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fbG9hZGluZ0Vycm9yLCBbXShjb25z
dCBSZXNvdXJjZUVycm9yJiBlcnJvcikgeworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fbG9h
ZGluZ0Vycm9yLCBbXShjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikgLT4gc3RkOjpvcHRpb25h
bDxFeGNlcHRpb24+IHsKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciwgZXJy
b3Iuc2FuaXRpemVkRGVzY3JpcHRpb24oKSB9OwotICAgIH0sIFtdKGNvbnN0IEV4Y2VwdGlvbiYg
ZXhjZXB0aW9uKSB7CisgICAgfSwgW10oY29uc3QgRXhjZXB0aW9uJiBleGNlcHRpb24pIC0+IHN0
ZDo6b3B0aW9uYWw8RXhjZXB0aW9uPiB7CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBleGNl
cHRpb24gfTsKICAgICB9LCBbXShhdXRvJiYpIC0+IHN0ZDo6b3B0aW9uYWw8RXhjZXB0aW9uPiB7
CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCmluZGV4IDc0YTlkOWY4NjM1MWM1YWVjYjcyYmRj
ZTIwMGM0ZDc1MDA4MmViYTcuLmZkNmQ1YTM5OWIzZmNhNjYyNGZmMzQ5NGRiYWU4NzdmNThiNDE0
MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBh
dGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGgu
Y3BwCkBAIC0yMDMsNyArMjAzLDcgQEAgYm9vbCBpc0lEQktleVBhdGhWYWxpZChjb25zdCBJREJL
ZXlQYXRoJiBrZXlQYXRoKQogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0p
OwotICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIGtleVBhdGgpOworICAgIHJldHVybiBz
dGQ6OnZpc2l0KHZpc2l0b3IsIGtleVBhdGgpOwogfQogCiBJREJLZXlQYXRoIGlzb2xhdGVkQ29w
eShjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQpAQCAtMjE4LDcgKzIxOCw3IEBAIElEQktleVBh
dGggaXNvbGF0ZWRDb3B5KGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCiAgICAgICAgIHJldHVy
biB2ZWN0b3JDb3B5OwogICAgIH0pOwogCi0gICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwg
a2V5UGF0aCk7CisgICAgcmV0dXJuIHN0ZDo6dmlzaXQodmlzaXRvciwga2V5UGF0aCk7CiB9CiAK
ICNpZiAhTE9HX0RJU0FCTEVECkBAIC0yNDIsNyArMjQyLDcgQEAgU3RyaW5nIGxvZ2dpbmdTdHJp
bmcoY29uc3QgSURCS2V5UGF0aCYgcGF0aCkKICAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJp
bmcoKTsKICAgICB9KTsKIAotICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIHBhdGgpOwor
ICAgIHJldHVybiBzdGQ6OnZpc2l0KHZpc2l0b3IsIHBhdGgpOwogfQogI2VuZGlmCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKaW5kZXggNTRl
NzhiYWNiZmI1OWE2YjRkNmFjYzNiM2RlYmRlOTdiYjhhMjZjNC4uOWFmZGQ5ZTBjMGJjY2MwNWVl
Y2NhYWQ1NDliMGE3Yzc1YzlkMGUzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCUmVxdWVzdC5jcHAKQEAgLTIwNiw5ICsyMDYsOSBAQCB1aW50NjRfdCBJREJS
ZXF1ZXN0Ojpzb3VyY2VPYmplY3RTdG9yZUlkZW50aWZpZXIoKSBjb25zdAogICAgICAgICByZXR1
cm4gMDsKIAogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fc291cmNlLnZhbHVlKCksCi0gICAg
ICAgIFtdIChjb25zdCBSZWZQdHI8SURCT2JqZWN0U3RvcmU+JiBvYmplY3RTdG9yZSkgeyByZXR1
cm4gb2JqZWN0U3RvcmUtPmluZm8oKS5pZGVudGlmaWVyKCk7IH0sCi0gICAgICAgIFtdIChjb25z
dCBSZWZQdHI8SURCSW5kZXg+JiBpbmRleCkgeyByZXR1cm4gaW5kZXgtPmluZm8oKS5vYmplY3RT
dG9yZUlkZW50aWZpZXIoKTsgfSwKLSAgICAgICAgW10gKGNvbnN0IFJlZlB0cjxJREJDdXJzb3I+
JikgeyByZXR1cm4gMDsgfQorICAgICAgICBbXSAoY29uc3QgUmVmUHRyPElEQk9iamVjdFN0b3Jl
PiYgb2JqZWN0U3RvcmUpIC0+IHVpbnQ2NF90IHsgcmV0dXJuIG9iamVjdFN0b3JlLT5pbmZvKCku
aWRlbnRpZmllcigpOyB9LAorICAgICAgICBbXSAoY29uc3QgUmVmUHRyPElEQkluZGV4PiYgaW5k
ZXgpIC0+IHVpbnQ2NF90IHsgcmV0dXJuIGluZGV4LT5pbmZvKCkub2JqZWN0U3RvcmVJZGVudGlm
aWVyKCk7IH0sCisgICAgICAgIFtdIChjb25zdCBSZWZQdHI8SURCQ3Vyc29yPiYpIC0+IHVpbnQ2
NF90IHsgcmV0dXJuIDA7IH0KICAgICApOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5jcHAKaW5k
ZXggNGM5YTk1NmMyMGVjMjRiODY0YmUxZjc2MjNkZDViMGUyNDAyZTRlNC4uMmEyYzFmYzMyOTU4
MDVkNTJmZDU2YWYzMGI0NTVhZTJjY2NjNDg3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0aW9uLmNwcApA
QCAtNTMsNyArNTMsNyBAQCBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzZXJpYWxpemVJREJLZXlQYXRo
KGNvbnN0IHN0ZDo6b3B0aW9uYWw8SURCS2V5UGF0aD4mIGtleVBhdAogICAgICAgICAgICAgICAg
IGVuY29kZXIuZW5jb2RlU3RyaW5nKCJzdHJpbmciLCBzdHJpbmcpOwogICAgICAgICAgICAgfSk7
CiAgICAgICAgIH0pOwotICAgICAgICBXVEY6OnZpc2l0KHZpc2l0b3IsIGtleVBhdGgudmFsdWUo
KSk7CisgICAgICAgIHN0ZDo6dmlzaXQodmlzaXRvciwga2V5UGF0aC52YWx1ZSgpKTsKICAgICB9
IGVsc2UKICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRW51bSgidHlwZSIsIEtleVBhdGhUeXBlOjpO
dWxsKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xz
L01lZGlhQ29udHJvbHNIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250
cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAKaW5kZXggZDA5Y2I3ZGE1YmM4NmY3OWUzM2ZlNDkx
OWY0OTdkMGRkYWQ3ZGY2MC4uN2E1ZTQ4NDZjNDAwMjIwMDdjZjg0NDQ3NDdmZWZiZWJmYTllMjRm
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlh
Q29udHJvbHNIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJv
bHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCkBAIC0xNjYsNyArMTY2LDcgQEAgU3RyaW5nIE1lZGlh
Q29udHJvbHNIb3N0OjpkaXNwbGF5TmFtZUZvclRyYWNrKGNvbnN0IHN0ZDo6b3B0aW9uYWw8VGV4
dE9yQXVkaW9UcmEKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygp
OwogCi0gICAgcmV0dXJuIFdURjo6dmlzaXQoW3BhZ2VdIChhdXRvJiB0cmFjaykgeworICAgIHJl
dHVybiBzdGQ6OnZpc2l0KFtwYWdlXSAoYXV0byYgdHJhY2spIHsKICAgICAgICAgcmV0dXJuIHBh
Z2UtPmdyb3VwKCkuZW5zdXJlQ2FwdGlvblByZWZlcmVuY2VzKCkuZGlzcGxheU5hbWVGb3JUcmFj
ayh0cmFjay5nZXQoKSk7CiAgICAgfSwgdHJhY2sudmFsdWUoKSk7CiB9CkBAIC02ODEsMTMgKzY4
MSwxMyBAQCBib29sIE1lZGlhQ29udHJvbHNIb3N0OjpzaG93TWVkaWFDb250cm9sc0NvbnRleHRN
ZW51KEhUTUxFbGVtZW50JiB0YXJnZXQsIFN0cmluZwogI2VuZGlmIC8vIEVOQUJMRShWSURFT19Q
UkVTRU5UQVRJT05fTU9ERSkKICAgICAgICAgICAgIFsmXSAoUmVmUHRyPEF1ZGlvVHJhY2s+JiBz
ZWxlY3RlZEF1ZGlvVHJhY2spIHsKICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHRyYWNrIDog
aWRNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGF1ZGlvVHJh
Y2sgPSBXVEY6OmdldF9pZjxSZWZQdHI8QXVkaW9UcmFjaz4+KHRyYWNrKSkKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGF1dG8qIGF1ZGlvVHJhY2sgPSBzdGQ6OmdldF9pZjxSZWZQdHI8QXVkaW9U
cmFjaz4+KCZ0cmFjaykpCiAgICAgICAgICAgICAgICAgICAgICAgICAoKmF1ZGlvVHJhY2spLT5z
ZXRFbmFibGVkKCphdWRpb1RyYWNrID09IHNlbGVjdGVkQXVkaW9UcmFjayk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIFsmXSAoUmVmUHRyPFRleHRUcmFj
az4mIHNlbGVjdGVkVGV4dFRyYWNrKSB7CiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiB0cmFj
ayA6IGlkTWFwLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiB0ZXh0
VHJhY2sgPSBXVEY6OmdldF9pZjxSZWZQdHI8VGV4dFRyYWNrPj4odHJhY2spKQorICAgICAgICAg
ICAgICAgICAgICBpZiAoYXV0byogdGV4dFRyYWNrID0gc3RkOjpnZXRfaWY8UmVmUHRyPFRleHRU
cmFjaz4+KCZ0cmFjaykpCiAgICAgICAgICAgICAgICAgICAgICAgICAoKnRleHRUcmFjayktPnNl
dE1vZGUoVGV4dFRyYWNrOjpNb2RlOjpEaXNhYmxlZCk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIG1lZGlhRWxlbWVudC5zZXRTZWxlY3RlZFRleHRUcmFjayhzZWxlY3RlZFRl
eHRUcmFjay5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCmluZGV4IDNjNzZjNTdhOGI3MzVkYjBlNWIx
ODhjZjJlNDZmY2UyZjlhOWUzNTEuLmZlMWEwMWVkY2RmOWQ4MGFlMGU1Mjc4MjhjYzY5MWJkMjky
MzU0NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRD
UGVlckNvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCkBAIC0zMzEsNyArMzMxLDcgQEAgdm9pZCBSVENQZWVy
Q29ubmVjdGlvbjo6YWRkSWNlQ2FuZGlkYXRlKENhbmRpZGF0ZSYmIHJ0Y0NhbmRpZGF0ZSwgUmVm
PERlZmVycmVkUHIKICAgICBzdGQ6Om9wdGlvbmFsPEV4Y2VwdGlvbj4gZXhjZXB0aW9uOwogICAg
IFJlZlB0cjxSVENJY2VDYW5kaWRhdGU+IGNhbmRpZGF0ZTsKICAgICBpZiAocnRjQ2FuZGlkYXRl
KSB7Ci0gICAgICAgIGNhbmRpZGF0ZSA9IHN3aXRjaE9uKCpydGNDYW5kaWRhdGUsIFsmZXhjZXB0
aW9uXShSVENJY2VDYW5kaWRhdGVJbml0JiBpbml0KSAtPiBSZWZQdHI8UlRDSWNlQ2FuZGlkYXRl
PiB7CisgICAgICAgIGNhbmRpZGF0ZSA9IFdURjo6c3dpdGNoT24oKnJ0Y0NhbmRpZGF0ZSwgWyZl
eGNlcHRpb25dKFJUQ0ljZUNhbmRpZGF0ZUluaXQmIGluaXQpIC0+IFJlZlB0cjxSVENJY2VDYW5k
aWRhdGU+IHsKICAgICAgICAgICAgIGlmIChpbml0LmNhbmRpZGF0ZS5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRwVHJhbnNmb3JtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRwVHJhbnNmb3JtLmNwcAppbmRleCBkYWY4OTdlYTQ3
MjE4NmQ2Y2M3YjdhZDYyMmRmZjY2ZmE2MTc3NTZiLi4wMWYwZTAxY2JkNDVjYzYyMjc1NTE0YjA2
YWYzM2U5OWQyNjAyN2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL1JUQ1J0cFRyYW5zZm9ybS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9SVENSdHBUcmFuc2Zvcm0uY3BwCkBAIC01Miw3ICs1Miw3IEBAIFJUQ1J0cFRy
YW5zZm9ybTo6flJUQ1J0cFRyYW5zZm9ybSgpCiAKIGJvb2wgUlRDUnRwVHJhbnNmb3JtOjppc0F0
dGFjaGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc3dpdGNoT24obV90cmFuc2Zvcm0sIFsmXShj
b25zdCBSZWZQdHI8UlRDUnRwU0ZyYW1lVHJhbnNmb3JtPiYgc2ZyYW1lVHJhbnNmb3JtKSB7Cisg
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV90cmFuc2Zvcm0sIFsmXShjb25zdCBSZWZQdHI8UlRD
UnRwU0ZyYW1lVHJhbnNmb3JtPiYgc2ZyYW1lVHJhbnNmb3JtKSB7CiAgICAgICAgIHJldHVybiBz
ZnJhbWVUcmFuc2Zvcm0tPmlzQXR0YWNoZWQoKTsKICAgICB9LCBbJl0oY29uc3QgUmVmUHRyPFJU
Q1J0cFNjcmlwdFRyYW5zZm9ybT4mIHNjcmlwdFRyYW5zZm9ybSkgewogICAgICAgICByZXR1cm4g
c2NyaXB0VHJhbnNmb3JtLT5pc0F0dGFjaGVkKCk7CkBAIC0xMzEsMTQgKzEzMSwxNCBAQCB2b2lk
IFJUQ1J0cFRyYW5zZm9ybTo6ZGV0YWNoRnJvbVNlbmRlcihSVENSdHBTZW5kZXImKQogCiBib29s
IG9wZXJhdG9yPT0oY29uc3QgUlRDUnRwVHJhbnNmb3JtJiBhLCBjb25zdCBSVENSdHBUcmFuc2Zv
cm0mIGIpCiB7Ci0gICAgcmV0dXJuIHN3aXRjaE9uKGEubV90cmFuc2Zvcm0sIFsmXShjb25zdCBS
ZWZQdHI8UlRDUnRwU0ZyYW1lVHJhbnNmb3JtPiYgc2ZyYW1lVHJhbnNmb3JtQSkgewotICAgICAg
ICByZXR1cm4gc3dpdGNoT24oYi5tX3RyYW5zZm9ybSwgWyZdKGNvbnN0IFJlZlB0cjxSVENSdHBT
RnJhbWVUcmFuc2Zvcm0+JiBzZnJhbWVUcmFuc2Zvcm1CKSB7CisgICAgcmV0dXJuIFdURjo6c3dp
dGNoT24oYS5tX3RyYW5zZm9ybSwgWyZdKGNvbnN0IFJlZlB0cjxSVENSdHBTRnJhbWVUcmFuc2Zv
cm0+JiBzZnJhbWVUcmFuc2Zvcm1BKSB7CisgICAgICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGIu
bV90cmFuc2Zvcm0sIFsmXShjb25zdCBSZWZQdHI8UlRDUnRwU0ZyYW1lVHJhbnNmb3JtPiYgc2Zy
YW1lVHJhbnNmb3JtQikgewogICAgICAgICAgICAgcmV0dXJuIHNmcmFtZVRyYW5zZm9ybUEuZ2V0
KCkgPT0gc2ZyYW1lVHJhbnNmb3JtQi5nZXQoKTsKICAgICAgICAgfSwgWyZdKGNvbnN0IFJlZlB0
cjxSVENSdHBTY3JpcHRUcmFuc2Zvcm0+JikgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9KTsKICAgICB9LCBbJl0oY29uc3QgUmVmUHRyPFJUQ1J0cFNjcmlwdFRyYW5zZm9y
bT4mIHNjcmlwdFRyYW5zZm9ybUEpIHsKLSAgICAgICAgcmV0dXJuIHN3aXRjaE9uKGIubV90cmFu
c2Zvcm0sIFsmXShjb25zdCBSZWZQdHI8UlRDUnRwU0ZyYW1lVHJhbnNmb3JtPiYpIHsKKyAgICAg
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24oYi5tX3RyYW5zZm9ybSwgWyZdKGNvbnN0IFJlZlB0cjxS
VENSdHBTRnJhbWVUcmFuc2Zvcm0+JikgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9LCBbJl0oY29uc3QgUmVmUHRyPFJUQ1J0cFNjcmlwdFRyYW5zZm9ybT4mIHNjcmlwdFRy
YW5zZm9ybUIpIHsKICAgICAgICAgICAgIHJldHVybiBzY3JpcHRUcmFuc2Zvcm1BLmdldCgpID09
IHNjcmlwdFRyYW5zZm9ybUIuZ2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENSdHBTZW5kZXJCYWNrZW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1J0
cFNlbmRlckJhY2tlbmQuY3BwCmluZGV4IGQwMDcxODJhZTE3NjI0MDE0NWJmNGYyMTBkYzJkOGY5
ZmFlMTE5M2EuLmM5OTkyMjAzYTViZDVkMTc5Mjk5YWY4NzY5NTg1YTJlMjE2MmVlZjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldl
YlJUQ1J0cFNlbmRlckJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1J0cFNlbmRlckJhY2tlbmQuY3BwCkBAIC01OSwx
NyArNTksNiBAQCBMaWJXZWJSVENSdHBTZW5kZXJCYWNrZW5kOjp+TGliV2ViUlRDUnRwU2VuZGVy
QmFja2VuZCgpCiAgICAgc3RvcFNvdXJjZSgpOwogfQogCi1zdGF0aWMgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IExpYldlYlJUQ1J0cFNlbmRlckJhY2tlbmQ6OlNvdXJjZSYgYSwgY29uc3QgTGliV2Vi
UlRDUnRwU2VuZGVyQmFja2VuZDo6U291cmNlJiBiKQotewotICAgIHJldHVybiBzd2l0Y2hPbihh
LCBbJmJdKGNvbnN0IFJlZjxSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2U+JiBzb3VyY2UpIHsK
LSAgICAgICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPFJlYWx0aW1lT3V0Z29p
bmdBdWRpb1NvdXJjZT4+KGIpICYmIHNvdXJjZS5wdHIoKSA9PSBXVEY6OmdldDxSZWY8UmVhbHRp
bWVPdXRnb2luZ0F1ZGlvU291cmNlPj4oYikucHRyKCk7Ci0gICAgfSwgWyZiXShjb25zdCBSZWY8
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlPiYgc291cmNlKSB7Ci0gICAgICAgIHJldHVybiBX
VEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U+Pihi
KSAmJiBzb3VyY2UucHRyKCkgPT0gV1RGOjpnZXQ8UmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZT4+KGIpLnB0cigpOwotICAgIH0sIFsmYl0oc3RkOjpudWxscHRyX3QpIHsKLSAgICAgICAg
cmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8c3RkOjpudWxscHRyX3Q+KGIpOwotICAgIH0p
OwotfQotCiB2b2lkIExpYldlYlJUQ1J0cFNlbmRlckJhY2tlbmQ6OnN0YXJ0U291cmNlKCkKIHsK
ICAgICAvLyBXZSBhc3luY2hyb25vdXNseSBzdGFydCB0aGUgc291cmNlcyB0byBndWFyYW50ZWUg
bWVkaWEgZ29lcyB0aHJvdWdoIHRoZSB0cmFuc2Zvcm0gaWYgYSB0cmFuc2Zvcm0gaXMgc2V0IHdo
ZW4gY3JlYXRpbmcgdGhlIHRyYWNrLgpAQCAtMTg0LDcgKzE3Myw3IEBAIHZvaWQgTGliV2ViUlRD
UnRwU2VuZGVyQmFja2VuZDo6c2V0TWVkaWFTdHJlYW1JZHMoY29uc3QgVmVjdG9yPFN0cmluZz4m
IHN0cmVhbUlkCiAKIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZSogTGliV2ViUlRDUnRwU2Vu
ZGVyQmFja2VuZDo6dmlkZW9Tb3VyY2UoKQogewotICAgIHJldHVybiBzd2l0Y2hPbihtX3NvdXJj
ZSwKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3NvdXJjZSwKICAgICAgICAgW10oUmVmPFJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZT4mIHNvdXJjZSkgeyByZXR1cm4gc291cmNlLnB0cigp
OyB9LAogICAgICAgICBbXShjb25zdCBhdXRvJikgLT4gUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlKiB7IHJldHVybiBudWxscHRyOyB9CiAgICAgKTsKQEAgLTE5Miw3ICsxODEsNyBAQCBSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2UqIExpYldlYlJUQ1J0cFNlbmRlckJhY2tlbmQ6OnZpZGVv
U291cmNlKCkKIAogYm9vbCBMaWJXZWJSVENSdHBTZW5kZXJCYWNrZW5kOjpoYXNTb3VyY2UoKSBj
b25zdAogewotICAgIHJldHVybiBzd2l0Y2hPbihtX3NvdXJjZSwKKyAgICByZXR1cm4gV1RGOjpz
d2l0Y2hPbihtX3NvdXJjZSwKICAgICAgICAgW10oY29uc3Qgc3RkOjpudWxscHRyX3QmKSB7IHJl
dHVybiBmYWxzZTsgfSwKICAgICAgICAgW10oY29uc3QgYXV0byYpIHsgcmV0dXJuIHRydWU7IH0K
ICAgICApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUkZy
YW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJGcmFtZS5jcHAKaW5k
ZXggN2U3ZjY5ZGM1YTg1NjliNDYzNzQxZTY3MDRkNWFlNjYwMDNhZTg1NS4uY2Q3MWIzOTExNTc4
NTU5YjlhZmJkNDM4Mzg0NjIxMjQzYmQ1OTAzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJ4ci9XZWJYUkZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYnhyL1dlYlhSRnJhbWUuY3BwCkBAIC0xODQsNyArMTg0LDcgQEAgRXhjZXB0aW9uT3I8UmVm
UHRyPFdlYlhSVmlld2VyUG9zZT4+IFdlYlhSRnJhbWU6OmdldFZpZXdlclBvc2UoY29uc3QgRG9j
dW1lbnQmIGQKICAgICAgICAgYXV0byB0cmFuc2Zvcm0gPSBXZWJYUlJpZ2lkVHJhbnNmb3JtOjpj
cmVhdGUocG9zZS0+dHJhbnNmb3JtKCkucmF3VHJhbnNmb3JtKCkgKiBvZmZzZXQpOwogCiAgICAg
ICAgIC8vIFNldCBwcm9qZWN0aW9uIG1hdHJpeCBmb3IgZWFjaCB2aWV3Ci0gICAgICAgIHN0ZDo6
YXJyYXk8ZmxvYXQsIDE2PiBwcm9qZWN0aW9uID0gc3dpdGNoT24oZnJhbWVEYXRhLnZpZXdzW2lu
ZGV4XS5wcm9qZWN0aW9uLCBbJl0oY29uc3QgUGxhdGZvcm1YUjo6RGV2aWNlOjpGcmFtZURhdGE6
OkZvdiYgZm92KSB7CisgICAgICAgIHN0ZDo6YXJyYXk8ZmxvYXQsIDE2PiBwcm9qZWN0aW9uID0g
V1RGOjpzd2l0Y2hPbihmcmFtZURhdGEudmlld3NbaW5kZXhdLnByb2plY3Rpb24sIFsmXShjb25z
dCBQbGF0Zm9ybVhSOjpEZXZpY2U6OkZyYW1lRGF0YTo6Rm92JiBmb3YpIHsKICAgICAgICAgICAg
IGRvdWJsZSBuZWFyID0gbV9zZXNzaW9uLT5yZW5kZXJTdGF0ZSgpLmRlcHRoTmVhcigpOwogICAg
ICAgICAgICAgZG91YmxlIGZhciA9IG1fc2Vzc2lvbi0+cmVuZGVyU3RhdGUoKS5kZXB0aEZhcigp
OwogICAgICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybWF0aW9uTWF0cml4Ojpmcm9tUHJvamVjdGlv
bihmb3YudXAsIGZvdi5kb3duLCBmb3YubGVmdCwgZm92LnJpZ2h0LCBuZWFyLCBmYXIpLnRvQ29s
dW1uTWFqb3JGbG9hdEFycmF5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCmluZGV4IGVi
YTUxOTI3MjYyZGNiNDUzY2MyMzQ4ODBiMzdlOTc5NDAxNmZmYzAuLmM3MTZiM2I3ZmUxZWIyZGMz
NDk0YjY1OTdiNTczMGMxYzQ4MGE1M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCkBA
IC03ODEsNyArNzgxLDcgQEAgSW50UG9pbnQgQVhJc29sYXRlZE9iamVjdDo6aW50UG9pbnRBdHRy
aWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGMKIHsKICAgICBhdXRvIHZh
bHVlID0gbV9wcm9wZXJ0eU1hcC5nZXQocHJvcGVydHlOYW1lKTsKICAgICByZXR1cm4gV1RGOjpz
d2l0Y2hPbih2YWx1ZSwKLSAgICAgICAgW10gKEludFBvaW50JiB0eXBlZFZhbHVlKSB7IHJldHVy
biB0eXBlZFZhbHVlOyB9LAorICAgICAgICBbXSAoSW50UG9pbnQmIHR5cGVkVmFsdWUpIC0+IElu
dFBvaW50IHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCiAgICAgICAgIFtdIChhdXRvJikgeyByZXR1
cm4gSW50UG9pbnQoKTsgfQogICAgICk7CiB9CkBAIC03OTAsNyArNzkwLDcgQEAgQVhDb3JlT2Jq
ZWN0KiBBWElzb2xhdGVkT2JqZWN0OjpvYmplY3RBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUKIHsKICAgICBhdXRvIHZhbHVlID0gbV9wcm9wZXJ0eU1hcC5nZXQocHJv
cGVydHlOYW1lKTsKICAgICBBWElEIG5vZGVJRCA9IFdURjo6c3dpdGNoT24odmFsdWUsCi0gICAg
ICAgIFtdIChBWElEJiB0eXBlZFZhbHVlKSB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAorICAgICAg
ICBbXSAoQVhJRCYgdHlwZWRWYWx1ZSkgLT4gQVhJRCB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAog
ICAgICAgICBbXSAoYXV0byYpIHsgcmV0dXJuIEludmFsaWRBWElEOyB9CiAgICAgKTsKIApAQCAt
ODAyLDcgKzgwMiw3IEBAIFQgQVhJc29sYXRlZE9iamVjdDo6cmVjdEF0dHJpYnV0ZVZhbHVlKEFY
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKIHsKICAgICBhdXRvIHZhbHVlID0gbV9w
cm9wZXJ0eU1hcC5nZXQocHJvcGVydHlOYW1lKTsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbih2
YWx1ZSwKLSAgICAgICAgW10gKFQmIHR5cGVkVmFsdWUpIHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0s
CisgICAgICAgIFtdIChUJiB0eXBlZFZhbHVlKSAtPiBUIHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0s
CiAgICAgICAgIFtdIChhdXRvJikgeyByZXR1cm4gVCB7IH07IH0KICAgICApOwogfQpAQCAtODEy
LDcgKzgxMiw3IEBAIFZlY3RvcjxUPiBBWElzb2xhdGVkT2JqZWN0Ojp2ZWN0b3JBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvCiB7CiAgICAgYXV0byB2YWx1ZSA9
IG1fcHJvcGVydHlNYXAuZ2V0KHByb3BlcnR5TmFtZSk7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNo
T24odmFsdWUsCi0gICAgICAgIFtdIChWZWN0b3I8VD4mIHR5cGVkVmFsdWUpIHsgcmV0dXJuIHR5
cGVkVmFsdWU7IH0sCisgICAgICAgIFtdIChWZWN0b3I8VD4mIHR5cGVkVmFsdWUpIC0+IFZlY3Rv
cjxUPiB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAogICAgICAgICBbXSAoYXV0byYpIHsgcmV0dXJu
IFZlY3RvcjxUPigpOyB9CiAgICAgKTsKIH0KQEAgLTgyMiw3ICs4MjIsNyBAQCBPcHRpb25TZXQ8
VD4gQVhJc29sYXRlZE9iamVjdDo6b3B0aW9uU2V0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYQogewogICAgIGF1dG8gdmFsdWUgPSBtX3Byb3BlcnR5TWFwLmdldChwcm9w
ZXJ0eU5hbWUpOwogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHZhbHVlLAotICAgICAgICBbXSAo
VCYgdHlwZWRWYWx1ZSkgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKKyAgICAgICAgW10gKFQmIHR5
cGVkVmFsdWUpIC0+IE9wdGlvblNldDxUPiB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAogICAgICAg
ICBbXSAoYXV0byYpIHsgcmV0dXJuIE9wdGlvblNldDxUPigpOyB9CiAgICAgKTsKIH0KQEAgLTgz
Miw3ICs4MzIsNyBAQCBzdGQ6OnBhaXI8VCwgVD4gQVhJc29sYXRlZE9iamVjdDo6cGFpckF0dHJp
YnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZQogewogICAgIGF1dG8gdmFsdWUg
PSBtX3Byb3BlcnR5TWFwLmdldChwcm9wZXJ0eU5hbWUpOwogICAgIHJldHVybiBXVEY6OnN3aXRj
aE9uKHZhbHVlLAotICAgICAgICBbXSAoc3RkOjpwYWlyPFQsIFQ+JiB0eXBlZFZhbHVlKSB7IHJl
dHVybiB0eXBlZFZhbHVlOyB9LAorICAgICAgICBbXSAoc3RkOjpwYWlyPFQsIFQ+JiB0eXBlZFZh
bHVlKSAtPiBzdGQ6OnBhaXI8VCwgVD4geyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKICAgICAgICAg
W10gKGF1dG8mKSB7IHJldHVybiBzdGQ6OnBhaXI8VCwgVD4oMCwgMSk7IH0KICAgICApOwogfQpA
QCAtODQxLDggKzg0MSw4IEBAIHVpbnQ2NF90IEFYSXNvbGF0ZWRPYmplY3Q6OnVpbnQ2NEF0dHJp
YnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uCiB7CiAgICAgYXV0byB2
YWx1ZSA9IG1fcHJvcGVydHlNYXAuZ2V0KHByb3BlcnR5TmFtZSk7CiAgICAgcmV0dXJuIFdURjo6
c3dpdGNoT24odmFsdWUsCi0gICAgICAgIFtdICh1aW50NjRfdCYgdHlwZWRWYWx1ZSkgeyByZXR1
cm4gdHlwZWRWYWx1ZTsgfSwKLSAgICAgICAgW10gKGF1dG8mKSB7IHJldHVybiAwOyB9CisgICAg
ICAgIFtdICh1aW50NjRfdCYgdHlwZWRWYWx1ZSkgLT4gdWludDY0X3QgeyByZXR1cm4gdHlwZWRW
YWx1ZTsgfSwKKyAgICAgICAgW10gKGF1dG8mKSAtPiB1aW50NjRfdCB7IHJldHVybiAwOyB9CiAg
ICAgKTsKIH0KIApAQCAtODUwLDcgKzg1MCw3IEBAIFVSTCBBWElzb2xhdGVkT2JqZWN0Ojp1cmxB
dHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7CiAgICAg
YXV0byB2YWx1ZSA9IG1fcHJvcGVydHlNYXAuZ2V0KHByb3BlcnR5TmFtZSk7CiAgICAgcmV0dXJu
IFdURjo6c3dpdGNoT24odmFsdWUsCi0gICAgICAgIFtdIChVUkwmIHR5cGVkVmFsdWUpIHsgcmV0
dXJuIHR5cGVkVmFsdWU7IH0sCisgICAgICAgIFtdIChVUkwmIHR5cGVkVmFsdWUpIC0+IFVSTCB7
IHJldHVybiB0eXBlZFZhbHVlOyB9LAogICAgICAgICBbXSAoYXV0byYpIHsgcmV0dXJuIFVSTCgp
OyB9CiAgICAgKTsKIH0KQEAgLTg1OSw3ICs4NTksNyBAQCBQYXRoIEFYSXNvbGF0ZWRPYmplY3Q6
OnBhdGhBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7
CiAgICAgYXV0byB2YWx1ZSA9IG1fcHJvcGVydHlNYXAuZ2V0KHByb3BlcnR5TmFtZSk7CiAgICAg
cmV0dXJuIFdURjo6c3dpdGNoT24odmFsdWUsCi0gICAgICAgIFtdIChQYXRoJiB0eXBlZFZhbHVl
KSB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAorICAgICAgICBbXSAoUGF0aCYgdHlwZWRWYWx1ZSkg
LT4gUGF0aCB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAogICAgICAgICBbXSAoYXV0byYpIHsgcmV0
dXJuIFBhdGgoKTsgfQogICAgICk7CiB9CkBAIC04NjgsNyArODY4LDcgQEAgQ29sb3IgQVhJc29s
YXRlZE9iamVjdDo6Y29sb3JBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpIGNvbnN0CiB7CiAgICAgYXV0byB2YWx1ZSA9IG1fcHJvcGVydHlNYXAuZ2V0KHByb3BlcnR5
TmFtZSk7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24odmFsdWUsCi0gICAgICAgIFtdIChDb2xv
ciYgdHlwZWRWYWx1ZSkgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKKyAgICAgICAgW10gKENvbG9y
JiB0eXBlZFZhbHVlKSAtPiBDb2xvciB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAogICAgICAgICBb
XSAoYXV0byYpIHsgcmV0dXJuIENvbG9yKCk7IH0KICAgICApOwogfQpAQCAtODc3LDggKzg3Nyw4
IEBAIGZsb2F0IEFYSXNvbGF0ZWRPYmplY3Q6OmZsb2F0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAogewogICAgIGF1dG8gdmFsdWUgPSBtX3Byb3BlcnR5
TWFwLmdldChwcm9wZXJ0eU5hbWUpOwogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHZhbHVlLAot
ICAgICAgICBbXSAoZmxvYXQmIHR5cGVkVmFsdWUpIHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCi0g
ICAgICAgIFtdIChhdXRvJikgeyByZXR1cm4gMDsgfQorICAgICAgICBbXSAoZmxvYXQmIHR5cGVk
VmFsdWUpIC0+IGZsb2F0IHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCisgICAgICAgIFtdIChhdXRv
JikgeyByZXR1cm4gMC4wZjsgfQogICAgICk7CiB9CiAKQEAgLTg4Niw4ICs4ODYsOCBAQCBkb3Vi
bGUgQVhJc29sYXRlZE9iamVjdDo6ZG91YmxlQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lKSBjb25zdAogewogICAgIGF1dG8gdmFsdWUgPSBtX3Byb3BlcnR5TWFwLmdl
dChwcm9wZXJ0eU5hbWUpOwogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHZhbHVlLAotICAgICAg
ICBbXSAoZG91YmxlJiB0eXBlZFZhbHVlKSB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAotICAgICAg
ICBbXSAoYXV0byYpIHsgcmV0dXJuIDA7IH0KKyAgICAgICAgW10gKGRvdWJsZSYgdHlwZWRWYWx1
ZSkgLT4gZG91YmxlIHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCisgICAgICAgIFtdIChhdXRvJikg
eyByZXR1cm4gMC4wOyB9CiAgICAgKTsKIH0KIApAQCAtODk1LDggKzg5NSw4IEBAIHVuc2lnbmVk
IEFYSXNvbGF0ZWRPYmplY3Q6OnVuc2lnbmVkQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lKSBjCiB7CiAgICAgYXV0byB2YWx1ZSA9IG1fcHJvcGVydHlNYXAuZ2V0KHBy
b3BlcnR5TmFtZSk7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24odmFsdWUsCi0gICAgICAgIFtd
ICh1bnNpZ25lZCYgdHlwZWRWYWx1ZSkgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKLSAgICAgICAg
W10gKGF1dG8mKSB7IHJldHVybiAwOyB9CisgICAgICAgIFtdICh1bnNpZ25lZCYgdHlwZWRWYWx1
ZSkgLT4gdW5zaWduZWQgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKKyAgICAgICAgW10gKGF1dG8m
KSB7IHJldHVybiAwdTsgfQogICAgICk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
QnVmZmVyU291cmNlLmgKaW5kZXggOTBlNDdjOWVlNTA0ZGY2NGIzMzQzM2Q3NTA1Yzg0ZmI3NDMw
ZmZiOC4uYjJmMWM2MzVmYmY3N2Q0NGNkNjIyMmMwNDQxMDhjMTM1MTVmYjQxZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQnVmZmVyU291cmNlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvQnVmZmVyU291cmNlLmgKQEAgLTQ1LDE0ICs0NSwxNCBAQCBw
dWJsaWM6CiAKICAgICBjb25zdCB1aW50OF90KiBkYXRhKCkgY29uc3QKICAgICB7Ci0gICAgICAg
IHJldHVybiBXVEY6OnZpc2l0KFtdKGF1dG8mIGJ1ZmZlcikgLT4gY29uc3QgdWludDhfdCogewor
ICAgICAgICByZXR1cm4gc3RkOjp2aXNpdChbXShhdXRvJiBidWZmZXIpIC0+IGNvbnN0IHVpbnQ4
X3QqIHsKICAgICAgICAgICAgIHJldHVybiBidWZmZXIgPyBzdGF0aWNfY2FzdDxjb25zdCB1aW50
OF90Kj4oYnVmZmVyLT5kYXRhKCkpIDogbnVsbHB0cjsKICAgICAgICAgfSwgbV92YXJpYW50KTsK
ICAgICB9CiAKICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVy
biBXVEY6OnZpc2l0KFtdKGF1dG8mIGJ1ZmZlcikgLT4gc2l6ZV90IHsKKyAgICAgICAgcmV0dXJu
IHN0ZDo6dmlzaXQoW10oYXV0byYgYnVmZmVyKSAtPiBzaXplX3QgewogICAgICAgICAgICAgcmV0
dXJuIGJ1ZmZlciA/IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIDogMDsKICAgICAgICAgfSwgbV92YXJp
YW50KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJC
aW5kaW5nVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRp
bmdVdGlsaXRpZXMuY3BwCmluZGV4IGJhZWRkMGMwNjljYTI4MWIyOTg0NzFlMzBiNjk3NGI1MjU2
ZDMzMGUuLmIyZjRiOWZlNjE1ZWNiMjEzNjNjZjU4M2RjNzM1Y2Y3N2MzMDYwOGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCkBA
IC00NjksNyArNDY5LDcgQEAgc3RhdGljIFZlY3RvcjxJREJLZXlEYXRhPiBjcmVhdGVLZXlQYXRo
QXJyYXkoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QKICAgICAgICAgcmV0dXJu
IGtleXM7CiAgICAgfSk7CiAKLSAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBpbmZvLmtl
eVBhdGgoKSk7CisgICAgcmV0dXJuIHN0ZDo6dmlzaXQodmlzaXRvciwgaW5mby5rZXlQYXRoKCkp
OwogfQogCiB2b2lkIGdlbmVyYXRlSW5kZXhLZXlGb3JWYWx1ZShKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvLCBKU1ZhbHVlIHZhbHVl
LCBJbmRleEtleSYgb3V0S2V5LCBjb25zdCBzdGQ6Om9wdGlvbmFsPElEQktleVBhdGg+JiBvYmpl
Y3RTdG9yZUtleVBhdGgsIGNvbnN0IElEQktleURhdGEmIG9iamVjdFN0b3JlS2V5KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0VW5pb24uaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFVuaW9uLmgKaW5kZXggMDc2MjEx
YTc2ZTRhMzdhODU0ZGRkOWUwNjg1YTcxYzY4MzIyZWFlNC4uYTRiZDZhZWUzMDBkNjJjYzlkNjUz
MjA2M2YzNjZkYjAxOTk1MWVhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Db252ZXJ0VW5pb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUNvbnZlcnRVbmlvbi5oCkBAIC0zODUsNyArMzg1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUu
Li4gVD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7CiAgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CiAKLSAgICB1c2luZyBTZXF1ZW5jZSA9IGJyaWdh
bmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6OnZhcmlhbnRfc2l6
ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47CisgICAgdXNpbmcgU2VxdWVuY2UgPSBicmln
YW5kOjptYWtlX3NlcXVlbmNlPGJyaWdhbmQ6OnB0cmRpZmZfdDwwPiwgc3RkOjp2YXJpYW50X3Np
emU8SW1wbGVtZW50YXRpb25UeXBlPjo6dmFsdWU+OwogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IEltcGxlbWVudGF0aW9uVHlwZSYgdmFy
aWFudCkKICAgICB7CkBAIC0zOTYsNyArMzk2LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4g
c3RydWN0IEpTQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7CiAgICAgICAgICAgICB1c2luZyBJ
ID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5
cGU6OnR5cGU7CiAgICAgICAgICAgICBpZiAoSTo6dmFsdWUgPT0gaW5kZXgpIHsKICAgICAgICAg
ICAgICAgICBBU1NFUlQoIXJldHVyblZhbHVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm5WYWx1
ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3QsIEk+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QsIFdURjo6Z2V0PEk6OnZhbHVlPih2YXJpYW50KSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuVmFsdWUgPSB0b0pTPGJyaWdhbmQ6OmF0PFR5cGVMaXN0LCBJPj4obGV4aWNhbEds
b2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01Db252ZXJ0V2ViR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01Db252ZXJ0V2ViR0wuY3BwCmluZGV4IGRkMjk2ODhjMmJjNmM4ODAwNTRlMTg3
ZjFkMzA5YWE4OTA2MmU4ODYuLjkyMmFhNzEzN2Y5NDUyMjQwMGJhOTBjZDk3ZTdlODVmNTI5YWVi
NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFdl
YkdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRXZWJH
TC5jcHAKQEAgLTgwLDQ5ICs4MCwzOSBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogSlNWYWx1ZSBj
b252ZXJ0VG9KU1ZhbHVlKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJHTEFueSYgYW55KQogewogICAg
IHJldHVybiBXVEY6OnN3aXRjaE9uKGFueSwKLSAgICAgICAgW10gKHN0ZDo6bnVsbHB0cl90KSB7
CisgICAgICAgIFtdIChzdGQ6Om51bGxwdHJfdCkgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICBy
ZXR1cm4ganNOdWxsKCk7Ci0gICAgICAgIH0sCi0gICAgICAgIFtdIChib29sIHZhbHVlKSB7Cisg
ICAgICAgIH0sIFtdIChib29sIHZhbHVlKSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVy
biBqc0Jvb2xlYW4odmFsdWUpOwotICAgICAgICB9LAotICAgICAgICBbXSAoaW50IHZhbHVlKSB7
CisgICAgICAgIH0sIFtdIChpbnQgdmFsdWUpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0
dXJuIGpzTnVtYmVyKHZhbHVlKTsKLSAgICAgICAgfSwKLSAgICAgICAgW10gKHVuc2lnbmVkIHZh
bHVlKSB7CisgICAgICAgIH0sIFtdICh1bnNpZ25lZCB2YWx1ZSkgLT4gSlNWYWx1ZSB7CiAgICAg
ICAgICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOwotICAgICAgICB9LAotICAgICAgICBbXSAo
bG9uZyBsb25nIHZhbHVlKSB7CisgICAgICAgIH0sIFtdIChsb25nIGxvbmcgdmFsdWUpIC0+IEpT
VmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsKLSAgICAgICAgfSwK
LSAgICAgICAgW10gKGZsb2F0IHZhbHVlKSB7CisgICAgICAgIH0sIFtdIChmbG9hdCB2YWx1ZSkg
LT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOwotICAgICAg
ICB9LAotICAgICAgICBbJl0gKGNvbnN0IFN0cmluZyYgdmFsdWUpIHsKKyAgICAgICAgfSwgWyZd
IChjb25zdCBTdHJpbmcmIHZhbHVlKSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiBq
c1N0cmluZ1dpdGhDYWNoZShsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCksIHZhbHVlKTsKLSAgICAg
ICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBWZWN0b3I8Ym9vbD4mIHZhbHVlcykgeworICAgICAg
ICB9LCBbJl0gKGNvbnN0IFZlY3Rvcjxib29sPiYgdmFsdWVzKSAtPiBKU1ZhbHVlIHsKICAgICAg
ICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CiAgICAgICAgICAgICBmb3IgKGF1dG8m
IHZhbHVlIDogdmFsdWVzKQogICAgICAgICAgICAgICAgIGxpc3QuYXBwZW5kKGpzQm9vbGVhbih2
YWx1ZSkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWxpc3QuaGFzT3ZlcmZsb3dlZCgp
KTsKICAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheSgmZ2xvYmFsT2JqZWN0LCBzdGF0
aWNfY2FzdDxKU0M6OkFycmF5QWxsb2NhdGlvblByb2ZpbGUqPihudWxscHRyKSwgbGlzdCk7Ci0g
ICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29uc3QgVmVjdG9yPGludD4mIHZhbHVlcykgeworICAg
ICAgICB9LCBbJl0gKGNvbnN0IFZlY3RvcjxpbnQ+JiB2YWx1ZXMpIC0+IEpTVmFsdWUgewogICAg
ICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKICAgICAgICAgICAgIGZvciAoYXV0
byYgdmFsdWUgOiB2YWx1ZXMpCiAgICAgICAgICAgICAgICAgbGlzdC5hcHBlbmQoanNOdW1iZXIo
dmFsdWUpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFsaXN0Lmhhc092ZXJmbG93ZWQo
KSk7CiAgICAgICAgICAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoJmdsb2JhbE9iamVjdCwgc3Rh
dGljX2Nhc3Q8SlNDOjpBcnJheUFsbG9jYXRpb25Qcm9maWxlKj4obnVsbHB0ciksIGxpc3QpOwot
ICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHZhbHVlcykg
eworICAgICAgICB9LCBbJl0gKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHZhbHVlcykgLT4gSlNW
YWx1ZSB7CiAgICAgICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwogICAgICAgICAg
ICAgZm9yIChhdXRvJiB2YWx1ZSA6IHZhbHVlcykKICAgICAgICAgICAgICAgICBsaXN0LmFwcGVu
ZChqc051bWJlcih2YWx1ZSkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWxpc3QuaGFz
T3ZlcmZsb3dlZCgpKTsKICAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheSgmZ2xvYmFs
T2JqZWN0LCBzdGF0aWNfY2FzdDxKU0M6OkFycmF5QWxsb2NhdGlvblByb2ZpbGUqPihudWxscHRy
KSwgbGlzdCk7Ci0gICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29uc3QgUmVmUHRyPEZsb2F0MzJB
cnJheT4mIGFycmF5KSB7CisgICAgICAgIH0sIFsmXSAoY29uc3QgUmVmUHRyPEZsb2F0MzJBcnJh
eT4mIGFycmF5KSB7CiAgICAgICAgICAgICByZXR1cm4gdG9KUygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgJmdsb2JhbE9iamVjdCwgYXJyYXkuZ2V0KCkpOwogICAgICAgICB9LAogICAgICAgICBbJl0g
KGNvbnN0IFJlZlB0cjxJbnQzMkFycmF5PiYgYXJyYXkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Q3VzdG9tLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Q3Vz
dG9tLmNwcAppbmRleCAwYmQxZDRkMWFkODU1MmVkNzQzYmNhYjJlMWI4ZjJhMzBkNjA1OWYwLi5l
YWJlYmIzMjgxYWVlM2VkOWIwY2FhN2FiZGQyZWQwNTZhM2RjMTU5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudEN1c3RvbS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50TWV0aG9kQ2hhbmdl
RXZlbnRDdXN0b20uY3BwCkBAIC0zMyw5ICszMyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEpT
Qzo6SlNWYWx1ZSBKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6bWV0aG9kRGV0YWlscyhKU0M6
OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0KSBjb25zdAogewogICAgIHJldHVy
biBjYWNoZWRQcm9wZXJ0eVZhbHVlKGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzLCB3cmFwcGVk
KCkuY2FjaGVkTWV0aG9kRGV0YWlscygpLCBbdGhpcywgJmxleGljYWxHbG9iYWxPYmplY3RdIHsK
LSAgICAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24od3JhcHBlZCgpLm1ldGhvZERldGFpbHMoKSwg
W10oSlNDOjpKU1ZhbHVlIG1ldGhvZERldGFpbHMpIHsKKyAgICAgICAgcmV0dXJuIFdURjo6c3dp
dGNoT24od3JhcHBlZCgpLm1ldGhvZERldGFpbHMoKSwgW10oSlNDOjpKU1ZhbHVlIG1ldGhvZERl
dGFpbHMpIC0+IEpTQzo6SlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4gbWV0aG9kRGV0YWls
cyA/IG1ldGhvZERldGFpbHMgOiBKU0M6OmpzTnVsbCgpOwotICAgICAgICB9LCBbJmxleGljYWxH
bG9iYWxPYmplY3RdKGNvbnN0IFBheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6TWV0aG9kRGV0YWls
c0Z1bmN0aW9uJiBmdW5jdGlvbikgeworICAgICAgICB9LCBbJmxleGljYWxHbG9iYWxPYmplY3Rd
KGNvbnN0IFBheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6TWV0aG9kRGV0YWlsc0Z1bmN0aW9uJiBm
dW5jdGlvbikgLT4gSlNDOjpKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihs
ZXhpY2FsR2xvYmFsT2JqZWN0KS5nZXQoKTsKICAgICAgICAgfSk7CiAgICAgfSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZhbHVlSW5XcmFwcGVkT2JqZWN0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZhbHVlSW5XcmFwcGVkT2JqZWN0LmgKaW5k
ZXggZDdlNTJiMWIxZDE2ZDJjYjE3MjI5NDNhMmI2ZTA4ZGE1MjQzZDMzZi4uZTRjY2RiYTYyZDg0
ODNhNzQwY2E3YTA0M2QyYmFlYzljYzUxNmFkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTVmFsdWVJbldyYXBwZWRPYmplY3QuaApAQCAtODIsNyArODIsNyBAQCBp
bmxpbmUgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6b3BlcmF0b3IgSlNDOjpKU1ZhbHVlKCkgY29u
c3QKIHsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3ZhbHVlLCBbXSAoSlNDOjpKU1ZhbHVl
IHZhbHVlKSB7CiAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9LCBbXSAoY29uc3QgV2VhayYg
dmFsdWUpIHsKKyAgICB9LCBbXSAoY29uc3QgV2VhayYgdmFsdWUpIC0+IEpTQzo6SlNWYWx1ZSB7
CiAgICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKaW5kZXggNWIyYmZkN2ZmNjEw
YmIwOGMxYjc0NGRlZWMzNmZjY2FiNzgzNzgyNS4uZjY0MWFiYzNiNGJiZTIwZDU0NDBiZjc1Yzkz
N2E1NmY0YjllMzk0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQ
cm9wZXJ0eVBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9w
ZXJ0eVBhcnNlci5jcHAKQEAgLTkxOCw3ICs5MTgsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBjb25zdW1lRm9udFZhcmlhbnRDU1MyMShDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YQogc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHQoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7CiAgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3Vt
ZUZvbnRXZWlnaHRSYXcocmFuZ2UpKSB7Ci0gICAgICAgIHJldHVybiBzd2l0Y2hPbigqcmVzdWx0
LCBbXSAoQ1NTVmFsdWVJRCB2YWx1ZUlEKSB7CisgICAgICAgIHJldHVybiBXVEY6OnN3aXRjaE9u
KCpyZXN1bHQsIFtdIChDU1NWYWx1ZUlEIHZhbHVlSUQpIHsKICAgICAgICAgICAgIHJldHVybiBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZUlEKTsK
ICAgICAgICAgfSwgW10gKGRvdWJsZSB3ZWlnaHROdW1iZXIpIHsKICAgICAgICAgICAgIHJldHVy
biBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHdlaWdodE51bWJlciwgQ1NT
VW5pdFR5cGU6OkNTU19OVU1CRVIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3R5
cGVkb20vQ1NTVW5wYXJzZWRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvdHlwZWRvbS9D
U1NVbnBhcnNlZFZhbHVlLmNwcAppbmRleCA4NjJmNjljNTBiOWNhZjI5YTUwODg4YzVhZjNhNzFh
YmQ3Yjk1OWM4Li5lNzYxYmViZGZmZjVjNTdiMGVmNjgwOWUyNmRmMTJkYmVkMzdjMGNiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvdHlwZWRvbS9DU1NVbnBhcnNlZFZhbHVlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvdHlwZWRvbS9DU1NVbnBhcnNlZFZhbHVlLmNwcApAQCAt
MTMwLDcgKzEzMCw3IEBAIFN0cmluZyBDU1NVbnBhcnNlZFZhbHVlOjp0b1N0cmluZygpIGNvbnN0
CiB2b2lkIENTU1VucGFyc2VkVmFsdWU6OnNlcmlhbGl6ZShTdHJpbmdCdWlsZGVyJiBidWlsZGVy
KSBjb25zdAogewogICAgIGZvciAoYXV0byYgc2VnbWVudCA6IG1fc2VnbWVudHMpIHsKLSAgICAg
ICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXSAoY29uc3QgU3RyaW5nJiB2YWx1ZSkg
eworICAgICAgICBzdGQ6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdIChjb25zdCBTdHJpbmcm
IHZhbHVlKSB7CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCh2YWx1ZSk7CiAgICAgICAgIH0s
IFsmXSAoY29uc3QgUmVmUHRyPENTU09NVmFyaWFibGVSZWZlcmVuY2VWYWx1ZT4mIHZhbHVlKSB7
CiAgICAgICAgICAgICB2YWx1ZS0+c2VyaWFsaXplKGJ1aWxkZXIpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dFRhcmdldC5jcHAKaW5kZXggZTBiYjEwOGU1ODk5Mzg4YWUyMDQ2NGZlM2VlZjg4ZmY4ZTM4OTNm
OS4uNWZjMDI1NmUzNDQyMzNhNzcyMjcwYzY3NDdhMzg3NDBmYzI0NDc3ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnRUYXJnZXQuY3BwCkBAIC0xMjMsNyArMTIzLDcgQEAgdm9pZCBFdmVudFRhcmdldDo6
YWRkRXZlbnRMaXN0ZW5lckZvckJpbmRpbmdzKGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwg
UmVmUHQKICAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLnJlbGVh
c2VOb25OdWxsKCksIGNhcHR1cmUpOwogICAgIH0pOwogCi0gICAgV1RGOjp2aXNpdCh2aXNpdG9y
LCB2YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwogfQogCiB2b2lk
IEV2ZW50VGFyZ2V0OjpyZW1vdmVFdmVudExpc3RlbmVyRm9yQmluZGluZ3MoY29uc3QgQXRvbVN0
cmluZyYgZXZlbnRUeXBlLCBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4mJiBsaXN0ZW5lciwgRXZlbnRM
aXN0ZW5lck9wdGlvbnNPckJvb2xlYW4mJiB2YXJpYW50KQpAQCAtMTM3LDcgKzEzNyw3IEBAIHZv
aWQgRXZlbnRUYXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXJGb3JCaW5kaW5ncyhjb25zdCBBdG9t
U3RyaW5nJiBldmVudFR5cGUsIFJlCiAgICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRU
eXBlLCAqbGlzdGVuZXIsIGNhcHR1cmUpOwogICAgIH0pOwogCi0gICAgV1RGOjp2aXNpdCh2aXNp
dG9yLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwogfQogCiBi
b29sIEV2ZW50VGFyZ2V0OjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21TdHJpbmcmIGV2
ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGNvbnN0IEV2ZW50TGlzdGVuZXJPcHRp
b25zJiBvcHRpb25zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmNwcAppbmRleCAzMmNmZDBk
NjdmMzg0YjA3YWUzZjcwYWY3Y2M2ZTViNWQ1MTAxYjRjLi5lNGYxOTRiZmEyYjJmMjg5YTJmOGQz
M2QxMjkxNzIzMzc3ZWVkY2MxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2Fn
ZUV2ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmNwcApAQCAt
MTI5LDE1ICsxMjksMTUgQEAgRXZlbnRJbnRlcmZhY2UgTWVzc2FnZUV2ZW50OjpldmVudEludGVy
ZmFjZSgpIGNvbnN0CiAKIHNpemVfdCBNZXNzYWdlRXZlbnQ6Om1lbW9yeUNvc3QoKSBjb25zdAog
ewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fZGF0YSwgW10gKGNvbnN0IEpTVmFsdWVJbldy
YXBwZWRPYmplY3QmKSB7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9kYXRhLCBbXSAoY29u
c3QgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYpIC0+IHNpemVfdCB7CiAgICAgICAgIHJldHVybiAw
OwotICAgIH0sIFtdIChjb25zdCBSZWY8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYgZGF0YSkgewor
ICAgIH0sIFtdIChjb25zdCBSZWY8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYgZGF0YSkgLT4gc2l6
ZV90IHsKICAgICAgICAgcmV0dXJuIGRhdGEtPm1lbW9yeUNvc3QoKTsKLSAgICB9LCBbXSAoY29u
c3QgU3RyaW5nJiBzdHJpbmcpIHsKKyAgICB9LCBbXSAoY29uc3QgU3RyaW5nJiBzdHJpbmcpIC0+
IHNpemVfdCB7CiAgICAgICAgIHJldHVybiBzdHJpbmcuc2l6ZUluQnl0ZXMoKTsKLSAgICB9LCBb
XSAoY29uc3QgUmVmPEJsb2I+JiBibG9iKSB7CisgICAgfSwgW10gKGNvbnN0IFJlZjxCbG9iPiYg
YmxvYikgLT4gc2l6ZV90IHsKICAgICAgICAgcmV0dXJuIGJsb2ItPnNpemUoKTsKLSAgICB9LCBb
XSAoY29uc3QgUmVmPEFycmF5QnVmZmVyPiYgYnVmZmVyKSB7CisgICAgfSwgW10gKGNvbnN0IFJl
ZjxBcnJheUJ1ZmZlcj4mIGJ1ZmZlcikgLT4gc2l6ZV90IHsKICAgICAgICAgcmV0dXJuIGJ1ZmZl
ci0+Ynl0ZUxlbmd0aCgpOwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmlu
ZGV4IDU2NTc4MjdkOWE2NmJiM2I3M2VmYjU1ZjkzMTYxZWU4MzhiNDVhMzAuLjRkNzhkZDFiZTU2
Njg5MWI0MmEyYWRmNTJmZTU4NWQxZTNjY2I0MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAKQEAgLTIyNzMsNyArMjI3Myw3IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3Bl
bGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKIAogICAgIGlmICh1bmlmaWVkVGV4dENo
ZWNrZXJFbmFibGVkKCkpIHsKICAgICAgICAgYXV0byBmb3VuZEl0ZW0gPSBUZXh0Q2hlY2tpbmdI
ZWxwZXIoKmNsaWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlKS5maW5kRmlyc3RNaXNzcGVsbGVk
V29yZE9yVW5ncmFtbWF0aWNhbFBocmFzZShpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSk7Ci0g
ICAgICAgIGlmIChhdXRvIHdvcmQgPSBXVEY6OmdldF9pZjxUZXh0Q2hlY2tpbmdIZWxwZXI6Ok1p
c3NwZWxsZWRXb3JkPihmb3VuZEl0ZW0pKQorICAgICAgICBpZiAoYXV0byB3b3JkID0gc3RkOjpn
ZXRfaWY8VGV4dENoZWNraW5nSGVscGVyOjpNaXNzcGVsbGVkV29yZD4oJmZvdW5kSXRlbSkpCiAg
ICAgICAgICAgICBtaXNzcGVsbGVkV29yZCA9IFdURk1vdmUoKndvcmQpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICB1bmdyYW1tYXRpY2FsUGhyYXNlID0gV1RGOjpnZXQ8VGV4dENoZWNraW5n
SGVscGVyOjpVbmdyYW1tYXRpY2FsUGhyYXNlPihXVEZNb3ZlKGZvdW5kSXRlbSkpOwpAQCAtMjMw
MCw3ICsyMzAwLDcgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29s
IHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICAKICAgICAgICAgaWYgKHVuaWZpZWRUZXh0
Q2hlY2tlckVuYWJsZWQoKSkgewogICAgICAgICAgICAgYXV0byBmb3VuZEl0ZW0gPSBUZXh0Q2hl
Y2tpbmdIZWxwZXIoKmNsaWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlKS5maW5kRmlyc3RNaXNz
cGVsbGVkV29yZE9yVW5ncmFtbWF0aWNhbFBocmFzZShpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQo
KSk7Ci0gICAgICAgICAgICBpZiAoYXV0byB3b3JkID0gV1RGOjpnZXRfaWY8VGV4dENoZWNraW5n
SGVscGVyOjpNaXNzcGVsbGVkV29yZD4oZm91bmRJdGVtKSkKKyAgICAgICAgICAgIGlmIChhdXRv
IHdvcmQgPSBzdGQ6OmdldF9pZjxUZXh0Q2hlY2tpbmdIZWxwZXI6Ok1pc3NwZWxsZWRXb3JkPigm
Zm91bmRJdGVtKSkKICAgICAgICAgICAgICAgICBtaXNzcGVsbGVkV29yZCA9IFdURk1vdmUoKndv
cmQpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHVuZ3JhbW1hdGljYWxQaHJh
c2UgPSBXVEY6OmdldDxUZXh0Q2hlY2tpbmdIZWxwZXI6OlVuZ3JhbW1hdGljYWxQaHJhc2U+KFdU
Rk1vdmUoZm91bmRJdGVtKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IGZjOWQ3MTU1NDM3M2ZkYzc4NWRjYTQ2
Y2ZkNWVkZjhhZjJhNTM1MjcuLmMzNzJhZWNlZjRlOTdmYjNiMWMxM2ZlZWJhYTVkNzRmMTg5ZGNl
MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXIuY3BwCkBAIC01MSw3ICs1MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
aW5saW5lIGJvb2wgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OkV4Y2x1c2lvblJ1bGU6Om1h
dGNoKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN3aXRjaE9u
KHJ1bGUsIFsmZWxlbWVudF0gKEVsZW1lbnRSdWxlIHJ1bGUpIHsKKyAgICByZXR1cm4gV1RGOjpz
d2l0Y2hPbihydWxlLCBbJmVsZW1lbnRdIChFbGVtZW50UnVsZSBydWxlKSB7CiAgICAgICAgIHJl
dHVybiBydWxlLmxvY2FsTmFtZSA9PSBlbGVtZW50LmxvY2FsTmFtZSgpOwogICAgIH0sIFsmZWxl
bWVudF0gKEF0dHJpYnV0ZVJ1bGUgcnVsZSkgewogICAgICAgICByZXR1cm4gZXF1YWxJZ25vcmlu
Z0FTQ0lJQ2FzZShlbGVtZW50LmdldEF0dHJpYnV0ZShydWxlLm5hbWUpLCBydWxlLnZhbHVlKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVVJMU2VhcmNoUGFyYW1zLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvVVJMU2VhcmNoUGFyYW1zLmNwcAppbmRleCBiMDdiNzgwOGRmYWQ1
OWMzZDU0MDlmNTcyMDJhN2IxMjkxODIyYjJmLi5mNTRmNDFlMTljZjdhN2U0ZDU1NDBjNjQ2NjYy
ZjhlYzVmYmQzZDM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1VSTFNlYXJjaFBh
cmFtcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9VUkxTZWFyY2hQYXJhbXMuY3BwCkBA
IC01MSwxMiArNTEsMTIgQEAgRXhjZXB0aW9uT3I8UmVmPFVSTFNlYXJjaFBhcmFtcz4+IFVSTFNl
YXJjaFBhcmFtczo6Y3JlYXRlKFZhcmlhbnQ8VmVjdG9yPFZlY3RvcjwKICAgICAgICAgICAgIHBh
aXJzLmFwcGVuZCh7cGFpclswXSwgcGFpclsxXX0pOwogICAgICAgICB9CiAgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFVSTFNlYXJjaFBhcmFtcyhXVEZNb3ZlKHBhaXJzKSkpOwotICAgIH0s
IFsmXShjb25zdCBWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+PiYgcGFp
cnMpIHsKKyAgICB9LCBbJl0oY29uc3QgVmVjdG9yPFdURjo6S2V5VmFsdWVQYWlyPFN0cmluZywg
U3RyaW5nPj4mIHBhaXJzKSAtPiBFeGNlcHRpb25PcjxSZWY8VVJMU2VhcmNoUGFyYW1zPj4gewog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVUkxTZWFyY2hQYXJhbXMocGFpcnMpKTsKLSAg
ICB9LCBbJl0oY29uc3QgU3RyaW5nJiBzdHJpbmcpIHsKKyAgICB9LCBbJl0oY29uc3QgU3RyaW5n
JiBzdHJpbmcpIC0+IEV4Y2VwdGlvbk9yPFJlZjxVUkxTZWFyY2hQYXJhbXM+PiB7CiAgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFVSTFNlYXJjaFBhcmFtcyhzdHJpbmcsIG51bGxwdHIpKTsK
ICAgICB9KTsKLSAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBy
ZXR1cm4gc3RkOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKIH0KIAogU3RyaW5nIFVSTFNlYXJj
aFBhcmFtczo6Z2V0KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKaW5k
ZXggMjg0YjA1NTM5OWJkMGQyM2ZmYTA2Y2I0YmIxN2Y3YTU2YzA0Y2UxMi4uZTdiM2Y5MjViOWZh
NWRlYTVkOWFiZTVmYmNjNWFiYjk1NDRmMDQwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKQEAgLTE3NTgs
NyArMTc1OCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyRGF0YShH
Q0dMZW51bSB0YXJnZXQsIHN0ZDo6b3B0aW9uYWw8QnVmZmVyCiAgICAgaWYgKCFidWZmZXIpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFdURjo6dmlzaXQoWyZdKGF1dG8mIGRhdGEpIHsKKyAgICBz
dGQ6OnZpc2l0KFsmXShhdXRvJiBkYXRhKSB7CiAgICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lh
dGVCdWZmZXJEYXRhKGRhdGEuZ2V0KCkpKSB7CiAgICAgICAgICAgICB0aGlzLT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAi
aW52YWxpZCBidWZmZXIiKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE3ODUsNyArMTc4NSw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyU3ViRGF0YShHQ0dMZW51
bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBXVEY6OnZpc2l0KFsmXShhdXRvJiBkYXRhKSB7CisgICAgc3RkOjp2aXNpdChbJl0oYXV0byYg
ZGF0YSkgewogICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyU3ViRGF0YShzdGF0
aWNfY2FzdDxHQ0dMaW50cHRyPihvZmZzZXQpLCBkYXRhLmdldCgpKSkgewogICAgICAgICAgICAg
dGhpcy0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUs
ICJidWZmZXJTdWJEYXRhIiwgIm9mZnNldCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTQ4MTMsNyArNDgxMyw3IEBAIEludFJlY3QgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6Z2V0VGV4SW1hZ2VTb3VyY2VTaXplKFRleEltYWdlU291cmNlJiBzb3VyY2UpCiAgICAg
fQogICAgICk7CiAKLSAgICBFeGNlcHRpb25PcjxJbnRSZWN0PiByZXN1bHQgPSBXVEY6OnZpc2l0
KHZpc2l0b3IsIHNvdXJjZSk7CisgICAgRXhjZXB0aW9uT3I8SW50UmVjdD4gcmVzdWx0ID0gc3Rk
Ojp2aXNpdCh2aXNpdG9yLCBzb3VyY2UpOwogICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybiBzZW50aW5lbEVtcHR5UmVjdCgpOwogICAgIHJldHVybiByZXN1bHQu
cmV0dXJuVmFsdWUoKTsKQEAgLTUwNzQsNyArNTA3NCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlU291cmNlSGVscGVyKFRleEltYWdlRnVu
Y3RpCiAjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQogICAgICk7CiAKLSAgICByZXR1cm4gV1RGOjp2
aXNpdCh2aXNpdG9yLCBzb3VyY2UpOworICAgIHJldHVybiBzdGQ6OnZpc2l0KHZpc2l0b3IsIHNv
dXJjZSk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2VBcnJh
eUJ1ZmZlclZpZXdIZWxwZXIoVGV4SW1hZ2VGdW5jdGlvbklEIGZ1bmN0aW9uSUQsIEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xpbnQgYm9yZGVy
LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGlu
dCB5b2Zmc2V0LCBHQ0dMaW50IHpvZmZzZXQsIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+JiYgcGl4
ZWxzLCBOdWxsRGlzcG9zaXRpb24gbnVsbERpc3Bvc2l0aW9uLCBHQ0dMdWludCBzcmNPZmZzZXQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCmluZGV4IGUy
OTk2Y2I5MjVjYzVlYTRkM2UyOGQxYzVkOTU2MzA1ZjIwZGVlNWYuLjQyZTZlMTkzNjE1MGI5NTNh
NGEyNTMwMDBkMzMyNzY4OTEyOTZiZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDYW52YXMuY3BwCkBAIC0xMTEsNyArMTExLDcgQEAgSW5zcGVjdG9yQ2FudmFzOjpJ
bnNwZWN0b3JDYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkKIAogQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCogSW5zcGVjdG9yQ2FudmFzOjpjYW52YXNDb250ZXh0KCkgY29uc3QK
IHsKLSAgICBpZiAoYXV0byogY29udGV4dFdyYXBwZXIgPSBXVEY6OmdldF9pZjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQ+PihtX2NvbnRleHQpKQorICAgIGlm
IChhdXRvKiBjb250ZXh0V3JhcHBlciA9IHN0ZDo6Z2V0X2lmPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4+KCZtX2NvbnRleHQpKQogICAgICAgICByZXR1cm4g
JmNvbnRleHRXcmFwcGVyLT5nZXQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTEyNCw4
ICsxMjQsNyBAQCBIVE1MQ2FudmFzRWxlbWVudCogSW5zcGVjdG9yQ2FudmFzOjpjYW52YXNFbGVt
ZW50KCkgY29uc3QKICAgICAgICAgICAgIGlmIChpczxIVE1MQ2FudmFzRWxlbWVudD4oY29udGV4
dC5jYW52YXNCYXNlKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiAmZG93bmNhc3Q8SFRNTENh
bnZhc0VsZW1lbnQ+KGNvbnRleHQuY2FudmFzQmFzZSgpKTsKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICB9LAotICAgICAgICBbXSAoTW9ub3N0YXRlKSB7CisgICAgICAgIH0s
IFtdIChNb25vc3RhdGUpIC0+IEhUTUxDYW52YXNFbGVtZW50KiB7CiAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9
CkBAIC0xMzksOCArMTM4LDcgQEAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogSW5zcGVjdG9yQ2Fu
dmFzOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKICAgICAgICAgW10gKHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4gY29udGV4dFdyYXBwZXIpIHsK
ICAgICAgICAgICAgIGF1dG8mIGNvbnRleHQgPSBjb250ZXh0V3JhcHBlci5nZXQoKTsKICAgICAg
ICAgICAgIHJldHVybiBjb250ZXh0LmNhbnZhc0Jhc2UoKS5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7Ci0gICAgICAgIH0sCi0gICAgICAgIFtdIChNb25vc3RhdGUpIHsKKyAgICAgICAgfSwgW10g
KE1vbm9zdGF0ZSkgLT4gU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogewogICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAg
fQpAQCAtODkzLDggKzg5MSw3IEBAIFJlZjxQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IEluc3Bl
Y3RvckNhbnZhczo6YnVpbGRPYmplY3RGb3JDYW52YXMoYm9vbCBjYXB0dXJlCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIFByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpXZWJHTDI7CiAjZW5k
aWYKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIH0sCi0gICAgICAg
IFtdIChNb25vc3RhdGUpIHsKKyAgICAgICAgfSwgW10gKE1vbm9zdGF0ZSkgLT4gQ29udGV4dFR5
cGVUeXBlIHsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAgICAgfQpAQCAtOTIwLDggKzkxNyw3IEBAIFJlZjxQ
cm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IEluc3BlY3RvckNhbnZhczo6YnVpbGRPYmplY3RGb3JD
YW52YXMoYm9vbCBjYXB0dXJlCiAgICAgYXV0byBjb250ZXh0QXR0cmlidXRlcyA9IFdURjo6c3dp
dGNoT24obV9jb250ZXh0LAogICAgICAgICBbXSAoc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDYW52
YXNSZW5kZXJpbmdDb250ZXh0PiBjb250ZXh0V3JhcHBlcikgewogICAgICAgICAgICAgcmV0dXJu
IGJ1aWxkT2JqZWN0Rm9yQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMoY29udGV4dFdyYXBwZXIpOwot
ICAgICAgICB9LAotICAgICAgICBbXSAoTW9ub3N0YXRlKSB7CisgICAgICAgIH0sIFtdIChNb25v
c3RhdGUpIC0+IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRBdHRy
aWJ1dGVzPiB7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICB9CkBAIC0xMDQwLDggKzEwMzYsOCBAQCBpbnQgSW5z
cGVjdG9yQ2FudmFzOjppbmRleEZvckRhdGEoRHVwbGljYXRlRGF0YVZhcmlhbnQgZGF0YSkKICAg
ICAgICAgaWYgKGRhdGEgPT0gaXRlbSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
ICAgIGF1dG8gdHJhY2VBID0gV1RGOjpnZXRfaWY8UmVmUHRyPFNjcmlwdENhbGxTdGFjaz4+KGRh
dGEpOwotICAgICAgICBhdXRvIHRyYWNlQiA9IFdURjo6Z2V0X2lmPFJlZlB0cjxTY3JpcHRDYWxs
U3RhY2s+PihpdGVtKTsKKyAgICAgICAgYXV0byB0cmFjZUEgPSBzdGQ6OmdldF9pZjxSZWZQdHI8
U2NyaXB0Q2FsbFN0YWNrPj4oJmRhdGEpOworICAgICAgICBhdXRvIHRyYWNlQiA9IHN0ZDo6Z2V0
X2lmPFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+PigmaXRlbSk7CiAgICAgICAgIGlmICh0cmFjZUEg
JiYgKnRyYWNlQSAmJiB0cmFjZUIgJiYgKnRyYWNlQikKICAgICAgICAgICAgIHJldHVybiAoKnRy
YWNlQSktPmlzRXF1YWwoKCp0cmFjZUIpLmdldCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclByb2dyYW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclByb2dyYW0uY3BwCmluZGV4IGEzMGUyMTY0M2Ex
NTdhODJjNWRkN2U1YjRkODU4NDBiNzRmYTUwMTYuLmJmYjMzYWM3N2Q1Yzk2ZWMxNTZjMTAwOGJk
NWY4ZGE4MjQ1MWE5ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JTaGFkZXJQcm9ncmFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yU2hhZGVyUHJvZ3JhbS5jcHAKQEAgLTY2LDcgKzY2LDcgQEAgSW5zcGVjdG9yU2hhZGVy
UHJvZ3JhbTo6SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbShXZWJHTFByb2dyYW0mIHByb2dyYW0sIElu
c3BlY3RvckMKICNpZiBFTkFCTEUoV0VCR0wpCiBXZWJHTFByb2dyYW0qIEluc3BlY3RvclNoYWRl
clByb2dyYW06OnByb2dyYW0oKSBjb25zdAogewotICAgIGlmIChhdXRvKiBwcm9ncmFtV3JhcHBl
ciA9IFdURjo6Z2V0X2lmPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8V2ViR0xQcm9ncmFtPj4obV9w
cm9ncmFtKSkKKyAgICBpZiAoYXV0byogcHJvZ3JhbVdyYXBwZXIgPSBzdGQ6OmdldF9pZjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPFdlYkdMUHJvZ3JhbT4+KCZtX3Byb2dyYW0pKQogICAgICAgICBy
ZXR1cm4gJnByb2dyYW1XcmFwcGVyLT5nZXQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5kZXhl
ZERCQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JJ
bmRleGVkREJBZ2VudC5jcHAKaW5kZXggN2Y4MDZkNGZjODFjZDJiMDQzMjJiM2QwZDgwYmU0NDQw
NGJiZDA2ZS4uOWU2MTAwMjRmZWI1MzRjYTMxMjY2ODU5NWUwOWRmNDg5OTA4MjY5MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JJbmRleGVkREJB
Z2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JJ
bmRleGVkREJBZ2VudC5jcHAKQEAgLTE2Nyw3ICsxNjcsNyBAQCBzdGF0aWMgUmVmPFByb3RvY29s
OjpJbmRleGVkREI6OktleVBhdGg+IGtleVBhdGhGcm9tSURCS2V5UGF0aChjb25zdCBzdGQ6Om9w
dGlvbgogICAgICAgICBrZXlQYXRoLT5zZXRBcnJheShXVEZNb3ZlKGFycmF5KSk7CiAgICAgICAg
IHJldHVybiBrZXlQYXRoOwogICAgIH0pOwotICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3Is
IGlkYktleVBhdGgudmFsdWUoKSk7CisgICAgcmV0dXJuIHN0ZDo6dmlzaXQodmlzaXRvciwgaWRi
S2V5UGF0aC52YWx1ZSgpKTsKIH0KIAogc3RhdGljIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJh
bnNhY3Rpb25Gb3JEYXRhYmFzZShJREJEYXRhYmFzZSogaWRiRGF0YWJhc2UsIGNvbnN0IFN0cmlu
ZyYgb2JqZWN0U3RvcmVOYW1lLCBJREJUcmFuc2FjdGlvbk1vZGUgbW9kZSA9IElEQlRyYW5zYWN0
aW9uTW9kZTo6UmVhZG9ubHkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
aGFyZWRCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNw
cAppbmRleCBmZDllYzc1OTczN2Q0Yzk3NTk4MzFlNzcyNDM1OWJlMmU4NjYyNDMwLi5lNmRjZjk5
MzBlMzIxMTExNDBjM2NjODg5MmM5ZDM3ZTMyYzExMjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1NoYXJlZEJ1ZmZlci5jcHAKQEAgLTM0MSwyMCArMzQxLDIwIEBAIGJvb2wgU2hhcmVkQnVm
ZmVyOjppbnRlcm5hbGx5Q29uc2lzdGVudCgpIGNvbnN0CiBjb25zdCB1aW50OF90KiBTaGFyZWRC
dWZmZXI6OkRhdGFTZWdtZW50OjpkYXRhKCkgY29uc3QKIHsKICAgICBhdXRvIHZpc2l0b3IgPSBX
VEY6Om1ha2VWaXNpdG9yKAotICAgICAgICBbXShjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEp
IHsgcmV0dXJuIGRhdGEuZGF0YSgpOyB9LAorICAgICAgICBbXShjb25zdCBWZWN0b3I8dWludDhf
dD4mIGRhdGEpIC0+IGNvbnN0IHVpbnQ4X3QqIHsgcmV0dXJuIGRhdGEuZGF0YSgpOyB9LAogI2lm
IFVTRShDRikKLSAgICAgICAgW10oY29uc3QgUmV0YWluUHRyPENGRGF0YVJlZj4mIGRhdGEpIHsg
cmV0dXJuIENGRGF0YUdldEJ5dGVQdHIoZGF0YS5nZXQoKSk7IH0sCisgICAgICAgIFtdKGNvbnN0
IFJldGFpblB0cjxDRkRhdGFSZWY+JiBkYXRhKSAtPiBjb25zdCB1aW50OF90KiB7IHJldHVybiBD
RkRhdGFHZXRCeXRlUHRyKGRhdGEuZ2V0KCkpOyB9LAogI2VuZGlmCiAjaWYgVVNFKEdMSUIpCi0g
ICAgICAgIFtdKGNvbnN0IEdSZWZQdHI8R0J5dGVzPiYgZGF0YSkgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgdWludDhfdCo+KGdfYnl0ZXNfZ2V0X2RhdGEoZGF0YS5nZXQoKSwgbnVsbHB0cikp
OyB9LAorICAgICAgICBbXShjb25zdCBHUmVmUHRyPEdCeXRlcz4mIGRhdGEpIC0+IGNvbnN0IHVp
bnQ4X3QqIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihnX2J5dGVzX2dldF9k
YXRhKGRhdGEuZ2V0KCksIG51bGxwdHIpKTsgfSwKICNlbmRpZgogI2lmIFVTRShHU1RSRUFNRVIp
Ci0gICAgICAgIFtdKGNvbnN0IFJlZlB0cjxHc3RNYXBwZWRPd25lZEJ1ZmZlcj4mIGRhdGEpIHsg
cmV0dXJuIGRhdGEtPmRhdGEoKTsgfSwKKyAgICAgICAgW10oY29uc3QgUmVmUHRyPEdzdE1hcHBl
ZE93bmVkQnVmZmVyPiYgZGF0YSkgLT4gY29uc3QgdWludDhfdCogeyByZXR1cm4gZGF0YS0+ZGF0
YSgpOyB9LAogI2VuZGlmCi0gICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVE
YXRhJiBkYXRhKSB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRh
KCkpOyB9LAotICAgICAgICBbXShjb25zdCBQcm92aWRlciYgcHJvdmlkZXIpIHsgcmV0dXJuIHBy
b3ZpZGVyLmRhdGEoKTsgfQorICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxl
RGF0YSYgZGF0YSkgLT4gY29uc3QgdWludDhfdCogeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KGRhdGEuZGF0YSgpKTsgfSwKKyAgICAgICAgW10oY29uc3QgUHJvdmlkZXImIHBy
b3ZpZGVyKSAtPiBjb25zdCB1aW50OF90KiB7IHJldHVybiBwcm92aWRlci5kYXRhKCk7IH0KICAg
ICApOwotICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIG1faW1tdXRhYmxlRGF0YSk7Cisg
ICAgcmV0dXJuIHN0ZDo6dmlzaXQodmlzaXRvciwgbV9pbW11dGFibGVEYXRhKTsKIH0KIAogYm9v
bCBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50Ojpjb250YWluc01hcHBlZEZpbGVEYXRhKCkgY29u
c3QKQEAgLTQyNSwyMCArNDI1LDIwIEBAIGJvb2wgU2hhcmVkQnVmZmVyOjpvcGVyYXRvcj09KGNv
bnN0IFNoYXJlZEJ1ZmZlciYgb3RoZXIpIGNvbnN0CiBzaXplX3QgU2hhcmVkQnVmZmVyOjpEYXRh
U2VnbWVudDo6c2l6ZSgpIGNvbnN0CiB7CiAgICAgYXV0byB2aXNpdG9yID0gV1RGOjptYWtlVmlz
aXRvcigKLSAgICAgICAgW10oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKSB7IHJldHVybiBk
YXRhLnNpemUoKTsgfSwKKyAgICAgICAgW10oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKSAt
PiBzaXplX3QgeyByZXR1cm4gZGF0YS5zaXplKCk7IH0sCiAjaWYgVVNFKENGKQotICAgICAgICBb
XShjb25zdCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiYgZGF0YSkgeyByZXR1cm4gQ0ZEYXRhR2V0TGVu
Z3RoKGRhdGEuZ2V0KCkpOyB9LAorICAgICAgICBbXShjb25zdCBSZXRhaW5QdHI8Q0ZEYXRhUmVm
PiYgZGF0YSkgLT4gc2l6ZV90IHsgcmV0dXJuIENGRGF0YUdldExlbmd0aChkYXRhLmdldCgpKTsg
fSwKICNlbmRpZgogI2lmIFVTRShHTElCKQotICAgICAgICBbXShjb25zdCBHUmVmUHRyPEdCeXRl
cz4mIGRhdGEpIHsgcmV0dXJuIGdfYnl0ZXNfZ2V0X3NpemUoZGF0YS5nZXQoKSk7IH0sCisgICAg
ICAgIFtdKGNvbnN0IEdSZWZQdHI8R0J5dGVzPiYgZGF0YSkgLT4gc2l6ZV90IHsgcmV0dXJuIGdf
Ynl0ZXNfZ2V0X3NpemUoZGF0YS5nZXQoKSk7IH0sCiAjZW5kaWYKICNpZiBVU0UoR1NUUkVBTUVS
KQotICAgICAgICBbXShjb25zdCBSZWZQdHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+JiBkYXRhKSB7
IHJldHVybiBkYXRhLT5zaXplKCk7IH0sCisgICAgICAgIFtdKGNvbnN0IFJlZlB0cjxHc3RNYXBw
ZWRPd25lZEJ1ZmZlcj4mIGRhdGEpIC0+IHNpemVfdCB7IHJldHVybiBkYXRhLT5zaXplKCk7IH0s
CiAjZW5kaWYKLSAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRh
dGEpIHsgcmV0dXJuIGRhdGEuc2l6ZSgpOyB9LAotICAgICAgICBbXShjb25zdCBQcm92aWRlciYg
cHJvdmlkZXIpIHsgcmV0dXJuIHByb3ZpZGVyLnNpemUoKTsgfQorICAgICAgICBbXShjb25zdCBG
aWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgLT4gc2l6ZV90IHsgcmV0dXJuIGRhdGEu
c2l6ZSgpOyB9LAorICAgICAgICBbXShjb25zdCBQcm92aWRlciYgcHJvdmlkZXIpIC0+IHNpemVf
dCB7IHJldHVybiBwcm92aWRlci5zaXplKCk7IH0KICAgICApOwotICAgIHJldHVybiBXVEY6OnZp
c2l0KHZpc2l0b3IsIG1faW1tdXRhYmxlRGF0YSk7CisgICAgcmV0dXJuIHN0ZDo6dmlzaXQodmlz
aXRvciwgbV9pbW11dGFibGVEYXRhKTsKIH0KIAogU2hhcmVkQnVmZmVyRGF0YVZpZXc6OlNoYXJl
ZEJ1ZmZlckRhdGFWaWV3KFJlZjxTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50PiYmIHNlZ21lbnQs
IHNpemVfdCBwb3NpdGlvbldpdGhpblNlZ21lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jZi9TaGFyZWRCdWZmZXJDRi5jcHAKaW5kZXggZjZiZmRkN2Y1ZjczMzdlZTFmMTAzNjVjNWUy
MDEzMTg1YTdlMmY4YS4uNjlhNjg1MGRlNjNjMzgyN2NlOGQ5NWE1YmVkZWNkODdmNjg3NGJiOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNGLmNwcApAQCAt
NDQsNyArNDQsNyBAQCBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihDRkRhdGFSZWYgZGF0YSkK
IFJldGFpblB0cjxDRkRhdGFSZWY+IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlQ0ZEYXRhKCkgY29uc3QK
IHsKICAgICBpZiAobV9zZWdtZW50cy5zaXplKCkgPT0gMSkgewotICAgICAgICBpZiAoYXV0byBk
YXRhID0gV1RGOjpnZXRfaWY8UmV0YWluUHRyPENGRGF0YVJlZj4+KG1fc2VnbWVudHNbMF0uc2Vn
bWVudC0+bV9pbW11dGFibGVEYXRhKSkKKyAgICAgICAgaWYgKGF1dG8gZGF0YSA9IHN0ZDo6Z2V0
X2lmPFJldGFpblB0cjxDRkRhdGFSZWY+PigmbV9zZWdtZW50c1swXS5zZWdtZW50LT5tX2ltbXV0
YWJsZURhdGEpKQogICAgICAgICAgICAgcmV0dXJuICpkYXRhOwogICAgIH0KICAgICBhdXRvIGNm
RGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShudWxscHRyLCBzaXplKCkpKTsKQEAg
LTY0LDcgKzY0LDcgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmhpbnRNZW1vcnlOb3ROZWVkZWRTb29u
KCkgY29uc3QKIHsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogbV9zZWdtZW50cykgewog
ICAgICAgICBpZiAoZW50cnkuc2VnbWVudC0+aGFzT25lUmVmKCkpIHsKLSAgICAgICAgICAgIGlm
IChhdXRvIGRhdGEgPSBXVEY6OmdldF9pZjxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4oZW50cnkuc2Vn
bWVudC0+bV9pbW11dGFibGVEYXRhKSkKKyAgICAgICAgICAgIGlmIChhdXRvIGRhdGEgPSBzdGQ6
OmdldF9pZjxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4oJmVudHJ5LnNlZ21lbnQtPm1faW1tdXRhYmxl
RGF0YSkpCiAgICAgICAgICAgICAgICAgT1NBbGxvY2F0b3I6OmhpbnRNZW1vcnlOb3ROZWVkZWRT
b29uKGNvbnN0X2Nhc3Q8VUludDgqPihDRkRhdGFHZXRCeXRlUHRyKGRhdGEtPmdldCgpKSksIENG
RGF0YUdldExlbmd0aChkYXRhLT5nZXQoKSkpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcApp
bmRleCBjZGY4YmE1MTY0NmVjOTA2ZGRmMDA1YTAxZmY2ZjY4ZWZlYmY0MmI3Li5hMjQyZDM2NWY4
OWRiYTljN2RhZDgwZjY5ODdjYjQ1ZGZjZjRhZGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcApAQCAtMTYxLDcgKzE2
MSw3IEBAIHN0YXRpYyBGb250UmFuZ2VzIHJlYWxpemVOZXh0RmFsbGJhY2soY29uc3QgRm9udENh
c2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sCiAgICAgICAgICAgICByZXR1cm4gZm9udEZh
bWlseVNwZWNpZmljYXRpb24uZm9udFJhbmdlcyhkZXNjcmlwdGlvbik7CiAgICAgICAgIH0pOwog
ICAgICAgICBjb25zdCBhdXRvJiBjdXJyZW50RmFtaWx5ID0gZGVzY3JpcHRpb24uZWZmZWN0aXZl
RmFtaWx5QXQoaW5kZXgrKyk7Ci0gICAgICAgIGF1dG8gcmFuZ2VzID0gV1RGOjp2aXNpdCh2aXNp
dG9yLCBjdXJyZW50RmFtaWx5KTsKKyAgICAgICAgYXV0byByYW5nZXMgPSBzdGQ6OnZpc2l0KHZp
c2l0b3IsIGN1cnJlbnRGYW1pbHkpOwogICAgICAgICBpZiAoIXJhbmdlcy5pc051bGwoKSkKICAg
ICAgICAgICAgIHJldHVybiByYW5nZXM7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtQnVmZmVyLmNwcAppbmRleCAxMzU0YmRiZWRkNjExNmMyMDlmYjU0YTYzZTE5NDIy
NTNjYjNhNThhLi4zYjM0NGRhYzE4ZWVhNzRjOGM5ZDc2NTg4ODA5OTk2NWU4MjgyNzhjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcApAQCAtNjUwLDcgKzY1
MCw3IEBAIGJvb2wgSXRlbUhhbmRsZTo6c2FmZUNvcHkoSXRlbVR5cGUgaXRlbVR5cGUsIEl0ZW1I
YW5kbGUgZGVzdGluYXRpb24pIGNvbnN0CiAKIGJvb2wgc2FmZUNvcHkoSXRlbUhhbmRsZSBkZXN0
aW5hdGlvbiwgY29uc3QgRGlzcGxheUxpc3RJdGVtJiBzb3VyY2UpCiB7Ci0gICAgcmV0dXJuIFdU
Rjo6dmlzaXQoWyZdKGNvbnN0IGF1dG8mIHNvdXJjZSkgeworICAgIHJldHVybiBzdGQ6OnZpc2l0
KFsmXShjb25zdCBhdXRvJiBzb3VyY2UpIHsKICAgICAgICAgdXNpbmcgRGlzcGxheUxpc3RJdGVt
VHlwZSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUoc291cmNl
KT46OnR5cGU7CiAgICAgICAgIGNvbnN0ZXhwciBhdXRvIGl0ZW1UeXBlID0gRGlzcGxheUxpc3RJ
dGVtVHlwZTo6aXRlbVR5cGU7CiAgICAgICAgIGRlc3RpbmF0aW9uLmRhdGFbMF0gPSBzdGF0aWNf
Y2FzdDx1aW50OF90PihpdGVtVHlwZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
VHlwZS5jcHAKaW5kZXggOThhMTZkMjVmYTFiNWE0YzUyYjBmNzNhNGY5ZjUzMmFlYmZhYjcwYy4u
M2JlYmE5YzRkMWE4Y2FhNDRjNzU4ZmQyMDNiZTI2MTM2NzlhNWQ3NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRl
bVR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcApAQCAtMjc2LDcgKzI3Niw3IEBAIHNpemVfdCBw
YWRkZWRTaXplT2ZUeXBlQW5kSXRlbUluQnl0ZXMoSXRlbVR5cGUgdHlwZSkKIAogc2l6ZV90IHBh
ZGRlZFNpemVPZlR5cGVBbmRJdGVtSW5CeXRlcyhjb25zdCBEaXNwbGF5TGlzdEl0ZW0mIGRpc3Bs
YXlMaXN0SXRlbSkKIHsKLSAgICBhdXRvIGl0ZW1TaXplID0gV1RGOjp2aXNpdChbXShjb25zdCBh
dXRvJiBpdGVtKSB7CisgICAgYXV0byBpdGVtU2l6ZSA9IHN0ZDo6dmlzaXQoW10oY29uc3QgYXV0
byYgaXRlbSkgewogICAgICAgICByZXR1cm4gc2l6ZW9mKGl0ZW0pOwogICAgIH0sIGRpc3BsYXlM
aXN0SXRlbSk7CiAgICAgcmV0dXJuIHNpemVvZih1aW50NjRfdCkgKyByb3VuZFVwVG9NdWx0aXBs
ZU9mKGFsaWdub2YodWludDY0X3QpLCBpdGVtU2l6ZSk7CkBAIC0yODQsNyArMjg0LDcgQEAgc2l6
ZV90IHBhZGRlZFNpemVPZlR5cGVBbmRJdGVtSW5CeXRlcyhjb25zdCBEaXNwbGF5TGlzdEl0ZW0m
IGRpc3BsYXlMaXN0SXRlbSkKIAogSXRlbVR5cGUgZGlzcGxheUxpc3RJdGVtVHlwZShjb25zdCBE
aXNwbGF5TGlzdEl0ZW0mIGRpc3BsYXlMaXN0SXRlbSkKIHsKLSAgICByZXR1cm4gV1RGOjp2aXNp
dChbXShjb25zdCBhdXRvJiBpdGVtKSB7CisgICAgcmV0dXJuIHN0ZDo6dmlzaXQoW10oY29uc3Qg
YXV0byYgaXRlbSkgewogICAgICAgICByZXR1cm4gaXRlbS5pdGVtVHlwZTsKICAgICB9LCBkaXNw
bGF5TGlzdEl0ZW0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9j
ay9Nb2NrTWVkaWFEZXZpY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja01l
ZGlhRGV2aWNlLmgKaW5kZXggNDY3ZDkxMzk0NDQzZWZhMjgzNjNhODZhOGQ1NGZkMmM0NDU4NTNj
YS4uYTIzZDcwMTMyNWJmNTc4N2MwMDNmOTk3YmIxMmQwZDQ3OWZjNTQ0ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFEZXZpY2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tNZWRpYURldmljZS5oCkBAIC0yMDEsNyArMjAx
LDcgQEAgc3RydWN0IE1vY2tNZWRpYURldmljZSB7CiAgICAgewogICAgICAgICBlbmNvZGVyIDw8
IHBlcnNpc3RlbnRJZDsKICAgICAgICAgZW5jb2RlciA8PCBsYWJlbDsKLSAgICAgICAgc3dpdGNo
T24ocHJvcGVydGllcywgWyZdKGNvbnN0IE1vY2tNaWNyb3Bob25lUHJvcGVydGllcyYgcHJvcGVy
dGllcykgeworICAgICAgICBXVEY6OnN3aXRjaE9uKHByb3BlcnRpZXMsIFsmXShjb25zdCBNb2Nr
TWljcm9waG9uZVByb3BlcnRpZXMmIHByb3BlcnRpZXMpIHsKICAgICAgICAgICAgIGVuY29kZXIg
PDwgKHVpbnQ4X3QpMTsKICAgICAgICAgICAgIGVuY29kZXIgPDwgcHJvcGVydGllczsKICAgICAg
ICAgfSwgWyZdKGNvbnN0IE1vY2tTcGVha2VyUHJvcGVydGllcyYgcHJvcGVydGllcykgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAppbmRleCBjZTllOWY1
MGFjNGU2OGQ4ZWFmNjYzYmY4NjE1OGY0ZmRjNjJlNTJiLi44OTBhZDY0Yjg1MzkwOGNkZjhjOTRl
MjI5YzI1ZmYzOWJiNzU3YjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0Zvcm1EYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0Zvcm1EYXRhLmNwcApAQCAtMTI3LDcgKzEyNyw3IEBAIHVuc2lnbmVkIEZvcm1EYXRhOjppbWFn
ZU9yTWVkaWFGaWxlc0NvdW50KCkgY29uc3QKIHsKICAgICB1bnNpZ25lZCBpbWFnZU9yTWVkaWFG
aWxlc0NvdW50ID0gMDsKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBtX2VsZW1lbnRzKSB7Ci0g
ICAgICAgIGF1dG8qIGVuY29kZWRGaWxlRGF0YSA9IFdURjo6Z2V0X2lmPEZvcm1EYXRhRWxlbWVu
dDo6RW5jb2RlZEZpbGVEYXRhPihlbGVtZW50LmRhdGEpOworICAgICAgICBhdXRvKiBlbmNvZGVk
RmlsZURhdGEgPSBzdGQ6OmdldF9pZjxGb3JtRGF0YUVsZW1lbnQ6OkVuY29kZWRGaWxlRGF0YT4o
JmVsZW1lbnQuZGF0YSk7CiAgICAgICAgIGlmICghZW5jb2RlZEZpbGVEYXRhKQogICAgICAgICAg
ICAgY29udGludWU7CiAKQEAgLTE0MCw3ICsxNDAsNyBAQCB1bnNpZ25lZCBGb3JtRGF0YTo6aW1h
Z2VPck1lZGlhRmlsZXNDb3VudCgpIGNvbnN0CiAKIHVpbnQ2NF90IEZvcm1EYXRhRWxlbWVudDo6
bGVuZ3RoSW5CeXRlcyhjb25zdCBGdW5jdGlvbjx1aW50NjRfdChjb25zdCBVUkwmKT4mIGJsb2JT
aXplKSBjb25zdAogewotICAgIHJldHVybiBzd2l0Y2hPbihkYXRhLAorICAgIHJldHVybiBXVEY6
OnN3aXRjaE9uKGRhdGEsCiAgICAgICAgIFtdIChjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ5dGVz
KSB7CiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ5dGVzLnNpemUo
KSk7CiAgICAgICAgIH0sIFtdIChjb25zdCBGb3JtRGF0YUVsZW1lbnQ6OkVuY29kZWRGaWxlRGF0
YSYgZmlsZURhdGEpIHsKQEAgLTE2Miw3ICsxNjIsNyBAQCB1aW50NjRfdCBGb3JtRGF0YUVsZW1l
bnQ6Omxlbmd0aEluQnl0ZXMoKSBjb25zdAogCiBGb3JtRGF0YUVsZW1lbnQgRm9ybURhdGFFbGVt
ZW50Ojppc29sYXRlZENvcHkoKSBjb25zdAogewotICAgIHJldHVybiBzd2l0Y2hPbihkYXRhLAor
ICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGRhdGEsCiAgICAgICAgIFtdIChjb25zdCBWZWN0b3I8
dWludDhfdD4mIGJ5dGVzKSB7CiAgICAgICAgICAgICByZXR1cm4gRm9ybURhdGFFbGVtZW50KFZl
Y3RvciB7IGJ5dGVzLmRhdGEoKSwgYnl0ZXMuc2l6ZSgpIH0pOwogICAgICAgICB9LCBbXSAoY29u
c3QgRm9ybURhdGFFbGVtZW50OjpFbmNvZGVkRmlsZURhdGEmIGZpbGVEYXRhKSB7CkBAIC0xNzcs
NyArMTc3LDcgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5kRGF0YShjb25zdCB2b2lkKiBkYXRhLCBz
aXplX3Qgc2l6ZSkKIHsKICAgICBtX2xlbmd0aEluQnl0ZXMgPSBzdGQ6Om51bGxvcHQ7CiAgICAg
aWYgKCFtX2VsZW1lbnRzLmlzRW1wdHkoKSkgewotICAgICAgICBpZiAoYXV0byogdmVjdG9yID0g
V1RGOjpnZXRfaWY8VmVjdG9yPHVpbnQ4X3Q+PihtX2VsZW1lbnRzLmxhc3QoKS5kYXRhKSkgewor
ICAgICAgICBpZiAoYXV0byogdmVjdG9yID0gc3RkOjpnZXRfaWY8VmVjdG9yPHVpbnQ4X3Q+Pigm
bV9lbGVtZW50cy5sYXN0KCkuZGF0YSkpIHsKICAgICAgICAgICAgIHZlY3Rvci0+YXBwZW5kKHN0
YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgc2l6ZSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KQEAgLTI5Myw3ICsyOTMsNyBAQCBWZWN0b3I8dWludDhfdD4gRm9ybURh
dGE6OmZsYXR0ZW4oKSBjb25zdAogICAgIC8vIENvbmNhdGVuYXRlIGFsbCB0aGUgYnl0ZSBhcnJh
eXMsIGJ1dCBvbWl0IGFueSBmaWxlcy4KICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKICAgICBm
b3IgKGF1dG8mIGVsZW1lbnQgOiBtX2VsZW1lbnRzKSB7Ci0gICAgICAgIGlmIChhdXRvKiB2ZWN0
b3IgPSBXVEY6OmdldF9pZjxWZWN0b3I8dWludDhfdD4+KGVsZW1lbnQuZGF0YSkpCisgICAgICAg
IGlmIChhdXRvKiB2ZWN0b3IgPSBzdGQ6OmdldF9pZjxWZWN0b3I8dWludDhfdD4+KCZlbGVtZW50
LmRhdGEpKQogICAgICAgICAgICAgZGF0YS5hcHBlbmQodmVjdG9yLT5kYXRhKCksIHZlY3Rvci0+
c2l6ZSgpKTsKICAgICB9CiAgICAgcmV0dXJuIGRhdGE7CkBAIC0zNjcsNyArMzY3LDcgQEAgRm9y
bURhdGFGb3JVcGxvYWQgRm9ybURhdGE6OnByZXBhcmVGb3JVcGxvYWQoKQogewogICAgIFZlY3Rv
cjxTdHJpbmc+IGdlbmVyYXRlZEZpbGVzOwogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IG1fZWxl
bWVudHMpIHsKLSAgICAgICAgYXV0byogZmlsZURhdGEgPSBXVEY6OmdldF9pZjxGb3JtRGF0YUVs
ZW1lbnQ6OkVuY29kZWRGaWxlRGF0YT4oZWxlbWVudC5kYXRhKTsKKyAgICAgICAgYXV0byogZmls
ZURhdGEgPSBzdGQ6OmdldF9pZjxGb3JtRGF0YUVsZW1lbnQ6OkVuY29kZWRGaWxlRGF0YT4oJmVs
ZW1lbnQuZGF0YSk7CiAgICAgICAgIGlmICghZmlsZURhdGEpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgaWYgKEZpbGVTeXN0ZW06OmZpbGVUeXBlRm9sbG93aW5nU3ltbGlua3MoZmls
ZURhdGEtPmZpbGVuYW1lKSAhPSBGaWxlU3lzdGVtOjpGaWxlVHlwZTo6RGlyZWN0b3J5KQpAQCAt
NDI1LDcgKzQyNSw3IEBAIFVSTCBGb3JtRGF0YTo6YXNCbG9iVVJMKCkgY29uc3QKICAgICBpZiAo
bV9lbGVtZW50cy5zaXplKCkgIT0gMSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGlmIChh
dXRvKiBibG9iRGF0YSA9IFdURjo6Z2V0X2lmPEZvcm1EYXRhRWxlbWVudDo6RW5jb2RlZEJsb2JE
YXRhPihtX2VsZW1lbnRzLmZpcnN0KCkuZGF0YSkpCisgICAgaWYgKGF1dG8qIGJsb2JEYXRhID0g
c3RkOjpnZXRfaWY8Rm9ybURhdGFFbGVtZW50OjpFbmNvZGVkQmxvYkRhdGE+KCZtX2VsZW1lbnRz
LmZpcnN0KCkuZGF0YSkpCiAgICAgICAgIHJldHVybiBibG9iRGF0YS0+dXJsOwogICAgIHJldHVy
biB7IH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zv
cm1EYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgKaW5k
ZXggNjM1NDA4YzU0ODk5Y2FiOWFhZTg1MzUxZjI1YjQyMjhhYzI3YWZhZi4uZmVlYjE5NGQzZjYw
OTY0NTEwMTE3MzIyYWViZWU4MGVjOTAyMzZjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvRm9ybURhdGEuaApAQCAtMTUzLDEwICsxNTMsMTAgQEAgc3RydWN0IEZvcm1EYXRh
RWxlbWVudCB7CiAgICAgICAgIGlmIChkYXRhLmluZGV4KCkgIT0gb3RoZXIuZGF0YS5pbmRleCgp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoIWRhdGEuaW5kZXgoKSkK
LSAgICAgICAgICAgIHJldHVybiBXVEY6OmdldDwwPihkYXRhKSA9PSBXVEY6OmdldDwwPihvdGhl
ci5kYXRhKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6OmdldDwwPihkYXRhKSA9PSBzdGQ6Omdl
dDwwPihvdGhlci5kYXRhKTsKICAgICAgICAgaWYgKGRhdGEuaW5kZXgoKSA9PSAxKQotICAgICAg
ICAgICAgcmV0dXJuIFdURjo6Z2V0PDE+KGRhdGEpID09IFdURjo6Z2V0PDE+KG90aGVyLmRhdGEp
OwotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8Mj4oZGF0YSkgPT0gV1RGOjpnZXQ8Mj4ob3RoZXIu
ZGF0YSk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpnZXQ8MT4oZGF0YSkgPT0gc3RkOjpnZXQ8
MT4ob3RoZXIuZGF0YSk7CisgICAgICAgIHJldHVybiBzdGQ6OmdldDwyPihkYXRhKSA9PSBzdGQ6
OmdldDwyPihvdGhlci5kYXRhKTsKICAgICB9CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZv
cm1EYXRhRWxlbWVudCYgb3RoZXIpIGNvbnN0CiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Gb3JtRGF0YVN0cmVhbUNGTmV0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvRm9ybURhdGFTdHJlYW1DRk5ldC5jcHAKaW5k
ZXggMGI5OGViNzVkOTBmN2Y3MzMzMjJkMjg2ODk4ZmE2NjIzNjdiNDFlYS4uYjkwMjliY2U2NTQw
OTJkOWI5MTcyYjM5MTYxMzA2ZjRhNzZiY2UzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9Gb3JtRGF0YVN0cmVhbUNGTmV0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Zvcm1EYXRhU3RyZWFtQ0ZOZXQuY3BwCkBAIC0x
MzcsNyArMTM3LDcgQEAgc3RhdGljIGJvb2wgYWR2YW5jZUN1cnJlbnRTdHJlYW0oRm9ybVN0cmVh
bUZpZWxkcyogZm9ybSkKICAgICAvLyBDcmVhdGUgdGhlIG5ldyBzdHJlYW0uCiAgICAgRm9ybURh
dGFFbGVtZW50JiBuZXh0SW5wdXQgPSBmb3JtLT5yZW1haW5pbmdFbGVtZW50cy5sYXN0KCk7CiAK
LSAgICBib29sIHN1Y2Nlc3MgPSBzd2l0Y2hPbihuZXh0SW5wdXQuZGF0YSwKKyAgICBib29sIHN1
Y2Nlc3MgPSBXVEY6OnN3aXRjaE9uKG5leHRJbnB1dC5kYXRhLAogICAgICAgICBbZm9ybV0gKFZl
Y3Rvcjx1aW50OF90PiYgYnl0ZXMpIHsKICAgICAgICAgICAgIHNpemVfdCBzaXplID0gYnl0ZXMu
c2l6ZSgpOwogICAgICAgICAgICAgTWFsbG9jUHRyPHVpbnQ4X3QsIFdURjo6VmVjdG9yTWFsbG9j
PiBkYXRhID0gYnl0ZXMucmVsZWFzZUJ1ZmZlcigpOwpAQCAtMzk3LDcgKzM5Nyw3IEBAIHZvaWQg
c2V0SFRUUEJvZHkoQ0ZNdXRhYmxlVVJMUmVxdWVzdFJlZiByZXF1ZXN0LCBGb3JtRGF0YSogZm9y
bURhdGEpCiAgICAgLy8gSGFuZGxlIHRoZSBjb21tb24gc3BlY2lhbCBjYXNlIG9mIG9uZSBwaWVj
ZSBvZiBmb3JtIGRhdGEsIHdpdGggbm8gZmlsZXMuCiAgICAgYXV0byYgZWxlbWVudHMgPSBmb3Jt
RGF0YS0+ZWxlbWVudHMoKTsKICAgICBpZiAoZWxlbWVudHMuc2l6ZSgpID09IDEgJiYgIWZvcm1E
YXRhLT5hbHdheXNTdHJlYW0oKSkgewotICAgICAgICBpZiAoYXV0byogdmVjdG9yID0gV1RGOjpn
ZXRfaWY8VmVjdG9yPHVpbnQ4X3Q+PihlbGVtZW50c1swXS5kYXRhKSkgeworICAgICAgICBpZiAo
YXV0byogdmVjdG9yID0gc3RkOjpnZXRfaWY8VmVjdG9yPHVpbnQ4X3Q+PigmZWxlbWVudHNbMF0u
ZGF0YSkpIHsKICAgICAgICAgICAgIGF1dG8gZGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKG51
bGxwdHIsIHZlY3Rvci0+ZGF0YSgpLCB2ZWN0b3ItPnNpemUoKSkpOwogICAgICAgICAgICAgQ0ZV
UkxSZXF1ZXN0U2V0SFRUUFJlcXVlc3RCb2R5KHJlcXVlc3QsIGRhdGEuZ2V0KCkpOwogICAgICAg
ICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNv
bHZlRm9yRm9udFJhdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JG
b250UmF3LmNwcAppbmRleCA3MWM3NGNiMDYyNDUyYmRjMDE5YTAwNzc0OWE5NDgzNmQ0NmEzYWIy
Li40MjdkZDg4NTQ4YmVmNjRmNjJjNmU5ZmZjYmJiMTkyMTI3NTFmNDA5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3LmNwcApAQCAtMTU4LDcgKzE1
OCw3IEBAIHN0ZDo6b3B0aW9uYWw8Rm9udENhc2NhZGU+IHJlc29sdmVGb3JGb250UmF3KGNvbnN0
IEZvbnRSYXcmIGZvbnRSYXcsIEZvbnRDYXNjYWRlCiAgICAgfQogCiAgICAgaWYgKGZvbnRSYXcu
d2VpZ2h0KSB7Ci0gICAgICAgIGF1dG8gd2VpZ2h0ID0gc3dpdGNoT24oKmZvbnRSYXcud2VpZ2h0
LCBbJl0gKENTU1ZhbHVlSUQgaWRlbnQpIHsKKyAgICAgICAgYXV0byB3ZWlnaHQgPSBXVEY6OnN3
aXRjaE9uKCpmb250UmF3LndlaWdodCwgWyZdIChDU1NWYWx1ZUlEIGlkZW50KSB7CiAgICAgICAg
ICAgICBzd2l0Y2ggKGlkZW50KSB7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgog
ICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxXZWlnaHRWYWx1ZSgpOwpAQCAtMTc5LDcgKzE3
OSw3IEBAIHN0ZDo6b3B0aW9uYWw8Rm9udENhc2NhZGU+IHJlc29sdmVGb3JGb250UmF3KGNvbnN0
IEZvbnRSYXcmIGZvbnRSYXcsIEZvbnRDYXNjYWRlCiAgICAgfQogCiAgICAgZm9udERlc2NyaXB0
aW9uLnNldEtleXdvcmRTaXplRnJvbUlkZW50aWZpZXIoQ1NTVmFsdWVJbnZhbGlkKTsKLSAgICBm
bG9hdCBzaXplID0gc3dpdGNoT24oZm9udFJhdy5zaXplLCBbJl0gKENTU1ZhbHVlSUQgaWRlbnQp
IHsKKyAgICBmbG9hdCBzaXplID0gV1RGOjpzd2l0Y2hPbihmb250UmF3LnNpemUsIFsmXSAoQ1NT
VmFsdWVJRCBpZGVudCkgewogICAgICAgICBzd2l0Y2ggKGlkZW50KSB7CiAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVYeFNtYWxsOgogICAgICAgICBjYXNlIENTU1ZhbHVlWFNtYWxsOgpAQCAtMTk5LDcg
KzE5OSw3IEBAIHN0ZDo6b3B0aW9uYWw8Rm9udENhc2NhZGU+IHJlc29sdmVGb3JGb250UmF3KGNv
bnN0IEZvbnRSYXcmIGZvbnRSYXcsIEZvbnRDYXNjYWRlCiAgICAgICAgICAgICByZXR1cm4gMC5m
OwogICAgICAgICB9CiAgICAgfSwgWyZdIChjb25zdCBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
Okxlbmd0aE9yUGVyY2VudFJhdyYgbGVuZ3RoT3JQZXJjZW50KSB7Ci0gICAgICAgIHJldHVybiBz
d2l0Y2hPbihsZW5ndGhPclBlcmNlbnQsIFsmXSAoY29uc3QgQ1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzOjpMZW5ndGhSYXcmIGxlbmd0aCkgeworICAgICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihs
ZW5ndGhPclBlcmNlbnQsIFsmXSAoY29uc3QgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5n
dGhSYXcmIGxlbmd0aCkgewogICAgICAgICAgICAgYXV0byBmb250Q2FzY2FkZSA9IEZvbnRDYXNj
YWRlKEZvbnRDYXNjYWRlRGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKSk7CiAgICAgICAgICAg
ICBmb250Q2FzY2FkZS51cGRhdGUoY29udGV4dC5jc3NGb250U2VsZWN0b3IoKSk7CiAgICAgICAg
ICAgICAvLyBGSVhNRTogUGFzc2luZyBudWxsIGZvciB0aGUgUmVuZGVyVmlldyBwYXJhbWV0ZXIg
bWVhbnMgdGhhdCB2dyBhbmQgdmggdW5pdHMgd2lsbCBldmFsdWF0ZSB0bwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcAppbmRleCBhYWE4NzMxZjllY2FhNmE4MWY1MjFkYzBlN2Y4NDkyM2ZhYTgx
ZjA2Li42N2E4MGIwMDY3ZGIwZTE0ZjgyMjAzZTMzMTk1YTY2YTU5ZTQ2OTFjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmNwcApAQCAtNDcwLDcgKzQ3MCw3IEBAIFZlY3RvcjxSZWZQdHI8V2Vi
Q29yZTo6QmxvYkRhdGFGaWxlUmVmZXJlbmNlPj4gTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OnJlCiAgICAgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpCbG9iRGF0YUZpbGVSZWZlcmVuY2U+
PiBmaWxlczsKICAgICBpZiAoYXV0byogYm9keSA9IGxvYWRQYXJhbWV0ZXJzLnJlcXVlc3QuaHR0
cEJvZHkoKSkgewogICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBib2R5LT5lbGVtZW50cygp
KSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogYmxvYkRhdGEgPSBXVEY6OmdldF9pZjxGb3JtRGF0
YUVsZW1lbnQ6OkVuY29kZWRCbG9iRGF0YT4oZWxlbWVudC5kYXRhKSkKKyAgICAgICAgICAgIGlm
IChhdXRvKiBibG9iRGF0YSA9IHN0ZDo6Z2V0X2lmPEZvcm1EYXRhRWxlbWVudDo6RW5jb2RlZEJs
b2JEYXRhPigmZWxlbWVudC5kYXRhKSkKICAgICAgICAgICAgICAgICBmaWxlcy5hcHBlbmRWZWN0
b3IoYmxvYlJlZ2lzdHJ5LmZpbGVzSW5CbG9iKGJsb2JEYXRhLT51cmwpKTsKICAgICAgICAgfQog
ICAgICAgICBjb25zdF9jYXN0PFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCY+KGxvYWRQYXJhbWV0
ZXJzLnJlcXVlc3QpLnNldEhUVFBCb2R5KGJvZHktPnJlc29sdmVCbG9iUmVmZXJlbmNlcygmYmxv
YlJlZ2lzdHJ5KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3BwCmluZGV4IGRkZjk2ZGUwMzNj
NjVmNTUyMWYzYmJiZTgxZDE5YWM4ZTdhNWJlOWQuLjZiYjBiZTg0NDZhMDlmZDQ1ZDVjMDg3OGM4
MGY2NmFlNWIxNmQxYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3BwCkBAIC01Myw3ICs1
Myw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVu
Y29kZXImIGVuY29kZXIpIGNvbnN0CiAKICAgICAgICAgVmVjdG9yPFNhbmRib3hFeHRlbnNpb246
OkhhbmRsZT4gcmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9uczsKICAgICAgICAgZm9yIChjb25z
dCBGb3JtRGF0YUVsZW1lbnQmIGVsZW1lbnQgOiByZXF1ZXN0Lmh0dHBCb2R5KCktPmVsZW1lbnRz
KCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBmaWxlRGF0YSA9IFdURjo6Z2V0X2lmPEZvcm1E
YXRhRWxlbWVudDo6RW5jb2RlZEZpbGVEYXRhPihlbGVtZW50LmRhdGEpKSB7CisgICAgICAgICAg
ICBpZiAoYXV0byogZmlsZURhdGEgPSBzdGQ6OmdldF9pZjxGb3JtRGF0YUVsZW1lbnQ6OkVuY29k
ZWRGaWxlRGF0YT4oJmVsZW1lbnQuZGF0YSkpIHsKICAgICAgICAgICAgICAgICBjb25zdCBTdHJp
bmcmIHBhdGggPSBmaWxlRGF0YS0+ZmlsZW5hbWU7CiAgICAgICAgICAgICAgICAgaWYgKGF1dG8g
aGFuZGxlID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hFeHRl
bnNpb246OlR5cGU6OlJlYWRPbmx5KSkKICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHlT
YW5kYm94RXh0ZW5zaW9ucy5hcHBlbmQoV1RGTW92ZSgqaGFuZGxlKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oIGIvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAppbmRleCA0NzlkYjYwZWRjMjcxNmQ1NTYw
NmY2NTJmMjQzMWFkMzY5ZjY1NzBjLi5kMzE1NjUwZDAxZTMzN2ZmY2ViNmFjMWUxNzE0NzNkOGY5
YzA5NzQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENv
ZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgK
QEAgLTcwNyw3ICs3MDcsNyBAQCBzdHJ1Y3QgVmFyaWFudENvZGVyIHsKICAgICBzdGF0aWMgdm9p
ZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV1RGOjpWYXJpYW50PFR5cGVzLi4uPiYg
dmFyaWFudCwgdW5zaWduZWQgaSkKICAgICB7CiAgICAgICAgIGlmIChpID09IGluZGV4KSB7Ci0g
ICAgICAgICAgICBlbmNvZGVyIDw8IFdURjo6Z2V0PGluZGV4Pih2YXJpYW50KTsKKyAgICAgICAg
ICAgIGVuY29kZXIgPDwgc3RkOjpnZXQ8aW5kZXg+KHZhcmlhbnQpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIFZhcmlhbnRDb2RlcjxpbmRleCAtIDEsIFR5cGVzLi4u
Pjo6ZW5jb2RlKGVuY29kZXIsIHZhcmlhbnQsIGkpOwpAQCAtNzE2LDcgKzcxNiw3IEBAIHN0cnVj
dCBWYXJpYW50Q29kZXIgewogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdURjo6VmFyaWFudDxU
eXBlcy4uLj4+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCB1bnNpZ25lZCBpKQogICAgIHsKICAg
ICAgICAgaWYgKGkgPT0gaW5kZXgpIHsKLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dHlwZW5h
bWUgV1RGOjp2YXJpYW50X2FsdGVybmF0aXZlPGluZGV4LCBXVEY6OlZhcmlhbnQ8VHlwZXMuLi4+
Pjo6dHlwZT4gb3B0aW9uYWw7CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPHR5cGVuYW1lIHN0
ZDo6dmFyaWFudF9hbHRlcm5hdGl2ZTxpbmRleCwgV1RGOjpWYXJpYW50PFR5cGVzLi4uPj46OnR5
cGU+IG9wdGlvbmFsOwogICAgICAgICAgICAgZGVjb2RlciA+PiBvcHRpb25hbDsKICAgICAgICAg
ICAgIGlmICghb3B0aW9uYWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
QEAgLTczMSwxMyArNzMxLDEzIEBAIHN0cnVjdCBWYXJpYW50Q29kZXI8MCwgVHlwZXMuLi4+IHsK
ICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV1RGOjpWYXJp
YW50PFR5cGVzLi4uPiYgdmFyaWFudCwgdW5zaWduZWQgaSkKICAgICB7CiAgICAgICAgIEFTU0VS
VF9VTlVTRUQoaSwgIWkpOwotICAgICAgICBlbmNvZGVyIDw8IFdURjo6Z2V0PDA+KHZhcmlhbnQp
OworICAgICAgICBlbmNvZGVyIDw8IHN0ZDo6Z2V0PDA+KHZhcmlhbnQpOwogICAgIH0KICAgICAK
ICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxXVEY6OlZhcmlhbnQ8VHlwZXMuLi4+PiBkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgdW5zaWduZWQgaSkKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVT
RUQoaSwgIWkpOwotICAgICAgICBzdGQ6Om9wdGlvbmFsPHR5cGVuYW1lIFdURjo6dmFyaWFudF9h
bHRlcm5hdGl2ZTwwLCBXVEY6OlZhcmlhbnQ8VHlwZXMuLi4+Pjo6dHlwZT4gb3B0aW9uYWw7Cisg
ICAgICAgIHN0ZDo6b3B0aW9uYWw8dHlwZW5hbWUgc3RkOjp2YXJpYW50X2FsdGVybmF0aXZlPDAs
IFdURjo6VmFyaWFudDxUeXBlcy4uLj4+Ojp0eXBlPiBvcHRpb25hbDsKICAgICAgICAgZGVjb2Rl
ciA+PiBvcHRpb25hbDsKICAgICAgICAgaWYgKCFvcHRpb25hbCkKICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9G
b3JtRGF0YVJlZmVyZW5jZS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRm9ybURhdGFS
ZWZlcmVuY2UuaAppbmRleCBjMmQ1ODk1OTVmNWUzNDEwZDFhZWFmNDJiYTdhZWUyMzhmNzE1NDE3
Li5iY2RiMTcwMDdiYzJmMGU1OWNkNmQwOGZlYjRlMjZkM2VmOGQ2ZTcxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Gb3JtRGF0YVJlZmVyZW5jZS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Zvcm1EYXRhUmVmZXJlbmNlLmgKQEAgLTUyLDcgKzUyLDcg
QEAgcHVibGljOgogCiAgICAgICAgIFZlY3RvcjxXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246Okhh
bmRsZT4gc2FuZGJveEV4dGVuc2lvbkhhbmRsZXM7CiAgICAgICAgIGZvciAoYXV0byYgZWxlbWVu
dCA6IG1fZGF0YS0+ZWxlbWVudHMoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8qIGZpbGVEYXRh
ID0gV1RGOjpnZXRfaWY8V2ViQ29yZTo6Rm9ybURhdGFFbGVtZW50OjpFbmNvZGVkRmlsZURhdGE+
KGVsZW1lbnQuZGF0YSkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBmaWxlRGF0YSA9IHN0ZDo6
Z2V0X2lmPFdlYkNvcmU6OkZvcm1EYXRhRWxlbWVudDo6RW5jb2RlZEZpbGVEYXRhPigmZWxlbWVu
dC5kYXRhKSkgewogICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcGF0aCA9IGZpbGVEYXRh
LT5maWxlbmFtZTsKICAgICAgICAgICAgICAgICBpZiAoYXV0byBoYW5kbGUgPSBXZWJLaXQ6OlNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXRoLCBXZWJLaXQ6OlNhbmRib3hFeHRlbnNp
b246OlR5cGU6OlJlYWRPbmx5KSkKICAgICAgICAgICAgICAgICAgICAgc2FuZGJveEV4dGVuc2lv
bkhhbmRsZXMuYXBwZW5kKFdURk1vdmUoKmhhbmRsZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvTWVzc2FnZVJlY2VpdmVRdWV1ZU1hcC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL0lQQy9NZXNzYWdlUmVjZWl2ZVF1ZXVlTWFwLmNwcAppbmRleCA0NmZlMGU4
MDQ1MzlkZmZmMTU1ZmRjYWY0MGUzYTA4YjA1MDliMmJhLi5lZGY1NjJmMjM3NGQ2ZmFlMTU1YzQw
NGVhNzkwYTRkNjgyYTVlZDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQ
Qy9NZXNzYWdlUmVjZWl2ZVF1ZXVlTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9NZXNzYWdlUmVjZWl2ZVF1ZXVlTWFwLmNwcApAQCAtNTUsNyArNTUsNyBAQCBNZXNzYWdl
UmVjZWl2ZVF1ZXVlKiBNZXNzYWdlUmVjZWl2ZVF1ZXVlTWFwOjpnZXQoY29uc3QgRGVjb2RlciYg
bWVzc2FnZSkgY29uc3QKICAgICB9CiAgICAgaWYgKGl0ID09IG1fcXVldWVzLmVuZCgpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gV1RGOjp2aXNpdCgKKyAgICByZXR1cm4g
c3RkOjp2aXNpdCgKICAgICAgICAgV1RGOjptYWtlVmlzaXRvcigKICAgICAgICAgICAgIFtdKGNv
bnN0IHN0ZDo6dW5pcXVlX3B0cjxNZXNzYWdlUmVjZWl2ZVF1ZXVlPiYgcXVldWUpIHsgcmV0dXJu
IHF1ZXVlLmdldCgpOyB9LAogICAgICAgICAgICAgW10oTWVzc2FnZVJlY2VpdmVRdWV1ZSogcXVl
dWUpIHsgcmV0dXJuIHF1ZXVlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9t
YWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVDdXJzb3IuY3BwIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQ3Vyc29yLmNwcAppbmRl
eCA5NjJlMjExZTFiZjJjMTE4MjhiYmQ3ZTA3NDgyNjkwOWQwYzAzMzgwLi4zNGNhYzA5NTFlM2Rh
ZDY3YzQ2ZDQ5MzM3MDM1MWMwODNmYzY2YjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVDdXJzb3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUN1cnNv
ci5jcHAKQEAgLTE1MywxMyArMTUzLDExIEBAIHN0ZDo6b3B0aW9uYWw8dHlwZW5hbWUgT3JkZXJl
ZE1hcDo6aXRlcmF0b3I+IE1lZGlhU2FtcGxlQ3Vyc29yOjpsb2NhdGVJdGVyYXRvcihPCiAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAg
ICAgICAgIHJldHVybiBsb2NhdGVJdGVyYXRvcihzYW1wbGVzLCBoYXNBbGxTYW1wbGVzKTsKLSAg
ICAgICAgfSwKLSAgICAgICAgWyZdKGNvbnN0IGF1dG8mIG90aGVySXRlcmF0b3IpIHsKKyAgICAg
ICAgfSwgWyZdKGNvbnN0IGF1dG8mIG90aGVySXRlcmF0b3IpIC0+IHN0ZDo6b3B0aW9uYWw8SXRl
cmF0b3I+IHsKICAgICAgICAgICAgIGFzc2VydElzSGVsZChtX2xvY2F0b3JMb2NrKTsKICAgICAg
ICAgICAgIG1fbG9jYXRvciA9IG90aGVySXRlcmF0b3ItPnNlY29uZC0+cHJlc2VudGF0aW9uVGlt
ZSgpOwogICAgICAgICAgICAgcmV0dXJuIGxvY2F0ZUl0ZXJhdG9yKHNhbXBsZXMsIGhhc0FsbFNh
bXBsZXMpOwotICAgICAgICB9LAotICAgICAgICBbJl0oY29uc3QgSXRlcmF0b3ImIGl0ZXJhdG9y
KSB7CisgICAgICAgIH0sIFsmXShjb25zdCBJdGVyYXRvciYgaXRlcmF0b3IpIC0+IHN0ZDo6b3B0
aW9uYWw8SXRlcmF0b3I+IHsKICAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcjsKICAgICAgICAg
fQogICAgICk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2Vi
QXV0aGVudGljYXRpb25QYW5lbC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdl
YkF1dGhlbnRpY2F0aW9uUGFuZWwuaAppbmRleCAwYjBlMjFlZWE4NmRlYjRkZjBiMmNhMDRmNTQy
M2EyMmNlYjczNGU1Li44MmMxYmY4OTQxY2Q3YWJhNjU1ODNiMTNkZjNkNWEzNWM2ZWMyYWZiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRp
b25QYW5lbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRoZW50
aWNhdGlvblBhbmVsLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJBUElPYmplY3QuaCIK
ICNpbmNsdWRlIDxXZWJDb3JlL0F1dGhlbnRpY2F0b3JUcmFuc3BvcnQuaD4KICNpbmNsdWRlIDx3
dGYvVW5pcXVlUmVmLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KICNpbmNsdWRlIDx3dGYv
V2Vha1B0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1NpbXVsYXRlZElucHV0RGlzcGF0
Y2hlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9TaW11bGF0ZWRJbnB1
dERpc3BhdGNoZXIuaAppbmRleCA4MDZiMjU0ZTMwNzBiZTg0NGExYjIzOTEyNDFkZTY3NWM5NGNh
ODRkLi4zYWEyNWZkMDY3OTc4MTYyMmYxMDY2NWM3NDdiY2Q3YzVmM2QxYjhkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1NpbXVsYXRlZElucHV0RGlzcGF0
Y2hlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vU2ltdWxhdGVk
SW5wdXREaXNwYXRjaGVyLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDx3dGYvTGlzdEhh
c2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogI2luY2x1ZGUgPHd0Zi9TZWNvbmRz
Lmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1dLU2FmZUJyb3dzaW5nV2FybmluZy5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvV0tTYWZlQnJvd3NpbmdXYXJuaW5nLmgKaW5kZXggNjFiZTM3MTdi
ODA2NDZhNmZhMzAxYjIyMzU0YWY3ODlhMjU0YTVlMC4uNDMxODljMGEzYTFlOTU5NzgwY2FiMTJh
ZTI2YzhiNzdlZDUzNzA3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvV0tTYWZlQnJvd3NpbmdXYXJuaW5nLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV0tTYWZlQnJvd3NpbmdXYXJuaW5nLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbXBvcnQg
PHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgogI2ltcG9y
dCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL1ZhcmlhbnQuaD4KICNpbXBvcnQgPHd0
Zi9XZWFrT2JqQ1B0ci5oPgogCiAjaWYgUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVy
UHJveHkuaAppbmRleCAyN2JjZDAwNTQ1MDk1OGU4MDIxMjMzMGMxZTg5NmUzYzg5MTczNGZiLi5l
YWE2MzBhNDFmMjMxN2MyNjY3NmRhYmQzNmUzM2YzYTlkNzVhMzIxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHku
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdl
QnVmZmVyUHJveHkuaApAQCAtMzM5LDcgKzMzOSw3IEBAIHByb3RlY3RlZDoKIAogICAgIFJlZlB0
cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGVuY29kZUl0ZW1PdXRPZkxpbmUoY29uc3QgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0SXRlbSYgaXRlbSkgY29uc3QgZmluYWwKICAgICB7
Ci0gICAgICAgIHJldHVybiBXVEY6OnZpc2l0KFtdKGNvbnN0IGF1dG8mIGRpc3BsYXlMaXN0SXRl
bSkgLT4gUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4geworICAgICAgICByZXR1cm4gc3Rk
Ojp2aXNpdChbXShjb25zdCBhdXRvJiBkaXNwbGF5TGlzdEl0ZW0pIC0+IFJlZlB0cjxXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI+IHsKICAgICAgICAgICAgIHVzaW5nIERpc3BsYXlMaXN0SXRlbVR5cGUg
PSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKGRpc3BsYXlMaXN0
SXRlbSk+Ojp0eXBlOwogICAgICAgICAgICAgaWYgY29uc3RleHByICghRGlzcGxheUxpc3RJdGVt
VHlwZTo6aXNJbmxpbmVJdGVtKQogICAgICAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6
OmVuY29kZVNpbmdsZU9iamVjdDxEaXNwbGF5TGlzdEl0ZW1UeXBlPihkaXNwbGF5TGlzdEl0ZW0p
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDFm
YjM2OTc0ODkwYTNiMTYxMDQ4Yzc2ODM3MzM3ODk0OGI2NjZiNTMuLjIwMmYyNzBjNjRmYjA5OWRi
YjQxYTQ5OTFiM2RjZjAzYTZlYzIwYWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysg
Yi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAyMS0xMC0wMSAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEJlZ2luIG1pZ3Jh
dGlvbiBmcm9tIFdURjo6VmFyaWFudCB0byBzdGQ6OnZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTA4NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
VmFyaWFudC5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1ByaXZhdGVDbGlja01lYXN1cmVtZW50Lm1t
OgorICAgICAgICAoYWRkVmFsdWVzVG9UYWJsZSk6CisKIDIwMjEtMTAtMDEgIEpvbmF0aGFuIEJl
ZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFt3ZWJraXRjb3JlcHldIEFkZCBU
YXNrUG9vbCAoRm9sbG93LXVwIGZpeCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL0hhc2hlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNo
ZXIuY3BwCmluZGV4IDU5ZTIyNTYyNGZiM2E1ZmQ2NTJjZDJhMmEyNDlmYTY1MzRkOTYwNDUuLjg2
NDg5Njg1MjU4ZWYxYzk4ZGM5MGIyNjU0NGM0ZjRlY2VkZWM0ODcgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hlci5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvSGFzaGVyLmNwcApAQCAtMjAwLDcgKzIwMCw3IEBAIHN0cnVjdCBIYXNo
ZXJBZGRDdXN0b20yIHsgfTsKIAogdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IEhhc2hl
ckFkZEN1c3RvbTImKQogewotICAgIGFkZChoYXNoZXIsIHsgMSwgMiwgMywgNCB9KTsKKyAgICBh
ZGQoaGFzaGVyLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8aW50PiB7IDEsIDIsIDMsIDQgfSk7CiB9
CiAKIFRFU1QoV1RGLCBIYXNoZXJfY3VzdG9tKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9WYXJpYW50LmNwcAppbmRleCA1MWVjYTA3NjhkMmNjZTFjOWEzMjk1NTUyZDM1MDA5ZmY0ZmQ1
NmJiLi5lNDg1ZDQzMDdhZWZkMDZkOWZkZmJhMzg2NGU5MzIyNDM5YjMxNmM1IDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WYXJpYW50LmNwcAorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WYXJpYW50LmNwcApAQCAtNTQsMTggKzU0LDE4IEBAIFRF
U1QoV1RGX1ZhcmlhbnQsIEluaXRpYWwpCiBURVNUKFdURl9WYXJpYW50LCBCYXNpYykKIHsKICAg
ICBWYXJpYW50PGludCwgZG91YmxlPiB2YXJpYW50ID0gMTsKLSAgICBFWFBFQ1RfVFJVRSh2YXJp
YW50LmluZGV4KCkgPT0gMCk7Ci0gICAgRVhQRUNUX1RSVUUoV1RGOjpnZXQ8aW50Pih2YXJpYW50
KSA9PSAxKTsKLSAgICBFWFBFQ1RfVFJVRSgqV1RGOjpnZXRfaWY8aW50Pih2YXJpYW50KSA9PSAx
KTsKLSAgICBFWFBFQ1RfVFJVRShXVEY6OmdldF9pZjxkb3VibGU+KHZhcmlhbnQpID09IG51bGxw
dHIpOworICAgIEVYUEVDVF9FUSh2YXJpYW50LmluZGV4KCksIDB1KTsKKyAgICBFWFBFQ1RfRVEo
V1RGOjpnZXQ8aW50Pih2YXJpYW50KSwgMSk7CisgICAgRVhQRUNUX0VRKCpzdGQ6OmdldF9pZjxp
bnQ+KCZ2YXJpYW50KSwgMSk7CisgICAgRVhQRUNUX0VRKHN0ZDo6Z2V0X2lmPGRvdWJsZT4oJnZh
cmlhbnQpLCBudWxscHRyKTsKICAgICBFWFBFQ1RfVFJVRShXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PGludD4odmFyaWFudCkpOwogICAgIEVYUEVDVF9GQUxTRShXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PGRvdWJsZT4odmFyaWFudCkpOwogCiAgICAgdmFyaWFudCA9IDEuMDsKLSAgICBFWFBFQ1RfVFJV
RSh2YXJpYW50LmluZGV4KCkgPT0gMSk7Ci0gICAgRVhQRUNUX1RSVUUoV1RGOjpnZXQ8ZG91Ymxl
Pih2YXJpYW50KSA9PSAxKTsKLSAgICBFWFBFQ1RfVFJVRSgqV1RGOjpnZXRfaWY8ZG91YmxlPih2
YXJpYW50KSA9PSAxLjApOwotICAgIEVYUEVDVF9UUlVFKFdURjo6Z2V0X2lmPGludD4odmFyaWFu
dCkgPT0gbnVsbHB0cik7CisgICAgRVhQRUNUX0VRKHZhcmlhbnQuaW5kZXgoKSwgMXUpOworICAg
IEVYUEVDVF9FUShXVEY6OmdldDxkb3VibGU+KHZhcmlhbnQpLCAxKTsKKyAgICBFWFBFQ1RfRVEo
KnN0ZDo6Z2V0X2lmPGRvdWJsZT4oJnZhcmlhbnQpLCAxLjApOworICAgIEVYUEVDVF9FUShzdGQ6
OmdldF9pZjxpbnQ+KCZ2YXJpYW50KSwgbnVsbHB0cik7CiAgICAgRVhQRUNUX1RSVUUoV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxkb3VibGU+KHZhcmlhbnQpKTsKICAgICBFWFBFQ1RfRkFMU0UoV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxpbnQ+KHZhcmlhbnQpKTsKIH0KQEAgLTk1LDE3ICs5NSwxNyBA
QCBURVNUKFdURl9WYXJpYW50LCBCYXNpY1Zpc2l0b3IpCiAgICAgVHlwZSB0eXBlID0gVHlwZTo6
Tm9uZTsKIAogICAgIFZhcmlhbnQ8aW50LCBmbG9hdCwgU3RyaW5nPiB2YXJpYW50ID0gODsKLSAg
ICBXVEY6OnZpc2l0KFZpc2l0b3IodHlwZSksIHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQoVmlz
aXRvcih0eXBlKSwgdmFyaWFudCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6SW50ID09IHR5cGUp
OwogCiAKICAgICB2YXJpYW50ID0gMS4wZjsKLSAgICBXVEY6OnZpc2l0KFZpc2l0b3IodHlwZSks
IHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFudCk7CiAgICAg
RVhQRUNUX1RSVUUoVHlwZTo6RmxvYXQgPT0gdHlwZSk7CiAKIAogICAgIHZhcmlhbnQgPSAiaGVs
bG8iOwotICAgIFdURjo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFudCk7CisgICAgc3RkOjp2
aXNpdChWaXNpdG9yKHR5cGUpLCB2YXJpYW50KTsKICAgICBFWFBFQ1RfVFJVRShUeXBlOjpTdHJp
bmcgPT0gdHlwZSk7CiB9CiAKQEAgLTEyOCwxMSArMTI4LDExIEBAIFRFU1QoV1RGX1ZhcmlhbnQs
IFJldGFpblB0cikKICAgICBSZWZQdHI8UmVmTG9nZ2VyPiByZWZQdHI7CiAgICAgUmV0YWluUHRy
PENGRGF0YVJlZj4gcmV0YWluUHRyOwogICAgIFZhcmlhbnQ8UmVmUHRyPFJlZkxvZ2dlcj4sIFJl
dGFpblB0cjxDRkRhdGFSZWY+PiB2YXJpYW50KFdURk1vdmUocmVmUHRyKSk7Ci0gICAgV1RGOjp2
aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQp
OwogICAgIEVYUEVDVF9UUlVFKFR5cGU6OlJlZlB0ciA9PSB0eXBlKTsKICAgICAKICAgICB2YXJp
YW50ID0gV1RGTW92ZShyZXRhaW5QdHIpOwotICAgIFdURjo6dmlzaXQodmlzaXRvciwgdmFyaWFu
dCk7CisgICAgc3RkOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKICAgICBFWFBFQ1RfVFJVRShU
eXBlOjpSZXRhaW5QdHIgPT0gdHlwZSk7CiB9CiAjZW5kaWYKQEAgLTE1NSwxNyArMTU1LDE3IEBA
IFRFU1QoV1RGX1ZhcmlhbnQsIFZpc2l0b3JVc2luZ01ha2VWaXNpdG9yKQogICAgICk7CiAKICAg
ICBWYXJpYW50PGludCwgZmxvYXQsIFN0cmluZz4gdmFyaWFudCA9IDg7Ci0gICAgV1RGOjp2aXNp
dCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwog
ICAgIEVYUEVDVF9UUlVFKFR5cGU6OkludCA9PSB0eXBlKTsKIAogCiAgICAgdmFyaWFudCA9IDEu
MGY7Ci0gICAgV1RGOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0KHZp
c2l0b3IsIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6OkZsb2F0ID09IHR5cGUpOwog
CiAKICAgICB2YXJpYW50ID0gImhlbGxvIjsKLSAgICBXVEY6OnZpc2l0KHZpc2l0b3IsIHZhcmlh
bnQpOworICAgIHN0ZDo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CiAgICAgRVhQRUNUX1RSVUUo
VHlwZTo6U3RyaW5nID09IHR5cGUpOwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1ByaXZhdGVDbGlja01lYXN1cmVtZW50Lm1tIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC5t
bQppbmRleCA3ZmJiZjIyZDg2YWI0NDU3OWYxNWU3Nzg2N2Q2Yzk0ZTJmMDlmMTgxLi5iNDcwZGY3
NDkxMDZjYjBlYTIwMTYwNDUxODhlMjhiODI5YTM2Njg3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1ByaXZhdGVDbGlja01lYXN1cmVtZW50Lm1tCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQubW0KQEAgLTY0LDcgKzY0LDcgQEAgdm9pZCBhZGRWYWx1ZXNUb1RhYmxlKFdlYkNv
cmU6OlNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSwgQVNDSUlMaXRlcmFsIHF1ZXJ5LCBzdGQKICAg
ICAgICAgfSwgWyZdIChkb3VibGUgcmVhbCkgewogICAgICAgICAgICAgcmV0dXJuIHN0YXRlbWVu
dC0+YmluZERvdWJsZShpICsgMSwgcmVhbCk7CiAgICAgICAgIH0pOwotICAgICAgICBhdXRvIHJl
c3VsdCA9IFdURjo6dmlzaXQodmlzaXRvciwgdmFsdWVzW2ldKTsKKyAgICAgICAgYXV0byByZXN1
bHQgPSBzdGQ6OnZpc2l0KHZpc2l0b3IsIHZhbHVlc1tpXSk7CiAgICAgICAgIEVYUEVDVF9FUShy
ZXN1bHQsIFNRTElURV9PSyk7CiAgICAgfQogICAgIEVYUEVDVF9FUShzdGF0ZW1lbnQtPnN0ZXAo
KSwgU1FMSVRFX0RPTkUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440020</attachid>
            <date>2021-10-03 14:54:33 -0700</date>
            <delta_ts>2021-10-03 17:15:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231086-20211004065432.patch</filename>
            <type>text/plain</type>
            <size>168309</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNDc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
MmFkMDlhZjNiODMwM2Y5NmExYjhkY2QzZjI3MThkZDQzM2ViYzBhLi44YmE0NzZlY2E3OWI4ZTMx
YmE2NzVhMDgwMDczOTdmM2ZiYmM0MDY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOCBAQAorMjAyMS0xMC0wMyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3
ZWJraXQub3JnPgorCisgICAgICAgIEJlZ2luIG1pZ3JhdGlvbiBmcm9tIFdURjo6VmFyaWFudCB0
byBzdGQ6OnZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzMTA4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHA6Cisg
ICAgICAgIChKU0M6OldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hwb2lu
dCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNhbGxET00pOgorICAgICAgICAqIHBhcnNlci9M
ZXhlci5jcHA6CisgICAgICAgIChKU0M6OkxleGVyPFQ+OjpwYXJzZUhleCk6CisgICAgICAgIChK
U0M6OkxleGVyPFQ+OjpwYXJzZUJpbmFyeSk6CisgICAgICAgIChKU0M6OkxleGVyPFQ+OjpwYXJz
ZU9jdGFsKToKKyAgICAgICAgKEpTQzo6TGV4ZXI8VD46OnBhcnNlRGVjaW1hbCk6CisgICAgICAg
ICogcnVudGltZS9DYWNoZVBheWxvYWQuY3BwOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6
OmRhdGEgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6OnNpemUgY29uc3QpOgor
ICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVVcGRhdGUuY3BwOgorICAgICAgICAoSlNDOjpDYWNoZVVw
ZGF0ZTo6Q2FjaGVVcGRhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxUaW1lWm9uZS5j
cHA6CisgICAgICAgIChKU0M6OlRlbXBvcmFsVGltZVpvbmU6OmNyZWF0ZUZyb21JRCk6CisgICAg
ICAgIChKU0M6OlRlbXBvcmFsVGltZVpvbmU6OmNyZWF0ZUZyb21VVENPZmZzZXQpOgorCiAyMDIx
LTEwLTAyICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pT
Q10gRGF0ZVRpbWVGb3JtYXQucmVzb2x2ZWRPcHRpb25zIHNob3VsZG4ndCByZXR1cm4gYW4gb2Jq
ZWN0IHdpdGggb3RoZXIgZGF0ZS90aW1lIHByb3BlcnRpZXMgaWYgZGF0ZVN0eWxlIG9yIHRpbWVT
dHlsZSBhcmUgc2V0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9X
VEYvQ2hhbmdlTG9nCmluZGV4IDlmMGNlOGI3ODFkYzQ4NGJiMzc3NThiNzM0MzUzZDI2NzE3OTA4
OTUuLjdiMWJmZDlmNzY2M2UwY2QzZTlhNjgxNDRkOWY2NGZiMTAwZmNlYzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNTQgQEAKKzIwMjEtMTAtMDMgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Vi
a2l0Lm9yZz4KKworICAgICAgICBCZWdpbiBtaWdyYXRpb24gZnJvbSBXVEY6OlZhcmlhbnQgdG8g
c3RkOjp2YXJpYW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzEwODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIHd0Zi9Gb3J3YXJkLmg6CisgICAgICAgICogd3RmL0hhc2hlci5oOgorICAgICAgICAo
V1RGOjphZGQpOgorICAgICAgICAqIHd0Zi9MaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5o
OgorICAgICAgICAoV1RGOjpMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldDo6aXRlcmF0b3I6
Om9wZXJhdG9yKiBjb25zdCk6CisgICAgICAgICogd3RmL1ZhcmlhbnQuaDoKKyAgICAgICAgKFdU
Rjo6Z2V0KToKKyAgICAgICAgKFdURjo6c3dpdGNoT24pOgorICAgICAgICAoV1RGOjppbl9wbGFj
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6PSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fdmFy
aWFudF9zdG9yYWdlOjpfX2dldCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fdmFyaWFudF9z
dG9yYWdlOjpfX2dldF9ycmVmKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X192YXJpYW50X3N0
b3JhZ2U6Ol9fZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fc3RvcmFnZV93cmFw
cGVyOjpfX2NvbnN0cnVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fc3RvcmFnZV93cmFw
cGVyOjpfX3N0b3JhZ2Vfd3JhcHBlcik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fc3RvcmFn
ZV93cmFwcGVyOjpfX2dldCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fc3RvcmFnZV93cmFw
cGVyOjpfX2dldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fc3RvcmFnZV93cmFw
cGVyOjpfX2Rlc3Ryb3kpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBl
cjxfVHlwZTo6X19zdG9yYWdlX3dyYXBwZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0
b3JhZ2Vfd3JhcHBlcjxfVHlwZTo6X19nZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0
b3JhZ2Vfd3JhcHBlcjxfVHlwZTo6X19nZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpfX3ZhcmlhbnRfYmFzZTo6fl9fdmFyaWFudF9iYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6X19iYWNrdXBfc3RvcmFnZV9vcHM6Ol9fbW92ZV9jb25zdHJ1Y3RfZnVuYyk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6Ol9fYmFja3VwX3N0b3JhZ2Vfb3BzOjpfX2Rlc3Ryb3lfZnVuYyk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6Ol9fYmFja3VwX3N0b3JhZ2U6Ol9fYmFja3VwX3N0b3JhZ2Up
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX2JhY2t1cF9zdG9yYWdlOjpfX2Rlc3Ryb3kpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpfX2JhY2t1cF9zdG9yYWdlOjp+X19iYWNrdXBfc3RvcmFn
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlZhcmlhbnQ8Pjo6c3dhcCk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Ol9fTk9FWENFUFRfKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X192YXJp
YW50X2FjY2Vzc29yOjpnZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpnZXRfaWYpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpfX3Zpc2l0b3JfdGFibGU6Ol9fdHJhbXBvbGluZV9mdW5jKTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6dmlzaXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpf
X2FyZ19zZWxlY3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fdmlzaXRfaGVscGVyMjo6
X192aXNpdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpvcGVyYXRvciE9KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6b3BlcmF0
b3I8KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6b3BlcmF0b3I+KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6b3BlcmF0b3I+PSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Om9wZXJhdG9yPD0p
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX2hhc2hfdmlzaXRvcjo6b3BlcmF0b3IoKSk6IERl
bGV0ZWQuCisKIDIwMjEtMTAtMDMgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4K
IAogICAgICAgICBXVEY6OlJldGFpblB0cjw+IGFsbG93cyBhc3NpZ25tZW50IG9mIHR3byBwb2lu
dGVyIHR5cGVzIHRoYXQgYXJlIG5vdCBhc3NpZ25hYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTNiZDk3Nzc0
OTYwZjNhZDcwYTRhNDJlZjMwNjhlNzhmNmMzZDgzYi4uODc1ZTkzNGU0ZDZlZjRhYmRmODYyOTk4
ZmNkNmY5ZjZiM2FkYjFhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMyBAQAorMjAyMS0xMC0w
MyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAg
IEJlZ2luIG1pZ3JhdGlvbiBmcm9tIFdURjo6VmFyaWFudCB0byBzdGQ6OnZhcmlhbnQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTA4NgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTW9kdWxlcy9jYWNo
ZS9ET01DYWNoZUVuZ2luZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6
aXNvbGF0ZWRSZXNwb25zZUJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6
OmNvcHlSZXNwb25zZUJvZHkpOgorICAgICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5T3du
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5T3duZXI6OmxvYWRpbmdFeGNlcHRp
b24gY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6aXNJREJLZXlQYXRoVmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6
aXNvbGF0ZWRDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OmxvZ2dpbmdTdHJpbmcpOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCUmVxdWVzdDo6c291cmNlT2JqZWN0U3RvcmVJZGVudGlmaWVyIGNvbnN0KToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpzZXJpYWxpemVJREJLZXlQYXRoKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlh
Y29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFD
b250cm9sc0hvc3Q6OmRpc3BsYXlOYW1lRm9yVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFDb250cm9sc0hvc3Q6OnNob3dNZWRpYUNvbnRyb2xzQ29udGV4dE1lbnUpOgorICAgICAgICAq
IE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UlRDUGVlckNvbm5lY3Rpb246OmFkZEljZUNhbmRpZGF0ZSk6CisgICAgICAgICogTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENSdHBUcmFuc2Zvcm0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UlRDUnRwVHJhbnNmb3JtOjppc0F0dGFjaGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9w
ZXJhdG9yPT0pOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldl
YlJUQ1J0cFNlbmRlckJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGliV2ViUlRDUnRw
U2VuZGVyQmFja2VuZDo6dmlkZW9Tb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGliV2ViUlRD
UnRwU2VuZGVyQmFja2VuZDo6aGFzU291cmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9w
ZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvd2VieHIvV2ViWFJGcmFtZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJYUkZyYW1lOjpnZXRWaWV3ZXJQb3NlKToKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6OmludFBvaW50QXR0cmlidXRlVmFsdWUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZE9iamVjdDo6b2JqZWN0QXR0cmli
dXRlVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZE9iamVjdDo6cmVj
dEF0dHJpYnV0ZVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmpl
Y3Q6OnZlY3RvckF0dHJpYnV0ZVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNv
bGF0ZWRPYmplY3Q6Om9wdGlvblNldEF0dHJpYnV0ZVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6OnBhaXJBdHRyaWJ1dGVWYWx1ZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpBWElzb2xhdGVkT2JqZWN0Ojp1aW50NjRBdHRyaWJ1dGVWYWx1ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkT2JqZWN0Ojp1cmxBdHRyaWJ1dGVWYWx1
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkT2JqZWN0OjpwYXRoQXR0cmli
dXRlVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZE9iamVjdDo6Y29s
b3JBdHRyaWJ1dGVWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkT2Jq
ZWN0OjpmbG9hdEF0dHJpYnV0ZVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNv
bGF0ZWRPYmplY3Q6OmRvdWJsZUF0dHJpYnV0ZVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFYSXNvbGF0ZWRPYmplY3Q6OnVuc2lnbmVkQXR0cmlidXRlVmFsdWUgY29uc3QpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5oOgorICAgICAgICAoV2ViQ29yZTo6QnVm
ZmVyU291cmNlOjpkYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJ1ZmZlclNvdXJjZTo6
bGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUtleVBhdGhBcnJheSk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNET01Db252ZXJ0VW5pb24uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0RPTUNvbnZlcnRXZWJHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9KU1ZhbHVl
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudEN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6bWV0
aG9kRGV0YWlscyBjb25zdCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBl
ZE9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6SlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6b3Bl
cmF0b3IgSlNDOjpKU1ZhbHVlIGNvbnN0KToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3Bl
cnR5UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN1bWVGb250V2VpZ2h0KToKKyAg
ICAgICAgKiBjc3MvdHlwZWRvbS9DU1NVbnBhcnNlZFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1VucGFyc2VkVmFsdWU6OnNlcmlhbGl6ZSBjb25zdCk6CisgICAgICAgICogZG9tL0V2
ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjphZGRFdmVudExp
c3RlbmVyRm9yQmluZGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXQ6OnJlbW92
ZUV2ZW50TGlzdGVuZXJGb3JCaW5kaW5ncyk6CisgICAgICAgICogZG9tL01lc3NhZ2VFdmVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlRXZlbnQ6Om1lbW9yeUNvc3QgY29uc3QpOgor
ICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKToKKyAgICAgICAgKiBlZGl0aW5nL1RleHRNYW5pcHVs
YXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyOjpFeGNsdXNpb25SdWxlOjptYXRjaCBjb25zdCk6CisgICAgICAgICogaHRtbC9V
UkxTZWFyY2hQYXJhbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VVJMU2VhcmNoUGFyYW1zOjpj
cmVhdGUpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVy
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZm
ZXJTdWJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmdldFRleEltYWdlU291cmNlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp0ZXhJbWFnZVNvdXJjZUhlbHBlcik6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckNhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXM6
OmNhbnZhc0NvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFz
OjpjYW52YXNFbGVtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZh
czo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDYW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNhbnZhczo6aW5kZXhGb3JEYXRhKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yU2hhZGVyUHJvZ3JhbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTaGFkZXJQ
cm9ncmFtOjpwcm9ncmFtIGNvbnN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckluZGV4ZWREQkFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcjo6a2V5
UGF0aEZyb21JREJLZXlQYXRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudDo6ZGF0YSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXplIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZUNGRGF0YSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmhpbnRNZW1vcnlOb3ROZWVkZWRTb29uIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9nZW5lcmljL0tleWVkRGVjb2RlckdlbmVyaWMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6S2V5ZWREZWNvZGVyR2VuZXJpYzo6RGljdGlvbmFyeTo6YWRkKToKKyAgICAg
ICAgKFdlYkNvcmU6OktleWVkRGVjb2RlckdlbmVyaWM6OmdldFBvaW50ZXJGcm9tRGljdGlvbmFy
eVN0YWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnJlYWxpemVOZXh0RmFsbGJhY2spOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OnNhZmVDb3B5KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6cGFkZGVkU2l6ZU9mVHlwZUFuZEl0ZW1JbkJ5dGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpkaXNwbGF5TGlzdEl0ZW1UeXBlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tNZWRpYURldmljZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6TW9ja01lZGlhRGV2aWNlOjplbmNvZGUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvRm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmltYWdl
T3JNZWRpYUZpbGVzQ291bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFFbGVt
ZW50OjpsZW5ndGhJbkJ5dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhRWxl
bWVudDo6aXNvbGF0ZWRDb3B5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjph
cHBlbmREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpmbGF0dGVuIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpwcmVwYXJlRm9yVXBsb2FkKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1EYXRhOjphc0Jsb2JVUkwgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvRm9ybURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhRWxlbWVudDo6
b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9Gb3JtRGF0
YVN0cmVhbUNGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkdmFuY2VDdXJyZW50U3RyZWFt
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEhUVFBCb2R5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRs
ZTo6ZW5hYmxlU1NMRm9ySG9zdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1
cmxGb3JtRGF0YVN0cmVhbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXJsRm9ybURhdGFTdHJl
YW06OnJlYWQpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZp
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFNTTFZlcmlmaWVyOjpDdXJsU1NMVmVyaWZp
ZXIpOgorICAgICAgICAqIHN0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGU6OnJlc29sdmVGb3JGb250UmF3KToKKwogMjAyMS0xMC0wMyAgQWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSUZDXSBMaW5lIGZ1
bmN0aW9ucyBjYW4gY29tcHV0ZSB0aGUgImV4dHJhIGhvcml6b250YWwgc3BhY2UiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IGQxMzBjYjlmZjBhYTY1MWJkMzA4ZjA5Yzc4ZjQ1ZWI3Yzk1MDZiMmEuLmUxMGVmNGYzZWVm
NWFkMzgzNDNlMmIxYmVkMTAzZmYyYTMzZTJkYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAK
KzIwMjEtMTAtMDMgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4K
KworICAgICAgICBCZWdpbiBtaWdyYXRpb24gZnJvbSBXVEY6OlZhcmlhbnQgdG8gc3RkOjp2YXJp
YW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEw
ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlc29sdmVCbG9iUmVmZXJl
bmNlcyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFt
ZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVy
czo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMu
aDoKKyAgICAgICAgKElQQzo6VmFyaWFudENvZGVyOjplbmNvZGUpOgorICAgICAgICAoSVBDOjpW
YXJpYW50Q29kZXI6OmRlY29kZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0Zvcm1EYXRhUmVm
ZXJlbmNlLmg6CisgICAgICAgIChJUEM6OkZvcm1EYXRhUmVmZXJlbmNlOjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9NZXNzYWdlUmVjZWl2ZVF1ZXVlTWFwLmNwcDoKKyAg
ICAgICAgKElQQzo6TWVzc2FnZVJlY2VpdmVRdWV1ZU1hcDo6Z2V0IGNvbnN0KToKKyAgICAgICAg
KiBTaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQ3Vyc29yLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6TWVkaWFTYW1wbGVDdXJzb3I6OmxvY2F0ZUl0ZXJhdG9yIGNvbnN0KToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9TaW11bGF0ZWRJbnB1dERpc3BhdGNoZXIuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV0tTYWZlQnJvd3NpbmdXYXJuaW5nLmg6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOgor
CiAyMDIxLTEwLTAzICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAg
ICAgV1RGOjpSZXRhaW5QdHI8PiBhbGxvd3MgYXNzaWdubWVudCBvZiB0d28gcG9pbnRlciB0eXBl
cyB0aGF0IGFyZSBub3QgYXNzaWduYWJsZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQu
Y3BwCmluZGV4IDQ2Nzg0NmM4NTQ0ODA5YzAxYzQ4Njg1MzgyOWE5YjA3ZThjNTE0ZDQuLmJhYTFj
MGVhYWQyZjEzYmNhYWM5MTc2M2ZkZjk0M2I4MjgzMzVmYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFy
aW5nV2F0Y2hwb2ludC5jcHAKQEAgLTY1LDkgKzY1LDkgQEAgaW5saW5lIGJvb2wgV2F0Y2hwb2lu
dHNPblN0cnVjdHVyZVN0dWJJbmZvOjppc1ZhbGlkKCkgY29uc3QKIFdhdGNocG9pbnRzT25TdHJ1
Y3R1cmVTdHViSW5mbzo6Tm9kZSYgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjphZGRX
YXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCiB7CiAgICAgaWYg
KCFrZXkgfHwga2V5LmNvbmRpdGlvbigpLmtpbmQoKSAhPSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1
aXZhbGVuY2UpCi0gICAgICAgIHJldHVybiAqbV93YXRjaHBvaW50cy5hZGQoV1RGOjppbl9wbGFj
ZTxTdHJ1Y3R1cmVUcmFuc2l0aW9uU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4sIGtl
eSwgKnRoaXMpOworICAgICAgICByZXR1cm4gKm1fd2F0Y2hwb2ludHMuYWRkKHN0ZDo6aW5fcGxh
Y2VfdHlwZTxTdHJ1Y3R1cmVUcmFuc2l0aW9uU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dD4sIGtleSwgKnRoaXMpOwogICAgIEFTU0VSVChrZXkuY29uZGl0aW9uKCkua2luZCgpID09IFBy
b3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZSk7Ci0gICAgcmV0dXJuICptX3dhdGNocG9pbnRz
LmFkZChXVEY6OmluX3BsYWNlPEFkYXB0aXZlVmFsdWVTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRj
aHBvaW50Piwga2V5LCAqdGhpcyk7CisgICAgcmV0dXJuICptX3dhdGNocG9pbnRzLmFkZChzdGQ6
OmluX3BsYWNlX3R5cGU8QWRhcHRpdmVWYWx1ZVN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnQ+LCBrZXksICp0aGlzKTsKIH0KIAogdm9pZCBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1Yklu
Zm86OmVuc3VyZVJlZmVyZW5jZUFuZEluc3RhbGxXYXRjaHBvaW50KApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAppbmRleCBiNGM4Zjg2MGI1MTRl
NmQ3OWRmMDFhYzdmMjk2ZmMwODFkZTdhMWY2Li5iNWFiMjI3MDM2ZGQ3ZmMyODA2ODBjYWFkOTMw
OWFlOGY3NzQ4NjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcApAQCAtMTA1NDgsMTMgKzEwNTQ4LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVDYWxsRE9NKE5vZGUqIG5vZGUpCiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGhhdmUgYSB3YXkgdG8gY2FsbCBmdW5jdGlvbnMgd2l0aCB0aGUgdmVjdG9yIG9mIHJlZ2lzdGVy
cy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzMDk5
Ci0gICAgVmVjdG9yPFZhcmlhbnQ8U3BlY3VsYXRlQ2VsbE9wZXJhbmQsIFNwZWN1bGF0ZUludDMy
T3BlcmFuZCwgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ+LCBKU0NfRE9NSklUX1NJR05BVFVSRV9N
QVhfQVJHVU1FTlRTX0lOQ0xVRElOR19USElTPiBvcGVyYW5kczsKKyAgICB1c2luZyBPcGVyYW5k
VmFyaWFudCA9IFZhcmlhbnQ8U3BlY3VsYXRlQ2VsbE9wZXJhbmQsIFNwZWN1bGF0ZUludDMyT3Bl
cmFuZCwgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ+OworICAgIFZlY3RvcjxPcGVyYW5kVmFyaWFu
dCwgSlNDX0RPTUpJVF9TSUdOQVRVUkVfTUFYX0FSR1VNRU5UU19JTkNMVURJTkdfVEhJUz4gb3Bl
cmFuZHM7CiAgICAgVmVjdG9yPEdQUlJlZywgSlNDX0RPTUpJVF9TSUdOQVRVUkVfTUFYX0FSR1VN
RU5UU19JTkNMVURJTkdfVEhJUz4gcmVnczsKIAogICAgIGF1dG8gYXBwZW5kQ2VsbCA9IFsmXShF
ZGdlJiBlZGdlKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wZXJhbmQodGhpcywg
ZWRnZSk7CiAgICAgICAgIHJlZ3MuYXBwZW5kKG9wZXJhbmQuZ3ByKCkpOwotICAgICAgICBvcGVy
YW5kcy5hcHBlbmQoV1RGTW92ZShvcGVyYW5kKSk7CisgICAgICAgIG9wZXJhbmRzLmFwcGVuZChP
cGVyYW5kVmFyaWFudChzdGQ6OmluX3BsYWNlX3R5cGU8U3BlY3VsYXRlQ2VsbE9wZXJhbmQ+LCBX
VEZNb3ZlKG9wZXJhbmQpKSk7CiAgICAgfTsKIAogICAgIGF1dG8gYXBwZW5kU3RyaW5nID0gWyZd
KEVkZ2UmIGVkZ2UpIHsKQEAgLTEwNTYyLDE5ICsxMDU2MywxOSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlQ2FsbERPTShOb2RlKiBub2RlKQogICAgICAgICBHUFJSZWcgZ3ByID0gb3Bl
cmFuZC5ncHIoKTsKICAgICAgICAgcmVncy5hcHBlbmQoZ3ByKTsKICAgICAgICAgc3BlY3VsYXRl
U3RyaW5nKGVkZ2UsIGdwcik7Ci0gICAgICAgIG9wZXJhbmRzLmFwcGVuZChXVEZNb3ZlKG9wZXJh
bmQpKTsKKyAgICAgICAgb3BlcmFuZHMuYXBwZW5kKE9wZXJhbmRWYXJpYW50KHN0ZDo6aW5fcGxh
Y2VfdHlwZTxTcGVjdWxhdGVDZWxsT3BlcmFuZD4sIFdURk1vdmUob3BlcmFuZCkpKTsKICAgICB9
OwogCiAgICAgYXV0byBhcHBlbmRJbnQzMiA9IFsmXShFZGdlJiBlZGdlKSB7CiAgICAgICAgIFNw
ZWN1bGF0ZUludDMyT3BlcmFuZCBvcGVyYW5kKHRoaXMsIGVkZ2UpOwogICAgICAgICByZWdzLmFw
cGVuZChvcGVyYW5kLmdwcigpKTsKLSAgICAgICAgb3BlcmFuZHMuYXBwZW5kKFdURk1vdmUob3Bl
cmFuZCkpOworICAgICAgICBvcGVyYW5kcy5hcHBlbmQoT3BlcmFuZFZhcmlhbnQoc3RkOjppbl9w
bGFjZV90eXBlPFNwZWN1bGF0ZUludDMyT3BlcmFuZD4sIFdURk1vdmUob3BlcmFuZCkpKTsKICAg
ICB9OwogCiAgICAgYXV0byBhcHBlbmRCb29sZWFuID0gWyZdKEVkZ2UmIGVkZ2UpIHsKICAgICAg
ICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlKTsKICAgICAgICAg
cmVncy5hcHBlbmQob3BlcmFuZC5ncHIoKSk7Ci0gICAgICAgIG9wZXJhbmRzLmFwcGVuZChXVEZN
b3ZlKG9wZXJhbmQpKTsKKyAgICAgICAgb3BlcmFuZHMuYXBwZW5kKE9wZXJhbmRWYXJpYW50KHN0
ZDo6aW5fcGxhY2VfdHlwZTxTcGVjdWxhdGVCb29sZWFuT3BlcmFuZD4sIFdURk1vdmUob3BlcmFu
ZCkpKTsKICAgICB9OwogCiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL0xleGVyLmNwcAppbmRleCAwZmJlMGJjOGY3YWZmMWRiYTI2NmQyMjg2NjEzZmNl
NzE5Mzk0ZmE5Li4yYThhNjdhZjNmMjJjYjVmYzI1NDI4MjUyZjI2ZmRhMjM5NGY4MzViIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcApAQCAtMTU1MCw3ICsxNTUwLDcgQEAg
QUxXQVlTX0lOTElORSBhdXRvIExleGVyPFQ+OjpwYXJzZUhleCgpIC0+IHN0ZDo6b3B0aW9uYWw8
TnVtYmVyUGFyc2VSZXN1bHQ+CiAgICAgfSB3aGlsZSAoaXNBU0NJSUhleERpZ2l0T3JTZXBhcmF0
b3IobV9jdXJyZW50KSAmJiBtYXhpbXVtRGlnaXRzID49IDApOwogCiAgICAgaWYgKExJS0VMWSht
YXhpbXVtRGlnaXRzID49IDAgJiYgbV9jdXJyZW50ICE9ICduJykpCi0gICAgICAgIHJldHVybiBO
dW1iZXJQYXJzZVJlc3VsdCB7IGhleFZhbHVlIH07CisgICAgICAgIHJldHVybiBOdW1iZXJQYXJz
ZVJlc3VsdCB7IHN0YXRpY19jYXN0PGRvdWJsZT4oaGV4VmFsdWUpIH07CiAKICAgICAvLyBObyBt
b3JlIHBsYWNlIGluIHRoZSBoZXhWYWx1ZSBidWZmZXIuCiAgICAgLy8gVGhlIHZhbHVlcyBhcmUg
c2hpZnRlZCBvdXQgYW5kIHBsYWNlZCBpbnRvIHRoZSBtX2J1ZmZlcjggdmVjdG9yLgpAQCAtMTYw
OSw3ICsxNjA5LDcgQEAgQUxXQVlTX0lOTElORSBhdXRvIExleGVyPFQ+OjpwYXJzZUJpbmFyeSgp
IC0+IHN0ZDo6b3B0aW9uYWw8TnVtYmVyUGFyc2VSZXN1bHQ+CiAgICAgfSB3aGlsZSAoaXNBU0NJ
SUJpbmFyeURpZ2l0T3JTZXBhcmF0b3IobV9jdXJyZW50KSAmJiBkaWdpdCA+PSAwKTsKIAogICAg
IGlmIChMSUtFTFkoIWlzQVNDSUlEaWdpdE9yU2VwYXJhdG9yKG1fY3VycmVudCkgJiYgZGlnaXQg
Pj0gMCAmJiBtX2N1cnJlbnQgIT0gJ24nKSkKLSAgICAgICAgcmV0dXJuIE51bWJlclBhcnNlUmVz
dWx0IHsgYmluYXJ5VmFsdWUgfTsKKyAgICAgICAgcmV0dXJuIE51bWJlclBhcnNlUmVzdWx0IHsg
c3RhdGljX2Nhc3Q8ZG91YmxlPihiaW5hcnlWYWx1ZSkgfTsKIAogICAgIGZvciAoaW50IGkgPSBt
YXhpbXVtRGlnaXRzIC0gMTsgaSA+IGRpZ2l0OyAtLWkpCiAgICAgICAgIHJlY29yZDgoZGlnaXRz
W2ldKTsKQEAgLTE2NjUsNyArMTY2NSw3IEBAIEFMV0FZU19JTkxJTkUgYXV0byBMZXhlcjxUPjo6
cGFyc2VPY3RhbCgpIC0+IHN0ZDo6b3B0aW9uYWw8TnVtYmVyUGFyc2VSZXN1bHQ+CiAgICAgfSB3
aGlsZSAoaXNBU0NJSU9jdGFsRGlnaXRPclNlcGFyYXRvcihtX2N1cnJlbnQpICYmIGRpZ2l0ID49
IDApOwogCiAgICAgaWYgKExJS0VMWSghaXNBU0NJSURpZ2l0T3JTZXBhcmF0b3IobV9jdXJyZW50
KSAmJiBkaWdpdCA+PSAwICYmIG1fY3VycmVudCAhPSAnbicpKQotICAgICAgICByZXR1cm4gTnVt
YmVyUGFyc2VSZXN1bHQgeyBvY3RhbFZhbHVlIH07CisgICAgICAgIHJldHVybiBOdW1iZXJQYXJz
ZVJlc3VsdCB7IHN0YXRpY19jYXN0PGRvdWJsZT4ob2N0YWxWYWx1ZSkgfTsKIAogICAgIGZvciAo
aW50IGkgPSBtYXhpbXVtRGlnaXRzIC0gMTsgaSA+IGRpZ2l0OyAtLWkpCiAgICAgICAgICByZWNv
cmQ4KGRpZ2l0c1tpXSk7CkBAIC0xNzI0LDcgKzE3MjQsNyBAQCBBTFdBWVNfSU5MSU5FIGF1dG8g
TGV4ZXI8VD46OnBhcnNlRGVjaW1hbCgpIC0+IHN0ZDo6b3B0aW9uYWw8TnVtYmVyUGFyc2VSZXN1
bHQ+CiAgICAgICAgIH0gd2hpbGUgKGlzQVNDSUlEaWdpdE9yU2VwYXJhdG9yKG1fY3VycmVudCkg
JiYgZGlnaXQgPj0gMCk7CiAKICAgICAgICAgaWYgKGRpZ2l0ID49IDAgJiYgbV9jdXJyZW50ICE9
ICcuJyAmJiAhaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChtX2N1cnJlbnQsICdlJykgJiYgbV9j
dXJyZW50ICE9ICduJykKLSAgICAgICAgICAgIHJldHVybiBOdW1iZXJQYXJzZVJlc3VsdCB7IGRl
Y2ltYWxWYWx1ZSB9OworICAgICAgICAgICAgcmV0dXJuIE51bWJlclBhcnNlUmVzdWx0IHsgc3Rh
dGljX2Nhc3Q8ZG91YmxlPihkZWNpbWFsVmFsdWUpIH07CiAKICAgICAgICAgZm9yIChpbnQgaSA9
IG1heGltdW1EaWdpdHMgLSAxOyBpID4gZGlnaXQ7IC0taSkKICAgICAgICAgICAgIHJlY29yZDgo
ZGlnaXRzW2ldKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
Y2hlUGF5bG9hZC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZVBheWxv
YWQuY3BwCmluZGV4IDYxNjhmZWU5NjZjYjY1YzU2Y2Q2NjU1NTY2NmNmNTRiZmRiNzI5YmQuLjI3
ZDJiN2I3NDFhN2RmNWZhNjc4OWQ3MmU4MjIxZGY0ODgzYjc1NzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNwcApAQCAtNjEsMjEgKzYxLDIxIEBA
IGNvbnN0IHVpbnQ4X3QqIENhY2hlUGF5bG9hZDo6ZGF0YSgpIGNvbnN0CiAgICAgcmV0dXJuIFdU
Rjo6c3dpdGNoT24obV9kYXRhLAogICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRG
aWxlRGF0YSYgZGF0YSkgewogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IHVp
bnQ4X3QqPihkYXRhLmRhdGEoKSk7Ci0gICAgICAgIH0sCi0gICAgICAgIFtdKGNvbnN0IHN0ZDo6
cGFpcjxNYWxsb2NQdHI8dWludDhfdCwgVk1NYWxsb2M+LCBzaXplX3Q+JiBkYXRhKSB7CisgICAg
ICAgIH0sIFtdKGNvbnN0IHN0ZDo6cGFpcjxNYWxsb2NQdHI8dWludDhfdCwgVk1NYWxsb2M+LCBz
aXplX3Q+JiBkYXRhKSAtPiBjb25zdCB1aW50OF90KiB7CiAgICAgICAgICAgICByZXR1cm4gZGF0
YS5maXJzdC5nZXQoKTsKLSAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICApOwogfQogCiBzaXpl
X3QgQ2FjaGVQYXlsb2FkOjpzaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hP
bihtX2RhdGEsCi0gICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBk
YXRhKSB7CisgICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRh
KSAtPiBzaXplX3QgewogICAgICAgICAgICAgcmV0dXJuIGRhdGEuc2l6ZSgpOwotICAgICAgICB9
LAotICAgICAgICBbXShjb25zdCBzdGQ6OnBhaXI8TWFsbG9jUHRyPHVpbnQ4X3QsIFZNTWFsbG9j
Piwgc2l6ZV90PiYgZGF0YSkgeworICAgICAgICB9LCBbXShjb25zdCBzdGQ6OnBhaXI8TWFsbG9j
UHRyPHVpbnQ4X3QsIFZNTWFsbG9jPiwgc2l6ZV90PiYgZGF0YSkgLT4gc2l6ZV90IHsKICAgICAg
ICAgICAgIHJldHVybiBkYXRhLnNlY29uZDsKLSAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhY2hlVXBkYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhY2hlVXBkYXRlLmNwcAppbmRleCA3MGQzNmIzODVhYjViMmY4OTBhOTY3MzA5YzNjNGFk
MDcxOTdkZGEzLi42MDcxNTQzMTA1ZTNkOTQ1NmQzZDQyOTgxYjgzMWRhYTc2NmVjNTQ5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZVVwZGF0ZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVVcGRhdGUuY3BwCkBAIC0zOSwx
MSArMzksOCBAQCBDYWNoZVVwZGF0ZTo6Q2FjaGVVcGRhdGUoRnVuY3Rpb25VcGRhdGUmJiB1cGRh
dGUpCiB9CiAKIENhY2hlVXBkYXRlOjpDYWNoZVVwZGF0ZShDYWNoZVVwZGF0ZSYmIG90aGVyKQor
ICAgIDogbV91cGRhdGUoV1RGTW92ZShvdGhlci5tX3VwZGF0ZSkpCiB7Ci0gICAgaWYgKFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8R2xvYmFsVXBkYXRlPihvdGhlci5tX3VwZGF0ZSkpCi0gICAgICAg
IG5ldyAodGhpcykgQ2FjaGVVcGRhdGUoV1RGTW92ZShXVEY6OmdldDxHbG9iYWxVcGRhdGU+KG90
aGVyLm1fdXBkYXRlKSkpOwotICAgIGVsc2UKLSAgICAgICAgbmV3ICh0aGlzKSBDYWNoZVVwZGF0
ZShXVEZNb3ZlKFdURjo6Z2V0PEZ1bmN0aW9uVXBkYXRlPihvdGhlci5tX3VwZGF0ZSkpKTsKIH0K
IAogQ2FjaGVVcGRhdGUmIENhY2hlVXBkYXRlOjpvcGVyYXRvcj0oQ2FjaGVVcGRhdGUmJiBvdGhl
cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsVGlt
ZVpvbmUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxUaW1lWm9u
ZS5jcHAKaW5kZXggNzdkYjQwOTVkMjdjMWJmMmZjMTc3MGNmZTAzOWQ1Njk4YTE2YmVjYy4uODNh
MzkwNmJkNTQ1MDYyMmVhZWE5YWM5MDNiYmQyODE1Y2QwOWNlNSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxUaW1lWm9uZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxUaW1lWm9uZS5jcHAKQEAgLTM1LDE0ICsz
NSwxNCBAQCBjb25zdCBDbGFzc0luZm8gVGVtcG9yYWxUaW1lWm9uZTo6c19pbmZvID0geyAiT2Jq
ZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbgogCiBUZW1wb3JhbFRpbWVab25lKiBUZW1w
b3JhbFRpbWVab25lOjpjcmVhdGVGcm9tSUQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
VGltZVpvbmVJRCBpZGVudGlmaWVyKQogewotICAgIFRlbXBvcmFsVGltZVpvbmUqIGZvcm1hdCA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFRlbXBvcmFsVGltZVpvbmU+KHZtLmhlYXApKSBU
ZW1wb3JhbFRpbWVab25lKHZtLCBzdHJ1Y3R1cmUsIFRpbWVab25lIHsgV1RGOjppbl9wbGFjZTww
PiwgaWRlbnRpZmllciB9KTsKKyAgICBUZW1wb3JhbFRpbWVab25lKiBmb3JtYXQgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxUZW1wb3JhbFRpbWVab25lPih2bS5oZWFwKSkgVGVtcG9yYWxU
aW1lWm9uZSh2bSwgc3RydWN0dXJlLCBUaW1lWm9uZSB7IHN0ZDo6aW5fcGxhY2VfaW5kZXhfdDww
PigpLCBpZGVudGlmaWVyIH0pOwogICAgIGZvcm1hdC0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAg
IHJldHVybiBmb3JtYXQ7CiB9CiAKIFRlbXBvcmFsVGltZVpvbmUqIFRlbXBvcmFsVGltZVpvbmU6
OmNyZWF0ZUZyb21VVENPZmZzZXQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50NjRf
dCB1dGNPZmZzZXQpCiB7Ci0gICAgVGVtcG9yYWxUaW1lWm9uZSogZm9ybWF0ID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8VGVtcG9yYWxUaW1lWm9uZT4odm0uaGVhcCkpIFRlbXBvcmFsVGlt
ZVpvbmUodm0sIHN0cnVjdHVyZSwgVGltZVpvbmUgeyBXVEY6OmluX3BsYWNlPDE+LCB1dGNPZmZz
ZXQgfSk7CisgICAgVGVtcG9yYWxUaW1lWm9uZSogZm9ybWF0ID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8VGVtcG9yYWxUaW1lWm9uZT4odm0uaGVhcCkpIFRlbXBvcmFsVGltZVpvbmUodm0s
IHN0cnVjdHVyZSwgVGltZVpvbmUgeyBzdGQ6OmluX3BsYWNlX2luZGV4X3Q8MT4oKSwgdXRjT2Zm
c2V0IH0pOwogICAgIGZvcm1hdC0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiBmb3Jt
YXQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmggYi9Tb3VyY2UvV1RG
L3d0Zi9Gb3J3YXJkLmgKaW5kZXggM2E3Mjk3NDM3YjU5ZDQ1M2RiZDZlOTY4NDM0Njk3NGU1M2M4
NmNmOS4uZjAwY2UzOTYwOTllZmJjZjkwZDNlYTFjYjE4YzQ1ZTQ4N2E3MjI1MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvRm9yd2FyZC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQu
aApAQCAtODMsNyArODMsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgU3RyaW5nQnVmZmVy
OwogdGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIFN0cmluZ1BhcnNpbmdCdWZmZXI7CiB0ZW1wbGF0
ZTx0eXBlbmFtZSwgdHlwZW5hbWUgPSB2b2lkPiBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjsKIHRl
bXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBVbmlxdWVSZWY7Ci10ZW1wbGF0ZTx0eXBlbmFtZS4uLj4g
Y2xhc3MgVmFyaWFudDsKIHRlbXBsYXRlPHR5cGVuYW1lLCBzaXplX3QgPSAwLCB0eXBlbmFtZSA9
IENyYXNoT25PdmVyZmxvdywgc2l6ZV90ID0gMTYsIHR5cGVuYW1lIE1hbGxvYyA9IFZlY3Rvck1h
bGxvYz4gY2xhc3MgVmVjdG9yOwogdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lID0gRW1wdHlD
b3VudGVyPiBjbGFzcyBXZWFrUHRyOwogCkBAIC0xNTcsNyArMTU2LDYgQEAgdXNpbmcgV1RGOjpU
ZXh0UG9zaXRpb247CiB1c2luZyBXVEY6OlRleHRTdHJlYW07CiB1c2luZyBXVEY6OlVSTDsKIHVz
aW5nIFdURjo6VW5pcXVlUmVmOwotdXNpbmcgV1RGOjpWYXJpYW50OwogdXNpbmcgV1RGOjpWZWN0
b3I7CiAKIHRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIEU+IHVzaW5nIEV4cGVjdGVkID0gc3RkOjpl
eHBlcmltZW50YWw6OmV4cGVjdGVkPFQsIEU+OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
SGFzaGVyLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIuaAppbmRleCA4ZmU5YjI0MGMwZWZhYzcw
OGFjODAzZjU1MDE1MGQ4Y2E1OTM1MmQyLi5hNzdhNDhhOWVjYTg4YTUxNzcyZWI0ODE1Y2U4YmEw
MDU5OTMzN2E4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9IYXNoZXIuaApAQCAtMjEsNiArMjEsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNp
bmNsdWRlIDxvcHRpb25hbD4KKyNpbmNsdWRlIDx2YXJpYW50PgogI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVVJMLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRv
bVN0cmluZy5oPgpAQCAtMTY2LDEwICsxNjcsMTAgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9p
ZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8VD4mIG9wdGlvbmFsKQog
ICAgICAgICBhZGQoaGFzaGVyLCBvcHRpb25hbC52YWx1ZSgpKTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gVHlwZXM+IHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBWYXJpYW50PFR5
cGVzLi4uPiYgdmFyaWFudCkKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPiB2b2lkIGFkZChI
YXNoZXImIGhhc2hlciwgY29uc3Qgc3RkOjp2YXJpYW50PFR5cGVzLi4uPiYgdmFyaWFudCkKIHsK
ICAgICBhZGQoaGFzaGVyLCB2YXJpYW50LmluZGV4KCkpOwotICAgIHZpc2l0KFsmaGFzaGVyXSAo
YXV0byYgdmFsdWUpIHsKKyAgICBzdGQ6OnZpc2l0KFsmaGFzaGVyXSAoYXV0byYgdmFsdWUpIHsK
ICAgICAgICAgYWRkKGhhc2hlciwgdmFsdWUpOwogICAgIH0sIHZhcmlhbnQpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvTGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQuaCBiL1Nv
dXJjZS9XVEYvd3RmL0xpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0LmgKaW5kZXggMDIxMGY5
NDI4ZTZjZTQyZjNlMmRhZmQwMjgwNzBjMWZjZGI5NGM3Ny4uNzQ0MmE0MzFhMzg5ZGFhMmQyMGYw
NTI2N2NkOTE0ZWMwZTJlYTZiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTGlrZWx5RGVu
c2VVbnNpZ25lZEludGVnZXJTZXQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9MaWtlbHlEZW5zZVVu
c2lnbmVkSW50ZWdlclNldC5oCkBAIC0yMDUsOCArMjA1LDggQEAgcHVibGljOgogICAgICAgICBJ
bmRleFR5cGUgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IFdURjo6c3dpdGNoT24obV91bmRlcmx5aW5nLAotICAgICAgICAgICAgICAgIFsmXShjb25zdCBC
aXRWZWN0b3I6Oml0ZXJhdG9yJiBpdCkgeyByZXR1cm4gKml0ICsgbV9zaGlmdDsgfSwKLSAgICAg
ICAgICAgICAgICBbXShjb25zdCB0eXBlbmFtZSBTZXQ6Oml0ZXJhdG9yJiBpdCkgeyByZXR1cm4g
Kml0OyB9KTsKKyAgICAgICAgICAgICAgICBbJl0oY29uc3QgQml0VmVjdG9yOjppdGVyYXRvciYg
aXQpIC0+IEluZGV4VHlwZSB7IHJldHVybiAqaXQgKyBtX3NoaWZ0OyB9LAorICAgICAgICAgICAg
ICAgIFtdKGNvbnN0IHR5cGVuYW1lIFNldDo6aXRlcmF0b3ImIGl0KSAtPiBJbmRleFR5cGUgeyBy
ZXR1cm4gKml0OyB9KTsKICAgICAgICAgfQogCiAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9WYXJp
YW50LmggYi9Tb3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgKaW5kZXggM2NhN2ViZmU5ZDA0Nzk2ZDBi
OGEwNTY3M2NjYTBmZTMxOGUwMmQzMi4uY2JmOTJiOWZhZjI5ZjBjMzk4YTFkNjUwNDM2NGI2MzQ2
ZmFlOGJlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVmFyaWFudC5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1ZhcmlhbnQuaApAQCAtNDcsMTkgKzQ3LDEwIEBACiAjaW5jbHVkZSA8c3RyaW5n
PgogI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgogI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8
dmFyaWFudD4KICNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CiAKLSNpZiBDT01QSUxFUihNU1ZDKQotI3ByYWdtYSB3YXJuaW5nKHB1c2gpCi0j
cHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MjQ1KQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDUy
MSkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ1MjIpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJs
ZTo0ODE0KQotI2VuZGlmCi0KLSNpZiAhQ09NUElMRVIoQ0xBTkcpIHx8IFdURl9DUFBfU1REX1ZF
UiA+PSAxNAotCiBuYW1lc3BhY2UgV1RGIHsKIAogI2lmIENPTVBJTEVSX1NVUFBPUlRTKEVYQ0VQ
VElPTlMpCkBAIC03MiwyMDEzICs2Myw0NyBAQCBuYW1lc3BhY2UgV1RGIHsKICNkZWZpbmUgX19O
T0VYQ0VQVF8oLi4uKQogI2VuZGlmCiAKLXN0cnVjdCBfX2luX3BsYWNlX3ByaXZhdGV7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWU+Ci0gICAgc3RydWN0IF9fdHlwZV9ob2xkZXI7Ci0KLSAgICB0ZW1w
bGF0ZTxzaXplX3Q+Ci0gICAgc3RydWN0IF9fdmFsdWVfaG9sZGVyOwotfTsKLQotCi1zdHJ1Y3Qg
aW5fcGxhY2VfdGFnIHsKLSAgICBpbl9wbGFjZV90YWcoKSA9IGRlbGV0ZTsKLX07Ci0KLXVzaW5n
IGluX3BsYWNlX3QgPSBpbl9wbGFjZV90YWcoJikoX19pbl9wbGFjZV9wcml2YXRlJik7Ci0KLXRl
bXBsYXRlIDxjbGFzcyBfVHlwZT4KLXVzaW5nIGluX3BsYWNlX3R5cGVfdCA9IGluX3BsYWNlX3Rh
ZygmKShfX2luX3BsYWNlX3ByaXZhdGU6Ol9fdHlwZV9ob2xkZXI8X1R5cGU+Jik7Ci0KLXRlbXBs
YXRlIDxzaXplX3QgX0luZGV4PgotdXNpbmcgaW5fcGxhY2VfaW5kZXhfdCA9IGluX3BsYWNlX3Rh
ZygmKShfX2luX3BsYWNlX3ByaXZhdGU6Ol9fdmFsdWVfaG9sZGVyPF9JbmRleD4mKTsKLQotaW5f
cGxhY2VfdGFnIGluX3BsYWNlKF9faW5fcGxhY2VfcHJpdmF0ZSYpOwotCi10ZW1wbGF0ZSA8Y2xh
c3MgX1R5cGU+Ci1pbl9wbGFjZV90YWcgaW5fcGxhY2UoX19pbl9wbGFjZV9wcml2YXRlOjpfX3R5
cGVfaG9sZGVyPF9UeXBlPiAmKSB7Ci0gICAgX19USFJPV19FWENFUFRJT04oX19pbl9wbGFjZV9w
cml2YXRlKCkpOwotfQotCi10ZW1wbGF0ZSA8c2l6ZV90IF9JbmRleD4KLWluX3BsYWNlX3RhZyBp
bl9wbGFjZShfX2luX3BsYWNlX3ByaXZhdGU6Ol9fdmFsdWVfaG9sZGVyPF9JbmRleD4gJikgewot
ICAgIF9fVEhST1dfRVhDRVBUSU9OKF9faW5fcGxhY2VfcHJpdmF0ZSgpKTsKLX0KLQotY2xhc3Mg
YmFkX3ZhcmlhbnRfYWNjZXNzOiBwdWJsaWMgc3RkOjpsb2dpY19lcnJvcnsKLXB1YmxpYzoKLSAg
ICBleHBsaWNpdCBiYWRfdmFyaWFudF9hY2Nlc3MoY29uc3Qgc3RkOjpzdHJpbmcmIHdoYXRfYXJn
KToKLSAgICAgICAgc3RkOjpsb2dpY19lcnJvcih3aGF0X2FyZykKLSAgICB7fQotICAgIGV4cGxp
Y2l0IGJhZF92YXJpYW50X2FjY2Vzcyhjb25zdCBjaGFyKiB3aGF0X2FyZyk6Ci0gICAgICAgIHN0
ZDo6bG9naWNfZXJyb3Iod2hhdF9hcmcpCi0gICAge30KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci1OT19SRVRVUk5fRFVFX1RPX0NSQVNIIGlubGluZSBUIF9fdGhyb3dfYmFkX3ZhcmlhbnRf
YWNjZXNzKGNvbnN0IGNoYXIqIHdoYXRfYXJnKXsKLSAgICBfX1RIUk9XX0VYQ0VQVElPTihiYWRf
dmFyaWFudF9hY2Nlc3Mod2hhdF9hcmcpKQotfQotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNl
dCx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdHlwZV9pbmRl
eF9oZWxwZXI7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfT2Zmc2V0LHR5cGVuYW1lIF9UeXBlLHR5
cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX3R5cGVfaW5kZXhfaGVs
cGVyPF9PZmZzZXQsX1R5cGUsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHN0YXRpYyBjb25zdGV4cHIg
cHRyZGlmZl90IF9fdmFsdWU9Ci0gICAgICAgIF9fdHlwZV9pbmRleF9oZWxwZXI8X09mZnNldCsx
LF9UeXBlLF9SZXN0Li4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfT2Zm
c2V0LHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX3R5cGVfaW5k
ZXhfaGVscGVyPF9PZmZzZXQsX1R5cGUsX1R5cGUsX1Jlc3QuLi4+ewotICAgIHN0YXRpYyBjb25z
dGV4cHIgcHRyZGlmZl90IF9fdmFsdWU9X09mZnNldDsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX190eXBlX2luZGV4ewotICAgIHN0
YXRpYyBjb25zdGV4cHIgcHRyZGlmZl90IF9fdmFsdWU9Ci0gICAgICAgIF9fdHlwZV9pbmRleF9o
ZWxwZXI8MCxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlm
Zl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9faW5kZXhlZF90eXBlOwot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19p
bmRleGVkX3R5cGU8MCxfSGVhZCxfUmVzdC4uLj57Ci0gICAgdHlwZWRlZiBfSGVhZCBfX3R5cGU7
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1
Y3QgX19pbmRleGVkX3R5cGU8LTEsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgdm9pZCBf
X3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIF9IZWFkLHR5
cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX0hlYWQsX1Jl
c3QuLi4+ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LTEsX1Jl
c3QuLi4+OjpfX3R5cGUgX190eXBlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0
eXBlbmFtZSAuLi5fVHlwZXM+Ci1zdHJ1Y3QgX19uZXh0X2luZGV4ewotICAgIHN0YXRpYyBjb25z
dGV4cHIgcHRyZGlmZl90IF9fdmFsdWU9Ci0gICAgICAgIChfSW5kZXg+PXB0cmRpZmZfdChzaXpl
b2YuLi4oX1R5cGVzKS0xKSk/LTE6X0luZGV4KzE7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAu
Li4gX1R5cGVzPgotY2xhc3MgVmFyaWFudDsKLQotdGVtcGxhdGU8dHlwZW5hbWU+Ci1zdHJ1Y3Qg
dmFyaWFudF9zaXplOwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgdmFyaWFu
dF9zaXplPGNvbnN0IF9UeXBlPiA6IHZhcmlhbnRfc2l6ZTxfVHlwZT4ge307Ci0KLXRlbXBsYXRl
IDx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50X3NpemU8dm9sYXRpbGUgX1R5cGU+IDog
dmFyaWFudF9zaXplPF9UeXBlPiB7fTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIF9UeXBlPgotc3Ry
dWN0IHZhcmlhbnRfc2l6ZTxjb25zdCB2b2xhdGlsZSBfVHlwZT4gOiB2YXJpYW50X3NpemU8X1R5
cGU+IHt9OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gX1R5cGVzPgotc3RydWN0IHZhcmlhbnRf
c2l6ZTxWYXJpYW50PF9UeXBlcy4uLj4+Ci0gICAgOiBzdGQ6OmludGVncmFsX2NvbnN0YW50PHNp
emVfdCwgc2l6ZW9mLi4uKF9UeXBlcyk+IHt9OwotCi10ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5
cGVuYW1lIF9UeXBlPgotc3RydWN0IHZhcmlhbnRfYWx0ZXJuYXRpdmU7Ci0KLXRlbXBsYXRlPHNp
emVfdCBfSW5kZXgsdHlwZW5hbWUgX1R5cGU+Ci11c2luZyB2YXJpYW50X2FsdGVybmF0aXZlX3Q9
dHlwZW5hbWUgdmFyaWFudF9hbHRlcm5hdGl2ZTxfSW5kZXgsX1R5cGU+Ojp0eXBlOwotCi10ZW1w
bGF0ZSA8c2l6ZV90IF9JbmRleCwgdHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgdmFyaWFudF9hbHRl
cm5hdGl2ZTxfSW5kZXgsIGNvbnN0IF9UeXBlPnsKLSAgICB1c2luZyB0eXBlPXN0ZDo6YWRkX2Nv
bnN0X3Q8dmFyaWFudF9hbHRlcm5hdGl2ZV90PF9JbmRleCxfVHlwZT4+OwotfTsKLQotdGVtcGxh
dGUgPHNpemVfdCBfSW5kZXgsIHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IHZhcmlhbnRfYWx0ZXJu
YXRpdmU8X0luZGV4LCB2b2xhdGlsZSBfVHlwZT57Ci0gICAgdXNpbmcgdHlwZT1zdGQ6OmFkZF92
b2xhdGlsZV90PHZhcmlhbnRfYWx0ZXJuYXRpdmVfdDxfSW5kZXgsX1R5cGU+PjsKLX07Ci0KLXRl
bXBsYXRlIDxzaXplX3QgX0luZGV4LCB0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50X2Fs
dGVybmF0aXZlPF9JbmRleCwgdm9sYXRpbGUgY29uc3QgX1R5cGU+ewotICAgIHVzaW5nIHR5cGU9
c3RkOjphZGRfdm9sYXRpbGVfdDxzdGQ6OmFkZF9jb25zdF90PHZhcmlhbnRfYWx0ZXJuYXRpdmVf
dDxfSW5kZXgsX1R5cGU+Pj47Ci19OwotCi10ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1l
IC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxfSW5kZXgsVmFyaWFudDxf
VHlwZXMuLi4+PnsKLSAgICB1c2luZyB0eXBlPXR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRl
eCxfVHlwZXMuLi4+OjpfX3R5cGU7Ci19OwotCi1jb25zdGV4cHIgc2l6ZV90IHZhcmlhbnRfbnBv
cz0tMTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNv
bnN0ZXhwciBfVHlwZSYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYpOwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIF9UeXBlIGNvbnN0JiBn
ZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0Jik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBl
LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgX1R5cGUmJiBnZXQoVmFyaWFudDxfVHlw
ZXMuLi4+JiYpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVz
PgotY29uc3RleHByIGNvbnN0IF9UeXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYm
KTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29u
c3RleHByIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUm
IGdldChWYXJpYW50PF9UeXBlcy4uLj4mKTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0
eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9J
bmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+JiYpOwotCi10
ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIg
dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBjb25zdCYg
Z2V0KAotICAgIFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYpOwotCi10ZW1wbGF0ZSA8cHRyZGlm
Zl90IF9JbmRleCwgdHlwZW5hbWUuLi4gX1R5cGVzPgotY29uc3RleHByIGNvbnN0IHR5cGVuYW1l
IF9faW5kZXhlZF90eXBlPF9JbmRleCwgX1R5cGVzLi4uPjo6X190eXBlICYmCi1nZXQoVmFyaWFu
dDxfVHlwZXMuLi4+IGNvbnN0ICYmKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5h
bWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8X1R5cGU+IGdldF9p
ZihWYXJpYW50PF9UeXBlcy4uLj4mKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5h
bWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8X1R5cGUgY29uc3Q+
IGdldF9pZihWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmKTsKLQotdGVtcGxhdGU8cHRyZGlmZl90
IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJf
dDx0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlPiBnZXRf
aWYoVmFyaWFudDxfVHlwZXMuLi4+Jik7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlw
ZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8dHlwZW5hbWUg
X19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBjb25zdD4gZ2V0X2lmKAot
ICAgIFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYpOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0lu
ZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX192YXJpYW50X2FjY2Vzc29yOwotCi10
ZW1wbGF0ZTxzaXplX3QgX19jb3VudCwKLSAgICAgICAgIGJvb2wgX19sYXJnZXJfdGhhbl9jaGFy
PShfX2NvdW50PlNDSEFSX01BWCksCi0gICAgYm9vbCBfX2xhcmdlcl90aGFuX3Nob3J0PShfX2Nv
dW50PlNIUlRfTUFYKSwKLSAgICBib29sIF9fbGFyZ2VyX3RoYW5faW50PShfX2NvdW50PklOVF9N
QVgpPgotc3RydWN0IF9fZGlzY3JpbWluYXRvcl90eXBlewotICAgIHR5cGVkZWYgc2lnbmVkIGNo
YXIgX190eXBlOwotfTsKLQotdGVtcGxhdGU8c2l6ZV90IF9fY291bnQ+Ci1zdHJ1Y3QgX19kaXNj
cmltaW5hdG9yX3R5cGU8X19jb3VudCx0cnVlLGZhbHNlLGZhbHNlPnsKLSAgICB0eXBlZGVmIHNp
Z25lZCBzaG9ydCBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxzaXplX3QgX19jb3VudD4KLXN0cnVj
dCBfX2Rpc2NyaW1pbmF0b3JfdHlwZTxfX2NvdW50LHRydWUsdHJ1ZSxmYWxzZT57Ci0gICAgdHlw
ZWRlZiBpbnQgX190eXBlOwotfTsKLXRlbXBsYXRlPHNpemVfdCBfX2NvdW50Pgotc3RydWN0IF9f
ZGlzY3JpbWluYXRvcl90eXBlPF9fY291bnQsdHJ1ZSx0cnVlLHRydWU+ewotICAgIHR5cGVkZWYg
c2lnbmVkIGxvbmcgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1
Y3QgX19zdG9yZWRfdHlwZXsKLSAgICB0eXBlZGVmIF9UeXBlIF9fdHlwZTsKLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fc3RvcmVkX3R5cGU8X1R5cGUmPnsKLSAgICB0
eXBlZGVmIF9UeXBlKiBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVz
Pgotc3RydWN0IF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU7Ci0KLXRlbXBsYXRlPD4KLXN0
cnVjdCBfX2FsbF90cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPD4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBfX3ZhbHVlPXRydWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXN0
cnVjdCBfX2FsbF90cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPF9UeXBlPiB7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIF9fdmFsdWU9Ci0gICAgICAgIHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0
aWJsZTx0eXBlbmFtZSBfX3N0b3JlZF90eXBlPF9UeXBlPjo6X190eXBlPjo6dmFsdWU7Ci19Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19h
bGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxfSGVhZCxfUmVzdC4uLj4gewotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBfX3ZhbHVlPQotICAgICAgICBfX2FsbF90cml2aWFsbHlfZGVzdHJ1Y3Rp
YmxlPF9IZWFkPjo6X192YWx1ZSAmJgotICAgICAgICBfX2FsbF90cml2aWFsbHlfZGVzdHJ1Y3Rp
YmxlPF9SZXN0Li4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UYXJnZXQs
dHlwZW5hbWUgLi4uIF9BcmdzPgotc3RydWN0IF9fc3RvcmFnZV9ub3Rocm93X2NvbnN0cnVjdGli
bGV7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1ZT0KLSAgICAgICAgc3RkOjppc19ub3Ro
cm93X2NvbnN0cnVjdGlibGU8X1RhcmdldCwgX0FyZ3MuLi4+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19zdG9yYWdlX25vdGhyb3dfbW92ZV9j
b25zdHJ1Y3RpYmxlOwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19zdG9yYWdlX25vdGhyb3dfbW92
ZV9jb25zdHJ1Y3RpYmxlPD4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBfX3ZhbHVlPXRy
dWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBfX3N0b3JhZ2Vfbm90
aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGU+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgX192YWx1ZT0KLSAgICAgICAgc3RkOjppc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTwK
LSAgICAgICAgdHlwZW5hbWUgX19zdG9yZWRfdHlwZTxfVHlwZT46Ol9fdHlwZT46OnZhbHVlOwot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0
IF9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxfSGVhZCxfUmVzdC4uLj4gewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBfX3ZhbHVlPQotICAgICAgICBfX3N0b3JhZ2Vfbm90
aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X0hlYWQ+OjpfX3ZhbHVlICYmCi0gICAgICAgIF9fc3Rv
cmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxfUmVzdC4uLj46Ol9fdmFsdWU7Ci19Owot
Ci10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3Qg
X19vdGhlcl9zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlOwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19vdGhlcl9zdG9yYWdl
X25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPDAsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHN0YXRp
YyBjb25zdCBib29sIF9fdmFsdWU9X19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxl
PF9SZXN0Li4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVu
YW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX290aGVyX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0
cnVjdGlibGU8LTEsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFs
dWU9Ci0gICAgICAgIF9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxfSGVhZCxf
UmVzdC4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVu
YW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX290aGVyX3N0b3JhZ2Vfbm90
aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X0luZGV4LF9IZWFkLF9SZXN0Li4uPnsKLSAgICBzdGF0
aWMgY29uc3QgYm9vbCBfX3ZhbHVlPQotICAgICAgICBfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2Nv
bnN0cnVjdGlibGU8X0hlYWQ+OjpfX3ZhbHVlICYmCi0gICAgICAgIF9fb3RoZXJfc3RvcmFnZV9u
b3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdmFsdWU7Ci19
OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1
Y3QgX19iYWNrdXBfc3RvcmFnZV9yZXF1aXJlZHsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBfX3Zh
bHVlPQotICAgICAgICAhX19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPAotICAg
ICAgICB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlPjo6
X192YWx1ZSAmJgotICAgICAgICAhX19vdGhlcl9zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1
Y3RpYmxlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlm
Zl90IF9JbmRleCxwdHJkaWZmX3QgX0NvdW50LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3Qg
X19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWRfaW1wbHsKLSAgICBzdGF0aWMgY29uc3QgYm9v
bCBfX3ZhbHVlPQotICAgICAgICBfX2JhY2t1cF9zdG9yYWdlX3JlcXVpcmVkPF9JbmRleCxfVHlw
ZXMuLi4+OjpfX3ZhbHVlIHx8Ci0gICAgICAgIF9fYW55X2JhY2t1cF9zdG9yYWdlX3JlcXVpcmVk
X2ltcGw8X0luZGV4KzEsX0NvdW50LTEsX1R5cGVzLi4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBs
YXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FueV9i
YWNrdXBfc3RvcmFnZV9yZXF1aXJlZF9pbXBsPF9JbmRleCwwLF9UeXBlcy4uLj57Ci0gICAgc3Rh
dGljIGNvbnN0IGJvb2wgX192YWx1ZT1mYWxzZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9W
YXJpYW50Pgotc3RydWN0IF9fYW55X2JhY2t1cF9zdG9yYWdlX3JlcXVpcmVkOwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYW55X2JhY2t1cF9zdG9yYWdlX3JlcXVp
cmVkPFZhcmlhbnQ8X1R5cGVzLi4uPiA+ewotICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWU9
Ci0gICAgICAgIF9fYW55X2JhY2t1cF9zdG9yYWdlX3JlcXVpcmVkX2ltcGw8MCxzaXplb2YuLi4o
X1R5cGVzKSxfVHlwZXMuLi4+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4u
IF9UeXBlcz4KLXVuaW9uIF9fdmFyaWFudF9kYXRhOwotCi0vLyBzdGQ6OmlzX2xpdGVyYWxfdHlw
ZSBpcyBkZXByZWNhdGVkIGluIEMrKzE3IGFuZCByZW1vdmVkIGluIEMrKzIwCi1BTExPV19ERVBS
RUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsYm9vbD1z
dGQ6OmlzX2xpdGVyYWxfdHlwZTxfVHlwZT46OnZhbHVlPgotc3RydWN0IF9fdmFyaWFudF9zdG9y
YWdlewotICAgIHR5cGVkZWYgX1R5cGUgX190eXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBf
VHlwZSYgX19nZXQoX190eXBlJiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBfX3ZhbDsKLSAgICB9
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0X3JyZWYoX190eXBlJiBfX3ZhbCl7
Ci0gICAgICAgIHJldHVybiBzdGQ6Om1vdmUoX192YWwpOwotICAgIH0KLSAgICBzdGF0aWMgY29u
c3RleHByIGNvbnN0IF9UeXBlJiBfX2dldChfX3R5cGUgY29uc3QmIF9fdmFsKXsKLSAgICAgICAg
cmV0dXJuIF9fdmFsOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IF9UeXBlJiYg
X19nZXRfcnJlZihfX3R5cGUgY29uc3QmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bW92
ZShfX3ZhbCk7Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIF9fZGVzdHJveShfX3R5cGUmKXt9Ci19
OwotQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi0KLXRlbXBsYXRlPHR5cGVuYW1l
IF9UeXBlPgotc3RydWN0IF9fc3RvcmFnZV93cmFwcGVyewotICAgIHR5cGVuYW1lIHN0ZDo6YWxp
Z25lZF9zdG9yYWdlPHNpemVvZihfVHlwZSksYWxpZ25vZihfVHlwZSk+Ojp0eXBlIF9fc3RvcmFn
ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBzdGF0aWMgY29uc3Rl
eHByIHZvaWQgX19jb25zdHJ1Y3Qodm9pZCogX19wLF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAg
ICAgIG5ldyAoX19wKSBfVHlwZShzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAg
IH0KLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfRHVtbXkgPSBfVHlwZT4KLSAgICBfX3N0b3Jh
Z2Vfd3JhcHBlcigKLSAgICAgICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19kZWZh
dWx0X2NvbnN0cnVjdGlibGU8X0R1bW15Pjo6dmFsdWUsCi0gICAgICAgIHZvaWQgKF9fc3RvcmFn
ZV93cmFwcGVyOjoqKSgpPjo6dHlwZSA9IG51bGxwdHIpIHsKLSAgICAgIF9fY29uc3RydWN0KCZf
X3N0b3JhZ2UpOwotICAgIH0KLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfRHVtbXkgPSBfVHlw
ZT4KLSAgICBfX3N0b3JhZ2Vfd3JhcHBlcigKLSAgICAgICAgdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8IXN0ZDo6aXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPF9EdW1teT46OnZhbHVlLAotICAgICAg
ICB2b2lkIChfX3N0b3JhZ2Vfd3JhcHBlcjo6KikoKT46OnR5cGUgPSBudWxscHRyKSB7Ci0gICAg
fQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GaXJzdCx0eXBlbmFtZSAuLi4gX0FyZ3M+
Ci0gICAgX19zdG9yYWdlX3dyYXBwZXIoX0ZpcnN0JiYgX19maXJzdCxfQXJncyYmIC4uLiBfX2Fy
Z3MpewotICAgICAgICBfX2NvbnN0cnVjdCgmX19zdG9yYWdlLHN0ZDo6Zm9yd2FyZDxfRmlyc3Q+
KF9fZmlyc3QpLHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7Ci0gICAgfQotCi0gICAg
X1R5cGUmIF9fZ2V0KCl7Ci0gICAgICAgIHJldHVybiAqc3RhdGljX2Nhc3Q8X1R5cGUqPihzdGF0
aWNfY2FzdDx2b2lkKj4oJl9fc3RvcmFnZSkpOwotICAgIH0KLSAgICBjb25zdGV4cHIgX1R5cGUg
Y29uc3QmIF9fZ2V0KCkgY29uc3R7Ci0gICAgICAgIHJldHVybiAqc3RhdGljX2Nhc3Q8X1R5cGUg
Y29uc3QqPihzdGF0aWNfY2FzdDx2b2lkIGNvbnN0Kj4oJl9fc3RvcmFnZSkpOwotICAgIH0KLSAg
ICB2b2lkIF9fZGVzdHJveSgpewotICAgICAgICBfX2dldCgpLn5fVHlwZSgpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fc3RvcmFnZV93cmFwcGVyPF9U
eXBlJj57Ci0gICAgX1R5cGUqIF9fc3RvcmFnZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9B
cmc+Ci0gICAgY29uc3RleHByIF9fc3RvcmFnZV93cmFwcGVyKF9BcmcmIF9fYXJnKToKLSAgICAg
ICAgX19zdG9yYWdlKCZfX2FyZyl7fQotCi0gICAgX1R5cGUmIF9fZ2V0KCl7Ci0gICAgICAgIHJl
dHVybiAqX19zdG9yYWdlOwotICAgIH0KLSAgICBjb25zdGV4cHIgX1R5cGUgY29uc3QmIF9fZ2V0
KCkgY29uc3R7Ci0gICAgICAgIHJldHVybiAqX19zdG9yYWdlOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlLGZhbHNl
PnsKLSAgICB0eXBlZGVmIF9fc3RvcmFnZV93cmFwcGVyPF9UeXBlPiBfX3R5cGU7Ci0KLSAgICBz
dGF0aWMgY29uc3RleHByIF9UeXBlJiBfX2dldChfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0
dXJuIF9fdmFsLl9fZ2V0KCk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmJiBf
X2dldF9ycmVmKF9fdHlwZSYgX192YWwpewotICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9fdmFs
Ll9fZ2V0KCkpOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IF9UeXBlJiBfX2dl
dChfX3R5cGUgY29uc3QmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIF9fdmFsLl9fZ2V0KCk7Ci0g
ICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBfX2dldF9ycmVmKF9fdHlw
ZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9fdmFsLl9fZ2V0KCkp
OwotICAgIH0KLSAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3koX190eXBlJiBfX3ZhbCl7Ci0gICAg
ICAgIF9fdmFsLl9fZGVzdHJveSgpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9U
eXBlLGJvb2wgX19iPgotc3RydWN0IF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJixfX2I+ewotICAg
IHR5cGVkZWYgX1R5cGUqIF9fdHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmIF9f
Z2V0KF9fdHlwZSYgX192YWwpewotICAgICAgICByZXR1cm4gKl9fdmFsOwotICAgIH0KLSAgICBz
dGF0aWMgY29uc3RleHByIF9UeXBlJiBfX2dldF9ycmVmKF9fdHlwZSYgX192YWwpewotICAgICAg
ICByZXR1cm4gKl9fdmFsOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiBfX2dl
dChfX3R5cGUgY29uc3QmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuICpfX3ZhbDsKLSAgICB9Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYgX19nZXRfcnJlZihfX3R5cGUgY29uc3QmIF9fdmFs
KXsKLSAgICAgICAgcmV0dXJuICpfX3ZhbDsKLSAgICB9Ci0gICAgc3RhdGljIHZvaWQgX19kZXN0
cm95KF9fdHlwZSYpe30KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLGJvb2wgX19iPgot
c3RydWN0IF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJiYsX19iPnsKLSAgICB0eXBlZGVmIF9UeXBl
KiBfX3R5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiYgX19nZXQoX190eXBlJiBf
X3ZhbCl7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxfVHlwZSYmPigqX192YWwpOwotICAg
IH0KLSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiYgX19nZXRfcnJlZihfX3R5cGUmIF9fdmFs
KXsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PF9UeXBlJiY+KCpfX3ZhbCk7Ci0gICAgfQot
ICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmJiBfX2dldChfX3R5cGUgY29uc3QmIF9fdmFsKXsK
LSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PF9UeXBlJiY+KCpfX3ZhbCk7Ci0gICAgfQotICAg
IHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmJiBfX2dldF9ycmVmKF9fdHlwZSBjb25zdCYgX192YWwp
ewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8X1R5cGUmJj4oKl9fdmFsKTsKLSAgICB9Ci0g
ICAgc3RhdGljIHZvaWQgX19kZXN0cm95KF9fdHlwZSYpe30KLX07Ci0KLXRlbXBsYXRlPD4KLXVu
aW9uIF9fdmFyaWFudF9kYXRhPD57Ci0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKCl7fQot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci11bmlvbiBfX3ZhcmlhbnRfZGF0YTxfVHlw
ZT57Ci0gICAgdHlwZW5hbWUgX192YXJpYW50X3N0b3JhZ2U8X1R5cGU+OjpfX3R5cGUgX192YWw7
Ci0gICAgc3RydWN0IF9fZHVtbXlfdHlwZXt9IF9fZHVtbXk7Ci0KLSAgICBjb25zdGV4cHIgX192
YXJpYW50X2RhdGEoKTpfX2R1bW15KCl7fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9B
cmdzPgotICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YShpbl9wbGFjZV9pbmRleF90PDA+LF9B
cmdzJiYgLi4uIF9fYXJncyk6Ci0gICAgICAgIF9fdmFsKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19h
cmdzKS4uLil7fQotCi0gICAgX1R5cGUmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAg
ICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGU+OjpfX2dldChfX3ZhbCk7Ci0gICAg
fQotICAgIC8qY29uc3RleHByKi8gX1R5cGUmJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8
MD4pewotICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGU+OjpfX2dldF9ycmVm
KF9fdmFsKTsKLSAgICB9Ci0gICAgY29uc3RleHByIGNvbnN0IF9UeXBlJiBfX2dldChpbl9wbGFj
ZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9U
eXBlPjo6X19nZXQoX192YWwpOwotICAgIH0KLSAgICBjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBf
X2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4pIGNvbnN0ewotICAgICAgICByZXR1cm4gX192
YXJpYW50X3N0b3JhZ2U8X1R5cGU+OjpfX2dldF9ycmVmKF9fdmFsKTsKLSAgICB9Ci0gICAgdm9p
ZCBfX2Rlc3Ryb3koaW5fcGxhY2VfaW5kZXhfdDwwPil7Ci0gICAgICAgIF9fdmFyaWFudF9zdG9y
YWdlPF9UeXBlPjo6X19kZXN0cm95KF9fdmFsKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBfVHlwZT4KLXVuaW9uIF9fdmFyaWFudF9kYXRhPF9UeXBlJj57Ci0gICAgdHlwZW5hbWUg
X192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X190eXBlIF9fdmFsOwotICAgIHN0cnVjdCBfX2R1
bW15X3R5cGV7fSBfX2R1bW15OwotCi0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKCk6X19k
dW1teSgpe30KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBjb25zdGV4
cHIgX192YXJpYW50X2RhdGEoaW5fcGxhY2VfaW5kZXhfdDwwPixfQXJncyYmIC4uLiBfX2FyZ3Mp
OgotICAgICAgICBfX3ZhbCgmc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKXt9Ci0KLSAg
ICBfVHlwZSYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPil7Ci0gICAgICAgIHJldHVybiBfX3Zh
cmlhbnRfc3RvcmFnZTxfVHlwZSY+OjpfX2dldChfX3ZhbCk7Ci0gICAgfQotICAgIGNvbnN0ZXhw
ciBfVHlwZSYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVy
biBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSY+OjpfX2dldChfX3ZhbCk7Ci0gICAgfQotCi0gICAg
X1R5cGUmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDwwPil7Ci0gICAgICAgIHJldHVybiBf
X3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSY+OjpfX2dldF9ycmVmKF9fdmFsKTsKLSAgICB9Ci0gICAg
Y29uc3RleHByIF9UeXBlJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4pIGNvbnN0ewot
ICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X19nZXRfcnJlZihfX3Zh
bCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgX19kZXN0cm95KGluX3BsYWNlX2luZGV4X3Q8MD4p
ewotICAgICAgICBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSY+OjpfX2Rlc3Ryb3koX192YWwpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotdW5pb24gX192YXJpYW50X2Rh
dGE8X1R5cGUmJj57Ci0gICAgdHlwZW5hbWUgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJj46Ol9f
dHlwZSBfX3ZhbDsKLSAgICBzdHJ1Y3QgX19kdW1teV90eXBle30gX19kdW1teTsKLQotICAgIGNv
bnN0ZXhwciBfX3ZhcmlhbnRfZGF0YSgpOl9fZHVtbXkoKXt9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQXJnPgotICAgIF9fdmFyaWFudF9kYXRhKGluX3BsYWNlX2luZGV4X3Q8MD4sX0FyZyYm
IF9fYXJnKToKLSAgICAgICAgX192YWwoJl9fYXJnKXt9Ci0KLSAgICBfVHlwZSYmIF9fZ2V0KGlu
X3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5
cGUmJj46Ol9fZ2V0KF9fdmFsKTsKLSAgICB9Ci0gICAgY29uc3RleHByIF9UeXBlJiYgX19nZXQo
aW5fcGxhY2VfaW5kZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3Rv
cmFnZTxfVHlwZSYmPjo6X19nZXQoX192YWwpOwotICAgIH0KLSAgICBfVHlwZSYmIF9fZ2V0X3Jy
ZWYoaW5fcGxhY2VfaW5kZXhfdDwwPil7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFn
ZTxfVHlwZSYmPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBfVHlw
ZSYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVy
biBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYmPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQot
ICAgIHZvaWQgX19kZXN0cm95KGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICBfX3Zhcmlh
bnRfc3RvcmFnZTxfVHlwZSYmPjo6X19kZXN0cm95KF9fdmFsKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci11bmlvbiBfX3ZhcmlhbnRf
ZGF0YTxfSGVhZCxfUmVzdC4uLj57Ci0gICAgX192YXJpYW50X2RhdGE8X0hlYWQ+IF9faGVhZDsK
LSAgICBfX3ZhcmlhbnRfZGF0YTxfUmVzdC4uLj4gX19yZXN0OwotCi0gICAgY29uc3RleHByIF9f
dmFyaWFudF9kYXRhKCk6Ci0gICAgICAgIF9faGVhZCgpe30KLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIC4uLiBfQXJncz4KLSAgICBjb25zdGV4cHIgX192YXJpYW50X2RhdGEoaW5fcGxhY2VfaW5k
ZXhfdDwwPixfQXJncyYmIC4uLiBfX2FyZ3MpOgotICAgICAgICBfX2hlYWQoaW5fcGxhY2U8MD4s
c3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKXt9Ci0gICAgdGVtcGxhdGU8c2l6ZV90IF9J
bmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKGlu
X3BsYWNlX2luZGV4X3Q8X0luZGV4PixfQXJncyYmIC4uLiBfX2FyZ3MpOgotICAgICAgICBfX3Jl
c3QoaW5fcGxhY2U8X0luZGV4LTE+LHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLil7fQot
Ci0gICAgX0hlYWQmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICByZXR1cm4g
X19oZWFkLl9fZ2V0KGluX3BsYWNlPDA+KTsKLSAgICB9Ci0KLSAgICAvKmNvbnN0ZXhwciovIF9I
ZWFkJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9f
aGVhZC5fX2dldF9ycmVmKGluX3BsYWNlPDA+KTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3RleHBy
IGNvbnN0IF9IZWFkJiBfX2dldChpbl9wbGFjZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAgICAg
cmV0dXJuIF9faGVhZC5fX2dldChpbl9wbGFjZTwwPik7Ci0gICAgfQotCi0gICAgY29uc3RleHBy
IGNvbnN0IF9IZWFkJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KSBjb25zdHsKLSAg
ICAgICAgcmV0dXJuIF9faGVhZC5fX2dldF9ycmVmKGluX3BsYWNlPDA+KTsKLSAgICB9Ci0gICAg
Ci0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleD4KLSAgICB0eXBlbmFtZSBfX2luZGV4ZWRfdHlw
ZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSYgX19nZXQoCi0gICAgICAgIGluX3BsYWNlX2lu
ZGV4X3Q8X0luZGV4Pil7Ci0gICAgICAgIHJldHVybiBfX3Jlc3QuX19nZXQoaW5fcGxhY2U8X0lu
ZGV4LTE+KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgotICAgIC8qY29u
c3RleHByKi8gdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LTEsX1Jlc3QuLi4+OjpfX3R5
cGUmJiBfX2dldF9ycmVmKAotICAgICAgICBpbl9wbGFjZV9pbmRleF90PF9JbmRleD4pewotICAg
ICAgICByZXR1cm4gX19yZXN0Ll9fZ2V0X3JyZWYoaW5fcGxhY2U8X0luZGV4LTE+KTsKLSAgICB9
Ci0gICAgCi0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleD4KLSAgICBjb25zdGV4cHIgY29uc3Qg
dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LTEsX1Jlc3QuLi4+OjpfX3R5cGUmIF9fZ2V0
KAotICAgICAgICBpbl9wbGFjZV9pbmRleF90PF9JbmRleD4pIGNvbnN0ewotICAgICAgICByZXR1
cm4gX19yZXN0Ll9fZ2V0KGluX3BsYWNlPF9JbmRleC0xPik7Ci0gICAgfQotCi0gICAgdGVtcGxh
dGU8c2l6ZV90IF9JbmRleD4KLSAgICBjb25zdGV4cHIgY29uc3QgdHlwZW5hbWUgX19pbmRleGVk
X3R5cGU8X0luZGV4LTEsX1Jlc3QuLi4+OjpfX3R5cGUmJiBfX2dldF9ycmVmKAotICAgICAgICBp
bl9wbGFjZV9pbmRleF90PF9JbmRleD4pIGNvbnN0ewotICAgICAgICByZXR1cm4gX19yZXN0Ll9f
Z2V0X3JyZWYoaW5fcGxhY2U8X0luZGV4LTE+KTsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgdm9p
ZCBfX2Rlc3Ryb3koaW5fcGxhY2VfaW5kZXhfdDwwPil7Ci0gICAgICAgIF9faGVhZC5fX2Rlc3Ry
b3koaW5fcGxhY2U8MD4pOwotICAgIH0KLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgotICAg
IHZvaWQgX19kZXN0cm95KGluX3BsYWNlX2luZGV4X3Q8X0luZGV4Pil7Ci0gICAgICAgIF9fcmVz
dC5fX2Rlc3Ryb3koaW5fcGxhY2U8X0luZGV4LTE+KTsKLSAgICB9Ci19OwotCi0KLXRlbXBsYXRl
PHB0cmRpZmZfdC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX2luZGV4X3NlcXVlbmNlewotICAgIHR5
cGVkZWYgX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLixzaXplb2YuLi4oX0luZGljZXMpPiBf
X25leHQ7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgX19sZW5ndGg9c2l6ZW9mLi4uKF9J
bmRpY2VzKTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX190
eXBlX2luZGljZXM7Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBfX3R5cGVfaW5kaWNlczw+ewotICAg
IHR5cGVkZWYgX19pbmRleF9zZXF1ZW5jZTw+IF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIF9UeXBlPgotc3RydWN0IF9fdHlwZV9pbmRpY2VzPF9UeXBlPnsKLSAgICB0eXBlZGVmIF9f
aW5kZXhfc2VxdWVuY2U8MD4gX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUs
dHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fdHlwZV9pbmRpY2VzPF9UeXBlLF9SZXN0Li4u
PnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV9pbmRpY2VzPF9SZXN0Li4uPjo6X190eXBl
OjpfX25leHQgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQ+Ci1zdHJ1
Y3QgX192YXJpYW50X2luZGljZXM7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1z
dHJ1Y3QgX192YXJpYW50X2luZGljZXM8VmFyaWFudDxfVHlwZXMuLi4+PnsKLSAgICB0eXBlZGVm
IHR5cGVuYW1lIF9fdHlwZV9pbmRpY2VzPF9UeXBlcy4uLj46Ol9fdHlwZSBfX3R5cGU7Ci19Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2Vz
PXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotc3RydWN0IF9f
bW92ZV9jb25zdHJ1Y3Rfb3BfdGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0
cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX19tb3ZlX2NvbnN0cnVjdF9vcF90YWJsZTxf
VmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0gICAgdHlwZWRlZiB2b2lk
KCogY29uc3QgX19mdW5jX3R5cGUpKF9WYXJpYW50KixfVmFyaWFudCYpOwotICAgIAotICAgIHRl
bXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGljIHZvaWQgX19tb3ZlX2NvbnN0cnVj
dF9mdW5jKAotICAgICAgICBfVmFyaWFudCAqIF9fbGhzLF9WYXJpYW50JiBfX3Jocyl7Ci0gICAg
ICAgIF9fbGhzLT50ZW1wbGF0ZSBfX2VtcGxhY2VfY29uc3RydWN0PF9JbmRleD4oCi0gICAgICAg
ICAgICBzdGQ6Om1vdmUoZ2V0PF9JbmRleD4oX19yaHMpKSk7Ci0gICAgfQotCi0gICAgc3RhdGlj
IGNvbnN0IF9fZnVuY190eXBlIF9fYXBwbHlbc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3Qg
dHlwZW5hbWUgX19tb3ZlX2NvbnN0cnVjdF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVl
bmNlPF9JbmRpY2VzLi4uPj46OgotX19mdW5jX3R5cGUKLV9fbW92ZV9jb25zdHJ1Y3Rfb3BfdGFi
bGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2FwcGx5WwotICAg
IHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9fbW92ZV9jb25zdHJ1Y3RfZnVuYzxf
SW5kaWNlcz4uLi4KLSAgICB9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAg
ICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50
Pjo6X190eXBlPgotc3RydWN0IF9fbW92ZV9hc3NpZ25fb3BfdGFibGU7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX19tb3ZlX2Fz
c2lnbl9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0g
ICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19mdW5jX3R5cGUpKF9WYXJpYW50KixfVmFyaWFudCYp
OwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGljIHZvaWQg
X19tb3ZlX2Fzc2lnbl9mdW5jKAotICAgICAgICBfVmFyaWFudCAqIF9fbGhzLF9WYXJpYW50JiBf
X3Jocyl7Ci0gICAgICAgIGdldDxfSW5kZXg+KCpfX2xocyk9c3RkOjptb3ZlKGdldDxfSW5kZXg+
KF9fcmhzKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IF9fZnVuY190eXBlIF9fYXBwbHlb
c2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxw
dHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19tb3ZlX2Fzc2lnbl9vcF90
YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46OgotX19mdW5jX3R5
cGUKLV9fbW92ZV9hc3NpZ25fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5k
aWNlcy4uLj4+OjpfX2FwcGx5WwotICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAg
Jl9fbW92ZV9hc3NpZ25fZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFy
aWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotc3RydWN0IF9fY29weV9jb25zdHJ1Y3Rf
b3BfdGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0lu
ZGljZXM+Ci1zdHJ1Y3QgX19jb3B5X2NvbnN0cnVjdF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4
X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0gICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19mdW5j
X3R5cGUpKF9WYXJpYW50KixfVmFyaWFudCBjb25zdCYpOwotICAgIAotICAgIHRlbXBsYXRlPHB0
cmRpZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGljIHZvaWQgX19jb3B5X2NvbnN0cnVjdF9mdW5jKAot
ICAgICAgICBfVmFyaWFudCAqIF9fbGhzLF9WYXJpYW50IGNvbnN0JiBfX3Jocyl7Ci0gICAgICAg
IF9fbGhzLT50ZW1wbGF0ZSBfX2VtcGxhY2VfY29uc3RydWN0PF9JbmRleD4oCi0gICAgICAgICAg
ICBnZXQ8X0luZGV4PihfX3JocykpOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBfX2Z1bmNf
dHlwZSBfX2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyldOwotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fY29w
eV9jb25zdHJ1Y3Rfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4u
Lj4+OjoKLV9fZnVuY190eXBlCi1fX2NvcHlfY29uc3RydWN0X29wX3RhYmxlPF9WYXJpYW50LF9f
aW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19hcHBseVsKLSAgICBzaXplb2YuLi4oX0lu
ZGljZXMpXT17Ci0gICAgICAgICZfX2NvcHlfY29uc3RydWN0X2Z1bmM8X0luZGljZXM+Li4uCi0g
ICAgfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0gICAgICAgICB0eXBlbmFtZSBf
SW5kaWNlcz10eXBlbmFtZSBfX3ZhcmlhbnRfaW5kaWNlczxfVmFyaWFudD46Ol9fdHlwZT4KLXN0
cnVjdCBfX2NvcHlfYXNzaWduX29wX3RhYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFu
dCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9fY29weV9hc3NpZ25fb3BfdGFibGU8
X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9p
ZCgqIGNvbnN0IF9fZnVuY190eXBlKShfVmFyaWFudCosX1ZhcmlhbnQgY29uc3QmKTsKLSAgICAK
LSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyB2b2lkIF9fY29weV9h
c3NpZ25fZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgKiBfX2xocyxfVmFyaWFudCBjb25zdCYgX19y
aHMpewotICAgICAgICBnZXQ8X0luZGV4PigqX19saHMpPWdldDxfSW5kZXg+KF9fcmhzKTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgX19mdW5jX3R5cGUgX19hcHBseVtzaXplb2YuLi4oX0lu
ZGljZXMpXTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4g
X0luZGljZXM+Ci1jb25zdCB0eXBlbmFtZSBfX2NvcHlfYXNzaWduX29wX3RhYmxlPF9WYXJpYW50
LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6Ci1fX2Z1bmNfdHlwZQotX19jb3B5X2Fz
c2lnbl9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9f
YXBwbHlbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09ewotICAgICAgICAmX19jb3B5X2Fzc2ln
bl9mdW5jPF9JbmRpY2VzPi4uLgotICAgIH07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50
LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGljZXM8
X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19kZXN0cm95X29wX3RhYmxlOwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9fZGVz
dHJveV9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0g
ICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19mdW5jX3R5cGUpKF9WYXJpYW50Kik7Ci0gICAgCi0g
ICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3lf
ZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgKiBfX3NlbGYpewotICAgICAgICBpZihfX3NlbGYtPl9f
aW5kZXg+PTApewotICAgICAgICAgICAgX19zZWxmLT5fX3N0b3JhZ2UuX19kZXN0cm95KGluX3Bs
YWNlPF9JbmRleD4pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IF9fZnVu
Y190eXBlIF9fYXBwbHlbc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci19OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19k
ZXN0cm95X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6
Ci1fX2Z1bmNfdHlwZQotX19kZXN0cm95X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVu
Y2U8X0luZGljZXMuLi4+Pjo6X19hcHBseVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0g
ICAgICAgICZfX2Rlc3Ryb3lfZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9f
dmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotc3RydWN0IF9fc3dhcF9vcF90YWJs
ZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4K
LXN0cnVjdCBfX3N3YXBfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNl
cy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fZnVuY190eXBlKShfVmFyaWFudCYs
X1ZhcmlhbnQmKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4PgotICAgIHN0
YXRpYyB2b2lkIF9fc3dhcF9mdW5jKAotICAgICAgICBfVmFyaWFudCAmIF9fbGhzLF9WYXJpYW50
ICYgX19yaHMpewotICAgICAgICBzd2FwKGdldDxfSW5kZXg+KF9fbGhzKSxnZXQ8X0luZGV4Pihf
X3JocykpOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlwZSBfX2FwcGx5W3Np
emVvZi4uLihfSW5kaWNlcyldOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRy
ZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fc3dhcF9vcF90YWJsZTxfVmFy
aWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46OgotX19mdW5jX3R5cGUKLV9fc3dh
cF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fYXBw
bHlbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09ewotICAgICAgICAmX19zd2FwX2Z1bmM8X0lu
ZGljZXM+Li4uCi0gICAgfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0gICAgICAg
ICB0eXBlbmFtZSBfSW5kaWNlcz10eXBlbmFtZSBfX3ZhcmlhbnRfaW5kaWNlczxfVmFyaWFudD46
Ol9fdHlwZT4KLXN0cnVjdCBfX2VxdWFsaXR5X29wX3RhYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9fZXF1YWxpdHlfb3Bf
dGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVk
ZWYgYm9vbCgqIGNvbnN0IF9fY29tcGFyZV9mdW5jX3R5cGUpKF9WYXJpYW50IGNvbnN0JixfVmFy
aWFudCBjb25zdCYpOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIF9fZXF1YWxpdHlfY29tcGFyZV9mdW5jKAotICAgICAgICBf
VmFyaWFudCBjb25zdCYgX19saHMsX1ZhcmlhbnQgY29uc3QmIF9fcmhzKXsKLSAgICAgICAgcmV0
dXJuIGdldDxfSW5kZXg+KF9fbGhzKT09Z2V0PF9JbmRleD4oX19yaHMpOwotICAgIH0KLQotICAg
IHN0YXRpYyBjb25zdGV4cHIgX19jb21wYXJlX2Z1bmNfdHlwZSBfX2VxdWFsaXR5X2NvbXBhcmVb
c2l6ZW9mLi4uKF9JbmRpY2VzKV09ewotICAgICAgICAmX19lcXVhbGl0eV9jb21wYXJlX2Z1bmM8
X0luZGljZXM+Li4uCi0gICAgfTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0
cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1jb25zdGV4cHIgdHlwZW5hbWUgX19lcXVhbGl0eV9vcF90
YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46OgotX19jb21wYXJl
X2Z1bmNfdHlwZQotX19lcXVhbGl0eV9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNl
PF9JbmRpY2VzLi4uPj46Ol9fZXF1YWxpdHlfY29tcGFyZVsKLSAgICBzaXplb2YuLi4oX0luZGlj
ZXMpXTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0gICAgICAgICB0eXBlbmFtZSBf
SW5kaWNlcz10eXBlbmFtZSBfX3ZhcmlhbnRfaW5kaWNlczxfVmFyaWFudD46Ol9fdHlwZT4KLXN0
cnVjdCBfX2xlc3NfdGhhbl9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQs
cHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX2xlc3NfdGhhbl9vcF90YWJsZTxfVmFy
aWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0gICAgdHlwZWRlZiBib29sKCog
Y29uc3QgX19jb21wYXJlX2Z1bmNfdHlwZSkoX1ZhcmlhbnQgY29uc3QmLF9WYXJpYW50IGNvbnN0
Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgX19sZXNzX3RoYW5fY29tcGFyZV9mdW5jKAotICAgICAgICBfVmFyaWFudCBj
b25zdCYgX19saHMsX1ZhcmlhbnQgY29uc3QmIF9fcmhzKXsKLSAgICAgICAgcmV0dXJuIGdldDxf
SW5kZXg+KF9fbGhzKTxnZXQ8X0luZGV4PihfX3Jocyk7Ci0gICAgfQotCi0gICAgc3RhdGljIGNv
bnN0ZXhwciBfX2NvbXBhcmVfZnVuY190eXBlIF9fbGVzc190aGFuX2NvbXBhcmVbc2l6ZW9mLi4u
KF9JbmRpY2VzKV09ewotICAgICAgICAmX19sZXNzX3RoYW5fY29tcGFyZV9mdW5jPF9JbmRpY2Vz
Pi4uLgotICAgIH07Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3Qg
Li4uIF9JbmRpY2VzPgotY29uc3RleHByIHR5cGVuYW1lIF9fbGVzc190aGFuX29wX3RhYmxlPF9W
YXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6Ci1fX2NvbXBhcmVfZnVuY190
eXBlCi1fX2xlc3NfdGhhbl9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRp
Y2VzLi4uPj46Ol9fbGVzc190aGFuX2NvbXBhcmVbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50Pgotc3RydWN0IF9fdmFyaWFudF9zdG9yYWdl
X3R5cGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9EZXJpdmVkLGJvb2wgX190cml2aWFsX2Rlc3Ry
dWN0b3I+Ci1zdHJ1Y3QgX192YXJpYW50X2Jhc2UKLXsKLSAgICB+X192YXJpYW50X2Jhc2UoKXsK
LSAgICAgICAgc3RhdGljX2Nhc3Q8X0Rlcml2ZWQqPih0aGlzKS0+X19kZXN0cm95X3NlbGYoKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfRGVyaXZlZD4KLXN0cnVjdCBfX3Zhcmlh
bnRfYmFzZTxfRGVyaXZlZCx0cnVlPnsKLX07Ci0KLQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZz
ZXQsdHlwZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSwKLSAgICAgICAgIHR5cGVuYW1lIF9UeXBlLHR5
cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbGxfaW5kaWNlc19oZWxwZXI7Ci0KLXRlbXBs
YXRlPHB0cmRpZmZfdCBfT2Zmc2V0LHB0cmRpZmZfdCAuLi4gX0luZGljZXMsCi0gICAgICAgICB0
eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfaW5kaWNlc19o
ZWxwZXI8Ci0gICAgX09mZnNldCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiwKLSAgICBf
VHlwZSxfVHlwZSxfUmVzdC4uLj57Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2FsbF9pbmRpY2Vz
X2hlbHBlcjwKLSAgICAgICAgX09mZnNldCsxLF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4s
X09mZnNldD4sX1R5cGUsX1Jlc3QuLi4+OjpfX3R5cGUKLSAgICAgICAgX190eXBlOwotfTsKLQot
dGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSwKLSAg
ICAgICAgIHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4K
LXN0cnVjdCBfX2FsbF9pbmRpY2VzX2hlbHBlcjxfT2Zmc2V0LF9DdXJyZW50U2VxdWVuY2UsX1R5
cGUsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hbGxfaW5kaWNlc19o
ZWxwZXI8Ci0gICAgICAgIF9PZmZzZXQrMSxfQ3VycmVudFNlcXVlbmNlLF9UeXBlLF9SZXN0Li4u
Pjo6X190eXBlIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfT2Zmc2V0LHR5cGVu
YW1lIF9DdXJyZW50U2VxdWVuY2UsdHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX19hbGxfaW5kaWNl
c19oZWxwZXI8X09mZnNldCxfQ3VycmVudFNlcXVlbmNlLF9UeXBlPnsKLSAgICB0eXBlZGVmIF9D
dXJyZW50U2VxdWVuY2UgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlw
ZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9pbmRpY2VzewotICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX19hbGxfaW5kaWNlc19oZWxwZXI8Ci0gICAgICAgIDAsX19pbmRleF9zZXF1ZW5jZTw+
LF9UeXBlLF9UeXBlcy4uLj46Ol9fdHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSAuLi4gX1NlcXVlbmNlcz4KLXN0cnVjdCBfX2NvbWJpbmVfc2VxdWVuY2VzOwotCi10ZW1wbGF0
ZTxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzMSxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzMj4KLXN0cnVj
dCBfX2NvbWJpbmVfc2VxdWVuY2VzPAotICAgIF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMxLi4u
PixfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzMi4uLj4+ewotICAgIHR5cGVkZWYgX19pbmRleF9z
ZXF1ZW5jZTxfSW5kaWNlczEuLi4sX0luZGljZXMyLi4uPiBfX3R5cGU7Ci19OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBfU2VxdWVuY2UsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fY29tYmlu
ZV9zZXF1ZW5jZXM8X1NlcXVlbmNlLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9f
Y29tYmluZV9zZXF1ZW5jZXM8Ci0gICAgICAgIF9TZXF1ZW5jZSwKLSAgICAgICAgdHlwZW5hbWUg
X19jb21iaW5lX3NlcXVlbmNlczxfUmVzdC4uLj46Ol9fdHlwZT46Ol9fdHlwZSBfX3R5cGU7Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSW5kaWNlcz4KLXN0cnVjdCBfX2ZpcnN0X2luZGV4Owot
Ci10ZW1wbGF0ZTxwdHJkaWZmX3QgX0ZpcnN0SW5kZXgscHRyZGlmZl90IC4uLiBfUmVzdD4KLXN0
cnVjdCBfX2ZpcnN0X2luZGV4PF9faW5kZXhfc2VxdWVuY2U8X0ZpcnN0SW5kZXgsX1Jlc3QuLi4+
PnsKLSAgICBzdGF0aWMgY29uc3RleHByIHB0cmRpZmZfdCBfX3ZhbHVlPV9GaXJzdEluZGV4Owot
fTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJlbnRTZXF1ZW5j
ZSwKLSAgICAgICAgIHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3Qg
X19jb25zdHJ1Y3RpYmxlX21hdGNoZXNfaGVscGVyOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09m
ZnNldCx0eXBlbmFtZSBfU2VxdWVuY2UsdHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX19jb25zdHJ1
Y3RpYmxlX21hdGNoZXNfaGVscGVyPAotICAgIF9PZmZzZXQsX1NlcXVlbmNlLF9UeXBlPnsKLSAg
ICB0eXBlZGVmIF9TZXF1ZW5jZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxib29sIF9BY2NlcHQs
cHRyZGlmZl90IF9FbnRyeT4KLXN0cnVjdCBfX3NlcXVlbmNlX29yX2VtcHR5ewotICAgIHR5cGVk
ZWYgX19pbmRleF9zZXF1ZW5jZTw+IF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBf
RW50cnk+Ci1zdHJ1Y3QgX19zZXF1ZW5jZV9vcl9lbXB0eTx0cnVlLF9FbnRyeT57Ci0gICAgdHlw
ZWRlZiBfX2luZGV4X3NlcXVlbmNlPF9FbnRyeT4gX190eXBlOwotfTsKLQotdGVtcGxhdGU8cHRy
ZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSwKLSAgICAgICAgIHR5cGVu
YW1lIF9UeXBlLHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2Nv
bnN0cnVjdGlibGVfbWF0Y2hlc19oZWxwZXI8Ci0gICAgX09mZnNldCxfQ3VycmVudFNlcXVlbmNl
LF9UeXBlLF9IZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmCi0gICAgdHlwZW5hbWUgX19jb25z
dHJ1Y3RpYmxlX21hdGNoZXNfaGVscGVyPAotICAgICAgICBfT2Zmc2V0KzEsCi0gICAgICAgIHR5
cGVuYW1lIF9fY29tYmluZV9zZXF1ZW5jZXM8Ci0gICAgICAgICAgICBfQ3VycmVudFNlcXVlbmNl
LAotICAgICAgICAgICAgdHlwZW5hbWUgX19zZXF1ZW5jZV9vcl9lbXB0eTwKLSAgICAgICAgICAg
ICAgICBzdGQ6OmlzX2NvbnN0cnVjdGlibGU8X0hlYWQsX1R5cGU+Ojp2YWx1ZSwKLSAgICAgICAg
ICAgICAgICBfT2Zmc2V0Pjo6X190eXBlPjo6X190eXBlLAotICAgICAgICBfVHlwZSxfUmVzdC4u
Lj46Ol9fdHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFt
ZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fY29uc3RydWN0aWJsZV9tYXRjaGVzewotICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX19jb25zdHJ1Y3RpYmxlX21hdGNoZXNfaGVscGVyPAotICAgICAgICAwLF9f
aW5kZXhfc2VxdWVuY2U8PixfVHlwZSxfVHlwZXMuLi4+OjpfX3R5cGUgX190eXBlOwotfTsKK3Vz
aW5nIE1vbm9zdGF0ZSA9IHN0ZDo6bW9ub3N0YXRlOwordGVtcGxhdGU8dHlwZW5hbWUuLi4gVHlw
ZXM+Cit1c2luZyBWYXJpYW50ID0gc3RkOjp2YXJpYW50PFR5cGVzLi4uPjsKIAogdGVtcGxhdGU8
dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3R5cGVfaW5kZXhf
dG9fY29uc3RydWN0ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hbGxfaW5kaWNlczxfVHlwZSxf
VHlwZXMuLi4+OjpfX3R5cGUgX19kaXJlY3RfbWF0Y2hlczsKLSAgICB0eXBlZGVmIHR5cGVuYW1l
IF9fYWxsX2luZGljZXM8Ci0gICAgICAgIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PAotICAg
ICAgICAgICAgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPF9UeXBlPjo6dHlwZQotICAg
ICAgICAgICAgPjo6dHlwZSxfVHlwZXMuLi4+OjpfX3R5cGUgX192YWx1ZV9tYXRjaGVzOwotICAg
IHR5cGVkZWYgdHlwZW5hbWUgX19hbGxfaW5kaWNlczwKLSAgICAgICAgX1R5cGUsCi0gICAgICAg
IHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PAotICAgICAgICAgICAgdHlwZW5hbWUgc3RkOjpy
ZW1vdmVfcmVmZXJlbmNlPF9UeXBlcz46OnR5cGUKLSAgICAgICAgICAgID46OnR5cGUuLi4+Ojpf
X3R5cGUgX19ycmVmX21hdGNoZXM7Ci0KLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fY29uc3RydWN0
aWJsZV9tYXRjaGVzPF9UeXBlLF9UeXBlcy4uLj46Ol9fdHlwZQotICAgIF9fY29uc3RydWN0aWJs
ZXM7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KAotICAgICAgICAoX19kaXJlY3RfbWF0Y2hlczo6X19s
ZW5ndGg+MCkgfHwKLSAgICAgICAgKF9fdmFsdWVfbWF0Y2hlczo6X19sZW5ndGg+MCkgfHwKLSAg
ICAgICAgKF9fcnJlZl9tYXRjaGVzOjpfX2xlbmd0aD4wKSB8fAotICAgICAgICAoX19jb25zdHJ1
Y3RpYmxlczo6X19sZW5ndGg9PTEpLAotICAgICAgICAiRm9yIGNvbnZlcnNpb24gY29uc3RydWN0
aW9uIG9mIHZhcmlhbnRzLCBleGFjdGx5IG9uZSB0eXBlIG11c3QgYmUgY29uc3RydWN0aWJsZSIp
OwotICAgIAotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19jb21iaW5lX3NlcXVlbmNlczwKLSAgICAg
ICAgX19kaXJlY3RfbWF0Y2hlcyxfX3ZhbHVlX21hdGNoZXMsX19ycmVmX21hdGNoZXMsCi0gICAg
ICAgIF9fY29uc3RydWN0aWJsZXM+OjpfX3R5cGUgX19hbGxfbWF0Y2hlczsKLSAgICAKLSAgICBz
dGF0aWMgY29uc3RleHByIHB0cmRpZmZfdCBfX3ZhbHVlPV9fZmlyc3RfaW5kZXg8X19hbGxfbWF0
Y2hlcz46Ol9fdmFsdWU7Ci19OwotCi1zdHJ1Y3QgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXJ7
Ci0gICAgdGVtcGxhdGU8Ci0gICAgICAgIHB0cmRpZmZfdCBfSW5kZXgsCi0gICAgICAgIGJvb2wg
X19jb25zdHJ1Y3RfZGlyZWN0bHksCi0gICAgICAgIGJvb2wgX19pbmRleGVkX3R5cGVfaGFzX25v
dGhyb3dfbW92ZSwKLSAgICAgICAgYm9vbCBfX290aGVyX3R5cGVzX2hhdmVfbm90aHJvd19tb3Zl
PgotICAgIHN0cnVjdCBfX2hlbHBlcjsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50
LAotICAgICAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRp
Y2VzPF9WYXJpYW50Pjo6X190eXBlPgotICAgIHN0cnVjdCBfX29wX3RhYmxlOwotfTsKLQotdGVt
cGxhdGU8Ci0gICAgcHRyZGlmZl90IF9JbmRleCwKLSAgICBib29sIF9fb3RoZXJfdHlwZXNfaGF2
ZV9ub3Rocm93X21vdmU+Ci1zdHJ1Y3QgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9faGVs
cGVyPAotICAgIF9JbmRleCxmYWxzZSx0cnVlLF9fb3RoZXJfdHlwZXNfaGF2ZV9ub3Rocm93X21v
dmU+ewotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsdHlwZW5hbWUgLi4uIF9Bcmdz
PgotICAgIHN0YXRpYyB2b2lkIF9fdHJhbXBvbGluZShfVmFyaWFudCYgX192LF9BcmdzJiYgLi4u
IF9fYXJncyl7Ci0gICAgICAgIF9fdi50ZW1wbGF0ZSBfX3R3b19zdGFnZV9yZXBsYWNlPF9JbmRl
eD4oX19hcmdzLi4uKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTwKLSAgICBwdHJkaWZmX3QgX0lu
ZGV4LAotICAgIGJvb2wgX19pbmRleGVkX3R5cGVfaGFzX25vdGhyb3dfbW92ZSwKLSAgICBib29s
IF9fb3RoZXJfdHlwZXNfaGF2ZV9ub3Rocm93X21vdmU+Ci1zdHJ1Y3QgX19yZXBsYWNlX2NvbnN0
cnVjdF9oZWxwZXI6Ol9faGVscGVyPAotICAgIF9JbmRleCx0cnVlLF9faW5kZXhlZF90eXBlX2hh
c19ub3Rocm93X21vdmUsCi0gICAgX19vdGhlcl90eXBlc19oYXZlX25vdGhyb3dfbW92ZT57Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAg
c3RhdGljIHZvaWQgX190cmFtcG9saW5lKF9WYXJpYW50JiBfX3YsX0FyZ3MmJiAuLi4gX19hcmdz
KXsKLSAgICAgICAgX192LnRlbXBsYXRlIF9fZGlyZWN0X3JlcGxhY2U8X0luZGV4PihzdGQ6OmZv
cndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgIH0KLX07Ci0KLQotdGVtcGxhdGU8Ci0gICAg
cHRyZGlmZl90IF9JbmRleD4KLXN0cnVjdCBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19o
ZWxwZXI8Ci0gICAgX0luZGV4LGZhbHNlLGZhbHNlLHRydWU+ewotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1ZhcmlhbnQsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHN0YXRpYyB2b2lkIF9fdHJh
bXBvbGluZShfVmFyaWFudCYgX192LF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIF9fdi50
ZW1wbGF0ZSBfX2xvY2FsX2JhY2t1cF9yZXBsYWNlPF9JbmRleD4oc3RkOjpmb3J3YXJkPF9Bcmdz
PihfX2FyZ3MpLi4uKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTwKLSAgICBwdHJkaWZmX3QgX0lu
ZGV4Pgotc3RydWN0IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX2hlbHBlcjwKLSAgICBf
SW5kZXgsZmFsc2UsZmFsc2UsZmFsc2U+ewotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Zhcmlh
bnQsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHN0YXRpYyB2b2lkIF9fdHJhbXBvbGluZShfVmFy
aWFudCYgX192LF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIF9fdi50ZW1wbGF0ZSBfX2Rp
cmVjdF9yZXBsYWNlPF9JbmRleD4oc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRp
Y2VzPgotc3RydWN0IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPF9WYXJp
YW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIHZvaWQoKiBj
b25zdCBfX21vdmVfZnVuY190eXBlKShfVmFyaWFudCosX1ZhcmlhbnQmKTsKLSAgICB0eXBlZGVm
IHZvaWQoKiBjb25zdCBfX2NvcHlfZnVuY190eXBlKShfVmFyaWFudCosX1ZhcmlhbnQgY29uc3Qm
KTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyB2b2lk
IF9fbW92ZV9hc3NpZ25fZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgKiBfX2xocyxfVmFyaWFudCYg
X19yaHMpewotICAgICAgICBfX2xocy0+dGVtcGxhdGUgX19yZXBsYWNlX2NvbnN0cnVjdDxfSW5k
ZXg+KHN0ZDo6bW92ZShnZXQ8X0luZGV4PihfX3JocykpKTsKLSAgICAgICAgX19yaHMuX19kZXN0
cm95X3NlbGYoKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4PgotICAg
IHN0YXRpYyB2b2lkIF9fY29weV9hc3NpZ25fZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgKiBfX2xo
cyxfVmFyaWFudCBjb25zdCYgX19yaHMpewotICAgICAgICBfX2xocy0+dGVtcGxhdGUgX19yZXBs
YWNlX2NvbnN0cnVjdDxfSW5kZXg+KGdldDxfSW5kZXg+KF9fcmhzKSk7Ci0gICAgfQotICAgIAot
ICAgIHN0YXRpYyBjb25zdCBfX21vdmVfZnVuY190eXBlIF9fbW92ZV9hc3NpZ25bc2l6ZW9mLi4u
KF9JbmRpY2VzKV07Ci0gICAgc3RhdGljIGNvbnN0IF9fY29weV9mdW5jX3R5cGUgX19jb3B5X2Fz
c2lnbltzaXplb2YuLi4oX0luZGljZXMpXTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJp
YW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1jb25zdCB0eXBlbmFtZSBfX3JlcGxhY2VfY29u
c3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTwKLSAgICBfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNl
PF9JbmRpY2VzLi4uPj46Ol9fbW92ZV9mdW5jX3R5cGUKLV9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVs
cGVyOjpfX29wX3RhYmxlPAotICAgIF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMu
Li4+Pjo6X19tb3ZlX2Fzc2lnblsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAg
ICZfX21vdmVfYXNzaWduX2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9f
cmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPAotICAgIF9WYXJpYW50LF9faW5k
ZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19jb3B5X2Z1bmNfdHlwZQotX19yZXBsYWNlX2Nv
bnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8Ci0gICAgX1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5j
ZTxfSW5kaWNlcy4uLj4+OjpfX2NvcHlfYXNzaWduWwotICAgIHNpemVvZi4uLihfSW5kaWNlcyld
PXsKLSAgICAgICAgJl9fY29weV9hc3NpZ25fZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OwotCi10
ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHB0cmRpZmZfdCBfTWFza0luZGV4LHR5cGVuYW1lIF9T
dG9yYWdlPgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2Vfb3BzewotICAgIHN0YXRpYyB2b2lkIF9f
bW92ZV9jb25zdHJ1Y3RfZnVuYygKLSAgICAgICAgX1N0b3JhZ2UgKiBfX2Rlc3QsX1N0b3JhZ2Um
IF9fc291cmNlKXsKLSAgICAgICAgbmV3KF9fZGVzdCkgX1N0b3JhZ2UoCi0gICAgICAgICAgICBp
bl9wbGFjZTxfSW5kZXg+LAotICAgICAgICAgICAgc3RkOjptb3ZlKF9fc291cmNlLl9fZ2V0KGlu
X3BsYWNlPF9JbmRleD4pKSk7Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIF9fZGVzdHJveV9mdW5j
KF9TdG9yYWdlICogX19vYmopewotICAgICAgICBfX29iai0+X19kZXN0cm95KGluX3BsYWNlPF9J
bmRleD4pOwotICAgIH07Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1l
IF9TdG9yYWdlPgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2Vfb3BzPF9JbmRleCxfSW5kZXgsX1N0
b3JhZ2U+ewotICAgIHN0YXRpYyB2b2lkIF9fbW92ZV9jb25zdHJ1Y3RfZnVuYyhfU3RvcmFnZSAq
LF9TdG9yYWdlJil7Ci0gICAgICAgIF9fVEhST1dfRVhDRVBUSU9OKHN0ZDo6YmFkX2FsbG9jKCkp
OwotICAgIH07Ci0gICAgc3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMoX1N0b3JhZ2UgKil7Ci0g
ICAgICAgIF9fVEhST1dfRVhDRVBUSU9OKHN0ZDo6YmFkX2FsbG9jKCkpOwotICAgIH07Ci19Owot
Ci10ZW1wbGF0ZTxwdHJkaWZmX3QgX01hc2tJbmRleCx0eXBlbmFtZSBfU3RvcmFnZSx0eXBlbmFt
ZSBfSW5kaWNlcz4KLXN0cnVjdCBfX2JhY2t1cF9zdG9yYWdlX29wX3RhYmxlOwotCi10ZW1wbGF0
ZTxwdHJkaWZmX3QgX01hc2tJbmRleCx0eXBlbmFtZSBfU3RvcmFnZSxwdHJkaWZmX3QgLi4uIF9J
bmRpY2VzPgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8Ci0gICAgX01hc2tJbmRl
eCxfU3RvcmFnZSxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiA+Ci17Ci0gICAgdHlwZWRl
ZiB2b2lkICgqX19tb3ZlX2Z1bmNfdHlwZSkoX1N0b3JhZ2UgKiBfX2Rlc3QsX1N0b3JhZ2UmIF9f
c291cmNlKTsKLSAgICB0eXBlZGVmIHZvaWQgKCpfX2Rlc3Ryb3lfZnVuY190eXBlKShfU3RvcmFn
ZSAqIF9fb2JqKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgotICAgIHN0cnVj
dCBfX2hlbHBlcnsKLSAgICAgICAgdHlwZWRlZiBfX2JhY2t1cF9zdG9yYWdlX29wczxfSW5kZXgs
X01hc2tJbmRleCxfU3RvcmFnZT4gX19vcHM7Ci0gICAgfTsKLQotICAgIHN0YXRpYyBjb25zdCBf
X21vdmVfZnVuY190eXBlIF9fbW92ZV9vcHNbc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci0gICAgc3Rh
dGljIGNvbnN0IF9fZGVzdHJveV9mdW5jX3R5cGUgX19kZXN0cm95X29wc1tzaXplb2YuLi4oX0lu
ZGljZXMpXTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfTWFza0luZGV4LHR5cGVuYW1lIF9T
dG9yYWdlLHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1jb25zdCB0eXBlbmFtZSBfX2JhY2t1cF9z
dG9yYWdlX29wX3RhYmxlPAotICAgIF9NYXNrSW5kZXgsX1N0b3JhZ2UsX19pbmRleF9zZXF1ZW5j
ZTxfSW5kaWNlcy4uLj4gPjo6X19tb3ZlX2Z1bmNfdHlwZQotX19iYWNrdXBfc3RvcmFnZV9vcF90
YWJsZTwKLSAgICBfTWFza0luZGV4LF9TdG9yYWdlLF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMu
Li4+ID46Ol9fbW92ZV9vcHNbCi0gICAgICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAg
ICAgJl9faGVscGVyPF9JbmRpY2VzPjo6X19vcHM6Ol9fbW92ZV9jb25zdHJ1Y3RfZnVuYy4uLgot
ICAgIH07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfTWFza0luZGV4LHR5cGVuYW1lIF9TdG9yYWdl
LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1jb25zdCB0eXBlbmFtZSBfX2JhY2t1cF9zdG9yYWdl
X29wX3RhYmxlPAotICAgIF9NYXNrSW5kZXgsX1N0b3JhZ2UsX19pbmRleF9zZXF1ZW5jZTxfSW5k
aWNlcy4uLj4gPjo6X19kZXN0cm95X2Z1bmNfdHlwZQotX19iYWNrdXBfc3RvcmFnZV9vcF90YWJs
ZTwKLSAgICBfTWFza0luZGV4LF9TdG9yYWdlLF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+
ID46Ol9fZGVzdHJveV9vcHNbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09ewotICAgICAgICAm
X19oZWxwZXI8X0luZGljZXM+OjpfX29wczo6X19kZXN0cm95X2Z1bmMuLi4KLSAgICB9OwotCi10
ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19i
YWNrdXBfc3RvcmFnZXsKLSAgICB0eXBlZGVmIF9fdmFyaWFudF9kYXRhPF9UeXBlcy4uLj4gX19z
dG9yYWdlX3R5cGU7Ci0KLSAgICB0eXBlZGVmIF9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8Ci0g
ICAgICAgIF9JbmRleCxfX3N0b3JhZ2VfdHlwZSx0eXBlbmFtZSBfX3R5cGVfaW5kaWNlczxfVHlw
ZXMuLi4+OjpfX3R5cGU+Ci0gICAgX19vcF90YWJsZV90eXBlOwotCi0gICAgcHRyZGlmZl90IF9f
YmFja3VwX2luZGV4OwotICAgIF9fc3RvcmFnZV90eXBlJiBfX2xpdmVfc3RvcmFnZTsKLSAgICBf
X3N0b3JhZ2VfdHlwZSBfX2JhY2t1cDsKLQotICAgIF9fYmFja3VwX3N0b3JhZ2UocHRyZGlmZl90
IF9fbGl2ZV9pbmRleF8sX19zdG9yYWdlX3R5cGUmIF9fbGl2ZV9zdG9yYWdlXyk6Ci0gICAgICAg
IF9fYmFja3VwX2luZGV4KF9fbGl2ZV9pbmRleF8pLF9fbGl2ZV9zdG9yYWdlKF9fbGl2ZV9zdG9y
YWdlXyl7Ci0gICAgICAgIGlmKF9fYmFja3VwX2luZGV4Pj0wKXsKLSAgICAgICAgICAgIF9fb3Bf
dGFibGVfdHlwZTo6X19tb3ZlX29wc1tfX2JhY2t1cF9pbmRleF0oCi0gICAgICAgICAgICAgICAg
Jl9fYmFja3VwLF9fbGl2ZV9zdG9yYWdlKTsKLSAgICAgICAgICAgIF9fb3BfdGFibGVfdHlwZTo6
X19kZXN0cm95X29wc1tfX2JhY2t1cF9pbmRleF0oCi0gICAgICAgICAgICAgICAgJl9fbGl2ZV9z
dG9yYWdlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICB2b2lkIF9fZGVzdHJveSgpewotICAgICAg
ICBpZihfX2JhY2t1cF9pbmRleD49MCkKLSAgICAgICAgICAgIF9fb3BfdGFibGVfdHlwZTo6X19k
ZXN0cm95X29wc1tfX2JhY2t1cF9pbmRleF0oCi0gICAgICAgICAgICAgICAgJl9fYmFja3VwKTsK
LSAgICAgICAgX19iYWNrdXBfaW5kZXg9LTE7Ci0gICAgfQotICAgIAotICAgIH5fX2JhY2t1cF9z
dG9yYWdlKCl7Ci0gICAgICAgIGlmKF9fYmFja3VwX2luZGV4Pj0wKXsKLSAgICAgICAgICAgIF9f
b3BfdGFibGVfdHlwZTo6X19tb3ZlX29wc1tfX2JhY2t1cF9pbmRleF0oCi0gICAgICAgICAgICAg
ICAgJl9fbGl2ZV9zdG9yYWdlLF9fYmFja3VwKTsKLSAgICAgICAgICAgIF9fZGVzdHJveSgpOwot
ICAgICAgICB9Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0
cnVjdCBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFk
LHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X0hl
YWQsX1Jlc3QuLi4+Citjb25zdGV4cHIgYm9vbCBob2xkc19hbHRlcm5hdGl2ZShWYXJpYW50PF9U
eXBlcy4uLj4gY29uc3QmIF9fdikgX19OT0VYQ0VQVAogewotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCB2YWx1ZT1zdGQ6OmlzX21vdmVfY29uc3RydWN0aWJsZTxfSGVhZD46OnZhbHVlICYmIF9f
YWxsX21vdmVfY29uc3RydWN0aWJsZTxfUmVzdC4uLj46OnZhbHVlOwotfTsKLQotdGVtcGxhdGU8
Pgotc3RydWN0IF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTw+OgotICAgIHN0ZDo6dHJ1ZV90eXBl
e307Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbGxfbW92ZV9h
c3NpZ25hYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+
Ci1zdHJ1Y3QgX19hbGxfbW92ZV9hc3NpZ25hYmxlPF9IZWFkLF9SZXN0Li4uPgotewotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1zdGQ6OmlzX21vdmVfYXNzaWduYWJsZTxfSGVhZD46
OnZhbHVlICYmIF9fYWxsX21vdmVfYXNzaWduYWJsZTxfUmVzdC4uLj46OnZhbHVlOwotfTsKLQot
dGVtcGxhdGU8Pgotc3RydWN0IF9fYWxsX21vdmVfYXNzaWduYWJsZTw+OgotICAgIHN0ZDo6dHJ1
ZV90eXBle307Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbGxf
Y29weV9hc3NpZ25hYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4g
X1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfY29weV9hc3NpZ25hYmxlPF9IZWFkLF9SZXN0Li4uPgotewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1zdGQ6OmlzX2NvcHlfYXNzaWduYWJsZTxf
SGVhZD46OnZhbHVlICYmIF9fYWxsX2NvcHlfYXNzaWduYWJsZTxfUmVzdC4uLj46OnZhbHVlOwot
fTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fYWxsX2NvcHlfYXNzaWduYWJsZTw+OgotICAgIHN0
ZDo6dHJ1ZV90eXBle307Ci0KLW5hbWVzcGFjZSBfX3N3YXBfdGVzdF9kZXRhaWx7Ci11c2luZyBz
dGQ6OnN3YXA7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9PdGhlcj4KLXN0cnVjdCBfX3N3YXBfcmVz
dWx0e307Ci0KLXRlbXBsYXRlPHR5cGVuYW1lPgotc3RhdGljIGNoYXIgX190ZXN0KC4uLik7Ci10
ZW1wbGF0ZSA8dHlwZW5hbWUgX090aGVyPgotc3RhdGljIHN0ZDo6cGFpcjxjaGFyLCBzdGQ6OnBh
aXI8Y2hhciwgX19zd2FwX3Jlc3VsdDxkZWNsdHlwZSgKLSAgICBzd2FwKHN0ZDo6ZGVjbHZhbDxf
T3RoZXIgJj4oKSxzdGQ6OmRlY2x2YWw8X090aGVyICY+KCkpKT4+PgotX190ZXN0KF9PdGhlciAq
KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIF9UeXBlPiBzdHJ1Y3QgX19pc19zd2FwcGFibGUg
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZSA9Ci0gICAgICAgIHNpemVvZihfX3N3
YXBfdGVzdF9kZXRhaWw6Ol9fdGVzdDxfVHlwZT4obnVsbHB0cikpICE9IDE7Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYWxsX3N3YXBwYWJsZTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fYWxsX3N3
YXBwYWJsZTxfSGVhZCxfUmVzdC4uLj4KLXsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFs
dWU9X19pc19zd2FwcGFibGU8X0hlYWQ+Ojp2YWx1ZSAmJiBfX2FsbF9zd2FwcGFibGU8X1Jlc3Qu
Li4+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBfX2FsbF9zd2FwcGFibGU8PjoK
LSAgICBzdGQ6OnRydWVfdHlwZXt9OwotCi10ZW1wbGF0ZTxib29sIF9Nb3ZlQ29uc3RydWN0aWJs
ZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Nv
bnN0cnVjdF9pbXBse307Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBf
UmVzdD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9jb25zdHJ1Y3RfaW1wbDx0cnVl
LF9IZWFkLF9SZXN0Li4uPnsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9bm9leGNl
cHQoX0hlYWQoc3RkOjpkZWNsdmFsPF9IZWFkJiY+KCkpKSAmJiBfX25vZXhjZXB0X3ZhcmlhbnRf
bW92ZV9jb25zdHJ1Y3RfaW1wbDx0cnVlLF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0
ZTw+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0X2ltcGw8dHJ1ZT57
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXRydWU7Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2NvbnN0
cnVjdDoKLV9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2NvbnN0cnVjdF9pbXBsPF9fYWxsX21vdmVf
Y29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxfVHlwZXMuLi4+Ci17fTsKLQotdGVtcGxh
dGU8Ym9vbCBfTW92ZUFzc2lnbmFibGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25v
ZXhjZXB0X3ZhcmlhbnRfbW92ZV9hc3NpZ25faW1wbHt9OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
X0hlYWQsIHR5cGVuYW1lLi4uIF9SZXN0Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3Zl
X2Fzc2lnbl9pbXBsPHRydWUsIF9IZWFkLCBfUmVzdC4uLj4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCB2YWx1ZSA9Ci0gICAgICAgIHN0ZDo6aXNfbm90aHJvd19tb3ZlX2Fzc2lnbmFibGU8
X0hlYWQ+Ojp2YWx1ZSAmJgotICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3Rp
YmxlPF9IZWFkPjo6dmFsdWUgJiYKLSAgICAgICAgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNz
aWduX2ltcGw8dHJ1ZSwgX1Jlc3QuLi4+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVj
dCBfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9hc3NpZ25faW1wbDx0cnVlPnsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgdmFsdWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZS4uLiBf
VHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduCi0gICAgOiBfX25v
ZXhjZXB0X3ZhcmlhbnRfbW92ZV9hc3NpZ25faW1wbDwKLSAgICAgICAgICBfX2FsbF9tb3ZlX2Fz
c2lnbmFibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgX19hbGxfbW92ZV9j
b25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgIF9UeXBlcy4uLj4ge307
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbGxfY29weV9jb25z
dHJ1Y3RpYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+
Ci1zdHJ1Y3QgX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPgotewotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1zdGQ6OmlzX2NvcHlfY29uc3RydWN0aWJsZTxf
SGVhZD46OnZhbHVlICYmIF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfUmVzdC4uLj46OnZhbHVl
OwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTw+Ogot
ICAgIHN0ZDo6dHJ1ZV90eXBle307Ci0KLXRlbXBsYXRlPGJvb2wgX0NvcHlDb25zdHJ1Y3RpYmxl
LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X2NvbnN0X2Nv
cHlfY29uc3RydWN0X2ltcGx7fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUg
Li4uIF9SZXN0Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9jb25zdF9jb3B5X2NvbnN0cnVj
dF9pbXBsPHRydWUsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2
YWx1ZT1ub2V4Y2VwdChfSGVhZChzdGQ6OmRlY2x2YWw8X0hlYWQgY29uc3QmPigpKSkgJiYgX19u
b2V4Y2VwdF92YXJpYW50X2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8dHJ1ZSxfUmVzdC4uLj46
OnZhbHVlOwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9jb25z
dF9jb3B5X2NvbnN0cnVjdF9pbXBsPHRydWU+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2
YWx1ZT10cnVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBf
X25vZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25zdHJ1Y3Q6Ci1fX25vZXhjZXB0X3Zhcmlh
bnRfY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDxfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5
cGVzLi4uPjo6dmFsdWUsX1R5cGVzLi4uPgote307Ci0KLXRlbXBsYXRlPGJvb2wgX0NvcHlOb25f
Q29uc3RydWN0aWJsZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRfdmFy
aWFudF9ub25fY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbHt9OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X25v
bl9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBsPHRydWUsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1ub2V4Y2VwdChfSGVhZChzdGQ6OmRlY2x2YWw8X0hl
YWQmPigpKSkgJiYgX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVjdF9p
bXBsPHRydWUsX1Jlc3QuLi4+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBfX25v
ZXhjZXB0X3ZhcmlhbnRfbm9uX2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8dHJ1ZT57Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXRydWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9ub25fY29uc3RfY29weV9j
b25zdHJ1Y3Q6Ci1fX25vZXhjZXB0X3ZhcmlhbnRfbm9uX2NvbnN0X2NvcHlfY29uc3RydWN0X2lt
cGw8X19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLF9UeXBlcy4uLj4K
LXt9OwotCi10ZW1wbGF0ZTxib29sIF9Td2FwcGFibGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0
cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfc3dhcF9pbXBse307Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBfSGVhZCwgdHlwZW5hbWUuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X3N3
YXBfaW1wbDx0cnVlLCBfSGVhZCwgX1Jlc3QuLi4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgdmFsdWUgPQotICAgICAgICBub2V4Y2VwdChzd2FwKHN0ZDo6ZGVjbHZhbDxfSGVhZCY+KCks
c3RkOjpkZWNsdmFsPF9IZWFkJj4oKSkpICYmCi0gICAgICAgIF9fbm9leGNlcHRfdmFyaWFudF9z
d2FwX2ltcGw8dHJ1ZSwgX1Jlc3QuLi4+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVj
dCBfX25vZXhjZXB0X3ZhcmlhbnRfc3dhcF9pbXBsPHRydWU+ewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCB2YWx1ZT10cnVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4K
LXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfc3dhcDoKLV9fbm9leGNlcHRfdmFyaWFudF9zd2Fw
X2ltcGw8X19hbGxfc3dhcHBhYmxlPF9UeXBlcy4uLj46OnZhbHVlLF9UeXBlcy4uLj4KLXt9Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY2xhc3MgVmFyaWFudDoKLSAgICAgICAg
cHJpdmF0ZSBfX3ZhcmlhbnRfYmFzZTwKLSAgICBWYXJpYW50PF9UeXBlcy4uLj4sX19hbGxfdHJp
dmlhbGx5X2Rlc3RydWN0aWJsZTxfVHlwZXMuLi4+OjpfX3ZhbHVlPgotewotICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotICAgIHR5cGVkZWYgX192YXJpYW50X2Jhc2U8VmFyaWFudDxfVHlw
ZXMuLi4+LF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X1R5cGVzLi4uPjo6X192YWx1ZT4g
X19iYXNlX3R5cGU7Ci0gICAgZnJpZW5kIF9fYmFzZV90eXBlOwotICAgIGZyaWVuZCBzdHJ1Y3Qg
X19jb3B5X2NvbnN0cnVjdF9vcF90YWJsZTxWYXJpYW50PjsKLSAgICBmcmllbmQgc3RydWN0IF9f
Y29weV9hc3NpZ25fb3BfdGFibGU8VmFyaWFudD47Ci0gICAgZnJpZW5kIHN0cnVjdCBfX21vdmVf
Y29uc3RydWN0X29wX3RhYmxlPFZhcmlhbnQ+OwotICAgIGZyaWVuZCBzdHJ1Y3QgX19tb3ZlX2Fz
c2lnbl9vcF90YWJsZTxWYXJpYW50PjsKLSAgICBmcmllbmQgc3RydWN0IF9fZGVzdHJveV9vcF90
YWJsZTxWYXJpYW50PjsKLSAgICAKLSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVu
YW1lIC4uLiBfVHlwZXMyPgotICAgIGZyaWVuZCBzdHJ1Y3QgX192YXJpYW50X2FjY2Vzc29yOwot
Ci0gICAgZnJpZW5kIHN0cnVjdCBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjsKLQotICAgIHR5
cGVkZWYgX192YXJpYW50X2RhdGE8X1R5cGVzLi4uPiBfX3N0b3JhZ2VfdHlwZTsKLSAgICBfX3N0
b3JhZ2VfdHlwZSBfX3N0b3JhZ2U7Ci0gICAgdHlwZW5hbWUgX19kaXNjcmltaW5hdG9yX3R5cGU8
c2l6ZW9mIC4uLiAoX1R5cGVzKT46Ol9fdHlwZSBfX2luZGV4OwotCi0gICAgdGVtcGxhdGU8c2l6
ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgc2l6ZV90IF9fZW1wbGFjZV9jb25z
dHJ1Y3QoX0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgbmV3KCZfX3N0b3JhZ2UpIF9fc3Rv
cmFnZV90eXBlKAotICAgICAgICAgICAgaW5fcGxhY2U8X0luZGV4PixzdGQ6OmZvcndhcmQ8X0Fy
Z3M+KF9fYXJncykuLi4pOwotICAgICAgICByZXR1cm4gIF9JbmRleDsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBfX2Rlc3Ryb3lfc2VsZigpewotICAgICAgICBpZih2YWx1ZWxlc3NfYnlfZXhjZXB0
aW9uKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIF9fZGVzdHJveV9vcF90YWJsZTxW
YXJpYW50Pjo6X19hcHBseVtpbmRleCgpXSh0aGlzKTsKLSAgICAgICAgX19pbmRleD0tMTsKLSAg
ICB9Ci0gICAgCi0gICAgcHRyZGlmZl90IF9fbW92ZV9jb25zdHJ1Y3QoVmFyaWFudCYgX19vdGhl
cil7Ci0gICAgICAgIHB0cmRpZmZfdCBjb25zdCBfX290aGVyX2luZGV4PV9fb3RoZXIuaW5kZXgo
KTsKLSAgICAgICAgaWYoX19vdGhlcl9pbmRleD09LTEpCi0gICAgICAgICAgICByZXR1cm4gLTE7
Ci0gICAgICAgIF9fbW92ZV9jb25zdHJ1Y3Rfb3BfdGFibGU8VmFyaWFudD46Ol9fYXBwbHlbX19v
dGhlcl9pbmRleF0odGhpcyxfX290aGVyKTsKLSAgICAgICAgX19vdGhlci5fX2Rlc3Ryb3lfc2Vs
ZigpOwotICAgICAgICByZXR1cm4gX19vdGhlcl9pbmRleDsKLSAgICB9Ci0KLSAgICBwdHJkaWZm
X3QgX19jb3B5X2NvbnN0cnVjdChWYXJpYW50IGNvbnN0JiBfX290aGVyKXsKLSAgICAgICAgcHRy
ZGlmZl90IGNvbnN0IF9fb3RoZXJfaW5kZXg9X19vdGhlci5pbmRleCgpOwotICAgICAgICBpZihf
X290aGVyX2luZGV4PT0tMSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgX19jb3B5
X2NvbnN0cnVjdF9vcF90YWJsZTxWYXJpYW50Pjo6X19hcHBseVtfX290aGVyX2luZGV4XSh0aGlz
LF9fb3RoZXIpOwotICAgICAgICByZXR1cm4gX19vdGhlcl9pbmRleDsKLSAgICB9Ci0KLSAgICB0
ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICB2b2lkIF9fcmVw
bGFjZV9jb25zdHJ1Y3QoX0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIF9fdGhpc190eXBl
OwotICAgICAgICBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19oZWxwZXI8Ci0gICAgICAg
ICAgICBfSW5kZXgsCi0gICAgICAgICAgICBfX3N0b3JhZ2Vfbm90aHJvd19jb25zdHJ1Y3RpYmxl
PF9fdGhpc190eXBlLF9BcmdzLi4uPjo6X192YWx1ZSB8fAotICAgICAgICAgICAgKHNpemVvZi4u
LihfVHlwZXMpPT0xKSwKLSAgICAgICAgICAgIF9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3Ry
dWN0aWJsZTxfX3RoaXNfdHlwZT46Ol9fdmFsdWUsCi0gICAgICAgICAgICBfX290aGVyX3N0b3Jh
Z2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8Ci0gICAgICAgICAgICAgICAgX0luZGV4LF9U
eXBlcy4uLj46Ol9fdmFsdWUKLSAgICAgICAgICAgID46Ol9fdHJhbXBvbGluZSgqdGhpcyxzdGQ6
OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHNpemVf
dCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHZvaWQgX190d29fc3RhZ2VfcmVwbGFj
ZShfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faW5kZXhl
ZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgX190eXBlOwotICAgICAgICBfX3Zhcmlh
bnRfZGF0YTxfX3R5cGU+IF9fbG9jYWwoCi0gICAgICAgICAgICBpbl9wbGFjZTwwPixzdGQ6OmZv
cndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgICAgICBfX2Rlc3Ryb3lfc2VsZigpOwotICAg
ICAgICBfX2VtcGxhY2VfY29uc3RydWN0PF9JbmRleD4oCi0gICAgICAgICAgICBzdGQ6Om1vdmUo
X19sb2NhbC5fX2dldChpbl9wbGFjZTwwPikpKTsKLSAgICAgICAgX19pbmRleD1fSW5kZXg7Ci0g
ICAgICAgIF9fbG9jYWwuX19kZXN0cm95KGluX3BsYWNlPDA+KTsKLSAgICB9Ci0KLSAgICB0ZW1w
bGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICB2b2lkIF9fbG9jYWxf
YmFja3VwX3JlcGxhY2UoX0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgX19iYWNrdXBfc3Rv
cmFnZTxfSW5kZXgsX1R5cGVzLi4uPiBfX2JhY2t1cChfX2luZGV4LF9fc3RvcmFnZSk7Ci0gICAg
ICAgIF9fZW1wbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJn
cykuLi4pOwotICAgICAgICBfX2luZGV4PV9JbmRleDsKLSAgICAgICAgX19iYWNrdXAuX19kZXN0
cm95KCk7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUg
Li4uIF9BcmdzPgotICAgIHZvaWQgX19kaXJlY3RfcmVwbGFjZShfQXJncyYmIC4uLiBfX2FyZ3Mp
IHsKLSAgICAgICAgX19kZXN0cm95X3NlbGYoKTsKLSAgICAgICAgX19lbXBsYWNlX2NvbnN0cnVj
dDxfSW5kZXg+KHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7Ci0gICAgICAgIF9faW5k
ZXg9X0luZGV4OwotICAgIH0KLQotICAgIHN0cnVjdCBfX3ByaXZhdGVfdHlwZXt9OwotCi1wdWJs
aWM6Ci0gICAgY29uc3RleHByIFZhcmlhbnQoKQotICAgICAgICBfX05PRVhDRVBUXyhub2V4Y2Vw
dCh0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTwwLF9UeXBlcy4uLj46Ol9fdHlwZSgpKSk6Ci0gICAg
ICAgIF9fc3RvcmFnZShpbl9wbGFjZTwwPiksCi0gICAgICAgIF9faW5kZXgoMCkKLSAgICB7fQot
Ci0gICAgY29uc3RleHByIFZhcmlhbnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9t
b3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsVmFyaWFudCxfX3ByaXZhdGVfdHlw
ZT46OnR5cGUmJiBfX290aGVyKQotICAgIF9fTk9FWENFUFRfKF9fbm9leGNlcHRfdmFyaWFudF9t
b3ZlX2NvbnN0cnVjdDxfVHlwZXMuLi4+Ojp2YWx1ZSk6Ci0gICAgICAgIF9faW5kZXgoX19tb3Zl
X2NvbnN0cnVjdChfX290aGVyKSkKLSAgICB7fQotCi0gICAgY29uc3RleHByIFZhcmlhbnQodHlw
ZW5hbWUgc3RkOjpjb25kaXRpb25hbDwhX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4u
Lj46OnZhbHVlLFZhcmlhbnQsX19wcml2YXRlX3R5cGU+Ojp0eXBlJiYgX19vdGhlcik9ZGVsZXRl
OwotICAgIAotICAgIGNvbnN0ZXhwciBWYXJpYW50KHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8
X19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLFZhcmlhbnQsX19wcml2
YXRlX3R5cGU+Ojp0eXBlJiBfX290aGVyKQotICAgIF9fTk9FWENFUFRfKF9fbm9leGNlcHRfdmFy
aWFudF9ub25fY29uc3RfY29weV9jb25zdHJ1Y3Q8X1R5cGVzLi4uPjo6dmFsdWUpOgotICAgICAg
ICBfX2luZGV4KF9fY29weV9jb25zdHJ1Y3QoX19vdGhlcikpCi0gICAge30KLQotICAgIGNvbnN0
ZXhwciBWYXJpYW50KHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8IV9fYWxsX2NvcHlfY29uc3Ry
dWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSYg
X19vdGhlcik9ZGVsZXRlOwotCi0gICAgY29uc3RleHByIFZhcmlhbnQodHlwZW5hbWUgc3RkOjpj
b25kaXRpb25hbDxfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsVmFy
aWFudCxfX3ByaXZhdGVfdHlwZT46OnR5cGUgY29uc3QmIF9fb3RoZXIpCi0gICAgX19OT0VYQ0VQ
VF8oX19ub2V4Y2VwdF92YXJpYW50X2NvbnN0X2NvcHlfY29uc3RydWN0PF9UeXBlcy4uLj46OnZh
bHVlKToKLSAgICAgICAgX19pbmRleChfX2NvcHlfY29uc3RydWN0KF9fb3RoZXIpKQotICAgIHt9
Ci0KLSAgICBjb25zdGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPCFfX2Fs
bF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsVmFyaWFudCxfX3ByaXZhdGVf
dHlwZT46OnR5cGUgY29uc3QmIF9fb3RoZXIpPWRlbGV0ZTsKLSAgICAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgZXhwbGljaXQgY29uc3RleHBy
IFZhcmlhbnQoaW5fcGxhY2VfdHlwZV90PF9UeXBlPixfQXJncyYmIC4uLiBfX2FyZ3MpOgotICAg
ICAgICBfX3N0b3JhZ2UoCi0gICAgICAgICAgICBpbl9wbGFjZTxfX3R5cGVfaW5kZXg8X1R5cGUs
X1R5cGVzLi4uPjo6X192YWx1ZT4sCi0gICAgICAgICAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9f
YXJncykuLi4pLAotICAgICAgICBfX2luZGV4KF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+
OjpfX3ZhbHVlKQotICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2NvbnN0cnVj
dGlibGU8X1R5cGUsX0FyZ3MuLi4+Ojp2YWx1ZSwiVHlwZSBtdXN0IGJlIGNvbnN0cnVjdGlibGUg
ZnJvbSBhcmdzIik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFt
ZSAuLi4gX0FyZ3M+Ci0gICAgZXhwbGljaXQgY29uc3RleHByIFZhcmlhbnQoaW5fcGxhY2VfaW5k
ZXhfdDxfSW5kZXg+LF9BcmdzJiYgLi4uIF9fYXJncyk6Ci0gICAgICAgIF9fc3RvcmFnZShpbl9w
bGFjZTxfSW5kZXg+LHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLiksCi0gICAgICAgIF9f
aW5kZXgoX0luZGV4KQotICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2NvbnN0
cnVjdGlibGU8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlw
ZSxfQXJncy4uLj46OnZhbHVlLCJUeXBlIG11c3QgYmUgY29uc3RydWN0aWJsZSBmcm9tIGFyZ3Mi
KTsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci0gICAgY29uc3Rl
eHByIFZhcmlhbnQoX1R5cGUmJiBfX3gpOgotICAgICAgICBfX3N0b3JhZ2UoCi0gICAgICAgICAg
ICBpbl9wbGFjZTwKLSAgICAgICAgICAgIF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8X1R5cGUs
X1R5cGVzLi4uPjo6X192YWx1ZT4sCi0gICAgICAgICAgICBzdGQ6OmZvcndhcmQ8X1R5cGU+KF9f
eCkpLAotICAgICAgICBfX2luZGV4KF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8X1R5cGUsX1R5
cGVzLi4uPjo6X192YWx1ZSkKLSAgICB7fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUs
Ci0gICAgICAgICAgICAgdHlwZW5hbWUgX0VuYWJsZT0KLSAgICAgICAgICAgICB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjwKLSAgICAgICAgICAgICAgICAgKF9fY29uc3RydWN0aWJsZV9tYXRjaGVz
PHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfVHlwZT4sX1R5cGVzLi4uPjo6X190eXBlOjpfX2xlbmd0
aD4wKQotICAgICAgICAgICAgID46OnR5cGU+Ci0gICAgY29uc3RleHByIFZhcmlhbnQoc3RkOjpp
bml0aWFsaXplcl9saXN0PF9UeXBlPiBfX3gpOgotICAgICAgICBfX3N0b3JhZ2UoCi0gICAgICAg
ICAgICBpbl9wbGFjZTwKLSAgICAgICAgICAgIF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8c3Rk
Ojppbml0aWFsaXplcl9saXN0PF9UeXBlPixfVHlwZXMuLi4+OjpfX3ZhbHVlPiwKLSAgICAgICAg
ICAgIF9feCksCi0gICAgICAgIF9faW5kZXgoX190eXBlX2luZGV4X3RvX2NvbnN0cnVjdDxzdGQ6
OmluaXRpYWxpemVyX2xpc3Q8X1R5cGU+LF9UeXBlcy4uLj46Ol9fdmFsdWUpCi0gICAge30KLSAg
ICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLSAgICBWYXJpYW50JiBvcGVyYXRvcj0o
X1R5cGUmJiBfX3gpewotICAgICAgICBjb25zdGV4cHIgc2l6ZV90IF9JbmRleD0KLSAgICAgICAg
ICAgIF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZTsK
LSAgICAgICAgaWYoX0luZGV4PT1fX2luZGV4KXsKLSAgICAgICAgICAgIGdldDxfSW5kZXg+KCp0
aGlzKT1zdGQ6OmZvcndhcmQ8X1R5cGU+KF9feCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZXsK
LSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PihzdGQ6OmZvcndhcmQ8X1R5
cGU+KF9feCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAg
ICBWYXJpYW50ICZvcGVyYXRvcj0oCi0gICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8
Ci0gICAgICAgICAgICAhKF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1
ZSAmJgotICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6
dmFsdWUgJiYKLSAgICAgICAgICAgICAgX19hbGxfY29weV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46
OnZhbHVlKSwKLSAgICAgICAgICAgIFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZSBjb25z
dCAmX19vdGhlcikgPSBkZWxldGU7Ci0KLSAgICBWYXJpYW50ICZvcGVyYXRvcj0oCi0gICAgICAg
IHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8Ci0gICAgICAgICAgICBfX2FsbF9jb3B5X2NvbnN0
cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgICBfX2FsbF9tb3Zl
X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgICBfX2Fs
bF9jb3B5X2Fzc2lnbmFibGU8X1R5cGVzLi4uPjo6dmFsdWUsCi0gICAgICAgICAgICBWYXJpYW50
LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgY29uc3QgJl9fb3RoZXIpIHsKLSAgICAgICAgaWYgKF9f
b3RoZXIudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICBfX2Rlc3Ryb3lf
c2VsZigpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoX19vdGhlci5pbmRleCgpPT1pbmRl
eCgpKXsKLSAgICAgICAgICAgIF9fY29weV9hc3NpZ25fb3BfdGFibGU8VmFyaWFudD46Ol9fYXBw
bHlbaW5kZXgoKV0odGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlewotICAg
ICAgICAgICAgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8VmFyaWFudD46
Ol9fY29weV9hc3NpZ25bCi0gICAgICAgICAgICAgICAgX19vdGhlci5pbmRleCgpXSh0aGlzLF9f
b3RoZXIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgVmFy
aWFudCAmb3BlcmF0b3I9KAotICAgICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAotICAg
ICAgICAgICAgIShfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYK
LSAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVl
ICYmCi0gICAgICAgICAgICAgIF9fYWxsX2NvcHlfYXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2YWx1
ZSksCi0gICAgICAgICAgICBWYXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgJl9fb3RoZXIp
ID0gZGVsZXRlOwotCi0gICAgVmFyaWFudCAmb3BlcmF0b3I9KAotICAgICAgICB0eXBlbmFtZSBz
dGQ6OmNvbmRpdGlvbmFsPAotICAgICAgICAgICAgX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9U
eXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3Rp
YmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgICAgX19hbGxfY29weV9hc3Np
Z25hYmxlPF9UeXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgICAgVmFyaWFudCwgX19wcml2YXRl
X3R5cGU+Ojp0eXBlICZfX290aGVyKSB7Ci0gICAgICAgIGlmKF9fb3RoZXIudmFsdWVsZXNzX2J5
X2V4Y2VwdGlvbigpKXsKLSAgICAgICAgICAgIF9fZGVzdHJveV9zZWxmKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZSBpZihfX290aGVyLmluZGV4KCk9PWluZGV4KCkpewotICAgICAgICAgICAg
X19jb3B5X2Fzc2lnbl9vcF90YWJsZTxWYXJpYW50Pjo6X19hcHBseVtpbmRleCgpXSh0aGlzLF9f
b3RoZXIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgICBfX3JlcGxhY2Vf
Y29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTxWYXJpYW50Pjo6X19jb3B5X2Fzc2lnblsKLSAg
ICAgICAgICAgICAgICBfX290aGVyLmluZGV4KCldKHRoaXMsX19vdGhlcik7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAgICBWYXJpYW50ICZvcGVyYXRvcj0oCi0g
ICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8Ci0gICAgICAgICAgICAhKF9fYWxsX21v
dmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICBfX2Fs
bF9tb3ZlX2Fzc2lnbmFibGU8X1R5cGVzLi4uPjo6dmFsdWUpLAotICAgICAgICAgICAgVmFyaWFu
dCwgX19wcml2YXRlX3R5cGU+Ojp0eXBlICYmX19vdGhlcikgPSBkZWxldGU7Ci0KLSAgICBWYXJp
YW50ICZvcGVyYXRvcj0oCi0gICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8X19hbGxf
bW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fYWxsX21vdmVfYXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2
YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYW50LCBfX3ByaXZh
dGVfdHlwZT46OnR5cGUgJiYKLSAgICAgICAgICAgIF9fb3RoZXIpIF9fTk9FWENFUFRfKF9fbm9l
eGNlcHRfdmFyaWFudF9tb3ZlX2Fzc2lnbjxfVHlwZXMuLi4+Ojp2YWx1ZSkgewotICAgICAgICBp
ZiAoX19vdGhlci52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIF9fZGVz
dHJveV9zZWxmKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZihfX290aGVyLmluZGV4KCk9
PWluZGV4KCkpewotICAgICAgICAgICAgX19tb3ZlX2Fzc2lnbl9vcF90YWJsZTxWYXJpYW50Pjo6
X19hcHBseVtpbmRleCgpXSh0aGlzLF9fb3RoZXIpOwotICAgICAgICAgICAgX19vdGhlci5fX2Rl
c3Ryb3lfc2VsZigpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgICBfX3Jl
cGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTxWYXJpYW50Pjo6X19tb3ZlX2Fzc2ln
blsKLSAgICAgICAgICAgICAgICBfX290aGVyLmluZGV4KCldKHRoaXMsX19vdGhlcik7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICB2b2lkIGVtcGxhY2UoX0FyZ3MmJiAu
Li4gX19hcmdzKXsKLSAgICAgICAgX19kaXJlY3RfcmVwbGFjZTxfX3R5cGVfaW5kZXg8X1R5cGUs
X1R5cGVzLi4uPjo6X192YWx1ZT4oCi0gICAgICAgICAgICBzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9f
YXJncykuLi4pOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVu
YW1lIC4uLiBfQXJncz4KLSAgICB2b2lkIGVtcGxhY2UoX0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAg
ICAgICAgX19kaXJlY3RfcmVwbGFjZTxfSW5kZXg+KHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdz
KS4uLik7Ci0gICAgfQotICAgIAotICAgIGNvbnN0ZXhwciBib29sIHZhbHVlbGVzc19ieV9leGNl
cHRpb24oKSBjb25zdCBfX05PRVhDRVBUewotICAgICAgICByZXR1cm4gX19pbmRleD09LTE7Ci0g
ICAgfQotICAgIGNvbnN0ZXhwciBwdHJkaWZmX3QgaW5kZXgoKSBjb25zdCBfX05PRVhDRVBUewot
ICAgICAgICByZXR1cm4gX19pbmRleDsKLSAgICB9Ci0KLSAgICB2b2lkIHN3YXAoCi0gICAgICAg
IHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8Ci0gICAgICAgICAgICBfX2FsbF9zd2FwcGFibGU8
X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVj
dGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsCi0gICAgICAgICAgICBWYXJpYW50LCBfX3ByaXZhdGVf
dHlwZT46OnR5cGUKLSAgICAgICAgICAgICZfX290aGVyKSBfX05PRVhDRVBUXyhfX25vZXhjZXB0
X3ZhcmlhbnRfc3dhcDxfVHlwZXMuLi4+Ojp2YWx1ZSkgewotICAgICAgICBpZiAoX19vdGhlci5p
bmRleCgpID09IGluZGV4KCkpIHsKLSAgICAgICAgICAgIGlmKCF2YWx1ZWxlc3NfYnlfZXhjZXB0
aW9uKCkpCi0gICAgICAgICAgICAgICAgX19zd2FwX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5
W2luZGV4KCldKCp0aGlzLF9fb3RoZXIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2V7Ci0gICAg
ICAgICAgICBWYXJpYW50IF9fdGVtcChzdGQ6Om1vdmUoX19vdGhlcikpOwotICAgICAgICAgICAg
X19vdGhlci5fX2luZGV4PV9fb3RoZXIuX19tb3ZlX2NvbnN0cnVjdCgqdGhpcyk7Ci0gICAgICAg
ICAgICBfX2luZGV4PV9fbW92ZV9jb25zdHJ1Y3QoX190ZW1wKTsKLSAgICAgICAgfQotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPD4KLWNsYXNzIFZhcmlhbnQ8PnsKLXB1YmxpYzoKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLSAgICBWYXJpYW50KCk9ZGVsZXRlOwotICAgIAotICAgIGNvbnN0
ZXhwciBib29sIHZhbHVlbGVzc19ieV9leGNlcHRpb24oKSBjb25zdCBfX05PRVhDRVBUewotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY29uc3RleHByIHB0cmRpZmZfdCBpbmRleCgp
IGNvbnN0IF9fTk9FWENFUFR7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICB2b2lk
IHN3YXAoVmFyaWFudCYpe30KLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZS4uLiBfVHlwZXM+Ci10
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxfX2FsbF9zd2FwcGFibGU8X1R5cGVzLi4uPjo6dmFsdWUg
JiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8
X1R5cGVzLi4uPjo6dmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB2b2lkPjo6dHlwZQot
c3dhcChWYXJpYW50PF9UeXBlcy4uLj4gJl9fbGhzLCBWYXJpYW50PF9UeXBlcy4uLj4gJl9fcmhz
KSBfX05PRVhDRVBUXygKLSAgICBfX25vZXhjZXB0X3ZhcmlhbnRfc3dhcDxfVHlwZXMuLi4+Ojp2
YWx1ZSkgewotICAgIF9fbGhzLnN3YXAoX19yaHMpOwotfQotCi10ZW1wbGF0ZTxwdHJkaWZmX3Qg
X0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX192YXJpYW50X2FjY2Vzc29yewot
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9f
dHlwZSBfX3R5cGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfX3R5cGUmIGdldChWYXJpYW50PF9U
eXBlcy4uLj4mIF9fdil7Ci0gICAgICAgIHJldHVybiBfX3YuX19zdG9yYWdlLl9fZ2V0KGluX3Bs
YWNlPF9JbmRleD4pOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIF9fdHlwZSBjb25zdCYg
Z2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX192KXsKLSAgICAgICAgcmV0dXJuIF9fdi5f
X3N0b3JhZ2UuX19nZXQoaW5fcGxhY2U8X0luZGV4Pik7Ci0gICAgfQotICAgIHN0YXRpYyBjb25z
dGV4cHIgX190eXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYmIF9fdil7Ci0gICAgICAgIHJl
dHVybiBfX3YuX19zdG9yYWdlLl9fZ2V0X3JyZWYoaW5fcGxhY2U8X0luZGV4Pik7Ci0gICAgfQot
ICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgX190eXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4u
PiBjb25zdCYmIF9fdil7Ci0gICAgICAgIHJldHVybiBfX3YuX19zdG9yYWdlLl9fZ2V0X3JyZWYo
aW5fcGxhY2U8X0luZGV4Pik7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUs
dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBfVHlwZSYgZ2V0KFZhcmlhbnQ8X1R5cGVz
Li4uPiYgX192KXsKLSAgICByZXR1cm4gZ2V0PF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+
OjpfX3ZhbHVlPihfX3YpOworICAgIHJldHVybiBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPF9UeXBl
PihfX3YpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVz
PgotY29uc3RleHByIF9UeXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYmIF9fdil7Ci0gICAg
cmV0dXJuIGdldDxfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZT4oc3RkOjpt
b3ZlKF9fdikpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5
cGVzPgotY29uc3RleHByIF9UeXBlIGNvbnN0JiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0
JiBfX3YpewotICAgIHJldHVybiBnZXQ8X190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9f
dmFsdWU+KF9fdik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBf
VHlwZXM+Ci1jb25zdGV4cHIgY29uc3QgX1R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNv
bnN0JiYgX192KXsKLSAgICByZXR1cm4gZ2V0PF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+
OjpfX3ZhbHVlPihzdGQ6Om1vdmUoX192KSk7Ci19Ci0KLQotdGVtcGxhdGU8cHRyZGlmZl90IF9J
bmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHR5cGVuYW1lIF9faW5kZXhlZF90
eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3QmIGdldChWYXJpYW50PF9UeXBlcy4u
Lj4gY29uc3QmIF9fdil7Ci0gICAgcmV0dXJuICooCi0gICAgICAgIChfSW5kZXghPV9fdi5pbmRl
eCgpKQotICAgICAgICAgICAgPyBzdGQ6OmFkZHJlc3NvZihfX3Rocm93X2JhZF92YXJpYW50X2Fj
Y2Vzczx0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNv
bnN0Jj4oIkJhZCBWYXJpYW50IGluZGV4IGluIGdldCIpKQotICAgICAgICAgICAgOiBzdGQ6OmFk
ZHJlc3NvZihfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldChfX3YpKQot
ICAgICk7Ci19Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBl
cz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6
X190eXBlJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAgIHJldHVybiAqKAotICAg
ICAgICAoX0luZGV4IT1fX3YuaW5kZXgoKSkKLSAgICAgICAgICAgID8gc3RkOjphZGRyZXNzb2Yo
X190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3M8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4
LF9UeXBlcy4uLj46Ol9fdHlwZSY+KCJCYWQgVmFyaWFudCBpbmRleCBpbiBnZXQiKSkKLSAgICAg
ICAgICAgIDogc3RkOjphZGRyZXNzb2YoX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMu
Li4+OjpnZXQoX192KSkKLSAgICApOwotfQotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5
cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0lu
ZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mJiBfX3Ypewot
ICAgIHJldHVybiBfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldCgKLSAg
ICAgICAgKCgoX0luZGV4IT1fX3YuaW5kZXgoKSkgPyBfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vz
czxpbnQ+KCJCYWQgVmFyaWFudCBpbmRleCBpbiBnZXQiKSA6IDApLCBzdGQ6Om1vdmUoX192KSkK
LSAgICApOwotfQotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Ci1jb25zdGV4cHIgY29uc3QgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBl
cy4uLj46Ol9fdHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmJiBfX3YpewotICAg
IHJldHVybiBfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldCgKLSAgICAg
ICAgKCgoX0luZGV4IT1fX3YuaW5kZXgoKSkgPyBfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczxp
bnQ+KCJCYWQgVmFyaWFudCBpbmRleCBpbiBnZXQiKSA6IDApLCBzdGQ6Om1vdmUoX192KSkKLSAg
ICApOworY29uc3RleHByIF9UeXBlJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpCit7Cisg
ICAgcmV0dXJuIHN0ZDo6Z2V0PF9UeXBlPihfX3YpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDxf
VHlwZT4gZ2V0X2lmKFZhcmlhbnQ8X1R5cGVzLi4uPiYgX192KXsKLSAgICByZXR1cm4gKF9fdHlw
ZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlIT1fX3YuaW5kZXgoKSk/bnVsbHB0cjpz
dGQ6OmFkZHJlc3NvZihnZXQ8X1R5cGU+KF9fdikpOworY29uc3RleHByIF9UeXBlJiYgZ2V0KFZh
cmlhbnQ8X1R5cGVzLi4uPiYmIF9fdikKK3sKKyAgICByZXR1cm4gc3RkOjpnZXQ8X1R5cGU+KFdU
Rk1vdmUoX192KSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBf
VHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PF9UeXBlIGNvbnN0PiBnZXRfaWYo
VmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpewotICAgIHJldHVybiAoX190eXBlX2luZGV4
PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWUhPV9fdi5pbmRleCgpKT9udWxscHRyOnN0ZDo6YWRk
cmVzc29mKGdldDxfVHlwZT4oX192KSk7Ci19Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgs
dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8dHlwZW5h
bWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZT4gZ2V0X2lmKFZhcmlh
bnQ8X1R5cGVzLi4uPiYgX192KXsKLSAgICByZXR1cm4gKChfSW5kZXghPV9fdi5pbmRleCgpKT9u
dWxscHRyOgotICAgICAgICBzdGQ6OmFkZHJlc3NvZihfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4
LF9UeXBlcy4uLj46OmdldChfX3YpKSk7Ci19Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgs
dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8dHlwZW5h
bWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBjb25zdD4gZ2V0X2lm
KAotICAgIFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX192KXsKLSAgICByZXR1cm4gKChfSW5k
ZXghPV9fdi5pbmRleCgpKT9udWxscHRyOgotICAgICAgICBzdGQ6OmFkZHJlc3NvZihfX3Zhcmlh
bnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldChfX3YpKSk7Citjb25zdGV4cHIgX1R5
cGUgY29uc3QmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdikKK3sKKyAgICByZXR1
cm4gc3RkOjpnZXQ8X1R5cGU+KF9fdik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5
cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBob2xkc19hbHRlcm5hdGl2ZShWYXJp
YW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdikgX19OT0VYQ0VQVHsKLSAgICByZXR1cm4gX192Lmlu
ZGV4KCk9PV9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdmlz
aXRvcl9yZXR1cm5fdHlwZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3I+Ci1zdHJ1Y3Qg
X192aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yPnsKLSAgICB0eXBlZGVmIGRlY2x0eXBlKHN0
ZDo6ZGVjbHZhbDxfVmlzaXRvciY+KCkoKSkgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgX1Zpc2l0b3IsdHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9f
dmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfSGVhZCxfUmVzdC4uLj57Ci0gICAgdHlwZWRl
ZiBkZWNsdHlwZShzdGQ6OmRlY2x2YWw8X1Zpc2l0b3ImPigpKHN0ZDo6ZGVjbHZhbDxfSGVhZCY+
KCkpKSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAu
Li4gX1R5cGVzPgotc3RydWN0IF9fdmlzaXRvcl90YWJsZXsKLSAgICB0eXBlZGVmIFZhcmlhbnQ8
X1R5cGVzLi4uPiBfX3ZhcmlhbnRfdHlwZTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdmlzaXRv
cl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVHlwZXMuLi4+OjpfX3R5cGUgX19yZXR1cm5fdHlwZTsK
LSAgICB0eXBlZGVmIF9fcmV0dXJuX3R5cGUgKCpfX2Z1bmNfdHlwZSkoX1Zpc2l0b3ImLF9fdmFy
aWFudF90eXBlJik7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLSAgICBzdGF0aWMg
X19yZXR1cm5fdHlwZSBfX3RyYW1wb2xpbmVfZnVuYyhfVmlzaXRvciYgX192aXNpdG9yLF9fdmFy
aWFudF90eXBlJiBfX3YpewotICAgICAgICByZXR1cm4gX192aXNpdG9yKGdldDxfVHlwZT4oX192
KSk7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IF9fZnVuY190eXBlIF9fdHJhbXBvbGluZVtz
aXplb2YuLi4oX1R5cGVzKV07Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBl
bmFtZSAuLi4gX1R5cGVzPgotY29uc3QgdHlwZW5hbWUgX192aXNpdG9yX3RhYmxlPF9WaXNpdG9y
LF9UeXBlcy4uLj46Ol9fZnVuY190eXBlIF9fdmlzaXRvcl90YWJsZTxfVmlzaXRvcixfVHlwZXMu
Li4+OjpfX3RyYW1wb2xpbmVbc2l6ZW9mLi4uKF9UeXBlcyldPXsKLSAgICAgICAgJl9fdHJhbXBv
bGluZV9mdW5jPF9UeXBlcz4uLi4KLSAgICB9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRv
cix0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHR5cGVuYW1lIF9fdmlzaXRvcl9yZXR1
cm5fdHlwZTxfVmlzaXRvcixfVHlwZXMuLi4+OjpfX3R5cGUKLXZpc2l0KF9WaXNpdG9yJiYgX192
aXNpdG9yLFZhcmlhbnQ8X1R5cGVzLi4uPiYgX192KXsKLSAgICByZXR1cm4gKF9fdi52YWx1ZWxl
c3NfYnlfZXhjZXB0aW9uKCkpCi0gICAgICAgID8gX190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3M8
dHlwZW5hbWUgX192aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fdHlw
ZT4oIlZpc2l0aW5nIG9mIGVtcHR5IFZhcmlhbnQiKQotICAgICAgICA6IF9fdmlzaXRvcl90YWJs
ZTxfVmlzaXRvcixfVHlwZXMuLi4+OjpfX3RyYW1wb2xpbmVbX192LmluZGV4KCldKF9fdmlzaXRv
cixfX3YpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1Zh
cmlhbnRzPgotc3RydWN0IF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlwZXsKLSAgICB0eXBlZGVm
IGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxfVmlzaXRvciY+KCkoZ2V0PDA+KHN0ZDo6ZGVjbHZhbDxf
VmFyaWFudHM+KCkpLi4uKSkKLSAgICBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxzaXplX3QgX1Zh
cmlhbnRJbmRleCx0eXBlbmFtZSBfSW5kaWNlcz4KLXN0cnVjdCBfX3Zpc2l0X2hlbHBlcjsKLQot
dGVtcGxhdGU8cHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX3Zpc2l0X2hlbHBlcjww
LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VmlzaXRvcix0eXBlbmFtZSAuLi4gX1ZhcmlhbnRzPgotICAgIHN0YXRpYyBjb25zdGV4cHIgdHlw
ZW5hbWUgX19tdWx0aV92aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9WYXJpYW50cy4uLj46
Ol9fdHlwZQotICAgIF9fdmlzaXQoX1Zpc2l0b3ImIF9fdmlzaXRvcixfVmFyaWFudHMmIC4uLiBf
X3YpewotICAgICAgICByZXR1cm4gX192aXNpdG9yKGdldDxfSW5kaWNlcz4oX192KS4uLik7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci1z
dHJ1Y3QgX19hcmdfc2VsZWN0b3JfdDsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5h
bWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fYXJnX3NlbGVjdG9yX3Q8MCxfSGVhZCxfUmVzdC4uLj57
Ci0gICAgdHlwZWRlZiBfSGVhZCBfX3R5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIF9fdHlw
ZSYgX19zZWxlY3QoX0hlYWQmIF9faGVhZCxfUmVzdCYgLi4uKXsKLSAgICAgICAgcmV0dXJuIF9f
aGVhZDsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIF9IZWFk
LHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2FyZ19zZWxlY3Rvcl90PF9JbmRleCxfSGVh
ZCxfUmVzdC4uLj57Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2FyZ19zZWxlY3Rvcl90PF9JbmRl
eC0xLF9SZXN0Li4uPjo6X190eXBlIF9fdHlwZTsKLSAgICBzdGF0aWMgY29uc3RleHByIF9fdHlw
ZSYgX19zZWxlY3QoX0hlYWQmLF9SZXN0JiAuLi4gX19yZXN0KXsKLSAgICAgICAgcmV0dXJuIF9f
YXJnX3NlbGVjdG9yX3Q8X0luZGV4LTEsX1Jlc3QuLi4+OjpfX3NlbGVjdChfX3Jlc3QuLi4pOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgot
Y29uc3RleHByIHR5cGVuYW1lIF9fYXJnX3NlbGVjdG9yX3Q8X0luZGV4LF9BcmdzLi4uPjo6X190
eXBlJiYgX19hcmdfc2VsZWN0b3IoX0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAgICByZXR1cm4gc3Rk
Ojpmb3J3YXJkPHR5cGVuYW1lIF9fYXJnX3NlbGVjdG9yX3Q8X0luZGV4LF9BcmdzLi4uPjo6X190
eXBlPigKLSAgICAgICAgX19hcmdfc2VsZWN0b3JfdDxfSW5kZXgsX0FyZ3MuLi4+OjpfX3NlbGVj
dChfX2FyZ3MuLi4pKTsKLX0KLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCxzaXplX3QgX1Zh
cmlhbnRJbmRleCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9fdmlzaXRfaGVscGVy
MnsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1ZhcmlhbnRz
PgotICAgIHN0YXRpYyBjb25zdGV4cHIgdHlwZW5hbWUgX19tdWx0aV92aXNpdG9yX3JldHVybl90
eXBlPF9WaXNpdG9yLF9WYXJpYW50cy4uLj46Ol9fdHlwZQotICAgIF9fdmlzaXQoX1Zpc2l0b3Im
IF9fdmlzaXRvcixfVmFyaWFudHMmJiAuLi4gX192KXsKLSAgICAgICAgcmV0dXJuIChfX2FyZ19z
ZWxlY3RvcjxfVmFyaWFudEluZGV4LTE+KF9fdi4uLikuaW5kZXgoKT09X0luZGV4KQotICAgICAg
ICAgICAgPyBfX3Zpc2l0X2hlbHBlcjxfVmFyaWFudEluZGV4LTEsX19pbmRleF9zZXF1ZW5jZTxf
SW5kZXgsX0luZGljZXMuLi4+Pjo6X192aXNpdChfX3Zpc2l0b3Isc3RkOjpmb3J3YXJkPF9WYXJp
YW50cz4oX192KS4uLikKLSAgICAgICAgICAgIDogX192aXNpdF9oZWxwZXIyPF9JbmRleC0xLF9W
YXJpYW50SW5kZXgsX0luZGljZXMuLi4+OjpfX3Zpc2l0KF9fdmlzaXRvcixzdGQ6OmZvcndhcmQ8
X1ZhcmlhbnRzPihfX3YpLi4uKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTxzaXplX3QgX1Zhcmlh
bnRJbmRleCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9fdmlzaXRfaGVscGVyMjwt
MSxfVmFyaWFudEluZGV4LF9JbmRpY2VzLi4uPnsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmlz
aXRvcix0eXBlbmFtZSAuLi4gX1ZhcmlhbnRzPgotICAgIHN0YXRpYyBjb25zdGV4cHIgdHlwZW5h
bWUgX19tdWx0aV92aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9WYXJpYW50cy4uLj46Ol9f
dHlwZQotICAgIF9fdmlzaXQoX1Zpc2l0b3ImLF9WYXJpYW50cyYmIC4uLil7Ci0gICAgICAgIHJl
dHVybiBfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBfX211bHRpX3Zpc2l0b3Jf
cmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlPigiVmlzaXRpbmcgb2Yg
ZW1wdHkgVmFyaWFudCIpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50
Pgotc3RydWN0IF9fdmFyaWFudF90eXBlX2NvdW50OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4g
X1R5cGVzPgotc3RydWN0IF9fdmFyaWFudF90eXBlX2NvdW50PFZhcmlhbnQ8X1R5cGVzLi4uPj57
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgX192YWx1ZT1zaXplb2YuLi4oX1R5cGVzKTsK
LX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50Pgotc3RydWN0IF9fdmFyaWFudF90eXBl
X2NvdW50PF9WYXJpYW50Jj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgX192YWx1ZT1f
X3ZhcmlhbnRfdHlwZV9jb3VudDxfVmFyaWFudD46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBfVmFyaWFudD4KLXN0cnVjdCBfX3ZhcmlhbnRfdHlwZV9jb3VudDxfVmFyaWFudCBj
b25zdCY+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IF9fdmFsdWU9X192YXJpYW50X3R5
cGVfY291bnQ8X1ZhcmlhbnQ+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8c2l6ZV90IF9WYXJp
YW50SW5kZXgscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX3Zpc2l0X2hlbHBlcjxf
VmFyaWFudEluZGV4LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKLQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVmFyaWFudHM+Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3Is
X1ZhcmlhbnRzLi4uPjo6X190eXBlCi0gICAgX192aXNpdChfVmlzaXRvciYgX192aXNpdG9yLF9W
YXJpYW50cyYmIC4uLiBfX3YpewotICAgICAgICByZXR1cm4gX192aXNpdF9oZWxwZXIyPAotICAg
ICAgICAgICAgX192YXJpYW50X3R5cGVfY291bnQ8Ci0gICAgICAgICAgICAgICAgdHlwZW5hbWUg
X19hcmdfc2VsZWN0b3JfdDwKLSAgICAgICAgICAgICAgICAgICAgX1ZhcmlhbnRJbmRleC0xLF9W
YXJpYW50cy4uLj46Ol9fdHlwZT46Ol9fdmFsdWUtMSwKLSAgICAgICAgICAgIF9WYXJpYW50SW5k
ZXgsX0luZGljZXMuLi4+OjpfX3Zpc2l0KAotICAgICAgICAgICAgICAgIF9fdmlzaXRvcixzdGQ6
OmZvcndhcmQ8X1ZhcmlhbnRzJiY+KF9fdikuLi4pOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVmFyaWFudHM+Ci1jb25zdGV4cHIgdHlwZW5h
bWUgX19tdWx0aV92aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9WYXJpYW50cy4uLj46Ol9f
dHlwZQotdmlzaXQoX1Zpc2l0b3ImJiBfX3Zpc2l0b3IsX1ZhcmlhbnRzJiYgLi4uIF9fdil7Ci0g
ICAgcmV0dXJuIF9fdmlzaXRfaGVscGVyPHNpemVvZi4uLihfVmFyaWFudHMpLF9faW5kZXhfc2Vx
dWVuY2U8Pj46Ol9fdmlzaXQoCi0gICAgICAgIF9fdmlzaXRvcixzdGQ6OmZvcndhcmQ8X1Zhcmlh
bnRzPihfX3YpLi4uKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0
ZXhwciBib29sIG9wZXJhdG9yPT0oVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX2xocyxWYXJp
YW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsKLSAgICByZXR1cm4gKF9fbGhzLmluZGV4KCk9
PV9fcmhzLmluZGV4KCkpICYmCi0gICAgICAgICgoX19saHMuaW5kZXgoKT09LTEpIHx8Ci0gICAg
ICAgICBfX2VxdWFsaXR5X29wX3RhYmxlPFZhcmlhbnQ8X1R5cGVzLi4uPj46Ol9fZXF1YWxpdHlf
Y29tcGFyZVtfX2xocy5pbmRleCgpXSgKLSAgICAgICAgICAgICBfX2xocyxfX3JocykpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGJvb2wgb3BlcmF0b3Ih
PShWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fbGhzLFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25z
dCYgX19yaHMpewotICAgIHJldHVybiAhKF9fbGhzPT1fX3Jocyk7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoVmFyaWFudDxfVHlw
ZXMuLi4+IGNvbnN0JiBfX2xocyxWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsKLSAg
ICByZXR1cm4gKF9fbGhzLmluZGV4KCk8X19yaHMuaW5kZXgoKSkgfHwKLSAgICAgICAgKChfX2xo
cy5pbmRleCgpPT1fX3Jocy5pbmRleCgpKSAmJgotICAgICAgICAgKChfX2xocy5pbmRleCgpIT0t
MSkgJiYKLSAgICAgICAgICBfX2xlc3NfdGhhbl9vcF90YWJsZTxWYXJpYW50PF9UeXBlcy4uLj4+
OjoKLSAgICAgICAgICBfX2xlc3NfdGhhbl9jb21wYXJlW19fbGhzLmluZGV4KCldKF9fbGhzLF9f
cmhzKSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGJv
b2wgb3BlcmF0b3I+KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19saHMsVmFyaWFudDxfVHlw
ZXMuLi4+IGNvbnN0JiBfX3Jocyl7Ci0gICAgcmV0dXJuIF9fcmhzPF9fbGhzOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShWYXJp
YW50PF9UeXBlcy4uLj4gY29uc3QmIF9fbGhzLFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19y
aHMpewotICAgIHJldHVybiAhKF9fbGhzPF9fcmhzKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
Li4uIF9UeXBlcz4KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0oVmFyaWFudDxfVHlwZXMuLi4+
IGNvbnN0JiBfX2xocyxWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsKLSAgICByZXR1
cm4gIShfX2xocz5fX3Jocyk7Citjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBnZXQoVmFyaWFudDxf
VHlwZXMuLi4+IGNvbnN0JiYgX192KQoreworICAgIHJldHVybiBzdGQ6OmdldDxfVHlwZT4oV1RG
TW92ZShfX3YpKTsKIH0KIAotc3RydWN0IE1vbm9zdGF0ZXt9OwotCi1jb25zdGV4cHIgYm9vbCBv
cGVyYXRvcj09KE1vbm9zdGF0ZSBjb25zdCYsIE1vbm9zdGF0ZSBjb25zdCYpIHsgcmV0dXJuIHRy
dWU7IH0KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oTW9ub3N0YXRlIGNvbnN0JiwgTW9ub3N0
YXRlIGNvbnN0JikgeyByZXR1cm4gZmFsc2U7IH0KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0o
TW9ub3N0YXRlIGNvbnN0JiwgTW9ub3N0YXRlIGNvbnN0JikgeyByZXR1cm4gdHJ1ZTsgfQotY29u
c3RleHByIGJvb2wgb3BlcmF0b3I8PShNb25vc3RhdGUgY29uc3QmLCBNb25vc3RhdGUgY29uc3Qm
KSB7IHJldHVybiB0cnVlOyB9Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oTW9ub3N0YXRlIGNv
bnN0JiwgTW9ub3N0YXRlIGNvbnN0JikgeyByZXR1cm4gZmFsc2U7IH0KLWNvbnN0ZXhwciBib29s
IG9wZXJhdG9yPChNb25vc3RhdGUgY29uc3QmLCBNb25vc3RhdGUgY29uc3QmKSB7IHJldHVybiBm
YWxzZTsgfQotCi1zdHJ1Y3QgX19oYXNoX3Zpc2l0b3J7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
X1R5cGU+Ci0gICAgc2l6ZV90IG9wZXJhdG9yKCkoX1R5cGUgY29uc3QmIF9feCl7Ci0gICAgICAg
IHJldHVybiBzdGQ6Omhhc2g8X1R5cGU+KCkoX194KTsKLSAgICB9Ci19OwotCi0vLyAtLSBXZWJL
aXQgQWRkaXRpb25zIC0tCi0KIHRlbXBsYXRlPGNsYXNzIFYsIGNsYXNzLi4uIEY+Ci1hdXRvIHN3
aXRjaE9uKFYmJiB2LCBGJiYuLi4gZikgLT4gZGVjbHR5cGUoV1RGOjp2aXNpdChtYWtlVmlzaXRv
cihzdGQ6OmZvcndhcmQ8Rj4oZikuLi4pLCBzdGQ6OmZvcndhcmQ8Vj4odikpKQorYXV0byBzd2l0
Y2hPbihWJiYgdiwgRiYmLi4uIGYpIC0+IGRlY2x0eXBlKHN0ZDo6dmlzaXQobWFrZVZpc2l0b3Io
c3RkOjpmb3J3YXJkPEY+KGYpLi4uKSwgc3RkOjpmb3J3YXJkPFY+KHYpKSkKIHsKLSAgICByZXR1
cm4gV1RGOjp2aXNpdChtYWtlVmlzaXRvcihzdGQ6OmZvcndhcmQ8Rj4oZikuLi4pLCBzdGQ6OmZv
cndhcmQ8Vj4odikpOworICAgIHJldHVybiBzdGQ6OnZpc2l0KG1ha2VWaXNpdG9yKHN0ZDo6Zm9y
d2FyZDxGPihmKS4uLiksIHN0ZDo6Zm9yd2FyZDxWPih2KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdURgogCi1uYW1lc3BhY2Ugc3RkIHsKLQotdGVtcGxhdGU8Pgotc3RydWN0IGhhc2g8V1RGOjpN
b25vc3RhdGU+ewotICAgIHNpemVfdCBvcGVyYXRvcigpKFdURjo6TW9ub3N0YXRlKSBfX05PRVhD
RVBUewotICAgICAgICByZXR1cm4gNDI7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
Li4uIF9UeXBlcz4KLXN0cnVjdCBoYXNoPFdURjo6VmFyaWFudDxfVHlwZXMuLi4+PnsKLSAgICBz
aXplX3Qgb3BlcmF0b3IoKShXVEY6OlZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCAmdikgX19OT0VY
Q0VQVCB7Ci0gICAgICAgIHJldHVybiBzdGQ6Omhhc2g8cHRyZGlmZl90PigpKHYuaW5kZXgoKSkg
XiBXVEY6OnZpc2l0KFdURjo6X19oYXNoX3Zpc2l0b3IoKSwgdik7Ci0gICAgfQotfTsKLQotfSAv
LyBuYW1lc3BhY2Ugc3RkCi0KIHVzaW5nIFdURjo6TW9ub3N0YXRlOwogdXNpbmcgV1RGOjpWYXJp
YW50OwotCi0jZW5kaWYgLy8gIUNPTVBJTEVSKENMQU5HKSB8fCBXVEZfQ1BQX1NURF9WRVIgPj0g
MTQKLQotI2lmIENPTVBJTEVSKE1TVkMpCi0jcHJhZ21hIHdhcm5pbmcocG9wKQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlRW5naW5lLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGVFbmdpbmUuY3BwCmluZGV4
IGUxOTA0ZGJiNzZhZDIwMmNjNjNmNmEyNjdmODBlOTRlZTE5NjdiNjYuLjI1OTE0YjQwYmIyMzgz
YTA3ODgwNGY4OWIxMWI0MGQ4OTcwYjQzMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvY2FjaGUvRE9NQ2FjaGVFbmdpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvY2FjaGUvRE9NQ2FjaGVFbmdpbmUuY3BwCkBAIC0xMjksMjIgKzEyOSwyMiBAQCBib29sIHF1
ZXJ5Q2FjaGVNYXRjaChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFVSTCYg
dXJsLCBib29sIGhhc1ZhcgogCiBSZXNwb25zZUJvZHkgaXNvbGF0ZWRSZXNwb25zZUJvZHkoY29u
c3QgUmVzcG9uc2VCb2R5JiBib2R5KQogewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGJvZHks
IFtdKGNvbnN0IFJlZjxGb3JtRGF0YT4mIGZvcm1EYXRhKSB7CisgICAgcmV0dXJuIFdURjo6c3dp
dGNoT24oYm9keSwgW10oY29uc3QgUmVmPEZvcm1EYXRhPiYgZm9ybURhdGEpIC0+IFJlc3BvbnNl
Qm9keSB7CiAgICAgICAgIHJldHVybiBmb3JtRGF0YS0+aXNvbGF0ZWRDb3B5KCk7Ci0gICAgfSwg
W10oY29uc3QgUmVmPFNoYXJlZEJ1ZmZlcj4mIGJ1ZmZlcikgeworICAgIH0sIFtdKGNvbnN0IFJl
ZjxTaGFyZWRCdWZmZXI+JiBidWZmZXIpIC0+IFJlc3BvbnNlQm9keSB7CiAgICAgICAgIHJldHVy
biBidWZmZXItPmNvcHkoKTsKLSAgICB9LCBbXShjb25zdCBzdGQ6Om51bGxwdHJfdCYpIHsKKyAg
ICB9LCBbXShjb25zdCBzdGQ6Om51bGxwdHJfdCYpIC0+IFJlc3BvbnNlQm9keSB7CiAgICAgICAg
IHJldHVybiBET01DYWNoZUVuZ2luZTo6UmVzcG9uc2VCb2R5IHsgfTsKICAgICB9KTsKIH0KIAog
UmVzcG9uc2VCb2R5IGNvcHlSZXNwb25zZUJvZHkoY29uc3QgUmVzcG9uc2VCb2R5JiBib2R5KQog
ewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGJvZHksIFtdKGNvbnN0IFJlZjxGb3JtRGF0YT4m
IGZvcm1EYXRhKSB7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oYm9keSwgW10oY29uc3QgUmVm
PEZvcm1EYXRhPiYgZm9ybURhdGEpIC0+IFJlc3BvbnNlQm9keSB7CiAgICAgICAgIHJldHVybiBm
b3JtRGF0YS5jb3B5UmVmKCk7Ci0gICAgfSwgW10oY29uc3QgUmVmPFNoYXJlZEJ1ZmZlcj4mIGJ1
ZmZlcikgeworICAgIH0sIFtdKGNvbnN0IFJlZjxTaGFyZWRCdWZmZXI+JiBidWZmZXIpIC0+IFJl
c3BvbnNlQm9keSB7CiAgICAgICAgIHJldHVybiBidWZmZXIuY29weVJlZigpOwotICAgIH0sIFtd
KGNvbnN0IHN0ZDo6bnVsbHB0cl90JikgeworICAgIH0sIFtdKGNvbnN0IHN0ZDo6bnVsbHB0cl90
JikgLT4gUmVzcG9uc2VCb2R5IHsKICAgICAgICAgcmV0dXJuIERPTUNhY2hlRW5naW5lOjpSZXNw
b25zZUJvZHkgeyB9OwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9mZXRjaC9GZXRjaEJvZHlPd25lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Zl
dGNoL0ZldGNoQm9keU93bmVyLmNwcAppbmRleCBlZjZkYTA0OTg5OGViYWQ4MWU2Nzc1ODFmMGQx
MmJkMzM4ZjYxMjUzLi44ODRjOGI4NzgzOTE5OTBjMzc3NWMyMWM4M2MwMTExM2NjMDgxYTVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keU93bmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keU93bmVyLmNwcApA
QCAtMzg4LDkgKzM4OCw5IEBAIFJlc291cmNlRXJyb3IgRmV0Y2hCb2R5T3duZXI6OmxvYWRpbmdF
cnJvcigpIGNvbnN0CiAKIHN0ZDo6b3B0aW9uYWw8RXhjZXB0aW9uPiBGZXRjaEJvZHlPd25lcjo6
bG9hZGluZ0V4Y2VwdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9s
b2FkaW5nRXJyb3IsIFtdKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKSB7CisgICAgcmV0dXJu
IFdURjo6c3dpdGNoT24obV9sb2FkaW5nRXJyb3IsIFtdKGNvbnN0IFJlc291cmNlRXJyb3ImIGVy
cm9yKSAtPiBzdGQ6Om9wdGlvbmFsPEV4Y2VwdGlvbj4gewogICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgVHlwZUVycm9yLCBlcnJvci5zYW5pdGl6ZWREZXNjcmlwdGlvbigpIH07Ci0gICAgfSwg
W10oY29uc3QgRXhjZXB0aW9uJiBleGNlcHRpb24pIHsKKyAgICB9LCBbXShjb25zdCBFeGNlcHRp
b24mIGV4Y2VwdGlvbikgLT4gc3RkOjpvcHRpb25hbDxFeGNlcHRpb24+IHsKICAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IGV4Y2VwdGlvbiB9OwogICAgIH0sIFtdKGF1dG8mJikgLT4gc3RkOjpv
cHRpb25hbDxFeGNlcHRpb24+IHsKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHAKaW5kZXggNzRh
OWQ5Zjg2MzUxYzVhZWNiNzJiZGNlMjAwYzRkNzUwMDgyZWJhNy4uZmQ2ZDVhMzk5YjNmY2E2NjI0
ZmYzNDk0ZGJhZTg3N2Y1OGI0MTQxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCS2V5UGF0aC5jcHAKQEAgLTIwMyw3ICsyMDMsNyBAQCBib29sIGlzSURCS2V5
UGF0aFZhbGlkKGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfSk7Ci0gICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwga2V5
UGF0aCk7CisgICAgcmV0dXJuIHN0ZDo6dmlzaXQodmlzaXRvciwga2V5UGF0aCk7CiB9CiAKIElE
QktleVBhdGggaXNvbGF0ZWRDb3B5KGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCkBAIC0yMTgs
NyArMjE4LDcgQEAgSURCS2V5UGF0aCBpc29sYXRlZENvcHkoY29uc3QgSURCS2V5UGF0aCYga2V5
UGF0aCkKICAgICAgICAgcmV0dXJuIHZlY3RvckNvcHk7CiAgICAgfSk7CiAKLSAgICByZXR1cm4g
V1RGOjp2aXNpdCh2aXNpdG9yLCBrZXlQYXRoKTsKKyAgICByZXR1cm4gc3RkOjp2aXNpdCh2aXNp
dG9yLCBrZXlQYXRoKTsKIH0KIAogI2lmICFMT0dfRElTQUJMRUQKQEAgLTI0Miw3ICsyNDIsNyBA
QCBTdHJpbmcgbG9nZ2luZ1N0cmluZyhjb25zdCBJREJLZXlQYXRoJiBwYXRoKQogICAgICAgICBy
ZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogICAgIH0pOwogCi0gICAgcmV0dXJuIFdURjo6dmlz
aXQodmlzaXRvciwgcGF0aCk7CisgICAgcmV0dXJuIHN0ZDo6dmlzaXQodmlzaXRvciwgcGF0aCk7
CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJS
ZXF1ZXN0LmNwcAppbmRleCA1NGU3OGJhY2JmYjU5YTZiNGQ2YWNjM2IzZGViZGU5N2JiOGEyNmM0
Li45YWZkZDllMGMwYmNjYzA1ZWVjY2FhZDU0OWIwYTdjNzVjOWQwZTM3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcApAQCAtMjA2LDkgKzIw
Niw5IEBAIHVpbnQ2NF90IElEQlJlcXVlc3Q6OnNvdXJjZU9iamVjdFN0b3JlSWRlbnRpZmllcigp
IGNvbnN0CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9z
b3VyY2UudmFsdWUoKSwKLSAgICAgICAgW10gKGNvbnN0IFJlZlB0cjxJREJPYmplY3RTdG9yZT4m
IG9iamVjdFN0b3JlKSB7IHJldHVybiBvYmplY3RTdG9yZS0+aW5mbygpLmlkZW50aWZpZXIoKTsg
fSwKLSAgICAgICAgW10gKGNvbnN0IFJlZlB0cjxJREJJbmRleD4mIGluZGV4KSB7IHJldHVybiBp
bmRleC0+aW5mbygpLm9iamVjdFN0b3JlSWRlbnRpZmllcigpOyB9LAotICAgICAgICBbXSAoY29u
c3QgUmVmUHRyPElEQkN1cnNvcj4mKSB7IHJldHVybiAwOyB9CisgICAgICAgIFtdIChjb25zdCBS
ZWZQdHI8SURCT2JqZWN0U3RvcmU+JiBvYmplY3RTdG9yZSkgLT4gdWludDY0X3QgeyByZXR1cm4g
b2JqZWN0U3RvcmUtPmluZm8oKS5pZGVudGlmaWVyKCk7IH0sCisgICAgICAgIFtdIChjb25zdCBS
ZWZQdHI8SURCSW5kZXg+JiBpbmRleCkgLT4gdWludDY0X3QgeyByZXR1cm4gaW5kZXgtPmluZm8o
KS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKTsgfSwKKyAgICAgICAgW10gKGNvbnN0IFJlZlB0cjxJ
REJDdXJzb3I+JikgLT4gdWludDY0X3QgeyByZXR1cm4gMDsgfQogICAgICk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxp
emF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJT
ZXJpYWxpemF0aW9uLmNwcAppbmRleCA0YzlhOTU2YzIwZWMyNGI4NjRiZTFmNzYyM2RkNWIwZTI0
MDJlNGU0Li4yYTJjMWZjMzI5NTgwNWQ1MmZkNTZhZjMwYjQ1NWFlMmNjY2M0ODc3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXph
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcmlhbGl6YXRpb24uY3BwCkBAIC01Myw3ICs1Myw3IEBAIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IHNlcmlhbGl6ZUlEQktleVBhdGgoY29uc3Qgc3RkOjpvcHRpb25hbDxJREJLZXlQYXRoPiYga2V5
UGF0CiAgICAgICAgICAgICAgICAgZW5jb2Rlci5lbmNvZGVTdHJpbmcoInN0cmluZyIsIHN0cmlu
Zyk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7Ci0gICAgICAgIFdURjo6dmlzaXQodmlz
aXRvciwga2V5UGF0aC52YWx1ZSgpKTsKKyAgICAgICAgc3RkOjp2aXNpdCh2aXNpdG9yLCBrZXlQ
YXRoLnZhbHVlKCkpOwogICAgIH0gZWxzZQogICAgICAgICBlbmNvZGVyLT5lbmNvZGVFbnVtKCJ0
eXBlIiwgS2V5UGF0aFR5cGU6Ok51bGwpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcAppbmRleCBkMDlj
YjdkYTViYzg2Zjc5ZTMzZmU0OTE5ZjQ5N2QwZGRhZDdkZjYwLi43YTVlNDg0NmM0MDAyMjAwN2Nm
ODQ0NDc0N2ZlZmJlYmZhOWUyNGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAKQEAgLTE2Niw3ICsx
NjYsNyBAQCBTdHJpbmcgTWVkaWFDb250cm9sc0hvc3Q6OmRpc3BsYXlOYW1lRm9yVHJhY2soY29u
c3Qgc3RkOjpvcHRpb25hbDxUZXh0T3JBdWRpb1RyYQogICAgIGlmICghcGFnZSkKICAgICAgICAg
cmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKLSAgICByZXR1cm4gV1RGOjp2aXNpdChbcGFnZV0gKGF1
dG8mIHRyYWNrKSB7CisgICAgcmV0dXJuIHN0ZDo6dmlzaXQoW3BhZ2VdIChhdXRvJiB0cmFjaykg
ewogICAgICAgICByZXR1cm4gcGFnZS0+Z3JvdXAoKS5lbnN1cmVDYXB0aW9uUHJlZmVyZW5jZXMo
KS5kaXNwbGF5TmFtZUZvclRyYWNrKHRyYWNrLmdldCgpKTsKICAgICB9LCB0cmFjay52YWx1ZSgp
KTsKIH0KQEAgLTY4MSwxMyArNjgxLDEzIEBAIGJvb2wgTWVkaWFDb250cm9sc0hvc3Q6OnNob3dN
ZWRpYUNvbnRyb2xzQ29udGV4dE1lbnUoSFRNTEVsZW1lbnQmIHRhcmdldCwgU3RyaW5nCiAjZW5k
aWYgLy8gRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQogICAgICAgICAgICAgWyZdIChS
ZWZQdHI8QXVkaW9UcmFjaz4mIHNlbGVjdGVkQXVkaW9UcmFjaykgewogICAgICAgICAgICAgICAg
IGZvciAoYXV0byYgdHJhY2sgOiBpZE1hcC52YWx1ZXMoKSkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoYXV0byogYXVkaW9UcmFjayA9IFdURjo6Z2V0X2lmPFJlZlB0cjxBdWRpb1RyYWNrPj4o
dHJhY2spKQorICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byogYXVkaW9UcmFjayA9IHN0ZDo6
Z2V0X2lmPFJlZlB0cjxBdWRpb1RyYWNrPj4oJnRyYWNrKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICgqYXVkaW9UcmFjayktPnNldEVuYWJsZWQoKmF1ZGlvVHJhY2sgPT0gc2VsZWN0ZWRBdWRp
b1RyYWNrKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9LAogICAgICAgICAgICAg
WyZdIChSZWZQdHI8VGV4dFRyYWNrPiYgc2VsZWN0ZWRUZXh0VHJhY2spIHsKICAgICAgICAgICAg
ICAgICBmb3IgKGF1dG8mIHRyYWNrIDogaWRNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGF1dG8qIHRleHRUcmFjayA9IFdURjo6Z2V0X2lmPFJlZlB0cjxUZXh0VHJhY2s+
Pih0cmFjaykpCisgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiB0ZXh0VHJhY2sgPSBzdGQ6
OmdldF9pZjxSZWZQdHI8VGV4dFRyYWNrPj4oJnRyYWNrKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICgqdGV4dFRyYWNrKS0+c2V0TW9kZShUZXh0VHJhY2s6Ok1vZGU6OkRpc2FibGVkKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbWVkaWFFbGVtZW50LnNldFNlbGVjdGVk
VGV4dFRyYWNrKHNlbGVjdGVkVGV4dFRyYWNrLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAKaW5kZXgg
M2M3NmM1N2E4YjczNWRiMGU1YjE4OGNmMmU0NmZjZTJmOWE5ZTM1MS4uZmUxYTAxZWRjZGY5ZDgw
YWUwZTUyNzgyOGNjNjkxYmQyOTIzNTQ3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAKQEAgLTMzMSw3ICsz
MzEsNyBAQCB2b2lkIFJUQ1BlZXJDb25uZWN0aW9uOjphZGRJY2VDYW5kaWRhdGUoQ2FuZGlkYXRl
JiYgcnRjQ2FuZGlkYXRlLCBSZWY8RGVmZXJyZWRQcgogICAgIHN0ZDo6b3B0aW9uYWw8RXhjZXB0
aW9uPiBleGNlcHRpb247CiAgICAgUmVmUHRyPFJUQ0ljZUNhbmRpZGF0ZT4gY2FuZGlkYXRlOwog
ICAgIGlmIChydGNDYW5kaWRhdGUpIHsKLSAgICAgICAgY2FuZGlkYXRlID0gc3dpdGNoT24oKnJ0
Y0NhbmRpZGF0ZSwgWyZleGNlcHRpb25dKFJUQ0ljZUNhbmRpZGF0ZUluaXQmIGluaXQpIC0+IFJl
ZlB0cjxSVENJY2VDYW5kaWRhdGU+IHsKKyAgICAgICAgY2FuZGlkYXRlID0gV1RGOjpzd2l0Y2hP
bigqcnRjQ2FuZGlkYXRlLCBbJmV4Y2VwdGlvbl0oUlRDSWNlQ2FuZGlkYXRlSW5pdCYgaW5pdCkg
LT4gUmVmUHRyPFJUQ0ljZUNhbmRpZGF0ZT4gewogICAgICAgICAgICAgaWYgKGluaXQuY2FuZGlk
YXRlLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENSdHBUcmFuc2Zvcm0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENSdHBUcmFuc2Zvcm0u
Y3BwCmluZGV4IGRhZjg5N2VhNDcyMTg2ZDZjYzdiN2FkNjIyZGZmNjZmYTYxNzc1NmIuLjAxZjBl
MDFjYmQ0NWNjNjIyNzU1MTRiMDZhZjMzZTk5ZDI2MDI3Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRwVHJhbnNmb3JtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1J0cFRyYW5zZm9ybS5jcHAKQEAgLTUy
LDcgKzUyLDcgQEAgUlRDUnRwVHJhbnNmb3JtOjp+UlRDUnRwVHJhbnNmb3JtKCkKIAogYm9vbCBS
VENSdHBUcmFuc2Zvcm06OmlzQXR0YWNoZWQoKSBjb25zdAogewotICAgIHJldHVybiBzd2l0Y2hP
bihtX3RyYW5zZm9ybSwgWyZdKGNvbnN0IFJlZlB0cjxSVENSdHBTRnJhbWVUcmFuc2Zvcm0+JiBz
ZnJhbWVUcmFuc2Zvcm0pIHsKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3RyYW5zZm9ybSwg
WyZdKGNvbnN0IFJlZlB0cjxSVENSdHBTRnJhbWVUcmFuc2Zvcm0+JiBzZnJhbWVUcmFuc2Zvcm0p
IHsKICAgICAgICAgcmV0dXJuIHNmcmFtZVRyYW5zZm9ybS0+aXNBdHRhY2hlZCgpOwogICAgIH0s
IFsmXShjb25zdCBSZWZQdHI8UlRDUnRwU2NyaXB0VHJhbnNmb3JtPiYgc2NyaXB0VHJhbnNmb3Jt
KSB7CiAgICAgICAgIHJldHVybiBzY3JpcHRUcmFuc2Zvcm0tPmlzQXR0YWNoZWQoKTsKQEAgLTEz
MSwxNCArMTMxLDE0IEBAIHZvaWQgUlRDUnRwVHJhbnNmb3JtOjpkZXRhY2hGcm9tU2VuZGVyKFJU
Q1J0cFNlbmRlciYpCiAKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSVENSdHBUcmFuc2Zvcm0mIGEs
IGNvbnN0IFJUQ1J0cFRyYW5zZm9ybSYgYikKIHsKLSAgICByZXR1cm4gc3dpdGNoT24oYS5tX3Ry
YW5zZm9ybSwgWyZdKGNvbnN0IFJlZlB0cjxSVENSdHBTRnJhbWVUcmFuc2Zvcm0+JiBzZnJhbWVU
cmFuc2Zvcm1BKSB7Ci0gICAgICAgIHJldHVybiBzd2l0Y2hPbihiLm1fdHJhbnNmb3JtLCBbJl0o
Y29uc3QgUmVmUHRyPFJUQ1J0cFNGcmFtZVRyYW5zZm9ybT4mIHNmcmFtZVRyYW5zZm9ybUIpIHsK
KyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihhLm1fdHJhbnNmb3JtLCBbJl0oY29uc3QgUmVmUHRy
PFJUQ1J0cFNGcmFtZVRyYW5zZm9ybT4mIHNmcmFtZVRyYW5zZm9ybUEpIHsKKyAgICAgICAgcmV0
dXJuIFdURjo6c3dpdGNoT24oYi5tX3RyYW5zZm9ybSwgWyZdKGNvbnN0IFJlZlB0cjxSVENSdHBT
RnJhbWVUcmFuc2Zvcm0+JiBzZnJhbWVUcmFuc2Zvcm1CKSB7CiAgICAgICAgICAgICByZXR1cm4g
c2ZyYW1lVHJhbnNmb3JtQS5nZXQoKSA9PSBzZnJhbWVUcmFuc2Zvcm1CLmdldCgpOwogICAgICAg
ICB9LCBbJl0oY29uc3QgUmVmUHRyPFJUQ1J0cFNjcmlwdFRyYW5zZm9ybT4mKSB7CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0pOwogICAgIH0sIFsmXShjb25zdCBSZWZQdHI8
UlRDUnRwU2NyaXB0VHJhbnNmb3JtPiYgc2NyaXB0VHJhbnNmb3JtQSkgewotICAgICAgICByZXR1
cm4gc3dpdGNoT24oYi5tX3RyYW5zZm9ybSwgWyZdKGNvbnN0IFJlZlB0cjxSVENSdHBTRnJhbWVU
cmFuc2Zvcm0+JikgeworICAgICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihiLm1fdHJhbnNmb3Jt
LCBbJl0oY29uc3QgUmVmUHRyPFJUQ1J0cFNGcmFtZVRyYW5zZm9ybT4mKSB7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0sIFsmXShjb25zdCBSZWZQdHI8UlRDUnRwU2NyaXB0
VHJhbnNmb3JtPiYgc2NyaXB0VHJhbnNmb3JtQikgewogICAgICAgICAgICAgcmV0dXJuIHNjcmlw
dFRyYW5zZm9ybUEuZ2V0KCkgPT0gc2NyaXB0VHJhbnNmb3JtQi5nZXQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1J0
cFNlbmRlckJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9s
aWJ3ZWJydGMvTGliV2ViUlRDUnRwU2VuZGVyQmFja2VuZC5jcHAKaW5kZXggZDAwNzE4MmFlMTc2
MjQwMTQ1YmY0ZjIxMGRjMmQ4ZjlmYWUxMTkzYS4uYzk5OTIyMDNhNWJkNWQxNzkyOTlhZjg3Njk1
ODVhMmUyMTYyZWVmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDUnRwU2VuZGVyQmFja2VuZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDUnRwU2VuZGVy
QmFja2VuZC5jcHAKQEAgLTU5LDE3ICs1OSw2IEBAIExpYldlYlJUQ1J0cFNlbmRlckJhY2tlbmQ6
On5MaWJXZWJSVENSdHBTZW5kZXJCYWNrZW5kKCkKICAgICBzdG9wU291cmNlKCk7CiB9CiAKLXN0
YXRpYyBib29sIG9wZXJhdG9yPT0oY29uc3QgTGliV2ViUlRDUnRwU2VuZGVyQmFja2VuZDo6U291
cmNlJiBhLCBjb25zdCBMaWJXZWJSVENSdHBTZW5kZXJCYWNrZW5kOjpTb3VyY2UmIGIpCi17Ci0g
ICAgcmV0dXJuIHN3aXRjaE9uKGEsIFsmYl0oY29uc3QgUmVmPFJlYWx0aW1lT3V0Z29pbmdBdWRp
b1NvdXJjZT4mIHNvdXJjZSkgewotICAgICAgICByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2
ZTxSZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlPj4oYikgJiYgc291cmNlLnB0cigpID09
IFdURjo6Z2V0PFJlZjxSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2U+PihiKS5wdHIoKTsKLSAg
ICB9LCBbJmJdKGNvbnN0IFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U+JiBzb3VyY2Up
IHsKLSAgICAgICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPFJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZT4+KGIpICYmIHNvdXJjZS5wdHIoKSA9PSBXVEY6OmdldDxSZWY8UmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlPj4oYikucHRyKCk7Ci0gICAgfSwgWyZiXShzdGQ6Om51
bGxwdHJfdCkgewotICAgICAgICByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxzdGQ6Om51
bGxwdHJfdD4oYik7Ci0gICAgfSk7Ci19Ci0KIHZvaWQgTGliV2ViUlRDUnRwU2VuZGVyQmFja2Vu
ZDo6c3RhcnRTb3VyY2UoKQogewogICAgIC8vIFdlIGFzeW5jaHJvbm91c2x5IHN0YXJ0IHRoZSBz
b3VyY2VzIHRvIGd1YXJhbnRlZSBtZWRpYSBnb2VzIHRocm91Z2ggdGhlIHRyYW5zZm9ybSBpZiBh
IHRyYW5zZm9ybSBpcyBzZXQgd2hlbiBjcmVhdGluZyB0aGUgdHJhY2suCkBAIC0xODQsNyArMTcz
LDcgQEAgdm9pZCBMaWJXZWJSVENSdHBTZW5kZXJCYWNrZW5kOjpzZXRNZWRpYVN0cmVhbUlkcyhj
b25zdCBWZWN0b3I8U3RyaW5nPiYgc3RyZWFtSWQKIAogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlKiBMaWJXZWJSVENSdHBTZW5kZXJCYWNrZW5kOjp2aWRlb1NvdXJjZSgpCiB7Ci0gICAgcmV0
dXJuIHN3aXRjaE9uKG1fc291cmNlLAorICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fc291cmNl
LAogICAgICAgICBbXShSZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlPiYgc291cmNlKSB7
IHJldHVybiBzb3VyY2UucHRyKCk7IH0sCiAgICAgICAgIFtdKGNvbnN0IGF1dG8mKSAtPiBSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2UqIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICApOwpAQCAt
MTkyLDcgKzE4MSw3IEBAIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZSogTGliV2ViUlRDUnRw
U2VuZGVyQmFja2VuZDo6dmlkZW9Tb3VyY2UoKQogCiBib29sIExpYldlYlJUQ1J0cFNlbmRlckJh
Y2tlbmQ6Omhhc1NvdXJjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN3aXRjaE9uKG1fc291cmNl
LAorICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fc291cmNlLAogICAgICAgICBbXShjb25zdCBz
dGQ6Om51bGxwdHJfdCYpIHsgcmV0dXJuIGZhbHNlOyB9LAogICAgICAgICBbXShjb25zdCBhdXRv
JikgeyByZXR1cm4gdHJ1ZTsgfQogICAgICk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnhyL1dlYlhSRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4
ci9XZWJYUkZyYW1lLmNwcAppbmRleCA3ZTdmNjlkYzVhODU2OWI0NjM3NDFlNjcwNGQ1YWU2NjAw
M2FlODU1Li5jZDcxYjM5MTE1Nzg1NTliOWFmYmQ0MzgzODQ2MjEyNDNiZDU5MDNjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSRnJhbWUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJGcmFtZS5jcHAKQEAgLTE4NCw3ICsxODQs
NyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8V2ViWFJWaWV3ZXJQb3NlPj4gV2ViWFJGcmFtZTo6Z2V0
Vmlld2VyUG9zZShjb25zdCBEb2N1bWVudCYgZAogICAgICAgICBhdXRvIHRyYW5zZm9ybSA9IFdl
YlhSUmlnaWRUcmFuc2Zvcm06OmNyZWF0ZShwb3NlLT50cmFuc2Zvcm0oKS5yYXdUcmFuc2Zvcm0o
KSAqIG9mZnNldCk7CiAKICAgICAgICAgLy8gU2V0IHByb2plY3Rpb24gbWF0cml4IGZvciBlYWNo
IHZpZXcKLSAgICAgICAgc3RkOjphcnJheTxmbG9hdCwgMTY+IHByb2plY3Rpb24gPSBzd2l0Y2hP
bihmcmFtZURhdGEudmlld3NbaW5kZXhdLnByb2plY3Rpb24sIFsmXShjb25zdCBQbGF0Zm9ybVhS
OjpEZXZpY2U6OkZyYW1lRGF0YTo6Rm92JiBmb3YpIHsKKyAgICAgICAgc3RkOjphcnJheTxmbG9h
dCwgMTY+IHByb2plY3Rpb24gPSBXVEY6OnN3aXRjaE9uKGZyYW1lRGF0YS52aWV3c1tpbmRleF0u
cHJvamVjdGlvbiwgWyZdKGNvbnN0IFBsYXRmb3JtWFI6OkRldmljZTo6RnJhbWVEYXRhOjpGb3Ym
IGZvdikgewogICAgICAgICAgICAgZG91YmxlIG5lYXIgPSBtX3Nlc3Npb24tPnJlbmRlclN0YXRl
KCkuZGVwdGhOZWFyKCk7CiAgICAgICAgICAgICBkb3VibGUgZmFyID0gbV9zZXNzaW9uLT5yZW5k
ZXJTdGF0ZSgpLmRlcHRoRmFyKCk7CiAgICAgICAgICAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25N
YXRyaXg6OmZyb21Qcm9qZWN0aW9uKGZvdi51cCwgZm92LmRvd24sIGZvdi5sZWZ0LCBmb3Yucmln
aHQsIG5lYXIsIGZhcikudG9Db2x1bW5NYWpvckZsb2F0QXJyYXkoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRl
ZE9iamVjdC5jcHAKaW5kZXggZWJhNTE5MjcyNjJkY2I0NTNjYzIzNDg4MGIzN2U5Nzk0MDE2ZmZj
MC4uYzcxNmIzYjdmZTFlYjJkYzM0OTRiNjU5N2I1NzMwYzFjNDgwYTUzZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVj
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJ
c29sYXRlZE9iamVjdC5jcHAKQEAgLTc4MSw3ICs3ODEsNyBAQCBJbnRQb2ludCBBWElzb2xhdGVk
T2JqZWN0OjppbnRQb2ludEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSkgYwogewogICAgIGF1dG8gdmFsdWUgPSBtX3Byb3BlcnR5TWFwLmdldChwcm9wZXJ0eU5hbWUp
OwogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHZhbHVlLAotICAgICAgICBbXSAoSW50UG9pbnQm
IHR5cGVkVmFsdWUpIHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCisgICAgICAgIFtdIChJbnRQb2lu
dCYgdHlwZWRWYWx1ZSkgLT4gSW50UG9pbnQgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKICAgICAg
ICAgW10gKGF1dG8mKSB7IHJldHVybiBJbnRQb2ludCgpOyB9CiAgICAgKTsKIH0KQEAgLTc5MCw3
ICs3OTAsNyBAQCBBWENvcmVPYmplY3QqIEFYSXNvbGF0ZWRPYmplY3Q6Om9iamVjdEF0dHJpYnV0
ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZQogewogICAgIGF1dG8gdmFsdWUgPSBt
X3Byb3BlcnR5TWFwLmdldChwcm9wZXJ0eU5hbWUpOwogICAgIEFYSUQgbm9kZUlEID0gV1RGOjpz
d2l0Y2hPbih2YWx1ZSwKLSAgICAgICAgW10gKEFYSUQmIHR5cGVkVmFsdWUpIHsgcmV0dXJuIHR5
cGVkVmFsdWU7IH0sCisgICAgICAgIFtdIChBWElEJiB0eXBlZFZhbHVlKSAtPiBBWElEIHsgcmV0
dXJuIHR5cGVkVmFsdWU7IH0sCiAgICAgICAgIFtdIChhdXRvJikgeyByZXR1cm4gSW52YWxpZEFY
SUQ7IH0KICAgICApOwogCkBAIC04MDIsNyArODAyLDcgQEAgVCBBWElzb2xhdGVkT2JqZWN0Ojpy
ZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAogewog
ICAgIGF1dG8gdmFsdWUgPSBtX3Byb3BlcnR5TWFwLmdldChwcm9wZXJ0eU5hbWUpOwogICAgIHJl
dHVybiBXVEY6OnN3aXRjaE9uKHZhbHVlLAotICAgICAgICBbXSAoVCYgdHlwZWRWYWx1ZSkgeyBy
ZXR1cm4gdHlwZWRWYWx1ZTsgfSwKKyAgICAgICAgW10gKFQmIHR5cGVkVmFsdWUpIC0+IFQgeyBy
ZXR1cm4gdHlwZWRWYWx1ZTsgfSwKICAgICAgICAgW10gKGF1dG8mKSB7IHJldHVybiBUIHsgfTsg
fQogICAgICk7CiB9CkBAIC04MTIsNyArODEyLDcgQEAgVmVjdG9yPFQ+IEFYSXNvbGF0ZWRPYmpl
Y3Q6OnZlY3RvckF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY28K
IHsKICAgICBhdXRvIHZhbHVlID0gbV9wcm9wZXJ0eU1hcC5nZXQocHJvcGVydHlOYW1lKTsKICAg
ICByZXR1cm4gV1RGOjpzd2l0Y2hPbih2YWx1ZSwKLSAgICAgICAgW10gKFZlY3RvcjxUPiYgdHlw
ZWRWYWx1ZSkgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKKyAgICAgICAgW10gKFZlY3RvcjxUPiYg
dHlwZWRWYWx1ZSkgLT4gVmVjdG9yPFQ+IHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCiAgICAgICAg
IFtdIChhdXRvJikgeyByZXR1cm4gVmVjdG9yPFQ+KCk7IH0KICAgICApOwogfQpAQCAtODIyLDcg
KzgyMiw3IEBAIE9wdGlvblNldDxUPiBBWElzb2xhdGVkT2JqZWN0OjpvcHRpb25TZXRBdHRyaWJ1
dGVWYWx1ZShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hCiB7CiAgICAgYXV0byB2YWx1ZSA9IG1f
cHJvcGVydHlNYXAuZ2V0KHByb3BlcnR5TmFtZSk7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24o
dmFsdWUsCi0gICAgICAgIFtdIChUJiB0eXBlZFZhbHVlKSB7IHJldHVybiB0eXBlZFZhbHVlOyB9
LAorICAgICAgICBbXSAoVCYgdHlwZWRWYWx1ZSkgLT4gT3B0aW9uU2V0PFQ+IHsgcmV0dXJuIHR5
cGVkVmFsdWU7IH0sCiAgICAgICAgIFtdIChhdXRvJikgeyByZXR1cm4gT3B0aW9uU2V0PFQ+KCk7
IH0KICAgICApOwogfQpAQCAtODMyLDcgKzgzMiw3IEBAIHN0ZDo6cGFpcjxULCBUPiBBWElzb2xh
dGVkT2JqZWN0OjpwYWlyQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
CiB7CiAgICAgYXV0byB2YWx1ZSA9IG1fcHJvcGVydHlNYXAuZ2V0KHByb3BlcnR5TmFtZSk7CiAg
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24odmFsdWUsCi0gICAgICAgIFtdIChzdGQ6OnBhaXI8VCwg
VD4mIHR5cGVkVmFsdWUpIHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCisgICAgICAgIFtdIChzdGQ6
OnBhaXI8VCwgVD4mIHR5cGVkVmFsdWUpIC0+IHN0ZDo6cGFpcjxULCBUPiB7IHJldHVybiB0eXBl
ZFZhbHVlOyB9LAogICAgICAgICBbXSAoYXV0byYpIHsgcmV0dXJuIHN0ZDo6cGFpcjxULCBUPigw
LCAxKTsgfQogICAgICk7CiB9CkBAIC04NDEsOCArODQxLDggQEAgdWludDY0X3QgQVhJc29sYXRl
ZE9iamVjdDo6dWludDY0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
KSBjb24KIHsKICAgICBhdXRvIHZhbHVlID0gbV9wcm9wZXJ0eU1hcC5nZXQocHJvcGVydHlOYW1l
KTsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbih2YWx1ZSwKLSAgICAgICAgW10gKHVpbnQ2NF90
JiB0eXBlZFZhbHVlKSB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAotICAgICAgICBbXSAoYXV0byYp
IHsgcmV0dXJuIDA7IH0KKyAgICAgICAgW10gKHVpbnQ2NF90JiB0eXBlZFZhbHVlKSAtPiB1aW50
NjRfdCB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAorICAgICAgICBbXSAoYXV0byYpIC0+IHVpbnQ2
NF90IHsgcmV0dXJuIDA7IH0KICAgICApOwogfQogCkBAIC04NTAsNyArODUwLDcgQEAgVVJMIEFY
SXNvbGF0ZWRPYmplY3Q6OnVybEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSkgY29uc3QKIHsKICAgICBhdXRvIHZhbHVlID0gbV9wcm9wZXJ0eU1hcC5nZXQocHJvcGVy
dHlOYW1lKTsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbih2YWx1ZSwKLSAgICAgICAgW10gKFVS
TCYgdHlwZWRWYWx1ZSkgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKKyAgICAgICAgW10gKFVSTCYg
dHlwZWRWYWx1ZSkgLT4gVVJMIHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCiAgICAgICAgIFtdIChh
dXRvJikgeyByZXR1cm4gVVJMKCk7IH0KICAgICApOwogfQpAQCAtODU5LDcgKzg1OSw3IEBAIFBh
dGggQVhJc29sYXRlZE9iamVjdDo6cGF0aEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSkgY29uc3QKIHsKICAgICBhdXRvIHZhbHVlID0gbV9wcm9wZXJ0eU1hcC5nZXQo
cHJvcGVydHlOYW1lKTsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbih2YWx1ZSwKLSAgICAgICAg
W10gKFBhdGgmIHR5cGVkVmFsdWUpIHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCisgICAgICAgIFtd
IChQYXRoJiB0eXBlZFZhbHVlKSAtPiBQYXRoIHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCiAgICAg
ICAgIFtdIChhdXRvJikgeyByZXR1cm4gUGF0aCgpOyB9CiAgICAgKTsKIH0KQEAgLTg2OCw3ICs4
NjgsNyBAQCBDb2xvciBBWElzb2xhdGVkT2JqZWN0Ojpjb2xvckF0dHJpYnV0ZVZhbHVlKEFYUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKIHsKICAgICBhdXRvIHZhbHVlID0gbV9wcm9w
ZXJ0eU1hcC5nZXQocHJvcGVydHlOYW1lKTsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbih2YWx1
ZSwKLSAgICAgICAgW10gKENvbG9yJiB0eXBlZFZhbHVlKSB7IHJldHVybiB0eXBlZFZhbHVlOyB9
LAorICAgICAgICBbXSAoQ29sb3ImIHR5cGVkVmFsdWUpIC0+IENvbG9yIHsgcmV0dXJuIHR5cGVk
VmFsdWU7IH0sCiAgICAgICAgIFtdIChhdXRvJikgeyByZXR1cm4gQ29sb3IoKTsgfQogICAgICk7
CiB9CkBAIC04NzcsOCArODc3LDggQEAgZmxvYXQgQVhJc29sYXRlZE9iamVjdDo6ZmxvYXRBdHRy
aWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7CiAgICAgYXV0
byB2YWx1ZSA9IG1fcHJvcGVydHlNYXAuZ2V0KHByb3BlcnR5TmFtZSk7CiAgICAgcmV0dXJuIFdU
Rjo6c3dpdGNoT24odmFsdWUsCi0gICAgICAgIFtdIChmbG9hdCYgdHlwZWRWYWx1ZSkgeyByZXR1
cm4gdHlwZWRWYWx1ZTsgfSwKLSAgICAgICAgW10gKGF1dG8mKSB7IHJldHVybiAwOyB9CisgICAg
ICAgIFtdIChmbG9hdCYgdHlwZWRWYWx1ZSkgLT4gZmxvYXQgeyByZXR1cm4gdHlwZWRWYWx1ZTsg
fSwKKyAgICAgICAgW10gKGF1dG8mKSB7IHJldHVybiAwLjBmOyB9CiAgICAgKTsKIH0KIApAQCAt
ODg2LDggKzg4Niw4IEBAIGRvdWJsZSBBWElzb2xhdGVkT2JqZWN0Ojpkb3VibGVBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7CiAgICAgYXV0byB2YWx1
ZSA9IG1fcHJvcGVydHlNYXAuZ2V0KHByb3BlcnR5TmFtZSk7CiAgICAgcmV0dXJuIFdURjo6c3dp
dGNoT24odmFsdWUsCi0gICAgICAgIFtdIChkb3VibGUmIHR5cGVkVmFsdWUpIHsgcmV0dXJuIHR5
cGVkVmFsdWU7IH0sCi0gICAgICAgIFtdIChhdXRvJikgeyByZXR1cm4gMDsgfQorICAgICAgICBb
XSAoZG91YmxlJiB0eXBlZFZhbHVlKSAtPiBkb3VibGUgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwK
KyAgICAgICAgW10gKGF1dG8mKSB7IHJldHVybiAwLjA7IH0KICAgICApOwogfQogCkBAIC04OTUs
OCArODk1LDggQEAgdW5zaWduZWQgQVhJc29sYXRlZE9iamVjdDo6dW5zaWduZWRBdHRyaWJ1dGVW
YWx1ZShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGMKIHsKICAgICBhdXRvIHZhbHVlID0g
bV9wcm9wZXJ0eU1hcC5nZXQocHJvcGVydHlOYW1lKTsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hP
bih2YWx1ZSwKLSAgICAgICAgW10gKHVuc2lnbmVkJiB0eXBlZFZhbHVlKSB7IHJldHVybiB0eXBl
ZFZhbHVlOyB9LAotICAgICAgICBbXSAoYXV0byYpIHsgcmV0dXJuIDA7IH0KKyAgICAgICAgW10g
KHVuc2lnbmVkJiB0eXBlZFZhbHVlKSAtPiB1bnNpZ25lZCB7IHJldHVybiB0eXBlZFZhbHVlOyB9
LAorICAgICAgICBbXSAoYXV0byYpIHsgcmV0dXJuIDB1OyB9CiAgICAgKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQnVmZmVyU291cmNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9CdWZmZXJTb3VyY2UuaAppbmRleCA5MGU0N2M5ZWU1MDRkZjY0
YjMzNDMzZDc1MDVjODRmYjc0MzBmZmI4Li5iMmYxYzYzNWZiZjc3ZDQ0Y2Q2MjIyYzA0NDEwOGMx
MzUxNWZiNDFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9CdWZmZXJT
b3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9CdWZmZXJTb3VyY2UuaApA
QCAtNDUsMTQgKzQ1LDE0IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEoKSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoW10oYXV0byYgYnVmZmVyKSAt
PiBjb25zdCB1aW50OF90KiB7CisgICAgICAgIHJldHVybiBzdGQ6OnZpc2l0KFtdKGF1dG8mIGJ1
ZmZlcikgLT4gY29uc3QgdWludDhfdCogewogICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlciA/IHN0
YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZmZXItPmRhdGEoKSkgOiBudWxscHRyOwogICAg
ICAgICB9LCBtX3ZhcmlhbnQpOwogICAgIH0KIAogICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoW10oYXV0byYgYnVmZmVyKSAtPiBzaXpl
X3QgeworICAgICAgICByZXR1cm4gc3RkOjp2aXNpdChbXShhdXRvJiBidWZmZXIpIC0+IHNpemVf
dCB7CiAgICAgICAgICAgICByZXR1cm4gYnVmZmVyID8gYnVmZmVyLT5ieXRlTGVuZ3RoKCkgOiAw
OwogICAgICAgICB9LCBtX3ZhcmlhbnQpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKaW5kZXggYmFlZGQwYzA2OWNhMjgx
YjI5ODQ3MWUzMGI2OTc0YjUyNTZkMzMwZS4uYjJmNGI5ZmU2MTVlY2IyMTM2M2NmNTgzZGM3MzVj
Zjc3YzMwNjA4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmlu
ZGluZ1V0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmlu
ZGluZ1V0aWxpdGllcy5jcHAKQEAgLTQ2OSw3ICs0NjksNyBAQCBzdGF0aWMgVmVjdG9yPElEQktl
eURhdGE+IGNyZWF0ZUtleVBhdGhBcnJheShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdAogICAgICAgICByZXR1cm4ga2V5czsKICAgICB9KTsKIAotICAgIHJldHVybiBXVEY6OnZp
c2l0KHZpc2l0b3IsIGluZm8ua2V5UGF0aCgpKTsKKyAgICByZXR1cm4gc3RkOjp2aXNpdCh2aXNp
dG9yLCBpbmZvLmtleVBhdGgoKSk7CiB9CiAKIHZvaWQgZ2VuZXJhdGVJbmRleEtleUZvclZhbHVl
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdCBJREJJbmRleEluZm8m
IGluZm8sIEpTVmFsdWUgdmFsdWUsIEluZGV4S2V5JiBvdXRLZXksIGNvbnN0IHN0ZDo6b3B0aW9u
YWw8SURCS2V5UGF0aD4mIG9iamVjdFN0b3JlS2V5UGF0aCwgY29uc3QgSURCS2V5RGF0YSYgb2Jq
ZWN0U3RvcmVLZXkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUNvbnZlcnRVbmlvbi5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0
VW5pb24uaAppbmRleCAwNzYyMTFhNzZlNGEzN2E4NTRkZGQ5ZTA2ODVhNzFjNjgzMjJlYWU0Li5h
NGJkNmFlZTMwMGQ2MmNjOWQ2NTMyMDYzZjM2NmRiMDE5OTUxZWEyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRVbmlvbi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFVuaW9uLmgKQEAgLTM4NSw3ICszODUsNyBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5pb248VC4u
Lj4+IHsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKIAotICAgIHVz
aW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5kOjpwdHJkaWZmX3Q8
MD4sIFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0aW9uVHlwZT46OnZhbHVlPjsKKyAgICB1
c2luZyBTZXF1ZW5jZSA9IGJyaWdhbmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90
PDA+LCBzdGQ6OnZhcmlhbnRfc2l6ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47CiAKICAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgSW1w
bGVtZW50YXRpb25UeXBlJiB2YXJpYW50KQogICAgIHsKQEAgLTM5Niw3ICszOTYsNyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsK
ICAgICAgICAgICAgIHVzaW5nIEkgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNl
PGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKICAgICAgICAgICAgIGlmIChJOjp2YWx1ZSA9
PSBpbmRleCkgewogICAgICAgICAgICAgICAgIEFTU0VSVCghcmV0dXJuVmFsdWUpOwotICAgICAg
ICAgICAgICAgIHJldHVyblZhbHVlID0gdG9KUzxicmlnYW5kOjphdDxUeXBlTGlzdCwgST4+KGxl
eGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXQ8STo6dmFsdWU+KHZhcmlh
bnQpKTsKKyAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlw
ZUxpc3QsIEk+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIHN0ZDo6Z2V0PEk6
OnZhbHVlPih2YXJpYW50KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRXZWJHTC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRXZWJHTC5jcHAKaW5kZXggZGQy
OTY4OGMyYmM2Yzg4MDA1NGUxODdmMWQzMDlhYTg5MDYyZTg4Ni4uOTIyYWE3MTM3Zjk0NTIyNDAw
YmE5MGNkOTdlN2U4NWY1MjlhZWI0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01Db252ZXJ0V2ViR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQ29udmVydFdlYkdMLmNwcApAQCAtODAsNDkgKzgwLDM5IEBAIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiBKU1ZhbHVlIGNvbnZlcnRUb0pTVmFsdWUoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFdl
YkdMQW55JiBhbnkpCiB7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oYW55LAotICAgICAgICBb
XSAoc3RkOjpudWxscHRyX3QpIHsKKyAgICAgICAgW10gKHN0ZDo6bnVsbHB0cl90KSAtPiBKU1Zh
bHVlIHsKICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICAgICAgfSwKLSAgICAgICAg
W10gKGJvb2wgdmFsdWUpIHsKKyAgICAgICAgfSwgW10gKGJvb2wgdmFsdWUpIC0+IEpTVmFsdWUg
ewogICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbih2YWx1ZSk7Ci0gICAgICAgIH0sCi0gICAg
ICAgIFtdIChpbnQgdmFsdWUpIHsKKyAgICAgICAgfSwgW10gKGludCB2YWx1ZSkgLT4gSlNWYWx1
ZSB7CiAgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOwotICAgICAgICB9LAotICAg
ICAgICBbXSAodW5zaWduZWQgdmFsdWUpIHsKKyAgICAgICAgfSwgW10gKHVuc2lnbmVkIHZhbHVl
KSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7Ci0gICAg
ICAgIH0sCi0gICAgICAgIFtdIChsb25nIGxvbmcgdmFsdWUpIHsKKyAgICAgICAgfSwgW10gKGxv
bmcgbG9uZyB2YWx1ZSkgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIo
dmFsdWUpOwotICAgICAgICB9LAotICAgICAgICBbXSAoZmxvYXQgdmFsdWUpIHsKKyAgICAgICAg
fSwgW10gKGZsb2F0IHZhbHVlKSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiBqc051
bWJlcih2YWx1ZSk7Ci0gICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29uc3QgU3RyaW5nJiB2YWx1
ZSkgeworICAgICAgICB9LCBbJl0gKGNvbnN0IFN0cmluZyYgdmFsdWUpIC0+IEpTVmFsdWUgewog
ICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGxleGljYWxHbG9iYWxPYmplY3Qu
dm0oKSwgdmFsdWUpOwotICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFZlY3Rvcjxib29s
PiYgdmFsdWVzKSB7CisgICAgICAgIH0sIFsmXSAoY29uc3QgVmVjdG9yPGJvb2w+JiB2YWx1ZXMp
IC0+IEpTVmFsdWUgewogICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKICAg
ICAgICAgICAgIGZvciAoYXV0byYgdmFsdWUgOiB2YWx1ZXMpCiAgICAgICAgICAgICAgICAgbGlz
dC5hcHBlbmQoanNCb29sZWFuKHZhbHVlKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
bGlzdC5oYXNPdmVyZmxvd2VkKCkpOwogICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5
KCZnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEpTQzo6QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSo+
KG51bGxwdHIpLCBsaXN0KTsKLSAgICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBWZWN0b3I8
aW50PiYgdmFsdWVzKSB7CisgICAgICAgIH0sIFsmXSAoY29uc3QgVmVjdG9yPGludD4mIHZhbHVl
cykgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0Owog
ICAgICAgICAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IHZhbHVlcykKICAgICAgICAgICAgICAgICBs
aXN0LmFwcGVuZChqc051bWJlcih2YWx1ZSkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IWxpc3QuaGFzT3ZlcmZsb3dlZCgpKTsKICAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RBcnJh
eSgmZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxKU0M6OkFycmF5QWxsb2NhdGlvblByb2ZpbGUq
PihudWxscHRyKSwgbGlzdCk7Ci0gICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29uc3QgVmVjdG9y
PHVuc2lnbmVkPiYgdmFsdWVzKSB7CisgICAgICAgIH0sIFsmXSAoY29uc3QgVmVjdG9yPHVuc2ln
bmVkPiYgdmFsdWVzKSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGxpc3Q7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHZhbHVlIDogdmFsdWVzKQogICAgICAg
ICAgICAgICAgIGxpc3QuYXBwZW5kKGpzTnVtYmVyKHZhbHVlKSk7CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghbGlzdC5oYXNPdmVyZmxvd2VkKCkpOwogICAgICAgICAgICAgcmV0dXJuIGNv
bnN0cnVjdEFycmF5KCZnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEpTQzo6QXJyYXlBbGxvY2F0
aW9uUHJvZmlsZSo+KG51bGxwdHIpLCBsaXN0KTsKLSAgICAgICAgfSwKLSAgICAgICAgWyZdIChj
b25zdCBSZWZQdHI8RmxvYXQzMkFycmF5PiYgYXJyYXkpIHsKKyAgICAgICAgfSwgWyZdIChjb25z
dCBSZWZQdHI8RmxvYXQzMkFycmF5PiYgYXJyYXkpIHsKICAgICAgICAgICAgIHJldHVybiB0b0pT
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAmZ2xvYmFsT2JqZWN0LCBhcnJheS5nZXQoKSk7CiAgICAg
ICAgIH0sCiAgICAgICAgIFsmXSAoY29uc3QgUmVmUHRyPEludDMyQXJyYXk+JiBhcnJheSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50TWV0aG9kQ2hh
bmdlRXZlbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQYXltZW50
TWV0aG9kQ2hhbmdlRXZlbnRDdXN0b20uY3BwCmluZGV4IDBiZDFkNGQxYWQ4NTUyZWQ3NDNiY2Fi
MmUxYjhmMmEzMGQ2MDU5ZjAuLmVhYmViYjMyODFhZWUzZWQ5YjBjYWE3YWJkZDJlZDA1NmEzZGMx
NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudE1ldGhv
ZENoYW5nZUV2ZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudEN1c3RvbS5jcHAKQEAgLTMzLDkgKzMzLDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogSlNDOjpKU1ZhbHVlIEpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50
OjptZXRob2REZXRhaWxzKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlZFByb3BlcnR5VmFsdWUobGV4aWNhbEdsb2JhbE9i
amVjdCwgKnRoaXMsIHdyYXBwZWQoKS5jYWNoZWRNZXRob2REZXRhaWxzKCksIFt0aGlzLCAmbGV4
aWNhbEdsb2JhbE9iamVjdF0gewotICAgICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbih3cmFwcGVk
KCkubWV0aG9kRGV0YWlscygpLCBbXShKU0M6OkpTVmFsdWUgbWV0aG9kRGV0YWlscykgeworICAg
ICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbih3cmFwcGVkKCkubWV0aG9kRGV0YWlscygpLCBbXShK
U0M6OkpTVmFsdWUgbWV0aG9kRGV0YWlscykgLT4gSlNDOjpKU1ZhbHVlIHsKICAgICAgICAgICAg
IHJldHVybiBtZXRob2REZXRhaWxzID8gbWV0aG9kRGV0YWlscyA6IEpTQzo6anNOdWxsKCk7Ci0g
ICAgICAgIH0sIFsmbGV4aWNhbEdsb2JhbE9iamVjdF0oY29uc3QgUGF5bWVudE1ldGhvZENoYW5n
ZUV2ZW50OjpNZXRob2REZXRhaWxzRnVuY3Rpb24mIGZ1bmN0aW9uKSB7CisgICAgICAgIH0sIFsm
bGV4aWNhbEdsb2JhbE9iamVjdF0oY29uc3QgUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50OjpNZXRo
b2REZXRhaWxzRnVuY3Rpb24mIGZ1bmN0aW9uKSAtPiBKU0M6OkpTVmFsdWUgewogICAgICAgICAg
ICAgcmV0dXJuIGZ1bmN0aW9uKGxleGljYWxHbG9iYWxPYmplY3QpLmdldCgpOwogICAgICAgICB9
KTsKICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmFs
dWVJbldyYXBwZWRPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmFsdWVJ
bldyYXBwZWRPYmplY3QuaAppbmRleCBkN2U1MmIxYjFkMTZkMmNiMTcyMjk0M2EyYjZlMDhkYTUy
NDNkMzNmLi5lNGNjZGJhNjJkODQ4M2E3NDBjYTdhMDQzZDJiYWVjOWNjNTE2YWRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZhbHVlSW5XcmFwcGVkT2JqZWN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5o
CkBAIC04Miw3ICs4Miw3IEBAIGlubGluZSBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0OjpvcGVyYXRv
ciBKU0M6OkpTVmFsdWUoKSBjb25zdAogewogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fdmFs
dWUsIFtdIChKU0M6OkpTVmFsdWUgdmFsdWUpIHsKICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAg
IH0sIFtdIChjb25zdCBXZWFrJiB2YWx1ZSkgeworICAgIH0sIFtdIChjb25zdCBXZWFrJiB2YWx1
ZSkgLT4gSlNDOjpKU1ZhbHVlIHsKICAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOwogICAgIH0p
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBh
cnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNw
cAppbmRleCA5YzkzYTIwNzI0ODk5ZTYyZTQ3N2RmYTRhNDNjMzQ4MjYwNjhkYjlkLi40NDhjZDI4
YzkxNjY0ODI1OGIxZTU4YmU3ZWJkMDM1YzNiNGE0ZGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcApAQCAtOTE4LDcgKzkxOCw3IEBAIHN0
YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250VmFyaWFudENTUzIxKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhCiBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBj
b25zdW1lRm9udFdlaWdodChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKIHsKICAgICBpZiAo
YXV0byByZXN1bHQgPSBjb25zdW1lRm9udFdlaWdodFJhdyhyYW5nZSkpIHsKLSAgICAgICAgcmV0
dXJuIHN3aXRjaE9uKCpyZXN1bHQsIFtdIChDU1NWYWx1ZUlEIHZhbHVlSUQpIHsKKyAgICAgICAg
cmV0dXJuIFdURjo6c3dpdGNoT24oKnJlc3VsdCwgW10gKENTU1ZhbHVlSUQgdmFsdWVJRCkgewog
ICAgICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKHZhbHVlSUQpOwogICAgICAgICB9LCBbXSAoZG91YmxlIHdlaWdodE51bWJlcikg
ewogICAgICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFs
dWUod2VpZ2h0TnVtYmVyLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvdHlwZWRvbS9DU1NVbnBhcnNlZFZhbHVlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy90eXBlZG9tL0NTU1VucGFyc2VkVmFsdWUuY3BwCmluZGV4IDg2MmY2OWM1MGI5
Y2FmMjlhNTA4ODhjNWFmM2E3MWFiZDdiOTU5YzguLmU3NjFiZWJkZmZmNWM1N2IwZWY2ODA5ZTI2
ZGYxMmRiZWQzN2MwY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy90eXBlZG9tL0NT
U1VucGFyc2VkVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy90eXBlZG9tL0NTU1Vu
cGFyc2VkVmFsdWUuY3BwCkBAIC0xMzAsNyArMTMwLDcgQEAgU3RyaW5nIENTU1VucGFyc2VkVmFs
dWU6OnRvU3RyaW5nKCkgY29uc3QKIHZvaWQgQ1NTVW5wYXJzZWRWYWx1ZTo6c2VyaWFsaXplKFN0
cmluZ0J1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CiB7CiAgICAgZm9yIChhdXRvJiBzZWdtZW50IDog
bV9zZWdtZW50cykgewotICAgICAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdIChj
b25zdCBTdHJpbmcmIHZhbHVlKSB7CisgICAgICAgIHN0ZDo6dmlzaXQoV1RGOjptYWtlVmlzaXRv
cihbJl0gKGNvbnN0IFN0cmluZyYgdmFsdWUpIHsKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KHZhbHVlKTsKICAgICAgICAgfSwgWyZdIChjb25zdCBSZWZQdHI8Q1NTT01WYXJpYWJsZVJlZmVy
ZW5jZVZhbHVlPiYgdmFsdWUpIHsKICAgICAgICAgICAgIHZhbHVlLT5zZXJpYWxpemUoYnVpbGRl
cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAppbmRleCBlMGJiMTA4ZTU4OTkzODhhZTIw
NDY0ZmUzZWVmODhmZjhlMzg5M2Y5Li41ZmMwMjU2ZTM0NDIzM2E3NzIyNzBjNjc0N2EzODc0MGZj
MjQ0NzdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKQEAgLTEyMyw3ICsxMjMsNyBA
QCB2b2lkIEV2ZW50VGFyZ2V0OjphZGRFdmVudExpc3RlbmVyRm9yQmluZGluZ3MoY29uc3QgQXRv
bVN0cmluZyYgZXZlbnRUeXBlLCBSZWZQdAogICAgICAgICBhZGRFdmVudExpc3RlbmVyKGV2ZW50
VHlwZSwgbGlzdGVuZXIucmVsZWFzZU5vbk51bGwoKSwgY2FwdHVyZSk7CiAgICAgfSk7CiAKLSAg
ICBXVEY6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQodmlzaXRvciwg
dmFyaWFudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXJGb3JC
aW5kaW5ncyhjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIFJlZlB0cjxFdmVudExpc3RlbmVy
PiYmIGxpc3RlbmVyLCBFdmVudExpc3RlbmVyT3B0aW9uc09yQm9vbGVhbiYmIHZhcmlhbnQpCkBA
IC0xMzcsNyArMTM3LDcgQEAgdm9pZCBFdmVudFRhcmdldDo6cmVtb3ZlRXZlbnRMaXN0ZW5lckZv
ckJpbmRpbmdzKGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgUmUKICAgICAgICAgcmVtb3Zl
RXZlbnRMaXN0ZW5lcihldmVudFR5cGUsICpsaXN0ZW5lciwgY2FwdHVyZSk7CiAgICAgfSk7CiAK
LSAgICBXVEY6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQodmlzaXRv
ciwgdmFyaWFudCk7CiB9CiAKIGJvb2wgRXZlbnRUYXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIo
Y29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyJiBsaXN0ZW5lciwgY29u
c3QgRXZlbnRMaXN0ZW5lck9wdGlvbnMmIG9wdGlvbnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTWVzc2FnZUV2ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZl
bnQuY3BwCmluZGV4IDMyY2ZkMGQ2N2YzODRiMDdhZTNmNzBhZjdjYzZlNWI1ZDUxMDFiNGMuLmU0
ZjE5NGJmYTJiMmYyODlhMmY4ZDMzZDEyOTE3MjMzNzdlZWRjYzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9N
ZXNzYWdlRXZlbnQuY3BwCkBAIC0xMjksMTUgKzEyOSwxNSBAQCBFdmVudEludGVyZmFjZSBNZXNz
YWdlRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKIAogc2l6ZV90IE1lc3NhZ2VFdmVudDo6
bWVtb3J5Q29zdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9kYXRhLCBb
XSAoY29uc3QgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYpIHsKKyAgICByZXR1cm4gV1RGOjpzd2l0
Y2hPbihtX2RhdGEsIFtdIChjb25zdCBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0JikgLT4gc2l6ZV90
IHsKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfSwgW10gKGNvbnN0IFJlZjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+JiBkYXRhKSB7CisgICAgfSwgW10gKGNvbnN0IFJlZjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+JiBkYXRhKSAtPiBzaXplX3QgewogICAgICAgICByZXR1cm4gZGF0YS0+bWVtb3J5Q29z
dCgpOwotICAgIH0sIFtdIChjb25zdCBTdHJpbmcmIHN0cmluZykgeworICAgIH0sIFtdIChjb25z
dCBTdHJpbmcmIHN0cmluZykgLT4gc2l6ZV90IHsKICAgICAgICAgcmV0dXJuIHN0cmluZy5zaXpl
SW5CeXRlcygpOwotICAgIH0sIFtdIChjb25zdCBSZWY8QmxvYj4mIGJsb2IpIHsKKyAgICB9LCBb
XSAoY29uc3QgUmVmPEJsb2I+JiBibG9iKSAtPiBzaXplX3QgewogICAgICAgICByZXR1cm4gYmxv
Yi0+c2l6ZSgpOwotICAgIH0sIFtdIChjb25zdCBSZWY8QXJyYXlCdWZmZXI+JiBidWZmZXIpIHsK
KyAgICB9LCBbXSAoY29uc3QgUmVmPEFycmF5QnVmZmVyPiYgYnVmZmVyKSAtPiBzaXplX3Qgewog
ICAgICAgICByZXR1cm4gYnVmZmVyLT5ieXRlTGVuZ3RoKCk7CiAgICAgfSk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggNTY1NzgyN2Q5YTY2YmIzYjczZWZiNTVmOTMxNjFlZTgz
OGI0NWEzMC4uNGQ3OGRkMWJlNTY2ODkxYjQyYTJhZGY1MmZlNTg1ZDFlM2NjYjQxYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMjI3Myw3ICsyMjczLDcgQEAgdm9pZCBFZGl0b3I6
OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogCiAg
ICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgewogICAgICAgICBhdXRvIGZvdW5k
SXRlbSA9IFRleHRDaGVja2luZ0hlbHBlcigqY2xpZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2Up
LmZpbmRGaXJzdE1pc3NwZWxsZWRXb3JkT3JVbmdyYW1tYXRpY2FsUGhyYXNlKGlzR3JhbW1hckNo
ZWNraW5nRW5hYmxlZCgpKTsKLSAgICAgICAgaWYgKGF1dG8gd29yZCA9IFdURjo6Z2V0X2lmPFRl
eHRDaGVja2luZ0hlbHBlcjo6TWlzc3BlbGxlZFdvcmQ+KGZvdW5kSXRlbSkpCisgICAgICAgIGlm
IChhdXRvIHdvcmQgPSBzdGQ6OmdldF9pZjxUZXh0Q2hlY2tpbmdIZWxwZXI6Ok1pc3NwZWxsZWRX
b3JkPigmZm91bmRJdGVtKSkKICAgICAgICAgICAgIG1pc3NwZWxsZWRXb3JkID0gV1RGTW92ZSgq
d29yZCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHVuZ3JhbW1hdGljYWxQaHJhc2UgPSBX
VEY6OmdldDxUZXh0Q2hlY2tpbmdIZWxwZXI6OlVuZ3JhbW1hdGljYWxQaHJhc2U+KFdURk1vdmUo
Zm91bmRJdGVtKSk7CkBAIC0yMzAwLDcgKzIzMDAsNyBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRv
TmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgICAgIAogICAg
ICAgICBpZiAodW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpKSB7CiAgICAgICAgICAgICBhdXRv
IGZvdW5kSXRlbSA9IFRleHRDaGVja2luZ0hlbHBlcigqY2xpZW50KCksIHNwZWxsaW5nU2VhcmNo
UmFuZ2UpLmZpbmRGaXJzdE1pc3NwZWxsZWRXb3JkT3JVbmdyYW1tYXRpY2FsUGhyYXNlKGlzR3Jh
bW1hckNoZWNraW5nRW5hYmxlZCgpKTsKLSAgICAgICAgICAgIGlmIChhdXRvIHdvcmQgPSBXVEY6
OmdldF9pZjxUZXh0Q2hlY2tpbmdIZWxwZXI6Ok1pc3NwZWxsZWRXb3JkPihmb3VuZEl0ZW0pKQor
ICAgICAgICAgICAgaWYgKGF1dG8gd29yZCA9IHN0ZDo6Z2V0X2lmPFRleHRDaGVja2luZ0hlbHBl
cjo6TWlzc3BlbGxlZFdvcmQ+KCZmb3VuZEl0ZW0pKQogICAgICAgICAgICAgICAgIG1pc3NwZWxs
ZWRXb3JkID0gV1RGTW92ZSgqd29yZCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgdW5ncmFtbWF0aWNhbFBocmFzZSA9IFdURjo6Z2V0PFRleHRDaGVja2luZ0hlbHBlcjo6VW5n
cmFtbWF0aWNhbFBocmFzZT4oV1RGTW92ZShmb3VuZEl0ZW0pKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAKaW5kZXggZmM5
ZDcxNTU0MzczZmRjNzg1ZGNhNDZjZmQ1ZWRmOGFmMmE1MzUyNy4uYzM3MmFlY2VmNGU5N2ZiM2Ix
YzEzZmVlYmFhNWQ3NGYxODlkY2UxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBpbmxpbmUgYm9vbCBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxl
cjo6RXhjbHVzaW9uUnVsZTo6bWF0Y2goY29uc3QgRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsK
LSAgICByZXR1cm4gc3dpdGNoT24ocnVsZSwgWyZlbGVtZW50XSAoRWxlbWVudFJ1bGUgcnVsZSkg
eworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHJ1bGUsIFsmZWxlbWVudF0gKEVsZW1lbnRSdWxl
IHJ1bGUpIHsKICAgICAgICAgcmV0dXJuIHJ1bGUubG9jYWxOYW1lID09IGVsZW1lbnQubG9jYWxO
YW1lKCk7CiAgICAgfSwgWyZlbGVtZW50XSAoQXR0cmlidXRlUnVsZSBydWxlKSB7CiAgICAgICAg
IHJldHVybiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGVsZW1lbnQuZ2V0QXR0cmlidXRlKHJ1bGUu
bmFtZSksIHJ1bGUudmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9VUkxT
ZWFyY2hQYXJhbXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9VUkxTZWFyY2hQYXJhbXMuY3Bw
CmluZGV4IGIwN2I3ODA4ZGZhZDU5YzNkNTQwOWY1NzIwMmE3YjEyOTE4MjJiMmYuLmY1NGY0MWUx
OWNmN2E3ZTRkNTU0MGM2NDY2NjJmOGVjNWZiZDNkMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvVVJMU2VhcmNoUGFyYW1zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1VS
TFNlYXJjaFBhcmFtcy5jcHAKQEAgLTUxLDEyICs1MSwxMiBAQCBFeGNlcHRpb25PcjxSZWY8VVJM
U2VhcmNoUGFyYW1zPj4gVVJMU2VhcmNoUGFyYW1zOjpjcmVhdGUoVmFyaWFudDxWZWN0b3I8VmVj
dG9yPAogICAgICAgICAgICAgcGFpcnMuYXBwZW5kKHtwYWlyWzBdLCBwYWlyWzFdfSk7CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVVJMU2VhcmNoUGFyYW1zKFdURk1v
dmUocGFpcnMpKSk7Ci0gICAgfSwgWyZdKGNvbnN0IFZlY3RvcjxXVEY6OktleVZhbHVlUGFpcjxT
dHJpbmcsIFN0cmluZz4+JiBwYWlycykgeworICAgIH0sIFsmXShjb25zdCBWZWN0b3I8V1RGOjpL
ZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+PiYgcGFpcnMpIC0+IEV4Y2VwdGlvbk9yPFJlZjxV
UkxTZWFyY2hQYXJhbXM+PiB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVSTFNlYXJj
aFBhcmFtcyhwYWlycykpOwotICAgIH0sIFsmXShjb25zdCBTdHJpbmcmIHN0cmluZykgeworICAg
IH0sIFsmXShjb25zdCBTdHJpbmcmIHN0cmluZykgLT4gRXhjZXB0aW9uT3I8UmVmPFVSTFNlYXJj
aFBhcmFtcz4+IHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVVJMU2VhcmNoUGFyYW1z
KHN0cmluZywgbnVsbHB0cikpOwogICAgIH0pOwotICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0
b3IsIHZhcmlhbnQpOworICAgIHJldHVybiBzdGQ6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwog
fQogCiBTdHJpbmcgVVJMU2VhcmNoUGFyYW1zOjpnZXQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcAppbmRleCAyODRiMDU1Mzk5YmQwZDIzZmZhMDZjYjRiYjE3ZjdhNTZj
MDRjZTEyLi5lN2IzZjkyNWI5ZmE1ZGVhNWQ5YWJlNWZiY2M1YWJiOTU0NGYwNDAyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmNwcApAQCAtMTc1OCw3ICsxNzU4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgc3RkOjpvcHRpb25hbDxCdWZmZXIK
ICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgV1RGOjp2aXNpdChbJl0o
YXV0byYgZGF0YSkgeworICAgIHN0ZDo6dmlzaXQoWyZdKGF1dG8mIGRhdGEpIHsKICAgICAgICAg
aWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEoZGF0YS5nZXQoKSkpIHsKICAgICAgICAg
ICAgIHRoaXMtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZB
TFVFLCAiYnVmZmVyRGF0YSIsICJpbnZhbGlkIGJ1ZmZlciIpOwogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMTc4NSw3ICsxNzg1LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpi
dWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIFdURjo6dmlzaXQoWyZdKGF1dG8mIGRhdGEpIHsKKyAgICBz
dGQ6OnZpc2l0KFsmXShhdXRvJiBkYXRhKSB7CiAgICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lh
dGVCdWZmZXJTdWJEYXRhKHN0YXRpY19jYXN0PEdDR0xpbnRwdHI+KG9mZnNldCksIGRhdGEuZ2V0
KCkpKSB7CiAgICAgICAgICAgICB0aGlzLT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHRHTDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IG91dCBvZiByYW5n
ZSIpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDgxMyw3ICs0ODEzLDcgQEAgSW50UmVjdCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRUZXhJbWFnZVNvdXJjZVNpemUoVGV4SW1hZ2VT
b3VyY2UmIHNvdXJjZSkKICAgICB9CiAgICAgKTsKIAotICAgIEV4Y2VwdGlvbk9yPEludFJlY3Q+
IHJlc3VsdCA9IFdURjo6dmlzaXQodmlzaXRvciwgc291cmNlKTsKKyAgICBFeGNlcHRpb25PcjxJ
bnRSZWN0PiByZXN1bHQgPSBzdGQ6OnZpc2l0KHZpc2l0b3IsIHNvdXJjZSk7CiAgICAgaWYgKHJl
c3VsdC5oYXNFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIHNlbnRpbmVsRW1wdHlSZWN0KCk7
CiAgICAgcmV0dXJuIHJlc3VsdC5yZXR1cm5WYWx1ZSgpOwpAQCAtNTA3NCw3ICs1MDc0LDcgQEAg
RXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2VTb3Vy
Y2VIZWxwZXIoVGV4SW1hZ2VGdW5jdGkKICNlbmRpZiAvLyBFTkFCTEUoVklERU8pCiAgICAgKTsK
IAotICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIHNvdXJjZSk7CisgICAgcmV0dXJuIHN0
ZDo6dmlzaXQodmlzaXRvciwgc291cmNlKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp0ZXhJbWFnZUFycmF5QnVmZmVyVmlld0hlbHBlcihUZXhJbWFnZUZ1bmN0aW9uSUQg
ZnVuY3Rpb25JRCwgR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IGludGVy
bmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBk
ZXB0aCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NH
TGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgem9mZnNldCwgUmVmUHRyPEFy
cmF5QnVmZmVyVmlldz4mJiBwaXhlbHMsIE51bGxEaXNwb3NpdGlvbiBudWxsRGlzcG9zaXRpb24s
IEdDR0x1aW50IHNyY09mZnNldCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNhbnZhcy5jcHAKaW5kZXggZTI5OTZjYjkyNWNjNWVhNGQzZTI4ZDFjNWQ5NTYzMDVmMjBkZWU1
Zi4uNDJlNmUxOTM2MTUwYjk1M2E0YTI1MzAwMGQzMzI3Njg5MTI5NmJkYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHAKQEAgLTExMSw3ICsxMTEsNyBA
QCBJbnNwZWN0b3JDYW52YXM6Okluc3BlY3RvckNhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0
JiBjb250ZXh0KQogCiBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBJbnNwZWN0b3JDYW52YXM6OmNh
bnZhc0NvbnRleHQoKSBjb25zdAogewotICAgIGlmIChhdXRvKiBjb250ZXh0V3JhcHBlciA9IFdU
Rjo6Z2V0X2lmPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4+
KG1fY29udGV4dCkpCisgICAgaWYgKGF1dG8qIGNvbnRleHRXcmFwcGVyID0gc3RkOjpnZXRfaWY8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDYW52YXNSZW5kZXJpbmdDb250ZXh0Pj4oJm1fY29udGV4
dCkpCiAgICAgICAgIHJldHVybiAmY29udGV4dFdyYXBwZXItPmdldCgpOwogICAgIHJldHVybiBu
dWxscHRyOwogfQpAQCAtMTI0LDggKzEyNCw3IEBAIEhUTUxDYW52YXNFbGVtZW50KiBJbnNwZWN0
b3JDYW52YXM6OmNhbnZhc0VsZW1lbnQoKSBjb25zdAogICAgICAgICAgICAgaWYgKGlzPEhUTUxD
YW52YXNFbGVtZW50Pihjb250ZXh0LmNhbnZhc0Jhc2UoKSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuICZkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oY29udGV4dC5jYW52YXNCYXNlKCkpOwog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0sCi0gICAgICAgIFtdIChNb25v
c3RhdGUpIHsKKyAgICAgICAgfSwgW10gKE1vbm9zdGF0ZSkgLT4gSFRNTENhbnZhc0VsZW1lbnQq
IHsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgIH0KQEAgLTEzOSw4ICsxMzgsNyBAQCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBJbnNwZWN0b3JDYW52YXM6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAog
ICAgICAgICBbXSAoc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDYW52YXNSZW5kZXJpbmdDb250ZXh0
PiBjb250ZXh0V3JhcHBlcikgewogICAgICAgICAgICAgYXV0byYgY29udGV4dCA9IGNvbnRleHRX
cmFwcGVyLmdldCgpOwogICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuY2FudmFzQmFzZSgpLnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICAgICAgfSwKLSAgICAgICAgW10gKE1vbm9zdGF0
ZSkgeworICAgICAgICB9LCBbXSAoTW9ub3N0YXRlKSAtPiBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiB7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgICAgICB9CkBAIC04OTMsOCArODkxLDcgQEAgUmVmPFByb3RvY29sOjpD
YW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZE9iamVjdEZvckNhbnZhcyhib29s
IGNhcHR1cmUKICAgICAgICAgICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNhbnZhczo6Q29udGV4
dFR5cGU6OldlYkdMMjsKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LSAgICAgICAgfSwKLSAgICAgICAgW10gKE1vbm9zdGF0ZSkgeworICAgICAgICB9LCBbXSAoTW9u
b3N0YXRlKSAtPiBDb250ZXh0VHlwZVR5cGUgewogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAgICB9CkBAIC05
MjAsOCArOTE3LDcgQEAgUmVmPFByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2Fu
dmFzOjpidWlsZE9iamVjdEZvckNhbnZhcyhib29sIGNhcHR1cmUKICAgICBhdXRvIGNvbnRleHRB
dHRyaWJ1dGVzID0gV1RGOjpzd2l0Y2hPbihtX2NvbnRleHQsCiAgICAgICAgIFtdIChzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQ+IGNvbnRleHRXcmFwcGVyKSB7
CiAgICAgICAgICAgICByZXR1cm4gYnVpbGRPYmplY3RGb3JDYW52YXNDb250ZXh0QXR0cmlidXRl
cyhjb250ZXh0V3JhcHBlcik7Ci0gICAgICAgIH0sCi0gICAgICAgIFtdIChNb25vc3RhdGUpIHsK
KyAgICAgICAgfSwgW10gKE1vbm9zdGF0ZSkgLT4gUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNhbnZhczo6Q29udGV4dEF0dHJpYnV0ZXM+IHsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KQEAgLTEwNDAs
OCArMTAzNiw4IEBAIGludCBJbnNwZWN0b3JDYW52YXM6OmluZGV4Rm9yRGF0YShEdXBsaWNhdGVE
YXRhVmFyaWFudCBkYXRhKQogICAgICAgICBpZiAoZGF0YSA9PSBpdGVtKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAKLSAgICAgICAgYXV0byB0cmFjZUEgPSBXVEY6OmdldF9pZjxSZWZQdHI8
U2NyaXB0Q2FsbFN0YWNrPj4oZGF0YSk7Ci0gICAgICAgIGF1dG8gdHJhY2VCID0gV1RGOjpnZXRf
aWY8UmVmUHRyPFNjcmlwdENhbGxTdGFjaz4+KGl0ZW0pOworICAgICAgICBhdXRvIHRyYWNlQSA9
IHN0ZDo6Z2V0X2lmPFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+PigmZGF0YSk7CisgICAgICAgIGF1
dG8gdHJhY2VCID0gc3RkOjpnZXRfaWY8UmVmUHRyPFNjcmlwdENhbGxTdGFjaz4+KCZpdGVtKTsK
ICAgICAgICAgaWYgKHRyYWNlQSAmJiAqdHJhY2VBICYmIHRyYWNlQiAmJiAqdHJhY2VCKQogICAg
ICAgICAgICAgcmV0dXJuICgqdHJhY2VBKS0+aXNFcXVhbCgoKnRyYWNlQikuZ2V0KCkpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJvZ3Jh
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5j
cHAKaW5kZXggYTMwZTIxNjQzYTE1N2E4MmM1ZGQ3ZTViNGQ4NTg0MGI3NGZhNTAxNi4uYmZiMzNh
Yzc3ZDVjOTZlYzE1NmMxMDA4YmQ1ZjhkYTgyNDUxYTlkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclByb2dyYW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmNwcApAQCAtNjYsNyArNjYs
NyBAQCBJbnNwZWN0b3JTaGFkZXJQcm9ncmFtOjpJbnNwZWN0b3JTaGFkZXJQcm9ncmFtKFdlYkdM
UHJvZ3JhbSYgcHJvZ3JhbSwgSW5zcGVjdG9yQwogI2lmIEVOQUJMRShXRUJHTCkKIFdlYkdMUHJv
Z3JhbSogSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbTo6cHJvZ3JhbSgpIGNvbnN0CiB7Ci0gICAgaWYg
KGF1dG8qIHByb2dyYW1XcmFwcGVyID0gV1RGOjpnZXRfaWY8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxXZWJHTFByb2dyYW0+PihtX3Byb2dyYW0pKQorICAgIGlmIChhdXRvKiBwcm9ncmFtV3JhcHBl
ciA9IHN0ZDo6Z2V0X2lmPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8V2ViR0xQcm9ncmFtPj4oJm1f
cHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiAmcHJvZ3JhbVdyYXBwZXItPmdldCgpOwogICAgIHJl
dHVybiBudWxscHRyOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAppbmRleCA3ZjgwNmQ0ZmM4MWNk
MmIwNDMyMmIzZDBkODBiZTQ0NDA0YmJkMDZlLi45ZTYxMDAyNGZlYjUzNGNhMzEyNjY4NTk1ZTA5
ZGY0ODk5MDgyNjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcApAQCAtMTY3LDcgKzE2Nyw3IEBA
IHN0YXRpYyBSZWY8UHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5UGF0aD4ga2V5UGF0aEZyb21JREJL
ZXlQYXRoKGNvbnN0IHN0ZDo6b3B0aW9uCiAgICAgICAgIGtleVBhdGgtPnNldEFycmF5KFdURk1v
dmUoYXJyYXkpKTsKICAgICAgICAgcmV0dXJuIGtleVBhdGg7CiAgICAgfSk7Ci0gICAgcmV0dXJu
IFdURjo6dmlzaXQodmlzaXRvciwgaWRiS2V5UGF0aC52YWx1ZSgpKTsKKyAgICByZXR1cm4gc3Rk
Ojp2aXNpdCh2aXNpdG9yLCBpZGJLZXlQYXRoLnZhbHVlKCkpOwogfQogCiBzdGF0aWMgUmVmUHRy
PElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbkZvckRhdGFiYXNlKElEQkRhdGFiYXNlKiBpZGJE
YXRhYmFzZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIElEQlRyYW5zYWN0aW9uTW9k
ZSBtb2RlID0gSURCVHJhbnNhY3Rpb25Nb2RlOjpSZWFkb25seSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCmluZGV4IGZkOWVjNzU5NzM3ZDRjOTc1OTgzMWU3NzI0MzU5
YmUyZTg2NjI0MzAuLmU2ZGNmOTkzMGUzMjExMTE0MGMzY2M4ODkyYzlkMzdlMzJjMTEyMTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcApAQCAtMzQxLDIwICszNDEs
MjAgQEAgYm9vbCBTaGFyZWRCdWZmZXI6OmludGVybmFsbHlDb25zaXN0ZW50KCkgY29uc3QKIGNv
bnN0IHVpbnQ4X3QqIFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmRhdGEoKSBjb25zdAogewog
ICAgIGF1dG8gdmlzaXRvciA9IFdURjo6bWFrZVZpc2l0b3IoCi0gICAgICAgIFtdKGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgZGF0YSkgeyByZXR1cm4gZGF0YS5kYXRhKCk7IH0sCisgICAgICAgIFtd
KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZGF0YSkgLT4gY29uc3QgdWludDhfdCogeyByZXR1cm4g
ZGF0YS5kYXRhKCk7IH0sCiAjaWYgVVNFKENGKQotICAgICAgICBbXShjb25zdCBSZXRhaW5QdHI8
Q0ZEYXRhUmVmPiYgZGF0YSkgeyByZXR1cm4gQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhLmdldCgpKTsg
fSwKKyAgICAgICAgW10oY29uc3QgUmV0YWluUHRyPENGRGF0YVJlZj4mIGRhdGEpIC0+IGNvbnN0
IHVpbnQ4X3QqIHsgcmV0dXJuIENGRGF0YUdldEJ5dGVQdHIoZGF0YS5nZXQoKSk7IH0sCiAjZW5k
aWYKICNpZiBVU0UoR0xJQikKLSAgICAgICAgW10oY29uc3QgR1JlZlB0cjxHQnl0ZXM+JiBkYXRh
KSB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZ19ieXRlc19nZXRfZGF0YShk
YXRhLmdldCgpLCBudWxscHRyKSk7IH0sCisgICAgICAgIFtdKGNvbnN0IEdSZWZQdHI8R0J5dGVz
PiYgZGF0YSkgLT4gY29uc3QgdWludDhfdCogeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGdfYnl0ZXNfZ2V0X2RhdGEoZGF0YS5nZXQoKSwgbnVsbHB0cikpOyB9LAogI2VuZGlm
CiAjaWYgVVNFKEdTVFJFQU1FUikKLSAgICAgICAgW10oY29uc3QgUmVmUHRyPEdzdE1hcHBlZE93
bmVkQnVmZmVyPiYgZGF0YSkgeyByZXR1cm4gZGF0YS0+ZGF0YSgpOyB9LAorICAgICAgICBbXShj
b25zdCBSZWZQdHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+JiBkYXRhKSAtPiBjb25zdCB1aW50OF90
KiB7IHJldHVybiBkYXRhLT5kYXRhKCk7IH0sCiAjZW5kaWYKLSAgICAgICAgW10oY29uc3QgRmls
ZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IHVpbnQ4X3QqPihkYXRhLmRhdGEoKSk7IH0sCi0gICAgICAgIFtdKGNvbnN0IFByb3ZpZGVyJiBw
cm92aWRlcikgeyByZXR1cm4gcHJvdmlkZXIuZGF0YSgpOyB9CisgICAgICAgIFtdKGNvbnN0IEZp
bGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSAtPiBjb25zdCB1aW50OF90KiB7IHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKCkpOyB9LAorICAgICAgICBb
XShjb25zdCBQcm92aWRlciYgcHJvdmlkZXIpIC0+IGNvbnN0IHVpbnQ4X3QqIHsgcmV0dXJuIHBy
b3ZpZGVyLmRhdGEoKTsgfQogICAgICk7Ci0gICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwg
bV9pbW11dGFibGVEYXRhKTsKKyAgICByZXR1cm4gc3RkOjp2aXNpdCh2aXNpdG9yLCBtX2ltbXV0
YWJsZURhdGEpOwogfQogCiBib29sIFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmNvbnRhaW5z
TWFwcGVkRmlsZURhdGEoKSBjb25zdApAQCAtNDI1LDIwICs0MjUsMjAgQEAgYm9vbCBTaGFyZWRC
dWZmZXI6Om9wZXJhdG9yPT0oY29uc3QgU2hhcmVkQnVmZmVyJiBvdGhlcikgY29uc3QKIHNpemVf
dCBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXplKCkgY29uc3QKIHsKICAgICBhdXRvIHZp
c2l0b3IgPSBXVEY6Om1ha2VWaXNpdG9yKAotICAgICAgICBbXShjb25zdCBWZWN0b3I8dWludDhf
dD4mIGRhdGEpIHsgcmV0dXJuIGRhdGEuc2l6ZSgpOyB9LAorICAgICAgICBbXShjb25zdCBWZWN0
b3I8dWludDhfdD4mIGRhdGEpIC0+IHNpemVfdCB7IHJldHVybiBkYXRhLnNpemUoKTsgfSwKICNp
ZiBVU0UoQ0YpCi0gICAgICAgIFtdKGNvbnN0IFJldGFpblB0cjxDRkRhdGFSZWY+JiBkYXRhKSB7
IHJldHVybiBDRkRhdGFHZXRMZW5ndGgoZGF0YS5nZXQoKSk7IH0sCisgICAgICAgIFtdKGNvbnN0
IFJldGFpblB0cjxDRkRhdGFSZWY+JiBkYXRhKSAtPiBzaXplX3QgeyByZXR1cm4gQ0ZEYXRhR2V0
TGVuZ3RoKGRhdGEuZ2V0KCkpOyB9LAogI2VuZGlmCiAjaWYgVVNFKEdMSUIpCi0gICAgICAgIFtd
KGNvbnN0IEdSZWZQdHI8R0J5dGVzPiYgZGF0YSkgeyByZXR1cm4gZ19ieXRlc19nZXRfc2l6ZShk
YXRhLmdldCgpKTsgfSwKKyAgICAgICAgW10oY29uc3QgR1JlZlB0cjxHQnl0ZXM+JiBkYXRhKSAt
PiBzaXplX3QgeyByZXR1cm4gZ19ieXRlc19nZXRfc2l6ZShkYXRhLmdldCgpKTsgfSwKICNlbmRp
ZgogI2lmIFVTRShHU1RSRUFNRVIpCi0gICAgICAgIFtdKGNvbnN0IFJlZlB0cjxHc3RNYXBwZWRP
d25lZEJ1ZmZlcj4mIGRhdGEpIHsgcmV0dXJuIGRhdGEtPnNpemUoKTsgfSwKKyAgICAgICAgW10o
Y29uc3QgUmVmUHRyPEdzdE1hcHBlZE93bmVkQnVmZmVyPiYgZGF0YSkgLT4gc2l6ZV90IHsgcmV0
dXJuIGRhdGEtPnNpemUoKTsgfSwKICNlbmRpZgotICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVt
OjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gZGF0YS5zaXplKCk7IH0sCi0gICAgICAg
IFtdKGNvbnN0IFByb3ZpZGVyJiBwcm92aWRlcikgeyByZXR1cm4gcHJvdmlkZXIuc2l6ZSgpOyB9
CisgICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSAtPiBz
aXplX3QgeyByZXR1cm4gZGF0YS5zaXplKCk7IH0sCisgICAgICAgIFtdKGNvbnN0IFByb3ZpZGVy
JiBwcm92aWRlcikgLT4gc2l6ZV90IHsgcmV0dXJuIHByb3ZpZGVyLnNpemUoKTsgfQogICAgICk7
Ci0gICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgbV9pbW11dGFibGVEYXRhKTsKKyAgICBy
ZXR1cm4gc3RkOjp2aXNpdCh2aXNpdG9yLCBtX2ltbXV0YWJsZURhdGEpOwogfQogCiBTaGFyZWRC
dWZmZXJEYXRhVmlldzo6U2hhcmVkQnVmZmVyRGF0YVZpZXcoUmVmPFNoYXJlZEJ1ZmZlcjo6RGF0
YVNlZ21lbnQ+JiYgc2VnbWVudCwgc2l6ZV90IHBvc2l0aW9uV2l0aGluU2VnbWVudCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNGLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNGLmNwcAppbmRleCBmNmJmZGQ3
ZjVmNzMzN2VlMWYxMDM2NWM1ZTIwMTMxODVhN2UyZjhhLi42OWE2ODUwZGU2M2MzODI3Y2U4ZDk1
YTViZWRlY2Q4N2Y2ODc0YmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
Zi9TaGFyZWRCdWZmZXJDRi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvU2hh
cmVkQnVmZmVyQ0YuY3BwCkBAIC00NCw3ICs0NCw3IEBAIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVm
ZmVyKENGRGF0YVJlZiBkYXRhKQogUmV0YWluUHRyPENGRGF0YVJlZj4gU2hhcmVkQnVmZmVyOjpj
cmVhdGVDRkRhdGEoKSBjb25zdAogewogICAgIGlmIChtX3NlZ21lbnRzLnNpemUoKSA9PSAxKSB7
Ci0gICAgICAgIGlmIChhdXRvIGRhdGEgPSBXVEY6OmdldF9pZjxSZXRhaW5QdHI8Q0ZEYXRhUmVm
Pj4obV9zZWdtZW50c1swXS5zZWdtZW50LT5tX2ltbXV0YWJsZURhdGEpKQorICAgICAgICBpZiAo
YXV0byBkYXRhID0gc3RkOjpnZXRfaWY8UmV0YWluUHRyPENGRGF0YVJlZj4+KCZtX3NlZ21lbnRz
WzBdLnNlZ21lbnQtPm1faW1tdXRhYmxlRGF0YSkpCiAgICAgICAgICAgICByZXR1cm4gKmRhdGE7
CiAgICAgfQogICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKG51
bGxwdHIsIHNpemUoKSkpOwpAQCAtNjQsNyArNjQsNyBAQCB2b2lkIFNoYXJlZEJ1ZmZlcjo6aGlu
dE1lbW9yeU5vdE5lZWRlZFNvb24oKSBjb25zdAogewogICAgIGZvciAoY29uc3QgYXV0byYgZW50
cnkgOiBtX3NlZ21lbnRzKSB7CiAgICAgICAgIGlmIChlbnRyeS5zZWdtZW50LT5oYXNPbmVSZWYo
KSkgewotICAgICAgICAgICAgaWYgKGF1dG8gZGF0YSA9IFdURjo6Z2V0X2lmPFJldGFpblB0cjxD
RkRhdGFSZWY+PihlbnRyeS5zZWdtZW50LT5tX2ltbXV0YWJsZURhdGEpKQorICAgICAgICAgICAg
aWYgKGF1dG8gZGF0YSA9IHN0ZDo6Z2V0X2lmPFJldGFpblB0cjxDRkRhdGFSZWY+PigmZW50cnku
c2VnbWVudC0+bV9pbW11dGFibGVEYXRhKSkKICAgICAgICAgICAgICAgICBPU0FsbG9jYXRvcjo6
aGludE1lbW9yeU5vdE5lZWRlZFNvb24oY29uc3RfY2FzdDxVSW50OCo+KENGRGF0YUdldEJ5dGVQ
dHIoZGF0YS0+Z2V0KCkpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEtPmdldCgpKSk7CiAgICAgICAg
IH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL0tl
eWVkRGVjb2RlckdlbmVyaWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9L
ZXllZERlY29kZXJHZW5lcmljLmNwcAppbmRleCA5YjYzMGRiZDI3ZGYxZjRkODkyZTdlZGYwMDU0
MmU0NWNmNTliNmVlLi40MzlmNzVkZmY1MjczYmMzNmJlODU5MDk5NDBmYjk1YTlhMWFmNTFhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL0tleWVkRGVjb2Rlckdl
bmVyaWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvS2V5ZWREZWNv
ZGVyR2VuZXJpYy5jcHAKQEAgLTM4LDcgKzM4LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIEtleWVkRGVjb2RlckdlbmVyaWM6OkRpY3Rpb25hcnkgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgotICAgIHVzaW5nIE5vZGUgPSBWYXJpYW50PFZlY3Rvcjx1aW50
OF90PiwgYm9vbCwgdWludDMyX3QsIHVpbnQ2NF90LCBpbnQzMl90LCBpbnQ2NF90LCBmbG9hdCwg
ZG91YmxlLCBTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxEaWN0aW9uYXJ5Piwgc3RkOjp1bmlxdWVf
cHRyPEFycmF5Pj47CisgICAgY2xhc3MgTm9kZSA6IHB1YmxpYyBWYXJpYW50PFZlY3Rvcjx1aW50
OF90PiwgYm9vbCwgdWludDMyX3QsIHVpbnQ2NF90LCBpbnQzMl90LCBpbnQ2NF90LCBmbG9hdCwg
ZG91YmxlLCBTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxEaWN0aW9uYXJ5Piwgc3RkOjp1bmlxdWVf
cHRyPEFycmF5Pj4geworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJs
aWM6CisgICAgICAgIHVzaW5nIEJhc2UgPSBWYXJpYW50PFZlY3Rvcjx1aW50OF90PiwgYm9vbCwg
dWludDMyX3QsIHVpbnQ2NF90LCBpbnQzMl90LCBpbnQ2NF90LCBmbG9hdCwgZG91YmxlLCBTdHJp
bmcsIHN0ZDo6dW5pcXVlX3B0cjxEaWN0aW9uYXJ5Piwgc3RkOjp1bmlxdWVfcHRyPEFycmF5Pj47
CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IE5vZGUoVCYmIHZhbHVlKSA6IEJhc2Uo
c3RkOjpmb3J3YXJkPFQ+KHZhbHVlKSkgeyB9CisgICAgfTsKIAogICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPgogICAgIHZvaWQgYWRkKGNvbnN0IFN0cmluZyYga2V5LCBUJiYgdmFsdWUpIHsgbV9t
YXAuYWRkKGtleSwgbWFrZVVuaXF1ZTxOb2RlPihzdGQ6OmZvcndhcmQ8VD4odmFsdWUpKSk7IH0K
QEAgLTIyMyw3ICsyMjksNyBAQCBjb25zdCBUKiBLZXllZERlY29kZXJHZW5lcmljOjpnZXRQb2lu
dGVyRnJvbURpY3Rpb25hcnlTdGFjayhjb25zdCBTdHJpbmcmIGtleSkKICAgICBpZiAoIW5vZGUp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIFdURjo6Z2V0X2lmPFQ+KCpu
b2RlKTsKKyAgICByZXR1cm4gc3RkOjpnZXRfaWY8VD4obm9kZSk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZUZvbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlRm9udHMuY3BwCmluZGV4IGNkZjhiYTUxNjQ2ZWM5MDZkZGYwMDVhMDFmZjZmNjhl
ZmViZjQyYjcuLmEyNDJkMzY1Zjg5ZGJhOWM3ZGFkODBmNjk4N2NiNDVkZmNmNGFkZTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9u
dHMuY3BwCkBAIC0xNjEsNyArMTYxLDcgQEAgc3RhdGljIEZvbnRSYW5nZXMgcmVhbGl6ZU5leHRG
YWxsYmFjayhjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwKICAgICAg
ICAgICAgIHJldHVybiBmb250RmFtaWx5U3BlY2lmaWNhdGlvbi5mb250UmFuZ2VzKGRlc2NyaXB0
aW9uKTsKICAgICAgICAgfSk7CiAgICAgICAgIGNvbnN0IGF1dG8mIGN1cnJlbnRGYW1pbHkgPSBk
ZXNjcmlwdGlvbi5lZmZlY3RpdmVGYW1pbHlBdChpbmRleCsrKTsKLSAgICAgICAgYXV0byByYW5n
ZXMgPSBXVEY6OnZpc2l0KHZpc2l0b3IsIGN1cnJlbnRGYW1pbHkpOworICAgICAgICBhdXRvIHJh
bmdlcyA9IHN0ZDo6dmlzaXQodmlzaXRvciwgY3VycmVudEZhbWlseSk7CiAgICAgICAgIGlmICgh
cmFuZ2VzLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIHJhbmdlczsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwCmluZGV4IDEzNTRiZGJlZGQ2
MTE2YzIwOWZiNTRhNjNlMTk0MjI1M2NiM2E1OGEuLjNiMzQ0ZGFjMThlZWE3NGM4YzlkNzY1ODg4
MDk5OTY1ZTgyODI3OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZm
ZXIuY3BwCkBAIC02NTAsNyArNjUwLDcgQEAgYm9vbCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVt
VHlwZSBpdGVtVHlwZSwgSXRlbUhhbmRsZSBkZXN0aW5hdGlvbikgY29uc3QKIAogYm9vbCBzYWZl
Q29weShJdGVtSGFuZGxlIGRlc3RpbmF0aW9uLCBjb25zdCBEaXNwbGF5TGlzdEl0ZW0mIHNvdXJj
ZSkKIHsKLSAgICByZXR1cm4gV1RGOjp2aXNpdChbJl0oY29uc3QgYXV0byYgc291cmNlKSB7Cisg
ICAgcmV0dXJuIHN0ZDo6dmlzaXQoWyZdKGNvbnN0IGF1dG8mIHNvdXJjZSkgewogICAgICAgICB1
c2luZyBEaXNwbGF5TGlzdEl0ZW1UeXBlID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVy
ZW5jZTxkZWNsdHlwZShzb3VyY2UpPjo6dHlwZTsKICAgICAgICAgY29uc3RleHByIGF1dG8gaXRl
bVR5cGUgPSBEaXNwbGF5TGlzdEl0ZW1UeXBlOjppdGVtVHlwZTsKICAgICAgICAgZGVzdGluYXRp
b24uZGF0YVswXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGl0ZW1UeXBlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1UeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcAppbmRleCA5OGExNmQyNWZhMWI1YTRjNTJiMGY3
M2E0ZjlmNTMyYWViZmFiNzBjLi4zYmViYTljNGQxYThjYWE0NGM3NThmZDIwM2JlMjYxMzY3OWE1
ZDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCkBAIC0yNzYs
NyArMjc2LDcgQEAgc2l6ZV90IHBhZGRlZFNpemVPZlR5cGVBbmRJdGVtSW5CeXRlcyhJdGVtVHlw
ZSB0eXBlKQogCiBzaXplX3QgcGFkZGVkU2l6ZU9mVHlwZUFuZEl0ZW1JbkJ5dGVzKGNvbnN0IERp
c3BsYXlMaXN0SXRlbSYgZGlzcGxheUxpc3RJdGVtKQogewotICAgIGF1dG8gaXRlbVNpemUgPSBX
VEY6OnZpc2l0KFtdKGNvbnN0IGF1dG8mIGl0ZW0pIHsKKyAgICBhdXRvIGl0ZW1TaXplID0gc3Rk
Ojp2aXNpdChbXShjb25zdCBhdXRvJiBpdGVtKSB7CiAgICAgICAgIHJldHVybiBzaXplb2YoaXRl
bSk7CiAgICAgfSwgZGlzcGxheUxpc3RJdGVtKTsKICAgICByZXR1cm4gc2l6ZW9mKHVpbnQ2NF90
KSArIHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25vZih1aW50NjRfdCksIGl0ZW1TaXplKTsKQEAg
LTI4NCw3ICsyODQsNyBAQCBzaXplX3QgcGFkZGVkU2l6ZU9mVHlwZUFuZEl0ZW1JbkJ5dGVzKGNv
bnN0IERpc3BsYXlMaXN0SXRlbSYgZGlzcGxheUxpc3RJdGVtKQogCiBJdGVtVHlwZSBkaXNwbGF5
TGlzdEl0ZW1UeXBlKGNvbnN0IERpc3BsYXlMaXN0SXRlbSYgZGlzcGxheUxpc3RJdGVtKQogewot
ICAgIHJldHVybiBXVEY6OnZpc2l0KFtdKGNvbnN0IGF1dG8mIGl0ZW0pIHsKKyAgICByZXR1cm4g
c3RkOjp2aXNpdChbXShjb25zdCBhdXRvJiBpdGVtKSB7CiAgICAgICAgIHJldHVybiBpdGVtLml0
ZW1UeXBlOwogICAgIH0sIGRpc3BsYXlMaXN0SXRlbSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tNZWRpYURldmljZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFEZXZpY2UuaAppbmRleCA0NjdkOTEzOTQ0NDNlZmEyODM2
M2E4NmE4ZDU0ZmQyYzQ0NTg1M2NhLi5hMjNkNzAxMzI1YmY1Nzg3YzAwM2Y5OTdiYjEyZDBkNDc5
ZmM1NDRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tNZWRp
YURldmljZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja01lZGlhRGV2
aWNlLmgKQEAgLTIwMSw3ICsyMDEsNyBAQCBzdHJ1Y3QgTW9ja01lZGlhRGV2aWNlIHsKICAgICB7
CiAgICAgICAgIGVuY29kZXIgPDwgcGVyc2lzdGVudElkOwogICAgICAgICBlbmNvZGVyIDw8IGxh
YmVsOwotICAgICAgICBzd2l0Y2hPbihwcm9wZXJ0aWVzLCBbJl0oY29uc3QgTW9ja01pY3JvcGhv
bmVQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzKSB7CisgICAgICAgIFdURjo6c3dpdGNoT24ocHJvcGVy
dGllcywgWyZdKGNvbnN0IE1vY2tNaWNyb3Bob25lUHJvcGVydGllcyYgcHJvcGVydGllcykgewog
ICAgICAgICAgICAgZW5jb2RlciA8PCAodWludDhfdCkxOwogICAgICAgICAgICAgZW5jb2RlciA8
PCBwcm9wZXJ0aWVzOwogICAgICAgICB9LCBbJl0oY29uc3QgTW9ja1NwZWFrZXJQcm9wZXJ0aWVz
JiBwcm9wZXJ0aWVzKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Zvcm1EYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURh
dGEuY3BwCmluZGV4IGNlOWU5ZjUwYWM0ZTY4ZDhlYWY2NjNiZjg2MTU4ZjRmZGM2MmU1MmIuLjg5
MGFkNjRiODUzOTA4Y2RmOGM5NGUyMjljMjVmZjM5YmI3NTdiMTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCkBAIC0xMjcsNyArMTI3LDcgQEAgdW5z
aWduZWQgRm9ybURhdGE6OmltYWdlT3JNZWRpYUZpbGVzQ291bnQoKSBjb25zdAogewogICAgIHVu
c2lnbmVkIGltYWdlT3JNZWRpYUZpbGVzQ291bnQgPSAwOwogICAgIGZvciAoYXV0byYgZWxlbWVu
dCA6IG1fZWxlbWVudHMpIHsKLSAgICAgICAgYXV0byogZW5jb2RlZEZpbGVEYXRhID0gV1RGOjpn
ZXRfaWY8Rm9ybURhdGFFbGVtZW50OjpFbmNvZGVkRmlsZURhdGE+KGVsZW1lbnQuZGF0YSk7Cisg
ICAgICAgIGF1dG8qIGVuY29kZWRGaWxlRGF0YSA9IHN0ZDo6Z2V0X2lmPEZvcm1EYXRhRWxlbWVu
dDo6RW5jb2RlZEZpbGVEYXRhPigmZWxlbWVudC5kYXRhKTsKICAgICAgICAgaWYgKCFlbmNvZGVk
RmlsZURhdGEpCiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMTQwLDcgKzE0MCw3IEBAIHVu
c2lnbmVkIEZvcm1EYXRhOjppbWFnZU9yTWVkaWFGaWxlc0NvdW50KCkgY29uc3QKIAogdWludDY0
X3QgRm9ybURhdGFFbGVtZW50OjpsZW5ndGhJbkJ5dGVzKGNvbnN0IEZ1bmN0aW9uPHVpbnQ2NF90
KGNvbnN0IFVSTCYpPiYgYmxvYlNpemUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN3aXRjaE9uKGRh
dGEsCisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oZGF0YSwKICAgICAgICAgW10gKGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgYnl0ZXMpIHsKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1
aW50NjRfdD4oYnl0ZXMuc2l6ZSgpKTsKICAgICAgICAgfSwgW10gKGNvbnN0IEZvcm1EYXRhRWxl
bWVudDo6RW5jb2RlZEZpbGVEYXRhJiBmaWxlRGF0YSkgewpAQCAtMTYyLDcgKzE2Miw3IEBAIHVp
bnQ2NF90IEZvcm1EYXRhRWxlbWVudDo6bGVuZ3RoSW5CeXRlcygpIGNvbnN0CiAKIEZvcm1EYXRh
RWxlbWVudCBGb3JtRGF0YUVsZW1lbnQ6Omlzb2xhdGVkQ29weSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIHN3aXRjaE9uKGRhdGEsCisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oZGF0YSwKICAgICAg
ICAgW10gKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnl0ZXMpIHsKICAgICAgICAgICAgIHJldHVy
biBGb3JtRGF0YUVsZW1lbnQoVmVjdG9yIHsgYnl0ZXMuZGF0YSgpLCBieXRlcy5zaXplKCkgfSk7
CiAgICAgICAgIH0sIFtdIChjb25zdCBGb3JtRGF0YUVsZW1lbnQ6OkVuY29kZWRGaWxlRGF0YSYg
ZmlsZURhdGEpIHsKQEAgLTE3Nyw3ICsxNzcsNyBAQCB2b2lkIEZvcm1EYXRhOjphcHBlbmREYXRh
KGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKQogewogICAgIG1fbGVuZ3RoSW5CeXRlcyA9
IHN0ZDo6bnVsbG9wdDsKICAgICBpZiAoIW1fZWxlbWVudHMuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiB2ZWN0b3IgPSBXVEY6OmdldF9pZjxWZWN0b3I8dWludDhfdD4+KG1fZWxlbWVu
dHMubGFzdCgpLmRhdGEpKSB7CisgICAgICAgIGlmIChhdXRvKiB2ZWN0b3IgPSBzdGQ6OmdldF9p
ZjxWZWN0b3I8dWludDhfdD4+KCZtX2VsZW1lbnRzLmxhc3QoKS5kYXRhKSkgewogICAgICAgICAg
ICAgdmVjdG9yLT5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBzaXpl
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjkzLDcgKzI5Myw3IEBAIFZl
Y3Rvcjx1aW50OF90PiBGb3JtRGF0YTo6ZmxhdHRlbigpIGNvbnN0CiAgICAgLy8gQ29uY2F0ZW5h
dGUgYWxsIHRoZSBieXRlIGFycmF5cywgYnV0IG9taXQgYW55IGZpbGVzLgogICAgIFZlY3Rvcjx1
aW50OF90PiBkYXRhOwogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IG1fZWxlbWVudHMpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHZlY3RvciA9IFdURjo6Z2V0X2lmPFZlY3Rvcjx1aW50OF90Pj4oZWxl
bWVudC5kYXRhKSkKKyAgICAgICAgaWYgKGF1dG8qIHZlY3RvciA9IHN0ZDo6Z2V0X2lmPFZlY3Rv
cjx1aW50OF90Pj4oJmVsZW1lbnQuZGF0YSkpCiAgICAgICAgICAgICBkYXRhLmFwcGVuZCh2ZWN0
b3ItPmRhdGEoKSwgdmVjdG9yLT5zaXplKCkpOwogICAgIH0KICAgICByZXR1cm4gZGF0YTsKQEAg
LTM2Nyw3ICszNjcsNyBAQCBGb3JtRGF0YUZvclVwbG9hZCBGb3JtRGF0YTo6cHJlcGFyZUZvclVw
bG9hZCgpCiB7CiAgICAgVmVjdG9yPFN0cmluZz4gZ2VuZXJhdGVkRmlsZXM7CiAgICAgZm9yIChh
dXRvJiBlbGVtZW50IDogbV9lbGVtZW50cykgewotICAgICAgICBhdXRvKiBmaWxlRGF0YSA9IFdU
Rjo6Z2V0X2lmPEZvcm1EYXRhRWxlbWVudDo6RW5jb2RlZEZpbGVEYXRhPihlbGVtZW50LmRhdGEp
OworICAgICAgICBhdXRvKiBmaWxlRGF0YSA9IHN0ZDo6Z2V0X2lmPEZvcm1EYXRhRWxlbWVudDo6
RW5jb2RlZEZpbGVEYXRhPigmZWxlbWVudC5kYXRhKTsKICAgICAgICAgaWYgKCFmaWxlRGF0YSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoRmlsZVN5c3RlbTo6ZmlsZVR5cGVG
b2xsb3dpbmdTeW1saW5rcyhmaWxlRGF0YS0+ZmlsZW5hbWUpICE9IEZpbGVTeXN0ZW06OkZpbGVU
eXBlOjpEaXJlY3RvcnkpCkBAIC00MjUsNyArNDI1LDcgQEAgVVJMIEZvcm1EYXRhOjphc0Jsb2JV
UkwoKSBjb25zdAogICAgIGlmIChtX2VsZW1lbnRzLnNpemUoKSAhPSAxKQogICAgICAgICByZXR1
cm4geyB9OwogCi0gICAgaWYgKGF1dG8qIGJsb2JEYXRhID0gV1RGOjpnZXRfaWY8Rm9ybURhdGFF
bGVtZW50OjpFbmNvZGVkQmxvYkRhdGE+KG1fZWxlbWVudHMuZmlyc3QoKS5kYXRhKSkKKyAgICBp
ZiAoYXV0byogYmxvYkRhdGEgPSBzdGQ6OmdldF9pZjxGb3JtRGF0YUVsZW1lbnQ6OkVuY29kZWRC
bG9iRGF0YT4oJm1fZWxlbWVudHMuZmlyc3QoKS5kYXRhKSkKICAgICAgICAgcmV0dXJuIGJsb2JE
YXRhLT51cmw7CiAgICAgcmV0dXJuIHsgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvRm9ybURhdGEuaAppbmRleCA2MzU0MDhjNTQ4OTljYWI5YWFlODUzNTFmMjViNDIyOGFj
MjdhZmFmLi5mZWViMTk0ZDNmNjA5NjQ1MTAxMTczMjJhZWJlZTgwZWM5MDIzNmNjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oCkBAIC0xNTMsMTAgKzE1Mywx
MCBAQCBzdHJ1Y3QgRm9ybURhdGFFbGVtZW50IHsKICAgICAgICAgaWYgKGRhdGEuaW5kZXgoKSAh
PSBvdGhlci5kYXRhLmluZGV4KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IGlmICghZGF0YS5pbmRleCgpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6Z2V0PDA+KGRhdGEp
ID09IFdURjo6Z2V0PDA+KG90aGVyLmRhdGEpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0
PDA+KGRhdGEpID09IHN0ZDo6Z2V0PDA+KG90aGVyLmRhdGEpOwogICAgICAgICBpZiAoZGF0YS5p
bmRleCgpID09IDEpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpnZXQ8MT4oZGF0YSkgPT0gV1RG
OjpnZXQ8MT4ob3RoZXIuZGF0YSk7Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDwyPihkYXRhKSA9
PSBXVEY6OmdldDwyPihvdGhlci5kYXRhKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6OmdldDwx
PihkYXRhKSA9PSBzdGQ6OmdldDwxPihvdGhlci5kYXRhKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6
Z2V0PDI+KGRhdGEpID09IHN0ZDo6Z2V0PDI+KG90aGVyLmRhdGEpOwogICAgIH0KICAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgRm9ybURhdGFFbGVtZW50JiBvdGhlcikgY29uc3QKICAgICB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Zvcm1EYXRhU3Ry
ZWFtQ0ZOZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Gb3JtRGF0
YVN0cmVhbUNGTmV0LmNwcAppbmRleCAwYjk4ZWI3NWQ5MGY3ZjczMzMyMmQyODY4OThmYTY2MjM2
N2I0MWVhLi5iOTAyOWJjZTY1NDA5MmQ5YjkxNzJiMzkxNjEzMDZmNGE3NmJjZTM1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Zvcm1EYXRhU3RyZWFtQ0ZO
ZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvRm9ybURhdGFT
dHJlYW1DRk5ldC5jcHAKQEAgLTEzNyw3ICsxMzcsNyBAQCBzdGF0aWMgYm9vbCBhZHZhbmNlQ3Vy
cmVudFN0cmVhbShGb3JtU3RyZWFtRmllbGRzKiBmb3JtKQogICAgIC8vIENyZWF0ZSB0aGUgbmV3
IHN0cmVhbS4KICAgICBGb3JtRGF0YUVsZW1lbnQmIG5leHRJbnB1dCA9IGZvcm0tPnJlbWFpbmlu
Z0VsZW1lbnRzLmxhc3QoKTsKIAotICAgIGJvb2wgc3VjY2VzcyA9IHN3aXRjaE9uKG5leHRJbnB1
dC5kYXRhLAorICAgIGJvb2wgc3VjY2VzcyA9IFdURjo6c3dpdGNoT24obmV4dElucHV0LmRhdGEs
CiAgICAgICAgIFtmb3JtXSAoVmVjdG9yPHVpbnQ4X3Q+JiBieXRlcykgewogICAgICAgICAgICAg
c2l6ZV90IHNpemUgPSBieXRlcy5zaXplKCk7CiAgICAgICAgICAgICBNYWxsb2NQdHI8dWludDhf
dCwgV1RGOjpWZWN0b3JNYWxsb2M+IGRhdGEgPSBieXRlcy5yZWxlYXNlQnVmZmVyKCk7CkBAIC0z
OTcsNyArMzk3LDcgQEAgdm9pZCBzZXRIVFRQQm9keShDRk11dGFibGVVUkxSZXF1ZXN0UmVmIHJl
cXVlc3QsIEZvcm1EYXRhKiBmb3JtRGF0YSkKICAgICAvLyBIYW5kbGUgdGhlIGNvbW1vbiBzcGVj
aWFsIGNhc2Ugb2Ygb25lIHBpZWNlIG9mIGZvcm0gZGF0YSwgd2l0aCBubyBmaWxlcy4KICAgICBh
dXRvJiBlbGVtZW50cyA9IGZvcm1EYXRhLT5lbGVtZW50cygpOwogICAgIGlmIChlbGVtZW50cy5z
aXplKCkgPT0gMSAmJiAhZm9ybURhdGEtPmFsd2F5c1N0cmVhbSgpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiB2ZWN0b3IgPSBXVEY6OmdldF9pZjxWZWN0b3I8dWludDhfdD4+KGVsZW1lbnRzWzBdLmRh
dGEpKSB7CisgICAgICAgIGlmIChhdXRvKiB2ZWN0b3IgPSBzdGQ6OmdldF9pZjxWZWN0b3I8dWlu
dDhfdD4+KCZlbGVtZW50c1swXS5kYXRhKSkgewogICAgICAgICAgICAgYXV0byBkYXRhID0gYWRv
cHRDRihDRkRhdGFDcmVhdGUobnVsbHB0ciwgdmVjdG9yLT5kYXRhKCksIHZlY3Rvci0+c2l6ZSgp
KSk7CiAgICAgICAgICAgICBDRlVSTFJlcXVlc3RTZXRIVFRQUmVxdWVzdEJvZHkocmVxdWVzdCwg
ZGF0YS5nZXQoKSk7CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmNwcAppbmRleCAyNGQxYzdkNzA2
NTAxNmU1NTJlOWZjNmU5ZWQ5MjhhNTEwMjkyZDZjLi4wYjJlMzg2ODk4MWEyOTg2YThiZjZlMGZm
YWNiMjhmNGE2OTQ2OWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybENvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHAKQEAgLTM1MSw3ICszNTEsNyBAQCB2b2lkIEN1cmxI
YW5kbGU6OmVuYWJsZVNTTEZvckhvc3QoY29uc3QgU3RyaW5nJiBob3N0KQogI2lmIE9TKFdJTkRP
V1MpCiAgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9TU0xfT1BUSU9OUywg
Q1VSTFNTTE9QVF9OQVRJVkVfQ0EpOwogI2Vsc2UKLSAgICBpZiAoYXV0byogcGF0aCA9IFdURjo6
Z2V0X2lmPFN0cmluZz4oc3NsSGFuZGxlLmdldENBQ2VydEluZm8oKSkpCisgICAgaWYgKGF1dG8q
IHBhdGggPSBzdGQ6OmdldF9pZjxTdHJpbmc+KHNzbEhhbmRsZS5nZXRDQUNlcnRJbmZvKCkpKQog
ICAgICAgICBzZXRDQUNlcnRQYXRoKHBhdGgtPnV0ZjgoKS5kYXRhKCkpOwogI2VuZGlmCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybEZvcm1E
YXRhU3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
Rm9ybURhdGFTdHJlYW0uY3BwCmluZGV4IGNjOWFiMGJjMDg1NTFlZmYwN2RmNDMzYjc2M2I5OWU4
NTFiN2Y5NDQuLjdhYTI2MmRjNzcxNjVkNmI3MjE5NmQ4ZWIxNmQ1Yzg5MmVlOGQ5ZGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRm9ybURhdGFT
dHJlYW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
Rm9ybURhdGFTdHJlYW0uY3BwCkBAIC0xMjgsNyArMTI4LDcgQEAgc3RkOjpvcHRpb25hbDxzaXpl
X3Q+IEN1cmxGb3JtRGF0YVN0cmVhbTo6cmVhZChjaGFyKiBidWZmZXIsIHNpemVfdCBzaXplKQog
ICAgICAgICAgICAgICAgIHJldHVybiByZWFkRnJvbURhdGEoYnl0ZXMsIGJ1ZmZlclBvc2l0aW9u
LCBidWZmZXJTaXplKTsKICAgICAgICAgICAgIH0sIFsmXSAoY29uc3QgRm9ybURhdGFFbGVtZW50
OjpFbmNvZGVkRmlsZURhdGEmIGZpbGVEYXRhKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
YWRGcm9tRmlsZShmaWxlRGF0YSwgYnVmZmVyUG9zaXRpb24sIGJ1ZmZlclNpemUpOwotICAgICAg
ICAgICAgfSwgW10gKGNvbnN0IEZvcm1EYXRhRWxlbWVudDo6RW5jb2RlZEJsb2JEYXRhJikgewor
ICAgICAgICAgICAgfSwgW10gKGNvbnN0IEZvcm1EYXRhRWxlbWVudDo6RW5jb2RlZEJsb2JEYXRh
JikgLT4gc3RkOjpvcHRpb25hbDxzaXplX3Q+IHsKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAg
ICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L0N1cmxTU0xWZXJpZmllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvQ3VybFNTTFZlcmlmaWVyLmNwcAppbmRleCA4Yjc5YmUyYTI4NmU1MmJmZjZjYjI5OTE3NjBl
MTZlMjdhMWI0NmMwLi41NGY5YTY0YjQxNzk5N2VkYTZmNjk2YzJiNmQzZmEyY2IxYjM3Y2JjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZl
cmlmaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bFNTTFZlcmlmaWVyLmNwcApAQCAtNDQsNyArNDQsNyBAQCBDdXJsU1NMVmVyaWZpZXI6OkN1cmxT
U0xWZXJpZmllcih2b2lkKiBzc2xDdHgpCiAgICAgU1NMX0NUWF9zZXRfdmVyaWZ5KGN0eCwgU1NM
X0NUWF9nZXRfdmVyaWZ5X21vZGUoY3R4KSwgdmVyaWZ5Q2FsbGJhY2spOwogCiAjaWYgZGVmaW5l
ZChMSUJSRVNTTF9WRVJTSU9OX05VTUJFUikKLSAgICBpZiAoYXV0byBkYXRhID0gV1RGOjpnZXRf
aWY8Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZT4oc3NsSGFuZGxlLmdldENBQ2VydEluZm8o
KSkpCisgICAgaWYgKGF1dG8gZGF0YSA9IHN0ZDo6Z2V0X2lmPENlcnRpZmljYXRlSW5mbzo6Q2Vy
dGlmaWNhdGU+KCZzc2xIYW5kbGUuZ2V0Q0FDZXJ0SW5mbygpKSkKICAgICAgICAgU1NMX0NUWF9s
b2FkX3ZlcmlmeV9tZW0oY3R4LCBzdGF0aWNfY2FzdDx2b2lkKj4oY29uc3RfY2FzdDx1aW50OF90
Kj4oZGF0YS0+ZGF0YSgpKSksIGRhdGEtPnNpemUoKSk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3LmNwcAppbmRleCA3MWM3NGNiMDYy
NDUyYmRjMDE5YTAwNzc0OWE5NDgzNmQ0NmEzYWIyLi40MjdkZDg4NTQ4YmVmNjRmNjJjNmU5ZmZj
YmJiMTkyMTI3NTFmNDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJl
c29sdmVGb3JGb250UmF3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29s
dmVGb3JGb250UmF3LmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIHN0ZDo6b3B0aW9uYWw8Rm9udENh
c2NhZGU+IHJlc29sdmVGb3JGb250UmF3KGNvbnN0IEZvbnRSYXcmIGZvbnRSYXcsIEZvbnRDYXNj
YWRlCiAgICAgfQogCiAgICAgaWYgKGZvbnRSYXcud2VpZ2h0KSB7Ci0gICAgICAgIGF1dG8gd2Vp
Z2h0ID0gc3dpdGNoT24oKmZvbnRSYXcud2VpZ2h0LCBbJl0gKENTU1ZhbHVlSUQgaWRlbnQpIHsK
KyAgICAgICAgYXV0byB3ZWlnaHQgPSBXVEY6OnN3aXRjaE9uKCpmb250UmF3LndlaWdodCwgWyZd
IChDU1NWYWx1ZUlEIGlkZW50KSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGlkZW50KSB7CiAgICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgogICAgICAgICAgICAgICAgIHJldHVybiBub3Jt
YWxXZWlnaHRWYWx1ZSgpOwpAQCAtMTc5LDcgKzE3OSw3IEBAIHN0ZDo6b3B0aW9uYWw8Rm9udENh
c2NhZGU+IHJlc29sdmVGb3JGb250UmF3KGNvbnN0IEZvbnRSYXcmIGZvbnRSYXcsIEZvbnRDYXNj
YWRlCiAgICAgfQogCiAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplRnJvbUlkZW50
aWZpZXIoQ1NTVmFsdWVJbnZhbGlkKTsKLSAgICBmbG9hdCBzaXplID0gc3dpdGNoT24oZm9udFJh
dy5zaXplLCBbJl0gKENTU1ZhbHVlSUQgaWRlbnQpIHsKKyAgICBmbG9hdCBzaXplID0gV1RGOjpz
d2l0Y2hPbihmb250UmF3LnNpemUsIFsmXSAoQ1NTVmFsdWVJRCBpZGVudCkgewogICAgICAgICBz
d2l0Y2ggKGlkZW50KSB7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVYeFNtYWxsOgogICAgICAgICBj
YXNlIENTU1ZhbHVlWFNtYWxsOgpAQCAtMTk5LDcgKzE5OSw3IEBAIHN0ZDo6b3B0aW9uYWw8Rm9u
dENhc2NhZGU+IHJlc29sdmVGb3JGb250UmF3KGNvbnN0IEZvbnRSYXcmIGZvbnRSYXcsIEZvbnRD
YXNjYWRlCiAgICAgICAgICAgICByZXR1cm4gMC5mOwogICAgICAgICB9CiAgICAgfSwgWyZdIChj
b25zdCBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Okxlbmd0aE9yUGVyY2VudFJhdyYgbGVuZ3Ro
T3JQZXJjZW50KSB7Ci0gICAgICAgIHJldHVybiBzd2l0Y2hPbihsZW5ndGhPclBlcmNlbnQsIFsm
XSAoY29uc3QgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhSYXcmIGxlbmd0aCkgewor
ICAgICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihsZW5ndGhPclBlcmNlbnQsIFsmXSAoY29uc3Qg
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhSYXcmIGxlbmd0aCkgewogICAgICAgICAg
ICAgYXV0byBmb250Q2FzY2FkZSA9IEZvbnRDYXNjYWRlKEZvbnRDYXNjYWRlRGVzY3JpcHRpb24o
Zm9udERlc2NyaXB0aW9uKSk7CiAgICAgICAgICAgICBmb250Q2FzY2FkZS51cGRhdGUoY29udGV4
dC5jc3NGb250U2VsZWN0b3IoKSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogUGFzc2luZyBudWxs
IGZvciB0aGUgUmVuZGVyVmlldyBwYXJhbWV0ZXIgbWVhbnMgdGhhdCB2dyBhbmQgdmggdW5pdHMg
d2lsbCBldmFsdWF0ZSB0bwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRleCBhYWE4NzMx
ZjllY2FhNmE4MWY1MjFkYzBlN2Y4NDkyM2ZhYTgxZjA2Li42N2E4MGIwMDY3ZGIwZTE0ZjgyMjAz
ZTMzMTk1YTY2YTU5ZTQ2OTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcApAQCAtNDcw
LDcgKzQ3MCw3IEBAIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6QmxvYkRhdGFGaWxlUmVmZXJlbmNl
Pj4gTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlCiAgICAgVmVjdG9yPFJlZlB0cjxX
ZWJDb3JlOjpCbG9iRGF0YUZpbGVSZWZlcmVuY2U+PiBmaWxlczsKICAgICBpZiAoYXV0byogYm9k
eSA9IGxvYWRQYXJhbWV0ZXJzLnJlcXVlc3QuaHR0cEJvZHkoKSkgewogICAgICAgICBmb3IgKGF1
dG8mIGVsZW1lbnQgOiBib2R5LT5lbGVtZW50cygpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byog
YmxvYkRhdGEgPSBXVEY6OmdldF9pZjxGb3JtRGF0YUVsZW1lbnQ6OkVuY29kZWRCbG9iRGF0YT4o
ZWxlbWVudC5kYXRhKSkKKyAgICAgICAgICAgIGlmIChhdXRvKiBibG9iRGF0YSA9IHN0ZDo6Z2V0
X2lmPEZvcm1EYXRhRWxlbWVudDo6RW5jb2RlZEJsb2JEYXRhPigmZWxlbWVudC5kYXRhKSkKICAg
ICAgICAgICAgICAgICBmaWxlcy5hcHBlbmRWZWN0b3IoYmxvYlJlZ2lzdHJ5LmZpbGVzSW5CbG9i
KGJsb2JEYXRhLT51cmwpKTsKICAgICAgICAgfQogICAgICAgICBjb25zdF9jYXN0PFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCY+KGxvYWRQYXJhbWV0ZXJzLnJlcXVlc3QpLnNldEhUVFBCb2R5KGJv
ZHktPnJlc29sdmVCbG9iUmVmZXJlbmNlcygmYmxvYlJlZ2lzdHJ5KSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJz
LmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFBh
cmFtZXRlcnMuY3BwCmluZGV4IGRkZjk2ZGUwMzNjNjVmNTUyMWYzYmJiZTgxZDE5YWM4ZTdhNWJl
OWQuLjZiYjBiZTg0NDZhMDlmZDQ1ZDVjMDg3OGM4MGY2NmFlNWIxNmQxYWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRl
cnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNl
TG9hZFBhcmFtZXRlcnMuY3BwCkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNl
TG9hZFBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAKICAg
ICAgICAgVmVjdG9yPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gcmVxdWVzdEJvZHlTYW5kYm94
RXh0ZW5zaW9uczsKICAgICAgICAgZm9yIChjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGVsZW1lbnQg
OiByZXF1ZXN0Lmh0dHBCb2R5KCktPmVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRv
KiBmaWxlRGF0YSA9IFdURjo6Z2V0X2lmPEZvcm1EYXRhRWxlbWVudDo6RW5jb2RlZEZpbGVEYXRh
PihlbGVtZW50LmRhdGEpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogZmlsZURhdGEgPSBzdGQ6
OmdldF9pZjxGb3JtRGF0YUVsZW1lbnQ6OkVuY29kZWRGaWxlRGF0YT4oJmVsZW1lbnQuZGF0YSkp
IHsKICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSBmaWxlRGF0YS0+ZmlsZW5h
bWU7CiAgICAgICAgICAgICAgICAgaWYgKGF1dG8gaGFuZGxlID0gU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5KSkKICAg
ICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9ucy5hcHBlbmQoV1RG
TW92ZSgqaGFuZGxlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9B
cmd1bWVudENvZGVycy5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2Rl
cnMuaAppbmRleCA0NzlkYjYwZWRjMjcxNmQ1NTYwNmY2NTJmMjQzMWFkMzY5ZjY1NzBjLi5kMzE1
NjUwZDAxZTMzN2ZmY2ViNmFjMWUxNzE0NzNkOGY5YzA5NzQxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgKQEAgLTcwNyw3ICs3MDcsNyBAQCBzdHJ1Y3Qg
VmFyaWFudENvZGVyIHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgV1RGOjpWYXJpYW50PFR5cGVzLi4uPiYgdmFyaWFudCwgdW5zaWduZWQgaSkKICAgICB7
CiAgICAgICAgIGlmIChpID09IGluZGV4KSB7Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IFdURjo6
Z2V0PGluZGV4Pih2YXJpYW50KTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RkOjpnZXQ8aW5k
ZXg+KHZhcmlhbnQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIFZh
cmlhbnRDb2RlcjxpbmRleCAtIDEsIFR5cGVzLi4uPjo6ZW5jb2RlKGVuY29kZXIsIHZhcmlhbnQs
IGkpOwpAQCAtNzE2LDcgKzcxNiw3IEBAIHN0cnVjdCBWYXJpYW50Q29kZXIgewogICAgIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPFdURjo6VmFyaWFudDxUeXBlcy4uLj4+IGRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyLCB1bnNpZ25lZCBpKQogICAgIHsKICAgICAgICAgaWYgKGkgPT0gaW5kZXgpIHsKLSAg
ICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dHlwZW5hbWUgV1RGOjp2YXJpYW50X2FsdGVybmF0aXZl
PGluZGV4LCBXVEY6OlZhcmlhbnQ8VHlwZXMuLi4+Pjo6dHlwZT4gb3B0aW9uYWw7CisgICAgICAg
ICAgICBzdGQ6Om9wdGlvbmFsPHR5cGVuYW1lIHN0ZDo6dmFyaWFudF9hbHRlcm5hdGl2ZTxpbmRl
eCwgV1RGOjpWYXJpYW50PFR5cGVzLi4uPj46OnR5cGU+IG9wdGlvbmFsOwogICAgICAgICAgICAg
ZGVjb2RlciA+PiBvcHRpb25hbDsKICAgICAgICAgICAgIGlmICghb3B0aW9uYWwpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKQEAgLTczMSwxMyArNzMxLDEzIEBAIHN0cnVj
dCBWYXJpYW50Q29kZXI8MCwgVHlwZXMuLi4+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgY29uc3QgV1RGOjpWYXJpYW50PFR5cGVzLi4uPiYgdmFyaWFudCwgdW5z
aWduZWQgaSkKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoaSwgIWkpOwotICAgICAgICBl
bmNvZGVyIDw8IFdURjo6Z2V0PDA+KHZhcmlhbnQpOworICAgICAgICBlbmNvZGVyIDw8IHN0ZDo6
Z2V0PDA+KHZhcmlhbnQpOwogICAgIH0KICAgICAKICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxX
VEY6OlZhcmlhbnQ8VHlwZXMuLi4+PiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgdW5zaWduZWQg
aSkKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoaSwgIWkpOwotICAgICAgICBzdGQ6Om9w
dGlvbmFsPHR5cGVuYW1lIFdURjo6dmFyaWFudF9hbHRlcm5hdGl2ZTwwLCBXVEY6OlZhcmlhbnQ8
VHlwZXMuLi4+Pjo6dHlwZT4gb3B0aW9uYWw7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8dHlwZW5h
bWUgc3RkOjp2YXJpYW50X2FsdGVybmF0aXZlPDAsIFdURjo6VmFyaWFudDxUeXBlcy4uLj4+Ojp0
eXBlPiBvcHRpb25hbDsKICAgICAgICAgZGVjb2RlciA+PiBvcHRpb25hbDsKICAgICAgICAgaWYg
KCFvcHRpb25hbCkKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Gb3JtRGF0YVJlZmVyZW5jZS5oIGIvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvRm9ybURhdGFSZWZlcmVuY2UuaAppbmRleCBjMmQ1ODk1OTVm
NWUzNDEwZDFhZWFmNDJiYTdhZWUyMzhmNzE1NDE3Li5iY2RiMTcwMDdiYzJmMGU1OWNkNmQwOGZl
YjRlMjZkM2VmOGQ2ZTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9G
b3JtRGF0YVJlZmVyZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Zvcm1E
YXRhUmVmZXJlbmNlLmgKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogCiAgICAgICAgIFZlY3Rv
cjxXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gc2FuZGJveEV4dGVuc2lvbkhhbmRs
ZXM7CiAgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IG1fZGF0YS0+ZWxlbWVudHMoKSkgewot
ICAgICAgICAgICAgaWYgKGF1dG8qIGZpbGVEYXRhID0gV1RGOjpnZXRfaWY8V2ViQ29yZTo6Rm9y
bURhdGFFbGVtZW50OjpFbmNvZGVkRmlsZURhdGE+KGVsZW1lbnQuZGF0YSkpIHsKKyAgICAgICAg
ICAgIGlmIChhdXRvKiBmaWxlRGF0YSA9IHN0ZDo6Z2V0X2lmPFdlYkNvcmU6OkZvcm1EYXRhRWxl
bWVudDo6RW5jb2RlZEZpbGVEYXRhPigmZWxlbWVudC5kYXRhKSkgewogICAgICAgICAgICAgICAg
IGNvbnN0IFN0cmluZyYgcGF0aCA9IGZpbGVEYXRhLT5maWxlbmFtZTsKICAgICAgICAgICAgICAg
ICBpZiAoYXV0byBoYW5kbGUgPSBXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZShwYXRoLCBXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5KSkKICAgICAg
ICAgICAgICAgICAgICAgc2FuZGJveEV4dGVuc2lvbkhhbmRsZXMuYXBwZW5kKFdURk1vdmUoKmhh
bmRsZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvTWVzc2FnZVJl
Y2VpdmVRdWV1ZU1hcC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9NZXNzYWdlUmVj
ZWl2ZVF1ZXVlTWFwLmNwcAppbmRleCA0NmZlMGU4MDQ1MzlkZmZmMTU1ZmRjYWY0MGUzYTA4YjA1
MDliMmJhLi5lZGY1NjJmMjM3NGQ2ZmFlMTU1YzQwNGVhNzkwYTRkNjgyYTVlZDI5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9NZXNzYWdlUmVjZWl2ZVF1ZXVlTWFwLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9NZXNzYWdlUmVjZWl2ZVF1ZXVlTWFw
LmNwcApAQCAtNTUsNyArNTUsNyBAQCBNZXNzYWdlUmVjZWl2ZVF1ZXVlKiBNZXNzYWdlUmVjZWl2
ZVF1ZXVlTWFwOjpnZXQoY29uc3QgRGVjb2RlciYgbWVzc2FnZSkgY29uc3QKICAgICB9CiAgICAg
aWYgKGl0ID09IG1fcXVldWVzLmVuZCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBy
ZXR1cm4gV1RGOjp2aXNpdCgKKyAgICByZXR1cm4gc3RkOjp2aXNpdCgKICAgICAgICAgV1RGOjpt
YWtlVmlzaXRvcigKICAgICAgICAgICAgIFtdKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxNZXNzYWdl
UmVjZWl2ZVF1ZXVlPiYgcXVldWUpIHsgcmV0dXJuIHF1ZXVlLmdldCgpOyB9LAogICAgICAgICAg
ICAgW10oTWVzc2FnZVJlY2VpdmVRdWV1ZSogcXVldWUpIHsgcmV0dXJuIHF1ZXVlOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFT
YW1wbGVDdXJzb3IuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVh
ZGVyL01lZGlhU2FtcGxlQ3Vyc29yLmNwcAppbmRleCA5NjJlMjExZTFiZjJjMTE4MjhiYmQ3ZTA3
NDgyNjkwOWQwYzAzMzgwLi4zNGNhYzA5NTFlM2RhZDY3YzQ2ZDQ5MzM3MDM1MWMwODNmYzY2YjNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIv
TWVkaWFTYW1wbGVDdXJzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRp
YUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUN1cnNvci5jcHAKQEAgLTE1MywxMyArMTUzLDExIEBA
IHN0ZDo6b3B0aW9uYWw8dHlwZW5hbWUgT3JkZXJlZE1hcDo6aXRlcmF0b3I+IE1lZGlhU2FtcGxl
Q3Vyc29yOjpsb2NhdGVJdGVyYXRvcihPCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAgICAgICAgIHJldHVybiBsb2NhdGVJdGVyYXRv
cihzYW1wbGVzLCBoYXNBbGxTYW1wbGVzKTsKLSAgICAgICAgfSwKLSAgICAgICAgWyZdKGNvbnN0
IGF1dG8mIG90aGVySXRlcmF0b3IpIHsKKyAgICAgICAgfSwgWyZdKGNvbnN0IGF1dG8mIG90aGVy
SXRlcmF0b3IpIC0+IHN0ZDo6b3B0aW9uYWw8SXRlcmF0b3I+IHsKICAgICAgICAgICAgIGFzc2Vy
dElzSGVsZChtX2xvY2F0b3JMb2NrKTsKICAgICAgICAgICAgIG1fbG9jYXRvciA9IG90aGVySXRl
cmF0b3ItPnNlY29uZC0+cHJlc2VudGF0aW9uVGltZSgpOwogICAgICAgICAgICAgcmV0dXJuIGxv
Y2F0ZUl0ZXJhdG9yKHNhbXBsZXMsIGhhc0FsbFNhbXBsZXMpOwotICAgICAgICB9LAotICAgICAg
ICBbJl0oY29uc3QgSXRlcmF0b3ImIGl0ZXJhdG9yKSB7CisgICAgICAgIH0sIFsmXShjb25zdCBJ
dGVyYXRvciYgaXRlcmF0b3IpIC0+IHN0ZDo6b3B0aW9uYWw8SXRlcmF0b3I+IHsKICAgICAgICAg
ICAgIHJldHVybiBpdGVyYXRvcjsKICAgICAgICAgfQogICAgICk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaAppbmRl
eCAwYjBlMjFlZWE4NmRlYjRkZjBiMmNhMDRmNTQyM2EyMmNlYjczNGU1Li44MmMxYmY4OTQxY2Q3
YWJhNjU1ODNiMTNkZjNkNWEzNWM2ZWMyYWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmgKQEAgLTMwLDYgKzMw
LDcgQEAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0F1dGhlbnRp
Y2F0b3JUcmFuc3BvcnQuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CisjaW5jbHVkZSA8
d3RmL1ZhcmlhbnQuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
dXRvbWF0aW9uL1NpbXVsYXRlZElucHV0RGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQXV0b21hdGlvbi9TaW11bGF0ZWRJbnB1dERpc3BhdGNoZXIuaAppbmRleCA4MDZiMjU0
ZTMwNzBiZTg0NGExYjIzOTEyNDFkZTY3NWM5NGNhODRkLi4zYWEyNWZkMDY3OTc4MTYyMmYxMDY2
NWM3NDdiY2Q3YzVmM2QxYjhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
dXRvbWF0aW9uL1NpbXVsYXRlZElucHV0RGlzcGF0Y2hlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0F1dG9tYXRpb24vU2ltdWxhdGVkSW5wdXREaXNwYXRjaGVyLmgKQEAgLTM0LDYg
KzM0LDcgQEAKICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUnVu
TG9vcC5oPgogI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2FmZUJy
b3dzaW5nV2FybmluZy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV0tTYWZlQnJv
d3NpbmdXYXJuaW5nLmgKaW5kZXggNjFiZTM3MTdiODA2NDZhNmZhMzAxYjIyMzU0YWY3ODlhMjU0
YTVlMC4uNDMxODljMGEzYTFlOTU5NzgwY2FiMTJhZTI2YzhiNzdlZDUzNzA3OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV0tTYWZlQnJvd3NpbmdXYXJuaW5nLmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV0tTYWZlQnJvd3NpbmdXYXJuaW5n
LmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbXBvcnQgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgog
I2ltcG9ydCA8d3RmL1JlZlB0ci5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9y
dCA8d3RmL1ZhcmlhbnQuaD4KICNpbXBvcnQgPHd0Zi9XZWFrT2JqQ1B0ci5oPgogCiAjaWYgUExB
VEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAppbmRleCAyN2JjZDAwNTQ1MDk1
OGU4MDIxMjMzMGMxZTg5NmUzYzg5MTczNGZiLi5lYWE2MzBhNDFmMjMxN2MyNjY3NmRhYmQzNmUz
M2YzYTlkNzVhMzIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaApAQCAtMzM5LDcgKzMz
OSw3IEBAIHByb3RlY3RlZDoKIAogICAgIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGVu
Y29kZUl0ZW1PdXRPZkxpbmUoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0
SXRlbSYgaXRlbSkgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OnZpc2l0
KFtdKGNvbnN0IGF1dG8mIGRpc3BsYXlMaXN0SXRlbSkgLT4gUmVmUHRyPFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlcj4geworICAgICAgICByZXR1cm4gc3RkOjp2aXNpdChbXShjb25zdCBhdXRvJiBkaXNw
bGF5TGlzdEl0ZW0pIC0+IFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IHsKICAgICAgICAg
ICAgIHVzaW5nIERpc3BsYXlMaXN0SXRlbVR5cGUgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5k
UmVmZXJlbmNlPGRlY2x0eXBlKGRpc3BsYXlMaXN0SXRlbSk+Ojp0eXBlOwogICAgICAgICAgICAg
aWYgY29uc3RleHByICghRGlzcGxheUxpc3RJdGVtVHlwZTo6aXNJbmxpbmVJdGVtKQogICAgICAg
ICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxEaXNwbGF5
TGlzdEl0ZW1UeXBlPihkaXNwbGF5TGlzdEl0ZW0pOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGQ1M2U3YWUxYTYyYzM3NDI1ZTZkYWFmODY1YjVl
MDY2ZTU3YmE3NDIuLmU0MzY5Yzc5NDZhMWFmOTRmNTM1MGVmNGU2YjMyZTYzNDQxNzJlNDIgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNyBAQAorMjAyMS0xMC0wMyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJr
aXQub3JnPgorCisgICAgICAgIEJlZ2luIG1pZ3JhdGlvbiBmcm9tIFdURjo6VmFyaWFudCB0byBz
dGQ6OnZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzMTA4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaGVyLmNwcDoKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OmFkZCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFu
dC5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1ByaXZhdGVDbGlja01lYXN1cmVtZW50Lm1tOgorICAg
ICAgICAoYWRkVmFsdWVzVG9UYWJsZSk6CisKIDIwMjEtMTAtMDMgIERhdmlkIEtpbHplciAgPGRk
a2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBXVEY6OlJldGFpblB0cjw+IGFsbG93cyBhc3Np
Z25tZW50IG9mIHR3byBwb2ludGVyIHR5cGVzIHRoYXQgYXJlIG5vdCBhc3NpZ25hYmxlCmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoZXIuY3BwIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaGVyLmNwcAppbmRleCA1OWUyMjU2MjRmYjNhNWZk
NjUyY2QyYTJhMjQ5ZmE2NTM0ZDk2MDQ1Li44NjQ4OTY4NTI1OGVmMWM5OGRjOTBiMjY1NDRjNGY0
ZWNlZGVjNDg3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNo
ZXIuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hlci5jcHAKQEAg
LTIwMCw3ICsyMDAsNyBAQCBzdHJ1Y3QgSGFzaGVyQWRkQ3VzdG9tMiB7IH07CiAKIHZvaWQgYWRk
KEhhc2hlciYgaGFzaGVyLCBjb25zdCBIYXNoZXJBZGRDdXN0b20yJikKIHsKLSAgICBhZGQoaGFz
aGVyLCB7IDEsIDIsIDMsIDQgfSk7CisgICAgYWRkKGhhc2hlciwgc3RkOjppbml0aWFsaXplcl9s
aXN0PGludD4geyAxLCAyLCAzLCA0IH0pOwogfQogCiBURVNUKFdURiwgSGFzaGVyX2N1c3RvbSkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQuY3BwIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHAKaW5kZXggNTFlY2EwNzY4
ZDJjY2UxYzlhMzI5NTU1MmQzNTAwOWZmNGZkNTZiYi4uZTQ4NWQ0MzA3YWVmZDA2ZDlmZGZiYTM4
NjRlOTMyMjQzOWIzMTZjNSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvVmFyaWFudC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFu
dC5jcHAKQEAgLTU0LDE4ICs1NCwxOCBAQCBURVNUKFdURl9WYXJpYW50LCBJbml0aWFsKQogVEVT
VChXVEZfVmFyaWFudCwgQmFzaWMpCiB7CiAgICAgVmFyaWFudDxpbnQsIGRvdWJsZT4gdmFyaWFu
dCA9IDE7Ci0gICAgRVhQRUNUX1RSVUUodmFyaWFudC5pbmRleCgpID09IDApOwotICAgIEVYUEVD
VF9UUlVFKFdURjo6Z2V0PGludD4odmFyaWFudCkgPT0gMSk7Ci0gICAgRVhQRUNUX1RSVUUoKldU
Rjo6Z2V0X2lmPGludD4odmFyaWFudCkgPT0gMSk7Ci0gICAgRVhQRUNUX1RSVUUoV1RGOjpnZXRf
aWY8ZG91YmxlPih2YXJpYW50KSA9PSBudWxscHRyKTsKKyAgICBFWFBFQ1RfRVEodmFyaWFudC5p
bmRleCgpLCAwdSk7CisgICAgRVhQRUNUX0VRKFdURjo6Z2V0PGludD4odmFyaWFudCksIDEpOwor
ICAgIEVYUEVDVF9FUSgqc3RkOjpnZXRfaWY8aW50PigmdmFyaWFudCksIDEpOworICAgIEVYUEVD
VF9FUShzdGQ6OmdldF9pZjxkb3VibGU+KCZ2YXJpYW50KSwgbnVsbHB0cik7CiAgICAgRVhQRUNU
X1RSVUUoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxpbnQ+KHZhcmlhbnQpKTsKICAgICBFWFBFQ1Rf
RkFMU0UoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxkb3VibGU+KHZhcmlhbnQpKTsKIAogICAgIHZh
cmlhbnQgPSAxLjA7Ci0gICAgRVhQRUNUX1RSVUUodmFyaWFudC5pbmRleCgpID09IDEpOwotICAg
IEVYUEVDVF9UUlVFKFdURjo6Z2V0PGRvdWJsZT4odmFyaWFudCkgPT0gMSk7Ci0gICAgRVhQRUNU
X1RSVUUoKldURjo6Z2V0X2lmPGRvdWJsZT4odmFyaWFudCkgPT0gMS4wKTsKLSAgICBFWFBFQ1Rf
VFJVRShXVEY6OmdldF9pZjxpbnQ+KHZhcmlhbnQpID09IG51bGxwdHIpOworICAgIEVYUEVDVF9F
USh2YXJpYW50LmluZGV4KCksIDF1KTsKKyAgICBFWFBFQ1RfRVEoV1RGOjpnZXQ8ZG91YmxlPih2
YXJpYW50KSwgMSk7CisgICAgRVhQRUNUX0VRKCpzdGQ6OmdldF9pZjxkb3VibGU+KCZ2YXJpYW50
KSwgMS4wKTsKKyAgICBFWFBFQ1RfRVEoc3RkOjpnZXRfaWY8aW50PigmdmFyaWFudCksIG51bGxw
dHIpOwogICAgIEVYUEVDVF9UUlVFKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPih2YXJp
YW50KSk7CiAgICAgRVhQRUNUX0ZBTFNFKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8aW50Pih2YXJp
YW50KSk7CiB9CkBAIC05NSwxNyArOTUsMTcgQEAgVEVTVChXVEZfVmFyaWFudCwgQmFzaWNWaXNp
dG9yKQogICAgIFR5cGUgdHlwZSA9IFR5cGU6Ok5vbmU7CiAKICAgICBWYXJpYW50PGludCwgZmxv
YXQsIFN0cmluZz4gdmFyaWFudCA9IDg7Ci0gICAgV1RGOjp2aXNpdChWaXNpdG9yKHR5cGUpLCB2
YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0KFZpc2l0b3IodHlwZSksIHZhcmlhbnQpOwogICAgIEVY
UEVDVF9UUlVFKFR5cGU6OkludCA9PSB0eXBlKTsKIAogCiAgICAgdmFyaWFudCA9IDEuMGY7Ci0g
ICAgV1RGOjp2aXNpdChWaXNpdG9yKHR5cGUpLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0KFZp
c2l0b3IodHlwZSksIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6OkZsb2F0ID09IHR5
cGUpOwogCiAKICAgICB2YXJpYW50ID0gImhlbGxvIjsKLSAgICBXVEY6OnZpc2l0KFZpc2l0b3Io
dHlwZSksIHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFudCk7
CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6U3RyaW5nID09IHR5cGUpOwogfQogCkBAIC0xMjgsMTEg
KzEyOCwxMSBAQCBURVNUKFdURl9WYXJpYW50LCBSZXRhaW5QdHIpCiAgICAgUmVmUHRyPFJlZkxv
Z2dlcj4gcmVmUHRyOwogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHJldGFpblB0cjsKICAgICBW
YXJpYW50PFJlZlB0cjxSZWZMb2dnZXI+LCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4gdmFyaWFudChX
VEZNb3ZlKHJlZlB0cikpOwotICAgIFdURjo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CisgICAg
c3RkOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKICAgICBFWFBFQ1RfVFJVRShUeXBlOjpSZWZQ
dHIgPT0gdHlwZSk7CiAgICAgCiAgICAgdmFyaWFudCA9IFdURk1vdmUocmV0YWluUHRyKTsKLSAg
ICBXVEY6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQodmlzaXRvciwg
dmFyaWFudCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6UmV0YWluUHRyID09IHR5cGUpOwogfQog
I2VuZGlmCkBAIC0xNTUsMTcgKzE1NSwxNyBAQCBURVNUKFdURl9WYXJpYW50LCBWaXNpdG9yVXNp
bmdNYWtlVmlzaXRvcikKICAgICApOwogCiAgICAgVmFyaWFudDxpbnQsIGZsb2F0LCBTdHJpbmc+
IHZhcmlhbnQgPSA4OwotICAgIFdURjo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CisgICAgc3Rk
Ojp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKICAgICBFWFBFQ1RfVFJVRShUeXBlOjpJbnQgPT0g
dHlwZSk7CiAKIAogICAgIHZhcmlhbnQgPSAxLjBmOwotICAgIFdURjo6dmlzaXQodmlzaXRvciwg
dmFyaWFudCk7CisgICAgc3RkOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKICAgICBFWFBFQ1Rf
VFJVRShUeXBlOjpGbG9hdCA9PSB0eXBlKTsKIAogCiAgICAgdmFyaWFudCA9ICJoZWxsbyI7Ci0g
ICAgV1RGOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0KHZpc2l0b3Is
IHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6OlN0cmluZyA9PSB0eXBlKTsKIH0KIApk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcml2YXRl
Q2xpY2tNZWFzdXJlbWVudC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQubW0KaW5kZXggN2ZiYmYyMmQ4NmFiNDQ1NzlmMTVl
Nzc4NjdkNmM5NGUyZjA5ZjE4MS4uYjQ3MGRmNzQ5MTA2Y2IwZWEyMDE2MDQ1MTg4ZTI4YjgyOWEz
NjY4NyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Q
cml2YXRlQ2xpY2tNZWFzdXJlbWVudC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1ByaXZhdGVDbGlja01lYXN1cmVtZW50Lm1tCkBAIC02NCw3ICs2NCw3IEBA
IHZvaWQgYWRkVmFsdWVzVG9UYWJsZShXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2Us
IEFTQ0lJTGl0ZXJhbCBxdWVyeSwgc3RkCiAgICAgICAgIH0sIFsmXSAoZG91YmxlIHJlYWwpIHsK
ICAgICAgICAgICAgIHJldHVybiBzdGF0ZW1lbnQtPmJpbmREb3VibGUoaSArIDEsIHJlYWwpOwog
ICAgICAgICB9KTsKLSAgICAgICAgYXV0byByZXN1bHQgPSBXVEY6OnZpc2l0KHZpc2l0b3IsIHZh
bHVlc1tpXSk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gc3RkOjp2aXNpdCh2aXNpdG9yLCB2YWx1
ZXNbaV0pOwogICAgICAgICBFWFBFQ1RfRVEocmVzdWx0LCBTUUxJVEVfT0spOwogICAgIH0KICAg
ICBFWFBFQ1RfRVEoc3RhdGVtZW50LT5zdGVwKCksIFNRTElURV9ET05FKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440027</attachid>
            <date>2021-10-03 17:15:52 -0700</date>
            <delta_ts>2021-10-04 14:12:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231086-20211004091550.patch</filename>
            <type>text/plain</type>
            <size>167853</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNDg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
MDRiMzJhMjkzNGQxZmMzZmNhZDkwNWYyMDk4ZjE0NDMxN2E5N2NkLi5jMTAyYWZiMTExNGRlYzk1
Y2NmZjJiZGZjN2MwNjYzYzk0NzlkMDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOCBAQAorMjAyMS0xMC0wMyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3
ZWJraXQub3JnPgorCisgICAgICAgIEJlZ2luIG1pZ3JhdGlvbiBmcm9tIFdURjo6VmFyaWFudCB0
byBzdGQ6OnZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzMTA4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHA6Cisg
ICAgICAgIChKU0M6OldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hwb2lu
dCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNhbGxET00pOgorICAgICAgICAqIHBhcnNlci9M
ZXhlci5jcHA6CisgICAgICAgIChKU0M6OkxleGVyPFQ+OjpwYXJzZUhleCk6CisgICAgICAgIChK
U0M6OkxleGVyPFQ+OjpwYXJzZUJpbmFyeSk6CisgICAgICAgIChKU0M6OkxleGVyPFQ+OjpwYXJz
ZU9jdGFsKToKKyAgICAgICAgKEpTQzo6TGV4ZXI8VD46OnBhcnNlRGVjaW1hbCk6CisgICAgICAg
ICogcnVudGltZS9DYWNoZVBheWxvYWQuY3BwOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6
OmRhdGEgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6OnNpemUgY29uc3QpOgor
ICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVVcGRhdGUuY3BwOgorICAgICAgICAoSlNDOjpDYWNoZVVw
ZGF0ZTo6Q2FjaGVVcGRhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxUaW1lWm9uZS5j
cHA6CisgICAgICAgIChKU0M6OlRlbXBvcmFsVGltZVpvbmU6OmNyZWF0ZUZyb21JRCk6CisgICAg
ICAgIChKU0M6OlRlbXBvcmFsVGltZVpvbmU6OmNyZWF0ZUZyb21VVENPZmZzZXQpOgorCiAyMDIx
LTEwLTAzICBEb24gT2xtc3RlYWQgIDxkb24ub2xtc3RlYWRAc29ueS5jb20+CiAKICAgICAgICAg
Tm9uLXVuaWZpZWQgYnVpbGQgZml4ZXMsIGVhcmx5IE9jdG9iZXIgMjAyMSBlZGl0aW9uCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4
IDlmMGNlOGI3ODFkYzQ4NGJiMzc3NThiNzM0MzUzZDI2NzE3OTA4OTUuLjdiMWJmZDlmNzY2M2Uw
Y2QzZTlhNjgxNDRkOWY2NGZiMTAwZmNlYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTQgQEAKKzIwMjEtMTAt
MDMgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAg
ICBCZWdpbiBtaWdyYXRpb24gZnJvbSBXVEY6OlZhcmlhbnQgdG8gc3RkOjp2YXJpYW50CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEwODYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9Gb3J3YXJk
Lmg6CisgICAgICAgICogd3RmL0hhc2hlci5oOgorICAgICAgICAoV1RGOjphZGQpOgorICAgICAg
ICAqIHd0Zi9MaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5oOgorICAgICAgICAoV1RGOjpM
aWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldDo6aXRlcmF0b3I6Om9wZXJhdG9yKiBjb25zdCk6
CisgICAgICAgICogd3RmL1ZhcmlhbnQuaDoKKyAgICAgICAgKFdURjo6Z2V0KToKKyAgICAgICAg
KFdURjo6c3dpdGNoT24pOgorICAgICAgICAoV1RGOjppbl9wbGFjZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Ol9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6PSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fdmFyaWFudF9zdG9yYWdlOjpfX2dl
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fdmFyaWFudF9zdG9yYWdlOjpfX2dldF9ycmVm
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X192YXJpYW50X3N0b3JhZ2U6Ol9fZGVzdHJveSk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fc3RvcmFnZV93cmFwcGVyOjpfX2NvbnN0cnVjdCk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fc3RvcmFnZV93cmFwcGVyOjpfX3N0b3JhZ2Vfd3Jh
cHBlcik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fc3RvcmFnZV93cmFwcGVyOjpfX2dldCk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fc3RvcmFnZV93cmFwcGVyOjpfX2dldCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fc3RvcmFnZV93cmFwcGVyOjpfX2Rlc3Ryb3kpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjxfVHlwZTo6X19zdG9yYWdl
X3dyYXBwZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjxfVHlw
ZTo6X19nZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjxfVHlw
ZTo6X19nZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3ZhcmlhbnRfYmFzZTo6
fl9fdmFyaWFudF9iYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19iYWNrdXBfc3RvcmFn
ZV9vcHM6Ol9fbW92ZV9jb25zdHJ1Y3RfZnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9f
YmFja3VwX3N0b3JhZ2Vfb3BzOjpfX2Rlc3Ryb3lfZnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6Ol9fYmFja3VwX3N0b3JhZ2U6Ol9fYmFja3VwX3N0b3JhZ2UpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpfX2JhY2t1cF9zdG9yYWdlOjpfX2Rlc3Ryb3kpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpfX2JhY2t1cF9zdG9yYWdlOjp+X19iYWNrdXBfc3RvcmFnZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6OlZhcmlhbnQ8Pjo6c3dhcCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fTk9F
WENFUFRfKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X192YXJpYW50X2FjY2Vzc29yOjpnZXQp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpnZXRfaWYpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpfX3Zpc2l0b3JfdGFibGU6Ol9fdHJhbXBvbGluZV9mdW5jKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6dmlzaXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX2FyZ19zZWxlY3Rvcik6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6Ol9fdmlzaXRfaGVscGVyMjo6X192aXNpdCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpvcGVy
YXRvciE9KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6b3BlcmF0b3I8KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6b3BlcmF0b3I+KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6b3BlcmF0b3I+
PSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Om9wZXJhdG9yPD0pOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpfX2hhc2hfdmlzaXRvcjo6b3BlcmF0b3IoKSk6IERlbGV0ZWQuCisKIDIwMjEtMTAt
MDMgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBXVEY6OlJl
dGFpblB0cjw+IGFsbG93cyBhc3NpZ25tZW50IG9mIHR3byBwb2ludGVyIHR5cGVzIHRoYXQgYXJl
IG5vdCBhc3NpZ25hYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzkyZjdhZjE1YWNhNTNjMzFmOWU1YjU5Zjhk
YTRjZTBmN2YyOWUxZC4uMWFiY2VmY2Y2OWJjMThlMjYxYzA2MmU2MTkyNDNiZGFjMWNiM2JlZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMyBAQAorMjAyMS0xMC0wMyAgQWxleCBDaHJpc3RlbnNl
biAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEJlZ2luIG1pZ3JhdGlvbiBm
cm9tIFdURjo6VmFyaWFudCB0byBzdGQ6OnZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTA4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogTW9kdWxlcy9jYWNoZS9ET01DYWNoZUVuZ2luZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6aXNvbGF0ZWRSZXNwb25zZUJv
ZHkpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OmNvcHlSZXNwb25zZUJvZHkp
OgorICAgICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5T3duZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RmV0Y2hCb2R5T3duZXI6OmxvYWRpbmdFeGNlcHRpb24gY29uc3QpOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6
aXNJREJLZXlQYXRoVmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6aXNvbGF0ZWRDb3B5KToKKyAg
ICAgICAgKFdlYkNvcmU6OmxvZ2dpbmdTdHJpbmcpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQlJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c291cmNl
T2JqZWN0U3RvcmVJZGVudGlmaWVyIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxp
emVJREJLZXlQYXRoKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250
cm9sc0hvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sc0hvc3Q6OmRpc3Bs
YXlOYW1lRm9yVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sc0hvc3Q6OnNo
b3dNZWRpYUNvbnRyb2xzQ29udGV4dE1lbnUpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJl
YW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UlRDUGVlckNvbm5l
Y3Rpb246OmFkZEljZUNhbmRpZGF0ZSk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9S
VENSdHBUcmFuc2Zvcm0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UlRDUnRwVHJhbnNmb3JtOjpp
c0F0dGFjaGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1J0cFNlbmRlckJhY2tl
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGliV2ViUlRDUnRwU2VuZGVyQmFja2VuZDo6dmlk
ZW9Tb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGliV2ViUlRDUnRwU2VuZGVyQmFja2VuZDo6
aGFzU291cmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOiBEZWxldGVk
LgorICAgICAgICAqIE1vZHVsZXMvd2VieHIvV2ViWFJGcmFtZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXZWJYUkZyYW1lOjpnZXRWaWV3ZXJQb3NlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFY
SXNvbGF0ZWRPYmplY3Q6OmludFBvaW50QXR0cmlidXRlVmFsdWUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6QVhJc29sYXRlZE9iamVjdDo6b2JqZWN0QXR0cmlidXRlVmFsdWUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZE9iamVjdDo6cmVjdEF0dHJpYnV0ZVZhbHVlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6OnZlY3RvckF0dHJpYnV0
ZVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6Om9wdGlv
blNldEF0dHJpYnV0ZVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRP
YmplY3Q6OnBhaXJBdHRyaWJ1dGVWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBWElz
b2xhdGVkT2JqZWN0Ojp1aW50NjRBdHRyaWJ1dGVWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpBWElzb2xhdGVkT2JqZWN0Ojp1cmxBdHRyaWJ1dGVWYWx1ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpBWElzb2xhdGVkT2JqZWN0OjpwYXRoQXR0cmlidXRlVmFsdWUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZE9iamVjdDo6Y29sb3JBdHRyaWJ1dGVWYWx1ZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkT2JqZWN0OjpmbG9hdEF0dHJpYnV0
ZVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6OmRvdWJs
ZUF0dHJpYnV0ZVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmpl
Y3Q6OnVuc2lnbmVkQXR0cmlidXRlVmFsdWUgY29uc3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0J1ZmZlclNvdXJjZS5oOgorICAgICAgICAoV2ViQ29yZTo6QnVmZmVyU291cmNlOjpkYXRhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJ1ZmZlclNvdXJjZTo6bGVuZ3RoIGNvbnN0KToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZUtleVBhdGhBcnJheSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01D
b252ZXJ0VW5pb24uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRXZWJHTC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9KU1ZhbHVlKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudEN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6bWV0aG9kRGV0YWlscyBjb25zdCk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5oOgorICAgICAg
ICAoV2ViQ29yZTo6SlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6b3BlcmF0b3IgSlNDOjpKU1ZhbHVl
IGNvbnN0KToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnN1bWVGb250V2VpZ2h0KToKKyAgICAgICAgKiBjc3MvdHlwZWRv
bS9DU1NVbnBhcnNlZFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1VucGFyc2VkVmFs
dWU6OnNlcmlhbGl6ZSBjb25zdCk6CisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjphZGRFdmVudExpc3RlbmVyRm9yQmluZGluZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXJGb3JC
aW5kaW5ncyk6CisgICAgICAgICogZG9tL01lc3NhZ2VFdmVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpNZXNzYWdlRXZlbnQ6Om1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAqIGVkaXRpbmcv
RWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3Nw
ZWxsaW5nKToKKyAgICAgICAgKiBlZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNsdXNp
b25SdWxlOjptYXRjaCBjb25zdCk6CisgICAgICAgICogaHRtbC9VUkxTZWFyY2hQYXJhbXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VVJMU2VhcmNoUGFyYW1zOjpjcmVhdGUpOgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJTdWJEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFRleEltYWdlU291cmNl
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJ
bWFnZVNvdXJjZUhlbHBlcik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXM6OmNhbnZhc0NvbnRleHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzOjpjYW52YXNFbGVtZW50IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhczo6c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXM6OmJ1aWxk
T2JqZWN0Rm9yQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhczo6aW5k
ZXhGb3JEYXRhKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTaGFkZXJQcm9ncmFtOjpwcm9ncmFtIGNv
bnN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcjo6a2V5UGF0aEZyb21JREJLZXlQYXRo
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudDo6ZGF0YSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXplIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRC
dWZmZXI6OmNyZWF0ZUNGRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI6OmhpbnRNZW1vcnlOb3ROZWVkZWRTb29uIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
ZW5lcmljL0tleWVkRGVjb2RlckdlbmVyaWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWRE
ZWNvZGVyR2VuZXJpYzo6RGljdGlvbmFyeTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OktleWVk
RGVjb2RlckdlbmVyaWM6OmdldFBvaW50ZXJGcm9tRGljdGlvbmFyeVN0YWNrKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnJlYWxpemVOZXh0RmFsbGJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OnNhZmVDb3B5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6cGFkZGVkU2l6ZU9mVHlwZUFuZEl0ZW1JbkJ5dGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpkaXNwbGF5TGlzdEl0ZW1UeXBlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9tb2NrL01vY2tNZWRpYURldmljZS5oOgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlhRGV2
aWNlOjplbmNvZGUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmltYWdlT3JNZWRpYUZpbGVzQ291bnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFFbGVtZW50OjpsZW5ndGhJbkJ5dGVz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhRWxlbWVudDo6aXNvbGF0ZWRDb3B5
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmREYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpmbGF0dGVuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1EYXRhOjpwcmVwYXJlRm9yVXBsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRh
Ojphc0Jsb2JVUkwgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhRWxlbWVudDo6b3BlcmF0b3I9PSBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9Gb3JtRGF0YVN0cmVhbUNGTmV0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmFkdmFuY2VDdXJyZW50U3RyZWFtKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEhUVFBCb2R5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENv
bnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6ZW5hYmxlU1NMRm9ySG9z
dCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxGb3JtRGF0YVN0cmVhbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDdXJsRm9ybURhdGFTdHJlYW06OnJlYWQpOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q3VybFNTTFZlcmlmaWVyOjpDdXJsU1NMVmVyaWZpZXIpOgorICAgICAgICAqIHN0
eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6
OnJlc29sdmVGb3JGb250UmF3KToKKwogMjAyMS0xMC0wMyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0Bh
cHBsZS5jb20+CiAKICAgICAgICAgV2ViWFJTZXNzaW9uJ3MgbV9lbnZpcm9ubWVudEJsZW5kTW9k
ZSBhbmQgbV9pbnRlcmFjdGlvbk1vZGUgYXJlIG5ldmVyIGluaXRpYWxpemVkCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4
IDg1YjEyZDY0NjljYTU5MmE4NzFkYmE5YWEyYzNhMmVjNmY0MjZlM2MuLjc2ZjQ4YzdkMjNlNmM5
NTI5NGNhNDA1ZTE4MTEwOTg4ODFiNTQwODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIw
MjEtMTAtMDMgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKwor
ICAgICAgICBCZWdpbiBtaWdyYXRpb24gZnJvbSBXVEY6OlZhcmlhbnQgdG8gc3RkOjp2YXJpYW50
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEwODYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlc29sdmVCbG9iUmVmZXJlbmNl
cyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRl
cnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVyczo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaDoK
KyAgICAgICAgKElQQzo6VmFyaWFudENvZGVyOjplbmNvZGUpOgorICAgICAgICAoSVBDOjpWYXJp
YW50Q29kZXI6OmRlY29kZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0Zvcm1EYXRhUmVmZXJl
bmNlLmg6CisgICAgICAgIChJUEM6OkZvcm1EYXRhUmVmZXJlbmNlOjplbmNvZGUgY29uc3QpOgor
ICAgICAgICAqIFBsYXRmb3JtL0lQQy9NZXNzYWdlUmVjZWl2ZVF1ZXVlTWFwLmNwcDoKKyAgICAg
ICAgKElQQzo6TWVzc2FnZVJlY2VpdmVRdWV1ZU1hcDo6Z2V0IGNvbnN0KToKKyAgICAgICAgKiBT
aGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQ3Vyc29yLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6TWVkaWFTYW1wbGVDdXJzb3I6OmxvY2F0ZUl0ZXJhdG9yIGNvbnN0KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9TaW11bGF0ZWRJbnB1dERpc3BhdGNoZXIuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV0tTYWZlQnJvd3NpbmdXYXJuaW5nLmg6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOgorCiAy
MDIxLTEwLTAzICBEb24gT2xtc3RlYWQgIDxkb24ub2xtc3RlYWRAc29ueS5jb20+CiAKICAgICAg
ICAgTm9uLXVuaWZpZWQgYnVpbGQgZml4ZXMsIGVhcmx5IE9jdG9iZXIgMjAyMSBlZGl0aW9uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAKaW5kZXggNDY3ODQ2Yzg1NDQ4MDljMDFj
NDg2ODUzODI5YTliMDdlOGM1MTRkNC4uYmFhMWMwZWFhZDJmMTNiY2FhYzkxNzYzZmRmOTQzYjgy
ODMzNWZhZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcApAQCAtNjUsOSAr
NjUsOSBAQCBpbmxpbmUgYm9vbCBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmlzVmFs
aWQoKSBjb25zdAogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjpOb2RlJiBXYXRjaHBv
aW50c09uU3RydWN0dXJlU3R1YkluZm86OmFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mIGtleSkKIHsKICAgICBpZiAoIWtleSB8fCBrZXkuY29uZGl0aW9uKCkua2lu
ZCgpICE9IFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZSkKLSAgICAgICAgcmV0dXJuICpt
X3dhdGNocG9pbnRzLmFkZChXVEY6OmluX3BsYWNlPFN0cnVjdHVyZVRyYW5zaXRpb25TdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50Piwga2V5LCAqdGhpcyk7CisgICAgICAgIHJldHVybiAq
bV93YXRjaHBvaW50cy5hZGQoc3RkOjppbl9wbGFjZV90eXBlPFN0cnVjdHVyZVRyYW5zaXRpb25T
dHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50Piwga2V5LCAqdGhpcyk7CiAgICAgQVNTRVJU
KGtleS5jb25kaXRpb24oKS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNl
KTsKLSAgICByZXR1cm4gKm1fd2F0Y2hwb2ludHMuYWRkKFdURjo6aW5fcGxhY2U8QWRhcHRpdmVW
YWx1ZVN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+LCBrZXksICp0aGlzKTsKKyAgICBy
ZXR1cm4gKm1fd2F0Y2hwb2ludHMuYWRkKHN0ZDo6aW5fcGxhY2VfdHlwZTxBZGFwdGl2ZVZhbHVl
U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4sIGtleSwgKnRoaXMpOwogfQogCiB2b2lk
IFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJlbmNlQW5kSW5zdGFs
bFdhdGNocG9pbnQoCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCmluZGV4IGI0YzhmODYwYjUxNGU2ZDc5ZGYwMWFjN2YyOTZmYzA4MWRlN2ExZjYu
LmI1YWIyMjcwMzZkZDdmYzI4MDY4MGNhYWQ5MzA5YWU4Zjc3NDg2NmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC0xMDU0OCwxMyAr
MTA1NDgsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNhbGxET00oTm9kZSogbm9k
ZSkKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIHdheSB0byBjYWxsIGZ1bmN0aW9u
cyB3aXRoIHRoZSB2ZWN0b3Igb2YgcmVnaXN0ZXJzLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMwOTkKLSAgICBWZWN0b3I8VmFyaWFudDxTcGVjdWxh
dGVDZWxsT3BlcmFuZCwgU3BlY3VsYXRlSW50MzJPcGVyYW5kLCBTcGVjdWxhdGVCb29sZWFuT3Bl
cmFuZD4sIEpTQ19ET01KSVRfU0lHTkFUVVJFX01BWF9BUkdVTUVOVFNfSU5DTFVESU5HX1RISVM+
IG9wZXJhbmRzOworICAgIHVzaW5nIE9wZXJhbmRWYXJpYW50ID0gVmFyaWFudDxTcGVjdWxhdGVD
ZWxsT3BlcmFuZCwgU3BlY3VsYXRlSW50MzJPcGVyYW5kLCBTcGVjdWxhdGVCb29sZWFuT3BlcmFu
ZD47CisgICAgVmVjdG9yPE9wZXJhbmRWYXJpYW50LCBKU0NfRE9NSklUX1NJR05BVFVSRV9NQVhf
QVJHVU1FTlRTX0lOQ0xVRElOR19USElTPiBvcGVyYW5kczsKICAgICBWZWN0b3I8R1BSUmVnLCBK
U0NfRE9NSklUX1NJR05BVFVSRV9NQVhfQVJHVU1FTlRTX0lOQ0xVRElOR19USElTPiByZWdzOwog
CiAgICAgYXV0byBhcHBlbmRDZWxsID0gWyZdKEVkZ2UmIGVkZ2UpIHsKICAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlKTsKICAgICAgICAgcmVncy5hcHBlbmQo
b3BlcmFuZC5ncHIoKSk7Ci0gICAgICAgIG9wZXJhbmRzLmFwcGVuZChXVEZNb3ZlKG9wZXJhbmQp
KTsKKyAgICAgICAgb3BlcmFuZHMuYXBwZW5kKE9wZXJhbmRWYXJpYW50KHN0ZDo6aW5fcGxhY2Vf
dHlwZTxTcGVjdWxhdGVDZWxsT3BlcmFuZD4sIFdURk1vdmUob3BlcmFuZCkpKTsKICAgICB9Owog
CiAgICAgYXV0byBhcHBlbmRTdHJpbmcgPSBbJl0oRWRnZSYgZWRnZSkgewpAQCAtMTA1NjIsMTkg
KzEwNTYzLDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDYWxsRE9NKE5vZGUqIG5v
ZGUpCiAgICAgICAgIEdQUlJlZyBncHIgPSBvcGVyYW5kLmdwcigpOwogICAgICAgICByZWdzLmFw
cGVuZChncHIpOwogICAgICAgICBzcGVjdWxhdGVTdHJpbmcoZWRnZSwgZ3ByKTsKLSAgICAgICAg
b3BlcmFuZHMuYXBwZW5kKFdURk1vdmUob3BlcmFuZCkpOworICAgICAgICBvcGVyYW5kcy5hcHBl
bmQoT3BlcmFuZFZhcmlhbnQoc3RkOjppbl9wbGFjZV90eXBlPFNwZWN1bGF0ZUNlbGxPcGVyYW5k
PiwgV1RGTW92ZShvcGVyYW5kKSkpOwogICAgIH07CiAKICAgICBhdXRvIGFwcGVuZEludDMyID0g
WyZdKEVkZ2UmIGVkZ2UpIHsKICAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIG9wZXJhbmQo
dGhpcywgZWRnZSk7CiAgICAgICAgIHJlZ3MuYXBwZW5kKG9wZXJhbmQuZ3ByKCkpOwotICAgICAg
ICBvcGVyYW5kcy5hcHBlbmQoV1RGTW92ZShvcGVyYW5kKSk7CisgICAgICAgIG9wZXJhbmRzLmFw
cGVuZChPcGVyYW5kVmFyaWFudChzdGQ6OmluX3BsYWNlX3R5cGU8U3BlY3VsYXRlSW50MzJPcGVy
YW5kPiwgV1RGTW92ZShvcGVyYW5kKSkpOwogICAgIH07CiAKICAgICBhdXRvIGFwcGVuZEJvb2xl
YW4gPSBbJl0oRWRnZSYgZWRnZSkgewogICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCBv
cGVyYW5kKHRoaXMsIGVkZ2UpOwogICAgICAgICByZWdzLmFwcGVuZChvcGVyYW5kLmdwcigpKTsK
LSAgICAgICAgb3BlcmFuZHMuYXBwZW5kKFdURk1vdmUob3BlcmFuZCkpOworICAgICAgICBvcGVy
YW5kcy5hcHBlbmQoT3BlcmFuZFZhcmlhbnQoc3RkOjppbl9wbGFjZV90eXBlPFNwZWN1bGF0ZUJv
b2xlYW5PcGVyYW5kPiwgV1RGTW92ZShvcGVyYW5kKSkpOwogICAgIH07CiAKICAgICB1bnNpZ25l
ZCBpbmRleCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xl
eGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCmluZGV4IDBm
YmUwYmM4ZjdhZmYxZGJhMjY2ZDIyODY2MTNmY2U3MTkzOTRmYTkuLjJhOGE2N2FmM2YyMmNiNWZj
MjU0MjgyNTJmMjZmZGEyMzk0ZjgzNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvTGV4ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4
ZXIuY3BwCkBAIC0xNTUwLDcgKzE1NTAsNyBAQCBBTFdBWVNfSU5MSU5FIGF1dG8gTGV4ZXI8VD46
OnBhcnNlSGV4KCkgLT4gc3RkOjpvcHRpb25hbDxOdW1iZXJQYXJzZVJlc3VsdD4KICAgICB9IHdo
aWxlIChpc0FTQ0lJSGV4RGlnaXRPclNlcGFyYXRvcihtX2N1cnJlbnQpICYmIG1heGltdW1EaWdp
dHMgPj0gMCk7CiAKICAgICBpZiAoTElLRUxZKG1heGltdW1EaWdpdHMgPj0gMCAmJiBtX2N1cnJl
bnQgIT0gJ24nKSkKLSAgICAgICAgcmV0dXJuIE51bWJlclBhcnNlUmVzdWx0IHsgaGV4VmFsdWUg
fTsKKyAgICAgICAgcmV0dXJuIE51bWJlclBhcnNlUmVzdWx0IHsgc3RhdGljX2Nhc3Q8ZG91Ymxl
PihoZXhWYWx1ZSkgfTsKIAogICAgIC8vIE5vIG1vcmUgcGxhY2UgaW4gdGhlIGhleFZhbHVlIGJ1
ZmZlci4KICAgICAvLyBUaGUgdmFsdWVzIGFyZSBzaGlmdGVkIG91dCBhbmQgcGxhY2VkIGludG8g
dGhlIG1fYnVmZmVyOCB2ZWN0b3IuCkBAIC0xNjA5LDcgKzE2MDksNyBAQCBBTFdBWVNfSU5MSU5F
IGF1dG8gTGV4ZXI8VD46OnBhcnNlQmluYXJ5KCkgLT4gc3RkOjpvcHRpb25hbDxOdW1iZXJQYXJz
ZVJlc3VsdD4KICAgICB9IHdoaWxlIChpc0FTQ0lJQmluYXJ5RGlnaXRPclNlcGFyYXRvcihtX2N1
cnJlbnQpICYmIGRpZ2l0ID49IDApOwogCiAgICAgaWYgKExJS0VMWSghaXNBU0NJSURpZ2l0T3JT
ZXBhcmF0b3IobV9jdXJyZW50KSAmJiBkaWdpdCA+PSAwICYmIG1fY3VycmVudCAhPSAnbicpKQot
ICAgICAgICByZXR1cm4gTnVtYmVyUGFyc2VSZXN1bHQgeyBiaW5hcnlWYWx1ZSB9OworICAgICAg
ICByZXR1cm4gTnVtYmVyUGFyc2VSZXN1bHQgeyBzdGF0aWNfY2FzdDxkb3VibGU+KGJpbmFyeVZh
bHVlKSB9OwogCiAgICAgZm9yIChpbnQgaSA9IG1heGltdW1EaWdpdHMgLSAxOyBpID4gZGlnaXQ7
IC0taSkKICAgICAgICAgcmVjb3JkOChkaWdpdHNbaV0pOwpAQCAtMTY2NSw3ICsxNjY1LDcgQEAg
QUxXQVlTX0lOTElORSBhdXRvIExleGVyPFQ+OjpwYXJzZU9jdGFsKCkgLT4gc3RkOjpvcHRpb25h
bDxOdW1iZXJQYXJzZVJlc3VsdD4KICAgICB9IHdoaWxlIChpc0FTQ0lJT2N0YWxEaWdpdE9yU2Vw
YXJhdG9yKG1fY3VycmVudCkgJiYgZGlnaXQgPj0gMCk7CiAKICAgICBpZiAoTElLRUxZKCFpc0FT
Q0lJRGlnaXRPclNlcGFyYXRvcihtX2N1cnJlbnQpICYmIGRpZ2l0ID49IDAgJiYgbV9jdXJyZW50
ICE9ICduJykpCi0gICAgICAgIHJldHVybiBOdW1iZXJQYXJzZVJlc3VsdCB7IG9jdGFsVmFsdWUg
fTsKKyAgICAgICAgcmV0dXJuIE51bWJlclBhcnNlUmVzdWx0IHsgc3RhdGljX2Nhc3Q8ZG91Ymxl
PihvY3RhbFZhbHVlKSB9OwogCiAgICAgZm9yIChpbnQgaSA9IG1heGltdW1EaWdpdHMgLSAxOyBp
ID4gZGlnaXQ7IC0taSkKICAgICAgICAgIHJlY29yZDgoZGlnaXRzW2ldKTsKQEAgLTE3MjQsNyAr
MTcyNCw3IEBAIEFMV0FZU19JTkxJTkUgYXV0byBMZXhlcjxUPjo6cGFyc2VEZWNpbWFsKCkgLT4g
c3RkOjpvcHRpb25hbDxOdW1iZXJQYXJzZVJlc3VsdD4KICAgICAgICAgfSB3aGlsZSAoaXNBU0NJ
SURpZ2l0T3JTZXBhcmF0b3IobV9jdXJyZW50KSAmJiBkaWdpdCA+PSAwKTsKIAogICAgICAgICBp
ZiAoZGlnaXQgPj0gMCAmJiBtX2N1cnJlbnQgIT0gJy4nICYmICFpc0FTQ0lJQWxwaGFDYXNlbGVz
c0VxdWFsKG1fY3VycmVudCwgJ2UnKSAmJiBtX2N1cnJlbnQgIT0gJ24nKQotICAgICAgICAgICAg
cmV0dXJuIE51bWJlclBhcnNlUmVzdWx0IHsgZGVjaW1hbFZhbHVlIH07CisgICAgICAgICAgICBy
ZXR1cm4gTnVtYmVyUGFyc2VSZXN1bHQgeyBzdGF0aWNfY2FzdDxkb3VibGU+KGRlY2ltYWxWYWx1
ZSkgfTsKIAogICAgICAgICBmb3IgKGludCBpID0gbWF4aW11bURpZ2l0cyAtIDE7IGkgPiBkaWdp
dDsgLS1pKQogICAgICAgICAgICAgcmVjb3JkOChkaWdpdHNbaV0pOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVQYXlsb2FkLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5jcHAKaW5kZXggNjE2OGZlZTk2NmNiNjVj
NTZjZDY2NTU1NjY2Y2Y1NGJmZGI3MjliZC4uMjdkMmI3Yjc0MWE3ZGY1ZmE2Nzg5ZDcyZTgyMjFk
ZjQ4ODNiNzU3NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVQYXlsb2FkLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZVBh
eWxvYWQuY3BwCkBAIC02MSwyMSArNjEsMjEgQEAgY29uc3QgdWludDhfdCogQ2FjaGVQYXlsb2Fk
OjpkYXRhKCkgY29uc3QKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX2RhdGEsCiAgICAgICAg
IFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7CiAgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSgpKTsKLSAgICAg
ICAgfSwKLSAgICAgICAgW10oY29uc3Qgc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90LCBWTU1h
bGxvYz4sIHNpemVfdD4mIGRhdGEpIHsKKyAgICAgICAgfSwgW10oY29uc3Qgc3RkOjpwYWlyPE1h
bGxvY1B0cjx1aW50OF90LCBWTU1hbGxvYz4sIHNpemVfdD4mIGRhdGEpIC0+IGNvbnN0IHVpbnQ4
X3QqIHsKICAgICAgICAgICAgIHJldHVybiBkYXRhLmZpcnN0LmdldCgpOwotICAgICAgICB9KTsK
KyAgICAgICAgfQorICAgICk7CiB9CiAKIHNpemVfdCBDYWNoZVBheWxvYWQ6OnNpemUoKSBjb25z
dAogewogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKLSAgICAgICAgW10oY29uc3Qg
RmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsKKyAgICAgICAgW10oY29uc3QgRmls
ZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRhdGEpIC0+IHNpemVfdCB7CiAgICAgICAgICAgICBy
ZXR1cm4gZGF0YS5zaXplKCk7Ci0gICAgICAgIH0sCi0gICAgICAgIFtdKGNvbnN0IHN0ZDo6cGFp
cjxNYWxsb2NQdHI8dWludDhfdCwgVk1NYWxsb2M+LCBzaXplX3Q+JiBkYXRhKSB7CisgICAgICAg
IH0sIFtdKGNvbnN0IHN0ZDo6cGFpcjxNYWxsb2NQdHI8dWludDhfdCwgVk1NYWxsb2M+LCBzaXpl
X3Q+JiBkYXRhKSAtPiBzaXplX3QgewogICAgICAgICAgICAgcmV0dXJuIGRhdGEuc2Vjb25kOwot
ICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVVcGRhdGUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVVcGRhdGUuY3BwCmluZGV4IDcw
ZDM2YjM4NWFiNWIyZjg5MGE5NjczMDljM2M0YWQwNzE5N2RkYTMuLjYwNzE1NDMxMDVlM2Q5NDU2
ZDNkNDI5ODFiODMxZGFhNzY2ZWM1NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhY2hlVXBkYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZVVwZGF0ZS5jcHAKQEAgLTM5LDExICszOSw4IEBAIENhY2hlVXBkYXRlOjpDYWNo
ZVVwZGF0ZShGdW5jdGlvblVwZGF0ZSYmIHVwZGF0ZSkKIH0KIAogQ2FjaGVVcGRhdGU6OkNhY2hl
VXBkYXRlKENhY2hlVXBkYXRlJiYgb3RoZXIpCisgICAgOiBtX3VwZGF0ZShXVEZNb3ZlKG90aGVy
Lm1fdXBkYXRlKSkKIHsKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxHbG9iYWxVcGRh
dGU+KG90aGVyLm1fdXBkYXRlKSkKLSAgICAgICAgbmV3ICh0aGlzKSBDYWNoZVVwZGF0ZShXVEZN
b3ZlKFdURjo6Z2V0PEdsb2JhbFVwZGF0ZT4ob3RoZXIubV91cGRhdGUpKSk7Ci0gICAgZWxzZQot
ICAgICAgICBuZXcgKHRoaXMpIENhY2hlVXBkYXRlKFdURk1vdmUoV1RGOjpnZXQ8RnVuY3Rpb25V
cGRhdGU+KG90aGVyLm1fdXBkYXRlKSkpOwogfQogCiBDYWNoZVVwZGF0ZSYgQ2FjaGVVcGRhdGU6
Om9wZXJhdG9yPShDYWNoZVVwZGF0ZSYmIG90aGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxUaW1lWm9uZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UZW1wb3JhbFRpbWVab25lLmNwcAppbmRleCA3N2RiNDA5NWQyN2MxYmYy
ZmMxNzcwY2ZlMDM5ZDU2OThhMTZiZWNjLi44M2EzOTA2YmQ1NDUwNjIyZWFlYTlhYzkwM2JiZDI4
MTVjZDA5Y2U1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1w
b3JhbFRpbWVab25lLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1w
b3JhbFRpbWVab25lLmNwcApAQCAtMzUsMTQgKzM1LDE0IEBAIGNvbnN0IENsYXNzSW5mbyBUZW1w
b3JhbFRpbWVab25lOjpzX2luZm8gPSB7ICJPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRy
LCBuCiAKIFRlbXBvcmFsVGltZVpvbmUqIFRlbXBvcmFsVGltZVpvbmU6OmNyZWF0ZUZyb21JRChW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBUaW1lWm9uZUlEIGlkZW50aWZpZXIpCiB7Ci0g
ICAgVGVtcG9yYWxUaW1lWm9uZSogZm9ybWF0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
VGVtcG9yYWxUaW1lWm9uZT4odm0uaGVhcCkpIFRlbXBvcmFsVGltZVpvbmUodm0sIHN0cnVjdHVy
ZSwgVGltZVpvbmUgeyBXVEY6OmluX3BsYWNlPDA+LCBpZGVudGlmaWVyIH0pOworICAgIFRlbXBv
cmFsVGltZVpvbmUqIGZvcm1hdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFRlbXBvcmFs
VGltZVpvbmU+KHZtLmhlYXApKSBUZW1wb3JhbFRpbWVab25lKHZtLCBzdHJ1Y3R1cmUsIFRpbWVa
b25lIHsgc3RkOjppbl9wbGFjZV9pbmRleF90PDA+KCksIGlkZW50aWZpZXIgfSk7CiAgICAgZm9y
bWF0LT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgcmV0dXJuIGZvcm1hdDsKIH0KIAogVGVtcG9y
YWxUaW1lWm9uZSogVGVtcG9yYWxUaW1lWm9uZTo6Y3JlYXRlRnJvbVVUQ09mZnNldChWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBpbnQ2NF90IHV0Y09mZnNldCkKIHsKLSAgICBUZW1wb3Jh
bFRpbWVab25lKiBmb3JtYXQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxUZW1wb3JhbFRp
bWVab25lPih2bS5oZWFwKSkgVGVtcG9yYWxUaW1lWm9uZSh2bSwgc3RydWN0dXJlLCBUaW1lWm9u
ZSB7IFdURjo6aW5fcGxhY2U8MT4sIHV0Y09mZnNldCB9KTsKKyAgICBUZW1wb3JhbFRpbWVab25l
KiBmb3JtYXQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxUZW1wb3JhbFRpbWVab25lPih2
bS5oZWFwKSkgVGVtcG9yYWxUaW1lWm9uZSh2bSwgc3RydWN0dXJlLCBUaW1lWm9uZSB7IHN0ZDo6
aW5fcGxhY2VfaW5kZXhfdDwxPigpLCB1dGNPZmZzZXQgfSk7CiAgICAgZm9ybWF0LT5maW5pc2hD
cmVhdGlvbih2bSk7CiAgICAgcmV0dXJuIGZvcm1hdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL0ZvcndhcmQuaCBiL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaAppbmRleCAzYTcyOTc0
MzdiNTlkNDUzZGJkNmU5Njg0MzQ2OTc0ZTUzYzg2Y2Y5Li5mMDBjZTM5NjA5OWVmYmNmOTBkM2Vh
MWNiMThjNDVlNDg3YTcyMjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgK
KysrIGIvU291cmNlL1dURi93dGYvRm9yd2FyZC5oCkBAIC04Myw3ICs4Myw2IEBAIHRlbXBsYXRl
PHR5cGVuYW1lPiBjbGFzcyBTdHJpbmdCdWZmZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3Mg
U3RyaW5nUGFyc2luZ0J1ZmZlcjsKIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSA9IHZvaWQ+
IGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyOwogdGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIFVuaXF1
ZVJlZjsKLXRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcyBWYXJpYW50OwogdGVtcGxhdGU8dHlw
ZW5hbWUsIHNpemVfdCA9IDAsIHR5cGVuYW1lID0gQ3Jhc2hPbk92ZXJmbG93LCBzaXplX3QgPSAx
NiwgdHlwZW5hbWUgTWFsbG9jID0gVmVjdG9yTWFsbG9jPiBjbGFzcyBWZWN0b3I7CiB0ZW1wbGF0
ZTx0eXBlbmFtZSwgdHlwZW5hbWUgPSBFbXB0eUNvdW50ZXI+IGNsYXNzIFdlYWtQdHI7CiAKQEAg
LTE1Nyw3ICsxNTYsNiBAQCB1c2luZyBXVEY6OlRleHRQb3NpdGlvbjsKIHVzaW5nIFdURjo6VGV4
dFN0cmVhbTsKIHVzaW5nIFdURjo6VVJMOwogdXNpbmcgV1RGOjpVbmlxdWVSZWY7Ci11c2luZyBX
VEY6OlZhcmlhbnQ7CiB1c2luZyBXVEY6OlZlY3RvcjsKIAogdGVtcGxhdGU8Y2xhc3MgVCwgY2xh
c3MgRT4gdXNpbmcgRXhwZWN0ZWQgPSBzdGQ6OmV4cGVyaW1lbnRhbDo6ZXhwZWN0ZWQ8VCwgRT47
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIuaCBiL1NvdXJjZS9XVEYvd3RmL0hh
c2hlci5oCmluZGV4IDhmZTliMjQwYzBlZmFjNzA4YWM4MDNmNTUwMTUwZDhjYTU5MzUyZDIuLmE3
N2E0OGE5ZWNhODhhNTE3NzJlYjQ4MTVjZThiYTAwNTk5MzM3YTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL0hhc2hlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hlci5oCkBAIC0yMSw2
ICsyMSw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPG9wdGlvbmFsPgorI2luY2x1ZGUg
PHZhcmlhbnQ+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9V
UkwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CkBAIC0xNjYsMTAgKzE2Nywx
MCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3Qg
c3RkOjpvcHRpb25hbDxUPiYgb3B0aW9uYWwpCiAgICAgICAgIGFkZChoYXNoZXIsIG9wdGlvbmFs
LnZhbHVlKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4gdm9pZCBhZGQoSGFz
aGVyJiBoYXNoZXIsIGNvbnN0IFZhcmlhbnQ8VHlwZXMuLi4+JiB2YXJpYW50KQordGVtcGxhdGU8
dHlwZW5hbWUuLi4gVHlwZXM+IHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBzdGQ6OnZh
cmlhbnQ8VHlwZXMuLi4+JiB2YXJpYW50KQogewogICAgIGFkZChoYXNoZXIsIHZhcmlhbnQuaW5k
ZXgoKSk7Ci0gICAgdmlzaXQoWyZoYXNoZXJdIChhdXRvJiB2YWx1ZSkgeworICAgIHN0ZDo6dmlz
aXQoWyZoYXNoZXJdIChhdXRvJiB2YWx1ZSkgewogICAgICAgICBhZGQoaGFzaGVyLCB2YWx1ZSk7
CiAgICAgfSwgdmFyaWFudCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9MaWtlbHlE
ZW5zZVVuc2lnbmVkSW50ZWdlclNldC5oIGIvU291cmNlL1dURi93dGYvTGlrZWx5RGVuc2VVbnNp
Z25lZEludGVnZXJTZXQuaAppbmRleCAwMjEwZjk0MjhlNmNlNDJmM2UyZGFmZDAyODA3MGMxZmNk
Yjk0Yzc3Li43NDQyYTQzMWEzODlkYWEyZDIwZjA1MjY3Y2Q5MTRlYzBlMmVhNmJhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9MaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL0xpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0LmgKQEAgLTIwNSw4
ICsyMDUsOCBAQCBwdWJsaWM6CiAgICAgICAgIEluZGV4VHlwZSBvcGVyYXRvciooKSBjb25zdAog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3VuZGVybHlpbmcs
Ci0gICAgICAgICAgICAgICAgWyZdKGNvbnN0IEJpdFZlY3Rvcjo6aXRlcmF0b3ImIGl0KSB7IHJl
dHVybiAqaXQgKyBtX3NoaWZ0OyB9LAotICAgICAgICAgICAgICAgIFtdKGNvbnN0IHR5cGVuYW1l
IFNldDo6aXRlcmF0b3ImIGl0KSB7IHJldHVybiAqaXQ7IH0pOworICAgICAgICAgICAgICAgIFsm
XShjb25zdCBCaXRWZWN0b3I6Oml0ZXJhdG9yJiBpdCkgLT4gSW5kZXhUeXBlIHsgcmV0dXJuICpp
dCArIG1fc2hpZnQ7IH0sCisgICAgICAgICAgICAgICAgW10oY29uc3QgdHlwZW5hbWUgU2V0Ojpp
dGVyYXRvciYgaXQpIC0+IEluZGV4VHlwZSB7IHJldHVybiAqaXQ7IH0pOwogICAgICAgICB9CiAK
ICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaCBiL1NvdXJjZS9XVEYvd3RmL1Zhcmlh
bnQuaAppbmRleCAzY2E3ZWJmZTlkMDQ3OTZkMGI4YTA1NjczY2NhMGZlMzE4ZTAyZDMyLi5jYmY5
MmI5ZmFmMjlmMGMzOThhMWQ2NTA0MzY0YjYzNDZmYWU4YmU5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9WYXJpYW50LmgKKysrIGIvU291cmNlL1dURi93dGYvVmFyaWFudC5oCkBAIC00Nywx
OSArNDcsMTAgQEAKICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dHlwZV90cmFpdHM+CiAj
aW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDx2YXJpYW50PgogI2luY2x1ZGUgPHd0Zi9Db21w
aWxlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAotI2lmIENPTVBJTEVSKE1T
VkMpCi0jcHJhZ21hIHdhcm5pbmcocHVzaCkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQyNDUp
Ci0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0NTIxKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6
NDUyMikKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ4MTQpCi0jZW5kaWYKLQotI2lmICFDT01Q
SUxFUihDTEFORykgfHwgV1RGX0NQUF9TVERfVkVSID49IDE0Ci0KIG5hbWVzcGFjZSBXVEYgewog
CiAjaWYgQ09NUElMRVJfU1VQUE9SVFMoRVhDRVBUSU9OUykKQEAgLTcyLDIwMTMgKzYzLDQ3IEBA
IG5hbWVzcGFjZSBXVEYgewogI2RlZmluZSBfX05PRVhDRVBUXyguLi4pCiAjZW5kaWYKIAotc3Ry
dWN0IF9faW5fcGxhY2VfcHJpdmF0ZXsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZT4KLSAgICBzdHJ1
Y3QgX190eXBlX2hvbGRlcjsKLQotICAgIHRlbXBsYXRlPHNpemVfdD4KLSAgICBzdHJ1Y3QgX192
YWx1ZV9ob2xkZXI7Ci19OwotCi0KLXN0cnVjdCBpbl9wbGFjZV90YWcgewotICAgIGluX3BsYWNl
X3RhZygpID0gZGVsZXRlOwotfTsKLQotdXNpbmcgaW5fcGxhY2VfdCA9IGluX3BsYWNlX3RhZygm
KShfX2luX3BsYWNlX3ByaXZhdGUmKTsKLQotdGVtcGxhdGUgPGNsYXNzIF9UeXBlPgotdXNpbmcg
aW5fcGxhY2VfdHlwZV90ID0gaW5fcGxhY2VfdGFnKCYpKF9faW5fcGxhY2VfcHJpdmF0ZTo6X190
eXBlX2hvbGRlcjxfVHlwZT4mKTsKLQotdGVtcGxhdGUgPHNpemVfdCBfSW5kZXg+Ci11c2luZyBp
bl9wbGFjZV9pbmRleF90ID0gaW5fcGxhY2VfdGFnKCYpKF9faW5fcGxhY2VfcHJpdmF0ZTo6X192
YWx1ZV9ob2xkZXI8X0luZGV4PiYpOwotCi1pbl9wbGFjZV90YWcgaW5fcGxhY2UoX19pbl9wbGFj
ZV9wcml2YXRlJik7Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVHlwZT4KLWluX3BsYWNlX3RhZyBpbl9w
bGFjZShfX2luX3BsYWNlX3ByaXZhdGU6Ol9fdHlwZV9ob2xkZXI8X1R5cGU+ICYpIHsKLSAgICBf
X1RIUk9XX0VYQ0VQVElPTihfX2luX3BsYWNlX3ByaXZhdGUoKSk7Ci19Ci0KLXRlbXBsYXRlIDxz
aXplX3QgX0luZGV4PgotaW5fcGxhY2VfdGFnIGluX3BsYWNlKF9faW5fcGxhY2VfcHJpdmF0ZTo6
X192YWx1ZV9ob2xkZXI8X0luZGV4PiAmKSB7Ci0gICAgX19USFJPV19FWENFUFRJT04oX19pbl9w
bGFjZV9wcml2YXRlKCkpOwotfQotCi1jbGFzcyBiYWRfdmFyaWFudF9hY2Nlc3M6IHB1YmxpYyBz
dGQ6OmxvZ2ljX2Vycm9yewotcHVibGljOgotICAgIGV4cGxpY2l0IGJhZF92YXJpYW50X2FjY2Vz
cyhjb25zdCBzdGQ6OnN0cmluZyYgd2hhdF9hcmcpOgotICAgICAgICBzdGQ6OmxvZ2ljX2Vycm9y
KHdoYXRfYXJnKQotICAgIHt9Ci0gICAgZXhwbGljaXQgYmFkX3ZhcmlhbnRfYWNjZXNzKGNvbnN0
IGNoYXIqIHdoYXRfYXJnKToKLSAgICAgICAgc3RkOjpsb2dpY19lcnJvcih3aGF0X2FyZykKLSAg
ICB7fQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLU5PX1JFVFVSTl9EVUVfVE9fQ1JBU0gg
aW5saW5lIFQgX190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3MoY29uc3QgY2hhciogd2hhdF9hcmcp
ewotICAgIF9fVEhST1dfRVhDRVBUSU9OKGJhZF92YXJpYW50X2FjY2Vzcyh3aGF0X2FyZykpCi19
Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfT2Zmc2V0LHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4u
LiBfVHlwZXM+Ci1zdHJ1Y3QgX190eXBlX2luZGV4X2hlbHBlcjsKLQotdGVtcGxhdGU8cHRyZGlm
Zl90IF9PZmZzZXQsdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9S
ZXN0Pgotc3RydWN0IF9fdHlwZV9pbmRleF9oZWxwZXI8X09mZnNldCxfVHlwZSxfSGVhZCxfUmVz
dC4uLj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3QgX192YWx1ZT0KLSAgICAgICAg
X190eXBlX2luZGV4X2hlbHBlcjxfT2Zmc2V0KzEsX1R5cGUsX1Jlc3QuLi4+OjpfX3ZhbHVlOwot
fTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUg
Li4uIF9SZXN0Pgotc3RydWN0IF9fdHlwZV9pbmRleF9oZWxwZXI8X09mZnNldCxfVHlwZSxfVHlw
ZSxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3QgX192YWx1ZT1fT2Zm
c2V0OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4K
LXN0cnVjdCBfX3R5cGVfaW5kZXh7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3QgX192
YWx1ZT0KLSAgICAgICAgX190eXBlX2luZGV4X2hlbHBlcjwwLF9UeXBlLF9UeXBlcy4uLj46Ol9f
dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Ci1zdHJ1Y3QgX19pbmRleGVkX3R5cGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5
cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2luZGV4ZWRfdHlwZTwwLF9IZWFkLF9SZXN0Li4u
PnsKLSAgICB0eXBlZGVmIF9IZWFkIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9I
ZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2luZGV4ZWRfdHlwZTwtMSxfSGVhZCxf
UmVzdC4uLj57Ci0gICAgdHlwZWRlZiB2b2lkIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRp
ZmZfdCBfSW5kZXgsdHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9f
aW5kZXhlZF90eXBlPF9JbmRleCxfSGVhZCxfUmVzdC4uLj57Ci0gICAgdHlwZWRlZiB0eXBlbmFt
ZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSBfX3R5cGU7Ci19Owot
Ci10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLl9UeXBlcz4KLXN0cnVjdCBf
X25leHRfaW5kZXh7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3QgX192YWx1ZT0KLSAg
ICAgICAgKF9JbmRleD49cHRyZGlmZl90KHNpemVvZi4uLihfVHlwZXMpLTEpKT8tMTpfSW5kZXgr
MTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jbGFzcyBWYXJpYW50Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZT4KLXN0cnVjdCB2YXJpYW50X3NpemU7Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50X3NpemU8Y29uc3QgX1R5cGU+IDogdmFyaWFu
dF9zaXplPF9UeXBlPiB7fTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IHZh
cmlhbnRfc2l6ZTx2b2xhdGlsZSBfVHlwZT4gOiB2YXJpYW50X3NpemU8X1R5cGU+IHt9OwotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgdmFyaWFudF9zaXplPGNvbnN0IHZvbGF0
aWxlIF9UeXBlPiA6IHZhcmlhbnRfc2l6ZTxfVHlwZT4ge307Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZS4uLiBfVHlwZXM+Ci1zdHJ1Y3QgdmFyaWFudF9zaXplPFZhcmlhbnQ8X1R5cGVzLi4uPj4KLSAg
ICA6IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8c2l6ZV90LCBzaXplb2YuLi4oX1R5cGVzKT4ge307
Ci0KLXRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgdmFyaWFu
dF9hbHRlcm5hdGl2ZTsKLQotdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSBfVHlwZT4K
LXVzaW5nIHZhcmlhbnRfYWx0ZXJuYXRpdmVfdD10eXBlbmFtZSB2YXJpYW50X2FsdGVybmF0aXZl
PF9JbmRleCxfVHlwZT46OnR5cGU7Ci0KLXRlbXBsYXRlIDxzaXplX3QgX0luZGV4LCB0eXBlbmFt
ZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlPF9JbmRleCwgY29uc3QgX1R5cGU+
ewotICAgIHVzaW5nIHR5cGU9c3RkOjphZGRfY29uc3RfdDx2YXJpYW50X2FsdGVybmF0aXZlX3Q8
X0luZGV4LF9UeXBlPj47Ci19OwotCi10ZW1wbGF0ZSA8c2l6ZV90IF9JbmRleCwgdHlwZW5hbWUg
X1R5cGU+Ci1zdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxfSW5kZXgsIHZvbGF0aWxlIF9UeXBl
PnsKLSAgICB1c2luZyB0eXBlPXN0ZDo6YWRkX3ZvbGF0aWxlX3Q8dmFyaWFudF9hbHRlcm5hdGl2
ZV90PF9JbmRleCxfVHlwZT4+OwotfTsKLQotdGVtcGxhdGUgPHNpemVfdCBfSW5kZXgsIHR5cGVu
YW1lIF9UeXBlPgotc3RydWN0IHZhcmlhbnRfYWx0ZXJuYXRpdmU8X0luZGV4LCB2b2xhdGlsZSBj
b25zdCBfVHlwZT57Ci0gICAgdXNpbmcgdHlwZT1zdGQ6OmFkZF92b2xhdGlsZV90PHN0ZDo6YWRk
X2NvbnN0X3Q8dmFyaWFudF9hbHRlcm5hdGl2ZV90PF9JbmRleCxfVHlwZT4+PjsKLX07Ci0KLXRl
bXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCB2YXJpYW50
X2FsdGVybmF0aXZlPF9JbmRleCxWYXJpYW50PF9UeXBlcy4uLj4+ewotICAgIHVzaW5nIHR5cGU9
dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZTsKLX07Ci0K
LWNvbnN0ZXhwciBzaXplX3QgdmFyaWFudF9ucG9zPS0xOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBf
VHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIF9UeXBlJiBnZXQoVmFyaWFudDxf
VHlwZXMuLi4+Jik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Ci1jb25zdGV4cHIgX1R5cGUgY29uc3QmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3Qm
KTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0
ZXhwciBfVHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mJik7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgY29uc3QgX1R5cGUmJiBn
ZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiYpOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0lu
ZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5
cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYpOwot
Ci10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4
cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYmIGdl
dChWYXJpYW50PF9UeXBlcy4uLj4mJik7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlw
ZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5k
ZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0JiBnZXQoCi0gICAgVmFyaWFudDxfVHlwZXMuLi4+
IGNvbnN0Jik7Ci0KLXRlbXBsYXRlIDxwdHJkaWZmX3QgX0luZGV4LCB0eXBlbmFtZS4uLiBfVHlw
ZXM+Ci1jb25zdGV4cHIgY29uc3QgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LCBfVHlw
ZXMuLi4+OjpfX3R5cGUgJiYKLWdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QgJiYpOwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHN0
ZDo6YWRkX3BvaW50ZXJfdDxfVHlwZT4gZ2V0X2lmKFZhcmlhbnQ8X1R5cGVzLi4uPiYpOwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHN0
ZDo6YWRkX3BvaW50ZXJfdDxfVHlwZSBjb25zdD4gZ2V0X2lmKFZhcmlhbnQ8X1R5cGVzLi4uPiBj
b25zdCYpOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+
Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9J
bmRleCxfVHlwZXMuLi4+OjpfX3R5cGU+IGdldF9pZihWYXJpYW50PF9UeXBlcy4uLj4mKTsKLQot
dGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHBy
IHN0ZDo6YWRkX3BvaW50ZXJfdDx0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVz
Li4uPjo6X190eXBlIGNvbnN0PiBnZXRfaWYoCi0gICAgVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0
Jik7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0
cnVjdCBfX3ZhcmlhbnRfYWNjZXNzb3I7Ci0KLXRlbXBsYXRlPHNpemVfdCBfX2NvdW50LAotICAg
ICAgICAgYm9vbCBfX2xhcmdlcl90aGFuX2NoYXI9KF9fY291bnQ+U0NIQVJfTUFYKSwKLSAgICBi
b29sIF9fbGFyZ2VyX3RoYW5fc2hvcnQ9KF9fY291bnQ+U0hSVF9NQVgpLAotICAgIGJvb2wgX19s
YXJnZXJfdGhhbl9pbnQ9KF9fY291bnQ+SU5UX01BWCk+Ci1zdHJ1Y3QgX19kaXNjcmltaW5hdG9y
X3R5cGV7Ci0gICAgdHlwZWRlZiBzaWduZWQgY2hhciBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxz
aXplX3QgX19jb3VudD4KLXN0cnVjdCBfX2Rpc2NyaW1pbmF0b3JfdHlwZTxfX2NvdW50LHRydWUs
ZmFsc2UsZmFsc2U+ewotICAgIHR5cGVkZWYgc2lnbmVkIHNob3J0IF9fdHlwZTsKLX07Ci0KLXRl
bXBsYXRlPHNpemVfdCBfX2NvdW50Pgotc3RydWN0IF9fZGlzY3JpbWluYXRvcl90eXBlPF9fY291
bnQsdHJ1ZSx0cnVlLGZhbHNlPnsKLSAgICB0eXBlZGVmIGludCBfX3R5cGU7Ci19OwotdGVtcGxh
dGU8c2l6ZV90IF9fY291bnQ+Ci1zdHJ1Y3QgX19kaXNjcmltaW5hdG9yX3R5cGU8X19jb3VudCx0
cnVlLHRydWUsdHJ1ZT57Ci0gICAgdHlwZWRlZiBzaWduZWQgbG9uZyBfX3R5cGU7Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBfX3N0b3JlZF90eXBlewotICAgIHR5cGVk
ZWYgX1R5cGUgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3Qg
X19zdG9yZWRfdHlwZTxfVHlwZSY+ewotICAgIHR5cGVkZWYgX1R5cGUqIF9fdHlwZTsKLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbGxfdHJpdmlhbGx5X2Rl
c3RydWN0aWJsZTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fYWxsX3RyaXZpYWxseV9kZXN0cnVj
dGlibGU8PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fdmFsdWU9dHJ1ZTsKLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fYWxsX3RyaXZpYWxseV9kZXN0cnVj
dGlibGU8X1R5cGU+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgX192YWx1ZT0KLSAgICAg
ICAgc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPHR5cGVuYW1lIF9fc3RvcmVkX3R5cGU8
X1R5cGU+OjpfX3R5cGU+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5
cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2FsbF90cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPF9I
ZWFkLF9SZXN0Li4uPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fdmFsdWU9Ci0gICAg
ICAgIF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X0hlYWQ+OjpfX3ZhbHVlICYmCi0gICAg
ICAgIF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X1Jlc3QuLi4+OjpfX3ZhbHVlOwotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgX1RhcmdldCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci1zdHJ1Y3Qg
X19zdG9yYWdlX25vdGhyb3dfY29uc3RydWN0aWJsZXsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBf
X3ZhbHVlPQotICAgICAgICBzdGQ6OmlzX25vdGhyb3dfY29uc3RydWN0aWJsZTxfVGFyZ2V0LCBf
QXJncy4uLj46OnZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0
cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU7Ci0KLXRlbXBsYXRlPD4K
LXN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8PiB7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIF9fdmFsdWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IF9UeXBlPgotc3RydWN0IF9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxfVHlw
ZT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBfX3ZhbHVlPQotICAgICAgICBzdGQ6Omlz
X25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPAotICAgICAgICB0eXBlbmFtZSBfX3N0b3JlZF90
eXBlPF9UeXBlPjo6X190eXBlPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVh
ZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25z
dHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9f
dmFsdWU9Ci0gICAgICAgIF9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxfSGVh
ZD46Ol9fdmFsdWUgJiYKLSAgICAgICAgX19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3Rp
YmxlPF9SZXN0Li4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgs
dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX290aGVyX3N0b3JhZ2Vfbm90aHJvd19tb3Zl
X2NvbnN0cnVjdGlibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBf
UmVzdD4KLXN0cnVjdCBfX290aGVyX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8
MCxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1ZT1fX3N0b3Jh
Z2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X1Jlc3QuLi4+OjpfX3ZhbHVlOwotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fb3Ro
ZXJfc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTwtMSxfSGVhZCxfUmVzdC4uLj57
Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1ZT0KLSAgICAgICAgX19zdG9yYWdlX25vdGhy
b3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPjo6X192YWx1ZTsKLX07Ci0KLXRl
bXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0
Pgotc3RydWN0IF9fb3RoZXJfc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxfSW5k
ZXgsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWU9Ci0gICAg
ICAgIF9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxfSGVhZD46Ol9fdmFsdWUg
JiYKLSAgICAgICAgX19vdGhlcl9zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9J
bmRleC0xLF9SZXN0Li4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5k
ZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2JhY2t1cF9zdG9yYWdlX3JlcXVpcmVk
ewotICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWU9Ci0gICAgICAgICFfX3N0b3JhZ2Vfbm90
aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8Ci0gICAgICAgIHR5cGVuYW1lIF9faW5kZXhlZF90eXBl
PF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGU+OjpfX3ZhbHVlICYmCi0gICAgICAgICFfX290aGVy
X3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X0luZGV4LF9UeXBlcy4uLj46Ol9f
dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHB0cmRpZmZfdCBfQ291bnQs
dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FueV9iYWNrdXBfc3RvcmFnZV9yZXF1aXJl
ZF9pbXBsewotICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWU9Ci0gICAgICAgIF9fYmFja3Vw
X3N0b3JhZ2VfcmVxdWlyZWQ8X0luZGV4LF9UeXBlcy4uLj46Ol9fdmFsdWUgfHwKLSAgICAgICAg
X19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWRfaW1wbDxfSW5kZXgrMSxfQ291bnQtMSxfVHlw
ZXMuLi4+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFt
ZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYW55X2JhY2t1cF9zdG9yYWdlX3JlcXVpcmVkX2ltcGw8
X0luZGV4LDAsX1R5cGVzLi4uPnsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBfX3ZhbHVlPWZhbHNl
OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQ+Ci1zdHJ1Y3QgX19hbnlfYmFja3Vw
X3N0b3JhZ2VfcmVxdWlyZWQ7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1
Y3QgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWQ8VmFyaWFudDxfVHlwZXMuLi4+ID57Ci0g
ICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1ZT0KLSAgICAgICAgX19hbnlfYmFja3VwX3N0b3Jh
Z2VfcmVxdWlyZWRfaW1wbDwwLHNpemVvZi4uLihfVHlwZXMpLF9UeXBlcy4uLj46Ol9fdmFsdWU7
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotdW5pb24gX192YXJpYW50X2Rh
dGE7Ci0KLS8vIHN0ZDo6aXNfbGl0ZXJhbF90eXBlIGlzIGRlcHJlY2F0ZWQgaW4gQysrMTcgYW5k
IHJlbW92ZWQgaW4gQysrMjAKLUFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSxib29sPXN0ZDo6aXNfbGl0ZXJhbF90eXBlPF9UeXBlPjo6
dmFsdWU+Ci1zdHJ1Y3QgX192YXJpYW50X3N0b3JhZ2V7Ci0gICAgdHlwZWRlZiBfVHlwZSBfX3R5
cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiBfX2dldChfX3R5cGUmIF9fdmFsKXsK
LSAgICAgICAgcmV0dXJuIF9fdmFsOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBl
JiYgX19nZXRfcnJlZihfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZShf
X3ZhbCk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgX1R5cGUmIF9fZ2V0KF9f
dHlwZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gX192YWw7Ci0gICAgfQotICAgIHN0
YXRpYyBjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBfX2dldF9ycmVmKF9fdHlwZSBjb25zdCYgX192
YWwpewotICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9fdmFsKTsKLSAgICB9Ci0gICAgc3RhdGlj
IHZvaWQgX19kZXN0cm95KF9fdHlwZSYpe30KLX07Ci1BTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFU
SU9OU19FTkQKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX19zdG9yYWdlX3dy
YXBwZXJ7Ci0gICAgdHlwZW5hbWUgc3RkOjphbGlnbmVkX3N0b3JhZ2U8c2l6ZW9mKF9UeXBlKSxh
bGlnbm9mKF9UeXBlKT46OnR5cGUgX19zdG9yYWdlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
Li4uIF9BcmdzPgotICAgIHN0YXRpYyBjb25zdGV4cHIgdm9pZCBfX2NvbnN0cnVjdCh2b2lkKiBf
X3AsX0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgbmV3IChfX3ApIF9UeXBlKHN0ZDo6Zm9y
d2FyZDxfQXJncz4oX19hcmdzKS4uLik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1l
IF9EdW1teSA9IF9UeXBlPgotICAgIF9fc3RvcmFnZV93cmFwcGVyKAotICAgICAgICB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2RlZmF1bHRfY29uc3RydWN0aWJsZTxfRHVtbXk+Ojp2
YWx1ZSwKLSAgICAgICAgdm9pZCAoX19zdG9yYWdlX3dyYXBwZXI6OiopKCk+Ojp0eXBlID0gbnVs
bHB0cikgewotICAgICAgX19jb25zdHJ1Y3QoJl9fc3RvcmFnZSk7Ci0gICAgfQotCi0gICAgdGVt
cGxhdGUgPHR5cGVuYW1lIF9EdW1teSA9IF9UeXBlPgotICAgIF9fc3RvcmFnZV93cmFwcGVyKAot
ICAgICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19kZWZhdWx0X2NvbnN0cnVj
dGlibGU8X0R1bW15Pjo6dmFsdWUsCi0gICAgICAgIHZvaWQgKF9fc3RvcmFnZV93cmFwcGVyOjoq
KSgpPjo6dHlwZSA9IG51bGxwdHIpIHsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZpcnN0LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBfX3N0b3JhZ2Vfd3JhcHBlcihfRmly
c3QmJiBfX2ZpcnN0LF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIF9fY29uc3RydWN0KCZf
X3N0b3JhZ2Usc3RkOjpmb3J3YXJkPF9GaXJzdD4oX19maXJzdCksc3RkOjpmb3J3YXJkPF9Bcmdz
PihfX2FyZ3MpLi4uKTsKLSAgICB9Ci0KLSAgICBfVHlwZSYgX19nZXQoKXsKLSAgICAgICAgcmV0
dXJuICpzdGF0aWNfY2FzdDxfVHlwZSo+KHN0YXRpY19jYXN0PHZvaWQqPigmX19zdG9yYWdlKSk7
Ci0gICAgfQotICAgIGNvbnN0ZXhwciBfVHlwZSBjb25zdCYgX19nZXQoKSBjb25zdHsKLSAgICAg
ICAgcmV0dXJuICpzdGF0aWNfY2FzdDxfVHlwZSBjb25zdCo+KHN0YXRpY19jYXN0PHZvaWQgY29u
c3QqPigmX19zdG9yYWdlKSk7Ci0gICAgfQotICAgIHZvaWQgX19kZXN0cm95KCl7Ci0gICAgICAg
IF9fZ2V0KCkufl9UeXBlKCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+
Ci1zdHJ1Y3QgX19zdG9yYWdlX3dyYXBwZXI8X1R5cGUmPnsKLSAgICBfVHlwZSogX19zdG9yYWdl
OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZz4KLSAgICBjb25zdGV4cHIgX19zdG9yYWdl
X3dyYXBwZXIoX0FyZyYgX19hcmcpOgotICAgICAgICBfX3N0b3JhZ2UoJl9fYXJnKXt9Ci0KLSAg
ICBfVHlwZSYgX19nZXQoKXsKLSAgICAgICAgcmV0dXJuICpfX3N0b3JhZ2U7Ci0gICAgfQotICAg
IGNvbnN0ZXhwciBfVHlwZSBjb25zdCYgX19nZXQoKSBjb25zdHsKLSAgICAgICAgcmV0dXJuICpf
X3N0b3JhZ2U7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3Qg
X192YXJpYW50X3N0b3JhZ2U8X1R5cGUsZmFsc2U+ewotICAgIHR5cGVkZWYgX19zdG9yYWdlX3dy
YXBwZXI8X1R5cGU+IF9fdHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0
KF9fdHlwZSYgX192YWwpewotICAgICAgICByZXR1cm4gX192YWwuX19nZXQoKTsKLSAgICB9Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0X3JyZWYoX190eXBlJiBfX3ZhbCl7Ci0g
ICAgICAgIHJldHVybiBzdGQ6Om1vdmUoX192YWwuX19nZXQoKSk7Ci0gICAgfQotICAgIHN0YXRp
YyBjb25zdGV4cHIgY29uc3QgX1R5cGUmIF9fZ2V0KF9fdHlwZSBjb25zdCYgX192YWwpewotICAg
ICAgICByZXR1cm4gX192YWwuX19nZXQoKTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBj
b25zdCBfVHlwZSYmIF9fZ2V0X3JyZWYoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJl
dHVybiBzdGQ6Om1vdmUoX192YWwuX19nZXQoKSk7Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIF9f
ZGVzdHJveShfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgX192YWwuX19kZXN0cm95KCk7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsYm9vbCBfX2I+Ci1zdHJ1Y3QgX192YXJp
YW50X3N0b3JhZ2U8X1R5cGUmLF9fYj57Ci0gICAgdHlwZWRlZiBfVHlwZSogX190eXBlOwotCi0g
ICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYgX19nZXQoX190eXBlJiBfX3ZhbCl7Ci0gICAgICAg
IHJldHVybiAqX192YWw7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0
X3JyZWYoX190eXBlJiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiAqX192YWw7Ci0gICAgfQotICAg
IHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0KF9fdHlwZSBjb25zdCYgX192YWwpewotICAg
ICAgICByZXR1cm4gKl9fdmFsOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiBf
X2dldF9ycmVmKF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gKl9fdmFsOwot
ICAgIH0KLSAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3koX190eXBlJil7fQotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgX1R5cGUsYm9vbCBfX2I+Ci1zdHJ1Y3QgX192YXJpYW50X3N0b3JhZ2U8X1R5
cGUmJixfX2I+ewotICAgIHR5cGVkZWYgX1R5cGUqIF9fdHlwZTsKLQotICAgIHN0YXRpYyBjb25z
dGV4cHIgX1R5cGUmJiBfX2dldChfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PF9UeXBlJiY+KCpfX3ZhbCk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5
cGUmJiBfX2dldF9ycmVmKF9fdHlwZSYgX192YWwpewotICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8X1R5cGUmJj4oKl9fdmFsKTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYm
IF9fZ2V0KF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
X1R5cGUmJj4oKl9fdmFsKTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYmIF9f
Z2V0X3JyZWYoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxfVHlwZSYmPigqX192YWwpOwotICAgIH0KLSAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3koX190
eXBlJil7fQotfTsKLQotdGVtcGxhdGU8PgotdW5pb24gX192YXJpYW50X2RhdGE8PnsKLSAgICBj
b25zdGV4cHIgX192YXJpYW50X2RhdGEoKXt9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlw
ZT4KLXVuaW9uIF9fdmFyaWFudF9kYXRhPF9UeXBlPnsKLSAgICB0eXBlbmFtZSBfX3ZhcmlhbnRf
c3RvcmFnZTxfVHlwZT46Ol9fdHlwZSBfX3ZhbDsKLSAgICBzdHJ1Y3QgX19kdW1teV90eXBle30g
X19kdW1teTsKLQotICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YSgpOl9fZHVtbXkoKXt9Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgY29uc3RleHByIF9fdmFyaWFu
dF9kYXRhKGluX3BsYWNlX2luZGV4X3Q8MD4sX0FyZ3MmJiAuLi4gX19hcmdzKToKLSAgICAgICAg
X192YWwoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKXt9Ci0KLSAgICBfVHlwZSYgX19n
ZXQoaW5fcGxhY2VfaW5kZXhfdDwwPil7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFn
ZTxfVHlwZT46Ol9fZ2V0KF9fdmFsKTsKLSAgICB9Ci0gICAgLypjb25zdGV4cHIqLyBfVHlwZSYm
IF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDwwPil7Ci0gICAgICAgIHJldHVybiBfX3Zhcmlh
bnRfc3RvcmFnZTxfVHlwZT46Ol9fZ2V0X3JyZWYoX192YWwpOwotICAgIH0KLSAgICBjb25zdGV4
cHIgY29uc3QgX1R5cGUmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pIGNvbnN0ewotICAgICAg
ICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGU+OjpfX2dldChfX3ZhbCk7Ci0gICAgfQot
ICAgIGNvbnN0ZXhwciBjb25zdCBfVHlwZSYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDww
PikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fZ2V0
X3JyZWYoX192YWwpOwotICAgIH0KLSAgICB2b2lkIF9fZGVzdHJveShpbl9wbGFjZV9pbmRleF90
PDA+KXsKLSAgICAgICAgX192YXJpYW50X3N0b3JhZ2U8X1R5cGU+OjpfX2Rlc3Ryb3koX192YWwp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotdW5pb24gX192YXJpYW50
X2RhdGE8X1R5cGUmPnsKLSAgICB0eXBlbmFtZSBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSY+Ojpf
X3R5cGUgX192YWw7Ci0gICAgc3RydWN0IF9fZHVtbXlfdHlwZXt9IF9fZHVtbXk7Ci0KLSAgICBj
b25zdGV4cHIgX192YXJpYW50X2RhdGEoKTpfX2R1bW15KCl7fQotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgLi4uIF9BcmdzPgotICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YShpbl9wbGFjZV9p
bmRleF90PDA+LF9BcmdzJiYgLi4uIF9fYXJncyk6Ci0gICAgICAgIF9fdmFsKCZzdGQ6OmZvcndh
cmQ8X0FyZ3M+KF9fYXJncykuLi4pe30KLQotICAgIF9UeXBlJiBfX2dldChpbl9wbGFjZV9pbmRl
eF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJj46Ol9fZ2V0
KF9fdmFsKTsKLSAgICB9Ci0gICAgY29uc3RleHByIF9UeXBlJiBfX2dldChpbl9wbGFjZV9pbmRl
eF90PDA+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJj46
Ol9fZ2V0KF9fdmFsKTsKLSAgICB9Ci0KLSAgICBfVHlwZSYgX19nZXRfcnJlZihpbl9wbGFjZV9p
bmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJj46Ol9f
Z2V0X3JyZWYoX192YWwpOwotICAgIH0KLSAgICBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0X3JyZWYo
aW5fcGxhY2VfaW5kZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3Rv
cmFnZTxfVHlwZSY+OjpfX2dldF9ycmVmKF9fdmFsKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBf
X2Rlc3Ryb3koaW5fcGxhY2VfaW5kZXhfdDwwPil7Ci0gICAgICAgIF9fdmFyaWFudF9zdG9yYWdl
PF9UeXBlJj46Ol9fZGVzdHJveShfX3ZhbCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgX1R5cGU+Ci11bmlvbiBfX3ZhcmlhbnRfZGF0YTxfVHlwZSYmPnsKLSAgICB0eXBlbmFtZSBf
X3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYmPjo6X190eXBlIF9fdmFsOwotICAgIHN0cnVjdCBfX2R1
bW15X3R5cGV7fSBfX2R1bW15OwotCi0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKCk6X19k
dW1teSgpe30KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Bcmc+Ci0gICAgX192YXJpYW50X2Rh
dGEoaW5fcGxhY2VfaW5kZXhfdDwwPixfQXJnJiYgX19hcmcpOgotICAgICAgICBfX3ZhbCgmX19h
cmcpe30KLQotICAgIF9UeXBlJiYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPil7Ci0gICAgICAg
IHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYmPjo6X19nZXQoX192YWwpOwotICAgIH0K
LSAgICBjb25zdGV4cHIgX1R5cGUmJiBfX2dldChpbl9wbGFjZV9pbmRleF90PDA+KSBjb25zdHsK
LSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJiY+OjpfX2dldChfX3ZhbCk7
Ci0gICAgfQotICAgIF9UeXBlJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAg
ICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJiY+OjpfX2dldF9ycmVmKF9fdmFs
KTsKLSAgICB9Ci0gICAgY29uc3RleHByIF9UeXBlJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRl
eF90PDA+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJiY+
OjpfX2dldF9ycmVmKF9fdmFsKTsKLSAgICB9Ci0gICAgdm9pZCBfX2Rlc3Ryb3koaW5fcGxhY2Vf
aW5kZXhfdDwwPil7Ci0gICAgICAgIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJiY+OjpfX2Rlc3Ry
b3koX192YWwpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1l
IC4uLiBfUmVzdD4KLXVuaW9uIF9fdmFyaWFudF9kYXRhPF9IZWFkLF9SZXN0Li4uPnsKLSAgICBf
X3ZhcmlhbnRfZGF0YTxfSGVhZD4gX19oZWFkOwotICAgIF9fdmFyaWFudF9kYXRhPF9SZXN0Li4u
PiBfX3Jlc3Q7Ci0KLSAgICBjb25zdGV4cHIgX192YXJpYW50X2RhdGEoKToKLSAgICAgICAgX19o
ZWFkKCl7fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIGNvbnN0ZXhw
ciBfX3ZhcmlhbnRfZGF0YShpbl9wbGFjZV9pbmRleF90PDA+LF9BcmdzJiYgLi4uIF9fYXJncyk6
Ci0gICAgICAgIF9faGVhZChpbl9wbGFjZTwwPixzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncyku
Li4pe30KLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAg
ICBjb25zdGV4cHIgX192YXJpYW50X2RhdGEoaW5fcGxhY2VfaW5kZXhfdDxfSW5kZXg+LF9Bcmdz
JiYgLi4uIF9fYXJncyk6Ci0gICAgICAgIF9fcmVzdChpbl9wbGFjZTxfSW5kZXgtMT4sc3RkOjpm
b3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKXt9Ci0KLSAgICBfSGVhZCYgX19nZXQoaW5fcGxhY2Vf
aW5kZXhfdDwwPil7Ci0gICAgICAgIHJldHVybiBfX2hlYWQuX19nZXQoaW5fcGxhY2U8MD4pOwot
ICAgIH0KLQotICAgIC8qY29uc3RleHByKi8gX0hlYWQmJiBfX2dldF9ycmVmKGluX3BsYWNlX2lu
ZGV4X3Q8MD4pewotICAgICAgICByZXR1cm4gX19oZWFkLl9fZ2V0X3JyZWYoaW5fcGxhY2U8MD4p
OwotICAgIH0KLSAgICAKLSAgICBjb25zdGV4cHIgY29uc3QgX0hlYWQmIF9fZ2V0KGluX3BsYWNl
X2luZGV4X3Q8MD4pIGNvbnN0ewotICAgICAgICByZXR1cm4gX19oZWFkLl9fZ2V0KGluX3BsYWNl
PDA+KTsKLSAgICB9Ci0KLSAgICBjb25zdGV4cHIgY29uc3QgX0hlYWQmJiBfX2dldF9ycmVmKGlu
X3BsYWNlX2luZGV4X3Q8MD4pIGNvbnN0ewotICAgICAgICByZXR1cm4gX19oZWFkLl9fZ2V0X3Jy
ZWYoaW5fcGxhY2U8MD4pOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4
PgotICAgIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleC0xLF9SZXN0Li4uPjo6X190eXBl
JiBfX2dldCgKLSAgICAgICAgaW5fcGxhY2VfaW5kZXhfdDxfSW5kZXg+KXsKLSAgICAgICAgcmV0
dXJuIF9fcmVzdC5fX2dldChpbl9wbGFjZTxfSW5kZXgtMT4pOwotICAgIH0KLQotICAgIHRlbXBs
YXRlPHNpemVfdCBfSW5kZXg+Ci0gICAgLypjb25zdGV4cHIqLyB0eXBlbmFtZSBfX2luZGV4ZWRf
dHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSYmIF9fZ2V0X3JyZWYoCi0gICAgICAgIGlu
X3BsYWNlX2luZGV4X3Q8X0luZGV4Pil7Ci0gICAgICAgIHJldHVybiBfX3Jlc3QuX19nZXRfcnJl
Zihpbl9wbGFjZTxfSW5kZXgtMT4pOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTxzaXplX3Qg
X0luZGV4PgotICAgIGNvbnN0ZXhwciBjb25zdCB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5k
ZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSYgX19nZXQoCi0gICAgICAgIGluX3BsYWNlX2luZGV4X3Q8
X0luZGV4PikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX3Jlc3QuX19nZXQoaW5fcGxhY2U8X0lu
ZGV4LTE+KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgotICAgIGNvbnN0
ZXhwciBjb25zdCB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9f
dHlwZSYmIF9fZ2V0X3JyZWYoCi0gICAgICAgIGluX3BsYWNlX2luZGV4X3Q8X0luZGV4PikgY29u
c3R7Ci0gICAgICAgIHJldHVybiBfX3Jlc3QuX19nZXRfcnJlZihpbl9wbGFjZTxfSW5kZXgtMT4p
OwotICAgIH0KLSAgICAKLSAgICAKLSAgICB2b2lkIF9fZGVzdHJveShpbl9wbGFjZV9pbmRleF90
PDA+KXsKLSAgICAgICAgX19oZWFkLl9fZGVzdHJveShpbl9wbGFjZTwwPik7Ci0gICAgfQotICAg
IHRlbXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0gICAgdm9pZCBfX2Rlc3Ryb3koaW5fcGxhY2VfaW5k
ZXhfdDxfSW5kZXg+KXsKLSAgICAgICAgX19yZXN0Ll9fZGVzdHJveShpbl9wbGFjZTxfSW5kZXgt
MT4pOwotICAgIH0KLX07Ci0KLQotdGVtcGxhdGU8cHRyZGlmZl90Li4uIF9JbmRpY2VzPgotc3Ry
dWN0IF9faW5kZXhfc2VxdWVuY2V7Ci0gICAgdHlwZWRlZiBfX2luZGV4X3NlcXVlbmNlPF9JbmRp
Y2VzLi4uLHNpemVvZi4uLihfSW5kaWNlcyk+IF9fbmV4dDsKLSAgICBzdGF0aWMgY29uc3RleHBy
IHNpemVfdCBfX2xlbmd0aD1zaXplb2YuLi4oX0luZGljZXMpOwotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3R5cGVfaW5kaWNlczsKLQotdGVtcGxhdGU8Pgot
c3RydWN0IF9fdHlwZV9pbmRpY2VzPD57Ci0gICAgdHlwZWRlZiBfX2luZGV4X3NlcXVlbmNlPD4g
X190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX190eXBlX2lu
ZGljZXM8X1R5cGU+ewotICAgIHR5cGVkZWYgX19pbmRleF9zZXF1ZW5jZTwwPiBfX3R5cGU7Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3Qg
X190eXBlX2luZGljZXM8X1R5cGUsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX190
eXBlX2luZGljZXM8X1Jlc3QuLi4+OjpfX3R5cGU6Ol9fbmV4dCBfX3R5cGU7Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBfVmFyaWFudD4KLXN0cnVjdCBfX3ZhcmlhbnRfaW5kaWNlczsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3ZhcmlhbnRfaW5kaWNlczxWYXJp
YW50PF9UeXBlcy4uLj4+ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX2luZGljZXM8X1R5
cGVzLi4uPjo6X190eXBlIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50
LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGljZXM8
X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19tb3ZlX2NvbnN0cnVjdF9vcF90YWJsZTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVj
dCBfX21vdmVfY29uc3RydWN0X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0lu
ZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Z1bmNfdHlwZSkoX1Zhcmlh
bnQqLF9WYXJpYW50Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAg
ICBzdGF0aWMgdm9pZCBfX21vdmVfY29uc3RydWN0X2Z1bmMoCi0gICAgICAgIF9WYXJpYW50ICog
X19saHMsX1ZhcmlhbnQmIF9fcmhzKXsKLSAgICAgICAgX19saHMtPnRlbXBsYXRlIF9fZW1wbGFj
ZV9jb25zdHJ1Y3Q8X0luZGV4PigKLSAgICAgICAgICAgIHN0ZDo6bW92ZShnZXQ8X0luZGV4Pihf
X3JocykpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgX19mdW5jX3R5cGUgX19hcHBseVtz
aXplb2YuLi4oX0luZGljZXMpXTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0
cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1jb25zdCB0eXBlbmFtZSBfX21vdmVfY29uc3RydWN0X29w
X3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6Ci1fX2Z1bmNf
dHlwZQotX19tb3ZlX2NvbnN0cnVjdF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNl
PF9JbmRpY2VzLi4uPj46Ol9fYXBwbHlbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09ewotICAg
ICAgICAmX19tb3ZlX2NvbnN0cnVjdF9mdW5jPF9JbmRpY2VzPi4uLgotICAgIH07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIF9WYXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5h
bWUgX192YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19tb3ZlX2Fz
c2lnbl9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4u
LiBfSW5kaWNlcz4KLXN0cnVjdCBfX21vdmVfYXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5k
ZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Z1
bmNfdHlwZSkoX1ZhcmlhbnQqLF9WYXJpYW50Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlm
Zl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX21vdmVfYXNzaWduX2Z1bmMoCi0gICAgICAg
IF9WYXJpYW50ICogX19saHMsX1ZhcmlhbnQmIF9fcmhzKXsKLSAgICAgICAgZ2V0PF9JbmRleD4o
Kl9fbGhzKT1zdGQ6Om1vdmUoZ2V0PF9JbmRleD4oX19yaHMpKTsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgY29uc3QgX19mdW5jX3R5cGUgX19hcHBseVtzaXplb2YuLi4oX0luZGljZXMpXTsKLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1jb25z
dCB0eXBlbmFtZSBfX21vdmVfYXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVu
Y2U8X0luZGljZXMuLi4+Pjo6Ci1fX2Z1bmNfdHlwZQotX19tb3ZlX2Fzc2lnbl9vcF90YWJsZTxf
VmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fYXBwbHlbCi0gICAgc2l6
ZW9mLi4uKF9JbmRpY2VzKV09ewotICAgICAgICAmX19tb3ZlX2Fzc2lnbl9mdW5jPF9JbmRpY2Vz
Pi4uLgotICAgIH07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LAotICAgICAgICAgdHlw
ZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5
cGU+Ci1zdHJ1Y3QgX19jb3B5X2NvbnN0cnVjdF9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX2NvcHlfY29uc3Ry
dWN0X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKLSAg
ICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Z1bmNfdHlwZSkoX1ZhcmlhbnQqLF9WYXJpYW50IGNv
bnN0Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMg
dm9pZCBfX2NvcHlfY29uc3RydWN0X2Z1bmMoCi0gICAgICAgIF9WYXJpYW50ICogX19saHMsX1Zh
cmlhbnQgY29uc3QmIF9fcmhzKXsKLSAgICAgICAgX19saHMtPnRlbXBsYXRlIF9fZW1wbGFjZV9j
b25zdHJ1Y3Q8X0luZGV4PigKLSAgICAgICAgICAgIGdldDxfSW5kZXg+KF9fcmhzKSk7Ci0gICAg
fQotCi0gICAgc3RhdGljIGNvbnN0IF9fZnVuY190eXBlIF9fYXBwbHlbc2l6ZW9mLi4uKF9JbmRp
Y2VzKV07Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9J
bmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19jb3B5X2NvbnN0cnVjdF9vcF90YWJsZTxfVmFyaWFu
dCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46OgotX19mdW5jX3R5cGUKLV9fY29weV9j
b25zdHJ1Y3Rfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+
OjpfX2FwcGx5WwotICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9fY29weV9j
b25zdHJ1Y3RfZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBf
VmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9p
bmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotc3RydWN0IF9fY29weV9hc3NpZ25fb3BfdGFibGU7
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1z
dHJ1Y3QgX19jb3B5X2Fzc2lnbl9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9J
bmRpY2VzLi4uPj57Ci0gICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19mdW5jX3R5cGUpKF9WYXJp
YW50KixfVmFyaWFudCBjb25zdCYpOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5k
ZXg+Ci0gICAgc3RhdGljIHZvaWQgX19jb3B5X2Fzc2lnbl9mdW5jKAotICAgICAgICBfVmFyaWFu
dCAqIF9fbGhzLF9WYXJpYW50IGNvbnN0JiBfX3Jocyl7Ci0gICAgICAgIGdldDxfSW5kZXg+KCpf
X2xocyk9Z2V0PF9JbmRleD4oX19yaHMpOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBfX2Z1
bmNfdHlwZSBfX2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyldOwotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9f
Y29weV9hc3NpZ25fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4u
Lj4+OjoKLV9fZnVuY190eXBlCi1fX2NvcHlfYXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5k
ZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19hcHBseVsKLSAgICBzaXplb2YuLi4oX0luZGlj
ZXMpXT17Ci0gICAgICAgICZfX2NvcHlfYXNzaWduX2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0gICAgICAgICB0eXBlbmFtZSBfSW5kaWNl
cz10eXBlbmFtZSBfX3ZhcmlhbnRfaW5kaWNlczxfVmFyaWFudD46Ol9fdHlwZT4KLXN0cnVjdCBf
X2Rlc3Ryb3lfb3BfdGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZf
dCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX19kZXN0cm95X29wX3RhYmxlPF9WYXJpYW50LF9faW5k
ZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Z1
bmNfdHlwZSkoX1ZhcmlhbnQqKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4
PgotICAgIHN0YXRpYyB2b2lkIF9fZGVzdHJveV9mdW5jKAotICAgICAgICBfVmFyaWFudCAqIF9f
c2VsZil7Ci0gICAgICAgIGlmKF9fc2VsZi0+X19pbmRleD49MCl7Ci0gICAgICAgICAgICBfX3Nl
bGYtPl9fc3RvcmFnZS5fX2Rlc3Ryb3koaW5fcGxhY2U8X0luZGV4Pik7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgX19mdW5jX3R5cGUgX19hcHBseVtzaXplb2YuLi4oX0lu
ZGljZXMpXTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4g
X0luZGljZXM+Ci1jb25zdCB0eXBlbmFtZSBfX2Rlc3Ryb3lfb3BfdGFibGU8X1ZhcmlhbnQsX19p
bmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKLV9fZnVuY190eXBlCi1fX2Rlc3Ryb3lfb3Bf
dGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2FwcGx5Wwot
ICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9fZGVzdHJveV9mdW5jPF9JbmRp
Y2VzPi4uLgotICAgIH07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LAotICAgICAgICAg
dHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+Ojpf
X3R5cGU+Ci1zdHJ1Y3QgX19zd2FwX29wX3RhYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFy
aWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9fc3dhcF9vcF90YWJsZTxfVmFy
aWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0gICAgdHlwZWRlZiB2b2lkKCog
Y29uc3QgX19mdW5jX3R5cGUpKF9WYXJpYW50JixfVmFyaWFudCYpOwotICAgIAotICAgIHRlbXBs
YXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGljIHZvaWQgX19zd2FwX2Z1bmMoCi0gICAg
ICAgIF9WYXJpYW50ICYgX19saHMsX1ZhcmlhbnQgJiBfX3Jocyl7Ci0gICAgICAgIHN3YXAoZ2V0
PF9JbmRleD4oX19saHMpLGdldDxfSW5kZXg+KF9fcmhzKSk7Ci0gICAgfQotCi0gICAgc3RhdGlj
IGNvbnN0IF9fZnVuY190eXBlIF9fYXBwbHlbc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3Qg
dHlwZW5hbWUgX19zd2FwX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGlj
ZXMuLi4+Pjo6Ci1fX2Z1bmNfdHlwZQotX19zd2FwX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhf
c2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19hcHBseVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMp
XT17Ci0gICAgICAgICZfX3N3YXBfZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1l
IF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotc3RydWN0IF9fZXF1YWxpdHlf
b3BfdGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0lu
ZGljZXM+Ci1zdHJ1Y3QgX19lcXVhbGl0eV9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVl
bmNlPF9JbmRpY2VzLi4uPj57Ci0gICAgdHlwZWRlZiBib29sKCogY29uc3QgX19jb21wYXJlX2Z1
bmNfdHlwZSkoX1ZhcmlhbnQgY29uc3QmLF9WYXJpYW50IGNvbnN0Jik7Ci0gICAgCi0gICAgdGVt
cGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgX19lcXVh
bGl0eV9jb21wYXJlX2Z1bmMoCi0gICAgICAgIF9WYXJpYW50IGNvbnN0JiBfX2xocyxfVmFyaWFu
dCBjb25zdCYgX19yaHMpewotICAgICAgICByZXR1cm4gZ2V0PF9JbmRleD4oX19saHMpPT1nZXQ8
X0luZGV4PihfX3Jocyk7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBfX2NvbXBhcmVf
ZnVuY190eXBlIF9fZXF1YWxpdHlfY29tcGFyZVtzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAg
ICAgICZfX2VxdWFsaXR5X2NvbXBhcmVfZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OwotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0
ZXhwciB0eXBlbmFtZSBfX2VxdWFsaXR5X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVu
Y2U8X0luZGljZXMuLi4+Pjo6Ci1fX2NvbXBhcmVfZnVuY190eXBlCi1fX2VxdWFsaXR5X29wX3Rh
YmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19lcXVhbGl0eV9j
b21wYXJlWwotICAgIHNpemVvZi4uLihfSW5kaWNlcyldOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBf
VmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9p
bmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotc3RydWN0IF9fbGVzc190aGFuX29wX3RhYmxlOwot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3Ry
dWN0IF9fbGVzc190aGFuX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGlj
ZXMuLi4+PnsKLSAgICB0eXBlZGVmIGJvb2woKiBjb25zdCBfX2NvbXBhcmVfZnVuY190eXBlKShf
VmFyaWFudCBjb25zdCYsX1ZhcmlhbnQgY29uc3QmKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxwdHJk
aWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBfX2xlc3NfdGhhbl9jb21w
YXJlX2Z1bmMoCi0gICAgICAgIF9WYXJpYW50IGNvbnN0JiBfX2xocyxfVmFyaWFudCBjb25zdCYg
X19yaHMpewotICAgICAgICByZXR1cm4gZ2V0PF9JbmRleD4oX19saHMpPGdldDxfSW5kZXg+KF9f
cmhzKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIF9fY29tcGFyZV9mdW5jX3R5cGUg
X19sZXNzX3RoYW5fY29tcGFyZVtzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX2xl
c3NfdGhhbl9jb21wYXJlX2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1jb25zdGV4cHIgdHlw
ZW5hbWUgX19sZXNzX3RoYW5fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5k
aWNlcy4uLj4+OjoKLV9fY29tcGFyZV9mdW5jX3R5cGUKLV9fbGVzc190aGFuX29wX3RhYmxlPF9W
YXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19sZXNzX3RoYW5fY29tcGFy
ZVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zhcmlh
bnQ+Ci1zdHJ1Y3QgX192YXJpYW50X3N0b3JhZ2VfdHlwZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
X0Rlcml2ZWQsYm9vbCBfX3RyaXZpYWxfZGVzdHJ1Y3Rvcj4KLXN0cnVjdCBfX3ZhcmlhbnRfYmFz
ZQotewotICAgIH5fX3ZhcmlhbnRfYmFzZSgpewotICAgICAgICBzdGF0aWNfY2FzdDxfRGVyaXZl
ZCo+KHRoaXMpLT5fX2Rlc3Ryb3lfc2VsZigpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIF9EZXJpdmVkPgotc3RydWN0IF9fdmFyaWFudF9iYXNlPF9EZXJpdmVkLHRydWU+ewotfTsK
LQotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBfQ3VycmVudFNlcXVlbmNl
LAotICAgICAgICAgdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBf
X2FsbF9pbmRpY2VzX2hlbHBlcjsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQscHRyZGlm
Zl90IC4uLiBfSW5kaWNlcywKLSAgICAgICAgIHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBf
UmVzdD4KLXN0cnVjdCBfX2FsbF9pbmRpY2VzX2hlbHBlcjwKLSAgICBfT2Zmc2V0LF9faW5kZXhf
c2VxdWVuY2U8X0luZGljZXMuLi4+LAotICAgIF9UeXBlLF9UeXBlLF9SZXN0Li4uPnsKLSAgICB0
eXBlZGVmIHR5cGVuYW1lIF9fYWxsX2luZGljZXNfaGVscGVyPAotICAgICAgICBfT2Zmc2V0KzEs
X19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLixfT2Zmc2V0PixfVHlwZSxfUmVzdC4uLj46Ol9f
dHlwZQotICAgICAgICBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0
eXBlbmFtZSBfQ3VycmVudFNlcXVlbmNlLAotICAgICAgICAgdHlwZW5hbWUgX1R5cGUsdHlwZW5h
bWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fYWxsX2luZGljZXNfaGVscGVy
PF9PZmZzZXQsX0N1cnJlbnRTZXF1ZW5jZSxfVHlwZSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgdHlw
ZWRlZiB0eXBlbmFtZSBfX2FsbF9pbmRpY2VzX2hlbHBlcjwKLSAgICAgICAgX09mZnNldCsxLF9D
dXJyZW50U2VxdWVuY2UsX1R5cGUsX1Jlc3QuLi4+OjpfX3R5cGUgX190eXBlOwotfTsKLQotdGVt
cGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSx0eXBlbmFt
ZSBfVHlwZT4KLXN0cnVjdCBfX2FsbF9pbmRpY2VzX2hlbHBlcjxfT2Zmc2V0LF9DdXJyZW50U2Vx
dWVuY2UsX1R5cGU+ewotICAgIHR5cGVkZWYgX0N1cnJlbnRTZXF1ZW5jZSBfX3R5cGU7Ci19Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9f
YWxsX2luZGljZXN7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2FsbF9pbmRpY2VzX2hlbHBlcjwK
LSAgICAgICAgMCxfX2luZGV4X3NlcXVlbmNlPD4sX1R5cGUsX1R5cGVzLi4uPjo6X190eXBlIF9f
dHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfU2VxdWVuY2VzPgotc3RydWN0IF9f
Y29tYmluZV9zZXF1ZW5jZXM7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCAuLi4gX0luZGljZXMxLHB0
cmRpZmZfdCAuLi4gX0luZGljZXMyPgotc3RydWN0IF9fY29tYmluZV9zZXF1ZW5jZXM8Ci0gICAg
X19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlczEuLi4+LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMy
Li4uPj57Ci0gICAgdHlwZWRlZiBfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzMS4uLixfSW5kaWNl
czIuLi4+IF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9TZXF1ZW5jZSx0eXBlbmFt
ZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19jb21iaW5lX3NlcXVlbmNlczxfU2VxdWVuY2UsX1Jlc3Qu
Li4+ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19jb21iaW5lX3NlcXVlbmNlczwKLSAgICAgICAg
X1NlcXVlbmNlLAotICAgICAgICB0eXBlbmFtZSBfX2NvbWJpbmVfc2VxdWVuY2VzPF9SZXN0Li4u
Pjo6X190eXBlPjo6X190eXBlIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9JbmRp
Y2VzPgotc3RydWN0IF9fZmlyc3RfaW5kZXg7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfRmlyc3RJ
bmRleCxwdHJkaWZmX3QgLi4uIF9SZXN0Pgotc3RydWN0IF9fZmlyc3RfaW5kZXg8X19pbmRleF9z
ZXF1ZW5jZTxfRmlyc3RJbmRleCxfUmVzdC4uLj4+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgcHRy
ZGlmZl90IF9fdmFsdWU9X0ZpcnN0SW5kZXg7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09m
ZnNldCx0eXBlbmFtZSBfQ3VycmVudFNlcXVlbmNlLAotICAgICAgICAgdHlwZW5hbWUgX1R5cGUs
dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2NvbnN0cnVjdGlibGVfbWF0Y2hlc19oZWxw
ZXI7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfT2Zmc2V0LHR5cGVuYW1lIF9TZXF1ZW5jZSx0eXBl
bmFtZSBfVHlwZT4KLXN0cnVjdCBfX2NvbnN0cnVjdGlibGVfbWF0Y2hlc19oZWxwZXI8Ci0gICAg
X09mZnNldCxfU2VxdWVuY2UsX1R5cGU+ewotICAgIHR5cGVkZWYgX1NlcXVlbmNlIF9fdHlwZTsK
LX07Ci0KLXRlbXBsYXRlPGJvb2wgX0FjY2VwdCxwdHJkaWZmX3QgX0VudHJ5Pgotc3RydWN0IF9f
c2VxdWVuY2Vfb3JfZW1wdHl7Ci0gICAgdHlwZWRlZiBfX2luZGV4X3NlcXVlbmNlPD4gX190eXBl
OwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9FbnRyeT4KLXN0cnVjdCBfX3NlcXVlbmNlX29y
X2VtcHR5PHRydWUsX0VudHJ5PnsKLSAgICB0eXBlZGVmIF9faW5kZXhfc2VxdWVuY2U8X0VudHJ5
PiBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBfQ3Vy
cmVudFNlcXVlbmNlLAotICAgICAgICAgdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgX0hlYWQsdHlw
ZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fY29uc3RydWN0aWJsZV9tYXRjaGVzX2hlbHBlcjwK
LSAgICBfT2Zmc2V0LF9DdXJyZW50U2VxdWVuY2UsX1R5cGUsX0hlYWQsX1Jlc3QuLi4+ewotICAg
IHR5cGVkZWYKLSAgICB0eXBlbmFtZSBfX2NvbnN0cnVjdGlibGVfbWF0Y2hlc19oZWxwZXI8Ci0g
ICAgICAgIF9PZmZzZXQrMSwKLSAgICAgICAgdHlwZW5hbWUgX19jb21iaW5lX3NlcXVlbmNlczwK
LSAgICAgICAgICAgIF9DdXJyZW50U2VxdWVuY2UsCi0gICAgICAgICAgICB0eXBlbmFtZSBfX3Nl
cXVlbmNlX29yX2VtcHR5PAotICAgICAgICAgICAgICAgIHN0ZDo6aXNfY29uc3RydWN0aWJsZTxf
SGVhZCxfVHlwZT46OnZhbHVlLAotICAgICAgICAgICAgICAgIF9PZmZzZXQ+OjpfX3R5cGU+Ojpf
X3R5cGUsCi0gICAgICAgIF9UeXBlLF9SZXN0Li4uPjo6X190eXBlIF9fdHlwZTsKLX07Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19jb25z
dHJ1Y3RpYmxlX21hdGNoZXN7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2NvbnN0cnVjdGlibGVf
bWF0Y2hlc19oZWxwZXI8Ci0gICAgICAgIDAsX19pbmRleF9zZXF1ZW5jZTw+LF9UeXBlLF9UeXBl
cy4uLj46Ol9fdHlwZSBfX3R5cGU7Ci19OwordXNpbmcgTW9ub3N0YXRlID0gc3RkOjptb25vc3Rh
dGU7Cit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4KK3VzaW5nIFZhcmlhbnQgPSBzdGQ6OnZh
cmlhbnQ8VHlwZXMuLi4+OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4g
X1R5cGVzPgotc3RydWN0IF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3R7Ci0gICAgdHlwZWRlZiB0
eXBlbmFtZSBfX2FsbF9pbmRpY2VzPF9UeXBlLF9UeXBlcy4uLj46Ol9fdHlwZSBfX2RpcmVjdF9t
YXRjaGVzOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hbGxfaW5kaWNlczwKLSAgICAgICAgdHlw
ZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8Ci0gICAgICAgICAgICB0eXBlbmFtZSBzdGQ6OnJlbW92
ZV9yZWZlcmVuY2U8X1R5cGU+Ojp0eXBlCi0gICAgICAgICAgICA+Ojp0eXBlLF9UeXBlcy4uLj46
Ol9fdHlwZSBfX3ZhbHVlX21hdGNoZXM7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2FsbF9pbmRp
Y2VzPAotICAgICAgICBfVHlwZSwKLSAgICAgICAgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8
Ci0gICAgICAgICAgICB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8X1R5cGVzPjo6dHlw
ZQotICAgICAgICAgICAgPjo6dHlwZS4uLj46Ol9fdHlwZSBfX3JyZWZfbWF0Y2hlczsKLQotICAg
IHR5cGVkZWYgdHlwZW5hbWUgX19jb25zdHJ1Y3RpYmxlX21hdGNoZXM8X1R5cGUsX1R5cGVzLi4u
Pjo6X190eXBlCi0gICAgX19jb25zdHJ1Y3RpYmxlczsKLQotICAgIHN0YXRpY19hc3NlcnQoCi0g
ICAgICAgIChfX2RpcmVjdF9tYXRjaGVzOjpfX2xlbmd0aD4wKSB8fAotICAgICAgICAoX192YWx1
ZV9tYXRjaGVzOjpfX2xlbmd0aD4wKSB8fAotICAgICAgICAoX19ycmVmX21hdGNoZXM6Ol9fbGVu
Z3RoPjApIHx8Ci0gICAgICAgIChfX2NvbnN0cnVjdGlibGVzOjpfX2xlbmd0aD09MSksCi0gICAg
ICAgICJGb3IgY29udmVyc2lvbiBjb25zdHJ1Y3Rpb24gb2YgdmFyaWFudHMsIGV4YWN0bHkgb25l
IHR5cGUgbXVzdCBiZSBjb25zdHJ1Y3RpYmxlIik7Ci0gICAgCi0gICAgdHlwZWRlZiB0eXBlbmFt
ZSBfX2NvbWJpbmVfc2VxdWVuY2VzPAotICAgICAgICBfX2RpcmVjdF9tYXRjaGVzLF9fdmFsdWVf
bWF0Y2hlcyxfX3JyZWZfbWF0Y2hlcywKLSAgICAgICAgX19jb25zdHJ1Y3RpYmxlcz46Ol9fdHlw
ZSBfX2FsbF9tYXRjaGVzOwotICAgIAotICAgIHN0YXRpYyBjb25zdGV4cHIgcHRyZGlmZl90IF9f
dmFsdWU9X19maXJzdF9pbmRleDxfX2FsbF9tYXRjaGVzPjo6X192YWx1ZTsKLX07Ci0KLXN0cnVj
dCBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcnsKLSAgICB0ZW1wbGF0ZTwKLSAgICAgICAgcHRy
ZGlmZl90IF9JbmRleCwKLSAgICAgICAgYm9vbCBfX2NvbnN0cnVjdF9kaXJlY3RseSwKLSAgICAg
ICAgYm9vbCBfX2luZGV4ZWRfdHlwZV9oYXNfbm90aHJvd19tb3ZlLAotICAgICAgICBib29sIF9f
b3RoZXJfdHlwZXNfaGF2ZV9ub3Rocm93X21vdmU+Ci0gICAgc3RydWN0IF9faGVscGVyOwotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0gICAgICAgICAgICAgdHlwZW5hbWUgX0lu
ZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci0gICAg
c3RydWN0IF9fb3BfdGFibGU7Ci19OwotCi10ZW1wbGF0ZTwKLSAgICBwdHJkaWZmX3QgX0luZGV4
LAotICAgIGJvb2wgX19vdGhlcl90eXBlc19oYXZlX25vdGhyb3dfbW92ZT4KLXN0cnVjdCBfX3Jl
cGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19oZWxwZXI8Ci0gICAgX0luZGV4LGZhbHNlLHRydWUs
X19vdGhlcl90eXBlc19oYXZlX25vdGhyb3dfbW92ZT57Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVmFyaWFudCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgc3RhdGljIHZvaWQgX190cmFtcG9s
aW5lKF9WYXJpYW50JiBfX3YsX0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgX192LnRlbXBs
YXRlIF9fdHdvX3N0YWdlX3JlcGxhY2U8X0luZGV4PihfX2FyZ3MuLi4pOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPAotICAgIHB0cmRpZmZfdCBfSW5kZXgsCi0gICAgYm9vbCBfX2luZGV4ZWRfdHlw
ZV9oYXNfbm90aHJvd19tb3ZlLAotICAgIGJvb2wgX19vdGhlcl90eXBlc19oYXZlX25vdGhyb3df
bW92ZT4KLXN0cnVjdCBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19oZWxwZXI8Ci0gICAg
X0luZGV4LHRydWUsX19pbmRleGVkX3R5cGVfaGFzX25vdGhyb3dfbW92ZSwKLSAgICBfX290aGVy
X3R5cGVzX2hhdmVfbm90aHJvd19tb3ZlPnsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYXJp
YW50LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBzdGF0aWMgdm9pZCBfX3RyYW1wb2xpbmUoX1Zh
cmlhbnQmIF9fdixfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICBfX3YudGVtcGxhdGUgX19k
aXJlY3RfcmVwbGFjZTxfSW5kZXg+KHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7Ci0g
ICAgfQotfTsKLQotCi10ZW1wbGF0ZTwKLSAgICBwdHJkaWZmX3QgX0luZGV4Pgotc3RydWN0IF9f
cmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX2hlbHBlcjwKLSAgICBfSW5kZXgsZmFsc2UsZmFs
c2UsdHJ1ZT57Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCx0eXBlbmFtZSAuLi4g
X0FyZ3M+Ci0gICAgc3RhdGljIHZvaWQgX190cmFtcG9saW5lKF9WYXJpYW50JiBfX3YsX0FyZ3Mm
JiAuLi4gX19hcmdzKXsKLSAgICAgICAgX192LnRlbXBsYXRlIF9fbG9jYWxfYmFja3VwX3JlcGxh
Y2U8X0luZGV4PihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPAotICAgIHB0cmRpZmZfdCBfSW5kZXg+Ci1zdHJ1Y3QgX19yZXBsYWNlX2NvbnN0
cnVjdF9oZWxwZXI6Ol9faGVscGVyPAotICAgIF9JbmRleCxmYWxzZSxmYWxzZSxmYWxzZT57Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAg
c3RhdGljIHZvaWQgX190cmFtcG9saW5lKF9WYXJpYW50JiBfX3YsX0FyZ3MmJiAuLi4gX19hcmdz
KXsKLSAgICAgICAgX192LnRlbXBsYXRlIF9fZGlyZWN0X3JlcGxhY2U8X0luZGV4PihzdGQ6OmZv
cndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX19yZXBsYWNlX2NvbnN0
cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNl
cy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fbW92ZV9mdW5jX3R5cGUpKF9WYXJp
YW50KixfVmFyaWFudCYpOwotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fY29weV9mdW5jX3R5
cGUpKF9WYXJpYW50KixfVmFyaWFudCBjb25zdCYpOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRp
ZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGljIHZvaWQgX19tb3ZlX2Fzc2lnbl9mdW5jKAotICAgICAg
ICBfVmFyaWFudCAqIF9fbGhzLF9WYXJpYW50JiBfX3Jocyl7Ci0gICAgICAgIF9fbGhzLT50ZW1w
bGF0ZSBfX3JlcGxhY2VfY29uc3RydWN0PF9JbmRleD4oc3RkOjptb3ZlKGdldDxfSW5kZXg+KF9f
cmhzKSkpOwotICAgICAgICBfX3Jocy5fX2Rlc3Ryb3lfc2VsZigpOwotICAgIH0KLQotICAgIHRl
bXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGljIHZvaWQgX19jb3B5X2Fzc2lnbl9m
dW5jKAotICAgICAgICBfVmFyaWFudCAqIF9fbGhzLF9WYXJpYW50IGNvbnN0JiBfX3Jocyl7Ci0g
ICAgICAgIF9fbGhzLT50ZW1wbGF0ZSBfX3JlcGxhY2VfY29uc3RydWN0PF9JbmRleD4oZ2V0PF9J
bmRleD4oX19yaHMpKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIGNvbnN0IF9fbW92ZV9mdW5j
X3R5cGUgX19tb3ZlX2Fzc2lnbltzaXplb2YuLi4oX0luZGljZXMpXTsKLSAgICBzdGF0aWMgY29u
c3QgX19jb3B5X2Z1bmNfdHlwZSBfX2NvcHlfYXNzaWduW3NpemVvZi4uLihfSW5kaWNlcyldOwot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4K
LWNvbnN0IHR5cGVuYW1lIF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPAot
ICAgIF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19tb3ZlX2Z1bmNf
dHlwZQotX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8Ci0gICAgX1Zhcmlh
bnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX21vdmVfYXNzaWduWwotICAgIHNp
emVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9fbW92ZV9hc3NpZ25fZnVuYzxfSW5kaWNl
cz4uLi4KLSAgICB9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4u
IF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9f
b3BfdGFibGU8Ci0gICAgX1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+Ojpf
X2NvcHlfZnVuY190eXBlCi1fX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTwK
LSAgICBfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fY29weV9hc3Np
Z25bCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09ewotICAgICAgICAmX19jb3B5X2Fzc2lnbl9m
dW5jPF9JbmRpY2VzPi4uLgotICAgIH07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgscHRy
ZGlmZl90IF9NYXNrSW5kZXgsdHlwZW5hbWUgX1N0b3JhZ2U+Ci1zdHJ1Y3QgX19iYWNrdXBfc3Rv
cmFnZV9vcHN7Ci0gICAgc3RhdGljIHZvaWQgX19tb3ZlX2NvbnN0cnVjdF9mdW5jKAotICAgICAg
ICBfU3RvcmFnZSAqIF9fZGVzdCxfU3RvcmFnZSYgX19zb3VyY2UpewotICAgICAgICBuZXcoX19k
ZXN0KSBfU3RvcmFnZSgKLSAgICAgICAgICAgIGluX3BsYWNlPF9JbmRleD4sCi0gICAgICAgICAg
ICBzdGQ6Om1vdmUoX19zb3VyY2UuX19nZXQoaW5fcGxhY2U8X0luZGV4PikpKTsKLSAgICB9Ci0g
ICAgc3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMoX1N0b3JhZ2UgKiBfX29iail7Ci0gICAgICAg
IF9fb2JqLT5fX2Rlc3Ryb3koaW5fcGxhY2U8X0luZGV4Pik7Ci0gICAgfTsKLX07Ci0KLXRlbXBs
YXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgX1N0b3JhZ2U+Ci1zdHJ1Y3QgX19iYWNrdXBf
c3RvcmFnZV9vcHM8X0luZGV4LF9JbmRleCxfU3RvcmFnZT57Ci0gICAgc3RhdGljIHZvaWQgX19t
b3ZlX2NvbnN0cnVjdF9mdW5jKF9TdG9yYWdlICosX1N0b3JhZ2UmKXsKLSAgICAgICAgX19USFJP
V19FWENFUFRJT04oc3RkOjpiYWRfYWxsb2MoKSk7Ci0gICAgfTsKLSAgICBzdGF0aWMgdm9pZCBf
X2Rlc3Ryb3lfZnVuYyhfU3RvcmFnZSAqKXsKLSAgICAgICAgX19USFJPV19FWENFUFRJT04oc3Rk
OjpiYWRfYWxsb2MoKSk7Ci0gICAgfTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfTWFza0lu
ZGV4LHR5cGVuYW1lIF9TdG9yYWdlLHR5cGVuYW1lIF9JbmRpY2VzPgotc3RydWN0IF9fYmFja3Vw
X3N0b3JhZ2Vfb3BfdGFibGU7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfTWFza0luZGV4LHR5cGVu
YW1lIF9TdG9yYWdlLHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX19iYWNrdXBfc3Rv
cmFnZV9vcF90YWJsZTwKLSAgICBfTWFza0luZGV4LF9TdG9yYWdlLF9faW5kZXhfc2VxdWVuY2U8
X0luZGljZXMuLi4+ID4KLXsKLSAgICB0eXBlZGVmIHZvaWQgKCpfX21vdmVfZnVuY190eXBlKShf
U3RvcmFnZSAqIF9fZGVzdCxfU3RvcmFnZSYgX19zb3VyY2UpOwotICAgIHR5cGVkZWYgdm9pZCAo
Kl9fZGVzdHJveV9mdW5jX3R5cGUpKF9TdG9yYWdlICogX19vYmopOwotICAgIAotICAgIHRlbXBs
YXRlPHNpemVfdCBfSW5kZXg+Ci0gICAgc3RydWN0IF9faGVscGVyewotICAgICAgICB0eXBlZGVm
IF9fYmFja3VwX3N0b3JhZ2Vfb3BzPF9JbmRleCxfTWFza0luZGV4LF9TdG9yYWdlPiBfX29wczsK
LSAgICB9OwotCi0gICAgc3RhdGljIGNvbnN0IF9fbW92ZV9mdW5jX3R5cGUgX19tb3ZlX29wc1tz
aXplb2YuLi4oX0luZGljZXMpXTsKLSAgICBzdGF0aWMgY29uc3QgX19kZXN0cm95X2Z1bmNfdHlw
ZSBfX2Rlc3Ryb3lfb3BzW3NpemVvZi4uLihfSW5kaWNlcyldOwotfTsKLQotdGVtcGxhdGU8cHRy
ZGlmZl90IF9NYXNrSW5kZXgsdHlwZW5hbWUgX1N0b3JhZ2UscHRyZGlmZl90IC4uLiBfSW5kaWNl
cz4KLWNvbnN0IHR5cGVuYW1lIF9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8Ci0gICAgX01hc2tJ
bmRleCxfU3RvcmFnZSxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiA+OjpfX21vdmVfZnVu
Y190eXBlCi1fX2JhY2t1cF9zdG9yYWdlX29wX3RhYmxlPAotICAgIF9NYXNrSW5kZXgsX1N0b3Jh
Z2UsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4gPjo6X19tb3ZlX29wc1sKLSAgICAgICAg
c2l6ZW9mLi4uKF9JbmRpY2VzKV09ewotICAgICAgICAmX19oZWxwZXI8X0luZGljZXM+OjpfX29w
czo6X19tb3ZlX2NvbnN0cnVjdF9mdW5jLi4uCi0gICAgfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90
IF9NYXNrSW5kZXgsdHlwZW5hbWUgX1N0b3JhZ2UscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNv
bnN0IHR5cGVuYW1lIF9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8Ci0gICAgX01hc2tJbmRleCxf
U3RvcmFnZSxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiA+OjpfX2Rlc3Ryb3lfZnVuY190
eXBlCi1fX2JhY2t1cF9zdG9yYWdlX29wX3RhYmxlPAotICAgIF9NYXNrSW5kZXgsX1N0b3JhZ2Us
X19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4gPjo6X19kZXN0cm95X29wc1sKLSAgICBzaXpl
b2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX2hlbHBlcjxfSW5kaWNlcz46Ol9fb3BzOjpf
X2Rlc3Ryb3lfZnVuYy4uLgotICAgIH07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlw
ZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2JhY2t1cF9zdG9yYWdlewotICAgIHR5cGVkZWYg
X192YXJpYW50X2RhdGE8X1R5cGVzLi4uPiBfX3N0b3JhZ2VfdHlwZTsKLQotICAgIHR5cGVkZWYg
X19iYWNrdXBfc3RvcmFnZV9vcF90YWJsZTwKLSAgICAgICAgX0luZGV4LF9fc3RvcmFnZV90eXBl
LHR5cGVuYW1lIF9fdHlwZV9pbmRpY2VzPF9UeXBlcy4uLj46Ol9fdHlwZT4KLSAgICBfX29wX3Rh
YmxlX3R5cGU7Ci0KLSAgICBwdHJkaWZmX3QgX19iYWNrdXBfaW5kZXg7Ci0gICAgX19zdG9yYWdl
X3R5cGUmIF9fbGl2ZV9zdG9yYWdlOwotICAgIF9fc3RvcmFnZV90eXBlIF9fYmFja3VwOwotCi0g
ICAgX19iYWNrdXBfc3RvcmFnZShwdHJkaWZmX3QgX19saXZlX2luZGV4XyxfX3N0b3JhZ2VfdHlw
ZSYgX19saXZlX3N0b3JhZ2VfKToKLSAgICAgICAgX19iYWNrdXBfaW5kZXgoX19saXZlX2luZGV4
XyksX19saXZlX3N0b3JhZ2UoX19saXZlX3N0b3JhZ2VfKXsKLSAgICAgICAgaWYoX19iYWNrdXBf
aW5kZXg+PTApewotICAgICAgICAgICAgX19vcF90YWJsZV90eXBlOjpfX21vdmVfb3BzW19fYmFj
a3VwX2luZGV4XSgKLSAgICAgICAgICAgICAgICAmX19iYWNrdXAsX19saXZlX3N0b3JhZ2UpOwot
ICAgICAgICAgICAgX19vcF90YWJsZV90eXBlOjpfX2Rlc3Ryb3lfb3BzW19fYmFja3VwX2luZGV4
XSgKLSAgICAgICAgICAgICAgICAmX19saXZlX3N0b3JhZ2UpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIHZvaWQgX19kZXN0cm95KCl7Ci0gICAgICAgIGlmKF9fYmFja3VwX2luZGV4Pj0wKQotICAg
ICAgICAgICAgX19vcF90YWJsZV90eXBlOjpfX2Rlc3Ryb3lfb3BzW19fYmFja3VwX2luZGV4XSgK
LSAgICAgICAgICAgICAgICAmX19iYWNrdXApOwotICAgICAgICBfX2JhY2t1cF9pbmRleD0tMTsK
LSAgICB9Ci0gICAgCi0gICAgfl9fYmFja3VwX3N0b3JhZ2UoKXsKLSAgICAgICAgaWYoX19iYWNr
dXBfaW5kZXg+PTApewotICAgICAgICAgICAgX19vcF90YWJsZV90eXBlOjpfX21vdmVfb3BzW19f
YmFja3VwX2luZGV4XSgKLSAgICAgICAgICAgICAgICAmX19saXZlX3N0b3JhZ2UsX19iYWNrdXAp
OwotICAgICAgICAgICAgX19kZXN0cm95KCk7Ci0gICAgICAgIH0KLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYWxsX21vdmVfY29uc3RydWN0aWJs
ZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0
IF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfSGVhZCxfUmVzdC4uLj4KK2NvbnN0ZXhwciBib29s
IGhvbGRzX2FsdGVybmF0aXZlKFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX192KSBfX05PRVhD
RVBUCiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXN0ZDo6aXNfbW92ZV9jb25z
dHJ1Y3RpYmxlPF9IZWFkPjo6dmFsdWUgJiYgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9SZXN0
Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19hbGxfbW92ZV9jb25zdHJ1
Y3RpYmxlPD46Ci0gICAgc3RkOjp0cnVlX3R5cGV7fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4u
IF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9tb3ZlX2Fzc2lnbmFibGU7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2FsbF9tb3ZlX2Fzc2lnbmFi
bGU8X0hlYWQsX1Jlc3QuLi4+Ci17Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXN0
ZDo6aXNfbW92ZV9hc3NpZ25hYmxlPF9IZWFkPjo6dmFsdWUgJiYgX19hbGxfbW92ZV9hc3NpZ25h
YmxlPF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19hbGxfbW92
ZV9hc3NpZ25hYmxlPD46Ci0gICAgc3RkOjp0cnVlX3R5cGV7fTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9jb3B5X2Fzc2lnbmFibGU7Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2FsbF9jb3B5X2Fz
c2lnbmFibGU8X0hlYWQsX1Jlc3QuLi4+Ci17Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZh
bHVlPXN0ZDo6aXNfY29weV9hc3NpZ25hYmxlPF9IZWFkPjo6dmFsdWUgJiYgX19hbGxfY29weV9h
c3NpZ25hYmxlPF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19h
bGxfY29weV9hc3NpZ25hYmxlPD46Ci0gICAgc3RkOjp0cnVlX3R5cGV7fTsKLQotbmFtZXNwYWNl
IF9fc3dhcF90ZXN0X2RldGFpbHsKLXVzaW5nIHN0ZDo6c3dhcDsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgX090aGVyPgotc3RydWN0IF9fc3dhcF9yZXN1bHR7fTsKLQotdGVtcGxhdGU8dHlwZW5hbWU+
Ci1zdGF0aWMgY2hhciBfX3Rlc3QoLi4uKTsKLXRlbXBsYXRlIDx0eXBlbmFtZSBfT3RoZXI+Ci1z
dGF0aWMgc3RkOjpwYWlyPGNoYXIsIHN0ZDo6cGFpcjxjaGFyLCBfX3N3YXBfcmVzdWx0PGRlY2x0
eXBlKAotICAgIHN3YXAoc3RkOjpkZWNsdmFsPF9PdGhlciAmPigpLHN0ZDo6ZGVjbHZhbDxfT3Ro
ZXIgJj4oKSkpPj4+Ci1fX3Rlc3QoX090aGVyICopOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
X1R5cGU+IHN0cnVjdCBfX2lzX3N3YXBwYWJsZSB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IHZhbHVlID0KLSAgICAgICAgc2l6ZW9mKF9fc3dhcF90ZXN0X2RldGFpbDo6X190ZXN0PF9UeXBl
PihudWxscHRyKSkgIT0gMTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1z
dHJ1Y3QgX19hbGxfc3dhcHBhYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFt
ZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfc3dhcHBhYmxlPF9IZWFkLF9SZXN0Li4uPgotewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1fX2lzX3N3YXBwYWJsZTxfSGVhZD46OnZh
bHVlICYmIF9fYWxsX3N3YXBwYWJsZTxfUmVzdC4uLj46OnZhbHVlOwotfTsKLQotdGVtcGxhdGU8
Pgotc3RydWN0IF9fYWxsX3N3YXBwYWJsZTw+OgotICAgIHN0ZDo6dHJ1ZV90eXBle307Ci0KLXRl
bXBsYXRlPGJvb2wgX01vdmVDb25zdHJ1Y3RpYmxlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1
Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0X2ltcGx7fTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fbm9leGNlcHRfdmFy
aWFudF9tb3ZlX2NvbnN0cnVjdF9pbXBsPHRydWUsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1ub2V4Y2VwdChfSGVhZChzdGQ6OmRlY2x2YWw8X0hlYWQm
Jj4oKSkpICYmIF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2NvbnN0cnVjdF9pbXBsPHRydWUsX1Jl
c3QuLi4+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBfX25vZXhjZXB0X3Zhcmlh
bnRfbW92ZV9jb25zdHJ1Y3RfaW1wbDx0cnVlPnsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
dmFsdWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3Qg
X19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0OgotX19ub2V4Y2VwdF92YXJpYW50X21v
dmVfY29uc3RydWN0X2ltcGw8X19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZh
bHVlLF9UeXBlcy4uLj4KLXt9OwotCi10ZW1wbGF0ZTxib29sIF9Nb3ZlQXNzaWduYWJsZSx0eXBl
bmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Fzc2lnbl9p
bXBse307Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBfSGVhZCwgdHlwZW5hbWUuLi4gX1Jlc3Q+Ci1z
dHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduX2ltcGw8dHJ1ZSwgX0hlYWQsIF9S
ZXN0Li4uPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0KLSAgICAgICAgc3Rk
Ojppc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxfSGVhZD46OnZhbHVlICYmCi0gICAgICAgIHN0
ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X0hlYWQ+Ojp2YWx1ZSAmJgotICAgICAg
ICBfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9hc3NpZ25faW1wbDx0cnVlLCBfUmVzdC4uLj46OnZh
bHVlOwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Fz
c2lnbl9pbXBsPHRydWU+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT10cnVlOwot
fTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3Zh
cmlhbnRfbW92ZV9hc3NpZ24KLSAgICA6IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Fzc2lnbl9p
bXBsPAotICAgICAgICAgIF9fYWxsX21vdmVfYXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAm
JgotICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFs
dWUsCi0gICAgICAgICAgX1R5cGVzLi4uPiB7fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9U
eXBlcz4KLXN0cnVjdCBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2FsbF9jb3B5X2NvbnN0cnVj
dGlibGU8X0hlYWQsX1Jlc3QuLi4+Ci17Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVl
PXN0ZDo6aXNfY29weV9jb25zdHJ1Y3RpYmxlPF9IZWFkPjo6dmFsdWUgJiYgX19hbGxfY29weV9j
b25zdHJ1Y3RpYmxlPF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3Qg
X19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPD46Ci0gICAgc3RkOjp0cnVlX3R5cGV7fTsKLQotdGVt
cGxhdGU8Ym9vbCBfQ29weUNvbnN0cnVjdGlibGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVj
dCBfX25vZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbHt9OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19ub2V4Y2Vw
dF92YXJpYW50X2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8dHJ1ZSxfSGVhZCxfUmVzdC4uLj57
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPW5vZXhjZXB0KF9IZWFkKHN0ZDo6ZGVj
bHZhbDxfSGVhZCBjb25zdCY+KCkpKSAmJiBfX25vZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29weV9j
b25zdHJ1Y3RfaW1wbDx0cnVlLF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1z
dHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8dHJ1ZT57
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXRydWU7Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9jb25zdF9jb3B5
X2NvbnN0cnVjdDoKLV9fbm9leGNlcHRfdmFyaWFudF9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBs
PF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxfVHlwZXMuLi4+Ci17
fTsKLQotdGVtcGxhdGU8Ym9vbCBfQ29weU5vbl9Db25zdHJ1Y3RpYmxlLHR5cGVuYW1lIC4uLiBf
VHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVj
dF9pbXBse307Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4K
LXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbm9uX2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8
dHJ1ZSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPW5v
ZXhjZXB0KF9IZWFkKHN0ZDo6ZGVjbHZhbDxfSGVhZCY+KCkpKSAmJiBfX25vZXhjZXB0X3Zhcmlh
bnRfbm9uX2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8dHJ1ZSxfUmVzdC4uLj46OnZhbHVlOwot
fTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9ub25fY29uc3RfY29w
eV9jb25zdHJ1Y3RfaW1wbDx0cnVlPnsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9
dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19ub2V4
Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVjdDoKLV9fbm9leGNlcHRfdmFyaWFu
dF9ub25fY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDxfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8
X1R5cGVzLi4uPjo6dmFsdWUsX1R5cGVzLi4uPgote307Ci0KLXRlbXBsYXRlPGJvb2wgX1N3YXBw
YWJsZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9zd2Fw
X2ltcGx7fTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIF9IZWFkLCB0eXBlbmFtZS4uLiBfUmVzdD4K
LXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfc3dhcF9pbXBsPHRydWUsIF9IZWFkLCBfUmVzdC4u
Lj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZSA9Ci0gICAgICAgIG5vZXhjZXB0
KHN3YXAoc3RkOjpkZWNsdmFsPF9IZWFkJj4oKSxzdGQ6OmRlY2x2YWw8X0hlYWQmPigpKSkgJiYK
LSAgICAgICAgX19ub2V4Y2VwdF92YXJpYW50X3N3YXBfaW1wbDx0cnVlLCBfUmVzdC4uLj46OnZh
bHVlOwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9zd2FwX2lt
cGw8dHJ1ZT57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXRydWU7Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9z
d2FwOgotX19ub2V4Y2VwdF92YXJpYW50X3N3YXBfaW1wbDxfX2FsbF9zd2FwcGFibGU8X1R5cGVz
Li4uPjo6dmFsdWUsX1R5cGVzLi4uPgote307Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Ci1jbGFzcyBWYXJpYW50OgotICAgICAgICBwcml2YXRlIF9fdmFyaWFudF9iYXNlPAotICAg
IFZhcmlhbnQ8X1R5cGVzLi4uPixfX2FsbF90cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPF9UeXBlcy4u
Lj46Ol9fdmFsdWU+Ci17Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgdHlwZWRl
ZiBfX3ZhcmlhbnRfYmFzZTxWYXJpYW50PF9UeXBlcy4uLj4sX19hbGxfdHJpdmlhbGx5X2Rlc3Ry
dWN0aWJsZTxfVHlwZXMuLi4+OjpfX3ZhbHVlPiBfX2Jhc2VfdHlwZTsKLSAgICBmcmllbmQgX19i
YXNlX3R5cGU7Ci0gICAgZnJpZW5kIHN0cnVjdCBfX2NvcHlfY29uc3RydWN0X29wX3RhYmxlPFZh
cmlhbnQ+OwotICAgIGZyaWVuZCBzdHJ1Y3QgX19jb3B5X2Fzc2lnbl9vcF90YWJsZTxWYXJpYW50
PjsKLSAgICBmcmllbmQgc3RydWN0IF9fbW92ZV9jb25zdHJ1Y3Rfb3BfdGFibGU8VmFyaWFudD47
Ci0gICAgZnJpZW5kIHN0cnVjdCBfX21vdmVfYXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+OwotICAg
IGZyaWVuZCBzdHJ1Y3QgX19kZXN0cm95X29wX3RhYmxlPFZhcmlhbnQ+OwotICAgIAotICAgIHRl
bXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlczI+Ci0gICAgZnJpZW5k
IHN0cnVjdCBfX3ZhcmlhbnRfYWNjZXNzb3I7Ci0KLSAgICBmcmllbmQgc3RydWN0IF9fcmVwbGFj
ZV9jb25zdHJ1Y3RfaGVscGVyOwotCi0gICAgdHlwZWRlZiBfX3ZhcmlhbnRfZGF0YTxfVHlwZXMu
Li4+IF9fc3RvcmFnZV90eXBlOwotICAgIF9fc3RvcmFnZV90eXBlIF9fc3RvcmFnZTsKLSAgICB0
eXBlbmFtZSBfX2Rpc2NyaW1pbmF0b3JfdHlwZTxzaXplb2YgLi4uIChfVHlwZXMpPjo6X190eXBl
IF9faW5kZXg7Ci0KLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfQXJn
cz4KLSAgICBzaXplX3QgX19lbXBsYWNlX2NvbnN0cnVjdChfQXJncyYmIC4uLiBfX2FyZ3Mpewot
ICAgICAgICBuZXcoJl9fc3RvcmFnZSkgX19zdG9yYWdlX3R5cGUoCi0gICAgICAgICAgICBpbl9w
bGFjZTxfSW5kZXg+LHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7Ci0gICAgICAgIHJl
dHVybiAgX0luZGV4OwotICAgIH0KLSAgICAKLSAgICB2b2lkIF9fZGVzdHJveV9zZWxmKCl7Ci0g
ICAgICAgIGlmKHZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgX19kZXN0cm95X29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W2luZGV4KCldKHRo
aXMpOwotICAgICAgICBfX2luZGV4PS0xOwotICAgIH0KLSAgICAKLSAgICBwdHJkaWZmX3QgX19t
b3ZlX2NvbnN0cnVjdChWYXJpYW50JiBfX290aGVyKXsKLSAgICAgICAgcHRyZGlmZl90IGNvbnN0
IF9fb3RoZXJfaW5kZXg9X19vdGhlci5pbmRleCgpOwotICAgICAgICBpZihfX290aGVyX2luZGV4
PT0tMSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgX19tb3ZlX2NvbnN0cnVjdF9v
cF90YWJsZTxWYXJpYW50Pjo6X19hcHBseVtfX290aGVyX2luZGV4XSh0aGlzLF9fb3RoZXIpOwot
ICAgICAgICBfX290aGVyLl9fZGVzdHJveV9zZWxmKCk7Ci0gICAgICAgIHJldHVybiBfX290aGVy
X2luZGV4OwotICAgIH0KLQotICAgIHB0cmRpZmZfdCBfX2NvcHlfY29uc3RydWN0KFZhcmlhbnQg
Y29uc3QmIF9fb3RoZXIpewotICAgICAgICBwdHJkaWZmX3QgY29uc3QgX19vdGhlcl9pbmRleD1f
X290aGVyLmluZGV4KCk7Ci0gICAgICAgIGlmKF9fb3RoZXJfaW5kZXg9PS0xKQotICAgICAgICAg
ICAgcmV0dXJuIC0xOwotICAgICAgICBfX2NvcHlfY29uc3RydWN0X29wX3RhYmxlPFZhcmlhbnQ+
OjpfX2FwcGx5W19fb3RoZXJfaW5kZXhdKHRoaXMsX19vdGhlcik7Ci0gICAgICAgIHJldHVybiBf
X290aGVyX2luZGV4OwotICAgIH0KLQotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5h
bWUgLi4uIF9BcmdzPgotICAgIHZvaWQgX19yZXBsYWNlX2NvbnN0cnVjdChfQXJncyYmIC4uLiBf
X2FyZ3MpewotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxf
VHlwZXMuLi4+OjpfX3R5cGUgX190aGlzX3R5cGU7Ci0gICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1
Y3RfaGVscGVyOjpfX2hlbHBlcjwKLSAgICAgICAgICAgIF9JbmRleCwKLSAgICAgICAgICAgIF9f
c3RvcmFnZV9ub3Rocm93X2NvbnN0cnVjdGlibGU8X190aGlzX3R5cGUsX0FyZ3MuLi4+OjpfX3Zh
bHVlIHx8Ci0gICAgICAgICAgICAoc2l6ZW9mLi4uKF9UeXBlcyk9PTEpLAotICAgICAgICAgICAg
X19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9fdGhpc190eXBlPjo6X192YWx1
ZSwKLSAgICAgICAgICAgIF9fb3RoZXJfc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJs
ZTwKLSAgICAgICAgICAgICAgICBfSW5kZXgsX1R5cGVzLi4uPjo6X192YWx1ZQotICAgICAgICAg
ICAgPjo6X190cmFtcG9saW5lKCp0aGlzLHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7
Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+
Ci0gICAgdm9pZCBfX3R3b19zdGFnZV9yZXBsYWNlKF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9f
dHlwZSBfX3R5cGU7Ci0gICAgICAgIF9fdmFyaWFudF9kYXRhPF9fdHlwZT4gX19sb2NhbCgKLSAg
ICAgICAgICAgIGluX3BsYWNlPDA+LHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7Ci0g
ICAgICAgIF9fZGVzdHJveV9zZWxmKCk7Ci0gICAgICAgIF9fZW1wbGFjZV9jb25zdHJ1Y3Q8X0lu
ZGV4PigKLSAgICAgICAgICAgIHN0ZDo6bW92ZShfX2xvY2FsLl9fZ2V0KGluX3BsYWNlPDA+KSkp
OwotICAgICAgICBfX2luZGV4PV9JbmRleDsKLSAgICAgICAgX19sb2NhbC5fX2Rlc3Ryb3koaW5f
cGxhY2U8MD4pOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUg
Li4uIF9BcmdzPgotICAgIHZvaWQgX19sb2NhbF9iYWNrdXBfcmVwbGFjZShfQXJncyYmIC4uLiBf
X2FyZ3MpewotICAgICAgICBfX2JhY2t1cF9zdG9yYWdlPF9JbmRleCxfVHlwZXMuLi4+IF9fYmFj
a3VwKF9faW5kZXgsX19zdG9yYWdlKTsKLSAgICAgICAgX19lbXBsYWNlX2NvbnN0cnVjdDxfSW5k
ZXg+KHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7Ci0gICAgICAgIF9faW5kZXg9X0lu
ZGV4OwotICAgICAgICBfX2JhY2t1cC5fX2Rlc3Ryb3koKTsKLSAgICB9Ci0gICAgCi0gICAgdGVt
cGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgdm9pZCBfX2RpcmVj
dF9yZXBsYWNlKF9BcmdzJiYgLi4uIF9fYXJncykgewotICAgICAgICBfX2Rlc3Ryb3lfc2VsZigp
OwotICAgICAgICBfX2VtcGxhY2VfY29uc3RydWN0PF9JbmRleD4oc3RkOjpmb3J3YXJkPF9Bcmdz
PihfX2FyZ3MpLi4uKTsKLSAgICAgICAgX19pbmRleD1fSW5kZXg7Ci0gICAgfQotCi0gICAgc3Ry
dWN0IF9fcHJpdmF0ZV90eXBle307Ci0KLXB1YmxpYzoKLSAgICBjb25zdGV4cHIgVmFyaWFudCgp
Ci0gICAgICAgIF9fTk9FWENFUFRfKG5vZXhjZXB0KHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPDAs
X1R5cGVzLi4uPjo6X190eXBlKCkpKToKLSAgICAgICAgX19zdG9yYWdlKGluX3BsYWNlPDA+KSwK
LSAgICAgICAgX19pbmRleCgwKQotICAgIHt9Ci0KLSAgICBjb25zdGV4cHIgVmFyaWFudCh0eXBl
bmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+
Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSYmIF9fb3RoZXIpCi0gICAgX19O
T0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0PF9UeXBlcy4uLj46OnZh
bHVlKToKLSAgICAgICAgX19pbmRleChfX21vdmVfY29uc3RydWN0KF9fb3RoZXIpKQotICAgIHt9
Ci0KLSAgICBjb25zdGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPCFfX2Fs
bF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsVmFyaWFudCxfX3ByaXZhdGVf
dHlwZT46OnR5cGUmJiBfX290aGVyKT1kZWxldGU7Ci0gICAgCi0gICAgY29uc3RleHByIFZhcmlh
bnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5
cGVzLi4uPjo6dmFsdWUsVmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5cGUmIF9fb3RoZXIpCi0g
ICAgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVj
dDxfVHlwZXMuLi4+Ojp2YWx1ZSk6Ci0gICAgICAgIF9faW5kZXgoX19jb3B5X2NvbnN0cnVjdChf
X290aGVyKSkKLSAgICB7fQotCi0gICAgY29uc3RleHByIFZhcmlhbnQodHlwZW5hbWUgc3RkOjpj
b25kaXRpb25hbDwhX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLFZh
cmlhbnQsX19wcml2YXRlX3R5cGU+Ojp0eXBlJiBfX290aGVyKT1kZWxldGU7Ci0KLSAgICBjb25z
dGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9fYWxsX2NvcHlfY29uc3Ry
dWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSBj
b25zdCYgX19vdGhlcikKLSAgICBfX05PRVhDRVBUXyhfX25vZXhjZXB0X3ZhcmlhbnRfY29uc3Rf
Y29weV9jb25zdHJ1Y3Q8X1R5cGVzLi4uPjo6dmFsdWUpOgotICAgICAgICBfX2luZGV4KF9fY29w
eV9jb25zdHJ1Y3QoX19vdGhlcikpCi0gICAge30KLQotICAgIGNvbnN0ZXhwciBWYXJpYW50KHR5
cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8IV9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMu
Li4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSBjb25zdCYgX19vdGhlcik9
ZGVsZXRlOwotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBf
QXJncz4KLSAgICBleHBsaWNpdCBjb25zdGV4cHIgVmFyaWFudChpbl9wbGFjZV90eXBlX3Q8X1R5
cGU+LF9BcmdzJiYgLi4uIF9fYXJncyk6Ci0gICAgICAgIF9fc3RvcmFnZSgKLSAgICAgICAgICAg
IGluX3BsYWNlPF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPiwKLSAgICAg
ICAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLiksCi0gICAgICAgIF9faW5kZXgo
X190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWUpCi0gICAgewotICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29uc3RydWN0aWJsZTxfVHlwZSxfQXJncy4uLj46OnZhbHVl
LCJUeXBlIG11c3QgYmUgY29uc3RydWN0aWJsZSBmcm9tIGFyZ3MiKTsKLSAgICB9Ci0KLSAgICB0
ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBleHBsaWNpdCBj
b25zdGV4cHIgVmFyaWFudChpbl9wbGFjZV9pbmRleF90PF9JbmRleD4sX0FyZ3MmJiAuLi4gX19h
cmdzKToKLSAgICAgICAgX19zdG9yYWdlKGluX3BsYWNlPF9JbmRleD4sc3RkOjpmb3J3YXJkPF9B
cmdzPihfX2FyZ3MpLi4uKSwKLSAgICAgICAgX19pbmRleChfSW5kZXgpCi0gICAgewotICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29uc3RydWN0aWJsZTx0eXBlbmFtZSBfX2luZGV4ZWRf
dHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlLF9BcmdzLi4uPjo6dmFsdWUsIlR5cGUgbXVz
dCBiZSBjb25zdHJ1Y3RpYmxlIGZyb20gYXJncyIpOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHlwZT4KLSAgICBjb25zdGV4cHIgVmFyaWFudChfVHlwZSYmIF9feCk6Ci0g
ICAgICAgIF9fc3RvcmFnZSgKLSAgICAgICAgICAgIGluX3BsYWNlPAotICAgICAgICAgICAgX190
eXBlX2luZGV4X3RvX2NvbnN0cnVjdDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPiwKLSAgICAg
ICAgICAgIHN0ZDo6Zm9yd2FyZDxfVHlwZT4oX194KSksCi0gICAgICAgIF9faW5kZXgoX190eXBl
X2luZGV4X3RvX2NvbnN0cnVjdDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlKQotICAgIHt9Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSwKLSAgICAgICAgICAgICB0eXBlbmFtZSBfRW5h
YmxlPQotICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAgICAgICAgICAg
ICAgICAoX19jb25zdHJ1Y3RpYmxlX21hdGNoZXM8c3RkOjppbml0aWFsaXplcl9saXN0PF9UeXBl
PixfVHlwZXMuLi4+OjpfX3R5cGU6Ol9fbGVuZ3RoPjApCi0gICAgICAgICAgICAgPjo6dHlwZT4K
LSAgICBjb25zdGV4cHIgVmFyaWFudChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X1R5cGU+IF9feCk6
Ci0gICAgICAgIF9fc3RvcmFnZSgKLSAgICAgICAgICAgIGluX3BsYWNlPAotICAgICAgICAgICAg
X190eXBlX2luZGV4X3RvX2NvbnN0cnVjdDxzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X1R5cGU+LF9U
eXBlcy4uLj46Ol9fdmFsdWU+LAotICAgICAgICAgICAgX194KSwKLSAgICAgICAgX19pbmRleChf
X3R5cGVfaW5kZXhfdG9fY29uc3RydWN0PHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfVHlwZT4sX1R5
cGVzLi4uPjo6X192YWx1ZSkKLSAgICB7fQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9U
eXBlPgotICAgIFZhcmlhbnQmIG9wZXJhdG9yPShfVHlwZSYmIF9feCl7Ci0gICAgICAgIGNvbnN0
ZXhwciBzaXplX3QgX0luZGV4PQotICAgICAgICAgICAgX190eXBlX2luZGV4X3RvX2NvbnN0cnVj
dDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlOwotICAgICAgICBpZihfSW5kZXg9PV9faW5kZXgp
ewotICAgICAgICAgICAgZ2V0PF9JbmRleD4oKnRoaXMpPXN0ZDo6Zm9yd2FyZDxfVHlwZT4oX194
KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlewotICAgICAgICAgICAgX19yZXBsYWNlX2NvbnN0
cnVjdDxfSW5kZXg+KHN0ZDo6Zm9yd2FyZDxfVHlwZT4oX194KSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIFZhcmlhbnQgJm9wZXJhdG9yPSgKLSAgICAg
ICAgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwKLSAgICAgICAgICAgICEoX19hbGxfY29weV9j
b25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgIF9fYWxsX21v
dmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICBfX2Fs
bF9jb3B5X2Fzc2lnbmFibGU8X1R5cGVzLi4uPjo6dmFsdWUpLAotICAgICAgICAgICAgVmFyaWFu
dCwgX19wcml2YXRlX3R5cGU+Ojp0eXBlIGNvbnN0ICZfX290aGVyKSA9IGRlbGV0ZTsKLQotICAg
IFZhcmlhbnQgJm9wZXJhdG9yPSgKLSAgICAgICAgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwK
LSAgICAgICAgICAgIF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAm
JgotICAgICAgICAgICAgICAgIF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2
YWx1ZSAmJgotICAgICAgICAgICAgICAgIF9fYWxsX2NvcHlfYXNzaWduYWJsZTxfVHlwZXMuLi4+
Ojp2YWx1ZSwKLSAgICAgICAgICAgIFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZSBjb25z
dCAmX19vdGhlcikgewotICAgICAgICBpZiAoX19vdGhlci52YWx1ZWxlc3NfYnlfZXhjZXB0aW9u
KCkpIHsKLSAgICAgICAgICAgIF9fZGVzdHJveV9zZWxmKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZSBpZihfX290aGVyLmluZGV4KCk9PWluZGV4KCkpewotICAgICAgICAgICAgX19jb3B5X2Fz
c2lnbl9vcF90YWJsZTxWYXJpYW50Pjo6X19hcHBseVtpbmRleCgpXSh0aGlzLF9fb3RoZXIpOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgICBfX3JlcGxhY2VfY29uc3RydWN0
X2hlbHBlcjo6X19vcF90YWJsZTxWYXJpYW50Pjo6X19jb3B5X2Fzc2lnblsKLSAgICAgICAgICAg
ICAgICBfX290aGVyLmluZGV4KCldKHRoaXMsX19vdGhlcik7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuICp0aGlzOwotICAgIH0KLSAgICBWYXJpYW50ICZvcGVyYXRvcj0oCi0gICAgICAgIHR5
cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8Ci0gICAgICAgICAgICAhKF9fYWxsX2NvcHlfY29uc3Ry
dWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2Nv
bnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgX19hbGxfY29w
eV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlKSwKLSAgICAgICAgICAgIFZhcmlhbnQsIF9f
cHJpdmF0ZV90eXBlPjo6dHlwZSAmX19vdGhlcikgPSBkZWxldGU7Ci0KLSAgICBWYXJpYW50ICZv
cGVyYXRvcj0oCi0gICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8Ci0gICAgICAgICAg
ICBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAg
ICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAg
ICAgICAgICAgICAgICBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8X1R5cGVzLi4uPjo6dmFsdWUsCi0g
ICAgICAgICAgICBWYXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgJl9fb3RoZXIpIHsKLSAg
ICAgICAgaWYoX19vdGhlci52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpewotICAgICAgICAgICAg
X19kZXN0cm95X3NlbGYoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKF9fb3RoZXIuaW5k
ZXgoKT09aW5kZXgoKSl7Ci0gICAgICAgICAgICBfX2NvcHlfYXNzaWduX29wX3RhYmxlPFZhcmlh
bnQ+OjpfX2FwcGx5W2luZGV4KCldKHRoaXMsX19vdGhlcik7Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZXsKLSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxl
PFZhcmlhbnQ+OjpfX2NvcHlfYXNzaWduWwotICAgICAgICAgICAgICAgIF9fb3RoZXIuaW5kZXgo
KV0odGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAg
fQotICAgIFZhcmlhbnQgJm9wZXJhdG9yPSgKLSAgICAgICAgdHlwZW5hbWUgc3RkOjpjb25kaXRp
b25hbDwKLSAgICAgICAgICAgICEoX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46
OnZhbHVlICYmCi0gICAgICAgICAgICAgIF9fYWxsX21vdmVfYXNzaWduYWJsZTxfVHlwZXMuLi4+
Ojp2YWx1ZSksCi0gICAgICAgICAgICBWYXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgJiZf
X290aGVyKSA9IGRlbGV0ZTsKLQotICAgIFZhcmlhbnQgJm9wZXJhdG9yPSgKLSAgICAgICAgdHlw
ZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4u
Pjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hbGxf
bW92ZV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZSAmJgotICAgICAgICAg
ICAgX19vdGhlcikgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduPF9U
eXBlcy4uLj46OnZhbHVlKSB7Ci0gICAgICAgIGlmIChfX290aGVyLnZhbHVlbGVzc19ieV9leGNl
cHRpb24oKSkgewotICAgICAgICAgICAgX19kZXN0cm95X3NlbGYoKTsKLSAgICAgICAgfQotICAg
ICAgICBlbHNlIGlmKF9fb3RoZXIuaW5kZXgoKT09aW5kZXgoKSl7Ci0gICAgICAgICAgICBfX21v
dmVfYXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W2luZGV4KCldKHRoaXMsX19vdGhl
cik7Ci0gICAgICAgICAgICBfX290aGVyLl9fZGVzdHJveV9zZWxmKCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZXsKLSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29w
X3RhYmxlPFZhcmlhbnQ+OjpfX21vdmVfYXNzaWduWwotICAgICAgICAgICAgICAgIF9fb3RoZXIu
aW5kZXgoKV0odGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKnRoaXM7
Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9Bcmdz
PgotICAgIHZvaWQgZW1wbGFjZShfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICBfX2RpcmVj
dF9yZXBsYWNlPF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPigKLSAgICAg
ICAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7Ci0gICAgfQotICAgIAotICAg
IHRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHZvaWQgZW1w
bGFjZShfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICBfX2RpcmVjdF9yZXBsYWNlPF9JbmRl
eD4oc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9Ci0gICAgCi0gICAgY29u
c3RleHByIGJvb2wgdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpIGNvbnN0IF9fTk9FWENFUFR7Ci0g
ICAgICAgIHJldHVybiBfX2luZGV4PT0tMTsKLSAgICB9Ci0gICAgY29uc3RleHByIHB0cmRpZmZf
dCBpbmRleCgpIGNvbnN0IF9fTk9FWENFUFR7Ci0gICAgICAgIHJldHVybiBfX2luZGV4OwotICAg
IH0KLQotICAgIHZvaWQgc3dhcCgKLSAgICAgICAgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwK
LSAgICAgICAgICAgIF9fYWxsX3N3YXBwYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAg
ICAgICAgICAgIF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSwKLSAg
ICAgICAgICAgIFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZQotICAgICAgICAgICAgJl9f
b3RoZXIpIF9fTk9FWENFUFRfKF9fbm9leGNlcHRfdmFyaWFudF9zd2FwPF9UeXBlcy4uLj46OnZh
bHVlKSB7Ci0gICAgICAgIGlmIChfX290aGVyLmluZGV4KCkgPT0gaW5kZXgoKSkgewotICAgICAg
ICAgICAgaWYoIXZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkKLSAgICAgICAgICAgICAgICBfX3N3
YXBfb3BfdGFibGU8VmFyaWFudD46Ol9fYXBwbHlbaW5kZXgoKV0oKnRoaXMsX19vdGhlcik7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAgIFZhcmlhbnQgX190ZW1wKHN0ZDo6
bW92ZShfX290aGVyKSk7Ci0gICAgICAgICAgICBfX290aGVyLl9faW5kZXg9X19vdGhlci5fX21v
dmVfY29uc3RydWN0KCp0aGlzKTsKLSAgICAgICAgICAgIF9faW5kZXg9X19tb3ZlX2NvbnN0cnVj
dChfX3RlbXApOwotICAgICAgICB9Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PgotY2xhc3MgVmFy
aWFudDw+ewotcHVibGljOgotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIFZhcmlh
bnQoKT1kZWxldGU7Ci0gICAgCi0gICAgY29uc3RleHByIGJvb2wgdmFsdWVsZXNzX2J5X2V4Y2Vw
dGlvbigpIGNvbnN0IF9fTk9FWENFUFR7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICBjb25zdGV4cHIgcHRyZGlmZl90IGluZGV4KCkgY29uc3QgX19OT0VYQ0VQVHsKLSAgICAgICAg
cmV0dXJuIC0xOwotICAgIH0KLQotICAgIHZvaWQgc3dhcChWYXJpYW50Jil7fQotfTsKLQotdGVt
cGxhdGUgPHR5cGVuYW1lLi4uIF9UeXBlcz4KLXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPF9fYWxs
X3N3YXBwYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHZvaWQ+Ojp0eXBlCi1zd2FwKFZhcmlhbnQ8X1R5cGVzLi4uPiAmX19s
aHMsIFZhcmlhbnQ8X1R5cGVzLi4uPiAmX19yaHMpIF9fTk9FWENFUFRfKAotICAgIF9fbm9leGNl
cHRfdmFyaWFudF9zd2FwPF9UeXBlcy4uLj46OnZhbHVlKSB7Ci0gICAgX19saHMuc3dhcChfX3Jo
cyk7Ci19Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4K
LXN0cnVjdCBfX3ZhcmlhbnRfYWNjZXNzb3J7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2luZGV4
ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIF9fdHlwZTsKLSAgICBzdGF0aWMgY29u
c3RleHByIF9fdHlwZSYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYgX192KXsKLSAgICAgICAgcmV0
dXJuIF9fdi5fX3N0b3JhZ2UuX19nZXQoaW5fcGxhY2U8X0luZGV4Pik7Ci0gICAgfQotICAgIHN0
YXRpYyBjb25zdGV4cHIgX190eXBlIGNvbnN0JiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0
JiBfX3YpewotICAgICAgICByZXR1cm4gX192Ll9fc3RvcmFnZS5fX2dldChpbl9wbGFjZTxfSW5k
ZXg+KTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfX3R5cGUmJiBnZXQoVmFyaWFudDxf
VHlwZXMuLi4+JiYgX192KXsKLSAgICAgICAgcmV0dXJuIF9fdi5fX3N0b3JhZ2UuX19nZXRfcnJl
Zihpbl9wbGFjZTxfSW5kZXg+KTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBf
X3R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiYgX192KXsKLSAgICAgICAgcmV0
dXJuIF9fdi5fX3N0b3JhZ2UuX19nZXRfcnJlZihpbl9wbGFjZTxfSW5kZXg+KTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3Rl
eHByIF9UeXBlJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAgIHJldHVybiBnZXQ8
X190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU+KF9fdik7CisgICAgcmV0dXJu
IHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8X1R5cGU+KF9fdik7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgX1R5cGUmJiBnZXQoVmFy
aWFudDxfVHlwZXMuLi4+JiYgX192KXsKLSAgICByZXR1cm4gZ2V0PF9fdHlwZV9pbmRleDxfVHlw
ZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPihzdGQ6Om1vdmUoX192KSk7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgX1R5cGUgY29uc3Qm
IGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdil7Ci0gICAgcmV0dXJuIGdldDxfX3R5
cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZT4oX192KTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBjb25zdCBfVHlw
ZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmJiBfX3YpewotICAgIHJldHVybiBnZXQ8
X190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU+KHN0ZDo6bW92ZShfX3YpKTsK
LX0KLQotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1j
b25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlw
ZSBjb25zdCYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX192KXsKLSAgICByZXR1cm4g
KigKLSAgICAgICAgKF9JbmRleCE9X192LmluZGV4KCkpCi0gICAgICAgICAgICA/IHN0ZDo6YWRk
cmVzc29mKF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPHR5cGVuYW1lIF9faW5kZXhlZF90eXBl
PF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3QmPigiQmFkIFZhcmlhbnQgaW5kZXggaW4g
Z2V0IikpCi0gICAgICAgICAgICA6IHN0ZDo6YWRkcmVzc29mKF9fdmFyaWFudF9hY2Nlc3Nvcjxf
SW5kZXgsX1R5cGVzLi4uPjo6Z2V0KF9fdikpCi0gICAgKTsKLX0KLQotdGVtcGxhdGU8cHRyZGlm
Zl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHR5cGVuYW1lIF9faW5k
ZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmIGdldChWYXJpYW50PF9UeXBlcy4u
Lj4mIF9fdil7Ci0gICAgcmV0dXJuICooCi0gICAgICAgIChfSW5kZXghPV9fdi5pbmRleCgpKQot
ICAgICAgICAgICAgPyBzdGQ6OmFkZHJlc3NvZihfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0
eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJj4oIkJhZCBW
YXJpYW50IGluZGV4IGluIGdldCIpKQotICAgICAgICAgICAgOiBzdGQ6OmFkZHJlc3NvZihfX3Zh
cmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldChfX3YpKQotICAgICk7Ci19Ci0K
LXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhw
ciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJiYgZ2V0
KFZhcmlhbnQ8X1R5cGVzLi4uPiYmIF9fdil7Ci0gICAgcmV0dXJuIF9fdmFyaWFudF9hY2Nlc3Nv
cjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KAotICAgICAgICAoKChfSW5kZXghPV9fdi5pbmRleCgp
KSA/IF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPGludD4oIkJhZCBWYXJpYW50IGluZGV4IGlu
IGdldCIpIDogMCksIHN0ZDo6bW92ZShfX3YpKQotICAgICk7Ci19Ci0KLXRlbXBsYXRlPHB0cmRp
ZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBjb25zdCB0eXBlbmFt
ZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJiYgZ2V0KFZhcmlhbnQ8
X1R5cGVzLi4uPiBjb25zdCYmIF9fdil7Ci0gICAgcmV0dXJuIF9fdmFyaWFudF9hY2Nlc3Nvcjxf
SW5kZXgsX1R5cGVzLi4uPjo6Z2V0KAotICAgICAgICAoKChfSW5kZXghPV9fdi5pbmRleCgpKSA/
IF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPGludD4oIkJhZCBWYXJpYW50IGluZGV4IGluIGdl
dCIpIDogMCksIHN0ZDo6bW92ZShfX3YpKQotICAgICk7Citjb25zdGV4cHIgX1R5cGUmIGdldChW
YXJpYW50PF9UeXBlcy4uLj4mIF9fdikKK3sKKyAgICByZXR1cm4gc3RkOjpnZXQ8X1R5cGU+KF9f
dik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1j
b25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PF9UeXBlPiBnZXRfaWYoVmFyaWFudDxfVHlwZXMu
Li4+JiBfX3YpewotICAgIHJldHVybiAoX190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9f
dmFsdWUhPV9fdi5pbmRleCgpKT9udWxscHRyOnN0ZDo6YWRkcmVzc29mKGdldDxfVHlwZT4oX192
KSk7Citjb25zdGV4cHIgX1R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+JiYgX192KQorewor
ICAgIHJldHVybiBzdGQ6OmdldDxfVHlwZT4oV1RGTW92ZShfX3YpKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9w
b2ludGVyX3Q8X1R5cGUgY29uc3Q+IGdldF9pZihWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9f
dil7Ci0gICAgcmV0dXJuIChfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZSE9
X192LmluZGV4KCkpP251bGxwdHI6c3RkOjphZGRyZXNzb2YoZ2V0PF9UeXBlPihfX3YpKTsKLX0K
LQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3Rl
eHByIHN0ZDo6YWRkX3BvaW50ZXJfdDx0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5
cGVzLi4uPjo6X190eXBlPiBnZXRfaWYoVmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAgIHJl
dHVybiAoKF9JbmRleCE9X192LmluZGV4KCkpP251bGxwdHI6Ci0gICAgICAgIHN0ZDo6YWRkcmVz
c29mKF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KF9fdikpKTsKLX0K
LQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3Rl
eHByIHN0ZDo6YWRkX3BvaW50ZXJfdDx0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5
cGVzLi4uPjo6X190eXBlIGNvbnN0PiBnZXRfaWYoCi0gICAgVmFyaWFudDxfVHlwZXMuLi4+IGNv
bnN0JiBfX3YpewotICAgIHJldHVybiAoKF9JbmRleCE9X192LmluZGV4KCkpP251bGxwdHI6Ci0g
ICAgICAgIHN0ZDo6YWRkcmVzc29mKF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4u
Pjo6Z2V0KF9fdikpKTsKK2NvbnN0ZXhwciBfVHlwZSBjb25zdCYgZ2V0KFZhcmlhbnQ8X1R5cGVz
Li4uPiBjb25zdCYgX192KQoreworICAgIHJldHVybiBzdGQ6OmdldDxfVHlwZT4oX192KTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhw
ciBib29sIGhvbGRzX2FsdGVybmF0aXZlKFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX192KSBf
X05PRVhDRVBUewotICAgIHJldHVybiBfX3YuaW5kZXgoKT09X190eXBlX2luZGV4PF9UeXBlLF9U
eXBlcy4uLj46Ol9fdmFsdWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX192aXNpdG9yX3JldHVybl90eXBlOwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBfVmlzaXRvcj4KLXN0cnVjdCBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0
b3I+ewotICAgIHR5cGVkZWYgZGVjbHR5cGUoc3RkOjpkZWNsdmFsPF9WaXNpdG9yJj4oKSgpKSBf
X3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSBfSGVhZCx0
eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX192aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9y
LF9IZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxfVmlz
aXRvciY+KCkoc3RkOjpkZWNsdmFsPF9IZWFkJj4oKSkpIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX192aXNpdG9y
X3RhYmxlewotICAgIHR5cGVkZWYgVmFyaWFudDxfVHlwZXMuLi4+IF9fdmFyaWFudF90eXBlOwot
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX192aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9UeXBl
cy4uLj46Ol9fdHlwZSBfX3JldHVybl90eXBlOwotICAgIHR5cGVkZWYgX19yZXR1cm5fdHlwZSAo
Kl9fZnVuY190eXBlKShfVmlzaXRvciYsX192YXJpYW50X3R5cGUmKTsKLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIF9UeXBlPgotICAgIHN0YXRpYyBfX3JldHVybl90eXBlIF9fdHJhbXBvbGluZV9m
dW5jKF9WaXNpdG9yJiBfX3Zpc2l0b3IsX192YXJpYW50X3R5cGUmIF9fdil7Ci0gICAgICAgIHJl
dHVybiBfX3Zpc2l0b3IoZ2V0PF9UeXBlPihfX3YpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29u
c3QgX19mdW5jX3R5cGUgX190cmFtcG9saW5lW3NpemVvZi4uLihfVHlwZXMpXTsKLX07Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdCB0eXBl
bmFtZSBfX3Zpc2l0b3JfdGFibGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X19mdW5jX3R5cGUgX192
aXNpdG9yX3RhYmxlPF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fdHJhbXBvbGluZVtzaXplb2YuLi4o
X1R5cGVzKV09ewotICAgICAgICAmX190cmFtcG9saW5lX2Z1bmM8X1R5cGVzPi4uLgotICAgIH07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25z
dGV4cHIgdHlwZW5hbWUgX192aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9UeXBlcy4uLj46
Ol9fdHlwZQotdmlzaXQoX1Zpc2l0b3ImJiBfX3Zpc2l0b3IsVmFyaWFudDxfVHlwZXMuLi4+JiBf
X3YpewotICAgIHJldHVybiAoX192LnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkKLSAgICAgICAg
PyBfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBfX3Zpc2l0b3JfcmV0dXJuX3R5
cGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190eXBlPigiVmlzaXRpbmcgb2YgZW1wdHkgVmFyaWFu
dCIpCi0gICAgICAgIDogX192aXNpdG9yX3RhYmxlPF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fdHJh
bXBvbGluZVtfX3YuaW5kZXgoKV0oX192aXNpdG9yLF9fdik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVmFyaWFudHM+Ci1zdHJ1Y3QgX19tdWx0aV92aXNp
dG9yX3JldHVybl90eXBlewotICAgIHR5cGVkZWYgZGVjbHR5cGUoc3RkOjpkZWNsdmFsPF9WaXNp
dG9yJj4oKShnZXQ8MD4oc3RkOjpkZWNsdmFsPF9WYXJpYW50cz4oKSkuLi4pKQotICAgIF9fdHlw
ZTsKLX07Ci0KLXRlbXBsYXRlPHNpemVfdCBfVmFyaWFudEluZGV4LHR5cGVuYW1lIF9JbmRpY2Vz
Pgotc3RydWN0IF9fdmlzaXRfaGVscGVyOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgLi4uIF9JbmRp
Y2VzPgotc3RydWN0IF9fdmlzaXRfaGVscGVyPDAsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4u
Lj4+ewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVmFyaWFu
dHM+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJu
X3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCi0gICAgX192aXNpdChfVmlzaXRv
ciYgX192aXNpdG9yLF9WYXJpYW50cyYgLi4uIF9fdil7Ci0gICAgICAgIHJldHVybiBfX3Zpc2l0
b3IoZ2V0PF9JbmRpY2VzPihfX3YpLi4uKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTxzaXplX3Qg
X0luZGV4LHR5cGVuYW1lIC4uLiBfQXJncz4KLXN0cnVjdCBfX2FyZ19zZWxlY3Rvcl90OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hcmdf
c2VsZWN0b3JfdDwwLF9IZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIF9IZWFkIF9fdHlwZTsK
LQotICAgIHN0YXRpYyBjb25zdGV4cHIgX190eXBlJiBfX3NlbGVjdChfSGVhZCYgX19oZWFkLF9S
ZXN0JiAuLi4pewotICAgICAgICByZXR1cm4gX19oZWFkOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0
IF9fYXJnX3NlbGVjdG9yX3Q8X0luZGV4LF9IZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIHR5
cGVuYW1lIF9fYXJnX3NlbGVjdG9yX3Q8X0luZGV4LTEsX1Jlc3QuLi4+OjpfX3R5cGUgX190eXBl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgX190eXBlJiBfX3NlbGVjdChfSGVhZCYsX1Jlc3QmIC4u
LiBfX3Jlc3QpewotICAgICAgICByZXR1cm4gX19hcmdfc2VsZWN0b3JfdDxfSW5kZXgtMSxfUmVz
dC4uLj46Ol9fc2VsZWN0KF9fcmVzdC4uLik7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8c2l6ZV90
IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci1jb25zdGV4cHIgdHlwZW5hbWUgX19hcmdfc2Vs
ZWN0b3JfdDxfSW5kZXgsX0FyZ3MuLi4+OjpfX3R5cGUmJiBfX2FyZ19zZWxlY3RvcihfQXJncyYm
IC4uLiBfX2FyZ3MpewotICAgIHJldHVybiBzdGQ6OmZvcndhcmQ8dHlwZW5hbWUgX19hcmdfc2Vs
ZWN0b3JfdDxfSW5kZXgsX0FyZ3MuLi4+OjpfX3R5cGU+KAotICAgICAgICBfX2FyZ19zZWxlY3Rv
cl90PF9JbmRleCxfQXJncy4uLj46Ol9fc2VsZWN0KF9fYXJncy4uLikpOwotfQotCi10ZW1wbGF0
ZTxwdHJkaWZmX3QgX0luZGV4LHNpemVfdCBfVmFyaWFudEluZGV4LHB0cmRpZmZfdCAuLi4gX0lu
ZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXIyewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9W
aXNpdG9yLHR5cGVuYW1lIC4uLiBfVmFyaWFudHM+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB0eXBl
bmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6
X190eXBlCi0gICAgX192aXNpdChfVmlzaXRvciYgX192aXNpdG9yLF9WYXJpYW50cyYmIC4uLiBf
X3YpewotICAgICAgICByZXR1cm4gKF9fYXJnX3NlbGVjdG9yPF9WYXJpYW50SW5kZXgtMT4oX192
Li4uKS5pbmRleCgpPT1fSW5kZXgpCi0gICAgICAgICAgICA/IF9fdmlzaXRfaGVscGVyPF9WYXJp
YW50SW5kZXgtMSxfX2luZGV4X3NlcXVlbmNlPF9JbmRleCxfSW5kaWNlcy4uLj4+OjpfX3Zpc2l0
KF9fdmlzaXRvcixzdGQ6OmZvcndhcmQ8X1ZhcmlhbnRzPihfX3YpLi4uKQotICAgICAgICAgICAg
OiBfX3Zpc2l0X2hlbHBlcjI8X0luZGV4LTEsX1ZhcmlhbnRJbmRleCxfSW5kaWNlcy4uLj46Ol9f
dmlzaXQoX192aXNpdG9yLHN0ZDo6Zm9yd2FyZDxfVmFyaWFudHM+KF9fdikuLi4pOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPHNpemVfdCBfVmFyaWFudEluZGV4LHB0cmRpZmZfdCAuLi4gX0luZGlj
ZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXIyPC0xLF9WYXJpYW50SW5kZXgsX0luZGljZXMuLi4+
ewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVmFyaWFudHM+
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5
cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCi0gICAgX192aXNpdChfVmlzaXRvciYs
X1ZhcmlhbnRzJiYgLi4uKXsKLSAgICAgICAgcmV0dXJuIF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNj
ZXNzPHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFu
dHMuLi4+OjpfX3R5cGU+KCJWaXNpdGluZyBvZiBlbXB0eSBWYXJpYW50Iik7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQ+Ci1zdHJ1Y3QgX192YXJpYW50X3R5cGVfY291
bnQ7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX192YXJpYW50X3R5
cGVfY291bnQ8VmFyaWFudDxfVHlwZXMuLi4+PnsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVf
dCBfX3ZhbHVlPXNpemVvZi4uLihfVHlwZXMpOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zh
cmlhbnQ+Ci1zdHJ1Y3QgX192YXJpYW50X3R5cGVfY291bnQ8X1ZhcmlhbnQmPnsKLSAgICBzdGF0
aWMgY29uc3RleHByIHNpemVfdCBfX3ZhbHVlPV9fdmFyaWFudF90eXBlX2NvdW50PF9WYXJpYW50
Pjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50Pgotc3RydWN0IF9f
dmFyaWFudF90eXBlX2NvdW50PF9WYXJpYW50IGNvbnN0Jj57Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBzaXplX3QgX192YWx1ZT1fX3ZhcmlhbnRfdHlwZV9jb3VudDxfVmFyaWFudD46Ol9fdmFsdWU7
Ci19OwotCi10ZW1wbGF0ZTxzaXplX3QgX1ZhcmlhbnRJbmRleCxwdHJkaWZmX3QgLi4uIF9JbmRp
Y2VzPgotc3RydWN0IF9fdmlzaXRfaGVscGVyPF9WYXJpYW50SW5kZXgsX19pbmRleF9zZXF1ZW5j
ZTxfSW5kaWNlcy4uLj4+ewotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5h
bWUgLi4uIF9WYXJpYW50cz4KLSAgICBzdGF0aWMgY29uc3RleHByIHR5cGVuYW1lIF9fbXVsdGlf
dmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFudHMuLi4+OjpfX3R5cGUKLSAgICBf
X3Zpc2l0KF9WaXNpdG9yJiBfX3Zpc2l0b3IsX1ZhcmlhbnRzJiYgLi4uIF9fdil7Ci0gICAgICAg
IHJldHVybiBfX3Zpc2l0X2hlbHBlcjI8Ci0gICAgICAgICAgICBfX3ZhcmlhbnRfdHlwZV9jb3Vu
dDwKLSAgICAgICAgICAgICAgICB0eXBlbmFtZSBfX2FyZ19zZWxlY3Rvcl90PAotICAgICAgICAg
ICAgICAgICAgICBfVmFyaWFudEluZGV4LTEsX1ZhcmlhbnRzLi4uPjo6X190eXBlPjo6X192YWx1
ZS0xLAotICAgICAgICAgICAgX1ZhcmlhbnRJbmRleCxfSW5kaWNlcy4uLj46Ol9fdmlzaXQoCi0g
ICAgICAgICAgICAgICAgX192aXNpdG9yLHN0ZDo6Zm9yd2FyZDxfVmFyaWFudHMmJj4oX192KS4u
Lik7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4u
IF9WYXJpYW50cz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5
cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCi12aXNpdChfVmlzaXRvciYmIF9fdmlz
aXRvcixfVmFyaWFudHMmJiAuLi4gX192KXsKLSAgICByZXR1cm4gX192aXNpdF9oZWxwZXI8c2l6
ZW9mLi4uKF9WYXJpYW50cyksX19pbmRleF9zZXF1ZW5jZTw+Pjo6X192aXNpdCgKLSAgICAgICAg
X192aXNpdG9yLHN0ZDo6Zm9yd2FyZDxfVmFyaWFudHM+KF9fdikuLi4pOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShWYXJpYW50
PF9UeXBlcy4uLj4gY29uc3QmIF9fbGhzLFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19yaHMp
ewotICAgIHJldHVybiAoX19saHMuaW5kZXgoKT09X19yaHMuaW5kZXgoKSkgJiYKLSAgICAgICAg
KChfX2xocy5pbmRleCgpPT0tMSkgfHwKLSAgICAgICAgIF9fZXF1YWxpdHlfb3BfdGFibGU8VmFy
aWFudDxfVHlwZXMuLi4+Pjo6X19lcXVhbGl0eV9jb21wYXJlW19fbGhzLmluZGV4KCldKAotICAg
ICAgICAgICAgIF9fbGhzLF9fcmhzKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYg
X19saHMsVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Jocyl7Ci0gICAgcmV0dXJuICEoX19s
aHM9PV9fcmhzKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhw
ciBib29sIG9wZXJhdG9yPChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fbGhzLFZhcmlhbnQ8
X1R5cGVzLi4uPiBjb25zdCYgX19yaHMpewotICAgIHJldHVybiAoX19saHMuaW5kZXgoKTxfX3Jo
cy5pbmRleCgpKSB8fAotICAgICAgICAoKF9fbGhzLmluZGV4KCk9PV9fcmhzLmluZGV4KCkpICYm
Ci0gICAgICAgICAoKF9fbGhzLmluZGV4KCkhPS0xKSAmJgotICAgICAgICAgIF9fbGVzc190aGFu
X29wX3RhYmxlPFZhcmlhbnQ8X1R5cGVzLi4uPj46OgotICAgICAgICAgIF9fbGVzc190aGFuX2Nv
bXBhcmVbX19saHMuaW5kZXgoKV0oX19saHMsX19yaHMpKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oVmFyaWFudDxfVHlwZXMu
Li4+IGNvbnN0JiBfX2xocyxWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsKLSAgICBy
ZXR1cm4gX19yaHM8X19saHM7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1j
b25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19saHMs
VmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Jocyl7Ci0gICAgcmV0dXJuICEoX19saHM8X19y
aHMpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGJvb2wg
b3BlcmF0b3I8PShWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fbGhzLFZhcmlhbnQ8X1R5cGVz
Li4uPiBjb25zdCYgX19yaHMpewotICAgIHJldHVybiAhKF9fbGhzPl9fcmhzKTsKK2NvbnN0ZXhw
ciBjb25zdCBfVHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmJiBfX3YpCit7Cisg
ICAgcmV0dXJuIHN0ZDo6Z2V0PF9UeXBlPihXVEZNb3ZlKF9fdikpOwogfQogCi1zdHJ1Y3QgTW9u
b3N0YXRle307Ci0KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oTW9ub3N0YXRlIGNvbnN0Jiwg
TW9ub3N0YXRlIGNvbnN0JikgeyByZXR1cm4gdHJ1ZTsgfQotY29uc3RleHByIGJvb2wgb3BlcmF0
b3IhPShNb25vc3RhdGUgY29uc3QmLCBNb25vc3RhdGUgY29uc3QmKSB7IHJldHVybiBmYWxzZTsg
fQotY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShNb25vc3RhdGUgY29uc3QmLCBNb25vc3RhdGUg
Y29uc3QmKSB7IHJldHVybiB0cnVlOyB9Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KE1vbm9z
dGF0ZSBjb25zdCYsIE1vbm9zdGF0ZSBjb25zdCYpIHsgcmV0dXJuIHRydWU7IH0KLWNvbnN0ZXhw
ciBib29sIG9wZXJhdG9yPihNb25vc3RhdGUgY29uc3QmLCBNb25vc3RhdGUgY29uc3QmKSB7IHJl
dHVybiBmYWxzZTsgfQotY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KE1vbm9zdGF0ZSBjb25zdCYs
IE1vbm9zdGF0ZSBjb25zdCYpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLXN0cnVjdCBfX2hhc2hfdmlz
aXRvcnsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLSAgICBzaXplX3Qgb3BlcmF0b3Io
KShfVHlwZSBjb25zdCYgX194KXsKLSAgICAgICAgcmV0dXJuIHN0ZDo6aGFzaDxfVHlwZT4oKShf
X3gpOwotICAgIH0KLX07Ci0KLS8vIC0tIFdlYktpdCBBZGRpdGlvbnMgLS0KLQogdGVtcGxhdGU8
Y2xhc3MgViwgY2xhc3MuLi4gRj4KLWF1dG8gc3dpdGNoT24oViYmIHYsIEYmJi4uLiBmKSAtPiBk
ZWNsdHlwZShXVEY6OnZpc2l0KG1ha2VWaXNpdG9yKHN0ZDo6Zm9yd2FyZDxGPihmKS4uLiksIHN0
ZDo6Zm9yd2FyZDxWPih2KSkpCithdXRvIHN3aXRjaE9uKFYmJiB2LCBGJiYuLi4gZikgLT4gZGVj
bHR5cGUoc3RkOjp2aXNpdChtYWtlVmlzaXRvcihzdGQ6OmZvcndhcmQ8Rj4oZikuLi4pLCBzdGQ6
OmZvcndhcmQ8Vj4odikpKQogewotICAgIHJldHVybiBXVEY6OnZpc2l0KG1ha2VWaXNpdG9yKHN0
ZDo6Zm9yd2FyZDxGPihmKS4uLiksIHN0ZDo6Zm9yd2FyZDxWPih2KSk7CisgICAgcmV0dXJuIHN0
ZDo6dmlzaXQobWFrZVZpc2l0b3Ioc3RkOjpmb3J3YXJkPEY+KGYpLi4uKSwgc3RkOjpmb3J3YXJk
PFY+KHYpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKLW5hbWVzcGFjZSBzdGQgewotCi10
ZW1wbGF0ZTw+Ci1zdHJ1Y3QgaGFzaDxXVEY6Ok1vbm9zdGF0ZT57Ci0gICAgc2l6ZV90IG9wZXJh
dG9yKCkoV1RGOjpNb25vc3RhdGUpIF9fTk9FWENFUFR7Ci0gICAgICAgIHJldHVybiA0MjsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IGhhc2g8V1RG
OjpWYXJpYW50PF9UeXBlcy4uLj4+ewotICAgIHNpemVfdCBvcGVyYXRvcigpKFdURjo6VmFyaWFu
dDxfVHlwZXMuLi4+IGNvbnN0ICZ2KSBfX05PRVhDRVBUIHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6
aGFzaDxwdHJkaWZmX3Q+KCkodi5pbmRleCgpKSBeIFdURjo6dmlzaXQoV1RGOjpfX2hhc2hfdmlz
aXRvcigpLCB2KTsKLSAgICB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBzdGQKLQogdXNpbmcgV1RG
OjpNb25vc3RhdGU7CiB1c2luZyBXVEY6OlZhcmlhbnQ7Ci0KLSNlbmRpZiAvLyAhQ09NUElMRVIo
Q0xBTkcpIHx8IFdURl9DUFBfU1REX1ZFUiA+PSAxNAotCi0jaWYgQ09NUElMRVIoTVNWQykKLSNw
cmFnbWEgd2FybmluZyhwb3ApCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvY2FjaGUvRE9NQ2FjaGVFbmdpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9j
YWNoZS9ET01DYWNoZUVuZ2luZS5jcHAKaW5kZXggZTE5MDRkYmI3NmFkMjAyY2M2M2Y2YTI2N2Y4
MGU5NGVlMTk2N2I2Ni4uMjU5MTRiNDBiYjIzODNhMDc4ODA0Zjg5YjExYjQwZDg5NzBiNDMwNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9ET01DYWNoZUVuZ2luZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9ET01DYWNoZUVuZ2luZS5jcHAK
QEAgLTEyOSwyMiArMTI5LDIyIEBAIGJvb2wgcXVlcnlDYWNoZU1hdGNoKGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgVVJMJiB1cmwsIGJvb2wgaGFzVmFyCiAKIFJlc3BvbnNl
Qm9keSBpc29sYXRlZFJlc3BvbnNlQm9keShjb25zdCBSZXNwb25zZUJvZHkmIGJvZHkpCiB7Ci0g
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24oYm9keSwgW10oY29uc3QgUmVmPEZvcm1EYXRhPiYgZm9y
bURhdGEpIHsKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihib2R5LCBbXShjb25zdCBSZWY8Rm9y
bURhdGE+JiBmb3JtRGF0YSkgLT4gUmVzcG9uc2VCb2R5IHsKICAgICAgICAgcmV0dXJuIGZvcm1E
YXRhLT5pc29sYXRlZENvcHkoKTsKLSAgICB9LCBbXShjb25zdCBSZWY8U2hhcmVkQnVmZmVyPiYg
YnVmZmVyKSB7CisgICAgfSwgW10oY29uc3QgUmVmPFNoYXJlZEJ1ZmZlcj4mIGJ1ZmZlcikgLT4g
UmVzcG9uc2VCb2R5IHsKICAgICAgICAgcmV0dXJuIGJ1ZmZlci0+Y29weSgpOwotICAgIH0sIFtd
KGNvbnN0IHN0ZDo6bnVsbHB0cl90JikgeworICAgIH0sIFtdKGNvbnN0IHN0ZDo6bnVsbHB0cl90
JikgLT4gUmVzcG9uc2VCb2R5IHsKICAgICAgICAgcmV0dXJuIERPTUNhY2hlRW5naW5lOjpSZXNw
b25zZUJvZHkgeyB9OwogICAgIH0pOwogfQogCiBSZXNwb25zZUJvZHkgY29weVJlc3BvbnNlQm9k
eShjb25zdCBSZXNwb25zZUJvZHkmIGJvZHkpCiB7Ci0gICAgcmV0dXJuIFdURjo6c3dpdGNoT24o
Ym9keSwgW10oY29uc3QgUmVmPEZvcm1EYXRhPiYgZm9ybURhdGEpIHsKKyAgICByZXR1cm4gV1RG
Ojpzd2l0Y2hPbihib2R5LCBbXShjb25zdCBSZWY8Rm9ybURhdGE+JiBmb3JtRGF0YSkgLT4gUmVz
cG9uc2VCb2R5IHsKICAgICAgICAgcmV0dXJuIGZvcm1EYXRhLmNvcHlSZWYoKTsKLSAgICB9LCBb
XShjb25zdCBSZWY8U2hhcmVkQnVmZmVyPiYgYnVmZmVyKSB7CisgICAgfSwgW10oY29uc3QgUmVm
PFNoYXJlZEJ1ZmZlcj4mIGJ1ZmZlcikgLT4gUmVzcG9uc2VCb2R5IHsKICAgICAgICAgcmV0dXJu
IGJ1ZmZlci5jb3B5UmVmKCk7Ci0gICAgfSwgW10oY29uc3Qgc3RkOjpudWxscHRyX3QmKSB7Cisg
ICAgfSwgW10oY29uc3Qgc3RkOjpudWxscHRyX3QmKSAtPiBSZXNwb25zZUJvZHkgewogICAgICAg
ICByZXR1cm4gRE9NQ2FjaGVFbmdpbmU6OlJlc3BvbnNlQm9keSB7IH07CiAgICAgfSk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keU93bmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5T3duZXIuY3BwCmluZGV4
IGVmNmRhMDQ5ODk4ZWJhZDgxZTY3NzU4MWYwZDEyYmQzMzhmNjEyNTMuLjg4NGM4Yjg3ODM5MTk5
MGMzNzc1YzIxYzgzYzAxMTEzY2MwODFhNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5T3duZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZmV0Y2gvRmV0Y2hCb2R5T3duZXIuY3BwCkBAIC0zODgsOSArMzg4LDkgQEAgUmVzb3VyY2VF
cnJvciBGZXRjaEJvZHlPd25lcjo6bG9hZGluZ0Vycm9yKCkgY29uc3QKIAogc3RkOjpvcHRpb25h
bDxFeGNlcHRpb24+IEZldGNoQm9keU93bmVyOjpsb2FkaW5nRXhjZXB0aW9uKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX2xvYWRpbmdFcnJvciwgW10oY29uc3QgUmVzb3Vy
Y2VFcnJvciYgZXJyb3IpIHsKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX2xvYWRpbmdFcnJv
ciwgW10oY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpIC0+IHN0ZDo6b3B0aW9uYWw8RXhjZXB0
aW9uPiB7CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IsIGVycm9yLnNhbml0
aXplZERlc2NyaXB0aW9uKCkgfTsKLSAgICB9LCBbXShjb25zdCBFeGNlcHRpb24mIGV4Y2VwdGlv
bikgeworICAgIH0sIFtdKGNvbnN0IEV4Y2VwdGlvbiYgZXhjZXB0aW9uKSAtPiBzdGQ6Om9wdGlv
bmFsPEV4Y2VwdGlvbj4gewogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgZXhjZXB0aW9uIH07
CiAgICAgfSwgW10oYXV0byYmKSAtPiBzdGQ6Om9wdGlvbmFsPEV4Y2VwdGlvbj4gewogICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXlQYXRoLmNwcAppbmRleCA3NGE5ZDlmODYzNTFjNWFlY2I3MmJkY2UyMDBjNGQ3
NTAwODJlYmE3Li5mZDZkNWEzOTliM2ZjYTY2MjRmZjM0OTRkYmFlODc3ZjU4YjQxNDFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcApAQCAt
MjAzLDcgKzIwMyw3IEBAIGJvb2wgaXNJREJLZXlQYXRoVmFsaWQoY29uc3QgSURCS2V5UGF0aCYg
a2V5UGF0aCkKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9KTsKLSAgICBy
ZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBrZXlQYXRoKTsKKyAgICByZXR1cm4gc3RkOjp2aXNp
dCh2aXNpdG9yLCBrZXlQYXRoKTsKIH0KIAogSURCS2V5UGF0aCBpc29sYXRlZENvcHkoY29uc3Qg
SURCS2V5UGF0aCYga2V5UGF0aCkKQEAgLTIxOCw3ICsyMTgsNyBAQCBJREJLZXlQYXRoIGlzb2xh
dGVkQ29weShjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQogICAgICAgICByZXR1cm4gdmVjdG9y
Q29weTsKICAgICB9KTsKIAotICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIGtleVBhdGgp
OworICAgIHJldHVybiBzdGQ6OnZpc2l0KHZpc2l0b3IsIGtleVBhdGgpOwogfQogCiAjaWYgIUxP
R19ESVNBQkxFRApAQCAtMjQyLDcgKzI0Miw3IEBAIFN0cmluZyBsb2dnaW5nU3RyaW5nKGNvbnN0
IElEQktleVBhdGgmIHBhdGgpCiAgICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiAg
ICAgfSk7CiAKLSAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBwYXRoKTsKKyAgICByZXR1
cm4gc3RkOjp2aXNpdCh2aXNpdG9yLCBwYXRoKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCmluZGV4IDU0ZTc4YmFjYmZi
NTlhNmI0ZDZhY2MzYjNkZWJkZTk3YmI4YTI2YzQuLjlhZmRkOWUwYzBiY2NjMDVlZWNjYWFkNTQ5
YjBhN2M3NWM5ZDBlMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlJlcXVlc3QuY3BwCkBAIC0yMDYsOSArMjA2LDkgQEAgdWludDY0X3QgSURCUmVxdWVzdDo6
c291cmNlT2JqZWN0U3RvcmVJZGVudGlmaWVyKCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3NvdXJjZS52YWx1ZSgpLAotICAgICAgICBbXSAo
Y29uc3QgUmVmUHRyPElEQk9iamVjdFN0b3JlPiYgb2JqZWN0U3RvcmUpIHsgcmV0dXJuIG9iamVj
dFN0b3JlLT5pbmZvKCkuaWRlbnRpZmllcigpOyB9LAotICAgICAgICBbXSAoY29uc3QgUmVmUHRy
PElEQkluZGV4PiYgaW5kZXgpIHsgcmV0dXJuIGluZGV4LT5pbmZvKCkub2JqZWN0U3RvcmVJZGVu
dGlmaWVyKCk7IH0sCi0gICAgICAgIFtdIChjb25zdCBSZWZQdHI8SURCQ3Vyc29yPiYpIHsgcmV0
dXJuIDA7IH0KKyAgICAgICAgW10gKGNvbnN0IFJlZlB0cjxJREJPYmplY3RTdG9yZT4mIG9iamVj
dFN0b3JlKSAtPiB1aW50NjRfdCB7IHJldHVybiBvYmplY3RTdG9yZS0+aW5mbygpLmlkZW50aWZp
ZXIoKTsgfSwKKyAgICAgICAgW10gKGNvbnN0IFJlZlB0cjxJREJJbmRleD4mIGluZGV4KSAtPiB1
aW50NjRfdCB7IHJldHVybiBpbmRleC0+aW5mbygpLm9iamVjdFN0b3JlSWRlbnRpZmllcigpOyB9
LAorICAgICAgICBbXSAoY29uc3QgUmVmUHRyPElEQkN1cnNvcj4mKSAtPiB1aW50NjRfdCB7IHJl
dHVybiAwOyB9CiAgICAgKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24uY3BwCmluZGV4IDRjOWE5
NTZjMjBlYzI0Yjg2NGJlMWY3NjIzZGQ1YjBlMjQwMmU0ZTQuLjJhMmMxZmMzMjk1ODA1ZDUyZmQ1
NmFmMzBiNDU1YWUyY2NjYzQ4NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5jcHAKQEAgLTUzLDcg
KzUzLDcgQEAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gc2VyaWFsaXplSURCS2V5UGF0aChjb25zdCBz
dGQ6Om9wdGlvbmFsPElEQktleVBhdGg+JiBrZXlQYXQKICAgICAgICAgICAgICAgICBlbmNvZGVy
LmVuY29kZVN0cmluZygic3RyaW5nIiwgc3RyaW5nKTsKICAgICAgICAgICAgIH0pOwogICAgICAg
ICB9KTsKLSAgICAgICAgV1RGOjp2aXNpdCh2aXNpdG9yLCBrZXlQYXRoLnZhbHVlKCkpOworICAg
ICAgICBzdGQ6OnZpc2l0KHZpc2l0b3IsIGtleVBhdGgudmFsdWUoKSk7CiAgICAgfSBlbHNlCiAg
ICAgICAgIGVuY29kZXItPmVuY29kZUVudW0oInR5cGUiLCBLZXlQYXRoVHlwZTo6TnVsbCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNv
bnRyb2xzSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVk
aWFDb250cm9sc0hvc3QuY3BwCmluZGV4IGQwOWNiN2RhNWJjODZmNzllMzNmZTQ5MTlmNDk3ZDBk
ZGFkN2RmNjAuLjdhNWU0ODQ2YzQwMDIyMDA3Y2Y4NDQ0NzQ3ZmVmYmViZmE5ZTI0ZmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xz
SG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlh
Q29udHJvbHNIb3N0LmNwcApAQCAtMTY2LDcgKzE2Niw3IEBAIFN0cmluZyBNZWRpYUNvbnRyb2xz
SG9zdDo6ZGlzcGxheU5hbWVGb3JUcmFjayhjb25zdCBzdGQ6Om9wdGlvbmFsPFRleHRPckF1ZGlv
VHJhCiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAotICAg
IHJldHVybiBXVEY6OnZpc2l0KFtwYWdlXSAoYXV0byYgdHJhY2spIHsKKyAgICByZXR1cm4gc3Rk
Ojp2aXNpdChbcGFnZV0gKGF1dG8mIHRyYWNrKSB7CiAgICAgICAgIHJldHVybiBwYWdlLT5ncm91
cCgpLmVuc3VyZUNhcHRpb25QcmVmZXJlbmNlcygpLmRpc3BsYXlOYW1lRm9yVHJhY2sodHJhY2su
Z2V0KCkpOwogICAgIH0sIHRyYWNrLnZhbHVlKCkpOwogfQpAQCAtNjgxLDEzICs2ODEsMTMgQEAg
Ym9vbCBNZWRpYUNvbnRyb2xzSG9zdDo6c2hvd01lZGlhQ29udHJvbHNDb250ZXh0TWVudShIVE1M
RWxlbWVudCYgdGFyZ2V0LCBTdHJpbmcKICNlbmRpZiAvLyBFTkFCTEUoVklERU9fUFJFU0VOVEFU
SU9OX01PREUpCiAgICAgICAgICAgICBbJl0gKFJlZlB0cjxBdWRpb1RyYWNrPiYgc2VsZWN0ZWRB
dWRpb1RyYWNrKSB7CiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiB0cmFjayA6IGlkTWFwLnZh
bHVlcygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBhdWRpb1RyYWNrID0gV1RG
OjpnZXRfaWY8UmVmUHRyPEF1ZGlvVHJhY2s+Pih0cmFjaykpCisgICAgICAgICAgICAgICAgICAg
IGlmIChhdXRvKiBhdWRpb1RyYWNrID0gc3RkOjpnZXRfaWY8UmVmUHRyPEF1ZGlvVHJhY2s+Pigm
dHJhY2spKQogICAgICAgICAgICAgICAgICAgICAgICAgKCphdWRpb1RyYWNrKS0+c2V0RW5hYmxl
ZCgqYXVkaW9UcmFjayA9PSBzZWxlY3RlZEF1ZGlvVHJhY2spOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICBbJl0gKFJlZlB0cjxUZXh0VHJhY2s+JiBzZWxl
Y3RlZFRleHRUcmFjaykgewogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgdHJhY2sgOiBpZE1h
cC52YWx1ZXMoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byogdGV4dFRyYWNrID0g
V1RGOjpnZXRfaWY8UmVmUHRyPFRleHRUcmFjaz4+KHRyYWNrKSkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGF1dG8qIHRleHRUcmFjayA9IHN0ZDo6Z2V0X2lmPFJlZlB0cjxUZXh0VHJhY2s+Pigm
dHJhY2spKQogICAgICAgICAgICAgICAgICAgICAgICAgKCp0ZXh0VHJhY2spLT5zZXRNb2RlKFRl
eHRUcmFjazo6TW9kZTo6RGlzYWJsZWQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBtZWRpYUVsZW1lbnQuc2V0U2VsZWN0ZWRUZXh0VHJhY2soc2VsZWN0ZWRUZXh0VHJhY2su
Z2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9S
VENQZWVyQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1JUQ1BlZXJDb25uZWN0aW9uLmNwcAppbmRleCAzYzc2YzU3YThiNzM1ZGIwZTViMTg4Y2YyZTQ2
ZmNlMmY5YTllMzUxLi5mZTFhMDFlZGNkZjlkODBhZTBlNTI3ODI4Y2M2OTFiZDI5MjM1NDc0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25u
ZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Bl
ZXJDb25uZWN0aW9uLmNwcApAQCAtMzMxLDcgKzMzMSw3IEBAIHZvaWQgUlRDUGVlckNvbm5lY3Rp
b246OmFkZEljZUNhbmRpZGF0ZShDYW5kaWRhdGUmJiBydGNDYW5kaWRhdGUsIFJlZjxEZWZlcnJl
ZFByCiAgICAgc3RkOjpvcHRpb25hbDxFeGNlcHRpb24+IGV4Y2VwdGlvbjsKICAgICBSZWZQdHI8
UlRDSWNlQ2FuZGlkYXRlPiBjYW5kaWRhdGU7CiAgICAgaWYgKHJ0Y0NhbmRpZGF0ZSkgewotICAg
ICAgICBjYW5kaWRhdGUgPSBzd2l0Y2hPbigqcnRjQ2FuZGlkYXRlLCBbJmV4Y2VwdGlvbl0oUlRD
SWNlQ2FuZGlkYXRlSW5pdCYgaW5pdCkgLT4gUmVmUHRyPFJUQ0ljZUNhbmRpZGF0ZT4geworICAg
ICAgICBjYW5kaWRhdGUgPSBXVEY6OnN3aXRjaE9uKCpydGNDYW5kaWRhdGUsIFsmZXhjZXB0aW9u
XShSVENJY2VDYW5kaWRhdGVJbml0JiBpbml0KSAtPiBSZWZQdHI8UlRDSWNlQ2FuZGlkYXRlPiB7
CiAgICAgICAgICAgICBpZiAoaW5pdC5jYW5kaWRhdGUuaXNFbXB0eSgpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL1JUQ1J0cFRyYW5zZm9ybS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL1JUQ1J0cFRyYW5zZm9ybS5jcHAKaW5kZXggZGFmODk3ZWE0NzIxODZkNmNj
N2I3YWQ2MjJkZmY2NmZhNjE3NzU2Yi4uMDFmMGUwMWNiZDQ1Y2M2MjI3NTUxNGIwNmFmMzNlOTlk
MjYwMjdjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9S
VENSdHBUcmFuc2Zvcm0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vUlRDUnRwVHJhbnNmb3JtLmNwcApAQCAtNTIsNyArNTIsNyBAQCBSVENSdHBUcmFuc2Zvcm06
On5SVENSdHBUcmFuc2Zvcm0oKQogCiBib29sIFJUQ1J0cFRyYW5zZm9ybTo6aXNBdHRhY2hlZCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN3aXRjaE9uKG1fdHJhbnNmb3JtLCBbJl0oY29uc3QgUmVm
UHRyPFJUQ1J0cFNGcmFtZVRyYW5zZm9ybT4mIHNmcmFtZVRyYW5zZm9ybSkgeworICAgIHJldHVy
biBXVEY6OnN3aXRjaE9uKG1fdHJhbnNmb3JtLCBbJl0oY29uc3QgUmVmUHRyPFJUQ1J0cFNGcmFt
ZVRyYW5zZm9ybT4mIHNmcmFtZVRyYW5zZm9ybSkgewogICAgICAgICByZXR1cm4gc2ZyYW1lVHJh
bnNmb3JtLT5pc0F0dGFjaGVkKCk7CiAgICAgfSwgWyZdKGNvbnN0IFJlZlB0cjxSVENSdHBTY3Jp
cHRUcmFuc2Zvcm0+JiBzY3JpcHRUcmFuc2Zvcm0pIHsKICAgICAgICAgcmV0dXJuIHNjcmlwdFRy
YW5zZm9ybS0+aXNBdHRhY2hlZCgpOwpAQCAtMTMxLDE0ICsxMzEsMTQgQEAgdm9pZCBSVENSdHBU
cmFuc2Zvcm06OmRldGFjaEZyb21TZW5kZXIoUlRDUnRwU2VuZGVyJikKIAogYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFJUQ1J0cFRyYW5zZm9ybSYgYSwgY29uc3QgUlRDUnRwVHJhbnNmb3JtJiBiKQog
ewotICAgIHJldHVybiBzd2l0Y2hPbihhLm1fdHJhbnNmb3JtLCBbJl0oY29uc3QgUmVmUHRyPFJU
Q1J0cFNGcmFtZVRyYW5zZm9ybT4mIHNmcmFtZVRyYW5zZm9ybUEpIHsKLSAgICAgICAgcmV0dXJu
IHN3aXRjaE9uKGIubV90cmFuc2Zvcm0sIFsmXShjb25zdCBSZWZQdHI8UlRDUnRwU0ZyYW1lVHJh
bnNmb3JtPiYgc2ZyYW1lVHJhbnNmb3JtQikgeworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGEu
bV90cmFuc2Zvcm0sIFsmXShjb25zdCBSZWZQdHI8UlRDUnRwU0ZyYW1lVHJhbnNmb3JtPiYgc2Zy
YW1lVHJhbnNmb3JtQSkgeworICAgICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihiLm1fdHJhbnNm
b3JtLCBbJl0oY29uc3QgUmVmUHRyPFJUQ1J0cFNGcmFtZVRyYW5zZm9ybT4mIHNmcmFtZVRyYW5z
Zm9ybUIpIHsKICAgICAgICAgICAgIHJldHVybiBzZnJhbWVUcmFuc2Zvcm1BLmdldCgpID09IHNm
cmFtZVRyYW5zZm9ybUIuZ2V0KCk7CiAgICAgICAgIH0sIFsmXShjb25zdCBSZWZQdHI8UlRDUnRw
U2NyaXB0VHJhbnNmb3JtPiYpIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fSk7CiAgICAgfSwgWyZdKGNvbnN0IFJlZlB0cjxSVENSdHBTY3JpcHRUcmFuc2Zvcm0+JiBzY3Jp
cHRUcmFuc2Zvcm1BKSB7Ci0gICAgICAgIHJldHVybiBzd2l0Y2hPbihiLm1fdHJhbnNmb3JtLCBb
Jl0oY29uc3QgUmVmUHRyPFJUQ1J0cFNGcmFtZVRyYW5zZm9ybT4mKSB7CisgICAgICAgIHJldHVy
biBXVEY6OnN3aXRjaE9uKGIubV90cmFuc2Zvcm0sIFsmXShjb25zdCBSZWZQdHI8UlRDUnRwU0Zy
YW1lVHJhbnNmb3JtPiYpIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSwg
WyZdKGNvbnN0IFJlZlB0cjxSVENSdHBTY3JpcHRUcmFuc2Zvcm0+JiBzY3JpcHRUcmFuc2Zvcm1C
KSB7CiAgICAgICAgICAgICByZXR1cm4gc2NyaXB0VHJhbnNmb3JtQS5nZXQoKSA9PSBzY3JpcHRU
cmFuc2Zvcm1CLmdldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDUnRwU2VuZGVyQmFja2VuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENSdHBTZW5kZXJC
YWNrZW5kLmNwcAppbmRleCBkMDA3MTgyYWUxNzYyNDAxNDViZjRmMjEwZGMyZDhmOWZhZTExOTNh
Li5jOTk5MjIwM2E1YmQ1ZDE3OTI5OWFmODc2OTU4NWEyZTIxNjJlZWY2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENSdHBT
ZW5kZXJCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L2xpYndlYnJ0Yy9MaWJXZWJSVENSdHBTZW5kZXJCYWNrZW5kLmNwcApAQCAtNTksMTcgKzU5LDYg
QEAgTGliV2ViUlRDUnRwU2VuZGVyQmFja2VuZDo6fkxpYldlYlJUQ1J0cFNlbmRlckJhY2tlbmQo
KQogICAgIHN0b3BTb3VyY2UoKTsKIH0KIAotc3RhdGljIGJvb2wgb3BlcmF0b3I9PShjb25zdCBM
aWJXZWJSVENSdHBTZW5kZXJCYWNrZW5kOjpTb3VyY2UmIGEsIGNvbnN0IExpYldlYlJUQ1J0cFNl
bmRlckJhY2tlbmQ6OlNvdXJjZSYgYikKLXsKLSAgICByZXR1cm4gc3dpdGNoT24oYSwgWyZiXShj
b25zdCBSZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlPiYgc291cmNlKSB7Ci0gICAgICAg
IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxSZWFsdGltZU91dGdvaW5nQXVkaW9T
b3VyY2U+PihiKSAmJiBzb3VyY2UucHRyKCkgPT0gV1RGOjpnZXQ8UmVmPFJlYWx0aW1lT3V0Z29p
bmdBdWRpb1NvdXJjZT4+KGIpLnB0cigpOwotICAgIH0sIFsmYl0oY29uc3QgUmVmPFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZT4mIHNvdXJjZSkgewotICAgICAgICByZXR1cm4gV1RGOjpob2xk
c19hbHRlcm5hdGl2ZTxSZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlPj4oYikgJiYgc291
cmNlLnB0cigpID09IFdURjo6Z2V0PFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U+Pihi
KS5wdHIoKTsKLSAgICB9LCBbJmJdKHN0ZDo6bnVsbHB0cl90KSB7Ci0gICAgICAgIHJldHVybiBX
VEY6OmhvbGRzX2FsdGVybmF0aXZlPHN0ZDo6bnVsbHB0cl90PihiKTsKLSAgICB9KTsKLX0KLQog
dm9pZCBMaWJXZWJSVENSdHBTZW5kZXJCYWNrZW5kOjpzdGFydFNvdXJjZSgpCiB7CiAgICAgLy8g
V2UgYXN5bmNocm9ub3VzbHkgc3RhcnQgdGhlIHNvdXJjZXMgdG8gZ3VhcmFudGVlIG1lZGlhIGdv
ZXMgdGhyb3VnaCB0aGUgdHJhbnNmb3JtIGlmIGEgdHJhbnNmb3JtIGlzIHNldCB3aGVuIGNyZWF0
aW5nIHRoZSB0cmFjay4KQEAgLTE4NCw3ICsxNzMsNyBAQCB2b2lkIExpYldlYlJUQ1J0cFNlbmRl
ckJhY2tlbmQ6OnNldE1lZGlhU3RyZWFtSWRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzdHJlYW1J
ZAogCiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UqIExpYldlYlJUQ1J0cFNlbmRlckJhY2tl
bmQ6OnZpZGVvU291cmNlKCkKIHsKLSAgICByZXR1cm4gc3dpdGNoT24obV9zb3VyY2UsCisgICAg
cmV0dXJuIFdURjo6c3dpdGNoT24obV9zb3VyY2UsCiAgICAgICAgIFtdKFJlZjxSZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2U+JiBzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5wdHIoKTsgfSwKICAg
ICAgICAgW10oY29uc3QgYXV0byYpIC0+IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZSogeyBy
ZXR1cm4gbnVsbHB0cjsgfQogICAgICk7CkBAIC0xOTIsNyArMTgxLDcgQEAgUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlKiBMaWJXZWJSVENSdHBTZW5kZXJCYWNrZW5kOjp2aWRlb1NvdXJjZSgp
CiAKIGJvb2wgTGliV2ViUlRDUnRwU2VuZGVyQmFja2VuZDo6aGFzU291cmNlKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gc3dpdGNoT24obV9zb3VyY2UsCisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24o
bV9zb3VyY2UsCiAgICAgICAgIFtdKGNvbnN0IHN0ZDo6bnVsbHB0cl90JikgeyByZXR1cm4gZmFs
c2U7IH0sCiAgICAgICAgIFtdKGNvbnN0IGF1dG8mKSB7IHJldHVybiB0cnVlOyB9CiAgICAgKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJGcmFtZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSRnJhbWUuY3BwCmluZGV4IDdlN2Y2
OWRjNWE4NTY5YjQ2Mzc0MWU2NzA0ZDVhZTY2MDAzYWU4NTUuLmNkNzFiMzkxMTU3ODU1OWI5YWZi
ZDQzODM4NDYyMTI0M2JkNTkwM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2VieHIvV2ViWFJGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9X
ZWJYUkZyYW1lLmNwcApAQCAtMTg0LDcgKzE4NCw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxXZWJY
UlZpZXdlclBvc2U+PiBXZWJYUkZyYW1lOjpnZXRWaWV3ZXJQb3NlKGNvbnN0IERvY3VtZW50JiBk
CiAgICAgICAgIGF1dG8gdHJhbnNmb3JtID0gV2ViWFJSaWdpZFRyYW5zZm9ybTo6Y3JlYXRlKHBv
c2UtPnRyYW5zZm9ybSgpLnJhd1RyYW5zZm9ybSgpICogb2Zmc2V0KTsKIAogICAgICAgICAvLyBT
ZXQgcHJvamVjdGlvbiBtYXRyaXggZm9yIGVhY2ggdmlldwotICAgICAgICBzdGQ6OmFycmF5PGZs
b2F0LCAxNj4gcHJvamVjdGlvbiA9IHN3aXRjaE9uKGZyYW1lRGF0YS52aWV3c1tpbmRleF0ucHJv
amVjdGlvbiwgWyZdKGNvbnN0IFBsYXRmb3JtWFI6OkRldmljZTo6RnJhbWVEYXRhOjpGb3YmIGZv
dikgeworICAgICAgICBzdGQ6OmFycmF5PGZsb2F0LCAxNj4gcHJvamVjdGlvbiA9IFdURjo6c3dp
dGNoT24oZnJhbWVEYXRhLnZpZXdzW2luZGV4XS5wcm9qZWN0aW9uLCBbJl0oY29uc3QgUGxhdGZv
cm1YUjo6RGV2aWNlOjpGcmFtZURhdGE6OkZvdiYgZm92KSB7CiAgICAgICAgICAgICBkb3VibGUg
bmVhciA9IG1fc2Vzc2lvbi0+cmVuZGVyU3RhdGUoKS5kZXB0aE5lYXIoKTsKICAgICAgICAgICAg
IGRvdWJsZSBmYXIgPSBtX3Nlc3Npb24tPnJlbmRlclN0YXRlKCkuZGVwdGhGYXIoKTsKICAgICAg
ICAgICAgIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6ZnJvbVByb2plY3Rpb24oZm92LnVw
LCBmb3YuZG93biwgZm92LmxlZnQsIGZvdi5yaWdodCwgbmVhciwgZmFyKS50b0NvbHVtbk1ham9y
RmxvYXRBcnJheSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9p
c29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcAppbmRleCBlYmE1MTkyNzI2
MmRjYjQ1M2NjMjM0ODgwYjM3ZTk3OTQwMTZmZmMwLi5jNzE2YjNiN2ZlMWViMmRjMzQ5NGI2NTk3
YjU3MzBjMWM0ODBhNTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcApAQCAtNzgxLDcg
Kzc4MSw3IEBAIEludFBvaW50IEFYSXNvbGF0ZWRPYmplY3Q6OmludFBvaW50QXR0cmlidXRlVmFs
dWUoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjCiB7CiAgICAgYXV0byB2YWx1ZSA9IG1f
cHJvcGVydHlNYXAuZ2V0KHByb3BlcnR5TmFtZSk7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24o
dmFsdWUsCi0gICAgICAgIFtdIChJbnRQb2ludCYgdHlwZWRWYWx1ZSkgeyByZXR1cm4gdHlwZWRW
YWx1ZTsgfSwKKyAgICAgICAgW10gKEludFBvaW50JiB0eXBlZFZhbHVlKSAtPiBJbnRQb2ludCB7
IHJldHVybiB0eXBlZFZhbHVlOyB9LAogICAgICAgICBbXSAoYXV0byYpIHsgcmV0dXJuIEludFBv
aW50KCk7IH0KICAgICApOwogfQpAQCAtNzkwLDcgKzc5MCw3IEBAIEFYQ29yZU9iamVjdCogQVhJ
c29sYXRlZE9iamVjdDo6b2JqZWN0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lCiB7CiAgICAgYXV0byB2YWx1ZSA9IG1fcHJvcGVydHlNYXAuZ2V0KHByb3BlcnR5TmFt
ZSk7CiAgICAgQVhJRCBub2RlSUQgPSBXVEY6OnN3aXRjaE9uKHZhbHVlLAotICAgICAgICBbXSAo
QVhJRCYgdHlwZWRWYWx1ZSkgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKKyAgICAgICAgW10gKEFY
SUQmIHR5cGVkVmFsdWUpIC0+IEFYSUQgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKICAgICAgICAg
W10gKGF1dG8mKSB7IHJldHVybiBJbnZhbGlkQVhJRDsgfQogICAgICk7CiAKQEAgLTgwMiw3ICs4
MDIsNyBAQCBUIEFYSXNvbGF0ZWRPYmplY3Q6OnJlY3RBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7CiAgICAgYXV0byB2YWx1ZSA9IG1fcHJvcGVydHlN
YXAuZ2V0KHByb3BlcnR5TmFtZSk7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24odmFsdWUsCi0g
ICAgICAgIFtdIChUJiB0eXBlZFZhbHVlKSB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAorICAgICAg
ICBbXSAoVCYgdHlwZWRWYWx1ZSkgLT4gVCB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAogICAgICAg
ICBbXSAoYXV0byYpIHsgcmV0dXJuIFQgeyB9OyB9CiAgICAgKTsKIH0KQEAgLTgxMiw3ICs4MTIs
NyBAQCBWZWN0b3I8VD4gQVhJc29sYXRlZE9iamVjdDo6dmVjdG9yQXR0cmlidXRlVmFsdWUoQVhQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjbwogewogICAgIGF1dG8gdmFsdWUgPSBtX3Byb3Bl
cnR5TWFwLmdldChwcm9wZXJ0eU5hbWUpOwogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHZhbHVl
LAotICAgICAgICBbXSAoVmVjdG9yPFQ+JiB0eXBlZFZhbHVlKSB7IHJldHVybiB0eXBlZFZhbHVl
OyB9LAorICAgICAgICBbXSAoVmVjdG9yPFQ+JiB0eXBlZFZhbHVlKSAtPiBWZWN0b3I8VD4geyBy
ZXR1cm4gdHlwZWRWYWx1ZTsgfSwKICAgICAgICAgW10gKGF1dG8mKSB7IHJldHVybiBWZWN0b3I8
VD4oKTsgfQogICAgICk7CiB9CkBAIC04MjIsNyArODIyLDcgQEAgT3B0aW9uU2V0PFQ+IEFYSXNv
bGF0ZWRPYmplY3Q6Om9wdGlvblNldEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmEKIHsKICAgICBhdXRvIHZhbHVlID0gbV9wcm9wZXJ0eU1hcC5nZXQocHJvcGVydHlOYW1l
KTsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbih2YWx1ZSwKLSAgICAgICAgW10gKFQmIHR5cGVk
VmFsdWUpIHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCisgICAgICAgIFtdIChUJiB0eXBlZFZhbHVl
KSAtPiBPcHRpb25TZXQ8VD4geyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKICAgICAgICAgW10gKGF1
dG8mKSB7IHJldHVybiBPcHRpb25TZXQ8VD4oKTsgfQogICAgICk7CiB9CkBAIC04MzIsNyArODMy
LDcgQEAgc3RkOjpwYWlyPFQsIFQ+IEFYSXNvbGF0ZWRPYmplY3Q6OnBhaXJBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUKIHsKICAgICBhdXRvIHZhbHVlID0gbV9wcm9w
ZXJ0eU1hcC5nZXQocHJvcGVydHlOYW1lKTsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbih2YWx1
ZSwKLSAgICAgICAgW10gKHN0ZDo6cGFpcjxULCBUPiYgdHlwZWRWYWx1ZSkgeyByZXR1cm4gdHlw
ZWRWYWx1ZTsgfSwKKyAgICAgICAgW10gKHN0ZDo6cGFpcjxULCBUPiYgdHlwZWRWYWx1ZSkgLT4g
c3RkOjpwYWlyPFQsIFQ+IHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCiAgICAgICAgIFtdIChhdXRv
JikgeyByZXR1cm4gc3RkOjpwYWlyPFQsIFQ+KDAsIDEpOyB9CiAgICAgKTsKIH0KQEAgLTg0MSw4
ICs4NDEsOCBAQCB1aW50NjRfdCBBWElzb2xhdGVkT2JqZWN0Ojp1aW50NjRBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbgogewogICAgIGF1dG8gdmFsdWUgPSBt
X3Byb3BlcnR5TWFwLmdldChwcm9wZXJ0eU5hbWUpOwogICAgIHJldHVybiBXVEY6OnN3aXRjaE9u
KHZhbHVlLAotICAgICAgICBbXSAodWludDY0X3QmIHR5cGVkVmFsdWUpIHsgcmV0dXJuIHR5cGVk
VmFsdWU7IH0sCi0gICAgICAgIFtdIChhdXRvJikgeyByZXR1cm4gMDsgfQorICAgICAgICBbXSAo
dWludDY0X3QmIHR5cGVkVmFsdWUpIC0+IHVpbnQ2NF90IHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0s
CisgICAgICAgIFtdIChhdXRvJikgLT4gdWludDY0X3QgeyByZXR1cm4gMDsgfQogICAgICk7CiB9
CiAKQEAgLTg1MCw3ICs4NTAsNyBAQCBVUkwgQVhJc29sYXRlZE9iamVjdDo6dXJsQXR0cmlidXRl
VmFsdWUoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAogewogICAgIGF1dG8gdmFs
dWUgPSBtX3Byb3BlcnR5TWFwLmdldChwcm9wZXJ0eU5hbWUpOwogICAgIHJldHVybiBXVEY6OnN3
aXRjaE9uKHZhbHVlLAotICAgICAgICBbXSAoVVJMJiB0eXBlZFZhbHVlKSB7IHJldHVybiB0eXBl
ZFZhbHVlOyB9LAorICAgICAgICBbXSAoVVJMJiB0eXBlZFZhbHVlKSAtPiBVUkwgeyByZXR1cm4g
dHlwZWRWYWx1ZTsgfSwKICAgICAgICAgW10gKGF1dG8mKSB7IHJldHVybiBVUkwoKTsgfQogICAg
ICk7CiB9CkBAIC04NTksNyArODU5LDcgQEAgUGF0aCBBWElzb2xhdGVkT2JqZWN0OjpwYXRoQXR0
cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAogewogICAgIGF1
dG8gdmFsdWUgPSBtX3Byb3BlcnR5TWFwLmdldChwcm9wZXJ0eU5hbWUpOwogICAgIHJldHVybiBX
VEY6OnN3aXRjaE9uKHZhbHVlLAotICAgICAgICBbXSAoUGF0aCYgdHlwZWRWYWx1ZSkgeyByZXR1
cm4gdHlwZWRWYWx1ZTsgfSwKKyAgICAgICAgW10gKFBhdGgmIHR5cGVkVmFsdWUpIC0+IFBhdGgg
eyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKICAgICAgICAgW10gKGF1dG8mKSB7IHJldHVybiBQYXRo
KCk7IH0KICAgICApOwogfQpAQCAtODY4LDcgKzg2OCw3IEBAIENvbG9yIEFYSXNvbGF0ZWRPYmpl
Y3Q6OmNvbG9yQXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25z
dAogewogICAgIGF1dG8gdmFsdWUgPSBtX3Byb3BlcnR5TWFwLmdldChwcm9wZXJ0eU5hbWUpOwog
ICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHZhbHVlLAotICAgICAgICBbXSAoQ29sb3ImIHR5cGVk
VmFsdWUpIHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCisgICAgICAgIFtdIChDb2xvciYgdHlwZWRW
YWx1ZSkgLT4gQ29sb3IgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKICAgICAgICAgW10gKGF1dG8m
KSB7IHJldHVybiBDb2xvcigpOyB9CiAgICAgKTsKIH0KQEAgLTg3Nyw4ICs4NzcsOCBAQCBmbG9h
dCBBWElzb2xhdGVkT2JqZWN0OjpmbG9hdEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSkgY29uc3QKIHsKICAgICBhdXRvIHZhbHVlID0gbV9wcm9wZXJ0eU1hcC5nZXQo
cHJvcGVydHlOYW1lKTsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbih2YWx1ZSwKLSAgICAgICAg
W10gKGZsb2F0JiB0eXBlZFZhbHVlKSB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAotICAgICAgICBb
XSAoYXV0byYpIHsgcmV0dXJuIDA7IH0KKyAgICAgICAgW10gKGZsb2F0JiB0eXBlZFZhbHVlKSAt
PiBmbG9hdCB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAorICAgICAgICBbXSAoYXV0byYpIHsgcmV0
dXJuIDAuMGY7IH0KICAgICApOwogfQogCkBAIC04ODYsOCArODg2LDggQEAgZG91YmxlIEFYSXNv
bGF0ZWRPYmplY3Q6OmRvdWJsZUF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSkgY29uc3QKIHsKICAgICBhdXRvIHZhbHVlID0gbV9wcm9wZXJ0eU1hcC5nZXQocHJvcGVy
dHlOYW1lKTsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbih2YWx1ZSwKLSAgICAgICAgW10gKGRv
dWJsZSYgdHlwZWRWYWx1ZSkgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKLSAgICAgICAgW10gKGF1
dG8mKSB7IHJldHVybiAwOyB9CisgICAgICAgIFtdIChkb3VibGUmIHR5cGVkVmFsdWUpIC0+IGRv
dWJsZSB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAorICAgICAgICBbXSAoYXV0byYpIHsgcmV0dXJu
IDAuMDsgfQogICAgICk7CiB9CiAKQEAgLTg5NSw4ICs4OTUsOCBAQCB1bnNpZ25lZCBBWElzb2xh
dGVkT2JqZWN0Ojp1bnNpZ25lZEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSkgYwogewogICAgIGF1dG8gdmFsdWUgPSBtX3Byb3BlcnR5TWFwLmdldChwcm9wZXJ0eU5h
bWUpOwogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHZhbHVlLAotICAgICAgICBbXSAodW5zaWdu
ZWQmIHR5cGVkVmFsdWUpIHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCi0gICAgICAgIFtdIChhdXRv
JikgeyByZXR1cm4gMDsgfQorICAgICAgICBbXSAodW5zaWduZWQmIHR5cGVkVmFsdWUpIC0+IHVu
c2lnbmVkIHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCisgICAgICAgIFtdIChhdXRvJikgeyByZXR1
cm4gMHU7IH0KICAgICApOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9CdWZmZXJTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1ZmZlclNv
dXJjZS5oCmluZGV4IDkwZTQ3YzllZTUwNGRmNjRiMzM0MzNkNzUwNWM4NGZiNzQzMGZmYjguLmIy
ZjFjNjM1ZmJmNzdkNDRjZDYyMjJjMDQ0MTA4YzEzNTE1ZmI0MWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5oCkBAIC00NSwxNCArNDUsMTQgQEAgcHVibGljOgog
CiAgICAgY29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
V1RGOjp2aXNpdChbXShhdXRvJiBidWZmZXIpIC0+IGNvbnN0IHVpbnQ4X3QqIHsKKyAgICAgICAg
cmV0dXJuIHN0ZDo6dmlzaXQoW10oYXV0byYgYnVmZmVyKSAtPiBjb25zdCB1aW50OF90KiB7CiAg
ICAgICAgICAgICByZXR1cm4gYnVmZmVyID8gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1
ZmZlci0+ZGF0YSgpKSA6IG51bGxwdHI7CiAgICAgICAgIH0sIG1fdmFyaWFudCk7CiAgICAgfQog
CiAgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gV1RGOjp2
aXNpdChbXShhdXRvJiBidWZmZXIpIC0+IHNpemVfdCB7CisgICAgICAgIHJldHVybiBzdGQ6OnZp
c2l0KFtdKGF1dG8mIGJ1ZmZlcikgLT4gc2l6ZV90IHsKICAgICAgICAgICAgIHJldHVybiBidWZm
ZXIgPyBidWZmZXItPmJ5dGVMZW5ndGgoKSA6IDA7CiAgICAgICAgIH0sIG1fdmFyaWFudCk7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0
aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0
aWVzLmNwcAppbmRleCBiYWVkZDBjMDY5Y2EyODFiMjk4NDcxZTMwYjY5NzRiNTI1NmQzMzBlLi5i
MmY0YjlmZTYxNWVjYjIxMzYzY2Y1ODNkYzczNWNmNzdjMzA2MDhiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcApAQCAtNDY5LDcg
KzQ2OSw3IEBAIHN0YXRpYyBWZWN0b3I8SURCS2V5RGF0YT4gY3JlYXRlS2V5UGF0aEFycmF5KEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0CiAgICAgICAgIHJldHVybiBrZXlzOwog
ICAgIH0pOwogCi0gICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgaW5mby5rZXlQYXRoKCkp
OworICAgIHJldHVybiBzdGQ6OnZpc2l0KHZpc2l0b3IsIGluZm8ua2V5UGF0aCgpKTsKIH0KIAog
dm9pZCBnZW5lcmF0ZUluZGV4S2V5Rm9yVmFsdWUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgSlNWYWx1ZSB2YWx1ZSwgSW5kZXhL
ZXkmIG91dEtleSwgY29uc3Qgc3RkOjpvcHRpb25hbDxJREJLZXlQYXRoPiYgb2JqZWN0U3RvcmVL
ZXlQYXRoLCBjb25zdCBJREJLZXlEYXRhJiBvYmplY3RTdG9yZUtleSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFVuaW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRVbmlvbi5oCmluZGV4IDA3NjIxMWE3NmU0YTM3
YTg1NGRkZDllMDY4NWE3MWM2ODMyMmVhZTQuLmE0YmQ2YWVlMzAwZDYyY2M5ZDY1MzIwNjNmMzY2
ZGIwMTk5NTFlYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
Q29udmVydFVuaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252
ZXJ0VW5pb24uaApAQCAtMzg1LDcgKzM4NSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gewogICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSB0cnVlOwogCi0gICAgdXNpbmcgU2VxdWVuY2UgPSBicmlnYW5kOjptYWtl
X3NlcXVlbmNlPGJyaWdhbmQ6OnB0cmRpZmZfdDwwPiwgV1RGOjp2YXJpYW50X3NpemU8SW1wbGVt
ZW50YXRpb25UeXBlPjo6dmFsdWU+OworICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFr
ZV9zZXF1ZW5jZTxicmlnYW5kOjpwdHJkaWZmX3Q8MD4sIHN0ZDo6dmFyaWFudF9zaXplPEltcGxl
bWVudGF0aW9uVHlwZT46OnZhbHVlPjsKIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBJbXBsZW1lbnRhdGlvblR5cGUmIHZhcmlhbnQpCiAg
ICAgewpAQCAtMzk2LDcgKzM5Niw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gewogICAgICAgICAgICAgdXNpbmcgSSA9IHR5cGVu
YW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBl
OwogICAgICAgICAgICAgaWYgKEk6OnZhbHVlID09IGluZGV4KSB7CiAgICAgICAgICAgICAgICAg
QVNTRVJUKCFyZXR1cm5WYWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0b0pT
PGJyaWdhbmQ6OmF0PFR5cGVMaXN0LCBJPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOworICAgICAgICAgICAgICAgIHJldHVy
blZhbHVlID0gdG9KUzxicmlnYW5kOjphdDxUeXBlTGlzdCwgST4+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIGdsb2JhbE9iamVjdCwgc3RkOjpnZXQ8STo6dmFsdWU+KHZhcmlhbnQpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQ29udmVydFdlYkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQ29udmVydFdlYkdMLmNwcAppbmRleCBkZDI5Njg4YzJiYzZjODgwMDU0ZTE4N2YxZDMwOWFh
ODkwNjJlODg2Li45MjJhYTcxMzdmOTQ1MjI0MDBiYTkwY2Q5N2U3ZTg1ZjUyOWFlYjQ4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRXZWJHTC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0V2ViR0wuY3BwCkBA
IC04MCw0OSArODAsMzkgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIEpTVmFsdWUgY29udmVydFRv
SlNWYWx1ZShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xBbnkmIGFueSkKIHsKICAgICByZXR1cm4g
V1RGOjpzd2l0Y2hPbihhbnksCi0gICAgICAgIFtdIChzdGQ6Om51bGxwdHJfdCkgeworICAgICAg
ICBbXSAoc3RkOjpudWxscHRyX3QpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOwotICAgICAgICB9LAotICAgICAgICBbXSAoYm9vbCB2YWx1ZSkgeworICAgICAgICB9
LCBbXSAoYm9vbCB2YWx1ZSkgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4ganNCb29s
ZWFuKHZhbHVlKTsKLSAgICAgICAgfSwKLSAgICAgICAgW10gKGludCB2YWx1ZSkgeworICAgICAg
ICB9LCBbXSAoaW50IHZhbHVlKSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiBqc051
bWJlcih2YWx1ZSk7Ci0gICAgICAgIH0sCi0gICAgICAgIFtdICh1bnNpZ25lZCB2YWx1ZSkgewor
ICAgICAgICB9LCBbXSAodW5zaWduZWQgdmFsdWUpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAg
cmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsKLSAgICAgICAgfSwKLSAgICAgICAgW10gKGxvbmcgbG9u
ZyB2YWx1ZSkgeworICAgICAgICB9LCBbXSAobG9uZyBsb25nIHZhbHVlKSAtPiBKU1ZhbHVlIHsK
ICAgICAgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7Ci0gICAgICAgIH0sCi0gICAgICAg
IFtdIChmbG9hdCB2YWx1ZSkgeworICAgICAgICB9LCBbXSAoZmxvYXQgdmFsdWUpIC0+IEpTVmFs
dWUgewogICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsKLSAgICAgICAgfSwKLSAg
ICAgICAgWyZdIChjb25zdCBTdHJpbmcmIHZhbHVlKSB7CisgICAgICAgIH0sIFsmXSAoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4ganNTdHJpbmdX
aXRoQ2FjaGUobGV4aWNhbEdsb2JhbE9iamVjdC52bSgpLCB2YWx1ZSk7Ci0gICAgICAgIH0sCi0g
ICAgICAgIFsmXSAoY29uc3QgVmVjdG9yPGJvb2w+JiB2YWx1ZXMpIHsKKyAgICAgICAgfSwgWyZd
IChjb25zdCBWZWN0b3I8Ym9vbD4mIHZhbHVlcykgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwogICAgICAgICAgICAgZm9yIChhdXRvJiB2YWx1ZSA6
IHZhbHVlcykKICAgICAgICAgICAgICAgICBsaXN0LmFwcGVuZChqc0Jvb2xlYW4odmFsdWUpKTsK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFsaXN0Lmhhc092ZXJmbG93ZWQoKSk7CiAgICAg
ICAgICAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoJmdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8
SlNDOjpBcnJheUFsbG9jYXRpb25Qcm9maWxlKj4obnVsbHB0ciksIGxpc3QpOwotICAgICAgICB9
LAotICAgICAgICBbJl0gKGNvbnN0IFZlY3RvcjxpbnQ+JiB2YWx1ZXMpIHsKKyAgICAgICAgfSwg
WyZdIChjb25zdCBWZWN0b3I8aW50PiYgdmFsdWVzKSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAg
IE1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHZhbHVl
IDogdmFsdWVzKQogICAgICAgICAgICAgICAgIGxpc3QuYXBwZW5kKGpzTnVtYmVyKHZhbHVlKSk7
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbGlzdC5oYXNPdmVyZmxvd2VkKCkpOwogICAg
ICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KCZnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0
PEpTQzo6QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSo+KG51bGxwdHIpLCBsaXN0KTsKLSAgICAgICAg
fSwKLSAgICAgICAgWyZdIChjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiB2YWx1ZXMpIHsKKyAgICAg
ICAgfSwgWyZdIChjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiB2YWx1ZXMpIC0+IEpTVmFsdWUgewog
ICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKICAgICAgICAgICAgIGZvciAo
YXV0byYgdmFsdWUgOiB2YWx1ZXMpCiAgICAgICAgICAgICAgICAgbGlzdC5hcHBlbmQoanNOdW1i
ZXIodmFsdWUpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFsaXN0Lmhhc092ZXJmbG93
ZWQoKSk7CiAgICAgICAgICAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoJmdsb2JhbE9iamVjdCwg
c3RhdGljX2Nhc3Q8SlNDOjpBcnJheUFsbG9jYXRpb25Qcm9maWxlKj4obnVsbHB0ciksIGxpc3Qp
OwotICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxGbG9hdDMyQXJyYXk+JiBh
cnJheSkgeworICAgICAgICB9LCBbJl0gKGNvbnN0IFJlZlB0cjxGbG9hdDMyQXJyYXk+JiBhcnJh
eSkgewogICAgICAgICAgICAgcmV0dXJuIHRvSlMoJmxleGljYWxHbG9iYWxPYmplY3QsICZnbG9i
YWxPYmplY3QsIGFycmF5LmdldCgpKTsKICAgICAgICAgfSwKICAgICAgICAgWyZdIChjb25zdCBS
ZWZQdHI8SW50MzJBcnJheT4mIGFycmF5KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudEN1c3RvbS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudEN1c3RvbS5jcHAK
aW5kZXggMGJkMWQ0ZDFhZDg1NTJlZDc0M2JjYWIyZTFiOGYyYTMwZDYwNTlmMC4uZWFiZWJiMzI4
MWFlZTNlZDliMGNhYTdhYmRkMmVkMDU2YTNkYzE1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnRDdXN0b20uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Q3Vz
dG9tLmNwcApAQCAtMzMsOSArMzMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBKU0M6OkpTVmFs
dWUgSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6Om1ldGhvZERldGFpbHMoSlNDOjpKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVk
UHJvcGVydHlWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpcywgd3JhcHBlZCgpLmNhY2hl
ZE1ldGhvZERldGFpbHMoKSwgW3RoaXMsICZsZXhpY2FsR2xvYmFsT2JqZWN0XSB7Ci0gICAgICAg
IHJldHVybiBXVEY6OnN3aXRjaE9uKHdyYXBwZWQoKS5tZXRob2REZXRhaWxzKCksIFtdKEpTQzo6
SlNWYWx1ZSBtZXRob2REZXRhaWxzKSB7CisgICAgICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHdy
YXBwZWQoKS5tZXRob2REZXRhaWxzKCksIFtdKEpTQzo6SlNWYWx1ZSBtZXRob2REZXRhaWxzKSAt
PiBKU0M6OkpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIG1ldGhvZERldGFpbHMgPyBtZXRo
b2REZXRhaWxzIDogSlNDOjpqc051bGwoKTsKLSAgICAgICAgfSwgWyZsZXhpY2FsR2xvYmFsT2Jq
ZWN0XShjb25zdCBQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6Ok1ldGhvZERldGFpbHNGdW5jdGlv
biYgZnVuY3Rpb24pIHsKKyAgICAgICAgfSwgWyZsZXhpY2FsR2xvYmFsT2JqZWN0XShjb25zdCBQ
YXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6Ok1ldGhvZERldGFpbHNGdW5jdGlvbiYgZnVuY3Rpb24p
IC0+IEpTQzo6SlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24obGV4aWNhbEds
b2JhbE9iamVjdCkuZ2V0KCk7CiAgICAgICAgIH0pOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5oCmluZGV4IGQ3ZTUy
YjFiMWQxNmQyY2IxNzIyOTQzYTJiNmUwOGRhNTI0M2QzM2YuLmU0Y2NkYmE2MmQ4NDgzYTc0MGNh
N2EwNDNkMmJhZWM5Y2M1MTZhZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTVmFsdWVJbldyYXBwZWRPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1ZhbHVlSW5XcmFwcGVkT2JqZWN0LmgKQEAgLTgyLDcgKzgyLDcgQEAgaW5saW5lIEpT
VmFsdWVJbldyYXBwZWRPYmplY3Q6Om9wZXJhdG9yIEpTQzo6SlNWYWx1ZSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV92YWx1ZSwgW10gKEpTQzo6SlNWYWx1ZSB2YWx1ZSkg
ewogICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfSwgW10gKGNvbnN0IFdlYWsmIHZhbHVlKSB7
CisgICAgfSwgW10gKGNvbnN0IFdlYWsmIHZhbHVlKSAtPiBKU0M6OkpTVmFsdWUgewogICAgICAg
ICByZXR1cm4gdmFsdWUuZ2V0KCk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCmluZGV4IDljOTNhMjA3MjQ4OTllNjJlNDc3
ZGZhNGE0M2MzNDgyNjA2OGRiOWQuLjQ0OGNkMjhjOTE2NjQ4MjU4YjFlNThiZTdlYmQwMzVjM2I0
YTRkZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQ
YXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXIuY3BwCkBAIC05MTgsNyArOTE4LDcgQEAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY29uc3VtZUZvbnRWYXJpYW50Q1NTMjEoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmEKIHN0YXRp
YyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0KENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlKQogewogICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250V2Vp
Z2h0UmF3KHJhbmdlKSkgewotICAgICAgICByZXR1cm4gc3dpdGNoT24oKnJlc3VsdCwgW10gKENT
U1ZhbHVlSUQgdmFsdWVJRCkgeworICAgICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbigqcmVzdWx0
LCBbXSAoQ1NTVmFsdWVJRCB2YWx1ZUlEKSB7CiAgICAgICAgICAgICByZXR1cm4gQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWVJRCk7CiAgICAgICAg
IH0sIFtdIChkb3VibGUgd2VpZ2h0TnVtYmVyKSB7CiAgICAgICAgICAgICByZXR1cm4gQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZSh3ZWlnaHROdW1iZXIsIENTU1VuaXRUeXBl
OjpDU1NfTlVNQkVSKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy90eXBlZG9tL0NT
U1VucGFyc2VkVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL3R5cGVkb20vQ1NTVW5wYXJz
ZWRWYWx1ZS5jcHAKaW5kZXggODYyZjY5YzUwYjljYWYyOWE1MDg4OGM1YWYzYTcxYWJkN2I5NTlj
OC4uZTc2MWJlYmRmZmY1YzU3YjBlZjY4MDllMjZkZjEyZGJlZDM3YzBjYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL3R5cGVkb20vQ1NTVW5wYXJzZWRWYWx1ZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL3R5cGVkb20vQ1NTVW5wYXJzZWRWYWx1ZS5jcHAKQEAgLTEzMCw3ICsx
MzAsNyBAQCBTdHJpbmcgQ1NTVW5wYXJzZWRWYWx1ZTo6dG9TdHJpbmcoKSBjb25zdAogdm9pZCBD
U1NVbnBhcnNlZFZhbHVlOjpzZXJpYWxpemUoU3RyaW5nQnVpbGRlciYgYnVpbGRlcikgY29uc3QK
IHsKICAgICBmb3IgKGF1dG8mIHNlZ21lbnQgOiBtX3NlZ21lbnRzKSB7Ci0gICAgICAgIFdURjo6
dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0gKGNvbnN0IFN0cmluZyYgdmFsdWUpIHsKKyAgICAg
ICAgc3RkOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXSAoY29uc3QgU3RyaW5nJiB2YWx1ZSkg
ewogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQodmFsdWUpOwogICAgICAgICB9LCBbJl0gKGNv
bnN0IFJlZlB0cjxDU1NPTVZhcmlhYmxlUmVmZXJlbmNlVmFsdWU+JiB2YWx1ZSkgewogICAgICAg
ICAgICAgdmFsdWUtPnNlcmlhbGl6ZShidWlsZGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQu
Y3BwCmluZGV4IGUwYmIxMDhlNTg5OTM4OGFlMjA0NjRmZTNlZWY4OGZmOGUzODkzZjkuLjVmYzAy
NTZlMzQ0MjMzYTc3MjI3MGM2NzQ3YTM4NzQwZmMyNDQ3N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
VGFyZ2V0LmNwcApAQCAtMTIzLDcgKzEyMyw3IEBAIHZvaWQgRXZlbnRUYXJnZXQ6OmFkZEV2ZW50
TGlzdGVuZXJGb3JCaW5kaW5ncyhjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIFJlZlB0CiAg
ICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lci5yZWxlYXNlTm9uTnVs
bCgpLCBjYXB0dXJlKTsKICAgICB9KTsKIAotICAgIFdURjo6dmlzaXQodmlzaXRvciwgdmFyaWFu
dCk7CisgICAgc3RkOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKIH0KIAogdm9pZCBFdmVudFRh
cmdldDo6cmVtb3ZlRXZlbnRMaXN0ZW5lckZvckJpbmRpbmdzKGNvbnN0IEF0b21TdHJpbmcmIGV2
ZW50VHlwZSwgUmVmUHRyPEV2ZW50TGlzdGVuZXI+JiYgbGlzdGVuZXIsIEV2ZW50TGlzdGVuZXJP
cHRpb25zT3JCb29sZWFuJiYgdmFyaWFudCkKQEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lkIEV2ZW50
VGFyZ2V0OjpyZW1vdmVFdmVudExpc3RlbmVyRm9yQmluZGluZ3MoY29uc3QgQXRvbVN0cmluZyYg
ZXZlbnRUeXBlLCBSZQogICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgKmxp
c3RlbmVyLCBjYXB0dXJlKTsKICAgICB9KTsKIAotICAgIFdURjo6dmlzaXQodmlzaXRvciwgdmFy
aWFudCk7CisgICAgc3RkOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKIH0KIAogYm9vbCBFdmVu
dFRhcmdldDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUs
IEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBjb25zdCBFdmVudExpc3RlbmVyT3B0aW9ucyYgb3B0
aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5jcHAKaW5kZXggMzJjZmQwZDY3ZjM4NGIw
N2FlM2Y3MGFmN2NjNmU1YjVkNTEwMWI0Yy4uZTRmMTk0YmZhMmIyZjI4OWEyZjhkMzNkMTI5MTcy
MzM3N2VlZGNjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5jcHAKQEAgLTEyOSwxNSAr
MTI5LDE1IEBAIEV2ZW50SW50ZXJmYWNlIE1lc3NhZ2VFdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBj
b25zdAogCiBzaXplX3QgTWVzc2FnZUV2ZW50OjptZW1vcnlDb3N0KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gV1RGOjpzd2l0Y2hPbihtX2RhdGEsIFtdIChjb25zdCBKU1ZhbHVlSW5XcmFwcGVkT2Jq
ZWN0JikgeworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fZGF0YSwgW10gKGNvbnN0IEpTVmFs
dWVJbldyYXBwZWRPYmplY3QmKSAtPiBzaXplX3QgewogICAgICAgICByZXR1cm4gMDsKLSAgICB9
LCBbXSAoY29uc3QgUmVmPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mIGRhdGEpIHsKKyAgICB9LCBb
XSAoY29uc3QgUmVmPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mIGRhdGEpIC0+IHNpemVfdCB7CiAg
ICAgICAgIHJldHVybiBkYXRhLT5tZW1vcnlDb3N0KCk7Ci0gICAgfSwgW10gKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKSB7CisgICAgfSwgW10gKGNvbnN0IFN0cmluZyYgc3RyaW5nKSAtPiBzaXplX3Qg
ewogICAgICAgICByZXR1cm4gc3RyaW5nLnNpemVJbkJ5dGVzKCk7Ci0gICAgfSwgW10gKGNvbnN0
IFJlZjxCbG9iPiYgYmxvYikgeworICAgIH0sIFtdIChjb25zdCBSZWY8QmxvYj4mIGJsb2IpIC0+
IHNpemVfdCB7CiAgICAgICAgIHJldHVybiBibG9iLT5zaXplKCk7Ci0gICAgfSwgW10gKGNvbnN0
IFJlZjxBcnJheUJ1ZmZlcj4mIGJ1ZmZlcikgeworICAgIH0sIFtdIChjb25zdCBSZWY8QXJyYXlC
dWZmZXI+JiBidWZmZXIpIC0+IHNpemVfdCB7CiAgICAgICAgIHJldHVybiBidWZmZXItPmJ5dGVM
ZW5ndGgoKTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCA1NjU3
ODI3ZDlhNjZiYjNiNzNlZmI1NWY5MzE2MWVlODM4YjQ1YTMwLi40ZDc4ZGQxYmU1NjY4OTFiNDJh
MmFkZjUyZmU1ODVkMWUzY2NiNDFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC0y
MjczLDcgKzIyNzMsNyBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJv
b2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAKICAgICBpZiAodW5pZmllZFRleHRDaGVja2VyRW5h
YmxlZCgpKSB7CiAgICAgICAgIGF1dG8gZm91bmRJdGVtID0gVGV4dENoZWNraW5nSGVscGVyKCpj
bGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlzc3BlbGxlZFdvcmRPclVu
Z3JhbW1hdGljYWxQaHJhc2UoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpOwotICAgICAgICBp
ZiAoYXV0byB3b3JkID0gV1RGOjpnZXRfaWY8VGV4dENoZWNraW5nSGVscGVyOjpNaXNzcGVsbGVk
V29yZD4oZm91bmRJdGVtKSkKKyAgICAgICAgaWYgKGF1dG8gd29yZCA9IHN0ZDo6Z2V0X2lmPFRl
eHRDaGVja2luZ0hlbHBlcjo6TWlzc3BlbGxlZFdvcmQ+KCZmb3VuZEl0ZW0pKQogICAgICAgICAg
ICAgbWlzc3BlbGxlZFdvcmQgPSBXVEZNb3ZlKCp3b3JkKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgdW5ncmFtbWF0aWNhbFBocmFzZSA9IFdURjo6Z2V0PFRleHRDaGVja2luZ0hlbHBlcjo6
VW5ncmFtbWF0aWNhbFBocmFzZT4oV1RGTW92ZShmb3VuZEl0ZW0pKTsKQEAgLTIzMDAsNyArMjMw
MCw3IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJl
Zm9yZVNlbGVjdGlvbikKICAgICAgICAgCiAgICAgICAgIGlmICh1bmlmaWVkVGV4dENoZWNrZXJF
bmFibGVkKCkpIHsKICAgICAgICAgICAgIGF1dG8gZm91bmRJdGVtID0gVGV4dENoZWNraW5nSGVs
cGVyKCpjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlzc3BlbGxlZFdv
cmRPclVuZ3JhbW1hdGljYWxQaHJhc2UoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpOwotICAg
ICAgICAgICAgaWYgKGF1dG8gd29yZCA9IFdURjo6Z2V0X2lmPFRleHRDaGVja2luZ0hlbHBlcjo6
TWlzc3BlbGxlZFdvcmQ+KGZvdW5kSXRlbSkpCisgICAgICAgICAgICBpZiAoYXV0byB3b3JkID0g
c3RkOjpnZXRfaWY8VGV4dENoZWNraW5nSGVscGVyOjpNaXNzcGVsbGVkV29yZD4oJmZvdW5kSXRl
bSkpCiAgICAgICAgICAgICAgICAgbWlzc3BlbGxlZFdvcmQgPSBXVEZNb3ZlKCp3b3JkKTsKICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB1bmdyYW1tYXRpY2FsUGhyYXNlID0gV1RG
OjpnZXQ8VGV4dENoZWNraW5nSGVscGVyOjpVbmdyYW1tYXRpY2FsUGhyYXNlPihXVEZNb3ZlKGZv
dW5kSXRlbSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVs
YXRpb25Db250cm9sbGVyLmNwcAppbmRleCBmYzlkNzE1NTQzNzNmZGM3ODVkY2E0NmNmZDVlZGY4
YWYyYTUzNTI3Li5jMzcyYWVjZWY0ZTk3ZmIzYjFjMTNmZWViYWE1ZDc0ZjE4OWRjZTE0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyLmNwcApAQCAtNTEsNyArNTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGlubGluZSBi
b29sIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNsdXNpb25SdWxlOjptYXRjaChjb25z
dCBFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewotICAgIHJldHVybiBzd2l0Y2hPbihydWxlLCBb
JmVsZW1lbnRdIChFbGVtZW50UnVsZSBydWxlKSB7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24o
cnVsZSwgWyZlbGVtZW50XSAoRWxlbWVudFJ1bGUgcnVsZSkgewogICAgICAgICByZXR1cm4gcnVs
ZS5sb2NhbE5hbWUgPT0gZWxlbWVudC5sb2NhbE5hbWUoKTsKICAgICB9LCBbJmVsZW1lbnRdIChB
dHRyaWJ1dGVSdWxlIHJ1bGUpIHsKICAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNh
c2UoZWxlbWVudC5nZXRBdHRyaWJ1dGUocnVsZS5uYW1lKSwgcnVsZS52YWx1ZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1VSTFNlYXJjaFBhcmFtcy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL1VSTFNlYXJjaFBhcmFtcy5jcHAKaW5kZXggYjA3Yjc4MDhkZmFkNTljM2Q1NDA5
ZjU3MjAyYTdiMTI5MTgyMmIyZi4uZjU0ZjQxZTE5Y2Y3YTdlNGQ1NTQwYzY0NjY2MmY4ZWM1ZmJk
M2QzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9VUkxTZWFyY2hQYXJhbXMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVVJMU2VhcmNoUGFyYW1zLmNwcApAQCAtNTEsMTIg
KzUxLDEyIEBAIEV4Y2VwdGlvbk9yPFJlZjxVUkxTZWFyY2hQYXJhbXM+PiBVUkxTZWFyY2hQYXJh
bXM6OmNyZWF0ZShWYXJpYW50PFZlY3RvcjxWZWN0b3I8CiAgICAgICAgICAgICBwYWlycy5hcHBl
bmQoe3BhaXJbMF0sIHBhaXJbMV19KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBVUkxTZWFyY2hQYXJhbXMoV1RGTW92ZShwYWlycykpKTsKLSAgICB9LCBbJl0oY29u
c3QgVmVjdG9yPFdURjo6S2V5VmFsdWVQYWlyPFN0cmluZywgU3RyaW5nPj4mIHBhaXJzKSB7Cisg
ICAgfSwgWyZdKGNvbnN0IFZlY3RvcjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+
JiBwYWlycykgLT4gRXhjZXB0aW9uT3I8UmVmPFVSTFNlYXJjaFBhcmFtcz4+IHsKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgVVJMU2VhcmNoUGFyYW1zKHBhaXJzKSk7Ci0gICAgfSwgWyZd
KGNvbnN0IFN0cmluZyYgc3RyaW5nKSB7CisgICAgfSwgWyZdKGNvbnN0IFN0cmluZyYgc3RyaW5n
KSAtPiBFeGNlcHRpb25PcjxSZWY8VVJMU2VhcmNoUGFyYW1zPj4gewogICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBVUkxTZWFyY2hQYXJhbXMoc3RyaW5nLCBudWxscHRyKSk7CiAgICAgfSk7
Ci0gICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CisgICAgcmV0dXJuIHN0
ZDo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CiB9CiAKIFN0cmluZyBVUkxTZWFyY2hQYXJhbXM6
OmdldChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCmluZGV4IDI4NGIw
NTUzOTliZDBkMjNmZmEwNmNiNGJiMTdmN2E1NmMwNGNlMTIuLmU3YjNmOTI1YjlmYTVkZWE1ZDlh
YmU1ZmJjYzVhYmI5NTQ0ZjA0MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCkBAIC0xNzU4LDcgKzE3NTgs
NyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJ1ZmZlckRhdGEoR0NHTGVudW0g
dGFyZ2V0LCBzdGQ6Om9wdGlvbmFsPEJ1ZmZlcgogICAgIGlmICghYnVmZmVyKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBXVEY6OnZpc2l0KFsmXShhdXRvJiBkYXRhKSB7CisgICAgc3RkOjp2aXNp
dChbJl0oYXV0byYgZGF0YSkgewogICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVy
RGF0YShkYXRhLmdldCgpKSkgewogICAgICAgICAgICAgdGhpcy0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgImludmFsaWQg
YnVmZmVyIik7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNzg1LDcgKzE3ODUsNyBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0
LCBsb25nIGxvbmcgb2Zmc2V0LAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgV1RGOjp2
aXNpdChbJl0oYXV0byYgZGF0YSkgeworICAgIHN0ZDo6dmlzaXQoWyZdKGF1dG8mIGRhdGEpIHsK
ICAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlclN1YkRhdGEoc3RhdGljX2Nhc3Q8
R0NHTGludHB0cj4ob2Zmc2V0KSwgZGF0YS5nZXQoKSkpIHsKICAgICAgICAgICAgIHRoaXMtPnN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dEdMOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVy
U3ViRGF0YSIsICJvZmZzZXQgb3V0IG9mIHJhbmdlIik7CiAgICAgICAgICAgICByZXR1cm47CkBA
IC00ODEzLDcgKzQ4MTMsNyBAQCBJbnRSZWN0IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Omdl
dFRleEltYWdlU291cmNlU2l6ZShUZXhJbWFnZVNvdXJjZSYgc291cmNlKQogICAgIH0KICAgICAp
OwogCi0gICAgRXhjZXB0aW9uT3I8SW50UmVjdD4gcmVzdWx0ID0gV1RGOjp2aXNpdCh2aXNpdG9y
LCBzb3VyY2UpOworICAgIEV4Y2VwdGlvbk9yPEludFJlY3Q+IHJlc3VsdCA9IHN0ZDo6dmlzaXQo
dmlzaXRvciwgc291cmNlKTsKICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4gc2VudGluZWxFbXB0eVJlY3QoKTsKICAgICByZXR1cm4gcmVzdWx0LnJldHVyblZh
bHVlKCk7CkBAIC01MDc0LDcgKzUwNzQsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZVNvdXJjZUhlbHBlcihUZXhJbWFnZUZ1bmN0aQogI2Vu
ZGlmIC8vIEVOQUJMRShWSURFTykKICAgICApOwogCi0gICAgcmV0dXJuIFdURjo6dmlzaXQodmlz
aXRvciwgc291cmNlKTsKKyAgICByZXR1cm4gc3RkOjp2aXNpdCh2aXNpdG9yLCBzb3VyY2UpOwog
fQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlQXJyYXlCdWZmZXJW
aWV3SGVscGVyKFRleEltYWdlRnVuY3Rpb25JRCBmdW5jdGlvbklELCBHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwg
R0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dMaW50IGJvcmRlciwgR0NHTGVu
dW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNl
dCwgR0NHTGludCB6b2Zmc2V0LCBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiYmIHBpeGVscywgTnVs
bERpc3Bvc2l0aW9uIG51bGxEaXNwb3NpdGlvbiwgR0NHTHVpbnQgc3JjT2Zmc2V0KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcAppbmRleCBlMjk5NmNiOTI1
Y2M1ZWE0ZDNlMjhkMWM1ZDk1NjMwNWYyMGRlZTVmLi40MmU2ZTE5MzYxNTBiOTUzYTRhMjUzMDAw
ZDMzMjc2ODkxMjk2YmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q2FudmFzLmNwcApAQCAtMTExLDcgKzExMSw3IEBAIEluc3BlY3RvckNhbnZhczo6SW5zcGVjdG9y
Q2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCiAKIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQqIEluc3BlY3RvckNhbnZhczo6Y2FudmFzQ29udGV4dCgpIGNvbnN0CiB7Ci0gICAg
aWYgKGF1dG8qIGNvbnRleHRXcmFwcGVyID0gV1RGOjpnZXRfaWY8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxDYW52YXNSZW5kZXJpbmdDb250ZXh0Pj4obV9jb250ZXh0KSkKKyAgICBpZiAoYXV0byog
Y29udGV4dFdyYXBwZXIgPSBzdGQ6OmdldF9pZjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPENhbnZh
c1JlbmRlcmluZ0NvbnRleHQ+PigmbV9jb250ZXh0KSkKICAgICAgICAgcmV0dXJuICZjb250ZXh0
V3JhcHBlci0+Z2V0KCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC0xMjQsOCArMTI0LDcg
QEAgSFRNTENhbnZhc0VsZW1lbnQqIEluc3BlY3RvckNhbnZhczo6Y2FudmFzRWxlbWVudCgpIGNv
bnN0CiAgICAgICAgICAgICBpZiAoaXM8SFRNTENhbnZhc0VsZW1lbnQ+KGNvbnRleHQuY2FudmFz
QmFzZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gJmRvd25jYXN0PEhUTUxDYW52YXNFbGVt
ZW50Pihjb250ZXh0LmNhbnZhc0Jhc2UoKSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgfSwKLSAgICAgICAgW10gKE1vbm9zdGF0ZSkgeworICAgICAgICB9LCBbXSAoTW9u
b3N0YXRlKSAtPiBIVE1MQ2FudmFzRWxlbWVudCogewogICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQpAQCAtMTM5
LDggKzEzOCw3IEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEluc3BlY3RvckNhbnZhczo6c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CiAgICAgICAgIFtdIChzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQ+IGNvbnRleHRXcmFwcGVyKSB7CiAgICAgICAg
ICAgICBhdXRvJiBjb250ZXh0ID0gY29udGV4dFdyYXBwZXIuZ2V0KCk7CiAgICAgICAgICAgICBy
ZXR1cm4gY29udGV4dC5jYW52YXNCYXNlKCkuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAg
ICAgICB9LAotICAgICAgICBbXSAoTW9ub3N0YXRlKSB7CisgICAgICAgIH0sIFtdIChNb25vc3Rh
dGUpIC0+IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHsKICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KQEAgLTg5
Myw4ICs4OTEsNyBAQCBSZWY8UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzPiBJbnNwZWN0b3JDYW52
YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGJvb2wgY2FwdHVyZQogICAgICAgICAgICAgICAgIHJl
dHVybiBQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6V2ViR0wyOwogI2VuZGlmCiAgICAg
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICB9LAotICAgICAgICBbXSAoTW9u
b3N0YXRlKSB7CisgICAgICAgIH0sIFtdIChNb25vc3RhdGUpIC0+IENvbnRleHRUeXBlVHlwZSB7
CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CiAgICAgICAgIH0KQEAgLTkyMCw4ICs5MTcsNyBAQCBSZWY8UHJvdG9jb2w6
OkNhbnZhczo6Q2FudmFzPiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGJv
b2wgY2FwdHVyZQogICAgIGF1dG8gY29udGV4dEF0dHJpYnV0ZXMgPSBXVEY6OnN3aXRjaE9uKG1f
Y29udGV4dCwKICAgICAgICAgW10gKHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q2FudmFzUmVuZGVy
aW5nQ29udGV4dD4gY29udGV4dFdyYXBwZXIpIHsKICAgICAgICAgICAgIHJldHVybiBidWlsZE9i
amVjdEZvckNhbnZhc0NvbnRleHRBdHRyaWJ1dGVzKGNvbnRleHRXcmFwcGVyKTsKLSAgICAgICAg
fSwKLSAgICAgICAgW10gKE1vbm9zdGF0ZSkgeworICAgICAgICB9LCBbXSAoTW9ub3N0YXRlKSAt
PiBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0QXR0cmlidXRlcz4g
ewogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAgICAgfQpAQCAtMTA0MCw4ICsxMDM2LDggQEAgaW50IEluc3BlY3RvckNh
bnZhczo6aW5kZXhGb3JEYXRhKER1cGxpY2F0ZURhdGFWYXJpYW50IGRhdGEpCiAgICAgICAgIGlm
IChkYXRhID09IGl0ZW0pCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICBhdXRv
IHRyYWNlQSA9IFdURjo6Z2V0X2lmPFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+PihkYXRhKTsKLSAg
ICAgICAgYXV0byB0cmFjZUIgPSBXVEY6OmdldF9pZjxSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPj4o
aXRlbSk7CisgICAgICAgIGF1dG8gdHJhY2VBID0gc3RkOjpnZXRfaWY8UmVmUHRyPFNjcmlwdENh
bGxTdGFjaz4+KCZkYXRhKTsKKyAgICAgICAgYXV0byB0cmFjZUIgPSBzdGQ6OmdldF9pZjxSZWZQ
dHI8U2NyaXB0Q2FsbFN0YWNrPj4oJml0ZW0pOwogICAgICAgICBpZiAodHJhY2VBICYmICp0cmFj
ZUEgJiYgdHJhY2VCICYmICp0cmFjZUIpCiAgICAgICAgICAgICByZXR1cm4gKCp0cmFjZUEpLT5p
c0VxdWFsKCgqdHJhY2VCKS5nZXQoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmNwcAppbmRleCBhMzBlMjE2NDNhMTU3YTgyYzVk
ZDdlNWI0ZDg1ODQwYjc0ZmE1MDE2Li5iZmIzM2FjNzdkNWM5NmVjMTU2YzEwMDhiZDVmOGRhODI0
NTFhOWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU2hh
ZGVyUHJvZ3JhbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclNo
YWRlclByb2dyYW0uY3BwCkBAIC02Niw3ICs2Niw3IEBAIEluc3BlY3RvclNoYWRlclByb2dyYW06
Okluc3BlY3RvclNoYWRlclByb2dyYW0oV2ViR0xQcm9ncmFtJiBwcm9ncmFtLCBJbnNwZWN0b3JD
CiAjaWYgRU5BQkxFKFdFQkdMKQogV2ViR0xQcm9ncmFtKiBJbnNwZWN0b3JTaGFkZXJQcm9ncmFt
Ojpwcm9ncmFtKCkgY29uc3QKIHsKLSAgICBpZiAoYXV0byogcHJvZ3JhbVdyYXBwZXIgPSBXVEY6
OmdldF9pZjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFdlYkdMUHJvZ3JhbT4+KG1fcHJvZ3JhbSkp
CisgICAgaWYgKGF1dG8qIHByb2dyYW1XcmFwcGVyID0gc3RkOjpnZXRfaWY8c3RkOjpyZWZlcmVu
Y2Vfd3JhcHBlcjxXZWJHTFByb2dyYW0+PigmbV9wcm9ncmFtKSkKICAgICAgICAgcmV0dXJuICZw
cm9ncmFtV3JhcHBlci0+Z2V0KCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5kZXhlZERC
QWdlbnQuY3BwCmluZGV4IDdmODA2ZDRmYzgxY2QyYjA0MzIyYjNkMGQ4MGJlNDQ0MDRiYmQwNmUu
LjllNjEwMDI0ZmViNTM0Y2EzMTI2Njg1OTVlMDlkZjQ4OTkwODI2OTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5kZXhlZERC
QWdlbnQuY3BwCkBAIC0xNjcsNyArMTY3LDcgQEAgc3RhdGljIFJlZjxQcm90b2NvbDo6SW5kZXhl
ZERCOjpLZXlQYXRoPiBrZXlQYXRoRnJvbUlEQktleVBhdGgoY29uc3Qgc3RkOjpvcHRpb24KICAg
ICAgICAga2V5UGF0aC0+c2V0QXJyYXkoV1RGTW92ZShhcnJheSkpOwogICAgICAgICByZXR1cm4g
a2V5UGF0aDsKICAgICB9KTsKLSAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBpZGJLZXlQ
YXRoLnZhbHVlKCkpOworICAgIHJldHVybiBzdGQ6OnZpc2l0KHZpc2l0b3IsIGlkYktleVBhdGgu
dmFsdWUoKSk7CiB9CiAKIHN0YXRpYyBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9u
Rm9yRGF0YWJhc2UoSURCRGF0YWJhc2UqIGlkYkRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIG9iamVj
dFN0b3JlTmFtZSwgSURCVHJhbnNhY3Rpb25Nb2RlIG1vZGUgPSBJREJUcmFuc2FjdGlvbk1vZGU6
OlJlYWRvbmx5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVm
ZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKaW5kZXgg
ZmQ5ZWM3NTk3MzdkNGM5NzU5ODMxZTc3MjQzNTliZTJlODY2MjQzMC4uZTZkY2Y5OTMwZTMyMTEx
MTQwYzNjYzg4OTJjOWQzN2UzMmMxMTIxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2hhcmVkQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFy
ZWRCdWZmZXIuY3BwCkBAIC0zNDEsMjAgKzM0MSwyMCBAQCBib29sIFNoYXJlZEJ1ZmZlcjo6aW50
ZXJuYWxseUNvbnNpc3RlbnQoKSBjb25zdAogY29uc3QgdWludDhfdCogU2hhcmVkQnVmZmVyOjpE
YXRhU2VnbWVudDo6ZGF0YSgpIGNvbnN0CiB7CiAgICAgYXV0byB2aXNpdG9yID0gV1RGOjptYWtl
VmlzaXRvcigKLSAgICAgICAgW10oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKSB7IHJldHVy
biBkYXRhLmRhdGEoKTsgfSwKKyAgICAgICAgW10oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRh
KSAtPiBjb25zdCB1aW50OF90KiB7IHJldHVybiBkYXRhLmRhdGEoKTsgfSwKICNpZiBVU0UoQ0Yp
Ci0gICAgICAgIFtdKGNvbnN0IFJldGFpblB0cjxDRkRhdGFSZWY+JiBkYXRhKSB7IHJldHVybiBD
RkRhdGFHZXRCeXRlUHRyKGRhdGEuZ2V0KCkpOyB9LAorICAgICAgICBbXShjb25zdCBSZXRhaW5Q
dHI8Q0ZEYXRhUmVmPiYgZGF0YSkgLT4gY29uc3QgdWludDhfdCogeyByZXR1cm4gQ0ZEYXRhR2V0
Qnl0ZVB0cihkYXRhLmdldCgpKTsgfSwKICNlbmRpZgogI2lmIFVTRShHTElCKQotICAgICAgICBb
XShjb25zdCBHUmVmUHRyPEdCeXRlcz4mIGRhdGEpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IHVpbnQ4X3QqPihnX2J5dGVzX2dldF9kYXRhKGRhdGEuZ2V0KCksIG51bGxwdHIpKTsgfSwKKyAg
ICAgICAgW10oY29uc3QgR1JlZlB0cjxHQnl0ZXM+JiBkYXRhKSAtPiBjb25zdCB1aW50OF90KiB7
IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZ19ieXRlc19nZXRfZGF0YShkYXRh
LmdldCgpLCBudWxscHRyKSk7IH0sCiAjZW5kaWYKICNpZiBVU0UoR1NUUkVBTUVSKQotICAgICAg
ICBbXShjb25zdCBSZWZQdHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+JiBkYXRhKSB7IHJldHVybiBk
YXRhLT5kYXRhKCk7IH0sCisgICAgICAgIFtdKGNvbnN0IFJlZlB0cjxHc3RNYXBwZWRPd25lZEJ1
ZmZlcj4mIGRhdGEpIC0+IGNvbnN0IHVpbnQ4X3QqIHsgcmV0dXJuIGRhdGEtPmRhdGEoKTsgfSwK
ICNlbmRpZgotICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0
YSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSgpKTsgfSwK
LSAgICAgICAgW10oY29uc3QgUHJvdmlkZXImIHByb3ZpZGVyKSB7IHJldHVybiBwcm92aWRlci5k
YXRhKCk7IH0KKyAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRh
dGEpIC0+IGNvbnN0IHVpbnQ4X3QqIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihkYXRhLmRhdGEoKSk7IH0sCisgICAgICAgIFtdKGNvbnN0IFByb3ZpZGVyJiBwcm92aWRlcikg
LT4gY29uc3QgdWludDhfdCogeyByZXR1cm4gcHJvdmlkZXIuZGF0YSgpOyB9CiAgICAgKTsKLSAg
ICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBtX2ltbXV0YWJsZURhdGEpOworICAgIHJldHVy
biBzdGQ6OnZpc2l0KHZpc2l0b3IsIG1faW1tdXRhYmxlRGF0YSk7CiB9CiAKIGJvb2wgU2hhcmVk
QnVmZmVyOjpEYXRhU2VnbWVudDo6Y29udGFpbnNNYXBwZWRGaWxlRGF0YSgpIGNvbnN0CkBAIC00
MjUsMjAgKzQyNSwyMCBAQCBib29sIFNoYXJlZEJ1ZmZlcjo6b3BlcmF0b3I9PShjb25zdCBTaGFy
ZWRCdWZmZXImIG90aGVyKSBjb25zdAogc2l6ZV90IFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6
OnNpemUoKSBjb25zdAogewogICAgIGF1dG8gdmlzaXRvciA9IFdURjo6bWFrZVZpc2l0b3IoCi0g
ICAgICAgIFtdKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZGF0YSkgeyByZXR1cm4gZGF0YS5zaXpl
KCk7IH0sCisgICAgICAgIFtdKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZGF0YSkgLT4gc2l6ZV90
IHsgcmV0dXJuIGRhdGEuc2l6ZSgpOyB9LAogI2lmIFVTRShDRikKLSAgICAgICAgW10oY29uc3Qg
UmV0YWluUHRyPENGRGF0YVJlZj4mIGRhdGEpIHsgcmV0dXJuIENGRGF0YUdldExlbmd0aChkYXRh
LmdldCgpKTsgfSwKKyAgICAgICAgW10oY29uc3QgUmV0YWluUHRyPENGRGF0YVJlZj4mIGRhdGEp
IC0+IHNpemVfdCB7IHJldHVybiBDRkRhdGFHZXRMZW5ndGgoZGF0YS5nZXQoKSk7IH0sCiAjZW5k
aWYKICNpZiBVU0UoR0xJQikKLSAgICAgICAgW10oY29uc3QgR1JlZlB0cjxHQnl0ZXM+JiBkYXRh
KSB7IHJldHVybiBnX2J5dGVzX2dldF9zaXplKGRhdGEuZ2V0KCkpOyB9LAorICAgICAgICBbXShj
b25zdCBHUmVmUHRyPEdCeXRlcz4mIGRhdGEpIC0+IHNpemVfdCB7IHJldHVybiBnX2J5dGVzX2dl
dF9zaXplKGRhdGEuZ2V0KCkpOyB9LAogI2VuZGlmCiAjaWYgVVNFKEdTVFJFQU1FUikKLSAgICAg
ICAgW10oY29uc3QgUmVmUHRyPEdzdE1hcHBlZE93bmVkQnVmZmVyPiYgZGF0YSkgeyByZXR1cm4g
ZGF0YS0+c2l6ZSgpOyB9LAorICAgICAgICBbXShjb25zdCBSZWZQdHI8R3N0TWFwcGVkT3duZWRC
dWZmZXI+JiBkYXRhKSAtPiBzaXplX3QgeyByZXR1cm4gZGF0YS0+c2l6ZSgpOyB9LAogI2VuZGlm
Ci0gICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7IHJl
dHVybiBkYXRhLnNpemUoKTsgfSwKLSAgICAgICAgW10oY29uc3QgUHJvdmlkZXImIHByb3ZpZGVy
KSB7IHJldHVybiBwcm92aWRlci5zaXplKCk7IH0KKyAgICAgICAgW10oY29uc3QgRmlsZVN5c3Rl
bTo6TWFwcGVkRmlsZURhdGEmIGRhdGEpIC0+IHNpemVfdCB7IHJldHVybiBkYXRhLnNpemUoKTsg
fSwKKyAgICAgICAgW10oY29uc3QgUHJvdmlkZXImIHByb3ZpZGVyKSAtPiBzaXplX3QgeyByZXR1
cm4gcHJvdmlkZXIuc2l6ZSgpOyB9CiAgICAgKTsKLSAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNp
dG9yLCBtX2ltbXV0YWJsZURhdGEpOworICAgIHJldHVybiBzdGQ6OnZpc2l0KHZpc2l0b3IsIG1f
aW1tdXRhYmxlRGF0YSk7CiB9CiAKIFNoYXJlZEJ1ZmZlckRhdGFWaWV3OjpTaGFyZWRCdWZmZXJE
YXRhVmlldyhSZWY8U2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudD4mJiBzZWdtZW50LCBzaXplX3Qg
cG9zaXRpb25XaXRoaW5TZWdtZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvU2hh
cmVkQnVmZmVyQ0YuY3BwCmluZGV4IGY2YmZkZDdmNWY3MzM3ZWUxZjEwMzY1YzVlMjAxMzE4NWE3
ZTJmOGEuLjY5YTY4NTBkZTYzYzM4MjdjZThkOTVhNWJlZGVjZDg3ZjY4NzRiYjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNGLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5jcHAKQEAgLTQ0LDcgKzQ0
LDcgQEAgU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoQ0ZEYXRhUmVmIGRhdGEpCiBSZXRhaW5Q
dHI8Q0ZEYXRhUmVmPiBTaGFyZWRCdWZmZXI6OmNyZWF0ZUNGRGF0YSgpIGNvbnN0CiB7CiAgICAg
aWYgKG1fc2VnbWVudHMuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgaWYgKGF1dG8gZGF0YSA9IFdU
Rjo6Z2V0X2lmPFJldGFpblB0cjxDRkRhdGFSZWY+PihtX3NlZ21lbnRzWzBdLnNlZ21lbnQtPm1f
aW1tdXRhYmxlRGF0YSkpCisgICAgICAgIGlmIChhdXRvIGRhdGEgPSBzdGQ6OmdldF9pZjxSZXRh
aW5QdHI8Q0ZEYXRhUmVmPj4oJm1fc2VnbWVudHNbMF0uc2VnbWVudC0+bV9pbW11dGFibGVEYXRh
KSkKICAgICAgICAgICAgIHJldHVybiAqZGF0YTsKICAgICB9CiAgICAgYXV0byBjZkRhdGEgPSBh
ZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUobnVsbHB0ciwgc2l6ZSgpKSk7CkBAIC02NCw3ICs2
NCw3IEBAIHZvaWQgU2hhcmVkQnVmZmVyOjpoaW50TWVtb3J5Tm90TmVlZGVkU29vbigpIGNvbnN0
CiB7CiAgICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IG1fc2VnbWVudHMpIHsKICAgICAgICAg
aWYgKGVudHJ5LnNlZ21lbnQtPmhhc09uZVJlZigpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byBk
YXRhID0gV1RGOjpnZXRfaWY8UmV0YWluUHRyPENGRGF0YVJlZj4+KGVudHJ5LnNlZ21lbnQtPm1f
aW1tdXRhYmxlRGF0YSkpCisgICAgICAgICAgICBpZiAoYXV0byBkYXRhID0gc3RkOjpnZXRfaWY8
UmV0YWluUHRyPENGRGF0YVJlZj4+KCZlbnRyeS5zZWdtZW50LT5tX2ltbXV0YWJsZURhdGEpKQog
ICAgICAgICAgICAgICAgIE9TQWxsb2NhdG9yOjpoaW50TWVtb3J5Tm90TmVlZGVkU29vbihjb25z
dF9jYXN0PFVJbnQ4Kj4oQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhLT5nZXQoKSkpLCBDRkRhdGFHZXRM
ZW5ndGgoZGF0YS0+Z2V0KCkpKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvS2V5ZWREZWNvZGVyR2VuZXJpYy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL0tleWVkRGVjb2RlckdlbmVyaWMuY3BwCmluZGV4
IDliNjMwZGJkMjdkZjFmNGQ4OTJlN2VkZjAwNTQyZTQ1Y2Y1OWI2ZWUuLmQ2NDUwNjM4MWQ2ZmJl
OTZiYzY0MTk0NWQ3M2QxYjhkNzA4ZTVkMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dlbmVyaWMvS2V5ZWREZWNvZGVyR2VuZXJpYy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERlY29kZXJHZW5lcmljLmNwcApAQCAtNDEsNyArNDEs
NyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgTm9kZSA9IFZhcmlhbnQ8VmVjdG9yPHVpbnQ4X3Q+LCBi
b29sLCB1aW50MzJfdCwgdWludDY0X3QsIGludDMyX3QsIGludDY0X3QsIGZsb2F0LCBkb3VibGUs
IFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPERpY3Rpb25hcnk+LCBzdGQ6OnVuaXF1ZV9wdHI8QXJy
YXk+PjsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIHZvaWQgYWRkKGNvbnN0IFN0
cmluZyYga2V5LCBUJiYgdmFsdWUpIHsgbV9tYXAuYWRkKGtleSwgbWFrZVVuaXF1ZTxOb2RlPihz
dGQ6OmZvcndhcmQ8VD4odmFsdWUpKSk7IH0KKyAgICB2b2lkIGFkZChjb25zdCBTdHJpbmcmIGtl
eSwgVCYmIHZhbHVlKSB7IG1fbWFwLmFkZChrZXksIG1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxv
Y0NoZWNrPE5vZGU+KHN0ZDo6Zm9yd2FyZDxUPih2YWx1ZSkpKTsgfQogICAgIE5vZGUqIGdldChj
b25zdCBTdHJpbmcmIGtleSkgeyByZXR1cm4gbV9tYXAuZ2V0KGtleSk7IH0KIAogcHJpdmF0ZToK
QEAgLTIyMyw3ICsyMjMsNyBAQCBjb25zdCBUKiBLZXllZERlY29kZXJHZW5lcmljOjpnZXRQb2lu
dGVyRnJvbURpY3Rpb25hcnlTdGFjayhjb25zdCBTdHJpbmcmIGtleSkKICAgICBpZiAoIW5vZGUp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIFdURjo6Z2V0X2lmPFQ+KCpu
b2RlKTsKKyAgICByZXR1cm4gc3RkOjpnZXRfaWY8VD4obm9kZSk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZUZvbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlRm9udHMuY3BwCmluZGV4IGNkZjhiYTUxNjQ2ZWM5MDZkZGYwMDVhMDFmZjZmNjhl
ZmViZjQyYjcuLmEyNDJkMzY1Zjg5ZGJhOWM3ZGFkODBmNjk4N2NiNDVkZmNmNGFkZTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9u
dHMuY3BwCkBAIC0xNjEsNyArMTYxLDcgQEAgc3RhdGljIEZvbnRSYW5nZXMgcmVhbGl6ZU5leHRG
YWxsYmFjayhjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwKICAgICAg
ICAgICAgIHJldHVybiBmb250RmFtaWx5U3BlY2lmaWNhdGlvbi5mb250UmFuZ2VzKGRlc2NyaXB0
aW9uKTsKICAgICAgICAgfSk7CiAgICAgICAgIGNvbnN0IGF1dG8mIGN1cnJlbnRGYW1pbHkgPSBk
ZXNjcmlwdGlvbi5lZmZlY3RpdmVGYW1pbHlBdChpbmRleCsrKTsKLSAgICAgICAgYXV0byByYW5n
ZXMgPSBXVEY6OnZpc2l0KHZpc2l0b3IsIGN1cnJlbnRGYW1pbHkpOworICAgICAgICBhdXRvIHJh
bmdlcyA9IHN0ZDo6dmlzaXQodmlzaXRvciwgY3VycmVudEZhbWlseSk7CiAgICAgICAgIGlmICgh
cmFuZ2VzLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIHJhbmdlczsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwCmluZGV4IDEzNTRiZGJlZGQ2
MTE2YzIwOWZiNTRhNjNlMTk0MjI1M2NiM2E1OGEuLjNiMzQ0ZGFjMThlZWE3NGM4YzlkNzY1ODg4
MDk5OTY1ZTgyODI3OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZm
ZXIuY3BwCkBAIC02NTAsNyArNjUwLDcgQEAgYm9vbCBJdGVtSGFuZGxlOjpzYWZlQ29weShJdGVt
VHlwZSBpdGVtVHlwZSwgSXRlbUhhbmRsZSBkZXN0aW5hdGlvbikgY29uc3QKIAogYm9vbCBzYWZl
Q29weShJdGVtSGFuZGxlIGRlc3RpbmF0aW9uLCBjb25zdCBEaXNwbGF5TGlzdEl0ZW0mIHNvdXJj
ZSkKIHsKLSAgICByZXR1cm4gV1RGOjp2aXNpdChbJl0oY29uc3QgYXV0byYgc291cmNlKSB7Cisg
ICAgcmV0dXJuIHN0ZDo6dmlzaXQoWyZdKGNvbnN0IGF1dG8mIHNvdXJjZSkgewogICAgICAgICB1
c2luZyBEaXNwbGF5TGlzdEl0ZW1UeXBlID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVy
ZW5jZTxkZWNsdHlwZShzb3VyY2UpPjo6dHlwZTsKICAgICAgICAgY29uc3RleHByIGF1dG8gaXRl
bVR5cGUgPSBEaXNwbGF5TGlzdEl0ZW1UeXBlOjppdGVtVHlwZTsKICAgICAgICAgZGVzdGluYXRp
b24uZGF0YVswXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGl0ZW1UeXBlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1UeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcAppbmRleCA5OGExNmQyNWZhMWI1YTRjNTJiMGY3
M2E0ZjlmNTMyYWViZmFiNzBjLi4zYmViYTljNGQxYThjYWE0NGM3NThmZDIwM2JlMjYxMzY3OWE1
ZDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCkBAIC0yNzYs
NyArMjc2LDcgQEAgc2l6ZV90IHBhZGRlZFNpemVPZlR5cGVBbmRJdGVtSW5CeXRlcyhJdGVtVHlw
ZSB0eXBlKQogCiBzaXplX3QgcGFkZGVkU2l6ZU9mVHlwZUFuZEl0ZW1JbkJ5dGVzKGNvbnN0IERp
c3BsYXlMaXN0SXRlbSYgZGlzcGxheUxpc3RJdGVtKQogewotICAgIGF1dG8gaXRlbVNpemUgPSBX
VEY6OnZpc2l0KFtdKGNvbnN0IGF1dG8mIGl0ZW0pIHsKKyAgICBhdXRvIGl0ZW1TaXplID0gc3Rk
Ojp2aXNpdChbXShjb25zdCBhdXRvJiBpdGVtKSB7CiAgICAgICAgIHJldHVybiBzaXplb2YoaXRl
bSk7CiAgICAgfSwgZGlzcGxheUxpc3RJdGVtKTsKICAgICByZXR1cm4gc2l6ZW9mKHVpbnQ2NF90
KSArIHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25vZih1aW50NjRfdCksIGl0ZW1TaXplKTsKQEAg
LTI4NCw3ICsyODQsNyBAQCBzaXplX3QgcGFkZGVkU2l6ZU9mVHlwZUFuZEl0ZW1JbkJ5dGVzKGNv
bnN0IERpc3BsYXlMaXN0SXRlbSYgZGlzcGxheUxpc3RJdGVtKQogCiBJdGVtVHlwZSBkaXNwbGF5
TGlzdEl0ZW1UeXBlKGNvbnN0IERpc3BsYXlMaXN0SXRlbSYgZGlzcGxheUxpc3RJdGVtKQogewot
ICAgIHJldHVybiBXVEY6OnZpc2l0KFtdKGNvbnN0IGF1dG8mIGl0ZW0pIHsKKyAgICByZXR1cm4g
c3RkOjp2aXNpdChbXShjb25zdCBhdXRvJiBpdGVtKSB7CiAgICAgICAgIHJldHVybiBpdGVtLml0
ZW1UeXBlOwogICAgIH0sIGRpc3BsYXlMaXN0SXRlbSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tNZWRpYURldmljZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFEZXZpY2UuaAppbmRleCA0NjdkOTEzOTQ0NDNlZmEyODM2
M2E4NmE4ZDU0ZmQyYzQ0NTg1M2NhLi5hMjNkNzAxMzI1YmY1Nzg3YzAwM2Y5OTdiYjEyZDBkNDc5
ZmM1NDRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tNZWRp
YURldmljZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja01lZGlhRGV2
aWNlLmgKQEAgLTIwMSw3ICsyMDEsNyBAQCBzdHJ1Y3QgTW9ja01lZGlhRGV2aWNlIHsKICAgICB7
CiAgICAgICAgIGVuY29kZXIgPDwgcGVyc2lzdGVudElkOwogICAgICAgICBlbmNvZGVyIDw8IGxh
YmVsOwotICAgICAgICBzd2l0Y2hPbihwcm9wZXJ0aWVzLCBbJl0oY29uc3QgTW9ja01pY3JvcGhv
bmVQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzKSB7CisgICAgICAgIFdURjo6c3dpdGNoT24ocHJvcGVy
dGllcywgWyZdKGNvbnN0IE1vY2tNaWNyb3Bob25lUHJvcGVydGllcyYgcHJvcGVydGllcykgewog
ICAgICAgICAgICAgZW5jb2RlciA8PCAodWludDhfdCkxOwogICAgICAgICAgICAgZW5jb2RlciA8
PCBwcm9wZXJ0aWVzOwogICAgICAgICB9LCBbJl0oY29uc3QgTW9ja1NwZWFrZXJQcm9wZXJ0aWVz
JiBwcm9wZXJ0aWVzKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Zvcm1EYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURh
dGEuY3BwCmluZGV4IGNlOWU5ZjUwYWM0ZTY4ZDhlYWY2NjNiZjg2MTU4ZjRmZGM2MmU1MmIuLjg5
MGFkNjRiODUzOTA4Y2RmOGM5NGUyMjljMjVmZjM5YmI3NTdiMTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCkBAIC0xMjcsNyArMTI3LDcgQEAgdW5z
aWduZWQgRm9ybURhdGE6OmltYWdlT3JNZWRpYUZpbGVzQ291bnQoKSBjb25zdAogewogICAgIHVu
c2lnbmVkIGltYWdlT3JNZWRpYUZpbGVzQ291bnQgPSAwOwogICAgIGZvciAoYXV0byYgZWxlbWVu
dCA6IG1fZWxlbWVudHMpIHsKLSAgICAgICAgYXV0byogZW5jb2RlZEZpbGVEYXRhID0gV1RGOjpn
ZXRfaWY8Rm9ybURhdGFFbGVtZW50OjpFbmNvZGVkRmlsZURhdGE+KGVsZW1lbnQuZGF0YSk7Cisg
ICAgICAgIGF1dG8qIGVuY29kZWRGaWxlRGF0YSA9IHN0ZDo6Z2V0X2lmPEZvcm1EYXRhRWxlbWVu
dDo6RW5jb2RlZEZpbGVEYXRhPigmZWxlbWVudC5kYXRhKTsKICAgICAgICAgaWYgKCFlbmNvZGVk
RmlsZURhdGEpCiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMTQwLDcgKzE0MCw3IEBAIHVu
c2lnbmVkIEZvcm1EYXRhOjppbWFnZU9yTWVkaWFGaWxlc0NvdW50KCkgY29uc3QKIAogdWludDY0
X3QgRm9ybURhdGFFbGVtZW50OjpsZW5ndGhJbkJ5dGVzKGNvbnN0IEZ1bmN0aW9uPHVpbnQ2NF90
KGNvbnN0IFVSTCYpPiYgYmxvYlNpemUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN3aXRjaE9uKGRh
dGEsCisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oZGF0YSwKICAgICAgICAgW10gKGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgYnl0ZXMpIHsKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1
aW50NjRfdD4oYnl0ZXMuc2l6ZSgpKTsKICAgICAgICAgfSwgW10gKGNvbnN0IEZvcm1EYXRhRWxl
bWVudDo6RW5jb2RlZEZpbGVEYXRhJiBmaWxlRGF0YSkgewpAQCAtMTYyLDcgKzE2Miw3IEBAIHVp
bnQ2NF90IEZvcm1EYXRhRWxlbWVudDo6bGVuZ3RoSW5CeXRlcygpIGNvbnN0CiAKIEZvcm1EYXRh
RWxlbWVudCBGb3JtRGF0YUVsZW1lbnQ6Omlzb2xhdGVkQ29weSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIHN3aXRjaE9uKGRhdGEsCisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oZGF0YSwKICAgICAg
ICAgW10gKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnl0ZXMpIHsKICAgICAgICAgICAgIHJldHVy
biBGb3JtRGF0YUVsZW1lbnQoVmVjdG9yIHsgYnl0ZXMuZGF0YSgpLCBieXRlcy5zaXplKCkgfSk7
CiAgICAgICAgIH0sIFtdIChjb25zdCBGb3JtRGF0YUVsZW1lbnQ6OkVuY29kZWRGaWxlRGF0YSYg
ZmlsZURhdGEpIHsKQEAgLTE3Nyw3ICsxNzcsNyBAQCB2b2lkIEZvcm1EYXRhOjphcHBlbmREYXRh
KGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKQogewogICAgIG1fbGVuZ3RoSW5CeXRlcyA9
IHN0ZDo6bnVsbG9wdDsKICAgICBpZiAoIW1fZWxlbWVudHMuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiB2ZWN0b3IgPSBXVEY6OmdldF9pZjxWZWN0b3I8dWludDhfdD4+KG1fZWxlbWVu
dHMubGFzdCgpLmRhdGEpKSB7CisgICAgICAgIGlmIChhdXRvKiB2ZWN0b3IgPSBzdGQ6OmdldF9p
ZjxWZWN0b3I8dWludDhfdD4+KCZtX2VsZW1lbnRzLmxhc3QoKS5kYXRhKSkgewogICAgICAgICAg
ICAgdmVjdG9yLT5hcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBzaXpl
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjkzLDcgKzI5Myw3IEBAIFZl
Y3Rvcjx1aW50OF90PiBGb3JtRGF0YTo6ZmxhdHRlbigpIGNvbnN0CiAgICAgLy8gQ29uY2F0ZW5h
dGUgYWxsIHRoZSBieXRlIGFycmF5cywgYnV0IG9taXQgYW55IGZpbGVzLgogICAgIFZlY3Rvcjx1
aW50OF90PiBkYXRhOwogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IG1fZWxlbWVudHMpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHZlY3RvciA9IFdURjo6Z2V0X2lmPFZlY3Rvcjx1aW50OF90Pj4oZWxl
bWVudC5kYXRhKSkKKyAgICAgICAgaWYgKGF1dG8qIHZlY3RvciA9IHN0ZDo6Z2V0X2lmPFZlY3Rv
cjx1aW50OF90Pj4oJmVsZW1lbnQuZGF0YSkpCiAgICAgICAgICAgICBkYXRhLmFwcGVuZCh2ZWN0
b3ItPmRhdGEoKSwgdmVjdG9yLT5zaXplKCkpOwogICAgIH0KICAgICByZXR1cm4gZGF0YTsKQEAg
LTM2Nyw3ICszNjcsNyBAQCBGb3JtRGF0YUZvclVwbG9hZCBGb3JtRGF0YTo6cHJlcGFyZUZvclVw
bG9hZCgpCiB7CiAgICAgVmVjdG9yPFN0cmluZz4gZ2VuZXJhdGVkRmlsZXM7CiAgICAgZm9yIChh
dXRvJiBlbGVtZW50IDogbV9lbGVtZW50cykgewotICAgICAgICBhdXRvKiBmaWxlRGF0YSA9IFdU
Rjo6Z2V0X2lmPEZvcm1EYXRhRWxlbWVudDo6RW5jb2RlZEZpbGVEYXRhPihlbGVtZW50LmRhdGEp
OworICAgICAgICBhdXRvKiBmaWxlRGF0YSA9IHN0ZDo6Z2V0X2lmPEZvcm1EYXRhRWxlbWVudDo6
RW5jb2RlZEZpbGVEYXRhPigmZWxlbWVudC5kYXRhKTsKICAgICAgICAgaWYgKCFmaWxlRGF0YSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoRmlsZVN5c3RlbTo6ZmlsZVR5cGVG
b2xsb3dpbmdTeW1saW5rcyhmaWxlRGF0YS0+ZmlsZW5hbWUpICE9IEZpbGVTeXN0ZW06OkZpbGVU
eXBlOjpEaXJlY3RvcnkpCkBAIC00MjUsNyArNDI1LDcgQEAgVVJMIEZvcm1EYXRhOjphc0Jsb2JV
UkwoKSBjb25zdAogICAgIGlmIChtX2VsZW1lbnRzLnNpemUoKSAhPSAxKQogICAgICAgICByZXR1
cm4geyB9OwogCi0gICAgaWYgKGF1dG8qIGJsb2JEYXRhID0gV1RGOjpnZXRfaWY8Rm9ybURhdGFF
bGVtZW50OjpFbmNvZGVkQmxvYkRhdGE+KG1fZWxlbWVudHMuZmlyc3QoKS5kYXRhKSkKKyAgICBp
ZiAoYXV0byogYmxvYkRhdGEgPSBzdGQ6OmdldF9pZjxGb3JtRGF0YUVsZW1lbnQ6OkVuY29kZWRC
bG9iRGF0YT4oJm1fZWxlbWVudHMuZmlyc3QoKS5kYXRhKSkKICAgICAgICAgcmV0dXJuIGJsb2JE
YXRhLT51cmw7CiAgICAgcmV0dXJuIHsgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvRm9ybURhdGEuaAppbmRleCA2MzU0MDhjNTQ4OTljYWI5YWFlODUzNTFmMjViNDIyOGFj
MjdhZmFmLi5mZWViMTk0ZDNmNjA5NjQ1MTAxMTczMjJhZWJlZTgwZWM5MDIzNmNjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oCkBAIC0xNTMsMTAgKzE1Mywx
MCBAQCBzdHJ1Y3QgRm9ybURhdGFFbGVtZW50IHsKICAgICAgICAgaWYgKGRhdGEuaW5kZXgoKSAh
PSBvdGhlci5kYXRhLmluZGV4KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IGlmICghZGF0YS5pbmRleCgpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6Z2V0PDA+KGRhdGEp
ID09IFdURjo6Z2V0PDA+KG90aGVyLmRhdGEpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0
PDA+KGRhdGEpID09IHN0ZDo6Z2V0PDA+KG90aGVyLmRhdGEpOwogICAgICAgICBpZiAoZGF0YS5p
bmRleCgpID09IDEpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpnZXQ8MT4oZGF0YSkgPT0gV1RG
OjpnZXQ8MT4ob3RoZXIuZGF0YSk7Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDwyPihkYXRhKSA9
PSBXVEY6OmdldDwyPihvdGhlci5kYXRhKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6OmdldDwx
PihkYXRhKSA9PSBzdGQ6OmdldDwxPihvdGhlci5kYXRhKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6
Z2V0PDI+KGRhdGEpID09IHN0ZDo6Z2V0PDI+KG90aGVyLmRhdGEpOwogICAgIH0KICAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgRm9ybURhdGFFbGVtZW50JiBvdGhlcikgY29uc3QKICAgICB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Zvcm1EYXRhU3Ry
ZWFtQ0ZOZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Gb3JtRGF0
YVN0cmVhbUNGTmV0LmNwcAppbmRleCAwYjk4ZWI3NWQ5MGY3ZjczMzMyMmQyODY4OThmYTY2MjM2
N2I0MWVhLi5iOTAyOWJjZTY1NDA5MmQ5YjkxNzJiMzkxNjEzMDZmNGE3NmJjZTM1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Zvcm1EYXRhU3RyZWFtQ0ZO
ZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvRm9ybURhdGFT
dHJlYW1DRk5ldC5jcHAKQEAgLTEzNyw3ICsxMzcsNyBAQCBzdGF0aWMgYm9vbCBhZHZhbmNlQ3Vy
cmVudFN0cmVhbShGb3JtU3RyZWFtRmllbGRzKiBmb3JtKQogICAgIC8vIENyZWF0ZSB0aGUgbmV3
IHN0cmVhbS4KICAgICBGb3JtRGF0YUVsZW1lbnQmIG5leHRJbnB1dCA9IGZvcm0tPnJlbWFpbmlu
Z0VsZW1lbnRzLmxhc3QoKTsKIAotICAgIGJvb2wgc3VjY2VzcyA9IHN3aXRjaE9uKG5leHRJbnB1
dC5kYXRhLAorICAgIGJvb2wgc3VjY2VzcyA9IFdURjo6c3dpdGNoT24obmV4dElucHV0LmRhdGEs
CiAgICAgICAgIFtmb3JtXSAoVmVjdG9yPHVpbnQ4X3Q+JiBieXRlcykgewogICAgICAgICAgICAg
c2l6ZV90IHNpemUgPSBieXRlcy5zaXplKCk7CiAgICAgICAgICAgICBNYWxsb2NQdHI8dWludDhf
dCwgV1RGOjpWZWN0b3JNYWxsb2M+IGRhdGEgPSBieXRlcy5yZWxlYXNlQnVmZmVyKCk7CkBAIC0z
OTcsNyArMzk3LDcgQEAgdm9pZCBzZXRIVFRQQm9keShDRk11dGFibGVVUkxSZXF1ZXN0UmVmIHJl
cXVlc3QsIEZvcm1EYXRhKiBmb3JtRGF0YSkKICAgICAvLyBIYW5kbGUgdGhlIGNvbW1vbiBzcGVj
aWFsIGNhc2Ugb2Ygb25lIHBpZWNlIG9mIGZvcm0gZGF0YSwgd2l0aCBubyBmaWxlcy4KICAgICBh
dXRvJiBlbGVtZW50cyA9IGZvcm1EYXRhLT5lbGVtZW50cygpOwogICAgIGlmIChlbGVtZW50cy5z
aXplKCkgPT0gMSAmJiAhZm9ybURhdGEtPmFsd2F5c1N0cmVhbSgpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiB2ZWN0b3IgPSBXVEY6OmdldF9pZjxWZWN0b3I8dWludDhfdD4+KGVsZW1lbnRzWzBdLmRh
dGEpKSB7CisgICAgICAgIGlmIChhdXRvKiB2ZWN0b3IgPSBzdGQ6OmdldF9pZjxWZWN0b3I8dWlu
dDhfdD4+KCZlbGVtZW50c1swXS5kYXRhKSkgewogICAgICAgICAgICAgYXV0byBkYXRhID0gYWRv
cHRDRihDRkRhdGFDcmVhdGUobnVsbHB0ciwgdmVjdG9yLT5kYXRhKCksIHZlY3Rvci0+c2l6ZSgp
KSk7CiAgICAgICAgICAgICBDRlVSTFJlcXVlc3RTZXRIVFRQUmVxdWVzdEJvZHkocmVxdWVzdCwg
ZGF0YS5nZXQoKSk7CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmNwcAppbmRleCAyNGQxYzdkNzA2
NTAxNmU1NTJlOWZjNmU5ZWQ5MjhhNTEwMjkyZDZjLi4wYjJlMzg2ODk4MWEyOTg2YThiZjZlMGZm
YWNiMjhmNGE2OTQ2OWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybENvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHAKQEAgLTM1MSw3ICszNTEsNyBAQCB2b2lkIEN1cmxI
YW5kbGU6OmVuYWJsZVNTTEZvckhvc3QoY29uc3QgU3RyaW5nJiBob3N0KQogI2lmIE9TKFdJTkRP
V1MpCiAgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9TU0xfT1BUSU9OUywg
Q1VSTFNTTE9QVF9OQVRJVkVfQ0EpOwogI2Vsc2UKLSAgICBpZiAoYXV0byogcGF0aCA9IFdURjo6
Z2V0X2lmPFN0cmluZz4oc3NsSGFuZGxlLmdldENBQ2VydEluZm8oKSkpCisgICAgaWYgKGF1dG8q
IHBhdGggPSBzdGQ6OmdldF9pZjxTdHJpbmc+KHNzbEhhbmRsZS5nZXRDQUNlcnRJbmZvKCkpKQog
ICAgICAgICBzZXRDQUNlcnRQYXRoKHBhdGgtPnV0ZjgoKS5kYXRhKCkpOwogI2VuZGlmCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybEZvcm1E
YXRhU3RyZWFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
Rm9ybURhdGFTdHJlYW0uY3BwCmluZGV4IGNjOWFiMGJjMDg1NTFlZmYwN2RmNDMzYjc2M2I5OWU4
NTFiN2Y5NDQuLjdhYTI2MmRjNzcxNjVkNmI3MjE5NmQ4ZWIxNmQ1Yzg5MmVlOGQ5ZGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRm9ybURhdGFT
dHJlYW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
Rm9ybURhdGFTdHJlYW0uY3BwCkBAIC0xMjgsNyArMTI4LDcgQEAgc3RkOjpvcHRpb25hbDxzaXpl
X3Q+IEN1cmxGb3JtRGF0YVN0cmVhbTo6cmVhZChjaGFyKiBidWZmZXIsIHNpemVfdCBzaXplKQog
ICAgICAgICAgICAgICAgIHJldHVybiByZWFkRnJvbURhdGEoYnl0ZXMsIGJ1ZmZlclBvc2l0aW9u
LCBidWZmZXJTaXplKTsKICAgICAgICAgICAgIH0sIFsmXSAoY29uc3QgRm9ybURhdGFFbGVtZW50
OjpFbmNvZGVkRmlsZURhdGEmIGZpbGVEYXRhKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
YWRGcm9tRmlsZShmaWxlRGF0YSwgYnVmZmVyUG9zaXRpb24sIGJ1ZmZlclNpemUpOwotICAgICAg
ICAgICAgfSwgW10gKGNvbnN0IEZvcm1EYXRhRWxlbWVudDo6RW5jb2RlZEJsb2JEYXRhJikgewor
ICAgICAgICAgICAgfSwgW10gKGNvbnN0IEZvcm1EYXRhRWxlbWVudDo6RW5jb2RlZEJsb2JEYXRh
JikgLT4gc3RkOjpvcHRpb25hbDxzaXplX3Q+IHsKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAg
ICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L0N1cmxTU0xWZXJpZmllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvQ3VybFNTTFZlcmlmaWVyLmNwcAppbmRleCA4Yjc5YmUyYTI4NmU1MmJmZjZjYjI5OTE3NjBl
MTZlMjdhMWI0NmMwLi41NGY5YTY0YjQxNzk5N2VkYTZmNjk2YzJiNmQzZmEyY2IxYjM3Y2JjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZl
cmlmaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bFNTTFZlcmlmaWVyLmNwcApAQCAtNDQsNyArNDQsNyBAQCBDdXJsU1NMVmVyaWZpZXI6OkN1cmxT
U0xWZXJpZmllcih2b2lkKiBzc2xDdHgpCiAgICAgU1NMX0NUWF9zZXRfdmVyaWZ5KGN0eCwgU1NM
X0NUWF9nZXRfdmVyaWZ5X21vZGUoY3R4KSwgdmVyaWZ5Q2FsbGJhY2spOwogCiAjaWYgZGVmaW5l
ZChMSUJSRVNTTF9WRVJTSU9OX05VTUJFUikKLSAgICBpZiAoYXV0byBkYXRhID0gV1RGOjpnZXRf
aWY8Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZT4oc3NsSGFuZGxlLmdldENBQ2VydEluZm8o
KSkpCisgICAgaWYgKGF1dG8gZGF0YSA9IHN0ZDo6Z2V0X2lmPENlcnRpZmljYXRlSW5mbzo6Q2Vy
dGlmaWNhdGU+KCZzc2xIYW5kbGUuZ2V0Q0FDZXJ0SW5mbygpKSkKICAgICAgICAgU1NMX0NUWF9s
b2FkX3ZlcmlmeV9tZW0oY3R4LCBzdGF0aWNfY2FzdDx2b2lkKj4oY29uc3RfY2FzdDx1aW50OF90
Kj4oZGF0YS0+ZGF0YSgpKSksIGRhdGEtPnNpemUoKSk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3LmNwcAppbmRleCA3MWM3NGNiMDYy
NDUyYmRjMDE5YTAwNzc0OWE5NDgzNmQ0NmEzYWIyLi40MjdkZDg4NTQ4YmVmNjRmNjJjNmU5ZmZj
YmJiMTkyMTI3NTFmNDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJl
c29sdmVGb3JGb250UmF3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29s
dmVGb3JGb250UmF3LmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIHN0ZDo6b3B0aW9uYWw8Rm9udENh
c2NhZGU+IHJlc29sdmVGb3JGb250UmF3KGNvbnN0IEZvbnRSYXcmIGZvbnRSYXcsIEZvbnRDYXNj
YWRlCiAgICAgfQogCiAgICAgaWYgKGZvbnRSYXcud2VpZ2h0KSB7Ci0gICAgICAgIGF1dG8gd2Vp
Z2h0ID0gc3dpdGNoT24oKmZvbnRSYXcud2VpZ2h0LCBbJl0gKENTU1ZhbHVlSUQgaWRlbnQpIHsK
KyAgICAgICAgYXV0byB3ZWlnaHQgPSBXVEY6OnN3aXRjaE9uKCpmb250UmF3LndlaWdodCwgWyZd
IChDU1NWYWx1ZUlEIGlkZW50KSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGlkZW50KSB7CiAgICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgogICAgICAgICAgICAgICAgIHJldHVybiBub3Jt
YWxXZWlnaHRWYWx1ZSgpOwpAQCAtMTc5LDcgKzE3OSw3IEBAIHN0ZDo6b3B0aW9uYWw8Rm9udENh
c2NhZGU+IHJlc29sdmVGb3JGb250UmF3KGNvbnN0IEZvbnRSYXcmIGZvbnRSYXcsIEZvbnRDYXNj
YWRlCiAgICAgfQogCiAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplRnJvbUlkZW50
aWZpZXIoQ1NTVmFsdWVJbnZhbGlkKTsKLSAgICBmbG9hdCBzaXplID0gc3dpdGNoT24oZm9udFJh
dy5zaXplLCBbJl0gKENTU1ZhbHVlSUQgaWRlbnQpIHsKKyAgICBmbG9hdCBzaXplID0gV1RGOjpz
d2l0Y2hPbihmb250UmF3LnNpemUsIFsmXSAoQ1NTVmFsdWVJRCBpZGVudCkgewogICAgICAgICBz
d2l0Y2ggKGlkZW50KSB7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVYeFNtYWxsOgogICAgICAgICBj
YXNlIENTU1ZhbHVlWFNtYWxsOgpAQCAtMTk5LDcgKzE5OSw3IEBAIHN0ZDo6b3B0aW9uYWw8Rm9u
dENhc2NhZGU+IHJlc29sdmVGb3JGb250UmF3KGNvbnN0IEZvbnRSYXcmIGZvbnRSYXcsIEZvbnRD
YXNjYWRlCiAgICAgICAgICAgICByZXR1cm4gMC5mOwogICAgICAgICB9CiAgICAgfSwgWyZdIChj
b25zdCBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Okxlbmd0aE9yUGVyY2VudFJhdyYgbGVuZ3Ro
T3JQZXJjZW50KSB7Ci0gICAgICAgIHJldHVybiBzd2l0Y2hPbihsZW5ndGhPclBlcmNlbnQsIFsm
XSAoY29uc3QgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhSYXcmIGxlbmd0aCkgewor
ICAgICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihsZW5ndGhPclBlcmNlbnQsIFsmXSAoY29uc3Qg
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhSYXcmIGxlbmd0aCkgewogICAgICAgICAg
ICAgYXV0byBmb250Q2FzY2FkZSA9IEZvbnRDYXNjYWRlKEZvbnRDYXNjYWRlRGVzY3JpcHRpb24o
Zm9udERlc2NyaXB0aW9uKSk7CiAgICAgICAgICAgICBmb250Q2FzY2FkZS51cGRhdGUoY29udGV4
dC5jc3NGb250U2VsZWN0b3IoKSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogUGFzc2luZyBudWxs
IGZvciB0aGUgUmVuZGVyVmlldyBwYXJhbWV0ZXIgbWVhbnMgdGhhdCB2dyBhbmQgdmggdW5pdHMg
d2lsbCBldmFsdWF0ZSB0bwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRleCBhYWE4NzMx
ZjllY2FhNmE4MWY1MjFkYzBlN2Y4NDkyM2ZhYTgxZjA2Li42N2E4MGIwMDY3ZGIwZTE0ZjgyMjAz
ZTMzMTk1YTY2YTU5ZTQ2OTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcApAQCAtNDcw
LDcgKzQ3MCw3IEBAIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6QmxvYkRhdGFGaWxlUmVmZXJlbmNl
Pj4gTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlCiAgICAgVmVjdG9yPFJlZlB0cjxX
ZWJDb3JlOjpCbG9iRGF0YUZpbGVSZWZlcmVuY2U+PiBmaWxlczsKICAgICBpZiAoYXV0byogYm9k
eSA9IGxvYWRQYXJhbWV0ZXJzLnJlcXVlc3QuaHR0cEJvZHkoKSkgewogICAgICAgICBmb3IgKGF1
dG8mIGVsZW1lbnQgOiBib2R5LT5lbGVtZW50cygpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byog
YmxvYkRhdGEgPSBXVEY6OmdldF9pZjxGb3JtRGF0YUVsZW1lbnQ6OkVuY29kZWRCbG9iRGF0YT4o
ZWxlbWVudC5kYXRhKSkKKyAgICAgICAgICAgIGlmIChhdXRvKiBibG9iRGF0YSA9IHN0ZDo6Z2V0
X2lmPEZvcm1EYXRhRWxlbWVudDo6RW5jb2RlZEJsb2JEYXRhPigmZWxlbWVudC5kYXRhKSkKICAg
ICAgICAgICAgICAgICBmaWxlcy5hcHBlbmRWZWN0b3IoYmxvYlJlZ2lzdHJ5LmZpbGVzSW5CbG9i
KGJsb2JEYXRhLT51cmwpKTsKICAgICAgICAgfQogICAgICAgICBjb25zdF9jYXN0PFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCY+KGxvYWRQYXJhbWV0ZXJzLnJlcXVlc3QpLnNldEhUVFBCb2R5KGJv
ZHktPnJlc29sdmVCbG9iUmVmZXJlbmNlcygmYmxvYlJlZ2lzdHJ5KSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJz
LmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFBh
cmFtZXRlcnMuY3BwCmluZGV4IGRkZjk2ZGUwMzNjNjVmNTUyMWYzYmJiZTgxZDE5YWM4ZTdhNWJl
OWQuLjZiYjBiZTg0NDZhMDlmZDQ1ZDVjMDg3OGM4MGY2NmFlNWIxNmQxYWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRl
cnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNl
TG9hZFBhcmFtZXRlcnMuY3BwCkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNl
TG9hZFBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAKICAg
ICAgICAgVmVjdG9yPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gcmVxdWVzdEJvZHlTYW5kYm94
RXh0ZW5zaW9uczsKICAgICAgICAgZm9yIChjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGVsZW1lbnQg
OiByZXF1ZXN0Lmh0dHBCb2R5KCktPmVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRv
KiBmaWxlRGF0YSA9IFdURjo6Z2V0X2lmPEZvcm1EYXRhRWxlbWVudDo6RW5jb2RlZEZpbGVEYXRh
PihlbGVtZW50LmRhdGEpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogZmlsZURhdGEgPSBzdGQ6
OmdldF9pZjxGb3JtRGF0YUVsZW1lbnQ6OkVuY29kZWRGaWxlRGF0YT4oJmVsZW1lbnQuZGF0YSkp
IHsKICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSBmaWxlRGF0YS0+ZmlsZW5h
bWU7CiAgICAgICAgICAgICAgICAgaWYgKGF1dG8gaGFuZGxlID0gU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5KSkKICAg
ICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9ucy5hcHBlbmQoV1RG
TW92ZSgqaGFuZGxlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9B
cmd1bWVudENvZGVycy5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2Rl
cnMuaAppbmRleCA0NzlkYjYwZWRjMjcxNmQ1NTYwNmY2NTJmMjQzMWFkMzY5ZjY1NzBjLi5kMzE1
NjUwZDAxZTMzN2ZmY2ViNmFjMWUxNzE0NzNkOGY5YzA5NzQxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgKQEAgLTcwNyw3ICs3MDcsNyBAQCBzdHJ1Y3Qg
VmFyaWFudENvZGVyIHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgV1RGOjpWYXJpYW50PFR5cGVzLi4uPiYgdmFyaWFudCwgdW5zaWduZWQgaSkKICAgICB7
CiAgICAgICAgIGlmIChpID09IGluZGV4KSB7Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IFdURjo6
Z2V0PGluZGV4Pih2YXJpYW50KTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RkOjpnZXQ8aW5k
ZXg+KHZhcmlhbnQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIFZh
cmlhbnRDb2RlcjxpbmRleCAtIDEsIFR5cGVzLi4uPjo6ZW5jb2RlKGVuY29kZXIsIHZhcmlhbnQs
IGkpOwpAQCAtNzE2LDcgKzcxNiw3IEBAIHN0cnVjdCBWYXJpYW50Q29kZXIgewogICAgIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPFdURjo6VmFyaWFudDxUeXBlcy4uLj4+IGRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyLCB1bnNpZ25lZCBpKQogICAgIHsKICAgICAgICAgaWYgKGkgPT0gaW5kZXgpIHsKLSAg
ICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dHlwZW5hbWUgV1RGOjp2YXJpYW50X2FsdGVybmF0aXZl
PGluZGV4LCBXVEY6OlZhcmlhbnQ8VHlwZXMuLi4+Pjo6dHlwZT4gb3B0aW9uYWw7CisgICAgICAg
ICAgICBzdGQ6Om9wdGlvbmFsPHR5cGVuYW1lIHN0ZDo6dmFyaWFudF9hbHRlcm5hdGl2ZTxpbmRl
eCwgV1RGOjpWYXJpYW50PFR5cGVzLi4uPj46OnR5cGU+IG9wdGlvbmFsOwogICAgICAgICAgICAg
ZGVjb2RlciA+PiBvcHRpb25hbDsKICAgICAgICAgICAgIGlmICghb3B0aW9uYWwpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKQEAgLTczMSwxMyArNzMxLDEzIEBAIHN0cnVj
dCBWYXJpYW50Q29kZXI8MCwgVHlwZXMuLi4+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5j
b2RlciYgZW5jb2RlciwgY29uc3QgV1RGOjpWYXJpYW50PFR5cGVzLi4uPiYgdmFyaWFudCwgdW5z
aWduZWQgaSkKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoaSwgIWkpOwotICAgICAgICBl
bmNvZGVyIDw8IFdURjo6Z2V0PDA+KHZhcmlhbnQpOworICAgICAgICBlbmNvZGVyIDw8IHN0ZDo6
Z2V0PDA+KHZhcmlhbnQpOwogICAgIH0KICAgICAKICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxX
VEY6OlZhcmlhbnQ8VHlwZXMuLi4+PiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgdW5zaWduZWQg
aSkKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoaSwgIWkpOwotICAgICAgICBzdGQ6Om9w
dGlvbmFsPHR5cGVuYW1lIFdURjo6dmFyaWFudF9hbHRlcm5hdGl2ZTwwLCBXVEY6OlZhcmlhbnQ8
VHlwZXMuLi4+Pjo6dHlwZT4gb3B0aW9uYWw7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8dHlwZW5h
bWUgc3RkOjp2YXJpYW50X2FsdGVybmF0aXZlPDAsIFdURjo6VmFyaWFudDxUeXBlcy4uLj4+Ojp0
eXBlPiBvcHRpb25hbDsKICAgICAgICAgZGVjb2RlciA+PiBvcHRpb25hbDsKICAgICAgICAgaWYg
KCFvcHRpb25hbCkKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Gb3JtRGF0YVJlZmVyZW5jZS5oIGIvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvRm9ybURhdGFSZWZlcmVuY2UuaAppbmRleCBjMmQ1ODk1OTVm
NWUzNDEwZDFhZWFmNDJiYTdhZWUyMzhmNzE1NDE3Li5iY2RiMTcwMDdiYzJmMGU1OWNkNmQwOGZl
YjRlMjZkM2VmOGQ2ZTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9G
b3JtRGF0YVJlZmVyZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Zvcm1E
YXRhUmVmZXJlbmNlLmgKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogCiAgICAgICAgIFZlY3Rv
cjxXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4gc2FuZGJveEV4dGVuc2lvbkhhbmRs
ZXM7CiAgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IG1fZGF0YS0+ZWxlbWVudHMoKSkgewot
ICAgICAgICAgICAgaWYgKGF1dG8qIGZpbGVEYXRhID0gV1RGOjpnZXRfaWY8V2ViQ29yZTo6Rm9y
bURhdGFFbGVtZW50OjpFbmNvZGVkRmlsZURhdGE+KGVsZW1lbnQuZGF0YSkpIHsKKyAgICAgICAg
ICAgIGlmIChhdXRvKiBmaWxlRGF0YSA9IHN0ZDo6Z2V0X2lmPFdlYkNvcmU6OkZvcm1EYXRhRWxl
bWVudDo6RW5jb2RlZEZpbGVEYXRhPigmZWxlbWVudC5kYXRhKSkgewogICAgICAgICAgICAgICAg
IGNvbnN0IFN0cmluZyYgcGF0aCA9IGZpbGVEYXRhLT5maWxlbmFtZTsKICAgICAgICAgICAgICAg
ICBpZiAoYXV0byBoYW5kbGUgPSBXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZShwYXRoLCBXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5KSkKICAgICAg
ICAgICAgICAgICAgICAgc2FuZGJveEV4dGVuc2lvbkhhbmRsZXMuYXBwZW5kKFdURk1vdmUoKmhh
bmRsZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvTWVzc2FnZVJl
Y2VpdmVRdWV1ZU1hcC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9NZXNzYWdlUmVj
ZWl2ZVF1ZXVlTWFwLmNwcAppbmRleCA0NmZlMGU4MDQ1MzlkZmZmMTU1ZmRjYWY0MGUzYTA4YjA1
MDliMmJhLi5lZGY1NjJmMjM3NGQ2ZmFlMTU1YzQwNGVhNzkwYTRkNjgyYTVlZDI5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9NZXNzYWdlUmVjZWl2ZVF1ZXVlTWFwLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9NZXNzYWdlUmVjZWl2ZVF1ZXVlTWFw
LmNwcApAQCAtNTUsNyArNTUsNyBAQCBNZXNzYWdlUmVjZWl2ZVF1ZXVlKiBNZXNzYWdlUmVjZWl2
ZVF1ZXVlTWFwOjpnZXQoY29uc3QgRGVjb2RlciYgbWVzc2FnZSkgY29uc3QKICAgICB9CiAgICAg
aWYgKGl0ID09IG1fcXVldWVzLmVuZCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBy
ZXR1cm4gV1RGOjp2aXNpdCgKKyAgICByZXR1cm4gc3RkOjp2aXNpdCgKICAgICAgICAgV1RGOjpt
YWtlVmlzaXRvcigKICAgICAgICAgICAgIFtdKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxNZXNzYWdl
UmVjZWl2ZVF1ZXVlPiYgcXVldWUpIHsgcmV0dXJuIHF1ZXVlLmdldCgpOyB9LAogICAgICAgICAg
ICAgW10oTWVzc2FnZVJlY2VpdmVRdWV1ZSogcXVldWUpIHsgcmV0dXJuIHF1ZXVlOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFT
YW1wbGVDdXJzb3IuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVh
ZGVyL01lZGlhU2FtcGxlQ3Vyc29yLmNwcAppbmRleCA5NjJlMjExZTFiZjJjMTE4MjhiYmQ3ZTA3
NDgyNjkwOWQwYzAzMzgwLi4zNGNhYzA5NTFlM2RhZDY3YzQ2ZDQ5MzM3MDM1MWMwODNmYzY2YjNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIv
TWVkaWFTYW1wbGVDdXJzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRp
YUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUN1cnNvci5jcHAKQEAgLTE1MywxMyArMTUzLDExIEBA
IHN0ZDo6b3B0aW9uYWw8dHlwZW5hbWUgT3JkZXJlZE1hcDo6aXRlcmF0b3I+IE1lZGlhU2FtcGxl
Q3Vyc29yOjpsb2NhdGVJdGVyYXRvcihPCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAgICAgICAgIHJldHVybiBsb2NhdGVJdGVyYXRv
cihzYW1wbGVzLCBoYXNBbGxTYW1wbGVzKTsKLSAgICAgICAgfSwKLSAgICAgICAgWyZdKGNvbnN0
IGF1dG8mIG90aGVySXRlcmF0b3IpIHsKKyAgICAgICAgfSwgWyZdKGNvbnN0IGF1dG8mIG90aGVy
SXRlcmF0b3IpIC0+IHN0ZDo6b3B0aW9uYWw8SXRlcmF0b3I+IHsKICAgICAgICAgICAgIGFzc2Vy
dElzSGVsZChtX2xvY2F0b3JMb2NrKTsKICAgICAgICAgICAgIG1fbG9jYXRvciA9IG90aGVySXRl
cmF0b3ItPnNlY29uZC0+cHJlc2VudGF0aW9uVGltZSgpOwogICAgICAgICAgICAgcmV0dXJuIGxv
Y2F0ZUl0ZXJhdG9yKHNhbXBsZXMsIGhhc0FsbFNhbXBsZXMpOwotICAgICAgICB9LAotICAgICAg
ICBbJl0oY29uc3QgSXRlcmF0b3ImIGl0ZXJhdG9yKSB7CisgICAgICAgIH0sIFsmXShjb25zdCBJ
dGVyYXRvciYgaXRlcmF0b3IpIC0+IHN0ZDo6b3B0aW9uYWw8SXRlcmF0b3I+IHsKICAgICAgICAg
ICAgIHJldHVybiBpdGVyYXRvcjsKICAgICAgICAgfQogICAgICk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaAppbmRl
eCAwYjBlMjFlZWE4NmRlYjRkZjBiMmNhMDRmNTQyM2EyMmNlYjczNGU1Li44MmMxYmY4OTQxY2Q3
YWJhNjU1ODNiMTNkZjNkNWEzNWM2ZWMyYWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5lbC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmgKQEAgLTMwLDYgKzMw
LDcgQEAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0F1dGhlbnRp
Y2F0b3JUcmFuc3BvcnQuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CisjaW5jbHVkZSA8
d3RmL1ZhcmlhbnQuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
dXRvbWF0aW9uL1NpbXVsYXRlZElucHV0RGlzcGF0Y2hlci5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQXV0b21hdGlvbi9TaW11bGF0ZWRJbnB1dERpc3BhdGNoZXIuaAppbmRleCA4MDZiMjU0
ZTMwNzBiZTg0NGExYjIzOTEyNDFkZTY3NWM5NGNhODRkLi4zYWEyNWZkMDY3OTc4MTYyMmYxMDY2
NWM3NDdiY2Q3YzVmM2QxYjhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
dXRvbWF0aW9uL1NpbXVsYXRlZElucHV0RGlzcGF0Y2hlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0F1dG9tYXRpb24vU2ltdWxhdGVkSW5wdXREaXNwYXRjaGVyLmgKQEAgLTM0LDYg
KzM0LDcgQEAKICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUnVu
TG9vcC5oPgogI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2FmZUJy
b3dzaW5nV2FybmluZy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV0tTYWZlQnJv
d3NpbmdXYXJuaW5nLmgKaW5kZXggNjFiZTM3MTdiODA2NDZhNmZhMzAxYjIyMzU0YWY3ODlhMjU0
YTVlMC4uNDMxODljMGEzYTFlOTU5NzgwY2FiMTJhZTI2YzhiNzdlZDUzNzA3OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV0tTYWZlQnJvd3NpbmdXYXJuaW5nLmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV0tTYWZlQnJvd3NpbmdXYXJuaW5n
LmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbXBvcnQgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgog
I2ltcG9ydCA8d3RmL1JlZlB0ci5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9y
dCA8d3RmL1ZhcmlhbnQuaD4KICNpbXBvcnQgPHd0Zi9XZWFrT2JqQ1B0ci5oPgogCiAjaWYgUExB
VEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAppbmRleCAyN2JjZDAwNTQ1MDk1
OGU4MDIxMjMzMGMxZTg5NmUzYzg5MTczNGZiLi5lYWE2MzBhNDFmMjMxN2MyNjY3NmRhYmQzNmUz
M2YzYTlkNzVhMzIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaApAQCAtMzM5LDcgKzMz
OSw3IEBAIHByb3RlY3RlZDoKIAogICAgIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGVu
Y29kZUl0ZW1PdXRPZkxpbmUoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0
SXRlbSYgaXRlbSkgY29uc3QgZmluYWwKICAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OnZpc2l0
KFtdKGNvbnN0IGF1dG8mIGRpc3BsYXlMaXN0SXRlbSkgLT4gUmVmUHRyPFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlcj4geworICAgICAgICByZXR1cm4gc3RkOjp2aXNpdChbXShjb25zdCBhdXRvJiBkaXNw
bGF5TGlzdEl0ZW0pIC0+IFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IHsKICAgICAgICAg
ICAgIHVzaW5nIERpc3BsYXlMaXN0SXRlbVR5cGUgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5k
UmVmZXJlbmNlPGRlY2x0eXBlKGRpc3BsYXlMaXN0SXRlbSk+Ojp0eXBlOwogICAgICAgICAgICAg
aWYgY29uc3RleHByICghRGlzcGxheUxpc3RJdGVtVHlwZTo6aXNJbmxpbmVJdGVtKQogICAgICAg
ICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxEaXNwbGF5
TGlzdEl0ZW1UeXBlPihkaXNwbGF5TGlzdEl0ZW0pOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGQ1M2U3YWUxYTYyYzM3NDI1ZTZkYWFmODY1YjVl
MDY2ZTU3YmE3NDIuLmU0MzY5Yzc5NDZhMWFmOTRmNTM1MGVmNGU2YjMyZTYzNDQxNzJlNDIgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNyBAQAorMjAyMS0xMC0wMyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJr
aXQub3JnPgorCisgICAgICAgIEJlZ2luIG1pZ3JhdGlvbiBmcm9tIFdURjo6VmFyaWFudCB0byBz
dGQ6OnZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzMTA4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaGVyLmNwcDoKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OmFkZCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFu
dC5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1ByaXZhdGVDbGlja01lYXN1cmVtZW50Lm1tOgorICAg
ICAgICAoYWRkVmFsdWVzVG9UYWJsZSk6CisKIDIwMjEtMTAtMDMgIERhdmlkIEtpbHplciAgPGRk
a2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBXVEY6OlJldGFpblB0cjw+IGFsbG93cyBhc3Np
Z25tZW50IG9mIHR3byBwb2ludGVyIHR5cGVzIHRoYXQgYXJlIG5vdCBhc3NpZ25hYmxlCmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoZXIuY3BwIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaGVyLmNwcAppbmRleCA1OWUyMjU2MjRmYjNhNWZk
NjUyY2QyYTJhMjQ5ZmE2NTM0ZDk2MDQ1Li44NjQ4OTY4NTI1OGVmMWM5OGRjOTBiMjY1NDRjNGY0
ZWNlZGVjNDg3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNo
ZXIuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hlci5jcHAKQEAg
LTIwMCw3ICsyMDAsNyBAQCBzdHJ1Y3QgSGFzaGVyQWRkQ3VzdG9tMiB7IH07CiAKIHZvaWQgYWRk
KEhhc2hlciYgaGFzaGVyLCBjb25zdCBIYXNoZXJBZGRDdXN0b20yJikKIHsKLSAgICBhZGQoaGFz
aGVyLCB7IDEsIDIsIDMsIDQgfSk7CisgICAgYWRkKGhhc2hlciwgc3RkOjppbml0aWFsaXplcl9s
aXN0PGludD4geyAxLCAyLCAzLCA0IH0pOwogfQogCiBURVNUKFdURiwgSGFzaGVyX2N1c3RvbSkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQuY3BwIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHAKaW5kZXggNTFlY2EwNzY4
ZDJjY2UxYzlhMzI5NTU1MmQzNTAwOWZmNGZkNTZiYi4uZTQ4NWQ0MzA3YWVmZDA2ZDlmZGZiYTM4
NjRlOTMyMjQzOWIzMTZjNSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvVmFyaWFudC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFu
dC5jcHAKQEAgLTU0LDE4ICs1NCwxOCBAQCBURVNUKFdURl9WYXJpYW50LCBJbml0aWFsKQogVEVT
VChXVEZfVmFyaWFudCwgQmFzaWMpCiB7CiAgICAgVmFyaWFudDxpbnQsIGRvdWJsZT4gdmFyaWFu
dCA9IDE7Ci0gICAgRVhQRUNUX1RSVUUodmFyaWFudC5pbmRleCgpID09IDApOwotICAgIEVYUEVD
VF9UUlVFKFdURjo6Z2V0PGludD4odmFyaWFudCkgPT0gMSk7Ci0gICAgRVhQRUNUX1RSVUUoKldU
Rjo6Z2V0X2lmPGludD4odmFyaWFudCkgPT0gMSk7Ci0gICAgRVhQRUNUX1RSVUUoV1RGOjpnZXRf
aWY8ZG91YmxlPih2YXJpYW50KSA9PSBudWxscHRyKTsKKyAgICBFWFBFQ1RfRVEodmFyaWFudC5p
bmRleCgpLCAwdSk7CisgICAgRVhQRUNUX0VRKFdURjo6Z2V0PGludD4odmFyaWFudCksIDEpOwor
ICAgIEVYUEVDVF9FUSgqc3RkOjpnZXRfaWY8aW50PigmdmFyaWFudCksIDEpOworICAgIEVYUEVD
VF9FUShzdGQ6OmdldF9pZjxkb3VibGU+KCZ2YXJpYW50KSwgbnVsbHB0cik7CiAgICAgRVhQRUNU
X1RSVUUoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxpbnQ+KHZhcmlhbnQpKTsKICAgICBFWFBFQ1Rf
RkFMU0UoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxkb3VibGU+KHZhcmlhbnQpKTsKIAogICAgIHZh
cmlhbnQgPSAxLjA7Ci0gICAgRVhQRUNUX1RSVUUodmFyaWFudC5pbmRleCgpID09IDEpOwotICAg
IEVYUEVDVF9UUlVFKFdURjo6Z2V0PGRvdWJsZT4odmFyaWFudCkgPT0gMSk7Ci0gICAgRVhQRUNU
X1RSVUUoKldURjo6Z2V0X2lmPGRvdWJsZT4odmFyaWFudCkgPT0gMS4wKTsKLSAgICBFWFBFQ1Rf
VFJVRShXVEY6OmdldF9pZjxpbnQ+KHZhcmlhbnQpID09IG51bGxwdHIpOworICAgIEVYUEVDVF9F
USh2YXJpYW50LmluZGV4KCksIDF1KTsKKyAgICBFWFBFQ1RfRVEoV1RGOjpnZXQ8ZG91YmxlPih2
YXJpYW50KSwgMSk7CisgICAgRVhQRUNUX0VRKCpzdGQ6OmdldF9pZjxkb3VibGU+KCZ2YXJpYW50
KSwgMS4wKTsKKyAgICBFWFBFQ1RfRVEoc3RkOjpnZXRfaWY8aW50PigmdmFyaWFudCksIG51bGxw
dHIpOwogICAgIEVYUEVDVF9UUlVFKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPih2YXJp
YW50KSk7CiAgICAgRVhQRUNUX0ZBTFNFKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8aW50Pih2YXJp
YW50KSk7CiB9CkBAIC05NSwxNyArOTUsMTcgQEAgVEVTVChXVEZfVmFyaWFudCwgQmFzaWNWaXNp
dG9yKQogICAgIFR5cGUgdHlwZSA9IFR5cGU6Ok5vbmU7CiAKICAgICBWYXJpYW50PGludCwgZmxv
YXQsIFN0cmluZz4gdmFyaWFudCA9IDg7Ci0gICAgV1RGOjp2aXNpdChWaXNpdG9yKHR5cGUpLCB2
YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0KFZpc2l0b3IodHlwZSksIHZhcmlhbnQpOwogICAgIEVY
UEVDVF9UUlVFKFR5cGU6OkludCA9PSB0eXBlKTsKIAogCiAgICAgdmFyaWFudCA9IDEuMGY7Ci0g
ICAgV1RGOjp2aXNpdChWaXNpdG9yKHR5cGUpLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0KFZp
c2l0b3IodHlwZSksIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6OkZsb2F0ID09IHR5
cGUpOwogCiAKICAgICB2YXJpYW50ID0gImhlbGxvIjsKLSAgICBXVEY6OnZpc2l0KFZpc2l0b3Io
dHlwZSksIHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFudCk7
CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6U3RyaW5nID09IHR5cGUpOwogfQogCkBAIC0xMjgsMTEg
KzEyOCwxMSBAQCBURVNUKFdURl9WYXJpYW50LCBSZXRhaW5QdHIpCiAgICAgUmVmUHRyPFJlZkxv
Z2dlcj4gcmVmUHRyOwogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHJldGFpblB0cjsKICAgICBW
YXJpYW50PFJlZlB0cjxSZWZMb2dnZXI+LCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4gdmFyaWFudChX
VEZNb3ZlKHJlZlB0cikpOwotICAgIFdURjo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CisgICAg
c3RkOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKICAgICBFWFBFQ1RfVFJVRShUeXBlOjpSZWZQ
dHIgPT0gdHlwZSk7CiAgICAgCiAgICAgdmFyaWFudCA9IFdURk1vdmUocmV0YWluUHRyKTsKLSAg
ICBXVEY6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQodmlzaXRvciwg
dmFyaWFudCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6UmV0YWluUHRyID09IHR5cGUpOwogfQog
I2VuZGlmCkBAIC0xNTUsMTcgKzE1NSwxNyBAQCBURVNUKFdURl9WYXJpYW50LCBWaXNpdG9yVXNp
bmdNYWtlVmlzaXRvcikKICAgICApOwogCiAgICAgVmFyaWFudDxpbnQsIGZsb2F0LCBTdHJpbmc+
IHZhcmlhbnQgPSA4OwotICAgIFdURjo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CisgICAgc3Rk
Ojp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKICAgICBFWFBFQ1RfVFJVRShUeXBlOjpJbnQgPT0g
dHlwZSk7CiAKIAogICAgIHZhcmlhbnQgPSAxLjBmOwotICAgIFdURjo6dmlzaXQodmlzaXRvciwg
dmFyaWFudCk7CisgICAgc3RkOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKICAgICBFWFBFQ1Rf
VFJVRShUeXBlOjpGbG9hdCA9PSB0eXBlKTsKIAogCiAgICAgdmFyaWFudCA9ICJoZWxsbyI7Ci0g
ICAgV1RGOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0KHZpc2l0b3Is
IHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6OlN0cmluZyA9PSB0eXBlKTsKIH0KIApk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcml2YXRl
Q2xpY2tNZWFzdXJlbWVudC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQubW0KaW5kZXggN2ZiYmYyMmQ4NmFiNDQ1NzlmMTVl
Nzc4NjdkNmM5NGUyZjA5ZjE4MS4uYjQ3MGRmNzQ5MTA2Y2IwZWEyMDE2MDQ1MTg4ZTI4YjgyOWEz
NjY4NyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Q
cml2YXRlQ2xpY2tNZWFzdXJlbWVudC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1ByaXZhdGVDbGlja01lYXN1cmVtZW50Lm1tCkBAIC02NCw3ICs2NCw3IEBA
IHZvaWQgYWRkVmFsdWVzVG9UYWJsZShXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2Us
IEFTQ0lJTGl0ZXJhbCBxdWVyeSwgc3RkCiAgICAgICAgIH0sIFsmXSAoZG91YmxlIHJlYWwpIHsK
ICAgICAgICAgICAgIHJldHVybiBzdGF0ZW1lbnQtPmJpbmREb3VibGUoaSArIDEsIHJlYWwpOwog
ICAgICAgICB9KTsKLSAgICAgICAgYXV0byByZXN1bHQgPSBXVEY6OnZpc2l0KHZpc2l0b3IsIHZh
bHVlc1tpXSk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gc3RkOjp2aXNpdCh2aXNpdG9yLCB2YWx1
ZXNbaV0pOwogICAgICAgICBFWFBFQ1RfRVEocmVzdWx0LCBTUUxJVEVfT0spOwogICAgIH0KICAg
ICBFWFBFQ1RfRVEoc3RhdGVtZW50LT5zdGVwKCksIFNRTElURV9ET05FKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440103</attachid>
            <date>2021-10-04 14:12:12 -0700</date>
            <delta_ts>2021-10-04 16:39:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231086-20211004141211.patch</filename>
            <type>text/plain</type>
            <size>172144</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
NzE4MGI4MTg4NGJmNDA2Njc5NzQ1MWY5ZjFkZWYwMGMyYzE0ZWU1Li44YmY3M2JmNjUwNjhiYjEw
OTYxNjViYzg2ODExY2VjM2M2MWZmYzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOCBAQAorMjAyMS0xMC0wNCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3
ZWJraXQub3JnPgorCisgICAgICAgIEJlZ2luIG1pZ3JhdGlvbiBmcm9tIFdURjo6VmFyaWFudCB0
byBzdGQ6OnZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzMTA4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHA6Cisg
ICAgICAgIChKU0M6OldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hwb2lu
dCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNhbGxET00pOgorICAgICAgICAqIHBhcnNlci9M
ZXhlci5jcHA6CisgICAgICAgIChKU0M6OkxleGVyPFQ+OjpwYXJzZUhleCk6CisgICAgICAgIChK
U0M6OkxleGVyPFQ+OjpwYXJzZUJpbmFyeSk6CisgICAgICAgIChKU0M6OkxleGVyPFQ+OjpwYXJz
ZU9jdGFsKToKKyAgICAgICAgKEpTQzo6TGV4ZXI8VD46OnBhcnNlRGVjaW1hbCk6CisgICAgICAg
ICogcnVudGltZS9DYWNoZVBheWxvYWQuY3BwOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6
OmRhdGEgY29uc3QpOgorICAgICAgICAoSlNDOjpDYWNoZVBheWxvYWQ6OnNpemUgY29uc3QpOgor
ICAgICAgICAqIHJ1bnRpbWUvQ2FjaGVVcGRhdGUuY3BwOgorICAgICAgICAoSlNDOjpDYWNoZVVw
ZGF0ZTo6Q2FjaGVVcGRhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvVGVtcG9yYWxUaW1lWm9uZS5j
cHA6CisgICAgICAgIChKU0M6OlRlbXBvcmFsVGltZVpvbmU6OmNyZWF0ZUZyb21JRCk6CisgICAg
ICAgIChKU0M6OlRlbXBvcmFsVGltZVpvbmU6OmNyZWF0ZUZyb21VVENPZmZzZXQpOgorCiAyMDIx
LTEwLTA0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIEludHJp
bnNpY0dldHRlckFjY2Vzc0Nhc2UgaW1wbGVtZW50YXRpb24gb2YgX19wcm90b19fIG5lZWRzIHRv
IGhhbmRsZSBnZXRfYnlfaWRfd2l0aF90aGlzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDQ5NjhkYWMzNWYzNzNkODkwYmIwMTZi
ZTIxYmQyZDYzMTIzMjQ2Y2YuLmZlZWJlOGQwYjAyMGQ4Mzc2NTMxY2VmODlkZTQzMmZmZjlmNGUy
OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTQgQEAKKzIwMjEtMTAtMDQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxh
Y2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBCZWdpbiBtaWdyYXRpb24gZnJvbSBX
VEY6OlZhcmlhbnQgdG8gc3RkOjp2YXJpYW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEwODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9Gb3J3YXJkLmg6CisgICAgICAgICogd3RmL0hhc2hl
ci5oOgorICAgICAgICAoV1RGOjphZGQpOgorICAgICAgICAqIHd0Zi9MaWtlbHlEZW5zZVVuc2ln
bmVkSW50ZWdlclNldC5oOgorICAgICAgICAoV1RGOjpMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdl
clNldDo6aXRlcmF0b3I6Om9wZXJhdG9yKiBjb25zdCk6CisgICAgICAgICogd3RmL1ZhcmlhbnQu
aDoKKyAgICAgICAgKFdURjo6Z2V0KToKKyAgICAgICAgKFdURjo6c3dpdGNoT24pOgorICAgICAg
ICAoV1RGOjppbl9wbGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fdGhyb3dfYmFkX3Zh
cmlhbnRfYWNjZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6PSk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Ol9fdmFyaWFudF9zdG9yYWdlOjpfX2dldCk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6Ol9fdmFyaWFudF9zdG9yYWdlOjpfX2dldF9ycmVmKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6X192YXJpYW50X3N0b3JhZ2U6Ol9fZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
Ol9fc3RvcmFnZV93cmFwcGVyOjpfX2NvbnN0cnVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
Ol9fc3RvcmFnZV93cmFwcGVyOjpfX3N0b3JhZ2Vfd3JhcHBlcik6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6Ol9fc3RvcmFnZV93cmFwcGVyOjpfX2dldCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
Ol9fc3RvcmFnZV93cmFwcGVyOjpfX2dldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
Ol9fc3RvcmFnZV93cmFwcGVyOjpfX2Rlc3Ryb3kpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpf
X3N0b3JhZ2Vfd3JhcHBlcjxfVHlwZTo6X19zdG9yYWdlX3dyYXBwZXIpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjxfVHlwZTo6X19nZXQpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjxfVHlwZTo6X19nZXQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV1RGOjpfX3ZhcmlhbnRfYmFzZTo6fl9fdmFyaWFudF9iYXNlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6X19iYWNrdXBfc3RvcmFnZV9vcHM6Ol9fbW92ZV9jb25zdHJ1Y3Rf
ZnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fYmFja3VwX3N0b3JhZ2Vfb3BzOjpfX2Rl
c3Ryb3lfZnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fYmFja3VwX3N0b3JhZ2U6Ol9f
YmFja3VwX3N0b3JhZ2UpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX2JhY2t1cF9zdG9yYWdl
OjpfX2Rlc3Ryb3kpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX2JhY2t1cF9zdG9yYWdlOjp+
X19iYWNrdXBfc3RvcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlZhcmlhbnQ8Pjo6c3dh
cCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fTk9FWENFUFRfKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6X192YXJpYW50X2FjY2Vzc29yOjpnZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpnZXRfaWYpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3Zpc2l0b3JfdGFibGU6Ol9fdHJh
bXBvbGluZV9mdW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6dmlzaXQpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpfX2FyZ19zZWxlY3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9f
dmlzaXRfaGVscGVyMjo6X192aXNpdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Om9wZXJhdG9y
PT0pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpvcGVyYXRvciE9KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6b3BlcmF0b3I8KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6b3BlcmF0b3I+KTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6b3BlcmF0b3I+PSk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6Om9wZXJhdG9yPD0pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX2hhc2hfdmlzaXRvcjo6
b3BlcmF0b3IoKSk6IERlbGV0ZWQuCisKIDIwMjEtMTAtMDQgIFNhbSBXZWluaWcgIDx3ZWluaWdA
YXBwbGUuY29tPgogCiAgICAgICAgIFNwbGl0IFdlYlhSIGV4dGVuc2lvbiBtb2R1bGUgSURMcyBp
bnRvIHRoZWlyIG93biBmaWxlcyBhbmQgc2V0dGluZ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2ZDk2NjI4YTUz
MjE1YWVhMTRkZjVjOGJkMWVjYWM2NzA5NWJiMGNkLi5lYTFkZWE4YmVkZWIyNDdmNTU5NmExNzk1
NWY0ZWUxMzc5OTYxMWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMzIEBACisyMDIxLTEwLTA0
ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
QmVnaW4gbWlncmF0aW9uIGZyb20gV1RGOjpWYXJpYW50IHRvIHN0ZDo6dmFyaWFudAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMDg2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2NhY2hl
L0RPTUNhY2hlRW5naW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpp
c29sYXRlZFJlc3BvbnNlQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6
Y29weVJlc3BvbnNlQm9keSk6CisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlPd25l
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHlPd25lcjo6bG9hZGluZ0V4Y2VwdGlv
biBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjppc0lEQktleVBhdGhWYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpp
c29sYXRlZENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6bG9nZ2luZ1N0cmluZyk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJSZXF1ZXN0Ojpzb3VyY2VPYmplY3RTdG9yZUlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnNlcmlhbGl6ZUlEQktleVBhdGgpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFj
b250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNv
bnRyb2xzSG9zdDo6ZGlzcGxheU5hbWVGb3JUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUNvbnRyb2xzSG9zdDo6c2hvd01lZGlhQ29udHJvbHNDb250ZXh0TWVudSk6CisgICAgICAgICog
TW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSVENQZWVyQ29ubmVjdGlvbjo6YWRkSWNlQ2FuZGlkYXRlKToKKyAgICAgICAgKiBNb2R1
bGVzL21lZGlhc3RyZWFtL1JUQ1J0cFRyYW5zZm9ybS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
VENSdHBUcmFuc2Zvcm06OmlzQXR0YWNoZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6b3Bl
cmF0b3I9PSk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2Vi
UlRDUnRwU2VuZGVyQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMaWJXZWJSVENSdHBT
ZW5kZXJCYWNrZW5kOjp2aWRlb1NvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpMaWJXZWJSVENS
dHBTZW5kZXJCYWNrZW5kOjpoYXNTb3VyY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6b3Bl
cmF0b3I9PSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJ4ci9XZWJYUkZyYW1lLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlhSRnJhbWU6OmdldFZpZXdlclBvc2UpOgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZE9iamVjdDo6aW50UG9pbnRBdHRyaWJ1dGVWYWx1ZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkT2JqZWN0OjpvYmplY3RBdHRyaWJ1
dGVWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkT2JqZWN0OjpyZWN0
QXR0cmlidXRlVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZE9iamVj
dDo6dmVjdG9yQXR0cmlidXRlVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QVhJc29s
YXRlZE9iamVjdDo6b3B0aW9uU2V0QXR0cmlidXRlVmFsdWUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QVhJc29sYXRlZE9iamVjdDo6cGFpckF0dHJpYnV0ZVZhbHVlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6OnVpbnQ2NEF0dHJpYnV0ZVZhbHVlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6OnVybEF0dHJpYnV0ZVZhbHVl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6OnBhdGhBdHRyaWJ1
dGVWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkT2JqZWN0Ojpjb2xv
ckF0dHJpYnV0ZVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmpl
Y3Q6OmZsb2F0QXR0cmlidXRlVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QVhJc29s
YXRlZE9iamVjdDo6ZG91YmxlQXR0cmlidXRlVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6QVhJc29sYXRlZE9iamVjdDo6dW5zaWduZWRBdHRyaWJ1dGVWYWx1ZSBjb25zdCk6CisgICAg
ICAgICogYmluZGluZ3MvanMvQnVmZmVyU291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpCdWZm
ZXJTb3VyY2U6OmRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QnVmZmVyU291cmNlOjps
ZW5ndGggY29uc3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlS2V5UGF0aEFycmF5KToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRVbmlvbi5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
RE9NQ29udmVydFdlYkdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0pTVmFsdWUp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Q3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUGF5bWVudE1ldGhvZENoYW5nZUV2ZW50OjptZXRo
b2REZXRhaWxzIGNvbnN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1ZhbHVlSW5XcmFwcGVk
T2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0OjpvcGVy
YXRvciBKU0M6OkpTVmFsdWUgY29uc3QpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3VtZUZvbnRXZWlnaHQpOgorICAg
ICAgICAqIGNzcy90eXBlZG9tL0NTU1VucGFyc2VkVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTVW5wYXJzZWRWYWx1ZTo6c2VyaWFsaXplIGNvbnN0KToKKyAgICAgICAgKiBkb20vRXZl
bnRUYXJnZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXQ6OmFkZEV2ZW50TGlz
dGVuZXJGb3JCaW5kaW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldDo6cmVtb3Zl
RXZlbnRMaXN0ZW5lckZvckJpbmRpbmdzKToKKyAgICAgICAgKiBkb20vTWVzc2FnZUV2ZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VFdmVudDo6bWVtb3J5Q29zdCBjb25zdCk6Cisg
ICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjph
ZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXI6OkV4Y2x1c2lvblJ1bGU6Om1hdGNoIGNvbnN0KToKKyAgICAgICAgKiBodG1sL1VS
TFNlYXJjaFBhcmFtcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVUkxTZWFyY2hQYXJhbXM6OmNy
ZWF0ZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJ1ZmZl
clN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
Z2V0VGV4SW1hZ2VTb3VyY2VTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnRleEltYWdlU291cmNlSGVscGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhczo6
Y2FudmFzQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXM6
OmNhbnZhc0VsZW1lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFz
OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNhbnZhczo6YnVpbGRPYmplY3RGb3JDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ2FudmFzOjppbmRleEZvckRhdGEpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JTaGFkZXJQcm9ncmFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclNoYWRlclBy
b2dyYW06OnByb2dyYW0gY29uc3QpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9ySW5kZXhlZERCQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yOjprZXlQ
YXRoRnJvbUlEQktleVBhdGgpOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpkYXRhIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OnNpemUgY29u
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNGLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlQ0ZEYXRhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcjo6aGludE1lbW9yeU5vdE5lZWRlZFNvb24gY29uc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dlbmVyaWMvS2V5ZWREZWNvZGVyR2VuZXJpYy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpLZXllZERlY29kZXJHZW5lcmljOjpEaWN0aW9uYXJ5OjphZGQpOgorICAgICAg
ICAoV2ViQ29yZTo6S2V5ZWREZWNvZGVyR2VuZXJpYzo6Z2V0UG9pbnRlckZyb21EaWN0aW9uYXJ5
U3RhY2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6cmVhbGl6ZU5leHRGYWxsYmFjayk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6c2FmZUNvcHkpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpwYWRkZWRTaXplT2ZUeXBlQW5kSXRlbUluQnl0ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OmRpc3BsYXlMaXN0SXRlbVR5cGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL21vY2svTW9ja01lZGlhRGV2aWNlLmg6CisgICAgICAgIChXZWJD
b3JlOjpNb2NrTWVkaWFEZXZpY2U6OmVuY29kZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9Gb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6aW1hZ2VP
ck1lZGlhRmlsZXNDb3VudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUVsZW1l
bnQ6Omxlbmd0aEluQnl0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFFbGVt
ZW50Ojppc29sYXRlZENvcHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFw
cGVuZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmZsYXR0ZW4gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OnByZXBhcmVGb3JVcGxvYWQpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybURhdGE6OmFzQmxvYlVSTCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9Gb3JtRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFFbGVtZW50Ojpv
cGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL0Zvcm1EYXRh
U3RyZWFtQ0ZOZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWR2YW5jZUN1cnJlbnRTdHJlYW0p
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SFRUUEJvZHkpOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxl
OjplbmFibGVTU0xGb3JIb3N0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bEZvcm1EYXRhU3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxGb3JtRGF0YVN0cmVh
bTo6cmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmll
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXJsU1NMVmVyaWZpZXI6OkN1cmxTU0xWZXJpZmll
cik6CisgICAgICAgICogc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZTo6cmVzb2x2ZUZvckZvbnRSYXcpOgorCiAyMDIxLTEwLTA0ICBTYW0g
V2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBTcGxpdCBXZWJYUiBleHRlbnNp
b24gbW9kdWxlIElETHMgaW50byB0aGVpciBvd24gZmlsZXMgYW5kIHNldHRpbmdzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IDNkZTlkYjAyMThiMDA3ZDlmMDc5MmQxMTZkZGM4MzgxM2M0NjM5OGMuLmIyZTQxZTA4NWFl
NWE0YWVlYjQyNzQyOWE1MWRmZjAzMTAwY2Y1OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAK
KzIwMjEtMTAtMDQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4K
KworICAgICAgICBCZWdpbiBtaWdyYXRpb24gZnJvbSBXVEY6OlZhcmlhbnQgdG8gc3RkOjp2YXJp
YW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEw
ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlc29sdmVCbG9iUmVmZXJl
bmNlcyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFt
ZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVy
czo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMu
aDoKKyAgICAgICAgKElQQzo6VmFyaWFudENvZGVyOjplbmNvZGUpOgorICAgICAgICAoSVBDOjpW
YXJpYW50Q29kZXI6OmRlY29kZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0Zvcm1EYXRhUmVm
ZXJlbmNlLmg6CisgICAgICAgIChJUEM6OkZvcm1EYXRhUmVmZXJlbmNlOjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9NZXNzYWdlUmVjZWl2ZVF1ZXVlTWFwLmNwcDoKKyAg
ICAgICAgKElQQzo6TWVzc2FnZVJlY2VpdmVRdWV1ZU1hcDo6Z2V0IGNvbnN0KToKKyAgICAgICAg
KiBTaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQ3Vyc29yLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6TWVkaWFTYW1wbGVDdXJzb3I6OmxvY2F0ZUl0ZXJhdG9yIGNvbnN0KToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRpY2F0aW9uUGFuZWwuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9TaW11bGF0ZWRJbnB1dERpc3BhdGNoZXIuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV0tTYWZlQnJvd3NpbmdXYXJuaW5nLmg6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOgor
CiAyMDIxLTEwLTA0ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAg
ICBTZW5kIG5lY2Vzc2FyeSBzYW5kYm94IGV4dGVuc2lvbnMgdG8gV2ViUHJvY2VzcyBpbiBjYXNl
IFdlYlJUQyBjb2RlY3MgcnVuIGluIFdlYlByb2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRj
aHBvaW50LmNwcAppbmRleCA0Njc4NDZjODU0NDgwOWMwMWM0ODY4NTM4MjlhOWIwN2U4YzUxNGQ0
Li5iYWExYzBlYWFkMmYxM2JjYWFjOTE3NjNmZGY5NDNiODI4MzM1ZmFkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hw
b2ludC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwCkBAIC02NSw5ICs2NSw5IEBAIGlubGluZSBib29sIFdh
dGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6aXNWYWxpZCgpIGNvbnN0CiBXYXRjaHBvaW50
c09uU3RydWN0dXJlU3R1YkluZm86Ok5vZGUmIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5m
bzo6YWRkV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQogewog
ICAgIGlmICgha2V5IHx8IGtleS5jb25kaXRpb24oKS5raW5kKCkgIT0gUHJvcGVydHlDb25kaXRp
b246OkVxdWl2YWxlbmNlKQotICAgICAgICByZXR1cm4gKm1fd2F0Y2hwb2ludHMuYWRkKFdURjo6
aW5fcGxhY2U8U3RydWN0dXJlVHJhbnNpdGlvblN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnQ+LCBrZXksICp0aGlzKTsKKyAgICAgICAgcmV0dXJuICptX3dhdGNocG9pbnRzLmFkZChzdGQ6
OmluX3BsYWNlX3R5cGU8U3RydWN0dXJlVHJhbnNpdGlvblN0cnVjdHVyZVN0dWJDbGVhcmluZ1dh
dGNocG9pbnQ+LCBrZXksICp0aGlzKTsKICAgICBBU1NFUlQoa2V5LmNvbmRpdGlvbigpLmtpbmQo
KSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2UpOwotICAgIHJldHVybiAqbV93YXRj
aHBvaW50cy5hZGQoV1RGOjppbl9wbGFjZTxBZGFwdGl2ZVZhbHVlU3RydWN0dXJlU3R1YkNsZWFy
aW5nV2F0Y2hwb2ludD4sIGtleSwgKnRoaXMpOworICAgIHJldHVybiAqbV93YXRjaHBvaW50cy5h
ZGQoc3RkOjppbl9wbGFjZV90eXBlPEFkYXB0aXZlVmFsdWVTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50Piwga2V5LCAqdGhpcyk7CiB9CiAKIHZvaWQgV2F0Y2hwb2ludHNPblN0cnVjdHVy
ZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRJbnN0YWxsV2F0Y2hwb2ludCgKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggYjRjOGY4
NjBiNTE0ZTZkNzlkZjAxYWM3ZjI5NmZjMDgxZGU3YTFmNi4uYjVhYjIyNzAzNmRkN2ZjMjgwNjgw
Y2FhZDkzMDlhZThmNzc0ODY2YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAKQEAgLTEwNTQ4LDEzICsxMDU0OCwxNCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlQ2FsbERPTShOb2RlKiBub2RlKQogCiAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBoYXZlIGEgd2F5IHRvIGNhbGwgZnVuY3Rpb25zIHdpdGggdGhlIHZlY3RvciBvZiBy
ZWdpc3RlcnMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2MzA5OQotICAgIFZlY3RvcjxWYXJpYW50PFNwZWN1bGF0ZUNlbGxPcGVyYW5kLCBTcGVjdWxh
dGVJbnQzMk9wZXJhbmQsIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kPiwgSlNDX0RPTUpJVF9TSUdO
QVRVUkVfTUFYX0FSR1VNRU5UU19JTkNMVURJTkdfVEhJUz4gb3BlcmFuZHM7CisgICAgdXNpbmcg
T3BlcmFuZFZhcmlhbnQgPSBWYXJpYW50PFNwZWN1bGF0ZUNlbGxPcGVyYW5kLCBTcGVjdWxhdGVJ
bnQzMk9wZXJhbmQsIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kPjsKKyAgICBWZWN0b3I8T3BlcmFu
ZFZhcmlhbnQsIEpTQ19ET01KSVRfU0lHTkFUVVJFX01BWF9BUkdVTUVOVFNfSU5DTFVESU5HX1RI
SVM+IG9wZXJhbmRzOwogICAgIFZlY3RvcjxHUFJSZWcsIEpTQ19ET01KSVRfU0lHTkFUVVJFX01B
WF9BUkdVTUVOVFNfSU5DTFVESU5HX1RISVM+IHJlZ3M7CiAKICAgICBhdXRvIGFwcGVuZENlbGwg
PSBbJl0oRWRnZSYgZWRnZSkgewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcGVyYW5k
KHRoaXMsIGVkZ2UpOwogICAgICAgICByZWdzLmFwcGVuZChvcGVyYW5kLmdwcigpKTsKLSAgICAg
ICAgb3BlcmFuZHMuYXBwZW5kKFdURk1vdmUob3BlcmFuZCkpOworICAgICAgICBvcGVyYW5kcy5h
cHBlbmQoT3BlcmFuZFZhcmlhbnQoc3RkOjppbl9wbGFjZV90eXBlPFNwZWN1bGF0ZUNlbGxPcGVy
YW5kPiwgV1RGTW92ZShvcGVyYW5kKSkpOwogICAgIH07CiAKICAgICBhdXRvIGFwcGVuZFN0cmlu
ZyA9IFsmXShFZGdlJiBlZGdlKSB7CkBAIC0xMDU2MiwxOSArMTA1NjMsMTkgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUNhbGxET00oTm9kZSogbm9kZSkKICAgICAgICAgR1BSUmVnIGdw
ciA9IG9wZXJhbmQuZ3ByKCk7CiAgICAgICAgIHJlZ3MuYXBwZW5kKGdwcik7CiAgICAgICAgIHNw
ZWN1bGF0ZVN0cmluZyhlZGdlLCBncHIpOwotICAgICAgICBvcGVyYW5kcy5hcHBlbmQoV1RGTW92
ZShvcGVyYW5kKSk7CisgICAgICAgIG9wZXJhbmRzLmFwcGVuZChPcGVyYW5kVmFyaWFudChzdGQ6
OmluX3BsYWNlX3R5cGU8U3BlY3VsYXRlQ2VsbE9wZXJhbmQ+LCBXVEZNb3ZlKG9wZXJhbmQpKSk7
CiAgICAgfTsKIAogICAgIGF1dG8gYXBwZW5kSW50MzIgPSBbJl0oRWRnZSYgZWRnZSkgewogICAg
ICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlKTsKICAgICAgICAg
cmVncy5hcHBlbmQob3BlcmFuZC5ncHIoKSk7Ci0gICAgICAgIG9wZXJhbmRzLmFwcGVuZChXVEZN
b3ZlKG9wZXJhbmQpKTsKKyAgICAgICAgb3BlcmFuZHMuYXBwZW5kKE9wZXJhbmRWYXJpYW50KHN0
ZDo6aW5fcGxhY2VfdHlwZTxTcGVjdWxhdGVJbnQzMk9wZXJhbmQ+LCBXVEZNb3ZlKG9wZXJhbmQp
KSk7CiAgICAgfTsKIAogICAgIGF1dG8gYXBwZW5kQm9vbGVhbiA9IFsmXShFZGdlJiBlZGdlKSB7
CiAgICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSk7CiAg
ICAgICAgIHJlZ3MuYXBwZW5kKG9wZXJhbmQuZ3ByKCkpOwotICAgICAgICBvcGVyYW5kcy5hcHBl
bmQoV1RGTW92ZShvcGVyYW5kKSk7CisgICAgICAgIG9wZXJhbmRzLmFwcGVuZChPcGVyYW5kVmFy
aWFudChzdGQ6OmluX3BsYWNlX3R5cGU8U3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ+LCBXVEZNb3Zl
KG9wZXJhbmQpKSk7CiAgICAgfTsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAKaW5kZXggMGZiZTBiYzhmN2FmZjFkYmEyNjZkMjI4
NjYxM2ZjZTcxOTM5NGZhOS4uMmE4YTY3YWYzZjIyY2I1ZmMyNTQyODI1MmYyNmZkYTIzOTRmODM1
YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAKQEAgLTE1NTAsNyArMTU1
MCw3IEBAIEFMV0FZU19JTkxJTkUgYXV0byBMZXhlcjxUPjo6cGFyc2VIZXgoKSAtPiBzdGQ6Om9w
dGlvbmFsPE51bWJlclBhcnNlUmVzdWx0PgogICAgIH0gd2hpbGUgKGlzQVNDSUlIZXhEaWdpdE9y
U2VwYXJhdG9yKG1fY3VycmVudCkgJiYgbWF4aW11bURpZ2l0cyA+PSAwKTsKIAogICAgIGlmIChM
SUtFTFkobWF4aW11bURpZ2l0cyA+PSAwICYmIG1fY3VycmVudCAhPSAnbicpKQotICAgICAgICBy
ZXR1cm4gTnVtYmVyUGFyc2VSZXN1bHQgeyBoZXhWYWx1ZSB9OworICAgICAgICByZXR1cm4gTnVt
YmVyUGFyc2VSZXN1bHQgeyBzdGF0aWNfY2FzdDxkb3VibGU+KGhleFZhbHVlKSB9OwogCiAgICAg
Ly8gTm8gbW9yZSBwbGFjZSBpbiB0aGUgaGV4VmFsdWUgYnVmZmVyLgogICAgIC8vIFRoZSB2YWx1
ZXMgYXJlIHNoaWZ0ZWQgb3V0IGFuZCBwbGFjZWQgaW50byB0aGUgbV9idWZmZXI4IHZlY3Rvci4K
QEAgLTE2MDksNyArMTYwOSw3IEBAIEFMV0FZU19JTkxJTkUgYXV0byBMZXhlcjxUPjo6cGFyc2VC
aW5hcnkoKSAtPiBzdGQ6Om9wdGlvbmFsPE51bWJlclBhcnNlUmVzdWx0PgogICAgIH0gd2hpbGUg
KGlzQVNDSUlCaW5hcnlEaWdpdE9yU2VwYXJhdG9yKG1fY3VycmVudCkgJiYgZGlnaXQgPj0gMCk7
CiAKICAgICBpZiAoTElLRUxZKCFpc0FTQ0lJRGlnaXRPclNlcGFyYXRvcihtX2N1cnJlbnQpICYm
IGRpZ2l0ID49IDAgJiYgbV9jdXJyZW50ICE9ICduJykpCi0gICAgICAgIHJldHVybiBOdW1iZXJQ
YXJzZVJlc3VsdCB7IGJpbmFyeVZhbHVlIH07CisgICAgICAgIHJldHVybiBOdW1iZXJQYXJzZVJl
c3VsdCB7IHN0YXRpY19jYXN0PGRvdWJsZT4oYmluYXJ5VmFsdWUpIH07CiAKICAgICBmb3IgKGlu
dCBpID0gbWF4aW11bURpZ2l0cyAtIDE7IGkgPiBkaWdpdDsgLS1pKQogICAgICAgICByZWNvcmQ4
KGRpZ2l0c1tpXSk7CkBAIC0xNjY1LDcgKzE2NjUsNyBAQCBBTFdBWVNfSU5MSU5FIGF1dG8gTGV4
ZXI8VD46OnBhcnNlT2N0YWwoKSAtPiBzdGQ6Om9wdGlvbmFsPE51bWJlclBhcnNlUmVzdWx0Pgog
ICAgIH0gd2hpbGUgKGlzQVNDSUlPY3RhbERpZ2l0T3JTZXBhcmF0b3IobV9jdXJyZW50KSAmJiBk
aWdpdCA+PSAwKTsKIAogICAgIGlmIChMSUtFTFkoIWlzQVNDSUlEaWdpdE9yU2VwYXJhdG9yKG1f
Y3VycmVudCkgJiYgZGlnaXQgPj0gMCAmJiBtX2N1cnJlbnQgIT0gJ24nKSkKLSAgICAgICAgcmV0
dXJuIE51bWJlclBhcnNlUmVzdWx0IHsgb2N0YWxWYWx1ZSB9OworICAgICAgICByZXR1cm4gTnVt
YmVyUGFyc2VSZXN1bHQgeyBzdGF0aWNfY2FzdDxkb3VibGU+KG9jdGFsVmFsdWUpIH07CiAKICAg
ICBmb3IgKGludCBpID0gbWF4aW11bURpZ2l0cyAtIDE7IGkgPiBkaWdpdDsgLS1pKQogICAgICAg
ICAgcmVjb3JkOChkaWdpdHNbaV0pOwpAQCAtMTcyNCw3ICsxNzI0LDcgQEAgQUxXQVlTX0lOTElO
RSBhdXRvIExleGVyPFQ+OjpwYXJzZURlY2ltYWwoKSAtPiBzdGQ6Om9wdGlvbmFsPE51bWJlclBh
cnNlUmVzdWx0PgogICAgICAgICB9IHdoaWxlIChpc0FTQ0lJRGlnaXRPclNlcGFyYXRvcihtX2N1
cnJlbnQpICYmIGRpZ2l0ID49IDApOwogCiAgICAgICAgIGlmIChkaWdpdCA+PSAwICYmIG1fY3Vy
cmVudCAhPSAnLicgJiYgIWlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobV9jdXJyZW50LCAnZScp
ICYmIG1fY3VycmVudCAhPSAnbicpCi0gICAgICAgICAgICByZXR1cm4gTnVtYmVyUGFyc2VSZXN1
bHQgeyBkZWNpbWFsVmFsdWUgfTsKKyAgICAgICAgICAgIHJldHVybiBOdW1iZXJQYXJzZVJlc3Vs
dCB7IHN0YXRpY19jYXN0PGRvdWJsZT4oZGVjaW1hbFZhbHVlKSB9OwogCiAgICAgICAgIGZvciAo
aW50IGkgPSBtYXhpbXVtRGlnaXRzIC0gMTsgaSA+IGRpZ2l0OyAtLWkpCiAgICAgICAgICAgICBy
ZWNvcmQ4KGRpZ2l0c1tpXSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZVBheWxvYWQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fj
aGVQYXlsb2FkLmNwcAppbmRleCA2MTY4ZmVlOTY2Y2I2NWM1NmNkNjY1NTU2NjZjZjU0YmZkYjcy
OWJkLi4yN2QyYjdiNzQxYTdkZjVmYTY3ODlkNzJlODIyMWRmNDg4M2I3NTc2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZVBheWxvYWQuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5jcHAKQEAgLTYxLDIxICs2
MSwyMSBAQCBjb25zdCB1aW50OF90KiBDYWNoZVBheWxvYWQ6OmRhdGEoKSBjb25zdAogICAgIHJl
dHVybiBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKICAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6
TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKCkpOwotICAgICAgICB9LAotICAgICAgICBbXShjb25z
dCBzdGQ6OnBhaXI8TWFsbG9jUHRyPHVpbnQ4X3QsIFZNTWFsbG9jPiwgc2l6ZV90PiYgZGF0YSkg
eworICAgICAgICB9LCBbXShjb25zdCBzdGQ6OnBhaXI8TWFsbG9jUHRyPHVpbnQ4X3QsIFZNTWFs
bG9jPiwgc2l6ZV90PiYgZGF0YSkgLT4gY29uc3QgdWludDhfdCogewogICAgICAgICAgICAgcmV0
dXJuIGRhdGEuZmlyc3QuZ2V0KCk7Ci0gICAgICAgIH0pOworICAgICAgICB9CisgICAgKTsKIH0K
IAogc2l6ZV90IENhY2hlUGF5bG9hZDo6c2l6ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFdURjo6
c3dpdGNoT24obV9kYXRhLAotICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxl
RGF0YSYgZGF0YSkgeworICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0
YSYgZGF0YSkgLT4gc2l6ZV90IHsKICAgICAgICAgICAgIHJldHVybiBkYXRhLnNpemUoKTsKLSAg
ICAgICAgfSwKLSAgICAgICAgW10oY29uc3Qgc3RkOjpwYWlyPE1hbGxvY1B0cjx1aW50OF90LCBW
TU1hbGxvYz4sIHNpemVfdD4mIGRhdGEpIHsKKyAgICAgICAgfSwgW10oY29uc3Qgc3RkOjpwYWly
PE1hbGxvY1B0cjx1aW50OF90LCBWTU1hbGxvYz4sIHNpemVfdD4mIGRhdGEpIC0+IHNpemVfdCB7
CiAgICAgICAgICAgICByZXR1cm4gZGF0YS5zZWNvbmQ7Ci0gICAgICAgIH0pOworICAgICAgICB9
CisgICAgKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZVVwZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYWNoZVVwZGF0ZS5jcHAKaW5kZXggNzBkMzZiMzg1YWI1YjJmODkwYTk2NzMw
OWMzYzRhZDA3MTk3ZGRhMy4uNjA3MTU0MzEwNWUzZDk0NTZkM2Q0Mjk4MWI4MzFkYWE3NjZlYzU0
OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVVcGRhdGUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlVXBkYXRlLmNwcApA
QCAtMzksMTEgKzM5LDggQEAgQ2FjaGVVcGRhdGU6OkNhY2hlVXBkYXRlKEZ1bmN0aW9uVXBkYXRl
JiYgdXBkYXRlKQogfQogCiBDYWNoZVVwZGF0ZTo6Q2FjaGVVcGRhdGUoQ2FjaGVVcGRhdGUmJiBv
dGhlcikKKyAgICA6IG1fdXBkYXRlKFdURk1vdmUob3RoZXIubV91cGRhdGUpKQogewotICAgIGlm
IChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEdsb2JhbFVwZGF0ZT4ob3RoZXIubV91cGRhdGUpKQot
ICAgICAgICBuZXcgKHRoaXMpIENhY2hlVXBkYXRlKFdURk1vdmUoV1RGOjpnZXQ8R2xvYmFsVXBk
YXRlPihvdGhlci5tX3VwZGF0ZSkpKTsKLSAgICBlbHNlCi0gICAgICAgIG5ldyAodGhpcykgQ2Fj
aGVVcGRhdGUoV1RGTW92ZShXVEY6OmdldDxGdW5jdGlvblVwZGF0ZT4ob3RoZXIubV91cGRhdGUp
KSk7CiB9CiAKIENhY2hlVXBkYXRlJiBDYWNoZVVwZGF0ZTo6b3BlcmF0b3I9KENhY2hlVXBkYXRl
JiYgb3RoZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1w
b3JhbFRpbWVab25lLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFs
VGltZVpvbmUuY3BwCmluZGV4IDc3ZGI0MDk1ZDI3YzFiZjJmYzE3NzBjZmUwMzlkNTY5OGExNmJl
Y2MuLjgzYTM5MDZiZDU0NTA2MjJlYWVhOWFjOTAzYmJkMjgxNWNkMDljZTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsVGltZVpvbmUuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsVGltZVpvbmUuY3BwCkBAIC0z
NSwxNCArMzUsMTQgQEAgY29uc3QgQ2xhc3NJbmZvIFRlbXBvcmFsVGltZVpvbmU6OnNfaW5mbyA9
IHsgIk9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG4KIAogVGVtcG9yYWxUaW1lWm9u
ZSogVGVtcG9yYWxUaW1lWm9uZTo6Y3JlYXRlRnJvbUlEKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFRpbWVab25lSUQgaWRlbnRpZmllcikKIHsKLSAgICBUZW1wb3JhbFRpbWVab25lKiBm
b3JtYXQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxUZW1wb3JhbFRpbWVab25lPih2bS5o
ZWFwKSkgVGVtcG9yYWxUaW1lWm9uZSh2bSwgc3RydWN0dXJlLCBUaW1lWm9uZSB7IFdURjo6aW5f
cGxhY2U8MD4sIGlkZW50aWZpZXIgfSk7CisgICAgVGVtcG9yYWxUaW1lWm9uZSogZm9ybWF0ID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VGVtcG9yYWxUaW1lWm9uZT4odm0uaGVhcCkpIFRl
bXBvcmFsVGltZVpvbmUodm0sIHN0cnVjdHVyZSwgVGltZVpvbmUgeyBzdGQ6OmluX3BsYWNlX2lu
ZGV4X3Q8MD4oKSwgaWRlbnRpZmllciB9KTsKICAgICBmb3JtYXQtPmZpbmlzaENyZWF0aW9uKHZt
KTsKICAgICByZXR1cm4gZm9ybWF0OwogfQogCiBUZW1wb3JhbFRpbWVab25lKiBUZW1wb3JhbFRp
bWVab25lOjpjcmVhdGVGcm9tVVRDT2Zmc2V0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IGludDY0X3QgdXRjT2Zmc2V0KQogewotICAgIFRlbXBvcmFsVGltZVpvbmUqIGZvcm1hdCA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFRlbXBvcmFsVGltZVpvbmU+KHZtLmhlYXApKSBUZW1w
b3JhbFRpbWVab25lKHZtLCBzdHJ1Y3R1cmUsIFRpbWVab25lIHsgV1RGOjppbl9wbGFjZTwxPiwg
dXRjT2Zmc2V0IH0pOworICAgIFRlbXBvcmFsVGltZVpvbmUqIGZvcm1hdCA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPFRlbXBvcmFsVGltZVpvbmU+KHZtLmhlYXApKSBUZW1wb3JhbFRpbWVa
b25lKHZtLCBzdHJ1Y3R1cmUsIFRpbWVab25lIHsgc3RkOjppbl9wbGFjZV9pbmRleF90PDE+KCks
IHV0Y09mZnNldCB9KTsKICAgICBmb3JtYXQtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1
cm4gZm9ybWF0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRm9yd2FyZC5oIGIvU291
cmNlL1dURi93dGYvRm9yd2FyZC5oCmluZGV4IDNhNzI5NzQzN2I1OWQ0NTNkYmQ2ZTk2ODQzNDY5
NzRlNTNjODZjZjkuLmYwMGNlMzk2MDk5ZWZiY2Y5MGQzZWExY2IxOGM0NWU0ODdhNzIyNTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9G
b3J3YXJkLmgKQEAgLTgzLDcgKzgzLDYgQEAgdGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIFN0cmlu
Z0J1ZmZlcjsKIHRlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBTdHJpbmdQYXJzaW5nQnVmZmVyOwog
dGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lID0gdm9pZD4gY2xhc3MgU3RyaW5nVHlwZUFkYXB0
ZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgVW5pcXVlUmVmOwotdGVtcGxhdGU8dHlwZW5h
bWUuLi4+IGNsYXNzIFZhcmlhbnQ7CiB0ZW1wbGF0ZTx0eXBlbmFtZSwgc2l6ZV90ID0gMCwgdHlw
ZW5hbWUgPSBDcmFzaE9uT3ZlcmZsb3csIHNpemVfdCA9IDE2LCB0eXBlbmFtZSBNYWxsb2MgPSBW
ZWN0b3JNYWxsb2M+IGNsYXNzIFZlY3RvcjsKIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSA9
IEVtcHR5Q291bnRlcj4gY2xhc3MgV2Vha1B0cjsKIApAQCAtMTU3LDcgKzE1Niw2IEBAIHVzaW5n
IFdURjo6VGV4dFBvc2l0aW9uOwogdXNpbmcgV1RGOjpUZXh0U3RyZWFtOwogdXNpbmcgV1RGOjpV
Ukw7CiB1c2luZyBXVEY6OlVuaXF1ZVJlZjsKLXVzaW5nIFdURjo6VmFyaWFudDsKIHVzaW5nIFdU
Rjo6VmVjdG9yOwogCiB0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBFPiB1c2luZyBFeHBlY3RlZCA9
IHN0ZDo6ZXhwZXJpbWVudGFsOjpleHBlY3RlZDxULCBFPjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL0hhc2hlci5oIGIvU291cmNlL1dURi93dGYvSGFzaGVyLmgKaW5kZXggOGZlOWIyNDBj
MGVmYWM3MDhhYzgwM2Y1NTAxNTBkOGNhNTkzNTJkMi4uYTc3YTQ4YTllY2E4OGE1MTc3MmViNDgx
NWNlOGJhMDA1OTkzMzdhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaGVyLmgKKysr
IGIvU291cmNlL1dURi93dGYvSGFzaGVyLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSA8b3B0aW9uYWw+CisjaW5jbHVkZSA8dmFyaWFudD4KICNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0F0b21TdHJpbmcuaD4KQEAgLTE2NiwxMCArMTY3LDEwIEBAIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBzdGQ6Om9wdGlvbmFsPFQ+JiBvcHRp
b25hbCkKICAgICAgICAgYWRkKGhhc2hlciwgb3B0aW9uYWwudmFsdWUoKSk7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lLi4uIFR5cGVzPiB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgVmFy
aWFudDxUeXBlcy4uLj4mIHZhcmlhbnQpCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4gdm9p
ZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IHN0ZDo6dmFyaWFudDxUeXBlcy4uLj4mIHZhcmlh
bnQpCiB7CiAgICAgYWRkKGhhc2hlciwgdmFyaWFudC5pbmRleCgpKTsKLSAgICB2aXNpdChbJmhh
c2hlcl0gKGF1dG8mIHZhbHVlKSB7CisgICAgc3RkOjp2aXNpdChbJmhhc2hlcl0gKGF1dG8mIHZh
bHVlKSB7CiAgICAgICAgIGFkZChoYXNoZXIsIHZhbHVlKTsKICAgICB9LCB2YXJpYW50KTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0xpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0
LmggYi9Tb3VyY2UvV1RGL3d0Zi9MaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5oCmluZGV4
IDAyMTBmOTQyOGU2Y2U0MmYzZTJkYWZkMDI4MDcwYzFmY2RiOTRjNzcuLjc0NDJhNDMxYTM4OWRh
YTJkMjBmMDUyNjdjZDkxNGVjMGUyZWE2YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0xp
a2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0LmgKKysrIGIvU291cmNlL1dURi93dGYvTGlrZWx5
RGVuc2VVbnNpZ25lZEludGVnZXJTZXQuaApAQCAtMjA1LDggKzIwNSw4IEBAIHB1YmxpYzoKICAg
ICAgICAgSW5kZXhUeXBlIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAg
IHJldHVybiBXVEY6OnN3aXRjaE9uKG1fdW5kZXJseWluZywKLSAgICAgICAgICAgICAgICBbJl0o
Y29uc3QgQml0VmVjdG9yOjppdGVyYXRvciYgaXQpIHsgcmV0dXJuICppdCArIG1fc2hpZnQ7IH0s
Ci0gICAgICAgICAgICAgICAgW10oY29uc3QgdHlwZW5hbWUgU2V0OjppdGVyYXRvciYgaXQpIHsg
cmV0dXJuICppdDsgfSk7CisgICAgICAgICAgICAgICAgWyZdKGNvbnN0IEJpdFZlY3Rvcjo6aXRl
cmF0b3ImIGl0KSAtPiBJbmRleFR5cGUgeyByZXR1cm4gKml0ICsgbV9zaGlmdDsgfSwKKyAgICAg
ICAgICAgICAgICBbXShjb25zdCB0eXBlbmFtZSBTZXQ6Oml0ZXJhdG9yJiBpdCkgLT4gSW5kZXhU
eXBlIHsgcmV0dXJuICppdDsgfSk7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvVmFyaWFudC5oIGIvU291cmNlL1dURi93dGYvVmFyaWFudC5oCmluZGV4IDNjYTdlYmZlOWQw
NDc5NmQwYjhhMDU2NzNjY2EwZmUzMThlMDJkMzIuLmNiZjkyYjlmYWYyOWYwYzM5OGExZDY1MDQz
NjRiNjM0NmZhZThiZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgKQEAgLTQ3LDE5ICs0NywxMCBAQAogI2luY2x1ZGUg
PHN0cmluZz4KICNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KICNpbmNsdWRlIDx1dGlsaXR5PgorI2lu
Y2x1ZGUgPHZhcmlhbnQ+CiAjaW5jbHVkZSA8d3RmL0NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgogCi0jaWYgQ09NUElMRVIoTVNWQykKLSNwcmFnbWEgd2FybmluZyhw
dXNoKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDI0NSkKLSNwcmFnbWEgd2FybmluZyhkaXNh
YmxlOjQ1MjEpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0NTIyKQotI3ByYWdtYSB3YXJuaW5n
KGRpc2FibGU6NDgxNCkKLSNlbmRpZgotCi0jaWYgIUNPTVBJTEVSKENMQU5HKSB8fCBXVEZfQ1BQ
X1NURF9WRVIgPj0gMTQKLQogbmFtZXNwYWNlIFdURiB7CiAKICNpZiBDT01QSUxFUl9TVVBQT1JU
UyhFWENFUFRJT05TKQpAQCAtNzIsMjAxMyArNjMsNDcgQEAgbmFtZXNwYWNlIFdURiB7CiAjZGVm
aW5lIF9fTk9FWENFUFRfKC4uLikKICNlbmRpZgogCi1zdHJ1Y3QgX19pbl9wbGFjZV9wcml2YXRl
ewotICAgIHRlbXBsYXRlPHR5cGVuYW1lPgotICAgIHN0cnVjdCBfX3R5cGVfaG9sZGVyOwotCi0g
ICAgdGVtcGxhdGU8c2l6ZV90PgotICAgIHN0cnVjdCBfX3ZhbHVlX2hvbGRlcjsKLX07Ci0KLQot
c3RydWN0IGluX3BsYWNlX3RhZyB7Ci0gICAgaW5fcGxhY2VfdGFnKCkgPSBkZWxldGU7Ci19Owot
Ci11c2luZyBpbl9wbGFjZV90ID0gaW5fcGxhY2VfdGFnKCYpKF9faW5fcGxhY2VfcHJpdmF0ZSYp
OwotCi10ZW1wbGF0ZSA8Y2xhc3MgX1R5cGU+Ci11c2luZyBpbl9wbGFjZV90eXBlX3QgPSBpbl9w
bGFjZV90YWcoJikoX19pbl9wbGFjZV9wcml2YXRlOjpfX3R5cGVfaG9sZGVyPF9UeXBlPiYpOwot
Ci10ZW1wbGF0ZSA8c2l6ZV90IF9JbmRleD4KLXVzaW5nIGluX3BsYWNlX2luZGV4X3QgPSBpbl9w
bGFjZV90YWcoJikoX19pbl9wbGFjZV9wcml2YXRlOjpfX3ZhbHVlX2hvbGRlcjxfSW5kZXg+Jik7
Ci0KLWluX3BsYWNlX3RhZyBpbl9wbGFjZShfX2luX3BsYWNlX3ByaXZhdGUmKTsKLQotdGVtcGxh
dGUgPGNsYXNzIF9UeXBlPgotaW5fcGxhY2VfdGFnIGluX3BsYWNlKF9faW5fcGxhY2VfcHJpdmF0
ZTo6X190eXBlX2hvbGRlcjxfVHlwZT4gJikgewotICAgIF9fVEhST1dfRVhDRVBUSU9OKF9faW5f
cGxhY2VfcHJpdmF0ZSgpKTsKLX0KLQotdGVtcGxhdGUgPHNpemVfdCBfSW5kZXg+Ci1pbl9wbGFj
ZV90YWcgaW5fcGxhY2UoX19pbl9wbGFjZV9wcml2YXRlOjpfX3ZhbHVlX2hvbGRlcjxfSW5kZXg+
ICYpIHsKLSAgICBfX1RIUk9XX0VYQ0VQVElPTihfX2luX3BsYWNlX3ByaXZhdGUoKSk7Ci19Ci0K
LWNsYXNzIGJhZF92YXJpYW50X2FjY2VzczogcHVibGljIHN0ZDo6bG9naWNfZXJyb3J7Ci1wdWJs
aWM6Ci0gICAgZXhwbGljaXQgYmFkX3ZhcmlhbnRfYWNjZXNzKGNvbnN0IHN0ZDo6c3RyaW5nJiB3
aGF0X2FyZyk6Ci0gICAgICAgIHN0ZDo6bG9naWNfZXJyb3Iod2hhdF9hcmcpCi0gICAge30KLSAg
ICBleHBsaWNpdCBiYWRfdmFyaWFudF9hY2Nlc3MoY29uc3QgY2hhciogd2hhdF9hcmcpOgotICAg
ICAgICBzdGQ6OmxvZ2ljX2Vycm9yKHdoYXRfYXJnKQotICAgIHt9Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotTk9fUkVUVVJOX0RVRV9UT19DUkFTSCBpbmxpbmUgVCBfX3Rocm93X2JhZF92
YXJpYW50X2FjY2Vzcyhjb25zdCBjaGFyKiB3aGF0X2FyZyl7Ci0gICAgX19USFJPV19FWENFUFRJ
T04oYmFkX3ZhcmlhbnRfYWNjZXNzKHdoYXRfYXJnKSkKLX0KLQotdGVtcGxhdGU8cHRyZGlmZl90
IF9PZmZzZXQsdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3R5
cGVfaW5kZXhfaGVscGVyOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBf
VHlwZSx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX190eXBlX2lu
ZGV4X2hlbHBlcjxfT2Zmc2V0LF9UeXBlLF9IZWFkLF9SZXN0Li4uPnsKLSAgICBzdGF0aWMgY29u
c3RleHByIHB0cmRpZmZfdCBfX3ZhbHVlPQotICAgICAgICBfX3R5cGVfaW5kZXhfaGVscGVyPF9P
ZmZzZXQrMSxfVHlwZSxfUmVzdC4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZm
X3QgX09mZnNldCx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX190
eXBlX2luZGV4X2hlbHBlcjxfT2Zmc2V0LF9UeXBlLF9UeXBlLF9SZXN0Li4uPnsKLSAgICBzdGF0
aWMgY29uc3RleHByIHB0cmRpZmZfdCBfX3ZhbHVlPV9PZmZzZXQ7Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdHlwZV9pbmRleHsK
LSAgICBzdGF0aWMgY29uc3RleHByIHB0cmRpZmZfdCBfX3ZhbHVlPQotICAgICAgICBfX3R5cGVf
aW5kZXhfaGVscGVyPDAsX1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRl
PHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2luZGV4ZWRf
dHlwZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3Ry
dWN0IF9faW5kZXhlZF90eXBlPDAsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgX0hlYWQg
X190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0
Pgotc3RydWN0IF9faW5kZXhlZF90eXBlPC0xLF9IZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVm
IHZvaWQgX190eXBlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSBf
SGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19pbmRleGVkX3R5cGU8X0luZGV4LF9I
ZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRl
eC0xLF9SZXN0Li4uPjo6X190eXBlIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBf
SW5kZXgsdHlwZW5hbWUgLi4uX1R5cGVzPgotc3RydWN0IF9fbmV4dF9pbmRleHsKLSAgICBzdGF0
aWMgY29uc3RleHByIHB0cmRpZmZfdCBfX3ZhbHVlPQotICAgICAgICAoX0luZGV4Pj1wdHJkaWZm
X3Qoc2l6ZW9mLi4uKF9UeXBlcyktMSkpPy0xOl9JbmRleCsxOwotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgLi4uIF9UeXBlcz4KLWNsYXNzIFZhcmlhbnQ7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lPgot
c3RydWN0IHZhcmlhbnRfc2l6ZTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0
IHZhcmlhbnRfc2l6ZTxjb25zdCBfVHlwZT4gOiB2YXJpYW50X3NpemU8X1R5cGU+IHt9OwotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgdmFyaWFudF9zaXplPHZvbGF0aWxlIF9U
eXBlPiA6IHZhcmlhbnRfc2l6ZTxfVHlwZT4ge307Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBfVHlw
ZT4KLXN0cnVjdCB2YXJpYW50X3NpemU8Y29uc3Qgdm9sYXRpbGUgX1R5cGU+IDogdmFyaWFudF9z
aXplPF9UeXBlPiB7fTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lLi4uIF9UeXBlcz4KLXN0cnVjdCB2
YXJpYW50X3NpemU8VmFyaWFudDxfVHlwZXMuLi4+PgotICAgIDogc3RkOjppbnRlZ3JhbF9jb25z
dGFudDxzaXplX3QsIHNpemVvZi4uLihfVHlwZXMpPiB7fTsKLQotdGVtcGxhdGU8c2l6ZV90IF9J
bmRleCx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlOwotCi10ZW1w
bGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIF9UeXBlPgotdXNpbmcgdmFyaWFudF9hbHRlcm5h
dGl2ZV90PXR5cGVuYW1lIHZhcmlhbnRfYWx0ZXJuYXRpdmU8X0luZGV4LF9UeXBlPjo6dHlwZTsK
LQotdGVtcGxhdGUgPHNpemVfdCBfSW5kZXgsIHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IHZhcmlh
bnRfYWx0ZXJuYXRpdmU8X0luZGV4LCBjb25zdCBfVHlwZT57Ci0gICAgdXNpbmcgdHlwZT1zdGQ6
OmFkZF9jb25zdF90PHZhcmlhbnRfYWx0ZXJuYXRpdmVfdDxfSW5kZXgsX1R5cGU+PjsKLX07Ci0K
LXRlbXBsYXRlIDxzaXplX3QgX0luZGV4LCB0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50
X2FsdGVybmF0aXZlPF9JbmRleCwgdm9sYXRpbGUgX1R5cGU+ewotICAgIHVzaW5nIHR5cGU9c3Rk
OjphZGRfdm9sYXRpbGVfdDx2YXJpYW50X2FsdGVybmF0aXZlX3Q8X0luZGV4LF9UeXBlPj47Ci19
OwotCi10ZW1wbGF0ZSA8c2l6ZV90IF9JbmRleCwgdHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgdmFy
aWFudF9hbHRlcm5hdGl2ZTxfSW5kZXgsIHZvbGF0aWxlIGNvbnN0IF9UeXBlPnsKLSAgICB1c2lu
ZyB0eXBlPXN0ZDo6YWRkX3ZvbGF0aWxlX3Q8c3RkOjphZGRfY29uc3RfdDx2YXJpYW50X2FsdGVy
bmF0aXZlX3Q8X0luZGV4LF9UeXBlPj4+OwotfTsKLQotdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0
eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IHZhcmlhbnRfYWx0ZXJuYXRpdmU8X0luZGV4LFZh
cmlhbnQ8X1R5cGVzLi4uPj57Ci0gICAgdXNpbmcgdHlwZT10eXBlbmFtZSBfX2luZGV4ZWRfdHlw
ZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlOwotfTsKLQotY29uc3RleHByIHNpemVfdCB2YXJp
YW50X25wb3M9LTE7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Ci1jb25zdGV4cHIgX1R5cGUmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mKTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBfVHlwZSBj
b25zdCYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYpOwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIF9UeXBlJiYgZ2V0KFZhcmlh
bnQ8X1R5cGVzLi4uPiYmKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4u
IF9UeXBlcz4KLWNvbnN0ZXhwciBjb25zdCBfVHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4g
Y29uc3QmJik7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBl
cz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6
X190eXBlJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+Jik7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBf
SW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRf
dHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYm
KTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29u
c3RleHByIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUg
Y29uc3QmIGdldCgKLSAgICBWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmKTsKLQotdGVtcGxhdGUg
PHB0cmRpZmZfdCBfSW5kZXgsIHR5cGVuYW1lLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBjb25zdCB0
eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsIF9UeXBlcy4uLj46Ol9fdHlwZSAmJgotZ2V0
KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCAmJik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBl
LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PF9UeXBl
PiBnZXRfaWYoVmFyaWFudDxfVHlwZXMuLi4+Jik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBl
LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PF9UeXBl
IGNvbnN0PiBnZXRfaWYoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0Jik7Ci0KLXRlbXBsYXRlPHB0
cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9w
b2ludGVyX3Q8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlw
ZT4gZ2V0X2lmKFZhcmlhbnQ8X1R5cGVzLi4uPiYpOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0lu
ZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PHR5
cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3Q+IGdl
dF9pZigKLSAgICBWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmKTsKLQotdGVtcGxhdGU8cHRyZGlm
Zl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdmFyaWFudF9hY2Nlc3Nv
cjsKLQotdGVtcGxhdGU8c2l6ZV90IF9fY291bnQsCi0gICAgICAgICBib29sIF9fbGFyZ2VyX3Ro
YW5fY2hhcj0oX19jb3VudD5TQ0hBUl9NQVgpLAotICAgIGJvb2wgX19sYXJnZXJfdGhhbl9zaG9y
dD0oX19jb3VudD5TSFJUX01BWCksCi0gICAgYm9vbCBfX2xhcmdlcl90aGFuX2ludD0oX19jb3Vu
dD5JTlRfTUFYKT4KLXN0cnVjdCBfX2Rpc2NyaW1pbmF0b3JfdHlwZXsKLSAgICB0eXBlZGVmIHNp
Z25lZCBjaGFyIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHNpemVfdCBfX2NvdW50Pgotc3RydWN0
IF9fZGlzY3JpbWluYXRvcl90eXBlPF9fY291bnQsdHJ1ZSxmYWxzZSxmYWxzZT57Ci0gICAgdHlw
ZWRlZiBzaWduZWQgc2hvcnQgX190eXBlOwotfTsKLQotdGVtcGxhdGU8c2l6ZV90IF9fY291bnQ+
Ci1zdHJ1Y3QgX19kaXNjcmltaW5hdG9yX3R5cGU8X19jb3VudCx0cnVlLHRydWUsZmFsc2U+ewot
ICAgIHR5cGVkZWYgaW50IF9fdHlwZTsKLX07Ci10ZW1wbGF0ZTxzaXplX3QgX19jb3VudD4KLXN0
cnVjdCBfX2Rpc2NyaW1pbmF0b3JfdHlwZTxfX2NvdW50LHRydWUsdHJ1ZSx0cnVlPnsKLSAgICB0
eXBlZGVmIHNpZ25lZCBsb25nIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBl
Pgotc3RydWN0IF9fc3RvcmVkX3R5cGV7Ci0gICAgdHlwZWRlZiBfVHlwZSBfX3R5cGU7Ci19Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBfX3N0b3JlZF90eXBlPF9UeXBlJj57
Ci0gICAgdHlwZWRlZiBfVHlwZSogX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4u
IF9UeXBlcz4KLXN0cnVjdCBfX2FsbF90cml2aWFsbHlfZGVzdHJ1Y3RpYmxlOwotCi10ZW1wbGF0
ZTw+Ci1zdHJ1Y3QgX19hbGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTw+IHsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgX192YWx1ZT10cnVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5
cGU+Ci1zdHJ1Y3QgX19hbGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxfVHlwZT4gewotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBfX3ZhbHVlPQotICAgICAgICBzdGQ6OmlzX3RyaXZpYWxseV9k
ZXN0cnVjdGlibGU8dHlwZW5hbWUgX19zdG9yZWRfdHlwZTxfVHlwZT46Ol9fdHlwZT46OnZhbHVl
OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3Ry
dWN0IF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X0hlYWQsX1Jlc3QuLi4+IHsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgX192YWx1ZT0KLSAgICAgICAgX19hbGxfdHJpdmlhbGx5X2Rl
c3RydWN0aWJsZTxfSGVhZD46Ol9fdmFsdWUgJiYKLSAgICAgICAgX19hbGxfdHJpdmlhbGx5X2Rl
c3RydWN0aWJsZTxfUmVzdC4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBf
VGFyZ2V0LHR5cGVuYW1lIC4uLiBfQXJncz4KLXN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19jb25z
dHJ1Y3RpYmxlewotICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWU9Ci0gICAgICAgIHN0ZDo6
aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlPF9UYXJnZXQsIF9BcmdzLi4uPjo6dmFsdWU7Ci19Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fc3RvcmFnZV9ub3Rocm93
X21vdmVfY29uc3RydWN0aWJsZTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fc3RvcmFnZV9ub3Ro
cm93X21vdmVfY29uc3RydWN0aWJsZTw+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgX192
YWx1ZT10cnVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX19zdG9y
YWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlPiB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIF9fdmFsdWU9Ci0gICAgICAgIHN0ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVj
dGlibGU8Ci0gICAgICAgIHR5cGVuYW1lIF9fc3RvcmVkX3R5cGU8X1R5cGU+OjpfX3R5cGU+Ojp2
YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4K
LXN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X0hlYWQsX1Jlc3Qu
Li4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgX192YWx1ZT0KLSAgICAgICAgX19zdG9y
YWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkPjo6X192YWx1ZSAmJgotICAgICAg
ICBfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X1Jlc3QuLi4+OjpfX3ZhbHVl
OwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgot
c3RydWN0IF9fb3RoZXJfc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fb3RoZXJf
c3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTwwLF9IZWFkLF9SZXN0Li4uPnsKLSAg
ICBzdGF0aWMgY29uc3QgYm9vbCBfX3ZhbHVlPV9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3Ry
dWN0aWJsZTxfUmVzdC4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVh
ZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19vdGhlcl9zdG9yYWdlX25vdGhyb3dfbW92
ZV9jb25zdHJ1Y3RpYmxlPC0xLF9IZWFkLF9SZXN0Li4uPnsKLSAgICBzdGF0aWMgY29uc3QgYm9v
bCBfX3ZhbHVlPQotICAgICAgICBfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8
X0hlYWQsX1Jlc3QuLi4+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRl
eCx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19vdGhlcl9zdG9y
YWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9JbmRleCxfSGVhZCxfUmVzdC4uLj57Ci0g
ICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1ZT0KLSAgICAgICAgX19zdG9yYWdlX25vdGhyb3df
bW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkPjo6X192YWx1ZSAmJgotICAgICAgICBfX290aGVyX3N0
b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X0luZGV4LTEsX1Jlc3QuLi4+OjpfX3Zh
bHVlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVz
Pgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWR7Ci0gICAgc3RhdGljIGNvbnN0IGJv
b2wgX192YWx1ZT0KLSAgICAgICAgIV9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJs
ZTwKLSAgICAgICAgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9f
dHlwZT46Ol9fdmFsdWUgJiYKLSAgICAgICAgIV9fb3RoZXJfc3RvcmFnZV9ub3Rocm93X21vdmVf
Y29uc3RydWN0aWJsZTxfSW5kZXgsX1R5cGVzLi4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRl
PHB0cmRpZmZfdCBfSW5kZXgscHRyZGlmZl90IF9Db3VudCx0eXBlbmFtZSAuLi4gX1R5cGVzPgot
c3RydWN0IF9fYW55X2JhY2t1cF9zdG9yYWdlX3JlcXVpcmVkX2ltcGx7Ci0gICAgc3RhdGljIGNv
bnN0IGJvb2wgX192YWx1ZT0KLSAgICAgICAgX19iYWNrdXBfc3RvcmFnZV9yZXF1aXJlZDxfSW5k
ZXgsX1R5cGVzLi4uPjo6X192YWx1ZSB8fAotICAgICAgICBfX2FueV9iYWNrdXBfc3RvcmFnZV9y
ZXF1aXJlZF9pbXBsPF9JbmRleCsxLF9Db3VudC0xLF9UeXBlcy4uLj46Ol9fdmFsdWU7Ci19Owot
Ci10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3Qg
X19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWRfaW1wbDxfSW5kZXgsMCxfVHlwZXMuLi4+ewot
ICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWU9ZmFsc2U7Ci19OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBfVmFyaWFudD4KLXN0cnVjdCBfX2FueV9iYWNrdXBfc3RvcmFnZV9yZXF1aXJlZDsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FueV9iYWNrdXBfc3RvcmFn
ZV9yZXF1aXJlZDxWYXJpYW50PF9UeXBlcy4uLj4gPnsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBf
X3ZhbHVlPQotICAgICAgICBfX2FueV9iYWNrdXBfc3RvcmFnZV9yZXF1aXJlZF9pbXBsPDAsc2l6
ZW9mLi4uKF9UeXBlcyksX1R5cGVzLi4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci11bmlvbiBfX3ZhcmlhbnRfZGF0YTsKLQotLy8gc3RkOjppc19saXRl
cmFsX3R5cGUgaXMgZGVwcmVjYXRlZCBpbiBDKysxNyBhbmQgcmVtb3ZlZCBpbiBDKysyMAotQUxM
T1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBl
LGJvb2w9c3RkOjppc19saXRlcmFsX3R5cGU8X1R5cGU+Ojp2YWx1ZT4KLXN0cnVjdCBfX3Zhcmlh
bnRfc3RvcmFnZXsKLSAgICB0eXBlZGVmIF9UeXBlIF9fdHlwZTsKLQotICAgIHN0YXRpYyBjb25z
dGV4cHIgX1R5cGUmIF9fZ2V0KF9fdHlwZSYgX192YWwpewotICAgICAgICByZXR1cm4gX192YWw7
Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmJiBfX2dldF9ycmVmKF9fdHlwZSYg
X192YWwpewotICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9fdmFsKTsKLSAgICB9Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBjb25zdCBfVHlwZSYgX19nZXQoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0g
ICAgICAgIHJldHVybiBfX3ZhbDsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBf
VHlwZSYmIF9fZ2V0X3JyZWYoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBz
dGQ6Om1vdmUoX192YWwpOwotICAgIH0KLSAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3koX190eXBl
Jil7fQotfTsKLUFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBfX3N0b3JhZ2Vfd3JhcHBlcnsKLSAgICB0eXBlbmFtZSBz
dGQ6OmFsaWduZWRfc3RvcmFnZTxzaXplb2YoX1R5cGUpLGFsaWdub2YoX1R5cGUpPjo6dHlwZSBf
X3N0b3JhZ2U7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciB2b2lkIF9fY29uc3RydWN0KHZvaWQqIF9fcCxfQXJncyYmIC4uLiBfX2FyZ3Mp
ewotICAgICAgICBuZXcgKF9fcCkgX1R5cGUoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4u
KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0R1bW15ID0gX1R5cGU+Ci0gICAg
X19zdG9yYWdlX3dyYXBwZXIoCi0gICAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6
aXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPF9EdW1teT46OnZhbHVlLAotICAgICAgICB2b2lkIChf
X3N0b3JhZ2Vfd3JhcHBlcjo6KikoKT46OnR5cGUgPSBudWxscHRyKSB7Ci0gICAgICBfX2NvbnN0
cnVjdCgmX19zdG9yYWdlKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0R1bW15
ID0gX1R5cGU+Ci0gICAgX19zdG9yYWdlX3dyYXBwZXIoCi0gICAgICAgIHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPCFzdGQ6OmlzX2RlZmF1bHRfY29uc3RydWN0aWJsZTxfRHVtbXk+Ojp2YWx1ZSwK
LSAgICAgICAgdm9pZCAoX19zdG9yYWdlX3dyYXBwZXI6OiopKCk+Ojp0eXBlID0gbnVsbHB0cikg
ewotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmlyc3QsdHlwZW5hbWUgLi4u
IF9BcmdzPgotICAgIF9fc3RvcmFnZV93cmFwcGVyKF9GaXJzdCYmIF9fZmlyc3QsX0FyZ3MmJiAu
Li4gX19hcmdzKXsKLSAgICAgICAgX19jb25zdHJ1Y3QoJl9fc3RvcmFnZSxzdGQ6OmZvcndhcmQ8
X0ZpcnN0PihfX2ZpcnN0KSxzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgIH0K
LQotICAgIF9UeXBlJiBfX2dldCgpewotICAgICAgICByZXR1cm4gKnN0YXRpY19jYXN0PF9UeXBl
Kj4oc3RhdGljX2Nhc3Q8dm9pZCo+KCZfX3N0b3JhZ2UpKTsKLSAgICB9Ci0gICAgY29uc3RleHBy
IF9UeXBlIGNvbnN0JiBfX2dldCgpIGNvbnN0ewotICAgICAgICByZXR1cm4gKnN0YXRpY19jYXN0
PF9UeXBlIGNvbnN0Kj4oc3RhdGljX2Nhc3Q8dm9pZCBjb25zdCo+KCZfX3N0b3JhZ2UpKTsKLSAg
ICB9Ci0gICAgdm9pZCBfX2Rlc3Ryb3koKXsKLSAgICAgICAgX19nZXQoKS5+X1R5cGUoKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBfX3N0b3JhZ2Vfd3Jh
cHBlcjxfVHlwZSY+ewotICAgIF9UeXBlKiBfX3N0b3JhZ2U7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQXJnPgotICAgIGNvbnN0ZXhwciBfX3N0b3JhZ2Vfd3JhcHBlcihfQXJnJiBfX2FyZyk6
Ci0gICAgICAgIF9fc3RvcmFnZSgmX19hcmcpe30KLQotICAgIF9UeXBlJiBfX2dldCgpewotICAg
ICAgICByZXR1cm4gKl9fc3RvcmFnZTsKLSAgICB9Ci0gICAgY29uc3RleHByIF9UeXBlIGNvbnN0
JiBfX2dldCgpIGNvbnN0ewotICAgICAgICByZXR1cm4gKl9fc3RvcmFnZTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlw
ZSxmYWxzZT57Ci0gICAgdHlwZWRlZiBfX3N0b3JhZ2Vfd3JhcHBlcjxfVHlwZT4gX190eXBlOwot
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYgX19nZXQoX190eXBlJiBfX3ZhbCl7Ci0gICAg
ICAgIHJldHVybiBfX3ZhbC5fX2dldCgpOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIF9U
eXBlJiYgX19nZXRfcnJlZihfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bW92
ZShfX3ZhbC5fX2dldCgpKTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBfVHlw
ZSYgX19nZXQoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBfX3ZhbC5fX2dl
dCgpOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IF9UeXBlJiYgX19nZXRfcnJl
ZihfX3R5cGUgY29uc3QmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZShfX3ZhbC5f
X2dldCgpKTsKLSAgICB9Ci0gICAgc3RhdGljIHZvaWQgX19kZXN0cm95KF9fdHlwZSYgX192YWwp
ewotICAgICAgICBfX3ZhbC5fX2Rlc3Ryb3koKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBfVHlwZSxib29sIF9fYj4KLXN0cnVjdCBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYsX19i
PnsKLSAgICB0eXBlZGVmIF9UeXBlKiBfX3R5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIF9U
eXBlJiBfX2dldChfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuICpfX3ZhbDsKLSAgICB9
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYgX19nZXRfcnJlZihfX3R5cGUmIF9fdmFsKXsK
LSAgICAgICAgcmV0dXJuICpfX3ZhbDsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlw
ZSYgX19nZXQoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiAqX192YWw7Ci0g
ICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0X3JyZWYoX190eXBlIGNvbnN0
JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiAqX192YWw7Ci0gICAgfQotICAgIHN0YXRpYyB2b2lk
IF9fZGVzdHJveShfX3R5cGUmKXt9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSxib29s
IF9fYj4KLXN0cnVjdCBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYmLF9fYj57Ci0gICAgdHlwZWRl
ZiBfVHlwZSogX190eXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0KF9f
dHlwZSYgX192YWwpewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8X1R5cGUmJj4oKl9fdmFs
KTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0X3JyZWYoX190eXBl
JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxfVHlwZSYmPigqX192YWwpOwot
ICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiYgX19nZXQoX190eXBlIGNvbnN0JiBf
X3ZhbCl7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxfVHlwZSYmPigqX192YWwpOwotICAg
IH0KLSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiYgX19nZXRfcnJlZihfX3R5cGUgY29uc3Qm
IF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PF9UeXBlJiY+KCpfX3ZhbCk7Ci0g
ICAgfQotICAgIHN0YXRpYyB2b2lkIF9fZGVzdHJveShfX3R5cGUmKXt9Ci19OwotCi10ZW1wbGF0
ZTw+Ci11bmlvbiBfX3ZhcmlhbnRfZGF0YTw+ewotICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0
YSgpe30KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotdW5pb24gX192YXJpYW50X2Rh
dGE8X1R5cGU+ewotICAgIHR5cGVuYW1lIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlPjo6X190eXBl
IF9fdmFsOwotICAgIHN0cnVjdCBfX2R1bW15X3R5cGV7fSBfX2R1bW15OwotCi0gICAgY29uc3Rl
eHByIF9fdmFyaWFudF9kYXRhKCk6X19kdW1teSgpe30KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IC4uLiBfQXJncz4KLSAgICBjb25zdGV4cHIgX192YXJpYW50X2RhdGEoaW5fcGxhY2VfaW5kZXhf
dDwwPixfQXJncyYmIC4uLiBfX2FyZ3MpOgotICAgICAgICBfX3ZhbChzdGQ6OmZvcndhcmQ8X0Fy
Z3M+KF9fYXJncykuLi4pe30KLQotICAgIF9UeXBlJiBfX2dldChpbl9wbGFjZV9pbmRleF90PDA+
KXsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlPjo6X19nZXQoX192YWwp
OwotICAgIH0KLSAgICAvKmNvbnN0ZXhwciovIF9UeXBlJiYgX19nZXRfcnJlZihpbl9wbGFjZV9p
bmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlPjo6X19n
ZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBjb25zdCBfVHlwZSYgX19nZXQo
aW5fcGxhY2VfaW5kZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3Rv
cmFnZTxfVHlwZT46Ol9fZ2V0KF9fdmFsKTsKLSAgICB9Ci0gICAgY29uc3RleHByIGNvbnN0IF9U
eXBlJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAgICAgcmV0
dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQot
ICAgIHZvaWQgX19kZXN0cm95KGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICBfX3Zhcmlh
bnRfc3RvcmFnZTxfVHlwZT46Ol9fZGVzdHJveShfX3ZhbCk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgX1R5cGU+Ci11bmlvbiBfX3ZhcmlhbnRfZGF0YTxfVHlwZSY+ewotICAgIHR5
cGVuYW1lIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJj46Ol9fdHlwZSBfX3ZhbDsKLSAgICBzdHJ1
Y3QgX19kdW1teV90eXBle30gX19kdW1teTsKLQotICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0
YSgpOl9fZHVtbXkoKXt9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAg
Y29uc3RleHByIF9fdmFyaWFudF9kYXRhKGluX3BsYWNlX2luZGV4X3Q8MD4sX0FyZ3MmJiAuLi4g
X19hcmdzKToKLSAgICAgICAgX192YWwoJnN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLil7
fQotCi0gICAgX1R5cGUmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICByZXR1
cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X19nZXQoX192YWwpOwotICAgIH0KLSAgICBj
b25zdGV4cHIgX1R5cGUmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pIGNvbnN0ewotICAgICAg
ICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X19nZXQoX192YWwpOwotICAgIH0K
LQotICAgIF9UeXBlJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICBy
ZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAg
fQotICAgIGNvbnN0ZXhwciBfVHlwZSYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KSBj
b25zdHsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJj46Ol9fZ2V0X3Jy
ZWYoX192YWwpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIF9fZGVzdHJveShpbl9wbGFjZV9pbmRl
eF90PDA+KXsKLSAgICAgICAgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X19kZXN0cm95KF9f
dmFsKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXVuaW9uIF9fdmFy
aWFudF9kYXRhPF9UeXBlJiY+ewotICAgIHR5cGVuYW1lIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBl
JiY+OjpfX3R5cGUgX192YWw7Ci0gICAgc3RydWN0IF9fZHVtbXlfdHlwZXt9IF9fZHVtbXk7Ci0K
LSAgICBjb25zdGV4cHIgX192YXJpYW50X2RhdGEoKTpfX2R1bW15KCl7fQotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgX0FyZz4KLSAgICBfX3ZhcmlhbnRfZGF0YShpbl9wbGFjZV9pbmRleF90PDA+
LF9BcmcmJiBfX2FyZyk6Ci0gICAgICAgIF9fdmFsKCZfX2FyZyl7fQotCi0gICAgX1R5cGUmJiBf
X2dldChpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9y
YWdlPF9UeXBlJiY+OjpfX2dldChfX3ZhbCk7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBfVHlwZSYm
IF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pIGNvbnN0ewotICAgICAgICByZXR1cm4gX192YXJp
YW50X3N0b3JhZ2U8X1R5cGUmJj46Ol9fZ2V0KF9fdmFsKTsKLSAgICB9Ci0gICAgX1R5cGUmJiBf
X2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICByZXR1cm4gX192YXJpYW50
X3N0b3JhZ2U8X1R5cGUmJj46Ol9fZ2V0X3JyZWYoX192YWwpOwotICAgIH0KLSAgICBjb25zdGV4
cHIgX1R5cGUmJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4pIGNvbnN0ewotICAgICAg
ICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJj46Ol9fZ2V0X3JyZWYoX192YWwpOwot
ICAgIH0KLSAgICB2b2lkIF9fZGVzdHJveShpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAg
X192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJj46Ol9fZGVzdHJveShfX3ZhbCk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0PgotdW5pb24gX192
YXJpYW50X2RhdGE8X0hlYWQsX1Jlc3QuLi4+ewotICAgIF9fdmFyaWFudF9kYXRhPF9IZWFkPiBf
X2hlYWQ7Ci0gICAgX192YXJpYW50X2RhdGE8X1Jlc3QuLi4+IF9fcmVzdDsKLQotICAgIGNvbnN0
ZXhwciBfX3ZhcmlhbnRfZGF0YSgpOgotICAgICAgICBfX2hlYWQoKXt9Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKGluX3Bs
YWNlX2luZGV4X3Q8MD4sX0FyZ3MmJiAuLi4gX19hcmdzKToKLSAgICAgICAgX19oZWFkKGluX3Bs
YWNlPDA+LHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLil7fQotICAgIHRlbXBsYXRlPHNp
emVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRf
ZGF0YShpbl9wbGFjZV9pbmRleF90PF9JbmRleD4sX0FyZ3MmJiAuLi4gX19hcmdzKToKLSAgICAg
ICAgX19yZXN0KGluX3BsYWNlPF9JbmRleC0xPixzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncyku
Li4pe30KLQotICAgIF9IZWFkJiBfX2dldChpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAg
cmV0dXJuIF9faGVhZC5fX2dldChpbl9wbGFjZTwwPik7Ci0gICAgfQotCi0gICAgLypjb25zdGV4
cHIqLyBfSGVhZCYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDwwPil7Ci0gICAgICAgIHJl
dHVybiBfX2hlYWQuX19nZXRfcnJlZihpbl9wbGFjZTwwPik7Ci0gICAgfQotICAgIAotICAgIGNv
bnN0ZXhwciBjb25zdCBfSGVhZCYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPikgY29uc3R7Ci0g
ICAgICAgIHJldHVybiBfX2hlYWQuX19nZXQoaW5fcGxhY2U8MD4pOwotICAgIH0KLQotICAgIGNv
bnN0ZXhwciBjb25zdCBfSGVhZCYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDwwPikgY29u
c3R7Ci0gICAgICAgIHJldHVybiBfX2hlYWQuX19nZXRfcnJlZihpbl9wbGFjZTwwPik7Ci0gICAg
fQotICAgIAotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0gICAgdHlwZW5hbWUgX19pbmRl
eGVkX3R5cGU8X0luZGV4LTEsX1Jlc3QuLi4+OjpfX3R5cGUmIF9fZ2V0KAotICAgICAgICBpbl9w
bGFjZV9pbmRleF90PF9JbmRleD4pewotICAgICAgICByZXR1cm4gX19yZXN0Ll9fZ2V0KGluX3Bs
YWNlPF9JbmRleC0xPik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleD4KLSAg
ICAvKmNvbnN0ZXhwciovIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleC0xLF9SZXN0Li4u
Pjo6X190eXBlJiYgX19nZXRfcnJlZigKLSAgICAgICAgaW5fcGxhY2VfaW5kZXhfdDxfSW5kZXg+
KXsKLSAgICAgICAgcmV0dXJuIF9fcmVzdC5fX2dldF9ycmVmKGluX3BsYWNlPF9JbmRleC0xPik7
Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0gICAgY29uc3RleHBy
IGNvbnN0IHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleC0xLF9SZXN0Li4uPjo6X190eXBl
JiBfX2dldCgKLSAgICAgICAgaW5fcGxhY2VfaW5kZXhfdDxfSW5kZXg+KSBjb25zdHsKLSAgICAg
ICAgcmV0dXJuIF9fcmVzdC5fX2dldChpbl9wbGFjZTxfSW5kZXgtMT4pOwotICAgIH0KLQotICAg
IHRlbXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0gICAgY29uc3RleHByIGNvbnN0IHR5cGVuYW1lIF9f
aW5kZXhlZF90eXBlPF9JbmRleC0xLF9SZXN0Li4uPjo6X190eXBlJiYgX19nZXRfcnJlZigKLSAg
ICAgICAgaW5fcGxhY2VfaW5kZXhfdDxfSW5kZXg+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9f
cmVzdC5fX2dldF9ycmVmKGluX3BsYWNlPF9JbmRleC0xPik7Ci0gICAgfQotICAgIAotICAgIAot
ICAgIHZvaWQgX19kZXN0cm95KGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICBfX2hlYWQu
X19kZXN0cm95KGluX3BsYWNlPDA+KTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRl
eD4KLSAgICB2b2lkIF9fZGVzdHJveShpbl9wbGFjZV9pbmRleF90PF9JbmRleD4pewotICAgICAg
ICBfX3Jlc3QuX19kZXN0cm95KGluX3BsYWNlPF9JbmRleC0xPik7Ci0gICAgfQotfTsKLQotCi10
ZW1wbGF0ZTxwdHJkaWZmX3QuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX19pbmRleF9zZXF1ZW5jZXsK
LSAgICB0eXBlZGVmIF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4sc2l6ZW9mLi4uKF9JbmRp
Y2VzKT4gX19uZXh0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IF9fbGVuZ3RoPXNpemVv
Zi4uLihfSW5kaWNlcyk7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3Ry
dWN0IF9fdHlwZV9pbmRpY2VzOwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX190eXBlX2luZGljZXM8
PnsKLSAgICB0eXBlZGVmIF9faW5kZXhfc2VxdWVuY2U8PiBfX3R5cGU7Ci19OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBfX3R5cGVfaW5kaWNlczxfVHlwZT57Ci0gICAgdHlw
ZWRlZiBfX2luZGV4X3NlcXVlbmNlPDA+IF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IF9UeXBlLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX3R5cGVfaW5kaWNlczxfVHlwZSxf
UmVzdC4uLj57Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfaW5kaWNlczxfUmVzdC4uLj46
Ol9fdHlwZTo6X19uZXh0IF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50
Pgotc3RydWN0IF9fdmFyaWFudF9pbmRpY2VzOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5
cGVzPgotc3RydWN0IF9fdmFyaWFudF9pbmRpY2VzPFZhcmlhbnQ8X1R5cGVzLi4uPj57Ci0gICAg
dHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfaW5kaWNlczxfVHlwZXMuLi4+OjpfX3R5cGUgX190eXBl
OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0gICAgICAgICB0eXBlbmFtZSBf
SW5kaWNlcz10eXBlbmFtZSBfX3ZhcmlhbnRfaW5kaWNlczxfVmFyaWFudD46Ol9fdHlwZT4KLXN0
cnVjdCBfX21vdmVfY29uc3RydWN0X29wX3RhYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFy
aWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9fbW92ZV9jb25zdHJ1Y3Rfb3Bf
dGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVk
ZWYgdm9pZCgqIGNvbnN0IF9fZnVuY190eXBlKShfVmFyaWFudCosX1ZhcmlhbnQmKTsKLSAgICAK
LSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyB2b2lkIF9fbW92ZV9j
b25zdHJ1Y3RfZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgKiBfX2xocyxfVmFyaWFudCYgX19yaHMp
ewotICAgICAgICBfX2xocy0+dGVtcGxhdGUgX19lbXBsYWNlX2NvbnN0cnVjdDxfSW5kZXg+KAot
ICAgICAgICAgICAgc3RkOjptb3ZlKGdldDxfSW5kZXg+KF9fcmhzKSkpOwotICAgIH0KLQotICAg
IHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlwZSBfX2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyldOwot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4K
LWNvbnN0IHR5cGVuYW1lIF9fbW92ZV9jb25zdHJ1Y3Rfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRl
eF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKLV9fZnVuY190eXBlCi1fX21vdmVfY29uc3RydWN0
X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19hcHBs
eVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX21vdmVfY29uc3RydWN0
X2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQs
Ci0gICAgICAgICB0eXBlbmFtZSBfSW5kaWNlcz10eXBlbmFtZSBfX3ZhcmlhbnRfaW5kaWNlczxf
VmFyaWFudD46Ol9fdHlwZT4KLXN0cnVjdCBfX21vdmVfYXNzaWduX29wX3RhYmxlOwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9f
bW92ZV9hc3NpZ25fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4u
Lj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fZnVuY190eXBlKShfVmFyaWFudCosX1Zh
cmlhbnQmKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRp
YyB2b2lkIF9fbW92ZV9hc3NpZ25fZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgKiBfX2xocyxfVmFy
aWFudCYgX19yaHMpewotICAgICAgICBnZXQ8X0luZGV4PigqX19saHMpPXN0ZDo6bW92ZShnZXQ8
X0luZGV4PihfX3JocykpOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlwZSBf
X2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyldOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zh
cmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fbW92ZV9hc3Np
Z25fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKLV9f
ZnVuY190eXBlCi1fX21vdmVfYXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVu
Y2U8X0luZGljZXMuLi4+Pjo6X19hcHBseVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0g
ICAgICAgICZfX21vdmVfYXNzaWduX2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0gICAgICAgICB0eXBlbmFtZSBfSW5kaWNlcz10eXBlbmFt
ZSBfX3ZhcmlhbnRfaW5kaWNlczxfVmFyaWFudD46Ol9fdHlwZT4KLXN0cnVjdCBfX2NvcHlfY29u
c3RydWN0X29wX3RhYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3Qg
Li4uIF9JbmRpY2VzPgotc3RydWN0IF9fY29weV9jb25zdHJ1Y3Rfb3BfdGFibGU8X1ZhcmlhbnQs
X19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0
IF9fZnVuY190eXBlKShfVmFyaWFudCosX1ZhcmlhbnQgY29uc3QmKTsKLSAgICAKLSAgICB0ZW1w
bGF0ZTxwdHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyB2b2lkIF9fY29weV9jb25zdHJ1Y3Rf
ZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgKiBfX2xocyxfVmFyaWFudCBjb25zdCYgX19yaHMpewot
ICAgICAgICBfX2xocy0+dGVtcGxhdGUgX19lbXBsYWNlX2NvbnN0cnVjdDxfSW5kZXg+KAotICAg
ICAgICAgICAgZ2V0PF9JbmRleD4oX19yaHMpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3Qg
X19mdW5jX3R5cGUgX19hcHBseVtzaXplb2YuLi4oX0luZGljZXMpXTsKLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1jb25zdCB0eXBlbmFt
ZSBfX2NvcHlfY29uc3RydWN0X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0lu
ZGljZXMuLi4+Pjo6Ci1fX2Z1bmNfdHlwZQotX19jb3B5X2NvbnN0cnVjdF9vcF90YWJsZTxfVmFy
aWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fYXBwbHlbCi0gICAgc2l6ZW9m
Li4uKF9JbmRpY2VzKV09ewotICAgICAgICAmX19jb3B5X2NvbnN0cnVjdF9mdW5jPF9JbmRpY2Vz
Pi4uLgotICAgIH07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LAotICAgICAgICAgdHlw
ZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5
cGU+Ci1zdHJ1Y3QgX19jb3B5X2Fzc2lnbl9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
X1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX2NvcHlfYXNzaWduX29w
X3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKLSAgICB0eXBl
ZGVmIHZvaWQoKiBjb25zdCBfX2Z1bmNfdHlwZSkoX1ZhcmlhbnQqLF9WYXJpYW50IGNvbnN0Jik7
Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBf
X2NvcHlfYXNzaWduX2Z1bmMoCi0gICAgICAgIF9WYXJpYW50ICogX19saHMsX1ZhcmlhbnQgY29u
c3QmIF9fcmhzKXsKLSAgICAgICAgZ2V0PF9JbmRleD4oKl9fbGhzKT1nZXQ8X0luZGV4PihfX3Jo
cyk7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IF9fZnVuY190eXBlIF9fYXBwbHlbc2l6ZW9m
Li4uKF9JbmRpY2VzKV07Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZm
X3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19jb3B5X2Fzc2lnbl9vcF90YWJsZTxf
VmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46OgotX19mdW5jX3R5cGUKLV9f
Y29weV9hc3NpZ25fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4u
Lj4+OjpfX2FwcGx5WwotICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9fY29w
eV9hc3NpZ25fZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBf
VmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9p
bmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotc3RydWN0IF9fZGVzdHJveV9vcF90YWJsZTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVj
dCBfX2Rlc3Ryb3lfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4u
Lj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fZnVuY190eXBlKShfVmFyaWFudCopOwot
ICAgIAotICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGljIHZvaWQgX19k
ZXN0cm95X2Z1bmMoCi0gICAgICAgIF9WYXJpYW50ICogX19zZWxmKXsKLSAgICAgICAgaWYoX19z
ZWxmLT5fX2luZGV4Pj0wKXsKLSAgICAgICAgICAgIF9fc2VsZi0+X19zdG9yYWdlLl9fZGVzdHJv
eShpbl9wbGFjZTxfSW5kZXg+KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBjb25z
dCBfX2Z1bmNfdHlwZSBfX2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyldOwotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVu
YW1lIF9fZGVzdHJveV9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2Vz
Li4uPj46OgotX19mdW5jX3R5cGUKLV9fZGVzdHJveV9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4
X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fYXBwbHlbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2Vz
KV09ewotICAgICAgICAmX19kZXN0cm95X2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0gICAgICAgICB0eXBlbmFtZSBfSW5kaWNlcz10eXBl
bmFtZSBfX3ZhcmlhbnRfaW5kaWNlczxfVmFyaWFudD46Ol9fdHlwZT4KLXN0cnVjdCBfX3N3YXBf
b3BfdGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0lu
ZGljZXM+Ci1zdHJ1Y3QgX19zd2FwX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8
X0luZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Z1bmNfdHlwZSkoX1Zh
cmlhbnQmLF9WYXJpYW50Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4K
LSAgICBzdGF0aWMgdm9pZCBfX3N3YXBfZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgJiBfX2xocyxf
VmFyaWFudCAmIF9fcmhzKXsKLSAgICAgICAgc3dhcChnZXQ8X0luZGV4PihfX2xocyksZ2V0PF9J
bmRleD4oX19yaHMpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgX19mdW5jX3R5cGUgX19h
cHBseVtzaXplb2YuLi4oX0luZGljZXMpXTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJp
YW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1jb25zdCB0eXBlbmFtZSBfX3N3YXBfb3BfdGFi
bGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKLV9fZnVuY190eXBl
Ci1fX3N3YXBfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+
OjpfX2FwcGx5WwotICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9fc3dhcF9m
dW5jPF9JbmRpY2VzPi4uLgotICAgIH07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LAot
ICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGljZXM8X1Zh
cmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19lcXVhbGl0eV9vcF90YWJsZTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX2VxdWFs
aXR5X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKLSAg
ICB0eXBlZGVmIGJvb2woKiBjb25zdCBfX2NvbXBhcmVfZnVuY190eXBlKShfVmFyaWFudCBjb25z
dCYsX1ZhcmlhbnQgY29uc3QmKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4
PgotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBfX2VxdWFsaXR5X2NvbXBhcmVfZnVuYygKLSAg
ICAgICAgX1ZhcmlhbnQgY29uc3QmIF9fbGhzLF9WYXJpYW50IGNvbnN0JiBfX3Jocyl7Ci0gICAg
ICAgIHJldHVybiBnZXQ8X0luZGV4PihfX2xocyk9PWdldDxfSW5kZXg+KF9fcmhzKTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIF9fY29tcGFyZV9mdW5jX3R5cGUgX19lcXVhbGl0eV9j
b21wYXJlW3NpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9fZXF1YWxpdHlfY29tcGFy
ZV9mdW5jPF9JbmRpY2VzPi4uLgotICAgIH07Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFy
aWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3RleHByIHR5cGVuYW1lIF9fZXF1YWxp
dHlfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKLV9f
Y29tcGFyZV9mdW5jX3R5cGUKLV9fZXF1YWxpdHlfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9z
ZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2VxdWFsaXR5X2NvbXBhcmVbCi0gICAgc2l6ZW9mLi4u
KF9JbmRpY2VzKV07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LAotICAgICAgICAgdHlw
ZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5
cGU+Ci1zdHJ1Y3QgX19sZXNzX3RoYW5fb3BfdGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9W
YXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX19sZXNzX3RoYW5fb3BfdGFi
bGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYg
Ym9vbCgqIGNvbnN0IF9fY29tcGFyZV9mdW5jX3R5cGUpKF9WYXJpYW50IGNvbnN0JixfVmFyaWFu
dCBjb25zdCYpOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIF9fbGVzc190aGFuX2NvbXBhcmVfZnVuYygKLSAgICAgICAgX1Zh
cmlhbnQgY29uc3QmIF9fbGhzLF9WYXJpYW50IGNvbnN0JiBfX3Jocyl7Ci0gICAgICAgIHJldHVy
biBnZXQ8X0luZGV4PihfX2xocyk8Z2V0PF9JbmRleD4oX19yaHMpOwotICAgIH0KLQotICAgIHN0
YXRpYyBjb25zdGV4cHIgX19jb21wYXJlX2Z1bmNfdHlwZSBfX2xlc3NfdGhhbl9jb21wYXJlW3Np
emVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9fbGVzc190aGFuX2NvbXBhcmVfZnVuYzxf
SW5kaWNlcz4uLi4KLSAgICB9OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRy
ZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2xlc3NfdGhhbl9vcF90
YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46OgotX19jb21wYXJl
X2Z1bmNfdHlwZQotX19sZXNzX3RoYW5fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5j
ZTxfSW5kaWNlcy4uLj4+OjpfX2xlc3NfdGhhbl9jb21wYXJlWwotICAgIHNpemVvZi4uLihfSW5k
aWNlcyldOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudD4KLXN0cnVjdCBfX3ZhcmlhbnRf
c3RvcmFnZV90eXBlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfRGVyaXZlZCxib29sIF9fdHJpdmlh
bF9kZXN0cnVjdG9yPgotc3RydWN0IF9fdmFyaWFudF9iYXNlCi17Ci0gICAgfl9fdmFyaWFudF9i
YXNlKCl7Ci0gICAgICAgIHN0YXRpY19jYXN0PF9EZXJpdmVkKj4odGhpcyktPl9fZGVzdHJveV9z
ZWxmKCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0Rlcml2ZWQ+Ci1zdHJ1Y3Qg
X192YXJpYW50X2Jhc2U8X0Rlcml2ZWQsdHJ1ZT57Ci19OwotCi0KLXRlbXBsYXRlPHB0cmRpZmZf
dCBfT2Zmc2V0LHR5cGVuYW1lIF9DdXJyZW50U2VxdWVuY2UsCi0gICAgICAgICB0eXBlbmFtZSBf
VHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYWxsX2luZGljZXNfaGVscGVyOwot
Ci10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzLAotICAg
ICAgICAgdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fYWxsX2lu
ZGljZXNfaGVscGVyPAotICAgIF9PZmZzZXQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4s
Ci0gICAgX1R5cGUsX1R5cGUsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hbGxf
aW5kaWNlc19oZWxwZXI8Ci0gICAgICAgIF9PZmZzZXQrMSxfX2luZGV4X3NlcXVlbmNlPF9JbmRp
Y2VzLi4uLF9PZmZzZXQ+LF9UeXBlLF9SZXN0Li4uPjo6X190eXBlCi0gICAgICAgIF9fdHlwZTsK
LX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfT2Zmc2V0LHR5cGVuYW1lIF9DdXJyZW50U2VxdWVu
Y2UsCi0gICAgICAgICB0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4g
X1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfaW5kaWNlc19oZWxwZXI8X09mZnNldCxfQ3VycmVudFNlcXVl
bmNlLF9UeXBlLF9IZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fYWxsX2lu
ZGljZXNfaGVscGVyPAotICAgICAgICBfT2Zmc2V0KzEsX0N1cnJlbnRTZXF1ZW5jZSxfVHlwZSxf
UmVzdC4uLj46Ol9fdHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNl
dCx0eXBlbmFtZSBfQ3VycmVudFNlcXVlbmNlLHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fYWxs
X2luZGljZXNfaGVscGVyPF9PZmZzZXQsX0N1cnJlbnRTZXF1ZW5jZSxfVHlwZT57Ci0gICAgdHlw
ZWRlZiBfQ3VycmVudFNlcXVlbmNlIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9U
eXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbGxfaW5kaWNlc3sKLSAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9fYWxsX2luZGljZXNfaGVscGVyPAotICAgICAgICAwLF9faW5kZXhfc2Vx
dWVuY2U8PixfVHlwZSxfVHlwZXMuLi4+OjpfX3R5cGUgX190eXBlOwotfTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgLi4uIF9TZXF1ZW5jZXM+Ci1zdHJ1Y3QgX19jb21iaW5lX3NlcXVlbmNlczsKLQot
dGVtcGxhdGU8cHRyZGlmZl90IC4uLiBfSW5kaWNlczEscHRyZGlmZl90IC4uLiBfSW5kaWNlczI+
Ci1zdHJ1Y3QgX19jb21iaW5lX3NlcXVlbmNlczwKLSAgICBfX2luZGV4X3NlcXVlbmNlPF9JbmRp
Y2VzMS4uLj4sX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlczIuLi4+PnsKLSAgICB0eXBlZGVmIF9f
aW5kZXhfc2VxdWVuY2U8X0luZGljZXMxLi4uLF9JbmRpY2VzMi4uLj4gX190eXBlOwotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgX1NlcXVlbmNlLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBf
X2NvbWJpbmVfc2VxdWVuY2VzPF9TZXF1ZW5jZSxfUmVzdC4uLj57Ci0gICAgdHlwZWRlZiB0eXBl
bmFtZSBfX2NvbWJpbmVfc2VxdWVuY2VzPAotICAgICAgICBfU2VxdWVuY2UsCi0gICAgICAgIHR5
cGVuYW1lIF9fY29tYmluZV9zZXF1ZW5jZXM8X1Jlc3QuLi4+OjpfX3R5cGU+OjpfX3R5cGUgX190
eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0luZGljZXM+Ci1zdHJ1Y3QgX19maXJzdF9p
bmRleDsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9GaXJzdEluZGV4LHB0cmRpZmZfdCAuLi4gX1Jl
c3Q+Ci1zdHJ1Y3QgX19maXJzdF9pbmRleDxfX2luZGV4X3NlcXVlbmNlPF9GaXJzdEluZGV4LF9S
ZXN0Li4uPj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3QgX192YWx1ZT1fRmlyc3RJ
bmRleDsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfT2Zmc2V0LHR5cGVuYW1lIF9DdXJyZW50
U2VxdWVuY2UsCi0gICAgICAgICB0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgot
c3RydWN0IF9fY29uc3RydWN0aWJsZV9tYXRjaGVzX2hlbHBlcjsKLQotdGVtcGxhdGU8cHRyZGlm
Zl90IF9PZmZzZXQsdHlwZW5hbWUgX1NlcXVlbmNlLHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9f
Y29uc3RydWN0aWJsZV9tYXRjaGVzX2hlbHBlcjwKLSAgICBfT2Zmc2V0LF9TZXF1ZW5jZSxfVHlw
ZT57Ci0gICAgdHlwZWRlZiBfU2VxdWVuY2UgX190eXBlOwotfTsKLQotdGVtcGxhdGU8Ym9vbCBf
QWNjZXB0LHB0cmRpZmZfdCBfRW50cnk+Ci1zdHJ1Y3QgX19zZXF1ZW5jZV9vcl9lbXB0eXsKLSAg
ICB0eXBlZGVmIF9faW5kZXhfc2VxdWVuY2U8PiBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxwdHJk
aWZmX3QgX0VudHJ5Pgotc3RydWN0IF9fc2VxdWVuY2Vfb3JfZW1wdHk8dHJ1ZSxfRW50cnk+ewot
ICAgIHR5cGVkZWYgX19pbmRleF9zZXF1ZW5jZTxfRW50cnk+IF9fdHlwZTsKLX07Ci0KLXRlbXBs
YXRlPHB0cmRpZmZfdCBfT2Zmc2V0LHR5cGVuYW1lIF9DdXJyZW50U2VxdWVuY2UsCi0gICAgICAg
ICB0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1
Y3QgX19jb25zdHJ1Y3RpYmxlX21hdGNoZXNfaGVscGVyPAotICAgIF9PZmZzZXQsX0N1cnJlbnRT
ZXF1ZW5jZSxfVHlwZSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgdHlwZWRlZgotICAgIHR5cGVuYW1l
IF9fY29uc3RydWN0aWJsZV9tYXRjaGVzX2hlbHBlcjwKLSAgICAgICAgX09mZnNldCsxLAotICAg
ICAgICB0eXBlbmFtZSBfX2NvbWJpbmVfc2VxdWVuY2VzPAotICAgICAgICAgICAgX0N1cnJlbnRT
ZXF1ZW5jZSwKLSAgICAgICAgICAgIHR5cGVuYW1lIF9fc2VxdWVuY2Vfb3JfZW1wdHk8Ci0gICAg
ICAgICAgICAgICAgc3RkOjppc19jb25zdHJ1Y3RpYmxlPF9IZWFkLF9UeXBlPjo6dmFsdWUsCi0g
ICAgICAgICAgICAgICAgX09mZnNldD46Ol9fdHlwZT46Ol9fdHlwZSwKLSAgICAgICAgX1R5cGUs
X1Jlc3QuLi4+OjpfX3R5cGUgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUs
dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2NvbnN0cnVjdGlibGVfbWF0Y2hlc3sKLSAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9fY29uc3RydWN0aWJsZV9tYXRjaGVzX2hlbHBlcjwKLSAgICAg
ICAgMCxfX2luZGV4X3NlcXVlbmNlPD4sX1R5cGUsX1R5cGVzLi4uPjo6X190eXBlIF9fdHlwZTsK
LX07Cit1c2luZyBNb25vc3RhdGUgPSBzdGQ6Om1vbm9zdGF0ZTsKK3RlbXBsYXRlPHR5cGVuYW1l
Li4uIFR5cGVzPgordXNpbmcgVmFyaWFudCA9IHN0ZDo6dmFyaWFudDxUeXBlcy4uLj47CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX190eXBl
X2luZGV4X3RvX2NvbnN0cnVjdHsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fYWxsX2luZGljZXM8
X1R5cGUsX1R5cGVzLi4uPjo6X190eXBlIF9fZGlyZWN0X21hdGNoZXM7Ci0gICAgdHlwZWRlZiB0
eXBlbmFtZSBfX2FsbF9pbmRpY2VzPAotICAgICAgICB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25z
dDwKLSAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxfVHlwZT46OnR5
cGUKLSAgICAgICAgICAgID46OnR5cGUsX1R5cGVzLi4uPjo6X190eXBlIF9fdmFsdWVfbWF0Y2hl
czsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fYWxsX2luZGljZXM8Ci0gICAgICAgIF9UeXBlLAot
ICAgICAgICB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDwKLSAgICAgICAgICAgIHR5cGVuYW1l
IHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxfVHlwZXM+Ojp0eXBlCi0gICAgICAgICAgICA+Ojp0eXBl
Li4uPjo6X190eXBlIF9fcnJlZl9tYXRjaGVzOwotCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2Nv
bnN0cnVjdGlibGVfbWF0Y2hlczxfVHlwZSxfVHlwZXMuLi4+OjpfX3R5cGUKLSAgICBfX2NvbnN0
cnVjdGlibGVzOwotCi0gICAgc3RhdGljX2Fzc2VydCgKLSAgICAgICAgKF9fZGlyZWN0X21hdGNo
ZXM6Ol9fbGVuZ3RoPjApIHx8Ci0gICAgICAgIChfX3ZhbHVlX21hdGNoZXM6Ol9fbGVuZ3RoPjAp
IHx8Ci0gICAgICAgIChfX3JyZWZfbWF0Y2hlczo6X19sZW5ndGg+MCkgfHwKLSAgICAgICAgKF9f
Y29uc3RydWN0aWJsZXM6Ol9fbGVuZ3RoPT0xKSwKLSAgICAgICAgIkZvciBjb252ZXJzaW9uIGNv
bnN0cnVjdGlvbiBvZiB2YXJpYW50cywgZXhhY3RseSBvbmUgdHlwZSBtdXN0IGJlIGNvbnN0cnVj
dGlibGUiKTsKLSAgICAKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fY29tYmluZV9zZXF1ZW5jZXM8
Ci0gICAgICAgIF9fZGlyZWN0X21hdGNoZXMsX192YWx1ZV9tYXRjaGVzLF9fcnJlZl9tYXRjaGVz
LAotICAgICAgICBfX2NvbnN0cnVjdGlibGVzPjo6X190eXBlIF9fYWxsX21hdGNoZXM7Ci0gICAg
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3QgX192YWx1ZT1fX2ZpcnN0X2luZGV4PF9f
YWxsX21hdGNoZXM+OjpfX3ZhbHVlOwotfTsKLQotc3RydWN0IF9fcmVwbGFjZV9jb25zdHJ1Y3Rf
aGVscGVyewotICAgIHRlbXBsYXRlPAotICAgICAgICBwdHJkaWZmX3QgX0luZGV4LAotICAgICAg
ICBib29sIF9fY29uc3RydWN0X2RpcmVjdGx5LAotICAgICAgICBib29sIF9faW5kZXhlZF90eXBl
X2hhc19ub3Rocm93X21vdmUsCi0gICAgICAgIGJvb2wgX19vdGhlcl90eXBlc19oYXZlX25vdGhy
b3dfbW92ZT4KLSAgICBzdHJ1Y3QgX19oZWxwZXI7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VmFyaWFudCwKLSAgICAgICAgICAgICB0eXBlbmFtZSBfSW5kaWNlcz10eXBlbmFtZSBfX3Zhcmlh
bnRfaW5kaWNlczxfVmFyaWFudD46Ol9fdHlwZT4KLSAgICBzdHJ1Y3QgX19vcF90YWJsZTsKLX07
Ci0KLXRlbXBsYXRlPAotICAgIHB0cmRpZmZfdCBfSW5kZXgsCi0gICAgYm9vbCBfX290aGVyX3R5
cGVzX2hhdmVfbm90aHJvd19tb3ZlPgotc3RydWN0IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVy
OjpfX2hlbHBlcjwKLSAgICBfSW5kZXgsZmFsc2UsdHJ1ZSxfX290aGVyX3R5cGVzX2hhdmVfbm90
aHJvd19tb3ZlPnsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHR5cGVuYW1lIC4u
LiBfQXJncz4KLSAgICBzdGF0aWMgdm9pZCBfX3RyYW1wb2xpbmUoX1ZhcmlhbnQmIF9fdixfQXJn
cyYmIC4uLiBfX2FyZ3MpewotICAgICAgICBfX3YudGVtcGxhdGUgX190d29fc3RhZ2VfcmVwbGFj
ZTxfSW5kZXg+KF9fYXJncy4uLik7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8Ci0gICAgcHRyZGlm
Zl90IF9JbmRleCwKLSAgICBib29sIF9faW5kZXhlZF90eXBlX2hhc19ub3Rocm93X21vdmUsCi0g
ICAgYm9vbCBfX290aGVyX3R5cGVzX2hhdmVfbm90aHJvd19tb3ZlPgotc3RydWN0IF9fcmVwbGFj
ZV9jb25zdHJ1Y3RfaGVscGVyOjpfX2hlbHBlcjwKLSAgICBfSW5kZXgsdHJ1ZSxfX2luZGV4ZWRf
dHlwZV9oYXNfbm90aHJvd19tb3ZlLAotICAgIF9fb3RoZXJfdHlwZXNfaGF2ZV9ub3Rocm93X21v
dmU+ewotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsdHlwZW5hbWUgLi4uIF9Bcmdz
PgotICAgIHN0YXRpYyB2b2lkIF9fdHJhbXBvbGluZShfVmFyaWFudCYgX192LF9BcmdzJiYgLi4u
IF9fYXJncyl7Ci0gICAgICAgIF9fdi50ZW1wbGF0ZSBfX2RpcmVjdF9yZXBsYWNlPF9JbmRleD4o
c3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9Ci19OwotCi0KLXRlbXBsYXRl
PAotICAgIHB0cmRpZmZfdCBfSW5kZXg+Ci1zdHJ1Y3QgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxw
ZXI6Ol9faGVscGVyPAotICAgIF9JbmRleCxmYWxzZSxmYWxzZSx0cnVlPnsKLQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIF9WYXJpYW50LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBzdGF0aWMgdm9p
ZCBfX3RyYW1wb2xpbmUoX1ZhcmlhbnQmIF9fdixfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAg
ICBfX3YudGVtcGxhdGUgX19sb2NhbF9iYWNrdXBfcmVwbGFjZTxfSW5kZXg+KHN0ZDo6Zm9yd2Fy
ZDxfQXJncz4oX19hcmdzKS4uLik7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8Ci0gICAgcHRyZGlm
Zl90IF9JbmRleD4KLXN0cnVjdCBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19oZWxwZXI8
Ci0gICAgX0luZGV4LGZhbHNlLGZhbHNlLGZhbHNlPnsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IF9WYXJpYW50LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBzdGF0aWMgdm9pZCBfX3RyYW1wb2xp
bmUoX1ZhcmlhbnQmIF9fdixfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICBfX3YudGVtcGxh
dGUgX19kaXJlY3RfcmVwbGFjZTxfSW5kZXg+KHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4u
Lik7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4u
LiBfSW5kaWNlcz4KLXN0cnVjdCBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJs
ZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0gICAgdHlwZWRlZiB2
b2lkKCogY29uc3QgX19tb3ZlX2Z1bmNfdHlwZSkoX1ZhcmlhbnQqLF9WYXJpYW50Jik7Ci0gICAg
dHlwZWRlZiB2b2lkKCogY29uc3QgX19jb3B5X2Z1bmNfdHlwZSkoX1ZhcmlhbnQqLF9WYXJpYW50
IGNvbnN0Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0
aWMgdm9pZCBfX21vdmVfYXNzaWduX2Z1bmMoCi0gICAgICAgIF9WYXJpYW50ICogX19saHMsX1Zh
cmlhbnQmIF9fcmhzKXsKLSAgICAgICAgX19saHMtPnRlbXBsYXRlIF9fcmVwbGFjZV9jb25zdHJ1
Y3Q8X0luZGV4PihzdGQ6Om1vdmUoZ2V0PF9JbmRleD4oX19yaHMpKSk7Ci0gICAgICAgIF9fcmhz
Ll9fZGVzdHJveV9zZWxmKCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRl
eD4KLSAgICBzdGF0aWMgdm9pZCBfX2NvcHlfYXNzaWduX2Z1bmMoCi0gICAgICAgIF9WYXJpYW50
ICogX19saHMsX1ZhcmlhbnQgY29uc3QmIF9fcmhzKXsKLSAgICAgICAgX19saHMtPnRlbXBsYXRl
IF9fcmVwbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PihnZXQ8X0luZGV4PihfX3JocykpOwotICAgIH0K
LSAgICAKLSAgICBzdGF0aWMgY29uc3QgX19tb3ZlX2Z1bmNfdHlwZSBfX21vdmVfYXNzaWduW3Np
emVvZi4uLihfSW5kaWNlcyldOwotICAgIHN0YXRpYyBjb25zdCBfX2NvcHlfZnVuY190eXBlIF9f
Y29weV9hc3NpZ25bc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19yZXBs
YWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8Ci0gICAgX1ZhcmlhbnQsX19pbmRleF9z
ZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX21vdmVfZnVuY190eXBlCi1fX3JlcGxhY2VfY29uc3Ry
dWN0X2hlbHBlcjo6X19vcF90YWJsZTwKLSAgICBfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9J
bmRpY2VzLi4uPj46Ol9fbW92ZV9hc3NpZ25bCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09ewot
ICAgICAgICAmX19tb3ZlX2Fzc2lnbl9mdW5jPF9JbmRpY2VzPi4uLgotICAgIH07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1jb25zdCB0eXBl
bmFtZSBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTwKLSAgICBfVmFyaWFu
dCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fY29weV9mdW5jX3R5cGUKLV9fcmVw
bGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPAotICAgIF9WYXJpYW50LF9faW5kZXhf
c2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19jb3B5X2Fzc2lnblsKLSAgICBzaXplb2YuLi4oX0lu
ZGljZXMpXT17Ci0gICAgICAgICZfX2NvcHlfYXNzaWduX2Z1bmM8X0luZGljZXM+Li4uCi0gICAg
fTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCxwdHJkaWZmX3QgX01hc2tJbmRleCx0eXBl
bmFtZSBfU3RvcmFnZT4KLXN0cnVjdCBfX2JhY2t1cF9zdG9yYWdlX29wc3sKLSAgICBzdGF0aWMg
dm9pZCBfX21vdmVfY29uc3RydWN0X2Z1bmMoCi0gICAgICAgIF9TdG9yYWdlICogX19kZXN0LF9T
dG9yYWdlJiBfX3NvdXJjZSl7Ci0gICAgICAgIG5ldyhfX2Rlc3QpIF9TdG9yYWdlKAotICAgICAg
ICAgICAgaW5fcGxhY2U8X0luZGV4PiwKLSAgICAgICAgICAgIHN0ZDo6bW92ZShfX3NvdXJjZS5f
X2dldChpbl9wbGFjZTxfSW5kZXg+KSkpOwotICAgIH0KLSAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ry
b3lfZnVuYyhfU3RvcmFnZSAqIF9fb2JqKXsKLSAgICAgICAgX19vYmotPl9fZGVzdHJveShpbl9w
bGFjZTxfSW5kZXg+KTsKLSAgICB9OwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0
eXBlbmFtZSBfU3RvcmFnZT4KLXN0cnVjdCBfX2JhY2t1cF9zdG9yYWdlX29wczxfSW5kZXgsX0lu
ZGV4LF9TdG9yYWdlPnsKLSAgICBzdGF0aWMgdm9pZCBfX21vdmVfY29uc3RydWN0X2Z1bmMoX1N0
b3JhZ2UgKixfU3RvcmFnZSYpewotICAgICAgICBfX1RIUk9XX0VYQ0VQVElPTihzdGQ6OmJhZF9h
bGxvYygpKTsKLSAgICB9OwotICAgIHN0YXRpYyB2b2lkIF9fZGVzdHJveV9mdW5jKF9TdG9yYWdl
ICopewotICAgICAgICBfX1RIUk9XX0VYQ0VQVElPTihzdGQ6OmJhZF9hbGxvYygpKTsKLSAgICB9
OwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9NYXNrSW5kZXgsdHlwZW5hbWUgX1N0b3JhZ2Us
dHlwZW5hbWUgX0luZGljZXM+Ci1zdHJ1Y3QgX19iYWNrdXBfc3RvcmFnZV9vcF90YWJsZTsKLQot
dGVtcGxhdGU8cHRyZGlmZl90IF9NYXNrSW5kZXgsdHlwZW5hbWUgX1N0b3JhZ2UscHRyZGlmZl90
IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX2JhY2t1cF9zdG9yYWdlX29wX3RhYmxlPAotICAgIF9N
YXNrSW5kZXgsX1N0b3JhZ2UsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4gPgotewotICAg
IHR5cGVkZWYgdm9pZCAoKl9fbW92ZV9mdW5jX3R5cGUpKF9TdG9yYWdlICogX19kZXN0LF9TdG9y
YWdlJiBfX3NvdXJjZSk7Ci0gICAgdHlwZWRlZiB2b2lkICgqX19kZXN0cm95X2Z1bmNfdHlwZSko
X1N0b3JhZ2UgKiBfX29iaik7Ci0gICAgCi0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleD4KLSAg
ICBzdHJ1Y3QgX19oZWxwZXJ7Ci0gICAgICAgIHR5cGVkZWYgX19iYWNrdXBfc3RvcmFnZV9vcHM8
X0luZGV4LF9NYXNrSW5kZXgsX1N0b3JhZ2U+IF9fb3BzOwotICAgIH07Ci0KLSAgICBzdGF0aWMg
Y29uc3QgX19tb3ZlX2Z1bmNfdHlwZSBfX21vdmVfb3BzW3NpemVvZi4uLihfSW5kaWNlcyldOwot
ICAgIHN0YXRpYyBjb25zdCBfX2Rlc3Ryb3lfZnVuY190eXBlIF9fZGVzdHJveV9vcHNbc2l6ZW9m
Li4uKF9JbmRpY2VzKV07Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX01hc2tJbmRleCx0eXBl
bmFtZSBfU3RvcmFnZSxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19i
YWNrdXBfc3RvcmFnZV9vcF90YWJsZTwKLSAgICBfTWFza0luZGV4LF9TdG9yYWdlLF9faW5kZXhf
c2VxdWVuY2U8X0luZGljZXMuLi4+ID46Ol9fbW92ZV9mdW5jX3R5cGUKLV9fYmFja3VwX3N0b3Jh
Z2Vfb3BfdGFibGU8Ci0gICAgX01hc2tJbmRleCxfU3RvcmFnZSxfX2luZGV4X3NlcXVlbmNlPF9J
bmRpY2VzLi4uPiA+OjpfX21vdmVfb3BzWwotICAgICAgICBzaXplb2YuLi4oX0luZGljZXMpXT17
Ci0gICAgICAgICZfX2hlbHBlcjxfSW5kaWNlcz46Ol9fb3BzOjpfX21vdmVfY29uc3RydWN0X2Z1
bmMuLi4KLSAgICB9OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX01hc2tJbmRleCx0eXBlbmFtZSBf
U3RvcmFnZSxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19iYWNrdXBf
c3RvcmFnZV9vcF90YWJsZTwKLSAgICBfTWFza0luZGV4LF9TdG9yYWdlLF9faW5kZXhfc2VxdWVu
Y2U8X0luZGljZXMuLi4+ID46Ol9fZGVzdHJveV9mdW5jX3R5cGUKLV9fYmFja3VwX3N0b3JhZ2Vf
b3BfdGFibGU8Ci0gICAgX01hc2tJbmRleCxfU3RvcmFnZSxfX2luZGV4X3NlcXVlbmNlPF9JbmRp
Y2VzLi4uPiA+OjpfX2Rlc3Ryb3lfb3BzWwotICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAg
ICAgICAgJl9faGVscGVyPF9JbmRpY2VzPjo6X19vcHM6Ol9fZGVzdHJveV9mdW5jLi4uCi0gICAg
fTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3Ry
dWN0IF9fYmFja3VwX3N0b3JhZ2V7Ci0gICAgdHlwZWRlZiBfX3ZhcmlhbnRfZGF0YTxfVHlwZXMu
Li4+IF9fc3RvcmFnZV90eXBlOwotCi0gICAgdHlwZWRlZiBfX2JhY2t1cF9zdG9yYWdlX29wX3Rh
YmxlPAotICAgICAgICBfSW5kZXgsX19zdG9yYWdlX3R5cGUsdHlwZW5hbWUgX190eXBlX2luZGlj
ZXM8X1R5cGVzLi4uPjo6X190eXBlPgotICAgIF9fb3BfdGFibGVfdHlwZTsKLQotICAgIHB0cmRp
ZmZfdCBfX2JhY2t1cF9pbmRleDsKLSAgICBfX3N0b3JhZ2VfdHlwZSYgX19saXZlX3N0b3JhZ2U7
Ci0gICAgX19zdG9yYWdlX3R5cGUgX19iYWNrdXA7Ci0KLSAgICBfX2JhY2t1cF9zdG9yYWdlKHB0
cmRpZmZfdCBfX2xpdmVfaW5kZXhfLF9fc3RvcmFnZV90eXBlJiBfX2xpdmVfc3RvcmFnZV8pOgot
ICAgICAgICBfX2JhY2t1cF9pbmRleChfX2xpdmVfaW5kZXhfKSxfX2xpdmVfc3RvcmFnZShfX2xp
dmVfc3RvcmFnZV8pewotICAgICAgICBpZihfX2JhY2t1cF9pbmRleD49MCl7Ci0gICAgICAgICAg
ICBfX29wX3RhYmxlX3R5cGU6Ol9fbW92ZV9vcHNbX19iYWNrdXBfaW5kZXhdKAotICAgICAgICAg
ICAgICAgICZfX2JhY2t1cCxfX2xpdmVfc3RvcmFnZSk7Ci0gICAgICAgICAgICBfX29wX3RhYmxl
X3R5cGU6Ol9fZGVzdHJveV9vcHNbX19iYWNrdXBfaW5kZXhdKAotICAgICAgICAgICAgICAgICZf
X2xpdmVfc3RvcmFnZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgdm9pZCBfX2Rlc3Ryb3koKXsK
LSAgICAgICAgaWYoX19iYWNrdXBfaW5kZXg+PTApCi0gICAgICAgICAgICBfX29wX3RhYmxlX3R5
cGU6Ol9fZGVzdHJveV9vcHNbX19iYWNrdXBfaW5kZXhdKAotICAgICAgICAgICAgICAgICZfX2Jh
Y2t1cCk7Ci0gICAgICAgIF9fYmFja3VwX2luZGV4PS0xOwotICAgIH0KLSAgICAKLSAgICB+X19i
YWNrdXBfc3RvcmFnZSgpewotICAgICAgICBpZihfX2JhY2t1cF9pbmRleD49MCl7Ci0gICAgICAg
ICAgICBfX29wX3RhYmxlX3R5cGU6Ol9fbW92ZV9vcHNbX19iYWNrdXBfaW5kZXhdKAotICAgICAg
ICAgICAgICAgICZfX2xpdmVfc3RvcmFnZSxfX2JhY2t1cCk7Ci0gICAgICAgICAgICBfX2Rlc3Ry
b3koKTsKLSAgICAgICAgfQotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Ci1zdHJ1Y3QgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfbW92ZV9jb25zdHJ1Y3Rp
YmxlPF9IZWFkLF9SZXN0Li4uPgorY29uc3RleHByIGJvb2wgaG9sZHNfYWx0ZXJuYXRpdmUoVmFy
aWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpIF9fTk9FWENFUFQKIHsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgdmFsdWU9c3RkOjppc19tb3ZlX2NvbnN0cnVjdGlibGU8X0hlYWQ+Ojp2YWx1
ZSAmJiBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1Jlc3QuLi4+Ojp2YWx1ZTsKLX07Ci0KLXRl
bXBsYXRlPD4KLXN0cnVjdCBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8PjoKLSAgICBzdGQ6OnRy
dWVfdHlwZXt9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYWxs
X21vdmVfYXNzaWduYWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4u
IF9SZXN0Pgotc3RydWN0IF9fYWxsX21vdmVfYXNzaWduYWJsZTxfSGVhZCxfUmVzdC4uLj4KLXsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9c3RkOjppc19tb3ZlX2Fzc2lnbmFibGU8
X0hlYWQ+Ojp2YWx1ZSAmJiBfX2FsbF9tb3ZlX2Fzc2lnbmFibGU8X1Jlc3QuLi4+Ojp2YWx1ZTsK
LX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBfX2FsbF9tb3ZlX2Fzc2lnbmFibGU8PjoKLSAgICBz
dGQ6OnRydWVfdHlwZXt9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0
IF9fYWxsX2NvcHlfYXNzaWduYWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5h
bWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fYWxsX2NvcHlfYXNzaWduYWJsZTxfSGVhZCxfUmVzdC4u
Lj4KLXsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9c3RkOjppc19jb3B5X2Fzc2ln
bmFibGU8X0hlYWQ+Ojp2YWx1ZSAmJiBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8X1Jlc3QuLi4+Ojp2
YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8PjoK
LSAgICBzdGQ6OnRydWVfdHlwZXt9OwotCi1uYW1lc3BhY2UgX19zd2FwX3Rlc3RfZGV0YWlsewot
dXNpbmcgc3RkOjpzd2FwOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfT3RoZXI+Ci1zdHJ1Y3QgX19z
d2FwX3Jlc3VsdHt9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZT4KLXN0YXRpYyBjaGFyIF9fdGVzdCgu
Li4pOwotdGVtcGxhdGUgPHR5cGVuYW1lIF9PdGhlcj4KLXN0YXRpYyBzdGQ6OnBhaXI8Y2hhciwg
c3RkOjpwYWlyPGNoYXIsIF9fc3dhcF9yZXN1bHQ8ZGVjbHR5cGUoCi0gICAgc3dhcChzdGQ6OmRl
Y2x2YWw8X090aGVyICY+KCksc3RkOjpkZWNsdmFsPF9PdGhlciAmPigpKSk+Pj4KLV9fdGVzdChf
T3RoZXIgKik7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBfVHlwZT4gc3RydWN0IF9faXNfc3dh
cHBhYmxlIHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWUgPQotICAgICAgICBzaXpl
b2YoX19zd2FwX3Rlc3RfZGV0YWlsOjpfX3Rlc3Q8X1R5cGU+KG51bGxwdHIpKSAhPSAxOwotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9zd2FwcGFibGU7
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBf
X2FsbF9zd2FwcGFibGU8X0hlYWQsX1Jlc3QuLi4+Ci17Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIHZhbHVlPV9faXNfc3dhcHBhYmxlPF9IZWFkPjo6dmFsdWUgJiYgX19hbGxfc3dhcHBhYmxl
PF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19hbGxfc3dhcHBh
YmxlPD46Ci0gICAgc3RkOjp0cnVlX3R5cGV7fTsKLQotdGVtcGxhdGU8Ym9vbCBfTW92ZUNvbnN0
cnVjdGlibGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRf
bW92ZV9jb25zdHJ1Y3RfaW1wbHt9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFt
ZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0X2lt
cGw8dHJ1ZSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVl
PW5vZXhjZXB0KF9IZWFkKHN0ZDo6ZGVjbHZhbDxfSGVhZCYmPigpKSkgJiYgX19ub2V4Y2VwdF92
YXJpYW50X21vdmVfY29uc3RydWN0X2ltcGw8dHJ1ZSxfUmVzdC4uLj46OnZhbHVlOwotfTsKLQot
dGVtcGxhdGU8Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2NvbnN0cnVjdF9pbXBs
PHRydWU+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT10cnVlOwotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbW92
ZV9jb25zdHJ1Y3Q6Ci1fX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9jb25zdHJ1Y3RfaW1wbDxfX2Fs
bF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsX1R5cGVzLi4uPgote307Ci0K
LXRlbXBsYXRlPGJvb2wgX01vdmVBc3NpZ25hYmxlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1
Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduX2ltcGx7fTsKLQotdGVtcGxhdGUgPHR5
cGVuYW1lIF9IZWFkLCB0eXBlbmFtZS4uLiBfUmVzdD4KLXN0cnVjdCBfX25vZXhjZXB0X3Zhcmlh
bnRfbW92ZV9hc3NpZ25faW1wbDx0cnVlLCBfSGVhZCwgX1Jlc3QuLi4+IHsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgdmFsdWUgPQotICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9hc3Np
Z25hYmxlPF9IZWFkPjo6dmFsdWUgJiYKLSAgICAgICAgc3RkOjppc19ub3Rocm93X21vdmVfY29u
c3RydWN0aWJsZTxfSGVhZD46OnZhbHVlICYmCi0gICAgICAgIF9fbm9leGNlcHRfdmFyaWFudF9t
b3ZlX2Fzc2lnbl9pbXBsPHRydWUsIF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+
Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduX2ltcGw8dHJ1ZT57Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXRydWU7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Fzc2lnbgotICAg
IDogX19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduX2ltcGw8Ci0gICAgICAgICAgX19hbGxf
bW92ZV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgIF9fYWxs
X21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSwKLSAgICAgICAgICBfVHlwZXMu
Li4+IHt9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYWxsX2Nv
cHlfY29uc3RydWN0aWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4u
IF9SZXN0Pgotc3RydWN0IF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfSGVhZCxfUmVzdC4uLj4K
LXsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9c3RkOjppc19jb3B5X2NvbnN0cnVj
dGlibGU8X0hlYWQ+Ojp2YWx1ZSAmJiBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1Jlc3QuLi4+
Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBfX2FsbF9jb3B5X2NvbnN0cnVjdGli
bGU8PjoKLSAgICBzdGQ6OnRydWVfdHlwZXt9OwotCi10ZW1wbGF0ZTxib29sIF9Db3B5Q29uc3Ry
dWN0aWJsZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9j
b25zdF9jb3B5X2NvbnN0cnVjdF9pbXBse307Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5
cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29weV9j
b25zdHJ1Y3RfaW1wbDx0cnVlLF9IZWFkLF9SZXN0Li4uPnsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgdmFsdWU9bm9leGNlcHQoX0hlYWQoc3RkOjpkZWNsdmFsPF9IZWFkIGNvbnN0Jj4oKSkp
ICYmIF9fbm9leGNlcHRfdmFyaWFudF9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBsPHRydWUsX1Jl
c3QuLi4+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBfX25vZXhjZXB0X3Zhcmlh
bnRfY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDx0cnVlPnsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgdmFsdWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1z
dHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X2NvbnN0X2NvcHlfY29uc3RydWN0OgotX19ub2V4Y2Vw
dF92YXJpYW50X2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8X19hbGxfY29weV9jb25zdHJ1Y3Rp
YmxlPF9UeXBlcy4uLj46OnZhbHVlLF9UeXBlcy4uLj4KLXt9OwotCi10ZW1wbGF0ZTxib29sIF9D
b3B5Tm9uX0NvbnN0cnVjdGlibGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhj
ZXB0X3ZhcmlhbnRfbm9uX2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGx7fTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fbm9leGNlcHRfdmFy
aWFudF9ub25fY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDx0cnVlLF9IZWFkLF9SZXN0Li4uPnsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9bm9leGNlcHQoX0hlYWQoc3RkOjpkZWNs
dmFsPF9IZWFkJj4oKSkpICYmIF9fbm9leGNlcHRfdmFyaWFudF9ub25fY29uc3RfY29weV9jb25z
dHJ1Y3RfaW1wbDx0cnVlLF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1
Y3QgX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBsPHRydWU+
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT10cnVlOwotfTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbm9uX2NvbnN0
X2NvcHlfY29uc3RydWN0OgotX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0
cnVjdF9pbXBsPF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxfVHlw
ZXMuLi4+Ci17fTsKLQotdGVtcGxhdGU8Ym9vbCBfU3dhcHBhYmxlLHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X3N3YXBfaW1wbHt9OwotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgX0hlYWQsIHR5cGVuYW1lLi4uIF9SZXN0Pgotc3RydWN0IF9fbm9leGNlcHRfdmFy
aWFudF9zd2FwX2ltcGw8dHJ1ZSwgX0hlYWQsIF9SZXN0Li4uPiB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIHZhbHVlID0KLSAgICAgICAgbm9leGNlcHQoc3dhcChzdGQ6OmRlY2x2YWw8X0hl
YWQmPigpLHN0ZDo6ZGVjbHZhbDxfSGVhZCY+KCkpKSAmJgotICAgICAgICBfX25vZXhjZXB0X3Zh
cmlhbnRfc3dhcF9pbXBsPHRydWUsIF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+
Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X3N3YXBfaW1wbDx0cnVlPnsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgdmFsdWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBf
VHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X3N3YXA6Ci1fX25vZXhjZXB0X3Zhcmlh
bnRfc3dhcF9pbXBsPF9fYWxsX3N3YXBwYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxfVHlwZXMuLi4+
Ci17fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNsYXNzIFZhcmlhbnQ6Ci0g
ICAgICAgIHByaXZhdGUgX192YXJpYW50X2Jhc2U8Ci0gICAgVmFyaWFudDxfVHlwZXMuLi4+LF9f
YWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X1R5cGVzLi4uPjo6X192YWx1ZT4KLXsKLSAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICB0eXBlZGVmIF9fdmFyaWFudF9iYXNlPFZhcmlh
bnQ8X1R5cGVzLi4uPixfX2FsbF90cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPF9UeXBlcy4uLj46Ol9f
dmFsdWU+IF9fYmFzZV90eXBlOwotICAgIGZyaWVuZCBfX2Jhc2VfdHlwZTsKLSAgICBmcmllbmQg
c3RydWN0IF9fY29weV9jb25zdHJ1Y3Rfb3BfdGFibGU8VmFyaWFudD47Ci0gICAgZnJpZW5kIHN0
cnVjdCBfX2NvcHlfYXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+OwotICAgIGZyaWVuZCBzdHJ1Y3Qg
X19tb3ZlX2NvbnN0cnVjdF9vcF90YWJsZTxWYXJpYW50PjsKLSAgICBmcmllbmQgc3RydWN0IF9f
bW92ZV9hc3NpZ25fb3BfdGFibGU8VmFyaWFudD47Ci0gICAgZnJpZW5kIHN0cnVjdCBfX2Rlc3Ry
b3lfb3BfdGFibGU8VmFyaWFudD47Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRl
eCx0eXBlbmFtZSAuLi4gX1R5cGVzMj4KLSAgICBmcmllbmQgc3RydWN0IF9fdmFyaWFudF9hY2Nl
c3NvcjsKLQotICAgIGZyaWVuZCBzdHJ1Y3QgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI7Ci0K
LSAgICB0eXBlZGVmIF9fdmFyaWFudF9kYXRhPF9UeXBlcy4uLj4gX19zdG9yYWdlX3R5cGU7Ci0g
ICAgX19zdG9yYWdlX3R5cGUgX19zdG9yYWdlOwotICAgIHR5cGVuYW1lIF9fZGlzY3JpbWluYXRv
cl90eXBlPHNpemVvZiAuLi4gKF9UeXBlcyk+OjpfX3R5cGUgX19pbmRleDsKLQotICAgIHRlbXBs
YXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHNpemVfdCBfX2VtcGxh
Y2VfY29uc3RydWN0KF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIG5ldygmX19zdG9yYWdl
KSBfX3N0b3JhZ2VfdHlwZSgKLSAgICAgICAgICAgIGluX3BsYWNlPF9JbmRleD4sc3RkOjpmb3J3
YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICAgICAgcmV0dXJuICBfSW5kZXg7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgX19kZXN0cm95X3NlbGYoKXsKLSAgICAgICAgaWYodmFsdWVsZXNzX2J5
X2V4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBfX2Rlc3Ryb3lfb3Bf
dGFibGU8VmFyaWFudD46Ol9fYXBwbHlbaW5kZXgoKV0odGhpcyk7Ci0gICAgICAgIF9faW5kZXg9
LTE7Ci0gICAgfQotICAgIAotICAgIHB0cmRpZmZfdCBfX21vdmVfY29uc3RydWN0KFZhcmlhbnQm
IF9fb3RoZXIpewotICAgICAgICBwdHJkaWZmX3QgY29uc3QgX19vdGhlcl9pbmRleD1fX290aGVy
LmluZGV4KCk7Ci0gICAgICAgIGlmKF9fb3RoZXJfaW5kZXg9PS0xKQotICAgICAgICAgICAgcmV0
dXJuIC0xOwotICAgICAgICBfX21vdmVfY29uc3RydWN0X29wX3RhYmxlPFZhcmlhbnQ+OjpfX2Fw
cGx5W19fb3RoZXJfaW5kZXhdKHRoaXMsX19vdGhlcik7Ci0gICAgICAgIF9fb3RoZXIuX19kZXN0
cm95X3NlbGYoKTsKLSAgICAgICAgcmV0dXJuIF9fb3RoZXJfaW5kZXg7Ci0gICAgfQotCi0gICAg
cHRyZGlmZl90IF9fY29weV9jb25zdHJ1Y3QoVmFyaWFudCBjb25zdCYgX19vdGhlcil7Ci0gICAg
ICAgIHB0cmRpZmZfdCBjb25zdCBfX290aGVyX2luZGV4PV9fb3RoZXIuaW5kZXgoKTsKLSAgICAg
ICAgaWYoX19vdGhlcl9pbmRleD09LTEpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAg
IF9fY29weV9jb25zdHJ1Y3Rfb3BfdGFibGU8VmFyaWFudD46Ol9fYXBwbHlbX19vdGhlcl9pbmRl
eF0odGhpcyxfX290aGVyKTsKLSAgICAgICAgcmV0dXJuIF9fb3RoZXJfaW5kZXg7Ci0gICAgfQot
Ci0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgdm9p
ZCBfX3JlcGxhY2VfY29uc3RydWN0KF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBfX3Ro
aXNfdHlwZTsKLSAgICAgICAgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9faGVscGVyPAot
ICAgICAgICAgICAgX0luZGV4LAotICAgICAgICAgICAgX19zdG9yYWdlX25vdGhyb3dfY29uc3Ry
dWN0aWJsZTxfX3RoaXNfdHlwZSxfQXJncy4uLj46Ol9fdmFsdWUgfHwKLSAgICAgICAgICAgIChz
aXplb2YuLi4oX1R5cGVzKT09MSksCi0gICAgICAgICAgICBfX3N0b3JhZ2Vfbm90aHJvd19tb3Zl
X2NvbnN0cnVjdGlibGU8X190aGlzX3R5cGU+OjpfX3ZhbHVlLAotICAgICAgICAgICAgX19vdGhl
cl9zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPAotICAgICAgICAgICAgICAgIF9J
bmRleCxfVHlwZXMuLi4+OjpfX3ZhbHVlCi0gICAgICAgICAgICA+OjpfX3RyYW1wb2xpbmUoKnRo
aXMsc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0
ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICB2b2lkIF9fdHdvX3N0YWdl
X3JlcGxhY2UoX0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
X2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIF9fdHlwZTsKLSAgICAgICAg
X192YXJpYW50X2RhdGE8X190eXBlPiBfX2xvY2FsKAotICAgICAgICAgICAgaW5fcGxhY2U8MD4s
c3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICAgICAgX19kZXN0cm95X3NlbGYo
KTsKLSAgICAgICAgX19lbXBsYWNlX2NvbnN0cnVjdDxfSW5kZXg+KAotICAgICAgICAgICAgc3Rk
Ojptb3ZlKF9fbG9jYWwuX19nZXQoaW5fcGxhY2U8MD4pKSk7Ci0gICAgICAgIF9faW5kZXg9X0lu
ZGV4OwotICAgICAgICBfX2xvY2FsLl9fZGVzdHJveShpbl9wbGFjZTwwPik7Ci0gICAgfQotCi0g
ICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgdm9pZCBf
X2xvY2FsX2JhY2t1cF9yZXBsYWNlKF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIF9fYmFj
a3VwX3N0b3JhZ2U8X0luZGV4LF9UeXBlcy4uLj4gX19iYWNrdXAoX19pbmRleCxfX3N0b3JhZ2Up
OwotICAgICAgICBfX2VtcGxhY2VfY29uc3RydWN0PF9JbmRleD4oc3RkOjpmb3J3YXJkPF9Bcmdz
PihfX2FyZ3MpLi4uKTsKLSAgICAgICAgX19pbmRleD1fSW5kZXg7Ci0gICAgICAgIF9fYmFja3Vw
Ll9fZGVzdHJveSgpOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5
cGVuYW1lIC4uLiBfQXJncz4KLSAgICB2b2lkIF9fZGlyZWN0X3JlcGxhY2UoX0FyZ3MmJiAuLi4g
X19hcmdzKSB7Ci0gICAgICAgIF9fZGVzdHJveV9zZWxmKCk7Ci0gICAgICAgIF9fZW1wbGFjZV9j
b25zdHJ1Y3Q8X0luZGV4PihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgICAg
ICBfX2luZGV4PV9JbmRleDsKLSAgICB9Ci0KLSAgICBzdHJ1Y3QgX19wcml2YXRlX3R5cGV7fTsK
LQotcHVibGljOgotICAgIGNvbnN0ZXhwciBWYXJpYW50KCkKLSAgICAgICAgX19OT0VYQ0VQVF8o
bm9leGNlcHQodHlwZW5hbWUgX19pbmRleGVkX3R5cGU8MCxfVHlwZXMuLi4+OjpfX3R5cGUoKSkp
OgotICAgICAgICBfX3N0b3JhZ2UoaW5fcGxhY2U8MD4pLAotICAgICAgICBfX2luZGV4KDApCi0g
ICAge30KLQotICAgIGNvbnN0ZXhwciBWYXJpYW50KHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8
X19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLFZhcmlhbnQsX19wcml2
YXRlX3R5cGU+Ojp0eXBlJiYgX19vdGhlcikKLSAgICBfX05PRVhDRVBUXyhfX25vZXhjZXB0X3Zh
cmlhbnRfbW92ZV9jb25zdHJ1Y3Q8X1R5cGVzLi4uPjo6dmFsdWUpOgotICAgICAgICBfX2luZGV4
KF9fbW92ZV9jb25zdHJ1Y3QoX19vdGhlcikpCi0gICAge30KLQotICAgIGNvbnN0ZXhwciBWYXJp
YW50KHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8IV9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxf
VHlwZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSYmIF9fb3RoZXIp
PWRlbGV0ZTsKLSAgICAKLSAgICBjb25zdGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRp
dGlvbmFsPF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxWYXJpYW50
LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSYgX19vdGhlcikKLSAgICBfX05PRVhDRVBUXyhfX25vZXhj
ZXB0X3ZhcmlhbnRfbm9uX2NvbnN0X2NvcHlfY29uc3RydWN0PF9UeXBlcy4uLj46OnZhbHVlKToK
LSAgICAgICAgX19pbmRleChfX2NvcHlfY29uc3RydWN0KF9fb3RoZXIpKQotICAgIHt9Ci0KLSAg
ICBjb25zdGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPCFfX2FsbF9jb3B5
X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsVmFyaWFudCxfX3ByaXZhdGVfdHlwZT46
OnR5cGUmIF9fb3RoZXIpPWRlbGV0ZTsKLQotICAgIGNvbnN0ZXhwciBWYXJpYW50KHR5cGVuYW1l
IHN0ZDo6Y29uZGl0aW9uYWw8X19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZh
bHVlLFZhcmlhbnQsX19wcml2YXRlX3R5cGU+Ojp0eXBlIGNvbnN0JiBfX290aGVyKQotICAgIF9f
Tk9FWENFUFRfKF9fbm9leGNlcHRfdmFyaWFudF9jb25zdF9jb3B5X2NvbnN0cnVjdDxfVHlwZXMu
Li4+Ojp2YWx1ZSk6Ci0gICAgICAgIF9faW5kZXgoX19jb3B5X2NvbnN0cnVjdChfX290aGVyKSkK
LSAgICB7fQotCi0gICAgY29uc3RleHByIFZhcmlhbnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25h
bDwhX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLFZhcmlhbnQsX19w
cml2YXRlX3R5cGU+Ojp0eXBlIGNvbnN0JiBfX290aGVyKT1kZWxldGU7Ci0gICAgCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIGV4cGxpY2l0IGNv
bnN0ZXhwciBWYXJpYW50KGluX3BsYWNlX3R5cGVfdDxfVHlwZT4sX0FyZ3MmJiAuLi4gX19hcmdz
KToKLSAgICAgICAgX19zdG9yYWdlKAotICAgICAgICAgICAgaW5fcGxhY2U8X190eXBlX2luZGV4
PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU+LAotICAgICAgICAgICAgc3RkOjpmb3J3YXJkPF9B
cmdzPihfX2FyZ3MpLi4uKSwKLSAgICAgICAgX19pbmRleChfX3R5cGVfaW5kZXg8X1R5cGUsX1R5
cGVzLi4uPjo6X192YWx1ZSkKLSAgICB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19j
b25zdHJ1Y3RpYmxlPF9UeXBlLF9BcmdzLi4uPjo6dmFsdWUsIlR5cGUgbXVzdCBiZSBjb25zdHJ1
Y3RpYmxlIGZyb20gYXJncyIpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXgs
dHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIGV4cGxpY2l0IGNvbnN0ZXhwciBWYXJpYW50KGluX3Bs
YWNlX2luZGV4X3Q8X0luZGV4PixfQXJncyYmIC4uLiBfX2FyZ3MpOgotICAgICAgICBfX3N0b3Jh
Z2UoaW5fcGxhY2U8X0luZGV4PixzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pLAotICAg
ICAgICBfX2luZGV4KF9JbmRleCkKLSAgICB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19jb25zdHJ1Y3RpYmxlPHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+
OjpfX3R5cGUsX0FyZ3MuLi4+Ojp2YWx1ZSwiVHlwZSBtdXN0IGJlIGNvbnN0cnVjdGlibGUgZnJv
bSBhcmdzIik7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotICAg
IGNvbnN0ZXhwciBWYXJpYW50KF9UeXBlJiYgX194KToKLSAgICAgICAgX19zdG9yYWdlKAotICAg
ICAgICAgICAgaW5fcGxhY2U8Ci0gICAgICAgICAgICBfX3R5cGVfaW5kZXhfdG9fY29uc3RydWN0
PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU+LAotICAgICAgICAgICAgc3RkOjpmb3J3YXJkPF9U
eXBlPihfX3gpKSwKLSAgICAgICAgX19pbmRleChfX3R5cGVfaW5kZXhfdG9fY29uc3RydWN0PF9U
eXBlLF9UeXBlcy4uLj46Ol9fdmFsdWUpCi0gICAge30KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IF9UeXBlLAotICAgICAgICAgICAgIHR5cGVuYW1lIF9FbmFibGU9Ci0gICAgICAgICAgICAgdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8Ci0gICAgICAgICAgICAgICAgIChfX2NvbnN0cnVjdGlibGVf
bWF0Y2hlczxzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X1R5cGU+LF9UeXBlcy4uLj46Ol9fdHlwZTo6
X19sZW5ndGg+MCkKLSAgICAgICAgICAgICA+Ojp0eXBlPgotICAgIGNvbnN0ZXhwciBWYXJpYW50
KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfVHlwZT4gX194KToKLSAgICAgICAgX19zdG9yYWdlKAot
ICAgICAgICAgICAgaW5fcGxhY2U8Ci0gICAgICAgICAgICBfX3R5cGVfaW5kZXhfdG9fY29uc3Ry
dWN0PHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfVHlwZT4sX1R5cGVzLi4uPjo6X192YWx1ZT4sCi0g
ICAgICAgICAgICBfX3gpLAotICAgICAgICBfX2luZGV4KF9fdHlwZV9pbmRleF90b19jb25zdHJ1
Y3Q8c3RkOjppbml0aWFsaXplcl9saXN0PF9UeXBlPixfVHlwZXMuLi4+OjpfX3ZhbHVlKQotICAg
IHt9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci0gICAgVmFyaWFudCYgb3Bl
cmF0b3I9KF9UeXBlJiYgX194KXsKLSAgICAgICAgY29uc3RleHByIHNpemVfdCBfSW5kZXg9Ci0g
ICAgICAgICAgICBfX3R5cGVfaW5kZXhfdG9fY29uc3RydWN0PF9UeXBlLF9UeXBlcy4uLj46Ol9f
dmFsdWU7Ci0gICAgICAgIGlmKF9JbmRleD09X19pbmRleCl7Ci0gICAgICAgICAgICBnZXQ8X0lu
ZGV4PigqdGhpcyk9c3RkOjpmb3J3YXJkPF9UeXBlPihfX3gpOwotICAgICAgICB9Ci0gICAgICAg
IGVsc2V7Ci0gICAgICAgICAgICBfX3JlcGxhY2VfY29uc3RydWN0PF9JbmRleD4oc3RkOjpmb3J3
YXJkPF9UeXBlPihfX3gpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAg
fQotCi0gICAgVmFyaWFudCAmb3BlcmF0b3I9KAotICAgICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRp
dGlvbmFsPAotICAgICAgICAgICAgIShfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4u
Pjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBl
cy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgIF9fYWxsX2NvcHlfYXNzaWduYWJsZTxfVHlw
ZXMuLi4+Ojp2YWx1ZSksCi0gICAgICAgICAgICBWYXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5
cGUgY29uc3QgJl9fb3RoZXIpID0gZGVsZXRlOwotCi0gICAgVmFyaWFudCAmb3BlcmF0b3I9KAot
ICAgICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAotICAgICAgICAgICAgX19hbGxfY29w
eV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgICAgX19h
bGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAg
ICAgX19hbGxfY29weV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgICAg
VmFyaWFudCwgX19wcml2YXRlX3R5cGU+Ojp0eXBlIGNvbnN0ICZfX290aGVyKSB7Ci0gICAgICAg
IGlmIChfX290aGVyLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgewotICAgICAgICAgICAgX19k
ZXN0cm95X3NlbGYoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKF9fb3RoZXIuaW5kZXgo
KT09aW5kZXgoKSl7Ci0gICAgICAgICAgICBfX2NvcHlfYXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+
OjpfX2FwcGx5W2luZGV4KCldKHRoaXMsX19vdGhlcik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZXsKLSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPFZh
cmlhbnQ+OjpfX2NvcHlfYXNzaWduWwotICAgICAgICAgICAgICAgIF9fb3RoZXIuaW5kZXgoKV0o
dGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQot
ICAgIFZhcmlhbnQgJm9wZXJhdG9yPSgKLSAgICAgICAgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25h
bDwKLSAgICAgICAgICAgICEoX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZh
bHVlICYmCi0gICAgICAgICAgICAgIF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+
Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8X1R5cGVzLi4u
Pjo6dmFsdWUpLAotICAgICAgICAgICAgVmFyaWFudCwgX19wcml2YXRlX3R5cGU+Ojp0eXBlICZf
X290aGVyKSA9IGRlbGV0ZTsKLQotICAgIFZhcmlhbnQgJm9wZXJhdG9yPSgKLSAgICAgICAgdHlw
ZW5hbWUgc3RkOjpjb25kaXRpb25hbDwKLSAgICAgICAgICAgIF9fYWxsX2NvcHlfY29uc3RydWN0
aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICAgIF9fYWxsX21vdmVfY29u
c3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICAgIF9fYWxsX2Nv
cHlfYXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSwKLSAgICAgICAgICAgIFZhcmlhbnQsIF9f
cHJpdmF0ZV90eXBlPjo6dHlwZSAmX19vdGhlcikgewotICAgICAgICBpZihfX290aGVyLnZhbHVl
bGVzc19ieV9leGNlcHRpb24oKSl7Ci0gICAgICAgICAgICBfX2Rlc3Ryb3lfc2VsZigpOwotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgaWYoX19vdGhlci5pbmRleCgpPT1pbmRleCgpKXsKLSAgICAg
ICAgICAgIF9fY29weV9hc3NpZ25fb3BfdGFibGU8VmFyaWFudD46Ol9fYXBwbHlbaW5kZXgoKV0o
dGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlewotICAgICAgICAgICAgX19y
ZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8VmFyaWFudD46Ol9fY29weV9hc3Np
Z25bCi0gICAgICAgICAgICAgICAgX19vdGhlci5pbmRleCgpXSh0aGlzLF9fb3RoZXIpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgVmFyaWFudCAmb3BlcmF0
b3I9KAotICAgICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAotICAgICAgICAgICAgIShf
X2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAg
ICAgX19hbGxfbW92ZV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlKSwKLSAgICAgICAgICAg
IFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZSAmJl9fb3RoZXIpID0gZGVsZXRlOwotCi0g
ICAgVmFyaWFudCAmb3BlcmF0b3I9KAotICAgICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFs
PF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2Fzc2lnbmFibGU8X1R5cGVz
Li4uPjo6dmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFudCwg
X19wcml2YXRlX3R5cGU+Ojp0eXBlICYmCi0gICAgICAgICAgICBfX290aGVyKSBfX05PRVhDRVBU
XyhfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9hc3NpZ248X1R5cGVzLi4uPjo6dmFsdWUpIHsKLSAg
ICAgICAgaWYgKF9fb3RoZXIudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAg
ICBfX2Rlc3Ryb3lfc2VsZigpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoX19vdGhlci5p
bmRleCgpPT1pbmRleCgpKXsKLSAgICAgICAgICAgIF9fbW92ZV9hc3NpZ25fb3BfdGFibGU8VmFy
aWFudD46Ol9fYXBwbHlbaW5kZXgoKV0odGhpcyxfX290aGVyKTsKLSAgICAgICAgICAgIF9fb3Ro
ZXIuX19kZXN0cm95X3NlbGYoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlewotICAgICAgICAg
ICAgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8VmFyaWFudD46Ol9fbW92
ZV9hc3NpZ25bCi0gICAgICAgICAgICAgICAgX19vdGhlci5pbmRleCgpXSh0aGlzLF9fb3RoZXIp
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgdm9pZCBlbXBsYWNlKF9B
cmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIF9fZGlyZWN0X3JlcGxhY2U8X190eXBlX2luZGV4
PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU+KAotICAgICAgICAgICAgc3RkOjpmb3J3YXJkPF9B
cmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRl
eCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgdm9pZCBlbXBsYWNlKF9BcmdzJiYgLi4uIF9fYXJn
cyl7Ci0gICAgICAgIF9fZGlyZWN0X3JlcGxhY2U8X0luZGV4PihzdGQ6OmZvcndhcmQ8X0FyZ3M+
KF9fYXJncykuLi4pOwotICAgIH0KLSAgICAKLSAgICBjb25zdGV4cHIgYm9vbCB2YWx1ZWxlc3Nf
YnlfZXhjZXB0aW9uKCkgY29uc3QgX19OT0VYQ0VQVHsKLSAgICAgICAgcmV0dXJuIF9faW5kZXg9
PS0xOwotICAgIH0KLSAgICBjb25zdGV4cHIgcHRyZGlmZl90IGluZGV4KCkgY29uc3QgX19OT0VY
Q0VQVHsKLSAgICAgICAgcmV0dXJuIF9faW5kZXg7Ci0gICAgfQotCi0gICAgdm9pZCBzd2FwKAot
ICAgICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAotICAgICAgICAgICAgX19hbGxfc3dh
cHBhYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgICAgX19hbGxfbW92ZV9j
b25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgICAgVmFyaWFudCwgX19w
cml2YXRlX3R5cGU+Ojp0eXBlCi0gICAgICAgICAgICAmX19vdGhlcikgX19OT0VYQ0VQVF8oX19u
b2V4Y2VwdF92YXJpYW50X3N3YXA8X1R5cGVzLi4uPjo6dmFsdWUpIHsKLSAgICAgICAgaWYgKF9f
b3RoZXIuaW5kZXgoKSA9PSBpbmRleCgpKSB7Ci0gICAgICAgICAgICBpZighdmFsdWVsZXNzX2J5
X2V4Y2VwdGlvbigpKQotICAgICAgICAgICAgICAgIF9fc3dhcF9vcF90YWJsZTxWYXJpYW50Pjo6
X19hcHBseVtpbmRleCgpXSgqdGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICBlbHNl
ewotICAgICAgICAgICAgVmFyaWFudCBfX3RlbXAoc3RkOjptb3ZlKF9fb3RoZXIpKTsKLSAgICAg
ICAgICAgIF9fb3RoZXIuX19pbmRleD1fX290aGVyLl9fbW92ZV9jb25zdHJ1Y3QoKnRoaXMpOwot
ICAgICAgICAgICAgX19pbmRleD1fX21vdmVfY29uc3RydWN0KF9fdGVtcCk7Ci0gICAgICAgIH0K
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+Ci1jbGFzcyBWYXJpYW50PD57Ci1wdWJsaWM6Ci0gICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgVmFyaWFudCgpPWRlbGV0ZTsKLSAgICAKLSAg
ICBjb25zdGV4cHIgYm9vbCB2YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgY29uc3QgX19OT0VYQ0VQ
VHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBwdHJkaWZmX3Qg
aW5kZXgoKSBjb25zdCBfX05PRVhDRVBUewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0g
ICAgdm9pZCBzd2FwKFZhcmlhbnQmKXt9Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gX1R5
cGVzPgotdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8X19hbGxfc3dhcHBhYmxlPF9UeXBlcy4uLj46
OnZhbHVlICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1
Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgdm9pZD46
OnR5cGUKLXN3YXAoVmFyaWFudDxfVHlwZXMuLi4+ICZfX2xocywgVmFyaWFudDxfVHlwZXMuLi4+
ICZfX3JocykgX19OT0VYQ0VQVF8oCi0gICAgX19ub2V4Y2VwdF92YXJpYW50X3N3YXA8X1R5cGVz
Li4uPjo6dmFsdWUpIHsKLSAgICBfX2xocy5zd2FwKF9fcmhzKTsKLX0KLQotdGVtcGxhdGU8cHRy
ZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdmFyaWFudF9hY2Nl
c3NvcnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMu
Li4+OjpfX3R5cGUgX190eXBlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgX190eXBlJiBnZXQoVmFy
aWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAgICAgICByZXR1cm4gX192Ll9fc3RvcmFnZS5fX2dl
dChpbl9wbGFjZTxfSW5kZXg+KTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfX3R5cGUg
Y29uc3QmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdil7Ci0gICAgICAgIHJldHVy
biBfX3YuX19zdG9yYWdlLl9fZ2V0KGluX3BsYWNlPF9JbmRleD4pOwotICAgIH0KLSAgICBzdGF0
aWMgY29uc3RleHByIF9fdHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mJiBfX3YpewotICAg
ICAgICByZXR1cm4gX192Ll9fc3RvcmFnZS5fX2dldF9ycmVmKGluX3BsYWNlPF9JbmRleD4pOwot
ICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IF9fdHlwZSYmIGdldChWYXJpYW50PF9U
eXBlcy4uLj4gY29uc3QmJiBfX3YpewotICAgICAgICByZXR1cm4gX192Ll9fc3RvcmFnZS5fX2dl
dF9ycmVmKGluX3BsYWNlPF9JbmRleD4pOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgX1R5cGUmIGdldChWYXJpYW50
PF9UeXBlcy4uLj4mIF9fdil7Ci0gICAgcmV0dXJuIGdldDxfX3R5cGVfaW5kZXg8X1R5cGUsX1R5
cGVzLi4uPjo6X192YWx1ZT4oX192KTsKKyAgICByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2
ZTxfVHlwZT4oX192KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4u
IF9UeXBlcz4KLWNvbnN0ZXhwciBfVHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mJiBfX3Yp
ewotICAgIHJldHVybiBnZXQ8X190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU+
KHN0ZDo6bW92ZShfX3YpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUg
Li4uIF9UeXBlcz4KLWNvbnN0ZXhwciBfVHlwZSBjb25zdCYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4u
PiBjb25zdCYgX192KXsKLSAgICByZXR1cm4gZ2V0PF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMu
Li4+OjpfX3ZhbHVlPihfX3YpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFt
ZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGNvbnN0IF9UeXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVz
Li4uPiBjb25zdCYmIF9fdil7Ci0gICAgcmV0dXJuIGdldDxfX3R5cGVfaW5kZXg8X1R5cGUsX1R5
cGVzLi4uPjo6X192YWx1ZT4oc3RkOjptb3ZlKF9fdikpOwotfQotCi0KLXRlbXBsYXRlPHB0cmRp
ZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2lu
ZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0JiBnZXQoVmFyaWFudDxf
VHlwZXMuLi4+IGNvbnN0JiBfX3YpewotICAgIHJldHVybiAqKAotICAgICAgICAoX0luZGV4IT1f
X3YuaW5kZXgoKSkKLSAgICAgICAgICAgID8gc3RkOjphZGRyZXNzb2YoX190aHJvd19iYWRfdmFy
aWFudF9hY2Nlc3M8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9f
dHlwZSBjb25zdCY+KCJCYWQgVmFyaWFudCBpbmRleCBpbiBnZXQiKSkKLSAgICAgICAgICAgIDog
c3RkOjphZGRyZXNzb2YoX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQo
X192KSkKLSAgICApOwotfQotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4u
LiBfVHlwZXM+Ci1jb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBl
cy4uLj46Ol9fdHlwZSYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYgX192KXsKLSAgICByZXR1cm4g
KigKLSAgICAgICAgKF9JbmRleCE9X192LmluZGV4KCkpCi0gICAgICAgICAgICA/IHN0ZDo6YWRk
cmVzc29mKF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPHR5cGVuYW1lIF9faW5kZXhlZF90eXBl
PF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmPigiQmFkIFZhcmlhbnQgaW5kZXggaW4gZ2V0Iikp
Ci0gICAgICAgICAgICA6IHN0ZDo6YWRkcmVzc29mKF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgs
X1R5cGVzLi4uPjo6Z2V0KF9fdikpCi0gICAgKTsKLX0KLQotdGVtcGxhdGU8cHRyZGlmZl90IF9J
bmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHR5cGVuYW1lIF9faW5kZXhlZF90
eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+JiYg
X192KXsKLSAgICByZXR1cm4gX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+Ojpn
ZXQoCi0gICAgICAgICgoKF9JbmRleCE9X192LmluZGV4KCkpID8gX190aHJvd19iYWRfdmFyaWFu
dF9hY2Nlc3M8aW50PigiQmFkIFZhcmlhbnQgaW5kZXggaW4gZ2V0IikgOiAwKSwgc3RkOjptb3Zl
KF9fdikpCi0gICAgKTsKLX0KLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAu
Li4gX1R5cGVzPgotY29uc3RleHByIGNvbnN0IHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRl
eCxfVHlwZXMuLi4+OjpfX3R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiYgX192
KXsKLSAgICByZXR1cm4gX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQo
Ci0gICAgICAgICgoKF9JbmRleCE9X192LmluZGV4KCkpID8gX190aHJvd19iYWRfdmFyaWFudF9h
Y2Nlc3M8aW50PigiQmFkIFZhcmlhbnQgaW5kZXggaW4gZ2V0IikgOiAwKSwgc3RkOjptb3ZlKF9f
dikpCi0gICAgKTsKK2NvbnN0ZXhwciBfVHlwZSYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYgX192
KQoreworICAgIHJldHVybiBzdGQ6OmdldDxfVHlwZT4oX192KTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9wb2lu
dGVyX3Q8X1R5cGU+IGdldF9pZihWYXJpYW50PF9UeXBlcy4uLj4mIF9fdil7Ci0gICAgcmV0dXJu
IChfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZSE9X192LmluZGV4KCkpP251
bGxwdHI6c3RkOjphZGRyZXNzb2YoZ2V0PF9UeXBlPihfX3YpKTsKK2NvbnN0ZXhwciBfVHlwZSYm
IGdldChWYXJpYW50PF9UeXBlcy4uLj4mJiBfX3YpCit7CisgICAgcmV0dXJuIHN0ZDo6Z2V0PF9U
eXBlPihXVEZNb3ZlKF9fdikpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFt
ZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDxfVHlwZSBjb25zdD4g
Z2V0X2lmKFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX192KXsKLSAgICByZXR1cm4gKF9fdHlw
ZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlIT1fX3YuaW5kZXgoKSk/bnVsbHB0cjpz
dGQ6OmFkZHJlc3NvZihnZXQ8X1R5cGU+KF9fdikpOwotfQotCi10ZW1wbGF0ZTxwdHJkaWZmX3Qg
X0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90
PHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGU+IGdldF9p
ZihWYXJpYW50PF9UeXBlcy4uLj4mIF9fdil7Ci0gICAgcmV0dXJuICgoX0luZGV4IT1fX3YuaW5k
ZXgoKSk/bnVsbHB0cjoKLSAgICAgICAgc3RkOjphZGRyZXNzb2YoX192YXJpYW50X2FjY2Vzc29y
PF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoX192KSkpOwotfQotCi10ZW1wbGF0ZTxwdHJkaWZmX3Qg
X0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90
PHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3Q+
IGdldF9pZigKLSAgICBWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdil7Ci0gICAgcmV0dXJu
ICgoX0luZGV4IT1fX3YuaW5kZXgoKSk/bnVsbHB0cjoKLSAgICAgICAgc3RkOjphZGRyZXNzb2Yo
X192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoX192KSkpOworY29uc3Rl
eHByIF9UeXBlIGNvbnN0JiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpCit7Cisg
ICAgcmV0dXJuIHN0ZDo6Z2V0PF9UeXBlPihfX3YpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGJvb2wgaG9sZHNfYWx0ZXJuYXRp
dmUoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpIF9fTk9FWENFUFR7Ci0gICAgcmV0dXJu
IF9fdi5pbmRleCgpPT1fX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVj
dCBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yPgot
c3RydWN0IF9fdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcj57Ci0gICAgdHlwZWRlZiBkZWNs
dHlwZShzdGQ6OmRlY2x2YWw8X1Zpc2l0b3ImPigpKCkpIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0
cnVjdCBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX0hlYWQsX1Jlc3QuLi4+ewotICAg
IHR5cGVkZWYgZGVjbHR5cGUoc3RkOjpkZWNsdmFsPF9WaXNpdG9yJj4oKShzdGQ6OmRlY2x2YWw8
X0hlYWQmPigpKSkgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlw
ZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3Zpc2l0b3JfdGFibGV7Ci0gICAgdHlwZWRlZiBW
YXJpYW50PF9UeXBlcy4uLj4gX192YXJpYW50X3R5cGU7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBf
X3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190eXBlIF9fcmV0dXJu
X3R5cGU7Ci0gICAgdHlwZWRlZiBfX3JldHVybl90eXBlICgqX19mdW5jX3R5cGUpKF9WaXNpdG9y
JixfX3ZhcmlhbnRfdHlwZSYpOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci0gICAg
c3RhdGljIF9fcmV0dXJuX3R5cGUgX190cmFtcG9saW5lX2Z1bmMoX1Zpc2l0b3ImIF9fdmlzaXRv
cixfX3ZhcmlhbnRfdHlwZSYgX192KXsKLSAgICAgICAgcmV0dXJuIF9fdmlzaXRvcihnZXQ8X1R5
cGU+KF9fdikpOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlwZSBfX3RyYW1w
b2xpbmVbc2l6ZW9mLi4uKF9UeXBlcyldOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0
b3IsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0IHR5cGVuYW1lIF9fdmlzaXRvcl90YWJsZTxf
VmlzaXRvcixfVHlwZXMuLi4+OjpfX2Z1bmNfdHlwZSBfX3Zpc2l0b3JfdGFibGU8X1Zpc2l0b3Is
X1R5cGVzLi4uPjo6X190cmFtcG9saW5lW3NpemVvZi4uLihfVHlwZXMpXT17Ci0gICAgICAgICZf
X3RyYW1wb2xpbmVfZnVuYzxfVHlwZXM+Li4uCi0gICAgfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
X1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX3Zpc2l0
b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190eXBlCi12aXNpdChfVmlzaXRv
ciYmIF9fdmlzaXRvcixWYXJpYW50PF9UeXBlcy4uLj4mIF9fdil7Ci0gICAgcmV0dXJuIChfX3Yu
dmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKQotICAgICAgICA/IF9fdGhyb3dfYmFkX3ZhcmlhbnRf
YWNjZXNzPHR5cGVuYW1lIF9fdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVHlwZXMuLi4+
OjpfX3R5cGU+KCJWaXNpdGluZyBvZiBlbXB0eSBWYXJpYW50IikKLSAgICAgICAgOiBfX3Zpc2l0
b3JfdGFibGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190cmFtcG9saW5lW19fdi5pbmRleCgpXShf
X3Zpc2l0b3IsX192KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUg
Li4uIF9WYXJpYW50cz4KLXN0cnVjdCBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGV7Ci0gICAg
dHlwZWRlZiBkZWNsdHlwZShzdGQ6OmRlY2x2YWw8X1Zpc2l0b3ImPigpKGdldDwwPihzdGQ6OmRl
Y2x2YWw8X1ZhcmlhbnRzPigpKS4uLikpCi0gICAgX190eXBlOwotfTsKLQotdGVtcGxhdGU8c2l6
ZV90IF9WYXJpYW50SW5kZXgsdHlwZW5hbWUgX0luZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxw
ZXI7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9o
ZWxwZXI8MCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KLSAgICBzdGF0aWMgY29uc3Rl
eHByIHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFu
dHMuLi4+OjpfX3R5cGUKLSAgICBfX3Zpc2l0KF9WaXNpdG9yJiBfX3Zpc2l0b3IsX1ZhcmlhbnRz
JiAuLi4gX192KXsKLSAgICAgICAgcmV0dXJuIF9fdmlzaXRvcihnZXQ8X0luZGljZXM+KF9fdiku
Li4pOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9B
cmdzPgotc3RydWN0IF9fYXJnX3NlbGVjdG9yX3Q7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFk
LHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2FyZ19zZWxlY3Rvcl90PDAsX0hlYWQsX1Jl
c3QuLi4+ewotICAgIHR5cGVkZWYgX0hlYWQgX190eXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhw
ciBfX3R5cGUmIF9fc2VsZWN0KF9IZWFkJiBfX2hlYWQsX1Jlc3QmIC4uLil7Ci0gICAgICAgIHJl
dHVybiBfX2hlYWQ7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFt
ZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hcmdfc2VsZWN0b3JfdDxfSW5k
ZXgsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hcmdfc2VsZWN0b3Jf
dDxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSBfX3R5cGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBfX3R5cGUmIF9fc2VsZWN0KF9IZWFkJixfUmVzdCYgLi4uIF9fcmVzdCl7Ci0gICAgICAgIHJl
dHVybiBfX2FyZ19zZWxlY3Rvcl90PF9JbmRleC0xLF9SZXN0Li4uPjo6X19zZWxlY3QoX19yZXN0
Li4uKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBf
QXJncz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2FyZ19zZWxlY3Rvcl90PF9JbmRleCxfQXJncy4u
Lj46Ol9fdHlwZSYmIF9fYXJnX3NlbGVjdG9yKF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgcmV0
dXJuIHN0ZDo6Zm9yd2FyZDx0eXBlbmFtZSBfX2FyZ19zZWxlY3Rvcl90PF9JbmRleCxfQXJncy4u
Lj46Ol9fdHlwZT4oCi0gICAgICAgIF9fYXJnX3NlbGVjdG9yX3Q8X0luZGV4LF9BcmdzLi4uPjo6
X19zZWxlY3QoX19hcmdzLi4uKSk7Ci19Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsc2l6
ZV90IF9WYXJpYW50SW5kZXgscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX3Zpc2l0
X2hlbHBlcjJ7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9W
YXJpYW50cz4KLSAgICBzdGF0aWMgY29uc3RleHByIHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9y
ZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFudHMuLi4+OjpfX3R5cGUKLSAgICBfX3Zpc2l0KF9W
aXNpdG9yJiBfX3Zpc2l0b3IsX1ZhcmlhbnRzJiYgLi4uIF9fdil7Ci0gICAgICAgIHJldHVybiAo
X19hcmdfc2VsZWN0b3I8X1ZhcmlhbnRJbmRleC0xPihfX3YuLi4pLmluZGV4KCk9PV9JbmRleCkK
LSAgICAgICAgICAgID8gX192aXNpdF9oZWxwZXI8X1ZhcmlhbnRJbmRleC0xLF9faW5kZXhfc2Vx
dWVuY2U8X0luZGV4LF9JbmRpY2VzLi4uPj46Ol9fdmlzaXQoX192aXNpdG9yLHN0ZDo6Zm9yd2Fy
ZDxfVmFyaWFudHM+KF9fdikuLi4pCi0gICAgICAgICAgICA6IF9fdmlzaXRfaGVscGVyMjxfSW5k
ZXgtMSxfVmFyaWFudEluZGV4LF9JbmRpY2VzLi4uPjo6X192aXNpdChfX3Zpc2l0b3Isc3RkOjpm
b3J3YXJkPF9WYXJpYW50cz4oX192KS4uLik7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8c2l6ZV90
IF9WYXJpYW50SW5kZXgscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX3Zpc2l0X2hl
bHBlcjI8LTEsX1ZhcmlhbnRJbmRleCxfSW5kaWNlcy4uLj57Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KLSAgICBzdGF0aWMgY29uc3RleHBy
IHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFudHMu
Li4+OjpfX3R5cGUKLSAgICBfX3Zpc2l0KF9WaXNpdG9yJixfVmFyaWFudHMmJiAuLi4pewotICAg
ICAgICByZXR1cm4gX190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3M8dHlwZW5hbWUgX19tdWx0aV92
aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9WYXJpYW50cy4uLj46Ol9fdHlwZT4oIlZpc2l0
aW5nIG9mIGVtcHR5IFZhcmlhbnQiKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBf
VmFyaWFudD4KLXN0cnVjdCBfX3ZhcmlhbnRfdHlwZV9jb3VudDsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3ZhcmlhbnRfdHlwZV9jb3VudDxWYXJpYW50PF9UeXBl
cy4uLj4+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IF9fdmFsdWU9c2l6ZW9mLi4uKF9U
eXBlcyk7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudD4KLXN0cnVjdCBfX3Zhcmlh
bnRfdHlwZV9jb3VudDxfVmFyaWFudCY+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IF9f
dmFsdWU9X192YXJpYW50X3R5cGVfY291bnQ8X1ZhcmlhbnQ+OjpfX3ZhbHVlOwotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQ+Ci1zdHJ1Y3QgX192YXJpYW50X3R5cGVfY291bnQ8X1Zh
cmlhbnQgY29uc3QmPnsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBfX3ZhbHVlPV9fdmFy
aWFudF90eXBlX2NvdW50PF9WYXJpYW50Pjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHNpemVf
dCBfVmFyaWFudEluZGV4LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9o
ZWxwZXI8X1ZhcmlhbnRJbmRleCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1ZhcmlhbnRzPgotICAg
IHN0YXRpYyBjb25zdGV4cHIgdHlwZW5hbWUgX19tdWx0aV92aXNpdG9yX3JldHVybl90eXBlPF9W
aXNpdG9yLF9WYXJpYW50cy4uLj46Ol9fdHlwZQotICAgIF9fdmlzaXQoX1Zpc2l0b3ImIF9fdmlz
aXRvcixfVmFyaWFudHMmJiAuLi4gX192KXsKLSAgICAgICAgcmV0dXJuIF9fdmlzaXRfaGVscGVy
MjwKLSAgICAgICAgICAgIF9fdmFyaWFudF90eXBlX2NvdW50PAotICAgICAgICAgICAgICAgIHR5
cGVuYW1lIF9fYXJnX3NlbGVjdG9yX3Q8Ci0gICAgICAgICAgICAgICAgICAgIF9WYXJpYW50SW5k
ZXgtMSxfVmFyaWFudHMuLi4+OjpfX3R5cGU+OjpfX3ZhbHVlLTEsCi0gICAgICAgICAgICBfVmFy
aWFudEluZGV4LF9JbmRpY2VzLi4uPjo6X192aXNpdCgKLSAgICAgICAgICAgICAgICBfX3Zpc2l0
b3Isc3RkOjpmb3J3YXJkPF9WYXJpYW50cyYmPihfX3YpLi4uKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1ZhcmlhbnRzPgotY29uc3RleHBy
IHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFudHMu
Li4+OjpfX3R5cGUKLXZpc2l0KF9WaXNpdG9yJiYgX192aXNpdG9yLF9WYXJpYW50cyYmIC4uLiBf
X3YpewotICAgIHJldHVybiBfX3Zpc2l0X2hlbHBlcjxzaXplb2YuLi4oX1ZhcmlhbnRzKSxfX2lu
ZGV4X3NlcXVlbmNlPD4+OjpfX3Zpc2l0KAotICAgICAgICBfX3Zpc2l0b3Isc3RkOjpmb3J3YXJk
PF9WYXJpYW50cz4oX192KS4uLik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+
Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19s
aHMsVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Jocyl7Ci0gICAgcmV0dXJuIChfX2xocy5p
bmRleCgpPT1fX3Jocy5pbmRleCgpKSAmJgotICAgICAgICAoKF9fbGhzLmluZGV4KCk9PS0xKSB8
fAotICAgICAgICAgX19lcXVhbGl0eV9vcF90YWJsZTxWYXJpYW50PF9UeXBlcy4uLj4+OjpfX2Vx
dWFsaXR5X2NvbXBhcmVbX19saHMuaW5kZXgoKV0oCi0gICAgICAgICAgICAgX19saHMsX19yaHMp
KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBib29sIG9w
ZXJhdG9yIT0oVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX2xocyxWYXJpYW50PF9UeXBlcy4u
Lj4gY29uc3QmIF9fcmhzKXsKLSAgICByZXR1cm4gIShfX2xocz09X19yaHMpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KFZhcmlh
bnQ8X1R5cGVzLi4uPiBjb25zdCYgX19saHMsVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Jo
cyl7Ci0gICAgcmV0dXJuIChfX2xocy5pbmRleCgpPF9fcmhzLmluZGV4KCkpIHx8Ci0gICAgICAg
ICgoX19saHMuaW5kZXgoKT09X19yaHMuaW5kZXgoKSkgJiYKLSAgICAgICAgICgoX19saHMuaW5k
ZXgoKSE9LTEpICYmCi0gICAgICAgICAgX19sZXNzX3RoYW5fb3BfdGFibGU8VmFyaWFudDxfVHlw
ZXMuLi4+Pjo6Ci0gICAgICAgICAgX19sZXNzX3RoYW5fY29tcGFyZVtfX2xocy5pbmRleCgpXShf
X2xocyxfX3JocykpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0
ZXhwciBib29sIG9wZXJhdG9yPihWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fbGhzLFZhcmlh
bnQ8X1R5cGVzLi4uPiBjb25zdCYgX19yaHMpewotICAgIHJldHVybiBfX3JoczxfX2xoczsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9y
Pj0oVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX2xocyxWYXJpYW50PF9UeXBlcy4uLj4gY29u
c3QmIF9fcmhzKXsKLSAgICByZXR1cm4gIShfX2xoczxfX3Jocyk7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KFZhcmlhbnQ8X1R5
cGVzLi4uPiBjb25zdCYgX19saHMsVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Jocyl7Ci0g
ICAgcmV0dXJuICEoX19saHM+X19yaHMpOworY29uc3RleHByIGNvbnN0IF9UeXBlJiYgZ2V0KFZh
cmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYmIF9fdikKK3sKKyAgICByZXR1cm4gc3RkOjpnZXQ8X1R5
cGU+KFdURk1vdmUoX192KSk7CiB9CiAKLXN0cnVjdCBNb25vc3RhdGV7fTsKLQotY29uc3RleHBy
IGJvb2wgb3BlcmF0b3I9PShNb25vc3RhdGUgY29uc3QmLCBNb25vc3RhdGUgY29uc3QmKSB7IHJl
dHVybiB0cnVlOyB9Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KE1vbm9zdGF0ZSBjb25zdCYs
IE1vbm9zdGF0ZSBjb25zdCYpIHsgcmV0dXJuIGZhbHNlOyB9Ci1jb25zdGV4cHIgYm9vbCBvcGVy
YXRvcj49KE1vbm9zdGF0ZSBjb25zdCYsIE1vbm9zdGF0ZSBjb25zdCYpIHsgcmV0dXJuIHRydWU7
IH0KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0oTW9ub3N0YXRlIGNvbnN0JiwgTW9ub3N0YXRl
IGNvbnN0JikgeyByZXR1cm4gdHJ1ZTsgfQotY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KE1vbm9z
dGF0ZSBjb25zdCYsIE1vbm9zdGF0ZSBjb25zdCYpIHsgcmV0dXJuIGZhbHNlOyB9Ci1jb25zdGV4
cHIgYm9vbCBvcGVyYXRvcjwoTW9ub3N0YXRlIGNvbnN0JiwgTW9ub3N0YXRlIGNvbnN0JikgeyBy
ZXR1cm4gZmFsc2U7IH0KLQotc3RydWN0IF9faGFzaF92aXNpdG9yewotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIF9UeXBlPgotICAgIHNpemVfdCBvcGVyYXRvcigpKF9UeXBlIGNvbnN0JiBfX3gpewot
ICAgICAgICByZXR1cm4gc3RkOjpoYXNoPF9UeXBlPigpKF9feCk7Ci0gICAgfQotfTsKLQotLy8g
LS0gV2ViS2l0IEFkZGl0aW9ucyAtLQotCiB0ZW1wbGF0ZTxjbGFzcyBWLCBjbGFzcy4uLiBGPgot
YXV0byBzd2l0Y2hPbihWJiYgdiwgRiYmLi4uIGYpIC0+IGRlY2x0eXBlKFdURjo6dmlzaXQobWFr
ZVZpc2l0b3Ioc3RkOjpmb3J3YXJkPEY+KGYpLi4uKSwgc3RkOjpmb3J3YXJkPFY+KHYpKSkKK2F1
dG8gc3dpdGNoT24oViYmIHYsIEYmJi4uLiBmKSAtPiBkZWNsdHlwZShzdGQ6OnZpc2l0KG1ha2VW
aXNpdG9yKHN0ZDo6Zm9yd2FyZDxGPihmKS4uLiksIHN0ZDo6Zm9yd2FyZDxWPih2KSkpCiB7Ci0g
ICAgcmV0dXJuIFdURjo6dmlzaXQobWFrZVZpc2l0b3Ioc3RkOjpmb3J3YXJkPEY+KGYpLi4uKSwg
c3RkOjpmb3J3YXJkPFY+KHYpKTsKKyAgICByZXR1cm4gc3RkOjp2aXNpdChtYWtlVmlzaXRvcihz
dGQ6OmZvcndhcmQ8Rj4oZikuLi4pLCBzdGQ6OmZvcndhcmQ8Vj4odikpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXVEYKIAotbmFtZXNwYWNlIHN0ZCB7Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBoYXNo
PFdURjo6TW9ub3N0YXRlPnsKLSAgICBzaXplX3Qgb3BlcmF0b3IoKShXVEY6Ok1vbm9zdGF0ZSkg
X19OT0VYQ0VQVHsKLSAgICAgICAgcmV0dXJuIDQyOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgaGFzaDxXVEY6OlZhcmlhbnQ8X1R5cGVzLi4uPj57
Ci0gICAgc2l6ZV90IG9wZXJhdG9yKCkoV1RGOjpWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QgJnYp
IF9fTk9FWENFUFQgewotICAgICAgICByZXR1cm4gc3RkOjpoYXNoPHB0cmRpZmZfdD4oKSh2Lmlu
ZGV4KCkpIF4gV1RGOjp2aXNpdChXVEY6Ol9faGFzaF92aXNpdG9yKCksIHYpOwotICAgIH0KLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIHN0ZAotCiB1c2luZyBXVEY6Ok1vbm9zdGF0ZTsKIHVzaW5nIFdU
Rjo6VmFyaWFudDsKLQotI2VuZGlmIC8vICFDT01QSUxFUihDTEFORykgfHwgV1RGX0NQUF9TVERf
VkVSID49IDE0Ci0KLSNpZiBDT01QSUxFUihNU1ZDKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkKLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9ET01DYWNoZUVu
Z2luZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlRW5naW5lLmNw
cAppbmRleCBlMTkwNGRiYjc2YWQyMDJjYzYzZjZhMjY3ZjgwZTk0ZWUxOTY3YjY2Li4yNTkxNGI0
MGJiMjM4M2EwNzg4MDRmODliMTFiNDBkODk3MGI0MzA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlRW5naW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2NhY2hlL0RPTUNhY2hlRW5naW5lLmNwcApAQCAtMTI5LDIyICsxMjksMjIgQEAg
Ym9vbCBxdWVyeUNhY2hlTWF0Y2goY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25z
dCBVUkwmIHVybCwgYm9vbCBoYXNWYXIKIAogUmVzcG9uc2VCb2R5IGlzb2xhdGVkUmVzcG9uc2VC
b2R5KGNvbnN0IFJlc3BvbnNlQm9keSYgYm9keSkKIHsKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hP
bihib2R5LCBbXShjb25zdCBSZWY8Rm9ybURhdGE+JiBmb3JtRGF0YSkgeworICAgIHJldHVybiBX
VEY6OnN3aXRjaE9uKGJvZHksIFtdKGNvbnN0IFJlZjxGb3JtRGF0YT4mIGZvcm1EYXRhKSAtPiBS
ZXNwb25zZUJvZHkgewogICAgICAgICByZXR1cm4gZm9ybURhdGEtPmlzb2xhdGVkQ29weSgpOwot
ICAgIH0sIFtdKGNvbnN0IFJlZjxTaGFyZWRCdWZmZXI+JiBidWZmZXIpIHsKKyAgICB9LCBbXShj
b25zdCBSZWY8U2hhcmVkQnVmZmVyPiYgYnVmZmVyKSAtPiBSZXNwb25zZUJvZHkgewogICAgICAg
ICByZXR1cm4gYnVmZmVyLT5jb3B5KCk7Ci0gICAgfSwgW10oY29uc3Qgc3RkOjpudWxscHRyX3Qm
KSB7CisgICAgfSwgW10oY29uc3Qgc3RkOjpudWxscHRyX3QmKSAtPiBSZXNwb25zZUJvZHkgewog
ICAgICAgICByZXR1cm4gRE9NQ2FjaGVFbmdpbmU6OlJlc3BvbnNlQm9keSB7IH07CiAgICAgfSk7
CiB9CiAKIFJlc3BvbnNlQm9keSBjb3B5UmVzcG9uc2VCb2R5KGNvbnN0IFJlc3BvbnNlQm9keSYg
Ym9keSkKIHsKLSAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihib2R5LCBbXShjb25zdCBSZWY8Rm9y
bURhdGE+JiBmb3JtRGF0YSkgeworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGJvZHksIFtdKGNv
bnN0IFJlZjxGb3JtRGF0YT4mIGZvcm1EYXRhKSAtPiBSZXNwb25zZUJvZHkgewogICAgICAgICBy
ZXR1cm4gZm9ybURhdGEuY29weVJlZigpOwotICAgIH0sIFtdKGNvbnN0IFJlZjxTaGFyZWRCdWZm
ZXI+JiBidWZmZXIpIHsKKyAgICB9LCBbXShjb25zdCBSZWY8U2hhcmVkQnVmZmVyPiYgYnVmZmVy
KSAtPiBSZXNwb25zZUJvZHkgewogICAgICAgICByZXR1cm4gYnVmZmVyLmNvcHlSZWYoKTsKLSAg
ICB9LCBbXShjb25zdCBzdGQ6Om51bGxwdHJfdCYpIHsKKyAgICB9LCBbXShjb25zdCBzdGQ6Om51
bGxwdHJfdCYpIC0+IFJlc3BvbnNlQm9keSB7CiAgICAgICAgIHJldHVybiBET01DYWNoZUVuZ2lu
ZTo6UmVzcG9uc2VCb2R5IHsgfTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5T3duZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9mZXRjaC9GZXRjaEJvZHlPd25lci5jcHAKaW5kZXggZWY2ZGEwNDk4OThlYmFkODFlNjc3
NTgxZjBkMTJiZDMzOGY2MTI1My4uODg0YzhiODc4MzkxOTkwYzM3NzVjMjFjODNjMDExMTNjYzA4
MWE1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlP
d25lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlPd25l
ci5jcHAKQEAgLTM4OCw5ICszODgsOSBAQCBSZXNvdXJjZUVycm9yIEZldGNoQm9keU93bmVyOjps
b2FkaW5nRXJyb3IoKSBjb25zdAogCiBzdGQ6Om9wdGlvbmFsPEV4Y2VwdGlvbj4gRmV0Y2hCb2R5
T3duZXI6OmxvYWRpbmdFeGNlcHRpb24oKSBjb25zdAogewotICAgIHJldHVybiBXVEY6OnN3aXRj
aE9uKG1fbG9hZGluZ0Vycm9yLCBbXShjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikgeworICAg
IHJldHVybiBXVEY6OnN3aXRjaE9uKG1fbG9hZGluZ0Vycm9yLCBbXShjb25zdCBSZXNvdXJjZUVy
cm9yJiBlcnJvcikgLT4gc3RkOjpvcHRpb25hbDxFeGNlcHRpb24+IHsKICAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IFR5cGVFcnJvciwgZXJyb3Iuc2FuaXRpemVkRGVzY3JpcHRpb24oKSB9Owot
ICAgIH0sIFtdKGNvbnN0IEV4Y2VwdGlvbiYgZXhjZXB0aW9uKSB7CisgICAgfSwgW10oY29uc3Qg
RXhjZXB0aW9uJiBleGNlcHRpb24pIC0+IHN0ZDo6b3B0aW9uYWw8RXhjZXB0aW9uPiB7CiAgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBleGNlcHRpb24gfTsKICAgICB9LCBbXShhdXRvJiYpIC0+
IHN0ZDo6b3B0aW9uYWw8RXhjZXB0aW9uPiB7CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRo
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCmlu
ZGV4IDc0YTlkOWY4NjM1MWM1YWVjYjcyYmRjZTIwMGM0ZDc1MDA4MmViYTcuLmZkNmQ1YTM5OWIz
ZmNhNjYyNGZmMzQ5NGRiYWU4NzdmNThiNDE0MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCkBAIC0yMDMsNyArMjAzLDcgQEAgYm9vbCBp
c0lEQktleVBhdGhWYWxpZChjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0pOwotICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0
b3IsIGtleVBhdGgpOworICAgIHJldHVybiBzdGQ6OnZpc2l0KHZpc2l0b3IsIGtleVBhdGgpOwog
fQogCiBJREJLZXlQYXRoIGlzb2xhdGVkQ29weShjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQpA
QCAtMjE4LDcgKzIxOCw3IEBAIElEQktleVBhdGggaXNvbGF0ZWRDb3B5KGNvbnN0IElEQktleVBh
dGgmIGtleVBhdGgpCiAgICAgICAgIHJldHVybiB2ZWN0b3JDb3B5OwogICAgIH0pOwogCi0gICAg
cmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwga2V5UGF0aCk7CisgICAgcmV0dXJuIHN0ZDo6dmlz
aXQodmlzaXRvciwga2V5UGF0aCk7CiB9CiAKICNpZiAhTE9HX0RJU0FCTEVECkBAIC0yNDIsNyAr
MjQyLDcgQEAgU3RyaW5nIGxvZ2dpbmdTdHJpbmcoY29uc3QgSURCS2V5UGF0aCYgcGF0aCkKICAg
ICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKICAgICB9KTsKIAotICAgIHJldHVybiBX
VEY6OnZpc2l0KHZpc2l0b3IsIHBhdGgpOworICAgIHJldHVybiBzdGQ6OnZpc2l0KHZpc2l0b3Is
IHBhdGgpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCUmVxdWVzdC5jcHAKaW5kZXggNTRlNzhiYWNiZmI1OWE2YjRkNmFjYzNiM2RlYmRlOTdi
YjhhMjZjNC4uOWFmZGQ5ZTBjMGJjY2MwNWVlY2NhYWQ1NDliMGE3Yzc1YzlkMGUzNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKQEAgLTIw
Niw5ICsyMDYsOSBAQCB1aW50NjRfdCBJREJSZXF1ZXN0Ojpzb3VyY2VPYmplY3RTdG9yZUlkZW50
aWZpZXIoKSBjb25zdAogICAgICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiBXVEY6OnN3aXRj
aE9uKG1fc291cmNlLnZhbHVlKCksCi0gICAgICAgIFtdIChjb25zdCBSZWZQdHI8SURCT2JqZWN0
U3RvcmU+JiBvYmplY3RTdG9yZSkgeyByZXR1cm4gb2JqZWN0U3RvcmUtPmluZm8oKS5pZGVudGlm
aWVyKCk7IH0sCi0gICAgICAgIFtdIChjb25zdCBSZWZQdHI8SURCSW5kZXg+JiBpbmRleCkgeyBy
ZXR1cm4gaW5kZXgtPmluZm8oKS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKTsgfSwKLSAgICAgICAg
W10gKGNvbnN0IFJlZlB0cjxJREJDdXJzb3I+JikgeyByZXR1cm4gMDsgfQorICAgICAgICBbXSAo
Y29uc3QgUmVmUHRyPElEQk9iamVjdFN0b3JlPiYgb2JqZWN0U3RvcmUpIC0+IHVpbnQ2NF90IHsg
cmV0dXJuIG9iamVjdFN0b3JlLT5pbmZvKCkuaWRlbnRpZmllcigpOyB9LAorICAgICAgICBbXSAo
Y29uc3QgUmVmUHRyPElEQkluZGV4PiYgaW5kZXgpIC0+IHVpbnQ2NF90IHsgcmV0dXJuIGluZGV4
LT5pbmZvKCkub2JqZWN0U3RvcmVJZGVudGlmaWVyKCk7IH0sCisgICAgICAgIFtdIChjb25zdCBS
ZWZQdHI8SURCQ3Vyc29yPiYpIC0+IHVpbnQ2NF90IHsgcmV0dXJuIDA7IH0KICAgICApOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
U2VyaWFsaXphdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvSURCU2VyaWFsaXphdGlvbi5jcHAKaW5kZXggNGM5YTk1NmMyMGVjMjRiODY0YmUxZjc2MjNk
ZDViMGUyNDAyZTRlNC4uMmEyYzFmYzMyOTU4MDVkNTJmZDU2YWYzMGI0NTVhZTJjY2NjNDg3NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNl
cmlhbGl6YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9JREJTZXJpYWxpemF0aW9uLmNwcApAQCAtNTMsNyArNTMsNyBAQCBSZWZQdHI8U2hhcmVk
QnVmZmVyPiBzZXJpYWxpemVJREJLZXlQYXRoKGNvbnN0IHN0ZDo6b3B0aW9uYWw8SURCS2V5UGF0
aD4mIGtleVBhdAogICAgICAgICAgICAgICAgIGVuY29kZXIuZW5jb2RlU3RyaW5nKCJzdHJpbmci
LCBzdHJpbmcpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0pOwotICAgICAgICBXVEY6OnZp
c2l0KHZpc2l0b3IsIGtleVBhdGgudmFsdWUoKSk7CisgICAgICAgIHN0ZDo6dmlzaXQodmlzaXRv
ciwga2V5UGF0aC52YWx1ZSgpKTsKICAgICB9IGVsc2UKICAgICAgICAgZW5jb2Rlci0+ZW5jb2Rl
RW51bSgidHlwZSIsIEtleVBhdGhUeXBlOjpOdWxsKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAKaW5k
ZXggZDA5Y2I3ZGE1YmM4NmY3OWUzM2ZlNDkxOWY0OTdkMGRkYWQ3ZGY2MC4uN2E1ZTQ4NDZjNDAw
MjIwMDdjZjg0NDQ3NDdmZWZiZWJmYTllMjRmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCkBAIC0x
NjYsNyArMTY2LDcgQEAgU3RyaW5nIE1lZGlhQ29udHJvbHNIb3N0OjpkaXNwbGF5TmFtZUZvclRy
YWNrKGNvbnN0IHN0ZDo6b3B0aW9uYWw8VGV4dE9yQXVkaW9UcmEKICAgICBpZiAoIXBhZ2UpCiAg
ICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCi0gICAgcmV0dXJuIFdURjo6dmlzaXQoW3Bh
Z2VdIChhdXRvJiB0cmFjaykgeworICAgIHJldHVybiBzdGQ6OnZpc2l0KFtwYWdlXSAoYXV0byYg
dHJhY2spIHsKICAgICAgICAgcmV0dXJuIHBhZ2UtPmdyb3VwKCkuZW5zdXJlQ2FwdGlvblByZWZl
cmVuY2VzKCkuZGlzcGxheU5hbWVGb3JUcmFjayh0cmFjay5nZXQoKSk7CiAgICAgfSwgdHJhY2su
dmFsdWUoKSk7CiB9CkBAIC02ODEsMTMgKzY4MSwxMyBAQCBib29sIE1lZGlhQ29udHJvbHNIb3N0
OjpzaG93TWVkaWFDb250cm9sc0NvbnRleHRNZW51KEhUTUxFbGVtZW50JiB0YXJnZXQsIFN0cmlu
ZwogI2VuZGlmIC8vIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKICAgICAgICAgICAg
IFsmXSAoUmVmUHRyPEF1ZGlvVHJhY2s+JiBzZWxlY3RlZEF1ZGlvVHJhY2spIHsKICAgICAgICAg
ICAgICAgICBmb3IgKGF1dG8mIHRyYWNrIDogaWRNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGF1dG8qIGF1ZGlvVHJhY2sgPSBXVEY6OmdldF9pZjxSZWZQdHI8QXVkaW9U
cmFjaz4+KHRyYWNrKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGF1ZGlvVHJhY2sg
PSBzdGQ6OmdldF9pZjxSZWZQdHI8QXVkaW9UcmFjaz4+KCZ0cmFjaykpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAoKmF1ZGlvVHJhY2spLT5zZXRFbmFibGVkKCphdWRpb1RyYWNrID09IHNlbGVj
dGVkQXVkaW9UcmFjayk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSwKICAgICAg
ICAgICAgIFsmXSAoUmVmUHRyPFRleHRUcmFjaz4mIHNlbGVjdGVkVGV4dFRyYWNrKSB7CiAgICAg
ICAgICAgICAgICAgZm9yIChhdXRvJiB0cmFjayA6IGlkTWFwLnZhbHVlcygpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChhdXRvKiB0ZXh0VHJhY2sgPSBXVEY6OmdldF9pZjxSZWZQdHI8VGV4
dFRyYWNrPj4odHJhY2spKQorICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byogdGV4dFRyYWNr
ID0gc3RkOjpnZXRfaWY8UmVmUHRyPFRleHRUcmFjaz4+KCZ0cmFjaykpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAoKnRleHRUcmFjayktPnNldE1vZGUoVGV4dFRyYWNrOjpNb2RlOjpEaXNhYmxl
ZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG1lZGlhRWxlbWVudC5zZXRT
ZWxlY3RlZFRleHRUcmFjayhzZWxlY3RlZFRleHRUcmFjay5nZXQoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3Bw
CmluZGV4IDNjNzZjNTdhOGI3MzVkYjBlNWIxODhjZjJlNDZmY2UyZjlhOWUzNTEuLmZlMWEwMWVk
Y2RmOWQ4MGFlMGU1Mjc4MjhjYzY5MWJkMjkyMzU0NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCkBAIC0z
MzEsNyArMzMxLDcgQEAgdm9pZCBSVENQZWVyQ29ubmVjdGlvbjo6YWRkSWNlQ2FuZGlkYXRlKENh
bmRpZGF0ZSYmIHJ0Y0NhbmRpZGF0ZSwgUmVmPERlZmVycmVkUHIKICAgICBzdGQ6Om9wdGlvbmFs
PEV4Y2VwdGlvbj4gZXhjZXB0aW9uOwogICAgIFJlZlB0cjxSVENJY2VDYW5kaWRhdGU+IGNhbmRp
ZGF0ZTsKICAgICBpZiAocnRjQ2FuZGlkYXRlKSB7Ci0gICAgICAgIGNhbmRpZGF0ZSA9IHN3aXRj
aE9uKCpydGNDYW5kaWRhdGUsIFsmZXhjZXB0aW9uXShSVENJY2VDYW5kaWRhdGVJbml0JiBpbml0
KSAtPiBSZWZQdHI8UlRDSWNlQ2FuZGlkYXRlPiB7CisgICAgICAgIGNhbmRpZGF0ZSA9IFdURjo6
c3dpdGNoT24oKnJ0Y0NhbmRpZGF0ZSwgWyZleGNlcHRpb25dKFJUQ0ljZUNhbmRpZGF0ZUluaXQm
IGluaXQpIC0+IFJlZlB0cjxSVENJY2VDYW5kaWRhdGU+IHsKICAgICAgICAgICAgIGlmIChpbml0
LmNhbmRpZGF0ZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRwVHJh
bnNmb3JtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRwVHJh
bnNmb3JtLmNwcAppbmRleCBkYWY4OTdlYTQ3MjE4NmQ2Y2M3YjdhZDYyMmRmZjY2ZmE2MTc3NTZi
Li4wMWYwZTAxY2JkNDVjYzYyMjc1NTE0YjA2YWYzM2U5OWQyNjAyN2NkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1J0cFRyYW5zZm9ybS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENSdHBUcmFuc2Zvcm0uY3Bw
CkBAIC01Miw3ICs1Miw3IEBAIFJUQ1J0cFRyYW5zZm9ybTo6flJUQ1J0cFRyYW5zZm9ybSgpCiAK
IGJvb2wgUlRDUnRwVHJhbnNmb3JtOjppc0F0dGFjaGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
c3dpdGNoT24obV90cmFuc2Zvcm0sIFsmXShjb25zdCBSZWZQdHI8UlRDUnRwU0ZyYW1lVHJhbnNm
b3JtPiYgc2ZyYW1lVHJhbnNmb3JtKSB7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV90cmFu
c2Zvcm0sIFsmXShjb25zdCBSZWZQdHI8UlRDUnRwU0ZyYW1lVHJhbnNmb3JtPiYgc2ZyYW1lVHJh
bnNmb3JtKSB7CiAgICAgICAgIHJldHVybiBzZnJhbWVUcmFuc2Zvcm0tPmlzQXR0YWNoZWQoKTsK
ICAgICB9LCBbJl0oY29uc3QgUmVmUHRyPFJUQ1J0cFNjcmlwdFRyYW5zZm9ybT4mIHNjcmlwdFRy
YW5zZm9ybSkgewogICAgICAgICByZXR1cm4gc2NyaXB0VHJhbnNmb3JtLT5pc0F0dGFjaGVkKCk7
CkBAIC0xMzEsMTQgKzEzMSwxNCBAQCB2b2lkIFJUQ1J0cFRyYW5zZm9ybTo6ZGV0YWNoRnJvbVNl
bmRlcihSVENSdHBTZW5kZXImKQogCiBib29sIG9wZXJhdG9yPT0oY29uc3QgUlRDUnRwVHJhbnNm
b3JtJiBhLCBjb25zdCBSVENSdHBUcmFuc2Zvcm0mIGIpCiB7Ci0gICAgcmV0dXJuIHN3aXRjaE9u
KGEubV90cmFuc2Zvcm0sIFsmXShjb25zdCBSZWZQdHI8UlRDUnRwU0ZyYW1lVHJhbnNmb3JtPiYg
c2ZyYW1lVHJhbnNmb3JtQSkgewotICAgICAgICByZXR1cm4gc3dpdGNoT24oYi5tX3RyYW5zZm9y
bSwgWyZdKGNvbnN0IFJlZlB0cjxSVENSdHBTRnJhbWVUcmFuc2Zvcm0+JiBzZnJhbWVUcmFuc2Zv
cm1CKSB7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oYS5tX3RyYW5zZm9ybSwgWyZdKGNvbnN0
IFJlZlB0cjxSVENSdHBTRnJhbWVUcmFuc2Zvcm0+JiBzZnJhbWVUcmFuc2Zvcm1BKSB7CisgICAg
ICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGIubV90cmFuc2Zvcm0sIFsmXShjb25zdCBSZWZQdHI8
UlRDUnRwU0ZyYW1lVHJhbnNmb3JtPiYgc2ZyYW1lVHJhbnNmb3JtQikgewogICAgICAgICAgICAg
cmV0dXJuIHNmcmFtZVRyYW5zZm9ybUEuZ2V0KCkgPT0gc2ZyYW1lVHJhbnNmb3JtQi5nZXQoKTsK
ICAgICAgICAgfSwgWyZdKGNvbnN0IFJlZlB0cjxSVENSdHBTY3JpcHRUcmFuc2Zvcm0+Jikgewog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9KTsKICAgICB9LCBbJl0oY29uc3Qg
UmVmUHRyPFJUQ1J0cFNjcmlwdFRyYW5zZm9ybT4mIHNjcmlwdFRyYW5zZm9ybUEpIHsKLSAgICAg
ICAgcmV0dXJuIHN3aXRjaE9uKGIubV90cmFuc2Zvcm0sIFsmXShjb25zdCBSZWZQdHI8UlRDUnRw
U0ZyYW1lVHJhbnNmb3JtPiYpIHsKKyAgICAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oYi5tX3Ry
YW5zZm9ybSwgWyZdKGNvbnN0IFJlZlB0cjxSVENSdHBTRnJhbWVUcmFuc2Zvcm0+JikgewogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9LCBbJl0oY29uc3QgUmVmUHRyPFJUQ1J0
cFNjcmlwdFRyYW5zZm9ybT4mIHNjcmlwdFRyYW5zZm9ybUIpIHsKICAgICAgICAgICAgIHJldHVy
biBzY3JpcHRUcmFuc2Zvcm1BLmdldCgpID09IHNjcmlwdFRyYW5zZm9ybUIuZ2V0KCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJX
ZWJSVENSdHBTZW5kZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1J0cFNlbmRlckJhY2tlbmQuY3BwCmluZGV4IGQwMDcx
ODJhZTE3NjI0MDE0NWJmNGYyMTBkYzJkOGY5ZmFlMTE5M2EuLmM5OTkyMjAzYTViZDVkMTc5Mjk5
YWY4NzY5NTg1YTJlMjE2MmVlZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1J0cFNlbmRlckJhY2tlbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1J0
cFNlbmRlckJhY2tlbmQuY3BwCkBAIC01OSwxNyArNTksNiBAQCBMaWJXZWJSVENSdHBTZW5kZXJC
YWNrZW5kOjp+TGliV2ViUlRDUnRwU2VuZGVyQmFja2VuZCgpCiAgICAgc3RvcFNvdXJjZSgpOwog
fQogCi1zdGF0aWMgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExpYldlYlJUQ1J0cFNlbmRlckJhY2tl
bmQ6OlNvdXJjZSYgYSwgY29uc3QgTGliV2ViUlRDUnRwU2VuZGVyQmFja2VuZDo6U291cmNlJiBi
KQotewotICAgIHJldHVybiBzd2l0Y2hPbihhLCBbJmJdKGNvbnN0IFJlZjxSZWFsdGltZU91dGdv
aW5nQXVkaW9Tb3VyY2U+JiBzb3VyY2UpIHsKLSAgICAgICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8UmVmPFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZT4+KGIpICYmIHNvdXJjZS5w
dHIoKSA9PSBXVEY6OmdldDxSZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlPj4oYikucHRy
KCk7Ci0gICAgfSwgWyZiXShjb25zdCBSZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlPiYg
c291cmNlKSB7Ci0gICAgICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2U+PihiKSAmJiBzb3VyY2UucHRyKCkgPT0gV1RGOjpnZXQ8
UmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZT4+KGIpLnB0cigpOwotICAgIH0sIFsmYl0o
c3RkOjpudWxscHRyX3QpIHsKLSAgICAgICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8
c3RkOjpudWxscHRyX3Q+KGIpOwotICAgIH0pOwotfQotCiB2b2lkIExpYldlYlJUQ1J0cFNlbmRl
ckJhY2tlbmQ6OnN0YXJ0U291cmNlKCkKIHsKICAgICAvLyBXZSBhc3luY2hyb25vdXNseSBzdGFy
dCB0aGUgc291cmNlcyB0byBndWFyYW50ZWUgbWVkaWEgZ29lcyB0aHJvdWdoIHRoZSB0cmFuc2Zv
cm0gaWYgYSB0cmFuc2Zvcm0gaXMgc2V0IHdoZW4gY3JlYXRpbmcgdGhlIHRyYWNrLgpAQCAtMTg0
LDcgKzE3Myw3IEBAIHZvaWQgTGliV2ViUlRDUnRwU2VuZGVyQmFja2VuZDo6c2V0TWVkaWFTdHJl
YW1JZHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHN0cmVhbUlkCiAKIFJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZSogTGliV2ViUlRDUnRwU2VuZGVyQmFja2VuZDo6dmlkZW9Tb3VyY2UoKQogewot
ICAgIHJldHVybiBzd2l0Y2hPbihtX3NvdXJjZSwKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbiht
X3NvdXJjZSwKICAgICAgICAgW10oUmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZT4mIHNv
dXJjZSkgeyByZXR1cm4gc291cmNlLnB0cigpOyB9LAogICAgICAgICBbXShjb25zdCBhdXRvJikg
LT4gUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKiB7IHJldHVybiBudWxscHRyOyB9CiAgICAg
KTsKQEAgLTE5Miw3ICsxODEsNyBAQCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UqIExpYldl
YlJUQ1J0cFNlbmRlckJhY2tlbmQ6OnZpZGVvU291cmNlKCkKIAogYm9vbCBMaWJXZWJSVENSdHBT
ZW5kZXJCYWNrZW5kOjpoYXNTb3VyY2UoKSBjb25zdAogewotICAgIHJldHVybiBzd2l0Y2hPbiht
X3NvdXJjZSwKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3NvdXJjZSwKICAgICAgICAgW10o
Y29uc3Qgc3RkOjpudWxscHRyX3QmKSB7IHJldHVybiBmYWxzZTsgfSwKICAgICAgICAgW10oY29u
c3QgYXV0byYpIHsgcmV0dXJuIHRydWU7IH0KICAgICApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUkZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2VieHIvV2ViWFJGcmFtZS5jcHAKaW5kZXggN2U3ZjY5ZGM1YTg1NjliNDYzNzQxZTY3MDRk
NWFlNjYwMDNhZTg1NS4uY2Q3MWIzOTExNTc4NTU5YjlhZmJkNDM4Mzg0NjIxMjQzYmQ1OTAzYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUkZyYW1lLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSRnJhbWUuY3BwCkBAIC0xODQs
NyArMTg0LDcgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPFdlYlhSVmlld2VyUG9zZT4+IFdlYlhSRnJh
bWU6OmdldFZpZXdlclBvc2UoY29uc3QgRG9jdW1lbnQmIGQKICAgICAgICAgYXV0byB0cmFuc2Zv
cm0gPSBXZWJYUlJpZ2lkVHJhbnNmb3JtOjpjcmVhdGUocG9zZS0+dHJhbnNmb3JtKCkucmF3VHJh
bnNmb3JtKCkgKiBvZmZzZXQpOwogCiAgICAgICAgIC8vIFNldCBwcm9qZWN0aW9uIG1hdHJpeCBm
b3IgZWFjaCB2aWV3Ci0gICAgICAgIHN0ZDo6YXJyYXk8ZmxvYXQsIDE2PiBwcm9qZWN0aW9uID0g
c3dpdGNoT24oZnJhbWVEYXRhLnZpZXdzW2luZGV4XS5wcm9qZWN0aW9uLCBbJl0oY29uc3QgUGxh
dGZvcm1YUjo6RGV2aWNlOjpGcmFtZURhdGE6OkZvdiYgZm92KSB7CisgICAgICAgIHN0ZDo6YXJy
YXk8ZmxvYXQsIDE2PiBwcm9qZWN0aW9uID0gV1RGOjpzd2l0Y2hPbihmcmFtZURhdGEudmlld3Nb
aW5kZXhdLnByb2plY3Rpb24sIFsmXShjb25zdCBQbGF0Zm9ybVhSOjpEZXZpY2U6OkZyYW1lRGF0
YTo6Rm92JiBmb3YpIHsKICAgICAgICAgICAgIGRvdWJsZSBuZWFyID0gbV9zZXNzaW9uLT5yZW5k
ZXJTdGF0ZSgpLmRlcHRoTmVhcigpOwogICAgICAgICAgICAgZG91YmxlIGZhciA9IG1fc2Vzc2lv
bi0+cmVuZGVyU3RhdGUoKS5kZXB0aEZhcigpOwogICAgICAgICAgICAgcmV0dXJuIFRyYW5zZm9y
bWF0aW9uTWF0cml4Ojpmcm9tUHJvamVjdGlvbihmb3YudXAsIGZvdi5kb3duLCBmb3YubGVmdCwg
Zm92LnJpZ2h0LCBuZWFyLCBmYXIpLnRvQ29sdW1uTWFqb3JGbG9hdEFycmF5KCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVk
T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FY
SXNvbGF0ZWRPYmplY3QuY3BwCmluZGV4IGViYTUxOTI3MjYyZGNiNDUzY2MyMzQ4ODBiMzdlOTc5
NDAxNmZmYzAuLmM3MTZiM2I3ZmUxZWIyZGMzNDk0YjY1OTdiNTczMGMxYzQ4MGE1M2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0
ZWRPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0
cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCkBAIC03ODEsNyArNzgxLDcgQEAgSW50UG9pbnQgQVhJ
c29sYXRlZE9iamVjdDo6aW50UG9pbnRBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpIGMKIHsKICAgICBhdXRvIHZhbHVlID0gbV9wcm9wZXJ0eU1hcC5nZXQocHJvcGVy
dHlOYW1lKTsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbih2YWx1ZSwKLSAgICAgICAgW10gKElu
dFBvaW50JiB0eXBlZFZhbHVlKSB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAorICAgICAgICBbXSAo
SW50UG9pbnQmIHR5cGVkVmFsdWUpIC0+IEludFBvaW50IHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0s
CiAgICAgICAgIFtdIChhdXRvJikgeyByZXR1cm4gSW50UG9pbnQoKTsgfQogICAgICk7CiB9CkBA
IC03OTAsNyArNzkwLDcgQEAgQVhDb3JlT2JqZWN0KiBBWElzb2xhdGVkT2JqZWN0OjpvYmplY3RB
dHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUKIHsKICAgICBhdXRvIHZh
bHVlID0gbV9wcm9wZXJ0eU1hcC5nZXQocHJvcGVydHlOYW1lKTsKICAgICBBWElEIG5vZGVJRCA9
IFdURjo6c3dpdGNoT24odmFsdWUsCi0gICAgICAgIFtdIChBWElEJiB0eXBlZFZhbHVlKSB7IHJl
dHVybiB0eXBlZFZhbHVlOyB9LAorICAgICAgICBbXSAoQVhJRCYgdHlwZWRWYWx1ZSkgLT4gQVhJ
RCB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAogICAgICAgICBbXSAoYXV0byYpIHsgcmV0dXJuIElu
dmFsaWRBWElEOyB9CiAgICAgKTsKIApAQCAtODAyLDcgKzgwMiw3IEBAIFQgQVhJc29sYXRlZE9i
amVjdDo6cmVjdEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29u
c3QKIHsKICAgICBhdXRvIHZhbHVlID0gbV9wcm9wZXJ0eU1hcC5nZXQocHJvcGVydHlOYW1lKTsK
ICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbih2YWx1ZSwKLSAgICAgICAgW10gKFQmIHR5cGVkVmFs
dWUpIHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCisgICAgICAgIFtdIChUJiB0eXBlZFZhbHVlKSAt
PiBUIHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCiAgICAgICAgIFtdIChhdXRvJikgeyByZXR1cm4g
VCB7IH07IH0KICAgICApOwogfQpAQCAtODEyLDcgKzgxMiw3IEBAIFZlY3RvcjxUPiBBWElzb2xh
dGVkT2JqZWN0Ojp2ZWN0b3JBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpIGNvCiB7CiAgICAgYXV0byB2YWx1ZSA9IG1fcHJvcGVydHlNYXAuZ2V0KHByb3BlcnR5TmFt
ZSk7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24odmFsdWUsCi0gICAgICAgIFtdIChWZWN0b3I8
VD4mIHR5cGVkVmFsdWUpIHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCisgICAgICAgIFtdIChWZWN0
b3I8VD4mIHR5cGVkVmFsdWUpIC0+IFZlY3RvcjxUPiB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAog
ICAgICAgICBbXSAoYXV0byYpIHsgcmV0dXJuIFZlY3RvcjxUPigpOyB9CiAgICAgKTsKIH0KQEAg
LTgyMiw3ICs4MjIsNyBAQCBPcHRpb25TZXQ8VD4gQVhJc29sYXRlZE9iamVjdDo6b3B0aW9uU2V0
QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYQogewogICAgIGF1dG8gdmFs
dWUgPSBtX3Byb3BlcnR5TWFwLmdldChwcm9wZXJ0eU5hbWUpOwogICAgIHJldHVybiBXVEY6OnN3
aXRjaE9uKHZhbHVlLAotICAgICAgICBbXSAoVCYgdHlwZWRWYWx1ZSkgeyByZXR1cm4gdHlwZWRW
YWx1ZTsgfSwKKyAgICAgICAgW10gKFQmIHR5cGVkVmFsdWUpIC0+IE9wdGlvblNldDxUPiB7IHJl
dHVybiB0eXBlZFZhbHVlOyB9LAogICAgICAgICBbXSAoYXV0byYpIHsgcmV0dXJuIE9wdGlvblNl
dDxUPigpOyB9CiAgICAgKTsKIH0KQEAgLTgzMiw3ICs4MzIsNyBAQCBzdGQ6OnBhaXI8VCwgVD4g
QVhJc29sYXRlZE9iamVjdDo6cGFpckF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZQogewogICAgIGF1dG8gdmFsdWUgPSBtX3Byb3BlcnR5TWFwLmdldChwcm9wZXJ0eU5h
bWUpOwogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHZhbHVlLAotICAgICAgICBbXSAoc3RkOjpw
YWlyPFQsIFQ+JiB0eXBlZFZhbHVlKSB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAorICAgICAgICBb
XSAoc3RkOjpwYWlyPFQsIFQ+JiB0eXBlZFZhbHVlKSAtPiBzdGQ6OnBhaXI8VCwgVD4geyByZXR1
cm4gdHlwZWRWYWx1ZTsgfSwKICAgICAgICAgW10gKGF1dG8mKSB7IHJldHVybiBzdGQ6OnBhaXI8
VCwgVD4oMCwgMSk7IH0KICAgICApOwogfQpAQCAtODQxLDggKzg0MSw4IEBAIHVpbnQ2NF90IEFY
SXNvbGF0ZWRPYmplY3Q6OnVpbnQ2NEF0dHJpYnV0ZVZhbHVlKEFYUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSkgY29uCiB7CiAgICAgYXV0byB2YWx1ZSA9IG1fcHJvcGVydHlNYXAuZ2V0KHByb3Bl
cnR5TmFtZSk7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24odmFsdWUsCi0gICAgICAgIFtdICh1
aW50NjRfdCYgdHlwZWRWYWx1ZSkgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKLSAgICAgICAgW10g
KGF1dG8mKSB7IHJldHVybiAwOyB9CisgICAgICAgIFtdICh1aW50NjRfdCYgdHlwZWRWYWx1ZSkg
LT4gdWludDY0X3QgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKKyAgICAgICAgW10gKGF1dG8mKSAt
PiB1aW50NjRfdCB7IHJldHVybiAwOyB9CiAgICAgKTsKIH0KIApAQCAtODUwLDcgKzg1MCw3IEBA
IFVSTCBBWElzb2xhdGVkT2JqZWN0Ojp1cmxBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUpIGNvbnN0CiB7CiAgICAgYXV0byB2YWx1ZSA9IG1fcHJvcGVydHlNYXAuZ2V0
KHByb3BlcnR5TmFtZSk7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24odmFsdWUsCi0gICAgICAg
IFtdIChVUkwmIHR5cGVkVmFsdWUpIHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCisgICAgICAgIFtd
IChVUkwmIHR5cGVkVmFsdWUpIC0+IFVSTCB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAogICAgICAg
ICBbXSAoYXV0byYpIHsgcmV0dXJuIFVSTCgpOyB9CiAgICAgKTsKIH0KQEAgLTg1OSw3ICs4NTks
NyBAQCBQYXRoIEFYSXNvbGF0ZWRPYmplY3Q6OnBhdGhBdHRyaWJ1dGVWYWx1ZShBWFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7CiAgICAgYXV0byB2YWx1ZSA9IG1fcHJvcGVydHlN
YXAuZ2V0KHByb3BlcnR5TmFtZSk7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24odmFsdWUsCi0g
ICAgICAgIFtdIChQYXRoJiB0eXBlZFZhbHVlKSB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAorICAg
ICAgICBbXSAoUGF0aCYgdHlwZWRWYWx1ZSkgLT4gUGF0aCB7IHJldHVybiB0eXBlZFZhbHVlOyB9
LAogICAgICAgICBbXSAoYXV0byYpIHsgcmV0dXJuIFBhdGgoKTsgfQogICAgICk7CiB9CkBAIC04
NjgsNyArODY4LDcgQEAgQ29sb3IgQVhJc29sYXRlZE9iamVjdDo6Y29sb3JBdHRyaWJ1dGVWYWx1
ZShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7CiAgICAgYXV0byB2YWx1ZSA9
IG1fcHJvcGVydHlNYXAuZ2V0KHByb3BlcnR5TmFtZSk7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNo
T24odmFsdWUsCi0gICAgICAgIFtdIChDb2xvciYgdHlwZWRWYWx1ZSkgeyByZXR1cm4gdHlwZWRW
YWx1ZTsgfSwKKyAgICAgICAgW10gKENvbG9yJiB0eXBlZFZhbHVlKSAtPiBDb2xvciB7IHJldHVy
biB0eXBlZFZhbHVlOyB9LAogICAgICAgICBbXSAoYXV0byYpIHsgcmV0dXJuIENvbG9yKCk7IH0K
ICAgICApOwogfQpAQCAtODc3LDggKzg3Nyw4IEBAIGZsb2F0IEFYSXNvbGF0ZWRPYmplY3Q6OmZs
b2F0QXR0cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAogewog
ICAgIGF1dG8gdmFsdWUgPSBtX3Byb3BlcnR5TWFwLmdldChwcm9wZXJ0eU5hbWUpOwogICAgIHJl
dHVybiBXVEY6OnN3aXRjaE9uKHZhbHVlLAotICAgICAgICBbXSAoZmxvYXQmIHR5cGVkVmFsdWUp
IHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCi0gICAgICAgIFtdIChhdXRvJikgeyByZXR1cm4gMDsg
fQorICAgICAgICBbXSAoZmxvYXQmIHR5cGVkVmFsdWUpIC0+IGZsb2F0IHsgcmV0dXJuIHR5cGVk
VmFsdWU7IH0sCisgICAgICAgIFtdIChhdXRvJikgeyByZXR1cm4gMC4wZjsgfQogICAgICk7CiB9
CiAKQEAgLTg4Niw4ICs4ODYsOCBAQCBkb3VibGUgQVhJc29sYXRlZE9iamVjdDo6ZG91YmxlQXR0
cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAogewogICAgIGF1
dG8gdmFsdWUgPSBtX3Byb3BlcnR5TWFwLmdldChwcm9wZXJ0eU5hbWUpOwogICAgIHJldHVybiBX
VEY6OnN3aXRjaE9uKHZhbHVlLAotICAgICAgICBbXSAoZG91YmxlJiB0eXBlZFZhbHVlKSB7IHJl
dHVybiB0eXBlZFZhbHVlOyB9LAotICAgICAgICBbXSAoYXV0byYpIHsgcmV0dXJuIDA7IH0KKyAg
ICAgICAgW10gKGRvdWJsZSYgdHlwZWRWYWx1ZSkgLT4gZG91YmxlIHsgcmV0dXJuIHR5cGVkVmFs
dWU7IH0sCisgICAgICAgIFtdIChhdXRvJikgeyByZXR1cm4gMC4wOyB9CiAgICAgKTsKIH0KIApA
QCAtODk1LDggKzg5NSw4IEBAIHVuc2lnbmVkIEFYSXNvbGF0ZWRPYmplY3Q6OnVuc2lnbmVkQXR0
cmlidXRlVmFsdWUoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjCiB7CiAgICAgYXV0byB2
YWx1ZSA9IG1fcHJvcGVydHlNYXAuZ2V0KHByb3BlcnR5TmFtZSk7CiAgICAgcmV0dXJuIFdURjo6
c3dpdGNoT24odmFsdWUsCi0gICAgICAgIFtdICh1bnNpZ25lZCYgdHlwZWRWYWx1ZSkgeyByZXR1
cm4gdHlwZWRWYWx1ZTsgfSwKLSAgICAgICAgW10gKGF1dG8mKSB7IHJldHVybiAwOyB9CisgICAg
ICAgIFtdICh1bnNpZ25lZCYgdHlwZWRWYWx1ZSkgLT4gdW5zaWduZWQgeyByZXR1cm4gdHlwZWRW
YWx1ZTsgfSwKKyAgICAgICAgW10gKGF1dG8mKSB7IHJldHVybiAwdTsgfQogICAgICk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5oIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQnVmZmVyU291cmNlLmgKaW5kZXggOTBlNDdjOWVl
NTA0ZGY2NGIzMzQzM2Q3NTA1Yzg0ZmI3NDMwZmZiOC4uYjJmMWM2MzVmYmY3N2Q0NGNkNjIyMmMw
NDQxMDhjMTM1MTVmYjQxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
QnVmZmVyU291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQnVmZmVyU291
cmNlLmgKQEAgLTQ1LDE0ICs0NSwxNCBAQCBwdWJsaWM6CiAKICAgICBjb25zdCB1aW50OF90KiBk
YXRhKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OnZpc2l0KFtdKGF1dG8mIGJ1
ZmZlcikgLT4gY29uc3QgdWludDhfdCogeworICAgICAgICByZXR1cm4gc3RkOjp2aXNpdChbXShh
dXRvJiBidWZmZXIpIC0+IGNvbnN0IHVpbnQ4X3QqIHsKICAgICAgICAgICAgIHJldHVybiBidWZm
ZXIgPyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVmZmVyLT5kYXRhKCkpIDogbnVsbHB0
cjsKICAgICAgICAgfSwgbV92YXJpYW50KTsKICAgICB9CiAKICAgICBzaXplX3QgbGVuZ3RoKCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OnZpc2l0KFtdKGF1dG8mIGJ1ZmZlcikg
LT4gc2l6ZV90IHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dmlzaXQoW10oYXV0byYgYnVmZmVyKSAt
PiBzaXplX3QgewogICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlciA/IGJ1ZmZlci0+Ynl0ZUxlbmd0
aCgpIDogMDsKICAgICAgICAgfSwgbV92YXJpYW50KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCmluZGV4IGJhZWRkMGMw
NjljYTI4MWIyOTg0NzFlMzBiNjk3NGI1MjU2ZDMzMGUuLmIyZjRiOWZlNjE1ZWNiMjEzNjNjZjU4
M2RjNzM1Y2Y3N2MzMDYwOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCkBAIC00NjksNyArNDY5LDcgQEAgc3RhdGljIFZlY3Rv
cjxJREJLZXlEYXRhPiBjcmVhdGVLZXlQYXRoQXJyYXkoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QKICAgICAgICAgcmV0dXJuIGtleXM7CiAgICAgfSk7CiAKLSAgICByZXR1cm4g
V1RGOjp2aXNpdCh2aXNpdG9yLCBpbmZvLmtleVBhdGgoKSk7CisgICAgcmV0dXJuIHN0ZDo6dmlz
aXQodmlzaXRvciwgaW5mby5rZXlQYXRoKCkpOwogfQogCiB2b2lkIGdlbmVyYXRlSW5kZXhLZXlG
b3JWYWx1ZShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgSURCSW5k
ZXhJbmZvJiBpbmZvLCBKU1ZhbHVlIHZhbHVlLCBJbmRleEtleSYgb3V0S2V5LCBjb25zdCBzdGQ6
Om9wdGlvbmFsPElEQktleVBhdGg+JiBvYmplY3RTdG9yZUtleVBhdGgsIGNvbnN0IElEQktleURh
dGEmIG9iamVjdFN0b3JlS2V5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Db252ZXJ0VW5pb24uaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
Q29udmVydFVuaW9uLmgKaW5kZXggMDc2MjExYTc2ZTRhMzdhODU0ZGRkOWUwNjg1YTcxYzY4MzIy
ZWFlNC4uYTRiZDZhZWUzMDBkNjJjYzlkNjUzMjA2M2YzNjZkYjAxOTk1MWVhMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0VW5pb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRVbmlvbi5oCkBAIC0zODUsNyAr
Mzg1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydGVyPElETFVu
aW9uPFQuLi4+PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CiAK
LSAgICB1c2luZyBTZXF1ZW5jZSA9IGJyaWdhbmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRy
ZGlmZl90PDA+LCBXVEY6OnZhcmlhbnRfc2l6ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47
CisgICAgdXNpbmcgU2VxdWVuY2UgPSBicmlnYW5kOjptYWtlX3NlcXVlbmNlPGJyaWdhbmQ6OnB0
cmRpZmZfdDwwPiwgc3RkOjp2YXJpYW50X3NpemU8SW1wbGVtZW50YXRpb25UeXBlPjo6dmFsdWU+
OwogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNv
bnN0IEltcGxlbWVudGF0aW9uVHlwZSYgdmFyaWFudCkKICAgICB7CkBAIC0zOTYsNyArMzk2LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuaW9uPFQu
Li4+PiB7CiAgICAgICAgICAgICB1c2luZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJl
ZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7CiAgICAgICAgICAgICBpZiAoSTo6
dmFsdWUgPT0gaW5kZXgpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoIXJldHVyblZhbHVlKTsK
LSAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3Qs
IEk+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIFdURjo6Z2V0PEk6OnZhbHVl
Pih2YXJpYW50KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0b0pTPGJyaWdhbmQ6
OmF0PFR5cGVMaXN0LCBJPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBzdGQ6
OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9KTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0V2ViR0wu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0V2ViR0wuY3BwCmlu
ZGV4IGRkMjk2ODhjMmJjNmM4ODAwNTRlMTg3ZjFkMzA5YWE4OTA2MmU4ODYuLjkyMmFhNzEzN2Y5
NDUyMjQwMGJhOTBjZDk3ZTdlODVmNTI5YWViNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFdlYkdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRXZWJHTC5jcHAKQEAgLTgwLDQ5ICs4MCwzOSBAQCB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogSlNWYWx1ZSBjb252ZXJ0VG9KU1ZhbHVlKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBj
b25zdCBXZWJHTEFueSYgYW55KQogewogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGFueSwKLSAg
ICAgICAgW10gKHN0ZDo6bnVsbHB0cl90KSB7CisgICAgICAgIFtdIChzdGQ6Om51bGxwdHJfdCkg
LT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgICAgIH0sCi0g
ICAgICAgIFtdIChib29sIHZhbHVlKSB7CisgICAgICAgIH0sIFtdIChib29sIHZhbHVlKSAtPiBK
U1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4odmFsdWUpOwotICAgICAgICB9
LAotICAgICAgICBbXSAoaW50IHZhbHVlKSB7CisgICAgICAgIH0sIFtdIChpbnQgdmFsdWUpIC0+
IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsKLSAgICAgICAg
fSwKLSAgICAgICAgW10gKHVuc2lnbmVkIHZhbHVlKSB7CisgICAgICAgIH0sIFtdICh1bnNpZ25l
ZCB2YWx1ZSkgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUp
OwotICAgICAgICB9LAotICAgICAgICBbXSAobG9uZyBsb25nIHZhbHVlKSB7CisgICAgICAgIH0s
IFtdIChsb25nIGxvbmcgdmFsdWUpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKHZhbHVlKTsKLSAgICAgICAgfSwKLSAgICAgICAgW10gKGZsb2F0IHZhbHVlKSB7Cisg
ICAgICAgIH0sIFtdIChmbG9hdCB2YWx1ZSkgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1
cm4ganNOdW1iZXIodmFsdWUpOwotICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpIHsKKyAgICAgICAgfSwgWyZdIChjb25zdCBTdHJpbmcmIHZhbHVlKSAtPiBKU1Zh
bHVlIHsKICAgICAgICAgICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShsZXhpY2FsR2xvYmFs
T2JqZWN0LnZtKCksIHZhbHVlKTsKLSAgICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBWZWN0
b3I8Ym9vbD4mIHZhbHVlcykgeworICAgICAgICB9LCBbJl0gKGNvbnN0IFZlY3Rvcjxib29sPiYg
dmFsdWVzKSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGxp
c3Q7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHZhbHVlIDogdmFsdWVzKQogICAgICAgICAgICAg
ICAgIGxpc3QuYXBwZW5kKGpzQm9vbGVhbih2YWx1ZSkpOwogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIWxpc3QuaGFzT3ZlcmZsb3dlZCgpKTsKICAgICAgICAgICAgIHJldHVybiBjb25zdHJ1
Y3RBcnJheSgmZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxKU0M6OkFycmF5QWxsb2NhdGlvblBy
b2ZpbGUqPihudWxscHRyKSwgbGlzdCk7Ci0gICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29uc3Qg
VmVjdG9yPGludD4mIHZhbHVlcykgeworICAgICAgICB9LCBbJl0gKGNvbnN0IFZlY3RvcjxpbnQ+
JiB2YWx1ZXMpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIg
bGlzdDsKICAgICAgICAgICAgIGZvciAoYXV0byYgdmFsdWUgOiB2YWx1ZXMpCiAgICAgICAgICAg
ICAgICAgbGlzdC5hcHBlbmQoanNOdW1iZXIodmFsdWUpKTsKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFsaXN0Lmhhc092ZXJmbG93ZWQoKSk7CiAgICAgICAgICAgICByZXR1cm4gY29uc3Ry
dWN0QXJyYXkoJmdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8SlNDOjpBcnJheUFsbG9jYXRpb25Q
cm9maWxlKj4obnVsbHB0ciksIGxpc3QpOwotICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0
IFZlY3Rvcjx1bnNpZ25lZD4mIHZhbHVlcykgeworICAgICAgICB9LCBbJl0gKGNvbnN0IFZlY3Rv
cjx1bnNpZ25lZD4mIHZhbHVlcykgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICBNYXJrZWRBcmd1
bWVudEJ1ZmZlciBsaXN0OwogICAgICAgICAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IHZhbHVlcykK
ICAgICAgICAgICAgICAgICBsaXN0LmFwcGVuZChqc051bWJlcih2YWx1ZSkpOwogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIWxpc3QuaGFzT3ZlcmZsb3dlZCgpKTsKICAgICAgICAgICAgIHJl
dHVybiBjb25zdHJ1Y3RBcnJheSgmZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxKU0M6OkFycmF5
QWxsb2NhdGlvblByb2ZpbGUqPihudWxscHRyKSwgbGlzdCk7Ci0gICAgICAgIH0sCi0gICAgICAg
IFsmXSAoY29uc3QgUmVmUHRyPEZsb2F0MzJBcnJheT4mIGFycmF5KSB7CisgICAgICAgIH0sIFsm
XSAoY29uc3QgUmVmUHRyPEZsb2F0MzJBcnJheT4mIGFycmF5KSB7CiAgICAgICAgICAgICByZXR1
cm4gdG9KUygmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmdsb2JhbE9iamVjdCwgYXJyYXkuZ2V0KCkp
OwogICAgICAgICB9LAogICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxJbnQzMkFycmF5PiYgYXJy
YXkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudE1l
dGhvZENoYW5nZUV2ZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
UGF5bWVudE1ldGhvZENoYW5nZUV2ZW50Q3VzdG9tLmNwcAppbmRleCAwYmQxZDRkMWFkODU1MmVk
NzQzYmNhYjJlMWI4ZjJhMzBkNjA1OWYwLi5lYWJlYmIzMjgxYWVlM2VkOWIwY2FhN2FiZGQyZWQw
NTZhM2RjMTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BheW1l
bnRNZXRob2RDaGFuZ2VFdmVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnRDdXN0b20uY3BwCkBAIC0zMyw5ICszMyw5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEpTQzo6SlNWYWx1ZSBKU1BheW1lbnRNZXRob2RDaGFu
Z2VFdmVudDo6bWV0aG9kRGV0YWlscyhKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0KSBjb25zdAogewogICAgIHJldHVybiBjYWNoZWRQcm9wZXJ0eVZhbHVlKGxleGljYWxH
bG9iYWxPYmplY3QsICp0aGlzLCB3cmFwcGVkKCkuY2FjaGVkTWV0aG9kRGV0YWlscygpLCBbdGhp
cywgJmxleGljYWxHbG9iYWxPYmplY3RdIHsKLSAgICAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24o
d3JhcHBlZCgpLm1ldGhvZERldGFpbHMoKSwgW10oSlNDOjpKU1ZhbHVlIG1ldGhvZERldGFpbHMp
IHsKKyAgICAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24od3JhcHBlZCgpLm1ldGhvZERldGFpbHMo
KSwgW10oSlNDOjpKU1ZhbHVlIG1ldGhvZERldGFpbHMpIC0+IEpTQzo6SlNWYWx1ZSB7CiAgICAg
ICAgICAgICByZXR1cm4gbWV0aG9kRGV0YWlscyA/IG1ldGhvZERldGFpbHMgOiBKU0M6OmpzTnVs
bCgpOwotICAgICAgICB9LCBbJmxleGljYWxHbG9iYWxPYmplY3RdKGNvbnN0IFBheW1lbnRNZXRo
b2RDaGFuZ2VFdmVudDo6TWV0aG9kRGV0YWlsc0Z1bmN0aW9uJiBmdW5jdGlvbikgeworICAgICAg
ICB9LCBbJmxleGljYWxHbG9iYWxPYmplY3RdKGNvbnN0IFBheW1lbnRNZXRob2RDaGFuZ2VFdmVu
dDo6TWV0aG9kRGV0YWlsc0Z1bmN0aW9uJiBmdW5jdGlvbikgLT4gSlNDOjpKU1ZhbHVlIHsKICAg
ICAgICAgICAgIHJldHVybiBmdW5jdGlvbihsZXhpY2FsR2xvYmFsT2JqZWN0KS5nZXQoKTsKICAg
ICAgICAgfSk7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1ZhbHVlSW5XcmFwcGVkT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1ZhbHVlSW5XcmFwcGVkT2JqZWN0LmgKaW5kZXggZDdlNTJiMWIxZDE2ZDJjYjE3MjI5NDNhMmI2
ZTA4ZGE1MjQzZDMzZi4uZTRjY2RiYTYyZDg0ODNhNzQwY2E3YTA0M2QyYmFlYzljYzUxNmFkYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBlZE9i
amVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmFsdWVJbldyYXBwZWRP
YmplY3QuaApAQCAtODIsNyArODIsNyBAQCBpbmxpbmUgSlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6
b3BlcmF0b3IgSlNDOjpKU1ZhbHVlKCkgY29uc3QKIHsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hP
bihtX3ZhbHVlLCBbXSAoSlNDOjpKU1ZhbHVlIHZhbHVlKSB7CiAgICAgICAgIHJldHVybiB2YWx1
ZTsKLSAgICB9LCBbXSAoY29uc3QgV2VhayYgdmFsdWUpIHsKKyAgICB9LCBbXSAoY29uc3QgV2Vh
ayYgdmFsdWUpIC0+IEpTQzo6SlNWYWx1ZSB7CiAgICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsK
ICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJv
cGVydHlQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBh
cnNlci5jcHAKaW5kZXggOWM5M2EyMDcyNDg5OWU2MmU0NzdkZmE0YTQzYzM0ODI2MDY4ZGI5ZC4u
NDQ4Y2QyOGM5MTY2NDgyNThiMWU1OGJlN2ViZDAzNWMzYjRhNGRlYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKQEAgLTkxOCw3ICs5MTgs
NyBAQCBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFZhcmlhbnRD
U1MyMShDU1NQYXJzZXJUb2tlblJhbmdlJiByYQogc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gY29uc3VtZUZvbnRXZWlnaHQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7CiAg
ICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRXZWlnaHRSYXcocmFuZ2UpKSB7Ci0gICAg
ICAgIHJldHVybiBzd2l0Y2hPbigqcmVzdWx0LCBbXSAoQ1NTVmFsdWVJRCB2YWx1ZUlEKSB7Cisg
ICAgICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKCpyZXN1bHQsIFtdIChDU1NWYWx1ZUlEIHZhbHVl
SUQpIHsKICAgICAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZUlEKTsKICAgICAgICAgfSwgW10gKGRvdWJsZSB3ZWlnaHRO
dW1iZXIpIHsKICAgICAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZVZhbHVlKHdlaWdodE51bWJlciwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3R5cGVkb20vQ1NTVW5wYXJzZWRWYWx1ZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvdHlwZWRvbS9DU1NVbnBhcnNlZFZhbHVlLmNwcAppbmRleCA4NjJm
NjljNTBiOWNhZjI5YTUwODg4YzVhZjNhNzFhYmQ3Yjk1OWM4Li5lNzYxYmViZGZmZjVjNTdiMGVm
NjgwOWUyNmRmMTJkYmVkMzdjMGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvdHlw
ZWRvbS9DU1NVbnBhcnNlZFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvdHlwZWRv
bS9DU1NVbnBhcnNlZFZhbHVlLmNwcApAQCAtMTMwLDcgKzEzMCw3IEBAIFN0cmluZyBDU1NVbnBh
cnNlZFZhbHVlOjp0b1N0cmluZygpIGNvbnN0CiB2b2lkIENTU1VucGFyc2VkVmFsdWU6OnNlcmlh
bGl6ZShTdHJpbmdCdWlsZGVyJiBidWlsZGVyKSBjb25zdAogewogICAgIGZvciAoYXV0byYgc2Vn
bWVudCA6IG1fc2VnbWVudHMpIHsKLSAgICAgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9y
KFsmXSAoY29uc3QgU3RyaW5nJiB2YWx1ZSkgeworICAgICAgICBzdGQ6OnZpc2l0KFdURjo6bWFr
ZVZpc2l0b3IoWyZdIChjb25zdCBTdHJpbmcmIHZhbHVlKSB7CiAgICAgICAgICAgICBidWlsZGVy
LmFwcGVuZCh2YWx1ZSk7CiAgICAgICAgIH0sIFsmXSAoY29uc3QgUmVmUHRyPENTU09NVmFyaWFi
bGVSZWZlcmVuY2VWYWx1ZT4mIHZhbHVlKSB7CiAgICAgICAgICAgICB2YWx1ZS0+c2VyaWFsaXpl
KGJ1aWxkZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKaW5kZXggZTBiYjEwOGU1ODk5
Mzg4YWUyMDQ2NGZlM2VlZjg4ZmY4ZTM4OTNmOS4uNWZjMDI1NmUzNDQyMzNhNzcyMjcwYzY3NDdh
Mzg3NDBmYzI0NDc3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCkBAIC0xMjMsNyAr
MTIzLDcgQEAgdm9pZCBFdmVudFRhcmdldDo6YWRkRXZlbnRMaXN0ZW5lckZvckJpbmRpbmdzKGNv
bnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgUmVmUHQKICAgICAgICAgYWRkRXZlbnRMaXN0ZW5l
cihldmVudFR5cGUsIGxpc3RlbmVyLnJlbGVhc2VOb25OdWxsKCksIGNhcHR1cmUpOwogICAgIH0p
OwogCi0gICAgV1RGOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0KHZp
c2l0b3IsIHZhcmlhbnQpOwogfQogCiB2b2lkIEV2ZW50VGFyZ2V0OjpyZW1vdmVFdmVudExpc3Rl
bmVyRm9yQmluZGluZ3MoY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4mJiBsaXN0ZW5lciwgRXZlbnRMaXN0ZW5lck9wdGlvbnNPckJvb2xlYW4mJiB2YXJp
YW50KQpAQCAtMTM3LDcgKzEzNyw3IEBAIHZvaWQgRXZlbnRUYXJnZXQ6OnJlbW92ZUV2ZW50TGlz
dGVuZXJGb3JCaW5kaW5ncyhjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIFJlCiAgICAgICAg
IHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCAqbGlzdGVuZXIsIGNhcHR1cmUpOwogICAg
IH0pOwogCi0gICAgV1RGOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0
KHZpc2l0b3IsIHZhcmlhbnQpOwogfQogCiBib29sIEV2ZW50VGFyZ2V0OjpyZW1vdmVFdmVudExp
c3RlbmVyKGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYgbGlzdGVu
ZXIsIGNvbnN0IEV2ZW50TGlzdGVuZXJPcHRpb25zJiBvcHRpb25zKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVz
c2FnZUV2ZW50LmNwcAppbmRleCAzMmNmZDBkNjdmMzg0YjA3YWUzZjcwYWY3Y2M2ZTViNWQ1MTAx
YjRjLi5lNGYxOTRiZmEyYjJmMjg5YTJmOGQzM2QxMjkxNzIzMzc3ZWVkY2MxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTWVzc2FnZUV2ZW50LmNwcApAQCAtMTI5LDE1ICsxMjksMTUgQEAgRXZlbnRJbnRlcmZh
Y2UgTWVzc2FnZUV2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiAKIHNpemVfdCBNZXNzYWdl
RXZlbnQ6Om1lbW9yeUNvc3QoKSBjb25zdAogewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1f
ZGF0YSwgW10gKGNvbnN0IEpTVmFsdWVJbldyYXBwZWRPYmplY3QmKSB7CisgICAgcmV0dXJuIFdU
Rjo6c3dpdGNoT24obV9kYXRhLCBbXSAoY29uc3QgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYpIC0+
IHNpemVfdCB7CiAgICAgICAgIHJldHVybiAwOwotICAgIH0sIFtdIChjb25zdCBSZWY8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiYgZGF0YSkgeworICAgIH0sIFtdIChjb25zdCBSZWY8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiYgZGF0YSkgLT4gc2l6ZV90IHsKICAgICAgICAgcmV0dXJuIGRhdGEtPm1l
bW9yeUNvc3QoKTsKLSAgICB9LCBbXSAoY29uc3QgU3RyaW5nJiBzdHJpbmcpIHsKKyAgICB9LCBb
XSAoY29uc3QgU3RyaW5nJiBzdHJpbmcpIC0+IHNpemVfdCB7CiAgICAgICAgIHJldHVybiBzdHJp
bmcuc2l6ZUluQnl0ZXMoKTsKLSAgICB9LCBbXSAoY29uc3QgUmVmPEJsb2I+JiBibG9iKSB7Cisg
ICAgfSwgW10gKGNvbnN0IFJlZjxCbG9iPiYgYmxvYikgLT4gc2l6ZV90IHsKICAgICAgICAgcmV0
dXJuIGJsb2ItPnNpemUoKTsKLSAgICB9LCBbXSAoY29uc3QgUmVmPEFycmF5QnVmZmVyPiYgYnVm
ZmVyKSB7CisgICAgfSwgW10gKGNvbnN0IFJlZjxBcnJheUJ1ZmZlcj4mIGJ1ZmZlcikgLT4gc2l6
ZV90IHsKICAgICAgICAgcmV0dXJuIGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOwogICAgIH0pOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDU2NTc4MjdkOWE2NmJiM2I3M2VmYjU1Zjkz
MTYxZWU4MzhiNDVhMzAuLjRkNzhkZDFiZTU2Njg5MWI0MmEyYWRmNTJmZTU4NWQxZTNjY2I0MWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTIyNzMsNyArMjI3Myw3IEBAIHZvaWQg
RWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlv
bikKIAogICAgIGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkpIHsKICAgICAgICAgYXV0
byBmb3VuZEl0ZW0gPSBUZXh0Q2hlY2tpbmdIZWxwZXIoKmNsaWVudCgpLCBzcGVsbGluZ1NlYXJj
aFJhbmdlKS5maW5kRmlyc3RNaXNzcGVsbGVkV29yZE9yVW5ncmFtbWF0aWNhbFBocmFzZShpc0dy
YW1tYXJDaGVja2luZ0VuYWJsZWQoKSk7Ci0gICAgICAgIGlmIChhdXRvIHdvcmQgPSBXVEY6Omdl
dF9pZjxUZXh0Q2hlY2tpbmdIZWxwZXI6Ok1pc3NwZWxsZWRXb3JkPihmb3VuZEl0ZW0pKQorICAg
ICAgICBpZiAoYXV0byB3b3JkID0gc3RkOjpnZXRfaWY8VGV4dENoZWNraW5nSGVscGVyOjpNaXNz
cGVsbGVkV29yZD4oJmZvdW5kSXRlbSkpCiAgICAgICAgICAgICBtaXNzcGVsbGVkV29yZCA9IFdU
Rk1vdmUoKndvcmQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB1bmdyYW1tYXRpY2FsUGhy
YXNlID0gV1RGOjpnZXQ8VGV4dENoZWNraW5nSGVscGVyOjpVbmdyYW1tYXRpY2FsUGhyYXNlPihX
VEZNb3ZlKGZvdW5kSXRlbSkpOwpAQCAtMjMwMCw3ICsyMzAwLDcgQEAgdm9pZCBFZGl0b3I6OmFk
dmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAg
ICAKICAgICAgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgewogICAgICAgICAg
ICAgYXV0byBmb3VuZEl0ZW0gPSBUZXh0Q2hlY2tpbmdIZWxwZXIoKmNsaWVudCgpLCBzcGVsbGlu
Z1NlYXJjaFJhbmdlKS5maW5kRmlyc3RNaXNzcGVsbGVkV29yZE9yVW5ncmFtbWF0aWNhbFBocmFz
ZShpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSk7Ci0gICAgICAgICAgICBpZiAoYXV0byB3b3Jk
ID0gV1RGOjpnZXRfaWY8VGV4dENoZWNraW5nSGVscGVyOjpNaXNzcGVsbGVkV29yZD4oZm91bmRJ
dGVtKSkKKyAgICAgICAgICAgIGlmIChhdXRvIHdvcmQgPSBzdGQ6OmdldF9pZjxUZXh0Q2hlY2tp
bmdIZWxwZXI6Ok1pc3NwZWxsZWRXb3JkPigmZm91bmRJdGVtKSkKICAgICAgICAgICAgICAgICBt
aXNzcGVsbGVkV29yZCA9IFdURk1vdmUoKndvcmQpOwogICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgIHVuZ3JhbW1hdGljYWxQaHJhc2UgPSBXVEY6OmdldDxUZXh0Q2hlY2tpbmdIZWxw
ZXI6OlVuZ3JhbW1hdGljYWxQaHJhc2U+KFdURk1vdmUoZm91bmRJdGVtKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCmlu
ZGV4IGZjOWQ3MTU1NDM3M2ZkYzc4NWRjYTQ2Y2ZkNWVkZjhhZjJhNTM1MjcuLmMzNzJhZWNlZjRl
OTdmYjNiMWMxM2ZlZWJhYTVkNzRmMTg5ZGNlMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC01MSw3ICs1MSw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogaW5saW5lIGJvb2wgVGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXI6OkV4Y2x1c2lvblJ1bGU6Om1hdGNoKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIHN3aXRjaE9uKHJ1bGUsIFsmZWxlbWVudF0gKEVsZW1lbnRSdWxl
IHJ1bGUpIHsKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihydWxlLCBbJmVsZW1lbnRdIChFbGVt
ZW50UnVsZSBydWxlKSB7CiAgICAgICAgIHJldHVybiBydWxlLmxvY2FsTmFtZSA9PSBlbGVtZW50
LmxvY2FsTmFtZSgpOwogICAgIH0sIFsmZWxlbWVudF0gKEF0dHJpYnV0ZVJ1bGUgcnVsZSkgewog
ICAgICAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShlbGVtZW50LmdldEF0dHJpYnV0
ZShydWxlLm5hbWUpLCBydWxlLnZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvVVJMU2VhcmNoUGFyYW1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVVJMU2VhcmNoUGFy
YW1zLmNwcAppbmRleCBiMDdiNzgwOGRmYWQ1OWMzZDU0MDlmNTcyMDJhN2IxMjkxODIyYjJmLi5m
NTRmNDFlMTljZjdhN2U0ZDU1NDBjNjQ2NjYyZjhlYzVmYmQzZDM3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL1VSTFNlYXJjaFBhcmFtcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9VUkxTZWFyY2hQYXJhbXMuY3BwCkBAIC01MSwxMiArNTEsMTIgQEAgRXhjZXB0aW9uT3I8
UmVmPFVSTFNlYXJjaFBhcmFtcz4+IFVSTFNlYXJjaFBhcmFtczo6Y3JlYXRlKFZhcmlhbnQ8VmVj
dG9yPFZlY3RvcjwKICAgICAgICAgICAgIHBhaXJzLmFwcGVuZCh7cGFpclswXSwgcGFpclsxXX0p
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVSTFNlYXJjaFBhcmFt
cyhXVEZNb3ZlKHBhaXJzKSkpOwotICAgIH0sIFsmXShjb25zdCBWZWN0b3I8V1RGOjpLZXlWYWx1
ZVBhaXI8U3RyaW5nLCBTdHJpbmc+PiYgcGFpcnMpIHsKKyAgICB9LCBbJl0oY29uc3QgVmVjdG9y
PFdURjo6S2V5VmFsdWVQYWlyPFN0cmluZywgU3RyaW5nPj4mIHBhaXJzKSAtPiBFeGNlcHRpb25P
cjxSZWY8VVJMU2VhcmNoUGFyYW1zPj4gewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBV
UkxTZWFyY2hQYXJhbXMocGFpcnMpKTsKLSAgICB9LCBbJl0oY29uc3QgU3RyaW5nJiBzdHJpbmcp
IHsKKyAgICB9LCBbJl0oY29uc3QgU3RyaW5nJiBzdHJpbmcpIC0+IEV4Y2VwdGlvbk9yPFJlZjxV
UkxTZWFyY2hQYXJhbXM+PiB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVSTFNlYXJj
aFBhcmFtcyhzdHJpbmcsIG51bGxwdHIpKTsKICAgICB9KTsKLSAgICByZXR1cm4gV1RGOjp2aXNp
dCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICByZXR1cm4gc3RkOjp2aXNpdCh2aXNpdG9yLCB2YXJp
YW50KTsKIH0KIAogU3RyaW5nIFVSTFNlYXJjaFBhcmFtczo6Z2V0KGNvbnN0IFN0cmluZyYgbmFt
ZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKaW5kZXggMzVjYzc3MWM5Y2ZhZDJhYjU5NDAxZmU1MzEz
YTRlYTY2NDE0YWZhZi4uYjI4MjM4NTZkNzA4MjM1ZjU0ZDk0NDAyOGQ5NWE2ZTRjODNkNGY5MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5jcHAKQEAgLTE3NTgsNyArMTc1OCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIHN0ZDo6b3B0aW9uYWw8
QnVmZmVyCiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdURjo6dmlz
aXQoWyZdKGF1dG8mIGRhdGEpIHsKKyAgICBzdGQ6OnZpc2l0KFsmXShhdXRvJiBkYXRhKSB7CiAg
ICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRhdGEuZ2V0KCkpKSB7CiAg
ICAgICAgICAgICB0aGlzLT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHRHTDo6SU5W
QUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAiaW52YWxpZCBidWZmZXIiKTsKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTE3ODUsNyArMTc4NSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6YnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBXVEY6OnZpc2l0KFsmXShhdXRvJiBkYXRhKSB7
CisgICAgc3RkOjp2aXNpdChbJl0oYXV0byYgZGF0YSkgewogICAgICAgICBpZiAoIWJ1ZmZlci0+
YXNzb2NpYXRlQnVmZmVyU3ViRGF0YShzdGF0aWNfY2FzdDxHQ0dMaW50cHRyPihvZmZzZXQpLCBk
YXRhLmdldCgpKSkgewogICAgICAgICAgICAgdGhpcy0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJEYXRhIiwgIm9mZnNldCBvdXQg
b2YgcmFuZ2UiKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTQ4MTMsNyArNDgxMyw3IEBAIElu
dFJlY3QgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VGV4SW1hZ2VTb3VyY2VTaXplKFRl
eEltYWdlU291cmNlJiBzb3VyY2UpCiAgICAgfQogICAgICk7CiAKLSAgICBFeGNlcHRpb25PcjxJ
bnRSZWN0PiByZXN1bHQgPSBXVEY6OnZpc2l0KHZpc2l0b3IsIHNvdXJjZSk7CisgICAgRXhjZXB0
aW9uT3I8SW50UmVjdD4gcmVzdWx0ID0gc3RkOjp2aXNpdCh2aXNpdG9yLCBzb3VyY2UpOwogICAg
IGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBzZW50aW5lbEVtcHR5
UmVjdCgpOwogICAgIHJldHVybiByZXN1bHQucmV0dXJuVmFsdWUoKTsKQEAgLTUwNzQsNyArNTA3
NCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleElt
YWdlU291cmNlSGVscGVyKFRleEltYWdlRnVuY3RpCiAjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQog
ICAgICk7CiAKLSAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBzb3VyY2UpOworICAgIHJl
dHVybiBzdGQ6OnZpc2l0KHZpc2l0b3IsIHNvdXJjZSk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dGV4SW1hZ2VBcnJheUJ1ZmZlclZpZXdIZWxwZXIoVGV4SW1hZ2VGdW5j
dGlvbklEIGZ1bmN0aW9uSUQsIEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGlu
dCBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dM
c2l6ZWkgZGVwdGgsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5
cGUsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHpvZmZzZXQsIFJl
ZlB0cjxBcnJheUJ1ZmZlclZpZXc+JiYgcGl4ZWxzLCBOdWxsRGlzcG9zaXRpb24gbnVsbERpc3Bv
c2l0aW9uLCBHQ0dMdWludCBzcmNPZmZzZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDYW52YXMuY3BwCmluZGV4IGUyOTk2Y2I5MjVjYzVlYTRkM2UyOGQxYzVkOTU2MzA1
ZjIwZGVlNWYuLjQyZTZlMTkzNjE1MGI5NTNhNGEyNTMwMDBkMzMyNzY4OTEyOTZiZGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCkBAIC0xMTEsNyAr
MTExLDcgQEAgSW5zcGVjdG9yQ2FudmFzOjpJbnNwZWN0b3JDYW52YXMoQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCYgY29udGV4dCkKIAogQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogSW5zcGVjdG9yQ2Fu
dmFzOjpjYW52YXNDb250ZXh0KCkgY29uc3QKIHsKLSAgICBpZiAoYXV0byogY29udGV4dFdyYXBw
ZXIgPSBXVEY6OmdldF9pZjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQ+PihtX2NvbnRleHQpKQorICAgIGlmIChhdXRvKiBjb250ZXh0V3JhcHBlciA9IHN0ZDo6
Z2V0X2lmPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4+KCZt
X2NvbnRleHQpKQogICAgICAgICByZXR1cm4gJmNvbnRleHRXcmFwcGVyLT5nZXQoKTsKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTEyNCw4ICsxMjQsNyBAQCBIVE1MQ2FudmFzRWxlbWVudCog
SW5zcGVjdG9yQ2FudmFzOjpjYW52YXNFbGVtZW50KCkgY29uc3QKICAgICAgICAgICAgIGlmIChp
czxIVE1MQ2FudmFzRWxlbWVudD4oY29udGV4dC5jYW52YXNCYXNlKCkpKQogICAgICAgICAgICAg
ICAgIHJldHVybiAmZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KGNvbnRleHQuY2FudmFzQmFz
ZSgpKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9LAotICAgICAgICBb
XSAoTW9ub3N0YXRlKSB7CisgICAgICAgIH0sIFtdIChNb25vc3RhdGUpIC0+IEhUTUxDYW52YXNF
bGVtZW50KiB7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICB9CkBAIC0xMzksOCArMTM4LDcgQEAgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogSW5zcGVjdG9yQ2FudmFzOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
Y29uc3QKICAgICAgICAgW10gKHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dD4gY29udGV4dFdyYXBwZXIpIHsKICAgICAgICAgICAgIGF1dG8mIGNvbnRleHQgPSBj
b250ZXh0V3JhcHBlci5nZXQoKTsKICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNhbnZhc0Jh
c2UoKS5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgICAgIH0sCi0gICAgICAgIFtdIChN
b25vc3RhdGUpIHsKKyAgICAgICAgfSwgW10gKE1vbm9zdGF0ZSkgLT4gU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogewogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQpAQCAtODkzLDggKzg5MSw3IEBAIFJlZjxQcm90
b2NvbDo6Q2FudmFzOjpDYW52YXM+IEluc3BlY3RvckNhbnZhczo6YnVpbGRPYmplY3RGb3JDYW52
YXMoYm9vbCBjYXB0dXJlCiAgICAgICAgICAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDYW52YXM6
OkNvbnRleHRUeXBlOjpXZWJHTDI7CiAjZW5kaWYKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7Ci0gICAgICAgIH0sCi0gICAgICAgIFtdIChNb25vc3RhdGUpIHsKKyAgICAgICAgfSwg
W10gKE1vbm9zdGF0ZSkgLT4gQ29udGV4dFR5cGVUeXBlIHsKICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAgICAg
fQpAQCAtOTIwLDggKzkxNyw3IEBAIFJlZjxQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IEluc3Bl
Y3RvckNhbnZhczo6YnVpbGRPYmplY3RGb3JDYW52YXMoYm9vbCBjYXB0dXJlCiAgICAgYXV0byBj
b250ZXh0QXR0cmlidXRlcyA9IFdURjo6c3dpdGNoT24obV9jb250ZXh0LAogICAgICAgICBbXSAo
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiBjb250ZXh0V3Jh
cHBlcikgewogICAgICAgICAgICAgcmV0dXJuIGJ1aWxkT2JqZWN0Rm9yQ2FudmFzQ29udGV4dEF0
dHJpYnV0ZXMoY29udGV4dFdyYXBwZXIpOwotICAgICAgICB9LAotICAgICAgICBbXSAoTW9ub3N0
YXRlKSB7CisgICAgICAgIH0sIFtdIChNb25vc3RhdGUpIC0+IFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDYW52YXM6OkNvbnRleHRBdHRyaWJ1dGVzPiB7CiAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CkBA
IC0xMDQwLDggKzEwMzYsOCBAQCBpbnQgSW5zcGVjdG9yQ2FudmFzOjppbmRleEZvckRhdGEoRHVw
bGljYXRlRGF0YVZhcmlhbnQgZGF0YSkKICAgICAgICAgaWYgKGRhdGEgPT0gaXRlbSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIGF1dG8gdHJhY2VBID0gV1RGOjpnZXRfaWY8
UmVmUHRyPFNjcmlwdENhbGxTdGFjaz4+KGRhdGEpOwotICAgICAgICBhdXRvIHRyYWNlQiA9IFdU
Rjo6Z2V0X2lmPFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+PihpdGVtKTsKKyAgICAgICAgYXV0byB0
cmFjZUEgPSBzdGQ6OmdldF9pZjxSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPj4oJmRhdGEpOworICAg
ICAgICBhdXRvIHRyYWNlQiA9IHN0ZDo6Z2V0X2lmPFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+Pigm
aXRlbSk7CiAgICAgICAgIGlmICh0cmFjZUEgJiYgKnRyYWNlQSAmJiB0cmFjZUIgJiYgKnRyYWNl
QikKICAgICAgICAgICAgIHJldHVybiAoKnRyYWNlQSktPmlzRXF1YWwoKCp0cmFjZUIpLmdldCgp
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclNoYWRl
clByb2dyYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclNoYWRlclBy
b2dyYW0uY3BwCmluZGV4IGEzMGUyMTY0M2ExNTdhODJjNWRkN2U1YjRkODU4NDBiNzRmYTUwMTYu
LmJmYjMzYWM3N2Q1Yzk2ZWMxNTZjMTAwOGJkNWY4ZGE4MjQ1MWE5ZGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5jcHAKQEAgLTY2
LDcgKzY2LDcgQEAgSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbTo6SW5zcGVjdG9yU2hhZGVyUHJvZ3Jh
bShXZWJHTFByb2dyYW0mIHByb2dyYW0sIEluc3BlY3RvckMKICNpZiBFTkFCTEUoV0VCR0wpCiBX
ZWJHTFByb2dyYW0qIEluc3BlY3RvclNoYWRlclByb2dyYW06OnByb2dyYW0oKSBjb25zdAogewot
ICAgIGlmIChhdXRvKiBwcm9ncmFtV3JhcHBlciA9IFdURjo6Z2V0X2lmPHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8V2ViR0xQcm9ncmFtPj4obV9wcm9ncmFtKSkKKyAgICBpZiAoYXV0byogcHJvZ3Jh
bVdyYXBwZXIgPSBzdGQ6OmdldF9pZjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFdlYkdMUHJvZ3Jh
bT4+KCZtX3Byb2dyYW0pKQogICAgICAgICByZXR1cm4gJnByb2dyYW1XcmFwcGVyLT5nZXQoKTsK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKaW5kZXggN2Y4MDZk
NGZjODFjZDJiMDQzMjJiM2QwZDgwYmU0NDQwNGJiZDA2ZS4uOWU2MTAwMjRmZWI1MzRjYTMxMjY2
ODU5NWUwOWRmNDg5OTA4MjY5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKQEAgLTE2Nyw3ICsx
NjcsNyBAQCBzdGF0aWMgUmVmPFByb3RvY29sOjpJbmRleGVkREI6OktleVBhdGg+IGtleVBhdGhG
cm9tSURCS2V5UGF0aChjb25zdCBzdGQ6Om9wdGlvbgogICAgICAgICBrZXlQYXRoLT5zZXRBcnJh
eShXVEZNb3ZlKGFycmF5KSk7CiAgICAgICAgIHJldHVybiBrZXlQYXRoOwogICAgIH0pOwotICAg
IHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIGlkYktleVBhdGgudmFsdWUoKSk7CisgICAgcmV0
dXJuIHN0ZDo6dmlzaXQodmlzaXRvciwgaWRiS2V5UGF0aC52YWx1ZSgpKTsKIH0KIAogc3RhdGlj
IFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb25Gb3JEYXRhYmFzZShJREJEYXRhYmFz
ZSogaWRiRGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBJREJUcmFuc2Fj
dGlvbk1vZGUgbW9kZSA9IElEQlRyYW5zYWN0aW9uTW9kZTo6UmVhZG9ubHkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAppbmRleCBmZDllYzc1OTczN2Q0Yzk3NTk4MzFl
NzcyNDM1OWJlMmU4NjYyNDMwLi5lNmRjZjk5MzBlMzIxMTExNDBjM2NjODg5MmM5ZDM3ZTMyYzEx
MjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKQEAgLTM0MSwy
MCArMzQxLDIwIEBAIGJvb2wgU2hhcmVkQnVmZmVyOjppbnRlcm5hbGx5Q29uc2lzdGVudCgpIGNv
bnN0CiBjb25zdCB1aW50OF90KiBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpkYXRhKCkgY29u
c3QKIHsKICAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1ha2VWaXNpdG9yKAotICAgICAgICBbXShj
b25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEpIHsgcmV0dXJuIGRhdGEuZGF0YSgpOyB9LAorICAg
ICAgICBbXShjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEpIC0+IGNvbnN0IHVpbnQ4X3QqIHsg
cmV0dXJuIGRhdGEuZGF0YSgpOyB9LAogI2lmIFVTRShDRikKLSAgICAgICAgW10oY29uc3QgUmV0
YWluUHRyPENGRGF0YVJlZj4mIGRhdGEpIHsgcmV0dXJuIENGRGF0YUdldEJ5dGVQdHIoZGF0YS5n
ZXQoKSk7IH0sCisgICAgICAgIFtdKGNvbnN0IFJldGFpblB0cjxDRkRhdGFSZWY+JiBkYXRhKSAt
PiBjb25zdCB1aW50OF90KiB7IHJldHVybiBDRkRhdGFHZXRCeXRlUHRyKGRhdGEuZ2V0KCkpOyB9
LAogI2VuZGlmCiAjaWYgVVNFKEdMSUIpCi0gICAgICAgIFtdKGNvbnN0IEdSZWZQdHI8R0J5dGVz
PiYgZGF0YSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGdfYnl0ZXNfZ2V0
X2RhdGEoZGF0YS5nZXQoKSwgbnVsbHB0cikpOyB9LAorICAgICAgICBbXShjb25zdCBHUmVmUHRy
PEdCeXRlcz4mIGRhdGEpIC0+IGNvbnN0IHVpbnQ4X3QqIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNv
bnN0IHVpbnQ4X3QqPihnX2J5dGVzX2dldF9kYXRhKGRhdGEuZ2V0KCksIG51bGxwdHIpKTsgfSwK
ICNlbmRpZgogI2lmIFVTRShHU1RSRUFNRVIpCi0gICAgICAgIFtdKGNvbnN0IFJlZlB0cjxHc3RN
YXBwZWRPd25lZEJ1ZmZlcj4mIGRhdGEpIHsgcmV0dXJuIGRhdGEtPmRhdGEoKTsgfSwKKyAgICAg
ICAgW10oY29uc3QgUmVmUHRyPEdzdE1hcHBlZE93bmVkQnVmZmVyPiYgZGF0YSkgLT4gY29uc3Qg
dWludDhfdCogeyByZXR1cm4gZGF0YS0+ZGF0YSgpOyB9LAogI2VuZGlmCi0gICAgICAgIFtdKGNv
bnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCB1aW50OF90Kj4oZGF0YS5kYXRhKCkpOyB9LAotICAgICAgICBbXShjb25zdCBQcm92
aWRlciYgcHJvdmlkZXIpIHsgcmV0dXJuIHByb3ZpZGVyLmRhdGEoKTsgfQorICAgICAgICBbXShj
b25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgLT4gY29uc3QgdWludDhfdCog
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSgpKTsgfSwKKyAg
ICAgICAgW10oY29uc3QgUHJvdmlkZXImIHByb3ZpZGVyKSAtPiBjb25zdCB1aW50OF90KiB7IHJl
dHVybiBwcm92aWRlci5kYXRhKCk7IH0KICAgICApOwotICAgIHJldHVybiBXVEY6OnZpc2l0KHZp
c2l0b3IsIG1faW1tdXRhYmxlRGF0YSk7CisgICAgcmV0dXJuIHN0ZDo6dmlzaXQodmlzaXRvciwg
bV9pbW11dGFibGVEYXRhKTsKIH0KIAogYm9vbCBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50Ojpj
b250YWluc01hcHBlZEZpbGVEYXRhKCkgY29uc3QKQEAgLTQyNSwyMCArNDI1LDIwIEBAIGJvb2wg
U2hhcmVkQnVmZmVyOjpvcGVyYXRvcj09KGNvbnN0IFNoYXJlZEJ1ZmZlciYgb3RoZXIpIGNvbnN0
CiBzaXplX3QgU2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudDo6c2l6ZSgpIGNvbnN0CiB7CiAgICAg
YXV0byB2aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcigKLSAgICAgICAgW10oY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBkYXRhKSB7IHJldHVybiBkYXRhLnNpemUoKTsgfSwKKyAgICAgICAgW10oY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKSAtPiBzaXplX3QgeyByZXR1cm4gZGF0YS5zaXplKCk7
IH0sCiAjaWYgVVNFKENGKQotICAgICAgICBbXShjb25zdCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiYg
ZGF0YSkgeyByZXR1cm4gQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEuZ2V0KCkpOyB9LAorICAgICAgICBb
XShjb25zdCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiYgZGF0YSkgLT4gc2l6ZV90IHsgcmV0dXJuIENG
RGF0YUdldExlbmd0aChkYXRhLmdldCgpKTsgfSwKICNlbmRpZgogI2lmIFVTRShHTElCKQotICAg
ICAgICBbXShjb25zdCBHUmVmUHRyPEdCeXRlcz4mIGRhdGEpIHsgcmV0dXJuIGdfYnl0ZXNfZ2V0
X3NpemUoZGF0YS5nZXQoKSk7IH0sCisgICAgICAgIFtdKGNvbnN0IEdSZWZQdHI8R0J5dGVzPiYg
ZGF0YSkgLT4gc2l6ZV90IHsgcmV0dXJuIGdfYnl0ZXNfZ2V0X3NpemUoZGF0YS5nZXQoKSk7IH0s
CiAjZW5kaWYKICNpZiBVU0UoR1NUUkVBTUVSKQotICAgICAgICBbXShjb25zdCBSZWZQdHI8R3N0
TWFwcGVkT3duZWRCdWZmZXI+JiBkYXRhKSB7IHJldHVybiBkYXRhLT5zaXplKCk7IH0sCisgICAg
ICAgIFtdKGNvbnN0IFJlZlB0cjxHc3RNYXBwZWRPd25lZEJ1ZmZlcj4mIGRhdGEpIC0+IHNpemVf
dCB7IHJldHVybiBkYXRhLT5zaXplKCk7IH0sCiAjZW5kaWYKLSAgICAgICAgW10oY29uc3QgRmls
ZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRhdGEpIHsgcmV0dXJuIGRhdGEuc2l6ZSgpOyB9LAot
ICAgICAgICBbXShjb25zdCBQcm92aWRlciYgcHJvdmlkZXIpIHsgcmV0dXJuIHByb3ZpZGVyLnNp
emUoKTsgfQorICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0
YSkgLT4gc2l6ZV90IHsgcmV0dXJuIGRhdGEuc2l6ZSgpOyB9LAorICAgICAgICBbXShjb25zdCBQ
cm92aWRlciYgcHJvdmlkZXIpIC0+IHNpemVfdCB7IHJldHVybiBwcm92aWRlci5zaXplKCk7IH0K
ICAgICApOwotICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIG1faW1tdXRhYmxlRGF0YSk7
CisgICAgcmV0dXJuIHN0ZDo6dmlzaXQodmlzaXRvciwgbV9pbW11dGFibGVEYXRhKTsKIH0KIAog
U2hhcmVkQnVmZmVyRGF0YVZpZXc6OlNoYXJlZEJ1ZmZlckRhdGFWaWV3KFJlZjxTaGFyZWRCdWZm
ZXI6OkRhdGFTZWdtZW50PiYmIHNlZ21lbnQsIHNpemVfdCBwb3NpdGlvbldpdGhpblNlZ21lbnQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5jcHAKaW5kZXgg
ZjZiZmRkN2Y1ZjczMzdlZTFmMTAzNjVjNWUyMDEzMTg1YTdlMmY4YS4uNjlhNjg1MGRlNjNjMzgy
N2NlOGQ5NWE1YmVkZWNkODdmNjg3NGJiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NmL1NoYXJlZEJ1ZmZlckNGLmNwcApAQCAtNDQsNyArNDQsNyBAQCBTaGFyZWRCdWZmZXI6OlNo
YXJlZEJ1ZmZlcihDRkRhdGFSZWYgZGF0YSkKIFJldGFpblB0cjxDRkRhdGFSZWY+IFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlQ0ZEYXRhKCkgY29uc3QKIHsKICAgICBpZiAobV9zZWdtZW50cy5zaXplKCkg
PT0gMSkgewotICAgICAgICBpZiAoYXV0byBkYXRhID0gV1RGOjpnZXRfaWY8UmV0YWluUHRyPENG
RGF0YVJlZj4+KG1fc2VnbWVudHNbMF0uc2VnbWVudC0+bV9pbW11dGFibGVEYXRhKSkKKyAgICAg
ICAgaWYgKGF1dG8gZGF0YSA9IHN0ZDo6Z2V0X2lmPFJldGFpblB0cjxDRkRhdGFSZWY+PigmbV9z
ZWdtZW50c1swXS5zZWdtZW50LT5tX2ltbXV0YWJsZURhdGEpKQogICAgICAgICAgICAgcmV0dXJu
ICpkYXRhOwogICAgIH0KICAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0
YWJsZShudWxscHRyLCBzaXplKCkpKTsKQEAgLTY0LDcgKzY0LDcgQEAgdm9pZCBTaGFyZWRCdWZm
ZXI6OmhpbnRNZW1vcnlOb3ROZWVkZWRTb29uKCkgY29uc3QKIHsKICAgICBmb3IgKGNvbnN0IGF1
dG8mIGVudHJ5IDogbV9zZWdtZW50cykgewogICAgICAgICBpZiAoZW50cnkuc2VnbWVudC0+aGFz
T25lUmVmKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvIGRhdGEgPSBXVEY6OmdldF9pZjxSZXRh
aW5QdHI8Q0ZEYXRhUmVmPj4oZW50cnkuc2VnbWVudC0+bV9pbW11dGFibGVEYXRhKSkKKyAgICAg
ICAgICAgIGlmIChhdXRvIGRhdGEgPSBzdGQ6OmdldF9pZjxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4o
JmVudHJ5LnNlZ21lbnQtPm1faW1tdXRhYmxlRGF0YSkpCiAgICAgICAgICAgICAgICAgT1NBbGxv
Y2F0b3I6OmhpbnRNZW1vcnlOb3ROZWVkZWRTb29uKGNvbnN0X2Nhc3Q8VUludDgqPihDRkRhdGFH
ZXRCeXRlUHRyKGRhdGEtPmdldCgpKSksIENGRGF0YUdldExlbmd0aChkYXRhLT5nZXQoKSkpOwog
ICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2Vu
ZXJpYy9LZXllZERlY29kZXJHZW5lcmljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dl
bmVyaWMvS2V5ZWREZWNvZGVyR2VuZXJpYy5jcHAKaW5kZXggOWI2MzBkYmQyN2RmMWY0ZDg5MmU3
ZWRmMDA1NDJlNDVjZjU5YjZlZS4uZDY0NTA2MzgxZDZmYmU5NmJjNjQxOTQ1ZDczZDFiOGQ3MDhl
NWQwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERl
Y29kZXJHZW5lcmljLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nZW5lcmljL0tl
eWVkRGVjb2RlckdlbmVyaWMuY3BwCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICB1c2lu
ZyBOb2RlID0gVmFyaWFudDxWZWN0b3I8dWludDhfdD4sIGJvb2wsIHVpbnQzMl90LCB1aW50NjRf
dCwgaW50MzJfdCwgaW50NjRfdCwgZmxvYXQsIGRvdWJsZSwgU3RyaW5nLCBzdGQ6OnVuaXF1ZV9w
dHI8RGljdGlvbmFyeT4sIHN0ZDo6dW5pcXVlX3B0cjxBcnJheT4+OwogCiAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBhZGQoY29uc3QgU3RyaW5nJiBrZXksIFQmJiB2YWx1ZSkg
eyBtX21hcC5hZGQoa2V5LCBtYWtlVW5pcXVlPE5vZGU+KHN0ZDo6Zm9yd2FyZDxUPih2YWx1ZSkp
KTsgfQorICAgIHZvaWQgYWRkKGNvbnN0IFN0cmluZyYga2V5LCBUJiYgdmFsdWUpIHsgbV9tYXAu
YWRkKGtleSwgbWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hlY2s8Tm9kZT4oc3RkOjpmb3J3
YXJkPFQ+KHZhbHVlKSkpOyB9CiAgICAgTm9kZSogZ2V0KGNvbnN0IFN0cmluZyYga2V5KSB7IHJl
dHVybiBtX21hcC5nZXQoa2V5KTsgfQogCiBwcml2YXRlOgpAQCAtMjIzLDcgKzIyMyw3IEBAIGNv
bnN0IFQqIEtleWVkRGVjb2RlckdlbmVyaWM6OmdldFBvaW50ZXJGcm9tRGljdGlvbmFyeVN0YWNr
KGNvbnN0IFN0cmluZyYga2V5KQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICByZXR1cm4gV1RGOjpnZXRfaWY8VD4oKm5vZGUpOworICAgIHJldHVybiBzdGQ6
OmdldF9pZjxUPihub2RlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKaW5k
ZXggY2RmOGJhNTE2NDZlYzkwNmRkZjAwNWEwMWZmNmY2OGVmZWJmNDJiNy4uYTI0MmQzNjVmODlk
YmE5YzdkYWQ4MGY2OTg3Y2I0NWRmY2Y0YWRlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKQEAgLTE2MSw3ICsxNjEs
NyBAQCBzdGF0aWMgRm9udFJhbmdlcyByZWFsaXplTmV4dEZhbGxiYWNrKGNvbnN0IEZvbnRDYXNj
YWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLAogICAgICAgICAgICAgcmV0dXJuIGZvbnRGYW1p
bHlTcGVjaWZpY2F0aW9uLmZvbnRSYW5nZXMoZGVzY3JpcHRpb24pOwogICAgICAgICB9KTsKICAg
ICAgICAgY29uc3QgYXV0byYgY3VycmVudEZhbWlseSA9IGRlc2NyaXB0aW9uLmVmZmVjdGl2ZUZh
bWlseUF0KGluZGV4KyspOwotICAgICAgICBhdXRvIHJhbmdlcyA9IFdURjo6dmlzaXQodmlzaXRv
ciwgY3VycmVudEZhbWlseSk7CisgICAgICAgIGF1dG8gcmFuZ2VzID0gc3RkOjp2aXNpdCh2aXNp
dG9yLCBjdXJyZW50RmFtaWx5KTsKICAgICAgICAgaWYgKCFyYW5nZXMuaXNOdWxsKCkpCiAgICAg
ICAgICAgICByZXR1cm4gcmFuZ2VzOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbUJ1ZmZlci5jcHAKaW5kZXggMTM1NGJkYmVkZDYxMTZjMjA5ZmI1NGE2M2UxOTQyMjUz
Y2IzYTU4YS4uM2IzNDRkYWMxOGVlYTc0YzhjOWQ3NjU4ODgwOTk5NjVlODI4Mjc4YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SXRlbUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKQEAgLTY1MCw3ICs2NTAs
NyBAQCBib29sIEl0ZW1IYW5kbGU6OnNhZmVDb3B5KEl0ZW1UeXBlIGl0ZW1UeXBlLCBJdGVtSGFu
ZGxlIGRlc3RpbmF0aW9uKSBjb25zdAogCiBib29sIHNhZmVDb3B5KEl0ZW1IYW5kbGUgZGVzdGlu
YXRpb24sIGNvbnN0IERpc3BsYXlMaXN0SXRlbSYgc291cmNlKQogewotICAgIHJldHVybiBXVEY6
OnZpc2l0KFsmXShjb25zdCBhdXRvJiBzb3VyY2UpIHsKKyAgICByZXR1cm4gc3RkOjp2aXNpdChb
Jl0oY29uc3QgYXV0byYgc291cmNlKSB7CiAgICAgICAgIHVzaW5nIERpc3BsYXlMaXN0SXRlbVR5
cGUgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHNvdXJjZSk+
Ojp0eXBlOwogICAgICAgICBjb25zdGV4cHIgYXV0byBpdGVtVHlwZSA9IERpc3BsYXlMaXN0SXRl
bVR5cGU6Oml0ZW1UeXBlOwogICAgICAgICBkZXN0aW5hdGlvbi5kYXRhWzBdID0gc3RhdGljX2Nh
c3Q8dWludDhfdD4oaXRlbVR5cGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5
cGUuY3BwCmluZGV4IDk4YTE2ZDI1ZmExYjVhNGM1MmIwZjczYTRmOWY1MzJhZWJmYWI3MGMuLjNi
ZWJhOWM0ZDFhOGNhYTQ0Yzc1OGZkMjAzYmUyNjEzNjc5YTVkNzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1U
eXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKQEAgLTI3Niw3ICsyNzYsNyBAQCBzaXplX3QgcGFk
ZGVkU2l6ZU9mVHlwZUFuZEl0ZW1JbkJ5dGVzKEl0ZW1UeXBlIHR5cGUpCiAKIHNpemVfdCBwYWRk
ZWRTaXplT2ZUeXBlQW5kSXRlbUluQnl0ZXMoY29uc3QgRGlzcGxheUxpc3RJdGVtJiBkaXNwbGF5
TGlzdEl0ZW0pCiB7Ci0gICAgYXV0byBpdGVtU2l6ZSA9IFdURjo6dmlzaXQoW10oY29uc3QgYXV0
byYgaXRlbSkgeworICAgIGF1dG8gaXRlbVNpemUgPSBzdGQ6OnZpc2l0KFtdKGNvbnN0IGF1dG8m
IGl0ZW0pIHsKICAgICAgICAgcmV0dXJuIHNpemVvZihpdGVtKTsKICAgICB9LCBkaXNwbGF5TGlz
dEl0ZW0pOwogICAgIHJldHVybiBzaXplb2YodWludDY0X3QpICsgcm91bmRVcFRvTXVsdGlwbGVP
ZihhbGlnbm9mKHVpbnQ2NF90KSwgaXRlbVNpemUpOwpAQCAtMjg0LDcgKzI4NCw3IEBAIHNpemVf
dCBwYWRkZWRTaXplT2ZUeXBlQW5kSXRlbUluQnl0ZXMoY29uc3QgRGlzcGxheUxpc3RJdGVtJiBk
aXNwbGF5TGlzdEl0ZW0pCiAKIEl0ZW1UeXBlIGRpc3BsYXlMaXN0SXRlbVR5cGUoY29uc3QgRGlz
cGxheUxpc3RJdGVtJiBkaXNwbGF5TGlzdEl0ZW0pCiB7Ci0gICAgcmV0dXJuIFdURjo6dmlzaXQo
W10oY29uc3QgYXV0byYgaXRlbSkgeworICAgIHJldHVybiBzdGQ6OnZpc2l0KFtdKGNvbnN0IGF1
dG8mIGl0ZW0pIHsKICAgICAgICAgcmV0dXJuIGl0ZW0uaXRlbVR5cGU7CiAgICAgfSwgZGlzcGxh
eUxpc3RJdGVtKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lci5jcHAKaW5kZXggYzQ1ZDAzYzUxMWE5ZDFjNTU4NzNjYzRkZmI0MGU5NDY2MDhiZjZkMC4u
NTYxZjNmZDczZjc4OTFkOTE3YWNkMjZhZjllMTAxN2EyYmQyZmI3MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTEwMTYsNyArMTAxNiw3
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlRyYWNr
KCkKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0g
ICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBSZWZQdHI8VHJhY2tQcml2YXRlVHlwZT4+JiB0cmFja3Mg
PSAqZ2V0PEhhc2hNYXA8QXRvbVN0cmluZywgUmVmUHRyPFRyYWNrUHJpdmF0ZVR5cGU+Pio+KHZh
cmlhbnRUcmFja3MpOworICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUmVmUHRyPFRyYWNrUHJpdmF0
ZVR5cGU+PiYgdHJhY2tzID0gKldURjo6Z2V0PEhhc2hNYXA8QXRvbVN0cmluZywgUmVmUHRyPFRy
YWNrUHJpdmF0ZVR5cGU+Pio+KHZhcmlhbnRUcmFja3MpOwogCiAgICAgLy8gSWdub3JlIG5vdGlm
aWNhdGlvbnMgYWZ0ZXIgYSBFT1MuIFdlIGRvbid0IHdhbnQgdGhlIHRyYWNrcyB0byBkaXNhcHBl
YXIgd2hlbiB0aGUgdmlkZW8gaXMgZmluaXNoZWQuCiAgICAgaWYgKG1faXNFbmRSZWFjaGVkICYm
ICh0eXBlID09IFRyYWNrVHlwZTo6QXVkaW8gfHwgdHlwZSA9PSBUcmFja1R5cGU6OlZpZGVvKSkK
QEAgLTEwNzEsMTYgKzEwNzEsMTYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
Om5vdGlmeVBsYXllck9mVHJhY2soKQogICAgICAgICBBU1NFUlQoc3RyZWFtSWQgPT0gdHJhY2st
PmlkKCkpOwogICAgICAgICB0cmFja3MuYWRkKHN0cmVhbUlkLCB0cmFjay5jb3B5UmVmKCkpOwog
Ci0gICAgICAgIFZhcmlhbnQ8QXVkaW9UcmFja1ByaXZhdGUmLCBWaWRlb1RyYWNrUHJpdmF0ZSYs
IEluYmFuZFRleHRUcmFja1ByaXZhdGUmPiB2YXJpYW50VHJhY2sodHJhY2suZ2V0KCkpOworICAg
ICAgICBWYXJpYW50PEF1ZGlvVHJhY2tQcml2YXRlKiwgVmlkZW9UcmFja1ByaXZhdGUqLCBJbmJh
bmRUZXh0VHJhY2tQcml2YXRlKj4gdmFyaWFudFRyYWNrKCZ0cmFjay5nZXQoKSk7CiAgICAgICAg
IHN3aXRjaCAodmFyaWFudFRyYWNrLmluZGV4KCkpIHsKICAgICAgICAgY2FzZSBUcmFja1R5cGU6
OkF1ZGlvOgotICAgICAgICAgICAgbV9wbGF5ZXItPmFkZEF1ZGlvVHJhY2soZ2V0PEF1ZGlvVHJh
Y2tQcml2YXRlJj4odmFyaWFudFRyYWNrKSk7CisgICAgICAgICAgICBtX3BsYXllci0+YWRkQXVk
aW9UcmFjaygqV1RGOjpnZXQ8QXVkaW9UcmFja1ByaXZhdGUqPih2YXJpYW50VHJhY2spKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFRyYWNrVHlwZTo6VmlkZW86Ci0gICAgICAg
ICAgICBtX3BsYXllci0+YWRkVmlkZW9UcmFjayhnZXQ8VmlkZW9UcmFja1ByaXZhdGUmPih2YXJp
YW50VHJhY2spKTsKKyAgICAgICAgICAgIG1fcGxheWVyLT5hZGRWaWRlb1RyYWNrKCpXVEY6Omdl
dDxWaWRlb1RyYWNrUHJpdmF0ZSo+KHZhcmlhbnRUcmFjaykpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgVHJhY2tUeXBlOjpUZXh0OgotICAgICAgICAgICAgbV9wbGF5ZXItPmFk
ZFRleHRUcmFjayhnZXQ8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSY+KHZhcmlhbnRUcmFjaykpOwor
ICAgICAgICAgICAgbV9wbGF5ZXItPmFkZFRleHRUcmFjaygqV1RGOjpnZXQ8SW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZSo+KHZhcmlhbnRUcmFjaykpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVm
ZmVyLmNwcAppbmRleCAwMDI0NjUxMmVkZjM2YjNkZWE0YzU5NWUyNWU4YzEyMGYyYWMzOGFmLi5i
ZDVlZGI5NjRjYzg5NTYxNTZlMGYwYWU2NDJhYzczNjViNDYyY2IyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5jcHAKQEAgLTgzLDEyICs4Mywx
MiBAQCBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+IFRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZgogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Qml0
bWFwVGV4dHVyZUdMJj4oY2xvbmVkVGV4dHVyZS5nZXQoKSkuY29weUZyb21FeHRlcm5hbFRleHR1
cmUodGV4dHVyZS5pZCk7CiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4oV1RGTW92ZShjbG9uZWRUZXh0dXJlKSwgbV9leHRyYUZs
YWdzKTsKICAgICAgICAgfSwKLSAgICAgICAgW10oY29uc3QgWVVWVGV4dHVyZSYpCisgICAgICAg
IFtdKGNvbnN0IFlVVlRleHR1cmUmKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJCdWZmZXI+CiAgICAgICAgIHsKICAgICAgICAgICAgIG5vdEltcGxlbWVudGVk
KCk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfSwKLSAgICAgICAgW10o
Y29uc3QgRXh0ZXJuYWxPRVNUZXh0dXJlJikKKyAgICAgICAgW10oY29uc3QgRXh0ZXJuYWxPRVNU
ZXh0dXJlJikgLT4gc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVm
ZmVyPgogICAgICAgICB7CiAgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
b2NrL01vY2tNZWRpYURldmljZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2Nr
TWVkaWFEZXZpY2UuaAppbmRleCA0NjdkOTEzOTQ0NDNlZmEyODM2M2E4NmE4ZDU0ZmQyYzQ0NTg1
M2NhLi5hMjNkNzAxMzI1YmY1Nzg3YzAwM2Y5OTdiYjEyZDBkNDc5ZmM1NDRlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tNZWRpYURldmljZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja01lZGlhRGV2aWNlLmgKQEAgLTIwMSw3ICsy
MDEsNyBAQCBzdHJ1Y3QgTW9ja01lZGlhRGV2aWNlIHsKICAgICB7CiAgICAgICAgIGVuY29kZXIg
PDwgcGVyc2lzdGVudElkOwogICAgICAgICBlbmNvZGVyIDw8IGxhYmVsOwotICAgICAgICBzd2l0
Y2hPbihwcm9wZXJ0aWVzLCBbJl0oY29uc3QgTW9ja01pY3JvcGhvbmVQcm9wZXJ0aWVzJiBwcm9w
ZXJ0aWVzKSB7CisgICAgICAgIFdURjo6c3dpdGNoT24ocHJvcGVydGllcywgWyZdKGNvbnN0IE1v
Y2tNaWNyb3Bob25lUHJvcGVydGllcyYgcHJvcGVydGllcykgewogICAgICAgICAgICAgZW5jb2Rl
ciA8PCAodWludDhfdCkxOwogICAgICAgICAgICAgZW5jb2RlciA8PCBwcm9wZXJ0aWVzOwogICAg
ICAgICB9LCBbJl0oY29uc3QgTW9ja1NwZWFrZXJQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCmluZGV4IGNlOWU5
ZjUwYWM0ZTY4ZDhlYWY2NjNiZjg2MTU4ZjRmZGM2MmU1MmIuLjg5MGFkNjRiODUzOTA4Y2RmOGM5
NGUyMjljMjVmZjM5YmI3NTdiMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvRm9ybURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvRm9ybURhdGEuY3BwCkBAIC0xMjcsNyArMTI3LDcgQEAgdW5zaWduZWQgRm9ybURhdGE6Omlt
YWdlT3JNZWRpYUZpbGVzQ291bnQoKSBjb25zdAogewogICAgIHVuc2lnbmVkIGltYWdlT3JNZWRp
YUZpbGVzQ291bnQgPSAwOwogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IG1fZWxlbWVudHMpIHsK
LSAgICAgICAgYXV0byogZW5jb2RlZEZpbGVEYXRhID0gV1RGOjpnZXRfaWY8Rm9ybURhdGFFbGVt
ZW50OjpFbmNvZGVkRmlsZURhdGE+KGVsZW1lbnQuZGF0YSk7CisgICAgICAgIGF1dG8qIGVuY29k
ZWRGaWxlRGF0YSA9IHN0ZDo6Z2V0X2lmPEZvcm1EYXRhRWxlbWVudDo6RW5jb2RlZEZpbGVEYXRh
PigmZWxlbWVudC5kYXRhKTsKICAgICAgICAgaWYgKCFlbmNvZGVkRmlsZURhdGEpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIApAQCAtMTQwLDcgKzE0MCw3IEBAIHVuc2lnbmVkIEZvcm1EYXRhOjpp
bWFnZU9yTWVkaWFGaWxlc0NvdW50KCkgY29uc3QKIAogdWludDY0X3QgRm9ybURhdGFFbGVtZW50
OjpsZW5ndGhJbkJ5dGVzKGNvbnN0IEZ1bmN0aW9uPHVpbnQ2NF90KGNvbnN0IFVSTCYpPiYgYmxv
YlNpemUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN3aXRjaE9uKGRhdGEsCisgICAgcmV0dXJuIFdU
Rjo6c3dpdGNoT24oZGF0YSwKICAgICAgICAgW10gKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnl0
ZXMpIHsKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYnl0ZXMuc2l6
ZSgpKTsKICAgICAgICAgfSwgW10gKGNvbnN0IEZvcm1EYXRhRWxlbWVudDo6RW5jb2RlZEZpbGVE
YXRhJiBmaWxlRGF0YSkgewpAQCAtMTYyLDcgKzE2Miw3IEBAIHVpbnQ2NF90IEZvcm1EYXRhRWxl
bWVudDo6bGVuZ3RoSW5CeXRlcygpIGNvbnN0CiAKIEZvcm1EYXRhRWxlbWVudCBGb3JtRGF0YUVs
ZW1lbnQ6Omlzb2xhdGVkQ29weSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN3aXRjaE9uKGRhdGEs
CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oZGF0YSwKICAgICAgICAgW10gKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgYnl0ZXMpIHsKICAgICAgICAgICAgIHJldHVybiBGb3JtRGF0YUVsZW1lbnQo
VmVjdG9yIHsgYnl0ZXMuZGF0YSgpLCBieXRlcy5zaXplKCkgfSk7CiAgICAgICAgIH0sIFtdIChj
b25zdCBGb3JtRGF0YUVsZW1lbnQ6OkVuY29kZWRGaWxlRGF0YSYgZmlsZURhdGEpIHsKQEAgLTE3
Nyw3ICsxNzcsNyBAQCB2b2lkIEZvcm1EYXRhOjphcHBlbmREYXRhKGNvbnN0IHZvaWQqIGRhdGEs
IHNpemVfdCBzaXplKQogewogICAgIG1fbGVuZ3RoSW5CeXRlcyA9IHN0ZDo6bnVsbG9wdDsKICAg
ICBpZiAoIW1fZWxlbWVudHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChhdXRvKiB2ZWN0b3Ig
PSBXVEY6OmdldF9pZjxWZWN0b3I8dWludDhfdD4+KG1fZWxlbWVudHMubGFzdCgpLmRhdGEpKSB7
CisgICAgICAgIGlmIChhdXRvKiB2ZWN0b3IgPSBzdGQ6OmdldF9pZjxWZWN0b3I8dWludDhfdD4+
KCZtX2VsZW1lbnRzLmxhc3QoKS5kYXRhKSkgewogICAgICAgICAgICAgdmVjdG9yLT5hcHBlbmQo
c3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBzaXplKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQpAQCAtMjkzLDcgKzI5Myw3IEBAIFZlY3Rvcjx1aW50OF90PiBGb3Jt
RGF0YTo6ZmxhdHRlbigpIGNvbnN0CiAgICAgLy8gQ29uY2F0ZW5hdGUgYWxsIHRoZSBieXRlIGFy
cmF5cywgYnV0IG9taXQgYW55IGZpbGVzLgogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwogICAg
IGZvciAoYXV0byYgZWxlbWVudCA6IG1fZWxlbWVudHMpIHsKLSAgICAgICAgaWYgKGF1dG8qIHZl
Y3RvciA9IFdURjo6Z2V0X2lmPFZlY3Rvcjx1aW50OF90Pj4oZWxlbWVudC5kYXRhKSkKKyAgICAg
ICAgaWYgKGF1dG8qIHZlY3RvciA9IHN0ZDo6Z2V0X2lmPFZlY3Rvcjx1aW50OF90Pj4oJmVsZW1l
bnQuZGF0YSkpCiAgICAgICAgICAgICBkYXRhLmFwcGVuZCh2ZWN0b3ItPmRhdGEoKSwgdmVjdG9y
LT5zaXplKCkpOwogICAgIH0KICAgICByZXR1cm4gZGF0YTsKQEAgLTM2Nyw3ICszNjcsNyBAQCBG
b3JtRGF0YUZvclVwbG9hZCBGb3JtRGF0YTo6cHJlcGFyZUZvclVwbG9hZCgpCiB7CiAgICAgVmVj
dG9yPFN0cmluZz4gZ2VuZXJhdGVkRmlsZXM7CiAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogbV9l
bGVtZW50cykgewotICAgICAgICBhdXRvKiBmaWxlRGF0YSA9IFdURjo6Z2V0X2lmPEZvcm1EYXRh
RWxlbWVudDo6RW5jb2RlZEZpbGVEYXRhPihlbGVtZW50LmRhdGEpOworICAgICAgICBhdXRvKiBm
aWxlRGF0YSA9IHN0ZDo6Z2V0X2lmPEZvcm1EYXRhRWxlbWVudDo6RW5jb2RlZEZpbGVEYXRhPigm
ZWxlbWVudC5kYXRhKTsKICAgICAgICAgaWYgKCFmaWxlRGF0YSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICBpZiAoRmlsZVN5c3RlbTo6ZmlsZVR5cGVGb2xsb3dpbmdTeW1saW5rcyhm
aWxlRGF0YS0+ZmlsZW5hbWUpICE9IEZpbGVTeXN0ZW06OkZpbGVUeXBlOjpEaXJlY3RvcnkpCkBA
IC00MjUsNyArNDI1LDcgQEAgVVJMIEZvcm1EYXRhOjphc0Jsb2JVUkwoKSBjb25zdAogICAgIGlm
IChtX2VsZW1lbnRzLnNpemUoKSAhPSAxKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgaWYg
KGF1dG8qIGJsb2JEYXRhID0gV1RGOjpnZXRfaWY8Rm9ybURhdGFFbGVtZW50OjpFbmNvZGVkQmxv
YkRhdGE+KG1fZWxlbWVudHMuZmlyc3QoKS5kYXRhKSkKKyAgICBpZiAoYXV0byogYmxvYkRhdGEg
PSBzdGQ6OmdldF9pZjxGb3JtRGF0YUVsZW1lbnQ6OkVuY29kZWRCbG9iRGF0YT4oJm1fZWxlbWVu
dHMuZmlyc3QoKS5kYXRhKSkKICAgICAgICAgcmV0dXJuIGJsb2JEYXRhLT51cmw7CiAgICAgcmV0
dXJuIHsgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Rm9ybURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaApp
bmRleCA2MzU0MDhjNTQ4OTljYWI5YWFlODUzNTFmMjViNDIyOGFjMjdhZmFmLi5mZWViMTk0ZDNm
NjA5NjQ1MTAxMTczMjJhZWJlZTgwZWM5MDIzNmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9Gb3JtRGF0YS5oCkBAIC0xNTMsMTAgKzE1MywxMCBAQCBzdHJ1Y3QgRm9ybURh
dGFFbGVtZW50IHsKICAgICAgICAgaWYgKGRhdGEuaW5kZXgoKSAhPSBvdGhlci5kYXRhLmluZGV4
KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghZGF0YS5pbmRleCgp
KQotICAgICAgICAgICAgcmV0dXJuIFdURjo6Z2V0PDA+KGRhdGEpID09IFdURjo6Z2V0PDA+KG90
aGVyLmRhdGEpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PDA+KGRhdGEpID09IHN0ZDo6
Z2V0PDA+KG90aGVyLmRhdGEpOwogICAgICAgICBpZiAoZGF0YS5pbmRleCgpID09IDEpCi0gICAg
ICAgICAgICByZXR1cm4gV1RGOjpnZXQ8MT4oZGF0YSkgPT0gV1RGOjpnZXQ8MT4ob3RoZXIuZGF0
YSk7Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDwyPihkYXRhKSA9PSBXVEY6OmdldDwyPihvdGhl
ci5kYXRhKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6OmdldDwxPihkYXRhKSA9PSBzdGQ6Omdl
dDwxPihvdGhlci5kYXRhKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PDI+KGRhdGEpID09IHN0
ZDo6Z2V0PDI+KG90aGVyLmRhdGEpOwogICAgIH0KICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
Rm9ybURhdGFFbGVtZW50JiBvdGhlcikgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Zvcm1EYXRhU3RyZWFtQ0ZOZXQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Gb3JtRGF0YVN0cmVhbUNGTmV0LmNwcApp
bmRleCAwYjk4ZWI3NWQ5MGY3ZjczMzMyMmQyODY4OThmYTY2MjM2N2I0MWVhLi5iOTAyOWJjZTY1
NDA5MmQ5YjkxNzJiMzkxNjEzMDZmNGE3NmJjZTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Zvcm1EYXRhU3RyZWFtQ0ZOZXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvRm9ybURhdGFTdHJlYW1DRk5ldC5jcHAKQEAg
LTEzNyw3ICsxMzcsNyBAQCBzdGF0aWMgYm9vbCBhZHZhbmNlQ3VycmVudFN0cmVhbShGb3JtU3Ry
ZWFtRmllbGRzKiBmb3JtKQogICAgIC8vIENyZWF0ZSB0aGUgbmV3IHN0cmVhbS4KICAgICBGb3Jt
RGF0YUVsZW1lbnQmIG5leHRJbnB1dCA9IGZvcm0tPnJlbWFpbmluZ0VsZW1lbnRzLmxhc3QoKTsK
IAotICAgIGJvb2wgc3VjY2VzcyA9IHN3aXRjaE9uKG5leHRJbnB1dC5kYXRhLAorICAgIGJvb2wg
c3VjY2VzcyA9IFdURjo6c3dpdGNoT24obmV4dElucHV0LmRhdGEsCiAgICAgICAgIFtmb3JtXSAo
VmVjdG9yPHVpbnQ4X3Q+JiBieXRlcykgewogICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBieXRl
cy5zaXplKCk7CiAgICAgICAgICAgICBNYWxsb2NQdHI8dWludDhfdCwgV1RGOjpWZWN0b3JNYWxs
b2M+IGRhdGEgPSBieXRlcy5yZWxlYXNlQnVmZmVyKCk7CkBAIC0zOTcsNyArMzk3LDcgQEAgdm9p
ZCBzZXRIVFRQQm9keShDRk11dGFibGVVUkxSZXF1ZXN0UmVmIHJlcXVlc3QsIEZvcm1EYXRhKiBm
b3JtRGF0YSkKICAgICAvLyBIYW5kbGUgdGhlIGNvbW1vbiBzcGVjaWFsIGNhc2Ugb2Ygb25lIHBp
ZWNlIG9mIGZvcm0gZGF0YSwgd2l0aCBubyBmaWxlcy4KICAgICBhdXRvJiBlbGVtZW50cyA9IGZv
cm1EYXRhLT5lbGVtZW50cygpOwogICAgIGlmIChlbGVtZW50cy5zaXplKCkgPT0gMSAmJiAhZm9y
bURhdGEtPmFsd2F5c1N0cmVhbSgpKSB7Ci0gICAgICAgIGlmIChhdXRvKiB2ZWN0b3IgPSBXVEY6
OmdldF9pZjxWZWN0b3I8dWludDhfdD4+KGVsZW1lbnRzWzBdLmRhdGEpKSB7CisgICAgICAgIGlm
IChhdXRvKiB2ZWN0b3IgPSBzdGQ6OmdldF9pZjxWZWN0b3I8dWludDhfdD4+KCZlbGVtZW50c1sw
XS5kYXRhKSkgewogICAgICAgICAgICAgYXV0byBkYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGUo
bnVsbHB0ciwgdmVjdG9yLT5kYXRhKCksIHZlY3Rvci0+c2l6ZSgpKSk7CiAgICAgICAgICAgICBD
RlVSTFJlcXVlc3RTZXRIVFRQUmVxdWVzdEJvZHkocmVxdWVzdCwgZGF0YS5nZXQoKSk7CiAgICAg
ICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxDb250ZXh0LmNwcAppbmRleCAyNGQxYzdkNzA2NTAxNmU1NTJlOWZjNmU5ZWQ5
MjhhNTEwMjkyZDZjLi4wYjJlMzg2ODk4MWEyOTg2YThiZjZlMGZmYWNiMjhmNGE2OTQ2OWI4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29u
dGV4dC5jcHAKQEAgLTM1MSw3ICszNTEsNyBAQCB2b2lkIEN1cmxIYW5kbGU6OmVuYWJsZVNTTEZv
ckhvc3QoY29uc3QgU3RyaW5nJiBob3N0KQogI2lmIE9TKFdJTkRPV1MpCiAgICAgY3VybF9lYXN5
X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9TU0xfT1BUSU9OUywgQ1VSTFNTTE9QVF9OQVRJVkVf
Q0EpOwogI2Vsc2UKLSAgICBpZiAoYXV0byogcGF0aCA9IFdURjo6Z2V0X2lmPFN0cmluZz4oc3Ns
SGFuZGxlLmdldENBQ2VydEluZm8oKSkpCisgICAgaWYgKGF1dG8qIHBhdGggPSBzdGQ6OmdldF9p
ZjxTdHJpbmc+KHNzbEhhbmRsZS5nZXRDQUNlcnRJbmZvKCkpKQogICAgICAgICBzZXRDQUNlcnRQ
YXRoKHBhdGgtPnV0ZjgoKS5kYXRhKCkpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybEZvcm1EYXRhU3RyZWFtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRm9ybURhdGFTdHJlYW0uY3Bw
CmluZGV4IGNjOWFiMGJjMDg1NTFlZmYwN2RmNDMzYjc2M2I5OWU4NTFiN2Y5NDQuLjdhYTI2MmRj
NzcxNjVkNmI3MjE5NmQ4ZWIxNmQ1Yzg5MmVlOGQ5ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRm9ybURhdGFTdHJlYW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRm9ybURhdGFTdHJlYW0uY3Bw
CkBAIC0xMjgsNyArMTI4LDcgQEAgc3RkOjpvcHRpb25hbDxzaXplX3Q+IEN1cmxGb3JtRGF0YVN0
cmVhbTo6cmVhZChjaGFyKiBidWZmZXIsIHNpemVfdCBzaXplKQogICAgICAgICAgICAgICAgIHJl
dHVybiByZWFkRnJvbURhdGEoYnl0ZXMsIGJ1ZmZlclBvc2l0aW9uLCBidWZmZXJTaXplKTsKICAg
ICAgICAgICAgIH0sIFsmXSAoY29uc3QgRm9ybURhdGFFbGVtZW50OjpFbmNvZGVkRmlsZURhdGEm
IGZpbGVEYXRhKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRGcm9tRmlsZShmaWxlRGF0
YSwgYnVmZmVyUG9zaXRpb24sIGJ1ZmZlclNpemUpOwotICAgICAgICAgICAgfSwgW10gKGNvbnN0
IEZvcm1EYXRhRWxlbWVudDo6RW5jb2RlZEJsb2JEYXRhJikgeworICAgICAgICAgICAgfSwgW10g
KGNvbnN0IEZvcm1EYXRhRWxlbWVudDo6RW5jb2RlZEJsb2JEYXRhJikgLT4gc3RkOjpvcHRpb25h
bDxzaXplX3Q+IHsKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVy
LmNwcAppbmRleCA4Yjc5YmUyYTI4NmU1MmJmZjZjYjI5OTE3NjBlMTZlMjdhMWI0NmMwLi41NGY5
YTY0YjQxNzk5N2VkYTZmNjk2YzJiNmQzZmEyY2IxYjM3Y2JjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmNwcApA
QCAtNDQsNyArNDQsNyBAQCBDdXJsU1NMVmVyaWZpZXI6OkN1cmxTU0xWZXJpZmllcih2b2lkKiBz
c2xDdHgpCiAgICAgU1NMX0NUWF9zZXRfdmVyaWZ5KGN0eCwgU1NMX0NUWF9nZXRfdmVyaWZ5X21v
ZGUoY3R4KSwgdmVyaWZ5Q2FsbGJhY2spOwogCiAjaWYgZGVmaW5lZChMSUJSRVNTTF9WRVJTSU9O
X05VTUJFUikKLSAgICBpZiAoYXV0byBkYXRhID0gV1RGOjpnZXRfaWY8Q2VydGlmaWNhdGVJbmZv
OjpDZXJ0aWZpY2F0ZT4oc3NsSGFuZGxlLmdldENBQ2VydEluZm8oKSkpCisgICAgaWYgKGF1dG8g
ZGF0YSA9IHN0ZDo6Z2V0X2lmPENlcnRpZmljYXRlSW5mbzo6Q2VydGlmaWNhdGU+KCZzc2xIYW5k
bGUuZ2V0Q0FDZXJ0SW5mbygpKSkKICAgICAgICAgU1NMX0NUWF9sb2FkX3ZlcmlmeV9tZW0oY3R4
LCBzdGF0aWNfY2FzdDx2b2lkKj4oY29uc3RfY2FzdDx1aW50OF90Kj4oZGF0YS0+ZGF0YSgpKSks
IGRhdGEtPnNpemUoKSk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwCmluZGV4IDUy
M2QwZDIxODU3ZDkwNDhjNTZiYjhjMTAzZDhhYTAwYmMxMGU2MDEuLjkzOTU4ZTI0ZGE2MDVmM2U1
YTQ3Y2Q2YzY1ZmFiZTc0YWNjY2VkZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAKQEAgLTEw
MSw3ICsxMDEsNyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdDo6dXBkYXRlU291cE1lc3NhZ2VCb2R5
KFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgQmxvYlJlZ2lzdAogICAgIC8vIEhhbmRsZSB0aGUg
Y29tbW9uIHNwZWNpYWwgY2FzZSBvZiBvbmUgcGllY2Ugb2YgZm9ybSBkYXRhLCB3aXRoIG5vIGZp
bGVzLgogICAgIGF1dG8mIGVsZW1lbnRzID0gZm9ybURhdGEtPmVsZW1lbnRzKCk7CiAgICAgaWYg
KGVsZW1lbnRzLnNpemUoKSA9PSAxICYmICFmb3JtRGF0YS0+YWx3YXlzU3RyZWFtKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHZlY3RvciA9IFdURjo6Z2V0X2lmPFZlY3Rvcjx1aW50OF90Pj4oZWxl
bWVudHNbMF0uZGF0YSkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHZlY3RvciA9IHN0ZDo6Z2V0X2lm
PFZlY3Rvcjx1aW50OF90Pj4oJmVsZW1lbnRzWzBdLmRhdGEpKSB7CiAjaWYgVVNFKFNPVVAyKQog
ICAgICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKHNvdXBNZXNzYWdlLT5yZXF1ZXN0
X2JvZHksIFNPVVBfTUVNT1JZX1RFTVBPUkFSWSwgdmVjdG9yLT5kYXRhKCksIHZlY3Rvci0+c2l6
ZSgpKTsKICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29s
dmVGb3JGb250UmF3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckZv
bnRSYXcuY3BwCmluZGV4IDcxYzc0Y2IwNjI0NTJiZGMwMTlhMDA3NzQ5YTk0ODM2ZDQ2YTNhYjIu
LjQyN2RkODg1NDhiZWY2NGY2MmM2ZTlmZmNiYmIxOTIxMjc1MWY0MDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuY3BwCkBAIC0xNTgsNyArMTU4
LDcgQEAgc3RkOjpvcHRpb25hbDxGb250Q2FzY2FkZT4gcmVzb2x2ZUZvckZvbnRSYXcoY29uc3Qg
Rm9udFJhdyYgZm9udFJhdywgRm9udENhc2NhZGUKICAgICB9CiAKICAgICBpZiAoZm9udFJhdy53
ZWlnaHQpIHsKLSAgICAgICAgYXV0byB3ZWlnaHQgPSBzd2l0Y2hPbigqZm9udFJhdy53ZWlnaHQs
IFsmXSAoQ1NTVmFsdWVJRCBpZGVudCkgeworICAgICAgICBhdXRvIHdlaWdodCA9IFdURjo6c3dp
dGNoT24oKmZvbnRSYXcud2VpZ2h0LCBbJl0gKENTU1ZhbHVlSUQgaWRlbnQpIHsKICAgICAgICAg
ICAgIHN3aXRjaCAoaWRlbnQpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbFdlaWdodFZhbHVlKCk7CkBAIC0xNzksNyArMTc5
LDcgQEAgc3RkOjpvcHRpb25hbDxGb250Q2FzY2FkZT4gcmVzb2x2ZUZvckZvbnRSYXcoY29uc3Qg
Rm9udFJhdyYgZm9udFJhdywgRm9udENhc2NhZGUKICAgICB9CiAKICAgICBmb250RGVzY3JpcHRp
b24uc2V0S2V5d29yZFNpemVGcm9tSWRlbnRpZmllcihDU1NWYWx1ZUludmFsaWQpOwotICAgIGZs
b2F0IHNpemUgPSBzd2l0Y2hPbihmb250UmF3LnNpemUsIFsmXSAoQ1NTVmFsdWVJRCBpZGVudCkg
eworICAgIGZsb2F0IHNpemUgPSBXVEY6OnN3aXRjaE9uKGZvbnRSYXcuc2l6ZSwgWyZdIChDU1NW
YWx1ZUlEIGlkZW50KSB7CiAgICAgICAgIHN3aXRjaCAoaWRlbnQpIHsKICAgICAgICAgY2FzZSBD
U1NWYWx1ZVh4U21hbGw6CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVYU21hbGw6CkBAIC0xOTksNyAr
MTk5LDcgQEAgc3RkOjpvcHRpb25hbDxGb250Q2FzY2FkZT4gcmVzb2x2ZUZvckZvbnRSYXcoY29u
c3QgRm9udFJhdyYgZm9udFJhdywgRm9udENhc2NhZGUKICAgICAgICAgICAgIHJldHVybiAwLmY7
CiAgICAgICAgIH0KICAgICB9LCBbJl0gKGNvbnN0IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
TGVuZ3RoT3JQZXJjZW50UmF3JiBsZW5ndGhPclBlcmNlbnQpIHsKLSAgICAgICAgcmV0dXJuIHN3
aXRjaE9uKGxlbmd0aE9yUGVyY2VudCwgWyZdIChjb25zdCBDU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnM6Okxlbmd0aFJhdyYgbGVuZ3RoKSB7CisgICAgICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGxl
bmd0aE9yUGVyY2VudCwgWyZdIChjb25zdCBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Okxlbmd0
aFJhdyYgbGVuZ3RoKSB7CiAgICAgICAgICAgICBhdXRvIGZvbnRDYXNjYWRlID0gRm9udENhc2Nh
ZGUoRm9udENhc2NhZGVEZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pKTsKICAgICAgICAgICAg
IGZvbnRDYXNjYWRlLnVwZGF0ZShjb250ZXh0LmNzc0ZvbnRTZWxlY3RvcigpKTsKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBQYXNzaW5nIG51bGwgZm9yIHRoZSBSZW5kZXJWaWV3IHBhcmFtZXRlciBt
ZWFucyB0aGF0IHZ3IGFuZCB2aCB1bml0cyB3aWxsIGV2YWx1YXRlIHRvCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuY3BwCmluZGV4IGFhYTg3MzFmOWVjYWE2YTgxZjUyMWRjMGU3Zjg0OTIzZmFhODFm
MDYuLjY3YTgwYjAwNjdkYjBlMTRmODIyMDNlMzMxOTVhNjZhNTllNDY5MWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuY3BwCkBAIC00NzAsNyArNDcwLDcgQEAgVmVjdG9yPFJlZlB0cjxXZWJD
b3JlOjpCbG9iRGF0YUZpbGVSZWZlcmVuY2U+PiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6cmUKICAgICBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OkJsb2JEYXRhRmlsZVJlZmVyZW5jZT4+
IGZpbGVzOwogICAgIGlmIChhdXRvKiBib2R5ID0gbG9hZFBhcmFtZXRlcnMucmVxdWVzdC5odHRw
Qm9keSgpKSB7CiAgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGJvZHktPmVsZW1lbnRzKCkp
IHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBibG9iRGF0YSA9IFdURjo6Z2V0X2lmPEZvcm1EYXRh
RWxlbWVudDo6RW5jb2RlZEJsb2JEYXRhPihlbGVtZW50LmRhdGEpKQorICAgICAgICAgICAgaWYg
KGF1dG8qIGJsb2JEYXRhID0gc3RkOjpnZXRfaWY8Rm9ybURhdGFFbGVtZW50OjpFbmNvZGVkQmxv
YkRhdGE+KCZlbGVtZW50LmRhdGEpKQogICAgICAgICAgICAgICAgIGZpbGVzLmFwcGVuZFZlY3Rv
cihibG9iUmVnaXN0cnkuZmlsZXNJbkJsb2IoYmxvYkRhdGEtPnVybCkpOwogICAgICAgICB9CiAg
ICAgICAgIGNvbnN0X2Nhc3Q8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jj4obG9hZFBhcmFtZXRl
cnMucmVxdWVzdCkuc2V0SFRUUEJvZHkoYm9keS0+cmVzb2x2ZUJsb2JSZWZlcmVuY2VzKCZibG9i
UmVnaXN0cnkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAKaW5kZXggZGRmOTZkZTAzM2M2
NWY1NTIxZjNiYmJlODFkMTlhYzhlN2E1YmU5ZC4uNmJiMGJlODQ0NmEwOWZkNDVkNWMwODc4Yzgw
ZjY2YWU1YjE2ZDFhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAKQEAgLTUzLDcgKzUz
LDcgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6RW5j
b2RlciYgZW5jb2RlcikgY29uc3QKIAogICAgICAgICBWZWN0b3I8U2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlPiByZXF1ZXN0Qm9keVNhbmRib3hFeHRlbnNpb25zOwogICAgICAgICBmb3IgKGNvbnN0
IEZvcm1EYXRhRWxlbWVudCYgZWxlbWVudCA6IHJlcXVlc3QuaHR0cEJvZHkoKS0+ZWxlbWVudHMo
KSkgewotICAgICAgICAgICAgaWYgKGF1dG8qIGZpbGVEYXRhID0gV1RGOjpnZXRfaWY8Rm9ybURh
dGFFbGVtZW50OjpFbmNvZGVkRmlsZURhdGE+KGVsZW1lbnQuZGF0YSkpIHsKKyAgICAgICAgICAg
IGlmIChhdXRvKiBmaWxlRGF0YSA9IHN0ZDo6Z2V0X2lmPEZvcm1EYXRhRWxlbWVudDo6RW5jb2Rl
ZEZpbGVEYXRhPigmZWxlbWVudC5kYXRhKSkgewogICAgICAgICAgICAgICAgIGNvbnN0IFN0cmlu
ZyYgcGF0aCA9IGZpbGVEYXRhLT5maWxlbmFtZTsKICAgICAgICAgICAgICAgICBpZiAoYXV0byBo
YW5kbGUgPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGF0aCwgU2FuZGJveEV4dGVu
c2lvbjo6VHlwZTo6UmVhZE9ubHkpKQogICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keVNh
bmRib3hFeHRlbnNpb25zLmFwcGVuZChXVEZNb3ZlKCpoYW5kbGUpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmggYi9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oCmluZGV4IDQ3OWRiNjBlZGMyNzE2ZDU1NjA2
ZjY1MmYyNDMxYWQzNjlmNjU3MGMuLmQzMTU2NTBkMDFlMzM3ZmZjZWI2YWMxZTE3MTQ3M2Q4Zjlj
MDk3NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29k
ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaApA
QCAtNzA3LDcgKzcwNyw3IEBAIHN0cnVjdCBWYXJpYW50Q29kZXIgewogICAgIHN0YXRpYyB2b2lk
IGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXVEY6OlZhcmlhbnQ8VHlwZXMuLi4+JiB2
YXJpYW50LCB1bnNpZ25lZCBpKQogICAgIHsKICAgICAgICAgaWYgKGkgPT0gaW5kZXgpIHsKLSAg
ICAgICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8aW5kZXg+KHZhcmlhbnQpOworICAgICAgICAg
ICAgZW5jb2RlciA8PCBzdGQ6OmdldDxpbmRleD4odmFyaWFudCk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgVmFyaWFudENvZGVyPGluZGV4IC0gMSwgVHlwZXMuLi4+
OjplbmNvZGUoZW5jb2RlciwgdmFyaWFudCwgaSk7CkBAIC03MTYsNyArNzE2LDcgQEAgc3RydWN0
IFZhcmlhbnRDb2RlciB7CiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V1RGOjpWYXJpYW50PFR5
cGVzLi4uPj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIsIHVuc2lnbmVkIGkpCiAgICAgewogICAg
ICAgICBpZiAoaSA9PSBpbmRleCkgewotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx0eXBlbmFt
ZSBXVEY6OnZhcmlhbnRfYWx0ZXJuYXRpdmU8aW5kZXgsIFdURjo6VmFyaWFudDxUeXBlcy4uLj4+
Ojp0eXBlPiBvcHRpb25hbDsKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dHlwZW5hbWUgc3Rk
Ojp2YXJpYW50X2FsdGVybmF0aXZlPGluZGV4LCBXVEY6OlZhcmlhbnQ8VHlwZXMuLi4+Pjo6dHlw
ZT4gb3B0aW9uYWw7CiAgICAgICAgICAgICBkZWNvZGVyID4+IG9wdGlvbmFsOwogICAgICAgICAg
ICAgaWYgKCFvcHRpb25hbCkKICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwpA
QCAtNzMxLDEzICs3MzEsMTMgQEAgc3RydWN0IFZhcmlhbnRDb2RlcjwwLCBUeXBlcy4uLj4gewog
ICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXVEY6OlZhcmlh
bnQ8VHlwZXMuLi4+JiB2YXJpYW50LCB1bnNpZ25lZCBpKQogICAgIHsKICAgICAgICAgQVNTRVJU
X1VOVVNFRChpLCAhaSk7Ci0gICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8MD4odmFyaWFudCk7
CisgICAgICAgIGVuY29kZXIgPDwgc3RkOjpnZXQ8MD4odmFyaWFudCk7CiAgICAgfQogICAgIAog
ICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdURjo6VmFyaWFudDxUeXBlcy4uLj4+IGRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyLCB1bnNpZ25lZCBpKQogICAgIHsKICAgICAgICAgQVNTRVJUX1VOVVNF
RChpLCAhaSk7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8dHlwZW5hbWUgV1RGOjp2YXJpYW50X2Fs
dGVybmF0aXZlPDAsIFdURjo6VmFyaWFudDxUeXBlcy4uLj4+Ojp0eXBlPiBvcHRpb25hbDsKKyAg
ICAgICAgc3RkOjpvcHRpb25hbDx0eXBlbmFtZSBzdGQ6OnZhcmlhbnRfYWx0ZXJuYXRpdmU8MCwg
V1RGOjpWYXJpYW50PFR5cGVzLi4uPj46OnR5cGU+IG9wdGlvbmFsOwogICAgICAgICBkZWNvZGVy
ID4+IG9wdGlvbmFsOwogICAgICAgICBpZiAoIW9wdGlvbmFsKQogICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Zv
cm1EYXRhUmVmZXJlbmNlLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Gb3JtRGF0YVJl
ZmVyZW5jZS5oCmluZGV4IGMyZDU4OTU5NWY1ZTM0MTBkMWFlYWY0MmJhN2FlZTIzOGY3MTU0MTcu
LmJjZGIxNzAwN2JjMmYwZTU5Y2Q2ZDA4ZmViNGUyNmQzZWY4ZDZlNzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Zvcm1EYXRhUmVmZXJlbmNlLmgKKysrIGIvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvRm9ybURhdGFSZWZlcmVuY2UuaApAQCAtNTIsNyArNTIsNyBA
QCBwdWJsaWM6CiAKICAgICAgICAgVmVjdG9yPFdlYktpdDo6U2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlPiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlczsKICAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50
IDogbV9kYXRhLT5lbGVtZW50cygpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogZmlsZURhdGEg
PSBXVEY6OmdldF9pZjxXZWJDb3JlOjpGb3JtRGF0YUVsZW1lbnQ6OkVuY29kZWRGaWxlRGF0YT4o
ZWxlbWVudC5kYXRhKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIGZpbGVEYXRhID0gc3RkOjpn
ZXRfaWY8V2ViQ29yZTo6Rm9ybURhdGFFbGVtZW50OjpFbmNvZGVkRmlsZURhdGE+KCZlbGVtZW50
LmRhdGEpKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoID0gZmlsZURhdGEt
PmZpbGVuYW1lOwogICAgICAgICAgICAgICAgIGlmIChhdXRvIGhhbmRsZSA9IFdlYktpdDo6U2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhdGgsIFdlYktpdDo6U2FuZGJveEV4dGVuc2lv
bjo6VHlwZTo6UmVhZE9ubHkpKQogICAgICAgICAgICAgICAgICAgICBzYW5kYm94RXh0ZW5zaW9u
SGFuZGxlcy5hcHBlbmQoV1RGTW92ZSgqaGFuZGxlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL0lQQy9NZXNzYWdlUmVjZWl2ZVF1ZXVlTWFwLmNwcCBiL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL01lc3NhZ2VSZWNlaXZlUXVldWVNYXAuY3BwCmluZGV4IDQ2ZmUwZTgw
NDUzOWRmZmYxNTVmZGNhZjQwZTNhMDhiMDUwOWIyYmEuLmVkZjU2MmYyMzc0ZDZmYWUxNTVjNDA0
ZWE3OTBhNGQ2ODJhNWVkMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L01lc3NhZ2VSZWNlaXZlUXVldWVNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
SVBDL01lc3NhZ2VSZWNlaXZlUXVldWVNYXAuY3BwCkBAIC01NSw3ICs1NSw3IEBAIE1lc3NhZ2VS
ZWNlaXZlUXVldWUqIE1lc3NhZ2VSZWNlaXZlUXVldWVNYXA6OmdldChjb25zdCBEZWNvZGVyJiBt
ZXNzYWdlKSBjb25zdAogICAgIH0KICAgICBpZiAoaXQgPT0gbV9xdWV1ZXMuZW5kKCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBXVEY6OnZpc2l0KAorICAgIHJldHVybiBz
dGQ6OnZpc2l0KAogICAgICAgICBXVEY6Om1ha2VWaXNpdG9yKAogICAgICAgICAgICAgW10oY29u
c3Qgc3RkOjp1bmlxdWVfcHRyPE1lc3NhZ2VSZWNlaXZlUXVldWU+JiBxdWV1ZSkgeyByZXR1cm4g
cXVldWUuZ2V0KCk7IH0sCiAgICAgICAgICAgICBbXShNZXNzYWdlUmVjZWl2ZVF1ZXVlKiBxdWV1
ZSkgeyByZXR1cm4gcXVldWU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21h
Yy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUN1cnNvci5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVDdXJzb3IuY3BwCmluZGV4
IDk2MmUyMTFlMWJmMmMxMTgyOGJiZDdlMDc0ODI2OTA5ZDBjMDMzODAuLjM0Y2FjMDk1MWUzZGFk
NjdjNDZkNDkzMzcwMzUxYzA4M2ZjNjZiM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUN1cnNvci5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQ3Vyc29y
LmNwcApAQCAtMTUzLDEzICsxNTMsMTEgQEAgc3RkOjpvcHRpb25hbDx0eXBlbmFtZSBPcmRlcmVk
TWFwOjppdGVyYXRvcj4gTWVkaWFTYW1wbGVDdXJzb3I6OmxvY2F0ZUl0ZXJhdG9yKE8KICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAg
ICAgICAgcmV0dXJuIGxvY2F0ZUl0ZXJhdG9yKHNhbXBsZXMsIGhhc0FsbFNhbXBsZXMpOwotICAg
ICAgICB9LAotICAgICAgICBbJl0oY29uc3QgYXV0byYgb3RoZXJJdGVyYXRvcikgeworICAgICAg
ICB9LCBbJl0oY29uc3QgYXV0byYgb3RoZXJJdGVyYXRvcikgLT4gc3RkOjpvcHRpb25hbDxJdGVy
YXRvcj4gewogICAgICAgICAgICAgYXNzZXJ0SXNIZWxkKG1fbG9jYXRvckxvY2spOwogICAgICAg
ICAgICAgbV9sb2NhdG9yID0gb3RoZXJJdGVyYXRvci0+c2Vjb25kLT5wcmVzZW50YXRpb25UaW1l
KCk7CiAgICAgICAgICAgICByZXR1cm4gbG9jYXRlSXRlcmF0b3Ioc2FtcGxlcywgaGFzQWxsU2Ft
cGxlcyk7Ci0gICAgICAgIH0sCi0gICAgICAgIFsmXShjb25zdCBJdGVyYXRvciYgaXRlcmF0b3Ip
IHsKKyAgICAgICAgfSwgWyZdKGNvbnN0IEl0ZXJhdG9yJiBpdGVyYXRvcikgLT4gc3RkOjpvcHRp
b25hbDxJdGVyYXRvcj4gewogICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yOwogICAgICAgICB9
CiAgICAgKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJB
dXRoZW50aWNhdGlvblBhbmVsLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2Vi
QXV0aGVudGljYXRpb25QYW5lbC5oCmluZGV4IDBiMGUyMWVlYTg2ZGViNGRmMGIyY2EwNGY1NDIz
YTIyY2ViNzM0ZTUuLjgyYzFiZjg5NDFjZDdhYmE2NTU4M2IxM2RmM2Q1YTM1YzZlYzJhZmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlv
blBhbmVsLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVdlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvQXV0aGVudGljYXRvclRyYW5zcG9ydC5oPgogI2luY2x1ZGUgPHd0
Zi9VbmlxdWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgogI2luY2x1ZGUgPHd0Zi9X
ZWFrUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vU2ltdWxhdGVkSW5wdXREaXNwYXRj
aGVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1NpbXVsYXRlZElucHV0
RGlzcGF0Y2hlci5oCmluZGV4IDgwNmIyNTRlMzA3MGJlODQ0YTFiMjM5MTI0MWRlNjc1Yzk0Y2E4
NGQuLjNhYTI1ZmQwNjc5NzgxNjIyZjEwNjY1Yzc0N2JjZDdjNWYzZDFiOGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vU2ltdWxhdGVkSW5wdXREaXNwYXRj
aGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9TaW11bGF0ZWRJ
bnB1dERpc3BhdGNoZXIuaApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPHd0Zi9MaXN0SGFz
aFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1NlY29uZHMu
aD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvV0tTYWZlQnJvd3NpbmdXYXJuaW5nLmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93c2luZ1dhcm5pbmcuaAppbmRleCA2MWJlMzcxN2I4
MDY0NmE2ZmEzMDFiMjIzNTRhZjc4OWEyNTRhNWUwLi40MzE4OWMwYTNhMWU5NTk3ODBjYWIxMmFl
MjZjOGI3N2VkNTM3MDc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9XS1NhZmVCcm93c2luZ1dhcm5pbmcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9XS1NhZmVCcm93c2luZ1dhcm5pbmcuaApAQCAtMjgsNiArMjgsNyBAQAogI2ltcG9ydCA8
d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAjaW1wb3J0IDx3dGYvUmVmUHRyLmg+CiAjaW1wb3J0
IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvVmFyaWFudC5oPgogI2ltcG9ydCA8d3Rm
L1dlYWtPYmpDUHRyLmg+CiAKICNpZiBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5oCmluZGV4IDI3YmNkMDA1NDUwOTU4ZTgwMjEyMzMwYzFlODk2ZTNjODkxNzM0ZmIuLmVh
YTYzMGE0MWYyMzE3YzI2Njc2ZGFiZDM2ZTMzZjNhOWQ3NWEzMjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5oCkBAIC0zMzksNyArMzM5LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgUmVmUHRy
PFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gZW5jb2RlSXRlbU91dE9mTGluZShjb25zdCBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3RJdGVtJiBpdGVtKSBjb25zdCBmaW5hbAogICAgIHsK
LSAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoW10oY29uc3QgYXV0byYgZGlzcGxheUxpc3RJdGVt
KSAtPiBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiB7CisgICAgICAgIHJldHVybiBzdGQ6
OnZpc2l0KFtdKGNvbnN0IGF1dG8mIGRpc3BsYXlMaXN0SXRlbSkgLT4gUmVmUHRyPFdlYkNvcmU6
OlNoYXJlZEJ1ZmZlcj4gewogICAgICAgICAgICAgdXNpbmcgRGlzcGxheUxpc3RJdGVtVHlwZSA9
IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUoZGlzcGxheUxpc3RJ
dGVtKT46OnR5cGU7CiAgICAgICAgICAgICBpZiBjb25zdGV4cHIgKCFEaXNwbGF5TGlzdEl0ZW1U
eXBlOjppc0lubGluZUl0ZW0pCiAgICAgICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6
ZW5jb2RlU2luZ2xlT2JqZWN0PERpc3BsYXlMaXN0SXRlbVR5cGU+KGRpc3BsYXlMaXN0SXRlbSk7
CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggY2M1
NDg1MzlhMWMwZDhmZjAyYTMwMGFjMDg5ZGJhMzU0OTVmZTk0Ni4uZWZlNDg3YmFlNzIxNzU2ZTFk
ZjI3NDIwNTZiMDY1MTBmYzRmMTM2YSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBi
L1Rvb2xzL0NoYW5nZUxvZwpAQCAtNiw2ICs2LDIwIEBACiAKICAgICAgICAgKiBDSVN1cHBvcnQv
ZXdzLWJ1aWxkL21hc3Rlci5jZmc6CiAKKzIwMjEtMTAtMDQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxh
Y2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBCZWdpbiBtaWdyYXRpb24gZnJvbSBX
VEY6OlZhcmlhbnQgdG8gc3RkOjp2YXJpYW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzEwODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hlci5jcHA6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjphZGQpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL1ZhcmlhbnQuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcml2YXRlQ2xpY2tNZWFz
dXJlbWVudC5tbToKKyAgICAgICAgKGFkZFZhbHVlc1RvVGFibGUpOgorCiAyMDIxLTEwLTAzICBE
YXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgV1RGOjpSZXRhaW5Q
dHI8PiBhbGxvd3MgYXNzaWdubWVudCBvZiB0d28gcG9pbnRlciB0eXBlcyB0aGF0IGFyZSBub3Qg
YXNzaWduYWJsZQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFz
aGVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hlci5jcHAKaW5kZXgg
NTllMjI1NjI0ZmIzYTVmZDY1MmNkMmEyYTI0OWZhNjUzNGQ5NjA0NS4uODY0ODk2ODUyNThlZjFj
OThkYzkwYjI2NTQ0YzRmNGVjZWRlYzQ4NyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvSGFzaGVyLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9IYXNoZXIuY3BwCkBAIC0yMDAsNyArMjAwLDcgQEAgc3RydWN0IEhhc2hlckFkZEN1c3RvbTIg
eyB9OwogCiB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgSGFzaGVyQWRkQ3VzdG9tMiYp
CiB7Ci0gICAgYWRkKGhhc2hlciwgeyAxLCAyLCAzLCA0IH0pOworICAgIGFkZChoYXNoZXIsIHN0
ZDo6aW5pdGlhbGl6ZXJfbGlzdDxpbnQ+IHsgMSwgMiwgMywgNCB9KTsKIH0KIAogVEVTVChXVEYs
IEhhc2hlcl9jdXN0b20pCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9WYXJpYW50LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQuY3Bw
CmluZGV4IDUxZWNhMDc2OGQyY2NlMWM5YTMyOTU1NTJkMzUwMDlmZjRmZDU2YmIuLmU0ODVkNDMw
N2FlZmQwNmQ5ZmRmYmEzODY0ZTkzMjI0MzliMzE2YzUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL1ZhcmlhbnQuY3BwCkBAIC01NCwxOCArNTQsMTggQEAgVEVTVChXVEZfVmFyaWFu
dCwgSW5pdGlhbCkKIFRFU1QoV1RGX1ZhcmlhbnQsIEJhc2ljKQogewogICAgIFZhcmlhbnQ8aW50
LCBkb3VibGU+IHZhcmlhbnQgPSAxOwotICAgIEVYUEVDVF9UUlVFKHZhcmlhbnQuaW5kZXgoKSA9
PSAwKTsKLSAgICBFWFBFQ1RfVFJVRShXVEY6OmdldDxpbnQ+KHZhcmlhbnQpID09IDEpOwotICAg
IEVYUEVDVF9UUlVFKCpXVEY6OmdldF9pZjxpbnQ+KHZhcmlhbnQpID09IDEpOwotICAgIEVYUEVD
VF9UUlVFKFdURjo6Z2V0X2lmPGRvdWJsZT4odmFyaWFudCkgPT0gbnVsbHB0cik7CisgICAgRVhQ
RUNUX0VRKHZhcmlhbnQuaW5kZXgoKSwgMHUpOworICAgIEVYUEVDVF9FUShXVEY6OmdldDxpbnQ+
KHZhcmlhbnQpLCAxKTsKKyAgICBFWFBFQ1RfRVEoKnN0ZDo6Z2V0X2lmPGludD4oJnZhcmlhbnQp
LCAxKTsKKyAgICBFWFBFQ1RfRVEoc3RkOjpnZXRfaWY8ZG91YmxlPigmdmFyaWFudCksIG51bGxw
dHIpOwogICAgIEVYUEVDVF9UUlVFKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8aW50Pih2YXJpYW50
KSk7CiAgICAgRVhQRUNUX0ZBTFNFKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPih2YXJp
YW50KSk7CiAKICAgICB2YXJpYW50ID0gMS4wOwotICAgIEVYUEVDVF9UUlVFKHZhcmlhbnQuaW5k
ZXgoKSA9PSAxKTsKLSAgICBFWFBFQ1RfVFJVRShXVEY6OmdldDxkb3VibGU+KHZhcmlhbnQpID09
IDEpOwotICAgIEVYUEVDVF9UUlVFKCpXVEY6OmdldF9pZjxkb3VibGU+KHZhcmlhbnQpID09IDEu
MCk7Ci0gICAgRVhQRUNUX1RSVUUoV1RGOjpnZXRfaWY8aW50Pih2YXJpYW50KSA9PSBudWxscHRy
KTsKKyAgICBFWFBFQ1RfRVEodmFyaWFudC5pbmRleCgpLCAxdSk7CisgICAgRVhQRUNUX0VRKFdU
Rjo6Z2V0PGRvdWJsZT4odmFyaWFudCksIDEpOworICAgIEVYUEVDVF9FUSgqc3RkOjpnZXRfaWY8
ZG91YmxlPigmdmFyaWFudCksIDEuMCk7CisgICAgRVhQRUNUX0VRKHN0ZDo6Z2V0X2lmPGludD4o
JnZhcmlhbnQpLCBudWxscHRyKTsKICAgICBFWFBFQ1RfVFJVRShXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPGRvdWJsZT4odmFyaWFudCkpOwogICAgIEVYUEVDVF9GQUxTRShXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPGludD4odmFyaWFudCkpOwogfQpAQCAtOTUsMTcgKzk1LDE3IEBAIFRFU1QoV1RGX1Zh
cmlhbnQsIEJhc2ljVmlzaXRvcikKICAgICBUeXBlIHR5cGUgPSBUeXBlOjpOb25lOwogCiAgICAg
VmFyaWFudDxpbnQsIGZsb2F0LCBTdHJpbmc+IHZhcmlhbnQgPSA4OwotICAgIFdURjo6dmlzaXQo
VmlzaXRvcih0eXBlKSwgdmFyaWFudCk7CisgICAgc3RkOjp2aXNpdChWaXNpdG9yKHR5cGUpLCB2
YXJpYW50KTsKICAgICBFWFBFQ1RfVFJVRShUeXBlOjpJbnQgPT0gdHlwZSk7CiAKIAogICAgIHZh
cmlhbnQgPSAxLjBmOwotICAgIFdURjo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFudCk7Cisg
ICAgc3RkOjp2aXNpdChWaXNpdG9yKHR5cGUpLCB2YXJpYW50KTsKICAgICBFWFBFQ1RfVFJVRShU
eXBlOjpGbG9hdCA9PSB0eXBlKTsKIAogCiAgICAgdmFyaWFudCA9ICJoZWxsbyI7Ci0gICAgV1RG
Ojp2aXNpdChWaXNpdG9yKHR5cGUpLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0KFZpc2l0b3Io
dHlwZSksIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6OlN0cmluZyA9PSB0eXBlKTsK
IH0KIApAQCAtMTI4LDExICsxMjgsMTEgQEAgVEVTVChXVEZfVmFyaWFudCwgUmV0YWluUHRyKQog
ICAgIFJlZlB0cjxSZWZMb2dnZXI+IHJlZlB0cjsKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBy
ZXRhaW5QdHI7CiAgICAgVmFyaWFudDxSZWZQdHI8UmVmTG9nZ2VyPiwgUmV0YWluUHRyPENGRGF0
YVJlZj4+IHZhcmlhbnQoV1RGTW92ZShyZWZQdHIpKTsKLSAgICBXVEY6OnZpc2l0KHZpc2l0b3Is
IHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CiAgICAgRVhQRUNU
X1RSVUUoVHlwZTo6UmVmUHRyID09IHR5cGUpOwogICAgIAogICAgIHZhcmlhbnQgPSBXVEZNb3Zl
KHJldGFpblB0cik7Ci0gICAgV1RGOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBzdGQ6
OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6OlJldGFpblB0
ciA9PSB0eXBlKTsKIH0KICNlbmRpZgpAQCAtMTU1LDE3ICsxNTUsMTcgQEAgVEVTVChXVEZfVmFy
aWFudCwgVmlzaXRvclVzaW5nTWFrZVZpc2l0b3IpCiAgICAgKTsKIAogICAgIFZhcmlhbnQ8aW50
LCBmbG9hdCwgU3RyaW5nPiB2YXJpYW50ID0gODsKLSAgICBXVEY6OnZpc2l0KHZpc2l0b3IsIHZh
cmlhbnQpOworICAgIHN0ZDo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CiAgICAgRVhQRUNUX1RS
VUUoVHlwZTo6SW50ID09IHR5cGUpOwogCiAKICAgICB2YXJpYW50ID0gMS4wZjsKLSAgICBXVEY6
OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQodmlzaXRvciwgdmFyaWFu
dCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6RmxvYXQgPT0gdHlwZSk7CiAKIAogICAgIHZhcmlh
bnQgPSAiaGVsbG8iOwotICAgIFdURjo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CisgICAgc3Rk
Ojp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKICAgICBFWFBFQ1RfVFJVRShUeXBlOjpTdHJpbmcg
PT0gdHlwZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1ByaXZhdGVDbGlja01lYXN1cmVtZW50Lm1tCmluZGV4IDdmYmJm
MjJkODZhYjQ0NTc5ZjE1ZTc3ODY3ZDZjOTRlMmYwOWYxODEuLmI0NzBkZjc0OTEwNmNiMGVhMjAx
NjA0NTE4OGUyOGI4MjlhMzY2ODcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQubW0KKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC5tbQpA
QCAtNjQsNyArNjQsNyBAQCB2b2lkIGFkZFZhbHVlc1RvVGFibGUoV2ViQ29yZTo6U1FMaXRlRGF0
YWJhc2UmIGRhdGFiYXNlLCBBU0NJSUxpdGVyYWwgcXVlcnksIHN0ZAogICAgICAgICB9LCBbJl0g
KGRvdWJsZSByZWFsKSB7CiAgICAgICAgICAgICByZXR1cm4gc3RhdGVtZW50LT5iaW5kRG91Ymxl
KGkgKyAxLCByZWFsKTsKICAgICAgICAgfSk7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGOjp2
aXNpdCh2aXNpdG9yLCB2YWx1ZXNbaV0pOworICAgICAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6dmlz
aXQodmlzaXRvciwgdmFsdWVzW2ldKTsKICAgICAgICAgRVhQRUNUX0VRKHJlc3VsdCwgU1FMSVRF
X09LKTsKICAgICB9CiAgICAgRVhQRUNUX0VRKHN0YXRlbWVudC0+c3RlcCgpLCBTUUxJVEVfRE9O
RSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440123</attachid>
            <date>2021-10-04 16:39:22 -0700</date>
            <delta_ts>2021-10-11 18:04:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231086-20211004163921.patch</filename>
            <type>text/plain</type>
            <size>166392</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjgzNTAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBA
CisyMDIxLTEwLTA0ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgQmVnaW4gbWlncmF0aW9uIGZyb20gV1RGOjpWYXJpYW50IHRvIHN0ZDo6dmFy
aWFudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMx
MDg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBi
eXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcDoKKyAgICAgICAgKEpT
Qzo6V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjphZGRXYXRjaHBvaW50KToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlQ2FsbERPTSk6CisgICAgICAgICogcGFyc2VyL0xleGVyLmNwcDoK
KyAgICAgICAgKEpTQzo6TGV4ZXI8VD46OnBhcnNlSGV4KToKKyAgICAgICAgKEpTQzo6TGV4ZXI8
VD46OnBhcnNlQmluYXJ5KToKKyAgICAgICAgKEpTQzo6TGV4ZXI8VD46OnBhcnNlT2N0YWwpOgor
ICAgICAgICAoSlNDOjpMZXhlcjxUPjo6cGFyc2VEZWNpbWFsKToKKyAgICAgICAgKiBydW50aW1l
L0NhY2hlUGF5bG9hZC5jcHA6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6ZGF0YSBjb25z
dCk6CisgICAgICAgIChKU0M6OkNhY2hlUGF5bG9hZDo6c2l6ZSBjb25zdCk6CisgICAgICAgICog
cnVudGltZS9DYWNoZVVwZGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkNhY2hlVXBkYXRlOjpDYWNo
ZVVwZGF0ZSk6CisgICAgICAgICogcnVudGltZS9UZW1wb3JhbFRpbWVab25lLmNwcDoKKyAgICAg
ICAgKEpTQzo6VGVtcG9yYWxUaW1lWm9uZTo6Y3JlYXRlRnJvbUlEKToKKyAgICAgICAgKEpTQzo6
VGVtcG9yYWxUaW1lWm9uZTo6Y3JlYXRlRnJvbVVUQ09mZnNldCk6CisKIDIwMjEtMTAtMDMgIERv
biBPbG1zdGVhZCAgPGRvbi5vbG1zdGVhZEBzb255LmNvbT4KIAogICAgICAgICBOb24tdW5pZmll
ZCBidWlsZCBmaXhlcywgZWFybHkgT2N0b2JlciAyMDIxIGVkaXRpb24KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDI4MzUwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjUsOSArNjUsOSBAQCBpbmxpbmUgYm9vbCBXYXRjaHBvaW50
c09uU3RydWN0dXJlU3R1YkluCiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86Ok5vZGUm
IFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hwb2ludChjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQogewogICAgIGlmICgha2V5IHx8IGtleS5jb25kaXRp
b24oKS5raW5kKCkgIT0gUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlKQotICAgICAgICBy
ZXR1cm4gKm1fd2F0Y2hwb2ludHMuYWRkKFdURjo6aW5fcGxhY2U8U3RydWN0dXJlVHJhbnNpdGlv
blN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+LCBrZXksICp0aGlzKTsKKyAgICAgICAg
cmV0dXJuICptX3dhdGNocG9pbnRzLmFkZChzdGQ6OmluX3BsYWNlX3R5cGU8U3RydWN0dXJlVHJh
bnNpdGlvblN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+LCBrZXksICp0aGlzKTsKICAg
ICBBU1NFUlQoa2V5LmNvbmRpdGlvbigpLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1
aXZhbGVuY2UpOwotICAgIHJldHVybiAqbV93YXRjaHBvaW50cy5hZGQoV1RGOjppbl9wbGFjZTxB
ZGFwdGl2ZVZhbHVlU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4sIGtleSwgKnRoaXMp
OworICAgIHJldHVybiAqbV93YXRjaHBvaW50cy5hZGQoc3RkOjppbl9wbGFjZV90eXBlPEFkYXB0
aXZlVmFsdWVTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50Piwga2V5LCAqdGhpcyk7CiB9
CiAKIHZvaWQgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VB
bmRJbnN0YWxsV2F0Y2hwb2ludCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyODM1MDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA1NDgsMTMgKzEwNTQ4LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDYWxsRE9N
KE5vZGUKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIHdheSB0byBjYWxsIGZ1bmN0
aW9ucyB3aXRoIHRoZSB2ZWN0b3Igb2YgcmVnaXN0ZXJzLgogICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMwOTkKLSAgICBWZWN0b3I8VmFyaWFudDxTcGVj
dWxhdGVDZWxsT3BlcmFuZCwgU3BlY3VsYXRlSW50MzJPcGVyYW5kLCBTcGVjdWxhdGVCb29sZWFu
T3BlcmFuZD4sIEpTQ19ET01KSVRfU0lHTkFUVVJFX01BWF9BUkdVTUVOVFNfSU5DTFVESU5HX1RI
SVM+IG9wZXJhbmRzOworICAgIHVzaW5nIE9wZXJhbmRWYXJpYW50ID0gVmFyaWFudDxTcGVjdWxh
dGVDZWxsT3BlcmFuZCwgU3BlY3VsYXRlSW50MzJPcGVyYW5kLCBTcGVjdWxhdGVCb29sZWFuT3Bl
cmFuZD47CisgICAgVmVjdG9yPE9wZXJhbmRWYXJpYW50LCBKU0NfRE9NSklUX1NJR05BVFVSRV9N
QVhfQVJHVU1FTlRTX0lOQ0xVRElOR19USElTPiBvcGVyYW5kczsKICAgICBWZWN0b3I8R1BSUmVn
LCBKU0NfRE9NSklUX1NJR05BVFVSRV9NQVhfQVJHVU1FTlRTX0lOQ0xVRElOR19USElTPiByZWdz
OwogCiAgICAgYXV0byBhcHBlbmRDZWxsID0gWyZdKEVkZ2UmIGVkZ2UpIHsKICAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlKTsKICAgICAgICAgcmVncy5hcHBl
bmQob3BlcmFuZC5ncHIoKSk7Ci0gICAgICAgIG9wZXJhbmRzLmFwcGVuZChXVEZNb3ZlKG9wZXJh
bmQpKTsKKyAgICAgICAgb3BlcmFuZHMuYXBwZW5kKE9wZXJhbmRWYXJpYW50KHN0ZDo6aW5fcGxh
Y2VfdHlwZTxTcGVjdWxhdGVDZWxsT3BlcmFuZD4sIFdURk1vdmUob3BlcmFuZCkpKTsKICAgICB9
OwogCiAgICAgYXV0byBhcHBlbmRTdHJpbmcgPSBbJl0oRWRnZSYgZWRnZSkgewpAQCAtMTA1NjIs
MTkgKzEwNTYzLDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDYWxsRE9NKE5vZGUK
ICAgICAgICAgR1BSUmVnIGdwciA9IG9wZXJhbmQuZ3ByKCk7CiAgICAgICAgIHJlZ3MuYXBwZW5k
KGdwcik7CiAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhlZGdlLCBncHIpOwotICAgICAgICBvcGVy
YW5kcy5hcHBlbmQoV1RGTW92ZShvcGVyYW5kKSk7CisgICAgICAgIG9wZXJhbmRzLmFwcGVuZChP
cGVyYW5kVmFyaWFudChzdGQ6OmluX3BsYWNlX3R5cGU8U3BlY3VsYXRlQ2VsbE9wZXJhbmQ+LCBX
VEZNb3ZlKG9wZXJhbmQpKSk7CiAgICAgfTsKIAogICAgIGF1dG8gYXBwZW5kSW50MzIgPSBbJl0o
RWRnZSYgZWRnZSkgewogICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgb3BlcmFuZCh0aGlz
LCBlZGdlKTsKICAgICAgICAgcmVncy5hcHBlbmQob3BlcmFuZC5ncHIoKSk7Ci0gICAgICAgIG9w
ZXJhbmRzLmFwcGVuZChXVEZNb3ZlKG9wZXJhbmQpKTsKKyAgICAgICAgb3BlcmFuZHMuYXBwZW5k
KE9wZXJhbmRWYXJpYW50KHN0ZDo6aW5fcGxhY2VfdHlwZTxTcGVjdWxhdGVJbnQzMk9wZXJhbmQ+
LCBXVEZNb3ZlKG9wZXJhbmQpKSk7CiAgICAgfTsKIAogICAgIGF1dG8gYXBwZW5kQm9vbGVhbiA9
IFsmXShFZGdlJiBlZGdlKSB7CiAgICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIG9wZXJh
bmQodGhpcywgZWRnZSk7CiAgICAgICAgIHJlZ3MuYXBwZW5kKG9wZXJhbmQuZ3ByKCkpOwotICAg
ICAgICBvcGVyYW5kcy5hcHBlbmQoV1RGTW92ZShvcGVyYW5kKSk7CisgICAgICAgIG9wZXJhbmRz
LmFwcGVuZChPcGVyYW5kVmFyaWFudChzdGQ6OmluX3BsYWNlX3R5cGU8U3BlY3VsYXRlQm9vbGVh
bk9wZXJhbmQ+LCBXVEZNb3ZlKG9wZXJhbmQpKSk7CiAgICAgfTsKIAogICAgIHVuc2lnbmVkIGlu
ZGV4ID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCShyZXZp
c2lvbiAyODM1MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTU1MCw3ICsxNTUwLDcgQEAgQUxXQVlTX0lOTElORSBhdXRvIExl
eGVyPFQ+OjpwYXJzZUhleCgpIAogICAgIH0gd2hpbGUgKGlzQVNDSUlIZXhEaWdpdE9yU2VwYXJh
dG9yKG1fY3VycmVudCkgJiYgbWF4aW11bURpZ2l0cyA+PSAwKTsKIAogICAgIGlmIChMSUtFTFko
bWF4aW11bURpZ2l0cyA+PSAwICYmIG1fY3VycmVudCAhPSAnbicpKQotICAgICAgICByZXR1cm4g
TnVtYmVyUGFyc2VSZXN1bHQgeyBoZXhWYWx1ZSB9OworICAgICAgICByZXR1cm4gTnVtYmVyUGFy
c2VSZXN1bHQgeyBzdGF0aWNfY2FzdDxkb3VibGU+KGhleFZhbHVlKSB9OwogCiAgICAgLy8gTm8g
bW9yZSBwbGFjZSBpbiB0aGUgaGV4VmFsdWUgYnVmZmVyLgogICAgIC8vIFRoZSB2YWx1ZXMgYXJl
IHNoaWZ0ZWQgb3V0IGFuZCBwbGFjZWQgaW50byB0aGUgbV9idWZmZXI4IHZlY3Rvci4KQEAgLTE2
MDksNyArMTYwOSw3IEBAIEFMV0FZU19JTkxJTkUgYXV0byBMZXhlcjxUPjo6cGFyc2VCaW5hcnkK
ICAgICB9IHdoaWxlIChpc0FTQ0lJQmluYXJ5RGlnaXRPclNlcGFyYXRvcihtX2N1cnJlbnQpICYm
IGRpZ2l0ID49IDApOwogCiAgICAgaWYgKExJS0VMWSghaXNBU0NJSURpZ2l0T3JTZXBhcmF0b3Io
bV9jdXJyZW50KSAmJiBkaWdpdCA+PSAwICYmIG1fY3VycmVudCAhPSAnbicpKQotICAgICAgICBy
ZXR1cm4gTnVtYmVyUGFyc2VSZXN1bHQgeyBiaW5hcnlWYWx1ZSB9OworICAgICAgICByZXR1cm4g
TnVtYmVyUGFyc2VSZXN1bHQgeyBzdGF0aWNfY2FzdDxkb3VibGU+KGJpbmFyeVZhbHVlKSB9Owog
CiAgICAgZm9yIChpbnQgaSA9IG1heGltdW1EaWdpdHMgLSAxOyBpID4gZGlnaXQ7IC0taSkKICAg
ICAgICAgcmVjb3JkOChkaWdpdHNbaV0pOwpAQCAtMTY2NSw3ICsxNjY1LDcgQEAgQUxXQVlTX0lO
TElORSBhdXRvIExleGVyPFQ+OjpwYXJzZU9jdGFsKAogICAgIH0gd2hpbGUgKGlzQVNDSUlPY3Rh
bERpZ2l0T3JTZXBhcmF0b3IobV9jdXJyZW50KSAmJiBkaWdpdCA+PSAwKTsKIAogICAgIGlmIChM
SUtFTFkoIWlzQVNDSUlEaWdpdE9yU2VwYXJhdG9yKG1fY3VycmVudCkgJiYgZGlnaXQgPj0gMCAm
JiBtX2N1cnJlbnQgIT0gJ24nKSkKLSAgICAgICAgcmV0dXJuIE51bWJlclBhcnNlUmVzdWx0IHsg
b2N0YWxWYWx1ZSB9OworICAgICAgICByZXR1cm4gTnVtYmVyUGFyc2VSZXN1bHQgeyBzdGF0aWNf
Y2FzdDxkb3VibGU+KG9jdGFsVmFsdWUpIH07CiAKICAgICBmb3IgKGludCBpID0gbWF4aW11bURp
Z2l0cyAtIDE7IGkgPiBkaWdpdDsgLS1pKQogICAgICAgICAgcmVjb3JkOChkaWdpdHNbaV0pOwpA
QCAtMTcyNCw3ICsxNzI0LDcgQEAgQUxXQVlTX0lOTElORSBhdXRvIExleGVyPFQ+OjpwYXJzZURl
Y2ltYQogICAgICAgICB9IHdoaWxlIChpc0FTQ0lJRGlnaXRPclNlcGFyYXRvcihtX2N1cnJlbnQp
ICYmIGRpZ2l0ID49IDApOwogCiAgICAgICAgIGlmIChkaWdpdCA+PSAwICYmIG1fY3VycmVudCAh
PSAnLicgJiYgIWlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwobV9jdXJyZW50LCAnZScpICYmIG1f
Y3VycmVudCAhPSAnbicpCi0gICAgICAgICAgICByZXR1cm4gTnVtYmVyUGFyc2VSZXN1bHQgeyBk
ZWNpbWFsVmFsdWUgfTsKKyAgICAgICAgICAgIHJldHVybiBOdW1iZXJQYXJzZVJlc3VsdCB7IHN0
YXRpY19jYXN0PGRvdWJsZT4oZGVjaW1hbFZhbHVlKSB9OwogCiAgICAgICAgIGZvciAoaW50IGkg
PSBtYXhpbXVtRGlnaXRzIC0gMTsgaSA+IGRpZ2l0OyAtLWkpCiAgICAgICAgICAgICByZWNvcmQ4
KGRpZ2l0c1tpXSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZVBh
eWxvYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
Y2hlUGF5bG9hZC5jcHAJKHJldmlzaW9uIDI4MzUwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhY2hlUGF5bG9hZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDIxICs2MSwy
MSBAQCBjb25zdCB1aW50OF90KiBDYWNoZVBheWxvYWQ6OmRhdGEoKSBjb25zCiAgICAgcmV0dXJu
IFdURjo6c3dpdGNoT24obV9kYXRhLAogICAgICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBw
ZWRGaWxlRGF0YSYgZGF0YSkgewogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IHVpbnQ4X3QqPihkYXRhLmRhdGEoKSk7Ci0gICAgICAgIH0sCi0gICAgICAgIFtdKGNvbnN0IHN0
ZDo6cGFpcjxNYWxsb2NQdHI8dWludDhfdCwgVk1NYWxsb2M+LCBzaXplX3Q+JiBkYXRhKSB7Cisg
ICAgICAgIH0sIFtdKGNvbnN0IHN0ZDo6cGFpcjxNYWxsb2NQdHI8dWludDhfdCwgVk1NYWxsb2M+
LCBzaXplX3Q+JiBkYXRhKSAtPiBjb25zdCB1aW50OF90KiB7CiAgICAgICAgICAgICByZXR1cm4g
ZGF0YS5maXJzdC5nZXQoKTsKLSAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICApOwogfQogCiBz
aXplX3QgQ2FjaGVQYXlsb2FkOjpzaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4gV1RGOjpzd2l0
Y2hPbihtX2RhdGEsCi0gICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRh
JiBkYXRhKSB7CisgICAgICAgIFtdKGNvbnN0IEZpbGVTeXN0ZW06Ok1hcHBlZEZpbGVEYXRhJiBk
YXRhKSAtPiBzaXplX3QgewogICAgICAgICAgICAgcmV0dXJuIGRhdGEuc2l6ZSgpOwotICAgICAg
ICB9LAotICAgICAgICBbXShjb25zdCBzdGQ6OnBhaXI8TWFsbG9jUHRyPHVpbnQ4X3QsIFZNTWFs
bG9jPiwgc2l6ZV90PiYgZGF0YSkgeworICAgICAgICB9LCBbXShjb25zdCBzdGQ6OnBhaXI8TWFs
bG9jUHRyPHVpbnQ4X3QsIFZNTWFsbG9jPiwgc2l6ZV90PiYgZGF0YSkgLT4gc2l6ZV90IHsKICAg
ICAgICAgICAgIHJldHVybiBkYXRhLnNlY29uZDsKLSAgICAgICAgfSk7CisgICAgICAgIH0KKyAg
ICApOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhY2hlVXBkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZVVwZGF0ZS5jcHAJKHJldmlzaW9uIDI4MzUwMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlVXBkYXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzksMTEgKzM5LDggQEAgQ2FjaGVVcGRhdGU6OkNhY2hlVXBkYXRlKEZ1bmN0aW9uVXBkYXRl
JgogfQogCiBDYWNoZVVwZGF0ZTo6Q2FjaGVVcGRhdGUoQ2FjaGVVcGRhdGUmJiBvdGhlcikKKyAg
ICA6IG1fdXBkYXRlKFdURk1vdmUob3RoZXIubV91cGRhdGUpKQogewotICAgIGlmIChXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPEdsb2JhbFVwZGF0ZT4ob3RoZXIubV91cGRhdGUpKQotICAgICAgICBu
ZXcgKHRoaXMpIENhY2hlVXBkYXRlKFdURk1vdmUoV1RGOjpnZXQ8R2xvYmFsVXBkYXRlPihvdGhl
ci5tX3VwZGF0ZSkpKTsKLSAgICBlbHNlCi0gICAgICAgIG5ldyAodGhpcykgQ2FjaGVVcGRhdGUo
V1RGTW92ZShXVEY6OmdldDxGdW5jdGlvblVwZGF0ZT4ob3RoZXIubV91cGRhdGUpKSk7CiB9CiAK
IENhY2hlVXBkYXRlJiBDYWNoZVVwZGF0ZTo6b3BlcmF0b3I9KENhY2hlVXBkYXRlJiYgb3RoZXIp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbFRpbWVab25lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wb3JhbFRp
bWVab25lLmNwcAkocmV2aXNpb24gMjgzNTAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVGVtcG9yYWxUaW1lWm9uZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE0ICszNSwx
NCBAQCBjb25zdCBDbGFzc0luZm8gVGVtcG9yYWxUaW1lWm9uZTo6c19pbmZvCiAKIFRlbXBvcmFs
VGltZVpvbmUqIFRlbXBvcmFsVGltZVpvbmU6OmNyZWF0ZUZyb21JRChWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBUaW1lWm9uZUlEIGlkZW50aWZpZXIpCiB7Ci0gICAgVGVtcG9yYWxUaW1l
Wm9uZSogZm9ybWF0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VGVtcG9yYWxUaW1lWm9u
ZT4odm0uaGVhcCkpIFRlbXBvcmFsVGltZVpvbmUodm0sIHN0cnVjdHVyZSwgVGltZVpvbmUgeyBX
VEY6OmluX3BsYWNlPDA+LCBpZGVudGlmaWVyIH0pOworICAgIFRlbXBvcmFsVGltZVpvbmUqIGZv
cm1hdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFRlbXBvcmFsVGltZVpvbmU+KHZtLmhl
YXApKSBUZW1wb3JhbFRpbWVab25lKHZtLCBzdHJ1Y3R1cmUsIFRpbWVab25lIHsgc3RkOjppbl9w
bGFjZV9pbmRleF90PDA+KCksIGlkZW50aWZpZXIgfSk7CiAgICAgZm9ybWF0LT5maW5pc2hDcmVh
dGlvbih2bSk7CiAgICAgcmV0dXJuIGZvcm1hdDsKIH0KIAogVGVtcG9yYWxUaW1lWm9uZSogVGVt
cG9yYWxUaW1lWm9uZTo6Y3JlYXRlRnJvbVVUQ09mZnNldChWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBpbnQ2NF90IHV0Y09mZnNldCkKIHsKLSAgICBUZW1wb3JhbFRpbWVab25lKiBmb3Jt
YXQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxUZW1wb3JhbFRpbWVab25lPih2bS5oZWFw
KSkgVGVtcG9yYWxUaW1lWm9uZSh2bSwgc3RydWN0dXJlLCBUaW1lWm9uZSB7IFdURjo6aW5fcGxh
Y2U8MT4sIHV0Y09mZnNldCB9KTsKKyAgICBUZW1wb3JhbFRpbWVab25lKiBmb3JtYXQgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxUZW1wb3JhbFRpbWVab25lPih2bS5oZWFwKSkgVGVtcG9y
YWxUaW1lWm9uZSh2bSwgc3RydWN0dXJlLCBUaW1lWm9uZSB7IHN0ZDo6aW5fcGxhY2VfaW5kZXhf
dDwxPigpLCB1dGNPZmZzZXQgfSk7CiAgICAgZm9ybWF0LT5maW5pc2hDcmVhdGlvbih2bSk7CiAg
ICAgcmV0dXJuIGZvcm1hdDsKIH0KSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODM1MDMpCisrKyBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDIxLTEwLTA0
ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
QmVnaW4gbWlncmF0aW9uIGZyb20gV1RGOjpWYXJpYW50IHRvIHN0ZDo6dmFyaWFudAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMDg2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvRm9yd2FyZC5o
OgorICAgICAgICAqIHd0Zi9IYXNoZXIuaDoKKyAgICAgICAgKFdURjo6YWRkKToKKyAgICAgICAg
KiB3dGYvTGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQuaDoKKyAgICAgICAgKFdURjo6TGlr
ZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ6Oml0ZXJhdG9yOjpvcGVyYXRvciogY29uc3QpOgor
ICAgICAgICAqIHd0Zi9WYXJpYW50Lmg6CisgICAgICAgIChXVEY6OmdldCk6CisgICAgICAgIChX
VEY6OnN3aXRjaE9uKToKKyAgICAgICAgKFdURjo6aW5fcGxhY2UpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6Oj0pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3ZhcmlhbnRfc3RvcmFnZTo6X19nZXQp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3ZhcmlhbnRfc3RvcmFnZTo6X19nZXRfcnJlZik6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fdmFyaWFudF9zdG9yYWdlOjpfX2Rlc3Ryb3kpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjo6X19jb25zdHJ1Y3QpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjo6X19zdG9yYWdlX3dyYXBw
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjo6X19nZXQpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjo6X19nZXQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjo6X19kZXN0cm95KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6X19zdG9yYWdlX3dyYXBwZXI8X1R5cGU6Ol9fc3RvcmFnZV93
cmFwcGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19zdG9yYWdlX3dyYXBwZXI8X1R5cGU6
Ol9fZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19zdG9yYWdlX3dyYXBwZXI8X1R5cGU6
Ol9fZ2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X192YXJpYW50X2Jhc2U6On5f
X3ZhcmlhbnRfYmFzZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fYmFja3VwX3N0b3JhZ2Vf
b3BzOjpfX21vdmVfY29uc3RydWN0X2Z1bmMpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX2Jh
Y2t1cF9zdG9yYWdlX29wczo6X19kZXN0cm95X2Z1bmMpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpfX2JhY2t1cF9zdG9yYWdlOjpfX2JhY2t1cF9zdG9yYWdlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6X19iYWNrdXBfc3RvcmFnZTo6X19kZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6X19iYWNrdXBfc3RvcmFnZTo6fl9fYmFja3VwX3N0b3JhZ2UpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpWYXJpYW50PD46OnN3YXApOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX05PRVhD
RVBUXyk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fdmFyaWFudF9hY2Nlc3Nvcjo6Z2V0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6Z2V0X2lmKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
X192aXNpdG9yX3RhYmxlOjpfX3RyYW1wb2xpbmVfZnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OnZpc2l0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19hcmdfc2VsZWN0b3IpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpfX3Zpc2l0X2hlbHBlcjI6Ol9fdmlzaXQpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpvcGVyYXRvcj09KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6b3BlcmF0
b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Om9wZXJhdG9yPCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Om9wZXJhdG9yPik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Om9wZXJhdG9yPj0p
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpvcGVyYXRvcjw9KTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6X19oYXNoX3Zpc2l0b3I6Om9wZXJhdG9yKCkpOiBEZWxldGVkLgorCiAyMDIxLTEwLTAz
ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgV1RGOjpSZXRh
aW5QdHI8PiBhbGxvd3MgYXNzaWdubWVudCBvZiB0d28gcG9pbnRlciB0eXBlcyB0aGF0IGFyZSBu
b3QgYXNzaWduYWJsZQpJbmRleDogU291cmNlL1dURi93dGYvRm9yd2FyZC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaAkocmV2aXNpb24gMjgzNTAzKQorKysgU291cmNl
L1dURi93dGYvRm9yd2FyZC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw2IEBAIHRlbXBs
YXRlPHR5cGVuYW1lPiBjbGFzcyBTdHJpbmdCdWZmZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xh
c3MgU3RyaW5nUGFyc2luZ0J1ZmZlcjsKIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSA9IHZv
aWQ+IGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyOwogdGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIFVu
aXF1ZVJlZjsKLXRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcyBWYXJpYW50OwogdGVtcGxhdGU8
dHlwZW5hbWUsIHNpemVfdCA9IDAsIHR5cGVuYW1lID0gQ3Jhc2hPbk92ZXJmbG93LCBzaXplX3Qg
PSAxNiwgdHlwZW5hbWUgTWFsbG9jID0gVmVjdG9yTWFsbG9jPiBjbGFzcyBWZWN0b3I7CiB0ZW1w
bGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWUgPSBFbXB0eUNvdW50ZXI+IGNsYXNzIFdlYWtQdHI7CiAK
QEAgLTE1Nyw3ICsxNTYsNiBAQCB1c2luZyBXVEY6OlRleHRQb3NpdGlvbjsKIHVzaW5nIFdURjo6
VGV4dFN0cmVhbTsKIHVzaW5nIFdURjo6VVJMOwogdXNpbmcgV1RGOjpVbmlxdWVSZWY7Ci11c2lu
ZyBXVEY6OlZhcmlhbnQ7CiB1c2luZyBXVEY6OlZlY3RvcjsKIAogdGVtcGxhdGU8Y2xhc3MgVCwg
Y2xhc3MgRT4gdXNpbmcgRXhwZWN0ZWQgPSBzdGQ6OmV4cGVyaW1lbnRhbDo6ZXhwZWN0ZWQ8VCwg
RT47CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9IYXNoZXIuaAkocmV2aXNpb24gMjgzNTAzKQorKysgU291cmNlL1dURi93dGYvSGFz
aGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSA8b3B0aW9uYWw+CisjaW5jbHVkZSA8dmFyaWFudD4KICNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1VSTC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0
b21TdHJpbmcuaD4KQEAgLTE2NiwxMCArMTY3LDEwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZv
aWQgYWRkKEhhc2hlciYgaGEKICAgICAgICAgYWRkKGhhc2hlciwgb3B0aW9uYWwudmFsdWUoKSk7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFR5cGVzPiB2b2lkIGFkZChIYXNoZXImIGhhc2hl
ciwgY29uc3QgVmFyaWFudDxUeXBlcy4uLj4mIHZhcmlhbnQpCit0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBUeXBlcz4gdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IHN0ZDo6dmFyaWFudDxUeXBl
cy4uLj4mIHZhcmlhbnQpCiB7CiAgICAgYWRkKGhhc2hlciwgdmFyaWFudC5pbmRleCgpKTsKLSAg
ICB2aXNpdChbJmhhc2hlcl0gKGF1dG8mIHZhbHVlKSB7CisgICAgc3RkOjp2aXNpdChbJmhhc2hl
cl0gKGF1dG8mIHZhbHVlKSB7CiAgICAgICAgIGFkZChoYXNoZXIsIHZhbHVlKTsKICAgICB9LCB2
YXJpYW50KTsKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xpa2VseURlbnNlVW5zaWduZWRJbnRl
Z2VyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTGlrZWx5RGVuc2VVbnNpZ25l
ZEludGVnZXJTZXQuaAkocmV2aXNpb24gMjgzNTAzKQorKysgU291cmNlL1dURi93dGYvTGlrZWx5
RGVuc2VVbnNpZ25lZEludGVnZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjA1LDggKzIwNSw4
IEBAIHB1YmxpYzoKICAgICAgICAgSW5kZXhUeXBlIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgICAg
IHsKICAgICAgICAgICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fdW5kZXJseWluZywKLSAgICAg
ICAgICAgICAgICBbJl0oY29uc3QgQml0VmVjdG9yOjppdGVyYXRvciYgaXQpIHsgcmV0dXJuICpp
dCArIG1fc2hpZnQ7IH0sCi0gICAgICAgICAgICAgICAgW10oY29uc3QgdHlwZW5hbWUgU2V0Ojpp
dGVyYXRvciYgaXQpIHsgcmV0dXJuICppdDsgfSk7CisgICAgICAgICAgICAgICAgWyZdKGNvbnN0
IEJpdFZlY3Rvcjo6aXRlcmF0b3ImIGl0KSAtPiBJbmRleFR5cGUgeyByZXR1cm4gKml0ICsgbV9z
aGlmdDsgfSwKKyAgICAgICAgICAgICAgICBbXShjb25zdCB0eXBlbmFtZSBTZXQ6Oml0ZXJhdG9y
JiBpdCkgLT4gSW5kZXhUeXBlIHsgcmV0dXJuICppdDsgfSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdApJbmRleDogU291
cmNlL1dURi93dGYvVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1Zhcmlh
bnQuaAkocmV2aXNpb24gMjgzNTAzKQorKysgU291cmNlL1dURi93dGYvVmFyaWFudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NywxOSArNDcsMTAgQEAKICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVk
ZSA8dHlwZV90cmFpdHM+CiAjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDx2YXJpYW50Pgog
I2luY2x1ZGUgPHd0Zi9Db21waWxlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
IAotI2lmIENPTVBJTEVSKE1TVkMpCi0jcHJhZ21hIHdhcm5pbmcocHVzaCkKLSNwcmFnbWEgd2Fy
bmluZyhkaXNhYmxlOjQyNDUpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0NTIxKQotI3ByYWdt
YSB3YXJuaW5nKGRpc2FibGU6NDUyMikKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ4MTQpCi0j
ZW5kaWYKLQotI2lmICFDT01QSUxFUihDTEFORykgfHwgV1RGX0NQUF9TVERfVkVSID49IDE0Ci0K
IG5hbWVzcGFjZSBXVEYgewogCiAjaWYgQ09NUElMRVJfU1VQUE9SVFMoRVhDRVBUSU9OUykKQEAg
LTcyLDIwMTMgKzYzLDQ3IEBAIG5hbWVzcGFjZSBXVEYgewogI2RlZmluZSBfX05PRVhDRVBUXygu
Li4pCiAjZW5kaWYKIAotc3RydWN0IF9faW5fcGxhY2VfcHJpdmF0ZXsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZT4KLSAgICBzdHJ1Y3QgX190eXBlX2hvbGRlcjsKLQotICAgIHRlbXBsYXRlPHNpemVf
dD4KLSAgICBzdHJ1Y3QgX192YWx1ZV9ob2xkZXI7Ci19OwotCi0KLXN0cnVjdCBpbl9wbGFjZV90
YWcgewotICAgIGluX3BsYWNlX3RhZygpID0gZGVsZXRlOwotfTsKLQotdXNpbmcgaW5fcGxhY2Vf
dCA9IGluX3BsYWNlX3RhZygmKShfX2luX3BsYWNlX3ByaXZhdGUmKTsKLQotdGVtcGxhdGUgPGNs
YXNzIF9UeXBlPgotdXNpbmcgaW5fcGxhY2VfdHlwZV90ID0gaW5fcGxhY2VfdGFnKCYpKF9faW5f
cGxhY2VfcHJpdmF0ZTo6X190eXBlX2hvbGRlcjxfVHlwZT4mKTsKLQotdGVtcGxhdGUgPHNpemVf
dCBfSW5kZXg+Ci11c2luZyBpbl9wbGFjZV9pbmRleF90ID0gaW5fcGxhY2VfdGFnKCYpKF9faW5f
cGxhY2VfcHJpdmF0ZTo6X192YWx1ZV9ob2xkZXI8X0luZGV4PiYpOwotCi1pbl9wbGFjZV90YWcg
aW5fcGxhY2UoX19pbl9wbGFjZV9wcml2YXRlJik7Ci0KLXRlbXBsYXRlIDxjbGFzcyBfVHlwZT4K
LWluX3BsYWNlX3RhZyBpbl9wbGFjZShfX2luX3BsYWNlX3ByaXZhdGU6Ol9fdHlwZV9ob2xkZXI8
X1R5cGU+ICYpIHsKLSAgICBfX1RIUk9XX0VYQ0VQVElPTihfX2luX3BsYWNlX3ByaXZhdGUoKSk7
Ci19Ci0KLXRlbXBsYXRlIDxzaXplX3QgX0luZGV4PgotaW5fcGxhY2VfdGFnIGluX3BsYWNlKF9f
aW5fcGxhY2VfcHJpdmF0ZTo6X192YWx1ZV9ob2xkZXI8X0luZGV4PiAmKSB7Ci0gICAgX19USFJP
V19FWENFUFRJT04oX19pbl9wbGFjZV9wcml2YXRlKCkpOwotfQotCi1jbGFzcyBiYWRfdmFyaWFu
dF9hY2Nlc3M6IHB1YmxpYyBzdGQ6OmxvZ2ljX2Vycm9yewotcHVibGljOgotICAgIGV4cGxpY2l0
IGJhZF92YXJpYW50X2FjY2Vzcyhjb25zdCBzdGQ6OnN0cmluZyYgd2hhdF9hcmcpOgotICAgICAg
ICBzdGQ6OmxvZ2ljX2Vycm9yKHdoYXRfYXJnKQotICAgIHt9Ci0gICAgZXhwbGljaXQgYmFkX3Zh
cmlhbnRfYWNjZXNzKGNvbnN0IGNoYXIqIHdoYXRfYXJnKToKLSAgICAgICAgc3RkOjpsb2dpY19l
cnJvcih3aGF0X2FyZykKLSAgICB7fQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLU5PX1JF
VFVSTl9EVUVfVE9fQ1JBU0ggaW5saW5lIFQgX190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3MoY29u
c3QgY2hhciogd2hhdF9hcmcpewotICAgIF9fVEhST1dfRVhDRVBUSU9OKGJhZF92YXJpYW50X2Fj
Y2Vzcyh3aGF0X2FyZykpCi19Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfT2Zmc2V0LHR5cGVuYW1l
IF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX190eXBlX2luZGV4X2hlbHBlcjsK
LQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgX0hl
YWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fdHlwZV9pbmRleF9oZWxwZXI8X09mZnNl
dCxfVHlwZSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3Qg
X192YWx1ZT0KLSAgICAgICAgX190eXBlX2luZGV4X2hlbHBlcjxfT2Zmc2V0KzEsX1R5cGUsX1Jl
c3QuLi4+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5h
bWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fdHlwZV9pbmRleF9oZWxwZXI8
X09mZnNldCxfVHlwZSxfVHlwZSxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBwdHJk
aWZmX3QgX192YWx1ZT1fT2Zmc2V0OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlw
ZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3R5cGVfaW5kZXh7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBwdHJkaWZmX3QgX192YWx1ZT0KLSAgICAgICAgX190eXBlX2luZGV4X2hlbHBlcjwwLF9U
eXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4
LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19pbmRleGVkX3R5cGU7Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2luZGV4ZWRfdHlw
ZTwwLF9IZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIF9IZWFkIF9fdHlwZTsKLX07Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2luZGV4
ZWRfdHlwZTwtMSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgdHlwZWRlZiB2b2lkIF9fdHlwZTsKLX07
Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4u
IF9SZXN0Pgotc3RydWN0IF9faW5kZXhlZF90eXBlPF9JbmRleCxfSGVhZCxfUmVzdC4uLj57Ci0g
ICAgdHlwZWRlZiB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9f
dHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4u
Ll9UeXBlcz4KLXN0cnVjdCBfX25leHRfaW5kZXh7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBwdHJk
aWZmX3QgX192YWx1ZT0KLSAgICAgICAgKF9JbmRleD49cHRyZGlmZl90KHNpemVvZi4uLihfVHlw
ZXMpLTEpKT8tMTpfSW5kZXgrMTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+
Ci1jbGFzcyBWYXJpYW50OwotCi10ZW1wbGF0ZTx0eXBlbmFtZT4KLXN0cnVjdCB2YXJpYW50X3Np
emU7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50X3NpemU8Y29u
c3QgX1R5cGU+IDogdmFyaWFudF9zaXplPF9UeXBlPiB7fTsKLQotdGVtcGxhdGUgPHR5cGVuYW1l
IF9UeXBlPgotc3RydWN0IHZhcmlhbnRfc2l6ZTx2b2xhdGlsZSBfVHlwZT4gOiB2YXJpYW50X3Np
emU8X1R5cGU+IHt9OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgdmFyaWFu
dF9zaXplPGNvbnN0IHZvbGF0aWxlIF9UeXBlPiA6IHZhcmlhbnRfc2l6ZTxfVHlwZT4ge307Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZS4uLiBfVHlwZXM+Ci1zdHJ1Y3QgdmFyaWFudF9zaXplPFZhcmlh
bnQ8X1R5cGVzLi4uPj4KLSAgICA6IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8c2l6ZV90LCBzaXpl
b2YuLi4oX1R5cGVzKT4ge307Ci0KLXRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgX1R5
cGU+Ci1zdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTsKLQotdGVtcGxhdGU8c2l6ZV90IF9JbmRl
eCx0eXBlbmFtZSBfVHlwZT4KLXVzaW5nIHZhcmlhbnRfYWx0ZXJuYXRpdmVfdD10eXBlbmFtZSB2
YXJpYW50X2FsdGVybmF0aXZlPF9JbmRleCxfVHlwZT46OnR5cGU7Ci0KLXRlbXBsYXRlIDxzaXpl
X3QgX0luZGV4LCB0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlPF9J
bmRleCwgY29uc3QgX1R5cGU+ewotICAgIHVzaW5nIHR5cGU9c3RkOjphZGRfY29uc3RfdDx2YXJp
YW50X2FsdGVybmF0aXZlX3Q8X0luZGV4LF9UeXBlPj47Ci19OwotCi10ZW1wbGF0ZSA8c2l6ZV90
IF9JbmRleCwgdHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxfSW5k
ZXgsIHZvbGF0aWxlIF9UeXBlPnsKLSAgICB1c2luZyB0eXBlPXN0ZDo6YWRkX3ZvbGF0aWxlX3Q8
dmFyaWFudF9hbHRlcm5hdGl2ZV90PF9JbmRleCxfVHlwZT4+OwotfTsKLQotdGVtcGxhdGUgPHNp
emVfdCBfSW5kZXgsIHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IHZhcmlhbnRfYWx0ZXJuYXRpdmU8
X0luZGV4LCB2b2xhdGlsZSBjb25zdCBfVHlwZT57Ci0gICAgdXNpbmcgdHlwZT1zdGQ6OmFkZF92
b2xhdGlsZV90PHN0ZDo6YWRkX2NvbnN0X3Q8dmFyaWFudF9hbHRlcm5hdGl2ZV90PF9JbmRleCxf
VHlwZT4+PjsKLX07Ci0KLXRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBl
cz4KLXN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlPF9JbmRleCxWYXJpYW50PF9UeXBlcy4uLj4+
ewotICAgIHVzaW5nIHR5cGU9dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4u
Lj46Ol9fdHlwZTsKLX07Ci0KLWNvbnN0ZXhwciBzaXplX3QgdmFyaWFudF9ucG9zPS0xOwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIF9U
eXBlJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+Jik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBl
LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgX1R5cGUgY29uc3QmIGdldChWYXJpYW50
PF9UeXBlcy4uLj4gY29uc3QmKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUg
Li4uIF9UeXBlcz4KLWNvbnN0ZXhwciBfVHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mJik7
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4
cHIgY29uc3QgX1R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiYpOwotCi10ZW1w
bGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgdHlw
ZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYgZ2V0KFZhcmlh
bnQ8X1R5cGVzLi4uPiYpOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4u
LiBfVHlwZXM+Ci1jb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBl
cy4uLj46Ol9fdHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mJik7Ci0KLXRlbXBsYXRlPHB0
cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBf
X2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0JiBnZXQoCi0gICAg
VmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0Jik7Ci0KLXRlbXBsYXRlIDxwdHJkaWZmX3QgX0luZGV4
LCB0eXBlbmFtZS4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgY29uc3QgdHlwZW5hbWUgX19pbmRleGVk
X3R5cGU8X0luZGV4LCBfVHlwZXMuLi4+OjpfX3R5cGUgJiYKLWdldChWYXJpYW50PF9UeXBlcy4u
Lj4gY29uc3QgJiYpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5
cGVzPgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDxfVHlwZT4gZ2V0X2lmKFZhcmlhbnQ8
X1R5cGVzLi4uPiYpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5
cGVzPgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDxfVHlwZSBjb25zdD4gZ2V0X2lmKFZh
cmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYpOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5
cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PHR5cGVuYW1l
IF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGU+IGdldF9pZihWYXJpYW50
PF9UeXBlcy4uLj4mKTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4g
X1R5cGVzPgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDx0eXBlbmFtZSBfX2luZGV4ZWRf
dHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0PiBnZXRfaWYoCi0gICAgVmFyaWFu
dDxfVHlwZXMuLi4+IGNvbnN0Jik7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5h
bWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3ZhcmlhbnRfYWNjZXNzb3I7Ci0KLXRlbXBsYXRlPHNp
emVfdCBfX2NvdW50LAotICAgICAgICAgYm9vbCBfX2xhcmdlcl90aGFuX2NoYXI9KF9fY291bnQ+
U0NIQVJfTUFYKSwKLSAgICBib29sIF9fbGFyZ2VyX3RoYW5fc2hvcnQ9KF9fY291bnQ+U0hSVF9N
QVgpLAotICAgIGJvb2wgX19sYXJnZXJfdGhhbl9pbnQ9KF9fY291bnQ+SU5UX01BWCk+Ci1zdHJ1
Y3QgX19kaXNjcmltaW5hdG9yX3R5cGV7Ci0gICAgdHlwZWRlZiBzaWduZWQgY2hhciBfX3R5cGU7
Ci19OwotCi10ZW1wbGF0ZTxzaXplX3QgX19jb3VudD4KLXN0cnVjdCBfX2Rpc2NyaW1pbmF0b3Jf
dHlwZTxfX2NvdW50LHRydWUsZmFsc2UsZmFsc2U+ewotICAgIHR5cGVkZWYgc2lnbmVkIHNob3J0
IF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHNpemVfdCBfX2NvdW50Pgotc3RydWN0IF9fZGlzY3Jp
bWluYXRvcl90eXBlPF9fY291bnQsdHJ1ZSx0cnVlLGZhbHNlPnsKLSAgICB0eXBlZGVmIGludCBf
X3R5cGU7Ci19OwotdGVtcGxhdGU8c2l6ZV90IF9fY291bnQ+Ci1zdHJ1Y3QgX19kaXNjcmltaW5h
dG9yX3R5cGU8X19jb3VudCx0cnVlLHRydWUsdHJ1ZT57Ci0gICAgdHlwZWRlZiBzaWduZWQgbG9u
ZyBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBfX3N0b3Jl
ZF90eXBlewotICAgIHR5cGVkZWYgX1R5cGUgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgX1R5cGU+Ci1zdHJ1Y3QgX19zdG9yZWRfdHlwZTxfVHlwZSY+ewotICAgIHR5cGVkZWYgX1R5
cGUqIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3Qg
X19hbGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fYWxs
X3RyaXZpYWxseV9kZXN0cnVjdGlibGU8PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9f
dmFsdWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fYWxs
X3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X1R5cGU+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgX192YWx1ZT0KLSAgICAgICAgc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPHR5cGVu
YW1lIF9fc3RvcmVkX3R5cGU8X1R5cGU+OjpfX3R5cGU+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2FsbF90cml2aWFs
bHlfZGVzdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIF9fdmFsdWU9Ci0gICAgICAgIF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X0hlYWQ+
OjpfX3ZhbHVlICYmCi0gICAgICAgIF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X1Jlc3Qu
Li4+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1RhcmdldCx0eXBlbmFtZSAu
Li4gX0FyZ3M+Ci1zdHJ1Y3QgX19zdG9yYWdlX25vdGhyb3dfY29uc3RydWN0aWJsZXsKLSAgICBz
dGF0aWMgY29uc3QgYm9vbCBfX3ZhbHVlPQotICAgICAgICBzdGQ6OmlzX25vdGhyb3dfY29uc3Ry
dWN0aWJsZTxfVGFyZ2V0LCBfQXJncy4uLj46OnZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGli
bGU7Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVj
dGlibGU8PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fdmFsdWU9dHJ1ZTsKLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fc3RvcmFnZV9ub3Rocm93X21vdmVf
Y29uc3RydWN0aWJsZTxfVHlwZT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBfX3ZhbHVl
PQotICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPAotICAgICAgICB0
eXBlbmFtZSBfX3N0b3JlZF90eXBlPF9UeXBlPjo6X190eXBlPjo6dmFsdWU7Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19zdG9yYWdl
X25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPiB7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIF9fdmFsdWU9Ci0gICAgICAgIF9fc3RvcmFnZV9ub3Rocm93X21vdmVf
Y29uc3RydWN0aWJsZTxfSGVhZD46Ol9fdmFsdWUgJiYKLSAgICAgICAgX19zdG9yYWdlX25vdGhy
b3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9SZXN0Li4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRl
PHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX290aGVyX3N0
b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9I
ZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX290aGVyX3N0b3JhZ2Vfbm90aHJvd19t
b3ZlX2NvbnN0cnVjdGlibGU8MCxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0IGJv
b2wgX192YWx1ZT1fX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X1Jlc3QuLi4+
OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9S
ZXN0Pgotc3RydWN0IF9fb3RoZXJfc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTwt
MSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1ZT0KLSAgICAg
ICAgX19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPjo6
X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgX0hlYWQs
dHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fb3RoZXJfc3RvcmFnZV9ub3Rocm93X21vdmVf
Y29uc3RydWN0aWJsZTxfSW5kZXgsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHN0YXRpYyBjb25zdCBi
b29sIF9fdmFsdWU9Ci0gICAgICAgIF9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJs
ZTxfSGVhZD46Ol9fdmFsdWUgJiYKLSAgICAgICAgX19vdGhlcl9zdG9yYWdlX25vdGhyb3dfbW92
ZV9jb25zdHJ1Y3RpYmxlPF9JbmRleC0xLF9SZXN0Li4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBs
YXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2JhY2t1
cF9zdG9yYWdlX3JlcXVpcmVkewotICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWU9Ci0gICAg
ICAgICFfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8Ci0gICAgICAgIHR5cGVu
YW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGU+OjpfX3ZhbHVlICYm
Ci0gICAgICAgICFfX290aGVyX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X0lu
ZGV4LF9UeXBlcy4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4
LHB0cmRpZmZfdCBfQ291bnQsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FueV9iYWNr
dXBfc3RvcmFnZV9yZXF1aXJlZF9pbXBsewotICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWU9
Ci0gICAgICAgIF9fYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWQ8X0luZGV4LF9UeXBlcy4uLj46Ol9f
dmFsdWUgfHwKLSAgICAgICAgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWRfaW1wbDxfSW5k
ZXgrMSxfQ291bnQtMSxfVHlwZXMuLi4+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlm
Zl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYW55X2JhY2t1cF9zdG9y
YWdlX3JlcXVpcmVkX2ltcGw8X0luZGV4LDAsX1R5cGVzLi4uPnsKLSAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBfX3ZhbHVlPWZhbHNlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQ+Ci1z
dHJ1Y3QgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWQ7Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWQ8VmFyaWFu
dDxfVHlwZXMuLi4+ID57Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1ZT0KLSAgICAgICAg
X19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWRfaW1wbDwwLHNpemVvZi4uLihfVHlwZXMpLF9U
eXBlcy4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgot
dW5pb24gX192YXJpYW50X2RhdGE7Ci0KLS8vIHN0ZDo6aXNfbGl0ZXJhbF90eXBlIGlzIGRlcHJl
Y2F0ZWQgaW4gQysrMTcgYW5kIHJlbW92ZWQgaW4gQysrMjAKLUFMTE9XX0RFUFJFQ0FURURfREVD
TEFSQVRJT05TX0JFR0lOCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSxib29sPXN0ZDo6aXNfbGl0
ZXJhbF90eXBlPF9UeXBlPjo6dmFsdWU+Ci1zdHJ1Y3QgX192YXJpYW50X3N0b3JhZ2V7Ci0gICAg
dHlwZWRlZiBfVHlwZSBfX3R5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiBfX2dl
dChfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIF9fdmFsOwotICAgIH0KLSAgICBzdGF0
aWMgY29uc3RleHByIF9UeXBlJiYgX19nZXRfcnJlZihfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bW92ZShfX3ZhbCk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgY29u
c3QgX1R5cGUmIF9fZ2V0KF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gX192
YWw7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBfX2dldF9ycmVm
KF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9fdmFsKTsK
LSAgICB9Ci0gICAgc3RhdGljIHZvaWQgX19kZXN0cm95KF9fdHlwZSYpe30KLX07Ci1BTExPV19E
RVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci1z
dHJ1Y3QgX19zdG9yYWdlX3dyYXBwZXJ7Ci0gICAgdHlwZW5hbWUgc3RkOjphbGlnbmVkX3N0b3Jh
Z2U8c2l6ZW9mKF9UeXBlKSxhbGlnbm9mKF9UeXBlKT46OnR5cGUgX19zdG9yYWdlOwotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHN0YXRpYyBjb25zdGV4cHIgdm9pZCBf
X2NvbnN0cnVjdCh2b2lkKiBfX3AsX0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgbmV3IChf
X3ApIF9UeXBlKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7Ci0gICAgfQotCi0gICAg
dGVtcGxhdGUgPHR5cGVuYW1lIF9EdW1teSA9IF9UeXBlPgotICAgIF9fc3RvcmFnZV93cmFwcGVy
KAotICAgICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2RlZmF1bHRfY29uc3Ry
dWN0aWJsZTxfRHVtbXk+Ojp2YWx1ZSwKLSAgICAgICAgdm9pZCAoX19zdG9yYWdlX3dyYXBwZXI6
OiopKCk+Ojp0eXBlID0gbnVsbHB0cikgewotICAgICAgX19jb25zdHJ1Y3QoJl9fc3RvcmFnZSk7
Ci0gICAgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9EdW1teSA9IF9UeXBlPgotICAgIF9f
c3RvcmFnZV93cmFwcGVyKAotICAgICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjpp
c19kZWZhdWx0X2NvbnN0cnVjdGlibGU8X0R1bW15Pjo6dmFsdWUsCi0gICAgICAgIHZvaWQgKF9f
c3RvcmFnZV93cmFwcGVyOjoqKSgpPjo6dHlwZSA9IG51bGxwdHIpIHsKLSAgICB9Ci0gICAgCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZpcnN0LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBfX3N0
b3JhZ2Vfd3JhcHBlcihfRmlyc3QmJiBfX2ZpcnN0LF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAg
ICAgIF9fY29uc3RydWN0KCZfX3N0b3JhZ2Usc3RkOjpmb3J3YXJkPF9GaXJzdD4oX19maXJzdCks
c3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9Ci0KLSAgICBfVHlwZSYgX19n
ZXQoKXsKLSAgICAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxfVHlwZSo+KHN0YXRpY19jYXN0PHZv
aWQqPigmX19zdG9yYWdlKSk7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBfVHlwZSBjb25zdCYgX19n
ZXQoKSBjb25zdHsKLSAgICAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxfVHlwZSBjb25zdCo+KHN0
YXRpY19jYXN0PHZvaWQgY29uc3QqPigmX19zdG9yYWdlKSk7Ci0gICAgfQotICAgIHZvaWQgX19k
ZXN0cm95KCl7Ci0gICAgICAgIF9fZ2V0KCkufl9UeXBlKCk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX19zdG9yYWdlX3dyYXBwZXI8X1R5cGUmPnsKLSAg
ICBfVHlwZSogX19zdG9yYWdlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZz4KLSAgICBj
b25zdGV4cHIgX19zdG9yYWdlX3dyYXBwZXIoX0FyZyYgX19hcmcpOgotICAgICAgICBfX3N0b3Jh
Z2UoJl9fYXJnKXt9Ci0KLSAgICBfVHlwZSYgX19nZXQoKXsKLSAgICAgICAgcmV0dXJuICpfX3N0
b3JhZ2U7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBfVHlwZSBjb25zdCYgX19nZXQoKSBjb25zdHsK
LSAgICAgICAgcmV0dXJuICpfX3N0b3JhZ2U7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgX1R5cGU+Ci1zdHJ1Y3QgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUsZmFsc2U+ewotICAgIHR5
cGVkZWYgX19zdG9yYWdlX3dyYXBwZXI8X1R5cGU+IF9fdHlwZTsKLQotICAgIHN0YXRpYyBjb25z
dGV4cHIgX1R5cGUmIF9fZ2V0KF9fdHlwZSYgX192YWwpewotICAgICAgICByZXR1cm4gX192YWwu
X19nZXQoKTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0X3JyZWYo
X190eXBlJiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1vdmUoX192YWwuX19nZXQoKSk7
Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgX1R5cGUmIF9fZ2V0KF9fdHlwZSBj
b25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gX192YWwuX19nZXQoKTsKLSAgICB9Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBjb25zdCBfVHlwZSYmIF9fZ2V0X3JyZWYoX190eXBlIGNvbnN0JiBf
X3ZhbCl7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1vdmUoX192YWwuX19nZXQoKSk7Ci0gICAgfQot
ICAgIHN0YXRpYyB2b2lkIF9fZGVzdHJveShfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgX192YWwu
X19kZXN0cm95KCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsYm9vbCBf
X2I+Ci1zdHJ1Y3QgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmLF9fYj57Ci0gICAgdHlwZWRlZiBf
VHlwZSogX190eXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYgX19nZXQoX190eXBl
JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiAqX192YWw7Ci0gICAgfQotICAgIHN0YXRpYyBjb25z
dGV4cHIgX1R5cGUmIF9fZ2V0X3JyZWYoX190eXBlJiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiAq
X192YWw7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0KF9fdHlwZSBj
b25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gKl9fdmFsOwotICAgIH0KLSAgICBzdGF0aWMg
Y29uc3RleHByIF9UeXBlJiBfX2dldF9ycmVmKF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAg
ICByZXR1cm4gKl9fdmFsOwotICAgIH0KLSAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3koX190eXBl
Jil7fQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsYm9vbCBfX2I+Ci1zdHJ1Y3QgX192
YXJpYW50X3N0b3JhZ2U8X1R5cGUmJixfX2I+ewotICAgIHR5cGVkZWYgX1R5cGUqIF9fdHlwZTsK
LQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmJiBfX2dldChfX3R5cGUmIF9fdmFsKXsKLSAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PF9UeXBlJiY+KCpfX3ZhbCk7Ci0gICAgfQotICAgIHN0
YXRpYyBjb25zdGV4cHIgX1R5cGUmJiBfX2dldF9ycmVmKF9fdHlwZSYgX192YWwpewotICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8X1R5cGUmJj4oKl9fdmFsKTsKLSAgICB9Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0KF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8X1R5cGUmJj4oKl9fdmFsKTsKLSAgICB9Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBfVHlwZSYmIF9fZ2V0X3JyZWYoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxfVHlwZSYmPigqX192YWwpOwotICAgIH0KLSAgICBzdGF0aWMg
dm9pZCBfX2Rlc3Ryb3koX190eXBlJil7fQotfTsKLQotdGVtcGxhdGU8PgotdW5pb24gX192YXJp
YW50X2RhdGE8PnsKLSAgICBjb25zdGV4cHIgX192YXJpYW50X2RhdGEoKXt9Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXVuaW9uIF9fdmFyaWFudF9kYXRhPF9UeXBlPnsKLSAgICB0
eXBlbmFtZSBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fdHlwZSBfX3ZhbDsKLSAgICBzdHJ1
Y3QgX19kdW1teV90eXBle30gX19kdW1teTsKLQotICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0
YSgpOl9fZHVtbXkoKXt9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAg
Y29uc3RleHByIF9fdmFyaWFudF9kYXRhKGluX3BsYWNlX2luZGV4X3Q8MD4sX0FyZ3MmJiAuLi4g
X19hcmdzKToKLSAgICAgICAgX192YWwoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKXt9
Ci0KLSAgICBfVHlwZSYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPil7Ci0gICAgICAgIHJldHVy
biBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fZ2V0KF9fdmFsKTsKLSAgICB9Ci0gICAgLypj
b25zdGV4cHIqLyBfVHlwZSYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDwwPil7Ci0gICAg
ICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fZ2V0X3JyZWYoX192YWwpOwot
ICAgIH0KLSAgICBjb25zdGV4cHIgY29uc3QgX1R5cGUmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8
MD4pIGNvbnN0ewotICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGU+OjpfX2dl
dChfX3ZhbCk7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBjb25zdCBfVHlwZSYmIF9fZ2V0X3JyZWYo
aW5fcGxhY2VfaW5kZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3Rv
cmFnZTxfVHlwZT46Ol9fZ2V0X3JyZWYoX192YWwpOwotICAgIH0KLSAgICB2b2lkIF9fZGVzdHJv
eShpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgX192YXJpYW50X3N0b3JhZ2U8X1R5cGU+
OjpfX2Rlc3Ryb3koX192YWwpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBl
PgotdW5pb24gX192YXJpYW50X2RhdGE8X1R5cGUmPnsKLSAgICB0eXBlbmFtZSBfX3ZhcmlhbnRf
c3RvcmFnZTxfVHlwZSY+OjpfX3R5cGUgX192YWw7Ci0gICAgc3RydWN0IF9fZHVtbXlfdHlwZXt9
IF9fZHVtbXk7Ci0KLSAgICBjb25zdGV4cHIgX192YXJpYW50X2RhdGEoKTpfX2R1bW15KCl7fQot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIGNvbnN0ZXhwciBfX3Zhcmlh
bnRfZGF0YShpbl9wbGFjZV9pbmRleF90PDA+LF9BcmdzJiYgLi4uIF9fYXJncyk6Ci0gICAgICAg
IF9fdmFsKCZzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pe30KLQotICAgIF9UeXBlJiBf
X2dldChpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9y
YWdlPF9UeXBlJj46Ol9fZ2V0KF9fdmFsKTsKLSAgICB9Ci0gICAgY29uc3RleHByIF9UeXBlJiBf
X2dldChpbl9wbGFjZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFu
dF9zdG9yYWdlPF9UeXBlJj46Ol9fZ2V0KF9fdmFsKTsKLSAgICB9Ci0KLSAgICBfVHlwZSYgX19n
ZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9z
dG9yYWdlPF9UeXBlJj46Ol9fZ2V0X3JyZWYoX192YWwpOwotICAgIH0KLSAgICBjb25zdGV4cHIg
X1R5cGUmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJl
dHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSY+OjpfX2dldF9ycmVmKF9fdmFsKTsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBfX2Rlc3Ryb3koaW5fcGxhY2VfaW5kZXhfdDwwPil7Ci0gICAgICAg
IF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJj46Ol9fZGVzdHJveShfX3ZhbCk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci11bmlvbiBfX3ZhcmlhbnRfZGF0YTxfVHlwZSYm
PnsKLSAgICB0eXBlbmFtZSBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYmPjo6X190eXBlIF9fdmFs
OwotICAgIHN0cnVjdCBfX2R1bW15X3R5cGV7fSBfX2R1bW15OwotCi0gICAgY29uc3RleHByIF9f
dmFyaWFudF9kYXRhKCk6X19kdW1teSgpe30KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Bcmc+
Ci0gICAgX192YXJpYW50X2RhdGEoaW5fcGxhY2VfaW5kZXhfdDwwPixfQXJnJiYgX19hcmcpOgot
ICAgICAgICBfX3ZhbCgmX19hcmcpe30KLQotICAgIF9UeXBlJiYgX19nZXQoaW5fcGxhY2VfaW5k
ZXhfdDwwPil7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYmPjo6X19n
ZXQoX192YWwpOwotICAgIH0KLSAgICBjb25zdGV4cHIgX1R5cGUmJiBfX2dldChpbl9wbGFjZV9p
bmRleF90PDA+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBl
JiY+OjpfX2dldChfX3ZhbCk7Ci0gICAgfQotICAgIF9UeXBlJiYgX19nZXRfcnJlZihpbl9wbGFj
ZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJiY+
OjpfX2dldF9ycmVmKF9fdmFsKTsKLSAgICB9Ci0gICAgY29uc3RleHByIF9UeXBlJiYgX19nZXRf
cnJlZihpbl9wbGFjZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFu
dF9zdG9yYWdlPF9UeXBlJiY+OjpfX2dldF9ycmVmKF9fdmFsKTsKLSAgICB9Ci0gICAgdm9pZCBf
X2Rlc3Ryb3koaW5fcGxhY2VfaW5kZXhfdDwwPil7Ci0gICAgICAgIF9fdmFyaWFudF9zdG9yYWdl
PF9UeXBlJiY+OjpfX2Rlc3Ryb3koX192YWwpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXVuaW9uIF9fdmFyaWFudF9kYXRhPF9IZWFk
LF9SZXN0Li4uPnsKLSAgICBfX3ZhcmlhbnRfZGF0YTxfSGVhZD4gX19oZWFkOwotICAgIF9fdmFy
aWFudF9kYXRhPF9SZXN0Li4uPiBfX3Jlc3Q7Ci0KLSAgICBjb25zdGV4cHIgX192YXJpYW50X2Rh
dGEoKToKLSAgICAgICAgX19oZWFkKCl7fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9B
cmdzPgotICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YShpbl9wbGFjZV9pbmRleF90PDA+LF9B
cmdzJiYgLi4uIF9fYXJncyk6Ci0gICAgICAgIF9faGVhZChpbl9wbGFjZTwwPixzdGQ6OmZvcndh
cmQ8X0FyZ3M+KF9fYXJncykuLi4pe30KLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVu
YW1lIC4uLiBfQXJncz4KLSAgICBjb25zdGV4cHIgX192YXJpYW50X2RhdGEoaW5fcGxhY2VfaW5k
ZXhfdDxfSW5kZXg+LF9BcmdzJiYgLi4uIF9fYXJncyk6Ci0gICAgICAgIF9fcmVzdChpbl9wbGFj
ZTxfSW5kZXgtMT4sc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKXt9Ci0KLSAgICBfSGVh
ZCYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPil7Ci0gICAgICAgIHJldHVybiBfX2hlYWQuX19n
ZXQoaW5fcGxhY2U8MD4pOwotICAgIH0KLQotICAgIC8qY29uc3RleHByKi8gX0hlYWQmJiBfX2dl
dF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICByZXR1cm4gX19oZWFkLl9fZ2V0
X3JyZWYoaW5fcGxhY2U8MD4pOwotICAgIH0KLSAgICAKLSAgICBjb25zdGV4cHIgY29uc3QgX0hl
YWQmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pIGNvbnN0ewotICAgICAgICByZXR1cm4gX19o
ZWFkLl9fZ2V0KGluX3BsYWNlPDA+KTsKLSAgICB9Ci0KLSAgICBjb25zdGV4cHIgY29uc3QgX0hl
YWQmJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4pIGNvbnN0ewotICAgICAgICByZXR1
cm4gX19oZWFkLl9fZ2V0X3JyZWYoaW5fcGxhY2U8MD4pOwotICAgIH0KLSAgICAKLSAgICB0ZW1w
bGF0ZTxzaXplX3QgX0luZGV4PgotICAgIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleC0x
LF9SZXN0Li4uPjo6X190eXBlJiBfX2dldCgKLSAgICAgICAgaW5fcGxhY2VfaW5kZXhfdDxfSW5k
ZXg+KXsKLSAgICAgICAgcmV0dXJuIF9fcmVzdC5fX2dldChpbl9wbGFjZTxfSW5kZXgtMT4pOwot
ICAgIH0KLQotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0gICAgLypjb25zdGV4cHIqLyB0
eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSYmIF9fZ2V0
X3JyZWYoCi0gICAgICAgIGluX3BsYWNlX2luZGV4X3Q8X0luZGV4Pil7Ci0gICAgICAgIHJldHVy
biBfX3Jlc3QuX19nZXRfcnJlZihpbl9wbGFjZTxfSW5kZXgtMT4pOwotICAgIH0KLSAgICAKLSAg
ICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgotICAgIGNvbnN0ZXhwciBjb25zdCB0eXBlbmFtZSBf
X2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSYgX19nZXQoCi0gICAgICAg
IGluX3BsYWNlX2luZGV4X3Q8X0luZGV4PikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX3Jlc3Qu
X19nZXQoaW5fcGxhY2U8X0luZGV4LTE+KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxzaXplX3Qg
X0luZGV4PgotICAgIGNvbnN0ZXhwciBjb25zdCB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5k
ZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSYmIF9fZ2V0X3JyZWYoCi0gICAgICAgIGluX3BsYWNlX2lu
ZGV4X3Q8X0luZGV4PikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX3Jlc3QuX19nZXRfcnJlZihp
bl9wbGFjZTxfSW5kZXgtMT4pOwotICAgIH0KLSAgICAKLSAgICAKLSAgICB2b2lkIF9fZGVzdHJv
eShpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgX19oZWFkLl9fZGVzdHJveShpbl9wbGFj
ZTwwPik7Ci0gICAgfQotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0gICAgdm9pZCBfX2Rl
c3Ryb3koaW5fcGxhY2VfaW5kZXhfdDxfSW5kZXg+KXsKLSAgICAgICAgX19yZXN0Ll9fZGVzdHJv
eShpbl9wbGFjZTxfSW5kZXgtMT4pOwotICAgIH0KLX07Ci0KLQotdGVtcGxhdGU8cHRyZGlmZl90
Li4uIF9JbmRpY2VzPgotc3RydWN0IF9faW5kZXhfc2VxdWVuY2V7Ci0gICAgdHlwZWRlZiBfX2lu
ZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uLHNpemVvZi4uLihfSW5kaWNlcyk+IF9fbmV4dDsKLSAg
ICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBfX2xlbmd0aD1zaXplb2YuLi4oX0luZGljZXMpOwot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3R5cGVfaW5kaWNl
czsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fdHlwZV9pbmRpY2VzPD57Ci0gICAgdHlwZWRlZiBf
X2luZGV4X3NlcXVlbmNlPD4gX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+
Ci1zdHJ1Y3QgX190eXBlX2luZGljZXM8X1R5cGU+ewotICAgIHR5cGVkZWYgX19pbmRleF9zZXF1
ZW5jZTwwPiBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAu
Li4gX1Jlc3Q+Ci1zdHJ1Y3QgX190eXBlX2luZGljZXM8X1R5cGUsX1Jlc3QuLi4+ewotICAgIHR5
cGVkZWYgdHlwZW5hbWUgX190eXBlX2luZGljZXM8X1Jlc3QuLi4+OjpfX3R5cGU6Ol9fbmV4dCBf
X3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudD4KLXN0cnVjdCBfX3Zhcmlh
bnRfaW5kaWNlczsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3Zh
cmlhbnRfaW5kaWNlczxWYXJpYW50PF9UeXBlcy4uLj4+ewotICAgIHR5cGVkZWYgdHlwZW5hbWUg
X190eXBlX2luZGljZXM8X1R5cGVzLi4uPjo6X190eXBlIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIF9WYXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUg
X192YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19tb3ZlX2NvbnN0
cnVjdF9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4u
LiBfSW5kaWNlcz4KLXN0cnVjdCBfX21vdmVfY29uc3RydWN0X29wX3RhYmxlPF9WYXJpYW50LF9f
aW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBf
X2Z1bmNfdHlwZSkoX1ZhcmlhbnQqLF9WYXJpYW50Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRy
ZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX21vdmVfY29uc3RydWN0X2Z1bmMoCi0g
ICAgICAgIF9WYXJpYW50ICogX19saHMsX1ZhcmlhbnQmIF9fcmhzKXsKLSAgICAgICAgX19saHMt
PnRlbXBsYXRlIF9fZW1wbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PigKLSAgICAgICAgICAgIHN0ZDo6
bW92ZShnZXQ8X0luZGV4PihfX3JocykpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgX19m
dW5jX3R5cGUgX19hcHBseVtzaXplb2YuLi4oX0luZGljZXMpXTsKLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1jb25zdCB0eXBlbmFtZSBf
X21vdmVfY29uc3RydWN0X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGlj
ZXMuLi4+Pjo6Ci1fX2Z1bmNfdHlwZQotX19tb3ZlX2NvbnN0cnVjdF9vcF90YWJsZTxfVmFyaWFu
dCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fYXBwbHlbCi0gICAgc2l6ZW9mLi4u
KF9JbmRpY2VzKV09ewotICAgICAgICAmX19tb3ZlX2NvbnN0cnVjdF9mdW5jPF9JbmRpY2VzPi4u
LgotICAgIH07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LAotICAgICAgICAgdHlwZW5h
bWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+
Ci1zdHJ1Y3QgX19tb3ZlX2Fzc2lnbl9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zh
cmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX21vdmVfYXNzaWduX29wX3Rh
YmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKLSAgICB0eXBlZGVm
IHZvaWQoKiBjb25zdCBfX2Z1bmNfdHlwZSkoX1ZhcmlhbnQqLF9WYXJpYW50Jik7Ci0gICAgCi0g
ICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX21vdmVfYXNz
aWduX2Z1bmMoCi0gICAgICAgIF9WYXJpYW50ICogX19saHMsX1ZhcmlhbnQmIF9fcmhzKXsKLSAg
ICAgICAgZ2V0PF9JbmRleD4oKl9fbGhzKT1zdGQ6Om1vdmUoZ2V0PF9JbmRleD4oX19yaHMpKTsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgX19mdW5jX3R5cGUgX19hcHBseVtzaXplb2YuLi4o
X0luZGljZXMpXTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAu
Li4gX0luZGljZXM+Ci1jb25zdCB0eXBlbmFtZSBfX21vdmVfYXNzaWduX29wX3RhYmxlPF9WYXJp
YW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6Ci1fX2Z1bmNfdHlwZQotX19tb3Zl
X2Fzc2lnbl9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46
Ol9fYXBwbHlbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09ewotICAgICAgICAmX19tb3ZlX2Fz
c2lnbl9mdW5jPF9JbmRpY2VzPi4uLgotICAgIH07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJp
YW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGlj
ZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19jb3B5X2NvbnN0cnVjdF9vcF90YWJsZTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0
cnVjdCBfX2NvcHlfY29uc3RydWN0X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8
X0luZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Z1bmNfdHlwZSkoX1Zh
cmlhbnQqLF9WYXJpYW50IGNvbnN0Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9J
bmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX2NvcHlfY29uc3RydWN0X2Z1bmMoCi0gICAgICAgIF9W
YXJpYW50ICogX19saHMsX1ZhcmlhbnQgY29uc3QmIF9fcmhzKXsKLSAgICAgICAgX19saHMtPnRl
bXBsYXRlIF9fZW1wbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PigKLSAgICAgICAgICAgIGdldDxfSW5k
ZXg+KF9fcmhzKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IF9fZnVuY190eXBlIF9fYXBw
bHlbc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFu
dCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19jb3B5X2NvbnN0cnVj
dF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46OgotX19m
dW5jX3R5cGUKLV9fY29weV9jb25zdHJ1Y3Rfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1
ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2FwcGx5WwotICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsK
LSAgICAgICAgJl9fY29weV9jb25zdHJ1Y3RfZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5
cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotc3RydWN0IF9fY29w
eV9hc3NpZ25fb3BfdGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZf
dCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX19jb3B5X2Fzc2lnbl9vcF90YWJsZTxfVmFyaWFudCxf
X2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0gICAgdHlwZWRlZiB2b2lkKCogY29uc3Qg
X19mdW5jX3R5cGUpKF9WYXJpYW50KixfVmFyaWFudCBjb25zdCYpOwotICAgIAotICAgIHRlbXBs
YXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGljIHZvaWQgX19jb3B5X2Fzc2lnbl9mdW5j
KAotICAgICAgICBfVmFyaWFudCAqIF9fbGhzLF9WYXJpYW50IGNvbnN0JiBfX3Jocyl7Ci0gICAg
ICAgIGdldDxfSW5kZXg+KCpfX2xocyk9Z2V0PF9JbmRleD4oX19yaHMpOwotICAgIH0KLQotICAg
IHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlwZSBfX2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyldOwot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4K
LWNvbnN0IHR5cGVuYW1lIF9fY29weV9hc3NpZ25fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9z
ZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKLV9fZnVuY190eXBlCi1fX2NvcHlfYXNzaWduX29wX3Rh
YmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19hcHBseVsKLSAg
ICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX2NvcHlfYXNzaWduX2Z1bmM8X0lu
ZGljZXM+Li4uCi0gICAgfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0gICAgICAg
ICB0eXBlbmFtZSBfSW5kaWNlcz10eXBlbmFtZSBfX3ZhcmlhbnRfaW5kaWNlczxfVmFyaWFudD46
Ol9fdHlwZT4KLXN0cnVjdCBfX2Rlc3Ryb3lfb3BfdGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX19kZXN0cm95X29wX3Rh
YmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKLSAgICB0eXBlZGVm
IHZvaWQoKiBjb25zdCBfX2Z1bmNfdHlwZSkoX1ZhcmlhbnQqKTsKLSAgICAKLSAgICB0ZW1wbGF0
ZTxwdHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyB2b2lkIF9fZGVzdHJveV9mdW5jKAotICAg
ICAgICBfVmFyaWFudCAqIF9fc2VsZil7Ci0gICAgICAgIGlmKF9fc2VsZi0+X19pbmRleD49MCl7
Ci0gICAgICAgICAgICBfX3NlbGYtPl9fc3RvcmFnZS5fX2Rlc3Ryb3koaW5fcGxhY2U8X0luZGV4
Pik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgX19mdW5jX3R5cGUgX19h
cHBseVtzaXplb2YuLi4oX0luZGljZXMpXTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJp
YW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1jb25zdCB0eXBlbmFtZSBfX2Rlc3Ryb3lfb3Bf
dGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKLV9fZnVuY190
eXBlCi1fX2Rlc3Ryb3lfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNl
cy4uLj4+OjpfX2FwcGx5WwotICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9f
ZGVzdHJveV9mdW5jPF9JbmRpY2VzPi4uLgotICAgIH07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9W
YXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2lu
ZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19zd2FwX29wX3RhYmxlOwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9f
c3dhcF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0g
ICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19mdW5jX3R5cGUpKF9WYXJpYW50JixfVmFyaWFudCYp
OwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGljIHZvaWQg
X19zd2FwX2Z1bmMoCi0gICAgICAgIF9WYXJpYW50ICYgX19saHMsX1ZhcmlhbnQgJiBfX3Jocyl7
Ci0gICAgICAgIHN3YXAoZ2V0PF9JbmRleD4oX19saHMpLGdldDxfSW5kZXg+KF9fcmhzKSk7Ci0g
ICAgfQotCi0gICAgc3RhdGljIGNvbnN0IF9fZnVuY190eXBlIF9fYXBwbHlbc2l6ZW9mLi4uKF9J
bmRpY2VzKV07Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4u
IF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19zd2FwX29wX3RhYmxlPF9WYXJpYW50LF9faW5k
ZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6Ci1fX2Z1bmNfdHlwZQotX19zd2FwX29wX3RhYmxl
PF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19hcHBseVsKLSAgICBz
aXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX3N3YXBfZnVuYzxfSW5kaWNlcz4uLi4K
LSAgICB9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1l
IF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgot
c3RydWN0IF9fZXF1YWxpdHlfb3BfdGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50
LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX19lcXVhbGl0eV9vcF90YWJsZTxfVmFy
aWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0gICAgdHlwZWRlZiBib29sKCog
Y29uc3QgX19jb21wYXJlX2Z1bmNfdHlwZSkoX1ZhcmlhbnQgY29uc3QmLF9WYXJpYW50IGNvbnN0
Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgX19lcXVhbGl0eV9jb21wYXJlX2Z1bmMoCi0gICAgICAgIF9WYXJpYW50IGNv
bnN0JiBfX2xocyxfVmFyaWFudCBjb25zdCYgX19yaHMpewotICAgICAgICByZXR1cm4gZ2V0PF9J
bmRleD4oX19saHMpPT1nZXQ8X0luZGV4PihfX3Jocyk7Ci0gICAgfQotCi0gICAgc3RhdGljIGNv
bnN0ZXhwciBfX2NvbXBhcmVfZnVuY190eXBlIF9fZXF1YWxpdHlfY29tcGFyZVtzaXplb2YuLi4o
X0luZGljZXMpXT17Ci0gICAgICAgICZfX2VxdWFsaXR5X2NvbXBhcmVfZnVuYzxfSW5kaWNlcz4u
Li4KLSAgICB9OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4u
LiBfSW5kaWNlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2VxdWFsaXR5X29wX3RhYmxlPF9WYXJp
YW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6Ci1fX2NvbXBhcmVfZnVuY190eXBl
Ci1fX2VxdWFsaXR5X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMu
Li4+Pjo6X19lcXVhbGl0eV9jb21wYXJlWwotICAgIHNpemVvZi4uLihfSW5kaWNlcyldOwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5
cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotc3RydWN0IF9fbGVz
c190aGFuX29wX3RhYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3Qg
Li4uIF9JbmRpY2VzPgotc3RydWN0IF9fbGVzc190aGFuX29wX3RhYmxlPF9WYXJpYW50LF9faW5k
ZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIGJvb2woKiBjb25zdCBfX2Nv
bXBhcmVfZnVuY190eXBlKShfVmFyaWFudCBjb25zdCYsX1ZhcmlhbnQgY29uc3QmKTsKLSAgICAK
LSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBfX2xlc3NfdGhhbl9jb21wYXJlX2Z1bmMoCi0gICAgICAgIF9WYXJpYW50IGNvbnN0JiBfX2xo
cyxfVmFyaWFudCBjb25zdCYgX19yaHMpewotICAgICAgICByZXR1cm4gZ2V0PF9JbmRleD4oX19s
aHMpPGdldDxfSW5kZXg+KF9fcmhzKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIF9f
Y29tcGFyZV9mdW5jX3R5cGUgX19sZXNzX3RoYW5fY29tcGFyZVtzaXplb2YuLi4oX0luZGljZXMp
XT17Ci0gICAgICAgICZfX2xlc3NfdGhhbl9jb21wYXJlX2Z1bmM8X0luZGljZXM+Li4uCi0gICAg
fTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGlj
ZXM+Ci1jb25zdGV4cHIgdHlwZW5hbWUgX19sZXNzX3RoYW5fb3BfdGFibGU8X1ZhcmlhbnQsX19p
bmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKLV9fY29tcGFyZV9mdW5jX3R5cGUKLV9fbGVz
c190aGFuX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6
X19sZXNzX3RoYW5fY29tcGFyZVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgX1ZhcmlhbnQ+Ci1zdHJ1Y3QgX192YXJpYW50X3N0b3JhZ2VfdHlwZTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgX0Rlcml2ZWQsYm9vbCBfX3RyaXZpYWxfZGVzdHJ1Y3Rvcj4KLXN0
cnVjdCBfX3ZhcmlhbnRfYmFzZQotewotICAgIH5fX3ZhcmlhbnRfYmFzZSgpewotICAgICAgICBz
dGF0aWNfY2FzdDxfRGVyaXZlZCo+KHRoaXMpLT5fX2Rlc3Ryb3lfc2VsZigpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9EZXJpdmVkPgotc3RydWN0IF9fdmFyaWFudF9iYXNlPF9E
ZXJpdmVkLHRydWU+ewotfTsKLQotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFt
ZSBfQ3VycmVudFNlcXVlbmNlLAotICAgICAgICAgdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4u
IF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9pbmRpY2VzX2hlbHBlcjsKLQotdGVtcGxhdGU8cHRyZGlm
Zl90IF9PZmZzZXQscHRyZGlmZl90IC4uLiBfSW5kaWNlcywKLSAgICAgICAgIHR5cGVuYW1lIF9U
eXBlLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2FsbF9pbmRpY2VzX2hlbHBlcjwKLSAg
ICBfT2Zmc2V0LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+LAotICAgIF9UeXBlLF9UeXBl
LF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fYWxsX2luZGljZXNfaGVscGVyPAot
ICAgICAgICBfT2Zmc2V0KzEsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLixfT2Zmc2V0Pixf
VHlwZSxfUmVzdC4uLj46Ol9fdHlwZQotICAgICAgICBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxw
dHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBfQ3VycmVudFNlcXVlbmNlLAotICAgICAgICAgdHlw
ZW5hbWUgX1R5cGUsdHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9f
YWxsX2luZGljZXNfaGVscGVyPF9PZmZzZXQsX0N1cnJlbnRTZXF1ZW5jZSxfVHlwZSxfSGVhZCxf
UmVzdC4uLj57Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2FsbF9pbmRpY2VzX2hlbHBlcjwKLSAg
ICAgICAgX09mZnNldCsxLF9DdXJyZW50U2VxdWVuY2UsX1R5cGUsX1Jlc3QuLi4+OjpfX3R5cGUg
X190eXBlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJl
bnRTZXF1ZW5jZSx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBfX2FsbF9pbmRpY2VzX2hlbHBlcjxf
T2Zmc2V0LF9DdXJyZW50U2VxdWVuY2UsX1R5cGU+ewotICAgIHR5cGVkZWYgX0N1cnJlbnRTZXF1
ZW5jZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4g
X1R5cGVzPgotc3RydWN0IF9fYWxsX2luZGljZXN7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2Fs
bF9pbmRpY2VzX2hlbHBlcjwKLSAgICAgICAgMCxfX2luZGV4X3NlcXVlbmNlPD4sX1R5cGUsX1R5
cGVzLi4uPjo6X190eXBlIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfU2Vx
dWVuY2VzPgotc3RydWN0IF9fY29tYmluZV9zZXF1ZW5jZXM7Ci0KLXRlbXBsYXRlPHB0cmRpZmZf
dCAuLi4gX0luZGljZXMxLHB0cmRpZmZfdCAuLi4gX0luZGljZXMyPgotc3RydWN0IF9fY29tYmlu
ZV9zZXF1ZW5jZXM8Ci0gICAgX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlczEuLi4+LF9faW5kZXhf
c2VxdWVuY2U8X0luZGljZXMyLi4uPj57Ci0gICAgdHlwZWRlZiBfX2luZGV4X3NlcXVlbmNlPF9J
bmRpY2VzMS4uLixfSW5kaWNlczIuLi4+IF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IF9TZXF1ZW5jZSx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19jb21iaW5lX3NlcXVlbmNl
czxfU2VxdWVuY2UsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19jb21iaW5lX3Nl
cXVlbmNlczwKLSAgICAgICAgX1NlcXVlbmNlLAotICAgICAgICB0eXBlbmFtZSBfX2NvbWJpbmVf
c2VxdWVuY2VzPF9SZXN0Li4uPjo6X190eXBlPjo6X190eXBlIF9fdHlwZTsKLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIF9JbmRpY2VzPgotc3RydWN0IF9fZmlyc3RfaW5kZXg7Ci0KLXRlbXBsYXRl
PHB0cmRpZmZfdCBfRmlyc3RJbmRleCxwdHJkaWZmX3QgLi4uIF9SZXN0Pgotc3RydWN0IF9fZmly
c3RfaW5kZXg8X19pbmRleF9zZXF1ZW5jZTxfRmlyc3RJbmRleCxfUmVzdC4uLj4+ewotICAgIHN0
YXRpYyBjb25zdGV4cHIgcHRyZGlmZl90IF9fdmFsdWU9X0ZpcnN0SW5kZXg7Ci19OwotCi10ZW1w
bGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBfQ3VycmVudFNlcXVlbmNlLAotICAgICAg
ICAgdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2NvbnN0cnVj
dGlibGVfbWF0Y2hlc19oZWxwZXI7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfT2Zmc2V0LHR5cGVu
YW1lIF9TZXF1ZW5jZSx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBfX2NvbnN0cnVjdGlibGVfbWF0
Y2hlc19oZWxwZXI8Ci0gICAgX09mZnNldCxfU2VxdWVuY2UsX1R5cGU+ewotICAgIHR5cGVkZWYg
X1NlcXVlbmNlIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPGJvb2wgX0FjY2VwdCxwdHJkaWZmX3Qg
X0VudHJ5Pgotc3RydWN0IF9fc2VxdWVuY2Vfb3JfZW1wdHl7Ci0gICAgdHlwZWRlZiBfX2luZGV4
X3NlcXVlbmNlPD4gX190eXBlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9FbnRyeT4KLXN0
cnVjdCBfX3NlcXVlbmNlX29yX2VtcHR5PHRydWUsX0VudHJ5PnsKLSAgICB0eXBlZGVmIF9faW5k
ZXhfc2VxdWVuY2U8X0VudHJ5PiBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09m
ZnNldCx0eXBlbmFtZSBfQ3VycmVudFNlcXVlbmNlLAotICAgICAgICAgdHlwZW5hbWUgX1R5cGUs
dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fY29uc3RydWN0aWJs
ZV9tYXRjaGVzX2hlbHBlcjwKLSAgICBfT2Zmc2V0LF9DdXJyZW50U2VxdWVuY2UsX1R5cGUsX0hl
YWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYKLSAgICB0eXBlbmFtZSBfX2NvbnN0cnVjdGlibGVf
bWF0Y2hlc19oZWxwZXI8Ci0gICAgICAgIF9PZmZzZXQrMSwKLSAgICAgICAgdHlwZW5hbWUgX19j
b21iaW5lX3NlcXVlbmNlczwKLSAgICAgICAgICAgIF9DdXJyZW50U2VxdWVuY2UsCi0gICAgICAg
ICAgICB0eXBlbmFtZSBfX3NlcXVlbmNlX29yX2VtcHR5PAotICAgICAgICAgICAgICAgIHN0ZDo6
aXNfY29uc3RydWN0aWJsZTxfSGVhZCxfVHlwZT46OnZhbHVlLAotICAgICAgICAgICAgICAgIF9P
ZmZzZXQ+OjpfX3R5cGU+OjpfX3R5cGUsCi0gICAgICAgIF9UeXBlLF9SZXN0Li4uPjo6X190eXBl
IF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Ci1zdHJ1Y3QgX19jb25zdHJ1Y3RpYmxlX21hdGNoZXN7Ci0gICAgdHlwZWRlZiB0eXBlbmFt
ZSBfX2NvbnN0cnVjdGlibGVfbWF0Y2hlc19oZWxwZXI8Ci0gICAgICAgIDAsX19pbmRleF9zZXF1
ZW5jZTw+LF9UeXBlLF9UeXBlcy4uLj46Ol9fdHlwZSBfX3R5cGU7Ci19OwordXNpbmcgTW9ub3N0
YXRlID0gc3RkOjptb25vc3RhdGU7Cit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4KK3VzaW5n
IFZhcmlhbnQgPSBzdGQ6OnZhcmlhbnQ8VHlwZXMuLi4+OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdHlwZV9pbmRleF90b19jb25zdHJ1
Y3R7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2FsbF9pbmRpY2VzPF9UeXBlLF9UeXBlcy4uLj46
Ol9fdHlwZSBfX2RpcmVjdF9tYXRjaGVzOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hbGxfaW5k
aWNlczwKLSAgICAgICAgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8Ci0gICAgICAgICAgICB0
eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8X1R5cGU+Ojp0eXBlCi0gICAgICAgICAgICA+
Ojp0eXBlLF9UeXBlcy4uLj46Ol9fdHlwZSBfX3ZhbHVlX21hdGNoZXM7Ci0gICAgdHlwZWRlZiB0
eXBlbmFtZSBfX2FsbF9pbmRpY2VzPAotICAgICAgICBfVHlwZSwKLSAgICAgICAgdHlwZW5hbWUg
c3RkOjpyZW1vdmVfY29uc3Q8Ci0gICAgICAgICAgICB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZl
cmVuY2U8X1R5cGVzPjo6dHlwZQotICAgICAgICAgICAgPjo6dHlwZS4uLj46Ol9fdHlwZSBfX3Jy
ZWZfbWF0Y2hlczsKLQotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19jb25zdHJ1Y3RpYmxlX21hdGNo
ZXM8X1R5cGUsX1R5cGVzLi4uPjo6X190eXBlCi0gICAgX19jb25zdHJ1Y3RpYmxlczsKLQotICAg
IHN0YXRpY19hc3NlcnQoCi0gICAgICAgIChfX2RpcmVjdF9tYXRjaGVzOjpfX2xlbmd0aD4wKSB8
fAotICAgICAgICAoX192YWx1ZV9tYXRjaGVzOjpfX2xlbmd0aD4wKSB8fAotICAgICAgICAoX19y
cmVmX21hdGNoZXM6Ol9fbGVuZ3RoPjApIHx8Ci0gICAgICAgIChfX2NvbnN0cnVjdGlibGVzOjpf
X2xlbmd0aD09MSksCi0gICAgICAgICJGb3IgY29udmVyc2lvbiBjb25zdHJ1Y3Rpb24gb2YgdmFy
aWFudHMsIGV4YWN0bHkgb25lIHR5cGUgbXVzdCBiZSBjb25zdHJ1Y3RpYmxlIik7Ci0gICAgCi0g
ICAgdHlwZWRlZiB0eXBlbmFtZSBfX2NvbWJpbmVfc2VxdWVuY2VzPAotICAgICAgICBfX2RpcmVj
dF9tYXRjaGVzLF9fdmFsdWVfbWF0Y2hlcyxfX3JyZWZfbWF0Y2hlcywKLSAgICAgICAgX19jb25z
dHJ1Y3RpYmxlcz46Ol9fdHlwZSBfX2FsbF9tYXRjaGVzOwotICAgIAotICAgIHN0YXRpYyBjb25z
dGV4cHIgcHRyZGlmZl90IF9fdmFsdWU9X19maXJzdF9pbmRleDxfX2FsbF9tYXRjaGVzPjo6X192
YWx1ZTsKLX07Ci0KLXN0cnVjdCBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcnsKLSAgICB0ZW1w
bGF0ZTwKLSAgICAgICAgcHRyZGlmZl90IF9JbmRleCwKLSAgICAgICAgYm9vbCBfX2NvbnN0cnVj
dF9kaXJlY3RseSwKLSAgICAgICAgYm9vbCBfX2luZGV4ZWRfdHlwZV9oYXNfbm90aHJvd19tb3Zl
LAotICAgICAgICBib29sIF9fb3RoZXJfdHlwZXNfaGF2ZV9ub3Rocm93X21vdmU+Ci0gICAgc3Ry
dWN0IF9faGVscGVyOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0gICAgICAg
ICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGljZXM8X1Zhcmlh
bnQ+OjpfX3R5cGU+Ci0gICAgc3RydWN0IF9fb3BfdGFibGU7Ci19OwotCi10ZW1wbGF0ZTwKLSAg
ICBwdHJkaWZmX3QgX0luZGV4LAotICAgIGJvb2wgX19vdGhlcl90eXBlc19oYXZlX25vdGhyb3df
bW92ZT4KLXN0cnVjdCBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19oZWxwZXI8Ci0gICAg
X0luZGV4LGZhbHNlLHRydWUsX19vdGhlcl90eXBlc19oYXZlX25vdGhyb3dfbW92ZT57Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgc3Rh
dGljIHZvaWQgX190cmFtcG9saW5lKF9WYXJpYW50JiBfX3YsX0FyZ3MmJiAuLi4gX19hcmdzKXsK
LSAgICAgICAgX192LnRlbXBsYXRlIF9fdHdvX3N0YWdlX3JlcGxhY2U8X0luZGV4PihfX2FyZ3Mu
Li4pOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPAotICAgIHB0cmRpZmZfdCBfSW5kZXgsCi0gICAg
Ym9vbCBfX2luZGV4ZWRfdHlwZV9oYXNfbm90aHJvd19tb3ZlLAotICAgIGJvb2wgX19vdGhlcl90
eXBlc19oYXZlX25vdGhyb3dfbW92ZT4KLXN0cnVjdCBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBl
cjo6X19oZWxwZXI8Ci0gICAgX0luZGV4LHRydWUsX19pbmRleGVkX3R5cGVfaGFzX25vdGhyb3df
bW92ZSwKLSAgICBfX290aGVyX3R5cGVzX2hhdmVfbm90aHJvd19tb3ZlPnsKLQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIF9WYXJpYW50LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBzdGF0aWMgdm9p
ZCBfX3RyYW1wb2xpbmUoX1ZhcmlhbnQmIF9fdixfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAg
ICBfX3YudGVtcGxhdGUgX19kaXJlY3RfcmVwbGFjZTxfSW5kZXg+KHN0ZDo6Zm9yd2FyZDxfQXJn
cz4oX19hcmdzKS4uLik7Ci0gICAgfQotfTsKLQotCi10ZW1wbGF0ZTwKLSAgICBwdHJkaWZmX3Qg
X0luZGV4Pgotc3RydWN0IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX2hlbHBlcjwKLSAg
ICBfSW5kZXgsZmFsc2UsZmFsc2UsdHJ1ZT57Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFy
aWFudCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgc3RhdGljIHZvaWQgX190cmFtcG9saW5lKF9W
YXJpYW50JiBfX3YsX0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgX192LnRlbXBsYXRlIF9f
bG9jYWxfYmFja3VwX3JlcGxhY2U8X0luZGV4PihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncyku
Li4pOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPAotICAgIHB0cmRpZmZfdCBfSW5kZXg+Ci1zdHJ1
Y3QgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9faGVscGVyPAotICAgIF9JbmRleCxmYWxz
ZSxmYWxzZSxmYWxzZT57Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCx0eXBlbmFt
ZSAuLi4gX0FyZ3M+Ci0gICAgc3RhdGljIHZvaWQgX190cmFtcG9saW5lKF9WYXJpYW50JiBfX3Ys
X0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgX192LnRlbXBsYXRlIF9fZGlyZWN0X3JlcGxh
Y2U8X0luZGV4PihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1
Y3QgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRl
eF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fbW92
ZV9mdW5jX3R5cGUpKF9WYXJpYW50KixfVmFyaWFudCYpOwotICAgIHR5cGVkZWYgdm9pZCgqIGNv
bnN0IF9fY29weV9mdW5jX3R5cGUpKF9WYXJpYW50KixfVmFyaWFudCBjb25zdCYpOwotICAgIAot
ICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGljIHZvaWQgX19tb3ZlX2Fz
c2lnbl9mdW5jKAotICAgICAgICBfVmFyaWFudCAqIF9fbGhzLF9WYXJpYW50JiBfX3Jocyl7Ci0g
ICAgICAgIF9fbGhzLT50ZW1wbGF0ZSBfX3JlcGxhY2VfY29uc3RydWN0PF9JbmRleD4oc3RkOjpt
b3ZlKGdldDxfSW5kZXg+KF9fcmhzKSkpOwotICAgICAgICBfX3Jocy5fX2Rlc3Ryb3lfc2VsZigp
OwotICAgIH0KLQotICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGljIHZv
aWQgX19jb3B5X2Fzc2lnbl9mdW5jKAotICAgICAgICBfVmFyaWFudCAqIF9fbGhzLF9WYXJpYW50
IGNvbnN0JiBfX3Jocyl7Ci0gICAgICAgIF9fbGhzLT50ZW1wbGF0ZSBfX3JlcGxhY2VfY29uc3Ry
dWN0PF9JbmRleD4oZ2V0PF9JbmRleD4oX19yaHMpKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGlj
IGNvbnN0IF9fbW92ZV9mdW5jX3R5cGUgX19tb3ZlX2Fzc2lnbltzaXplb2YuLi4oX0luZGljZXMp
XTsKLSAgICBzdGF0aWMgY29uc3QgX19jb3B5X2Z1bmNfdHlwZSBfX2NvcHlfYXNzaWduW3NpemVv
Zi4uLihfSW5kaWNlcyldOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlm
Zl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVs
cGVyOjpfX29wX3RhYmxlPAotICAgIF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMu
Li4+Pjo6X19tb3ZlX2Z1bmNfdHlwZQotX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3Bf
dGFibGU8Ci0gICAgX1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX21v
dmVfYXNzaWduWwotICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9fbW92ZV9h
c3NpZ25fZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFy
aWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19yZXBsYWNlX2Nv
bnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8Ci0gICAgX1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5j
ZTxfSW5kaWNlcy4uLj4+OjpfX2NvcHlfZnVuY190eXBlCi1fX3JlcGxhY2VfY29uc3RydWN0X2hl
bHBlcjo6X19vcF90YWJsZTwKLSAgICBfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2Vz
Li4uPj46Ol9fY29weV9hc3NpZ25bCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09ewotICAgICAg
ICAmX19jb3B5X2Fzc2lnbl9mdW5jPF9JbmRpY2VzPi4uLgotICAgIH07Ci0KLXRlbXBsYXRlPHB0
cmRpZmZfdCBfSW5kZXgscHRyZGlmZl90IF9NYXNrSW5kZXgsdHlwZW5hbWUgX1N0b3JhZ2U+Ci1z
dHJ1Y3QgX19iYWNrdXBfc3RvcmFnZV9vcHN7Ci0gICAgc3RhdGljIHZvaWQgX19tb3ZlX2NvbnN0
cnVjdF9mdW5jKAotICAgICAgICBfU3RvcmFnZSAqIF9fZGVzdCxfU3RvcmFnZSYgX19zb3VyY2Up
ewotICAgICAgICBuZXcoX19kZXN0KSBfU3RvcmFnZSgKLSAgICAgICAgICAgIGluX3BsYWNlPF9J
bmRleD4sCi0gICAgICAgICAgICBzdGQ6Om1vdmUoX19zb3VyY2UuX19nZXQoaW5fcGxhY2U8X0lu
ZGV4PikpKTsKLSAgICB9Ci0gICAgc3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMoX1N0b3JhZ2Ug
KiBfX29iail7Ci0gICAgICAgIF9fb2JqLT5fX2Rlc3Ryb3koaW5fcGxhY2U8X0luZGV4Pik7Ci0g
ICAgfTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgX1N0b3JhZ2U+
Ci1zdHJ1Y3QgX19iYWNrdXBfc3RvcmFnZV9vcHM8X0luZGV4LF9JbmRleCxfU3RvcmFnZT57Ci0g
ICAgc3RhdGljIHZvaWQgX19tb3ZlX2NvbnN0cnVjdF9mdW5jKF9TdG9yYWdlICosX1N0b3JhZ2Um
KXsKLSAgICAgICAgX19USFJPV19FWENFUFRJT04oc3RkOjpiYWRfYWxsb2MoKSk7Ci0gICAgfTsK
LSAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3lfZnVuYyhfU3RvcmFnZSAqKXsKLSAgICAgICAgX19U
SFJPV19FWENFUFRJT04oc3RkOjpiYWRfYWxsb2MoKSk7Ci0gICAgfTsKLX07Ci0KLXRlbXBsYXRl
PHB0cmRpZmZfdCBfTWFza0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlLHR5cGVuYW1lIF9JbmRpY2Vz
Pgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU7Ci0KLXRlbXBsYXRlPHB0cmRpZmZf
dCBfTWFza0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlLHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1z
dHJ1Y3QgX19iYWNrdXBfc3RvcmFnZV9vcF90YWJsZTwKLSAgICBfTWFza0luZGV4LF9TdG9yYWdl
LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+ID4KLXsKLSAgICB0eXBlZGVmIHZvaWQgKCpf
X21vdmVfZnVuY190eXBlKShfU3RvcmFnZSAqIF9fZGVzdCxfU3RvcmFnZSYgX19zb3VyY2UpOwot
ICAgIHR5cGVkZWYgdm9pZCAoKl9fZGVzdHJveV9mdW5jX3R5cGUpKF9TdG9yYWdlICogX19vYmop
OwotICAgIAotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0gICAgc3RydWN0IF9faGVscGVy
ewotICAgICAgICB0eXBlZGVmIF9fYmFja3VwX3N0b3JhZ2Vfb3BzPF9JbmRleCxfTWFza0luZGV4
LF9TdG9yYWdlPiBfX29wczsKLSAgICB9OwotCi0gICAgc3RhdGljIGNvbnN0IF9fbW92ZV9mdW5j
X3R5cGUgX19tb3ZlX29wc1tzaXplb2YuLi4oX0luZGljZXMpXTsKLSAgICBzdGF0aWMgY29uc3Qg
X19kZXN0cm95X2Z1bmNfdHlwZSBfX2Rlc3Ryb3lfb3BzW3NpemVvZi4uLihfSW5kaWNlcyldOwot
fTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9NYXNrSW5kZXgsdHlwZW5hbWUgX1N0b3JhZ2UscHRy
ZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fYmFja3VwX3N0b3JhZ2Vfb3Bf
dGFibGU8Ci0gICAgX01hc2tJbmRleCxfU3RvcmFnZSxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2Vz
Li4uPiA+OjpfX21vdmVfZnVuY190eXBlCi1fX2JhY2t1cF9zdG9yYWdlX29wX3RhYmxlPAotICAg
IF9NYXNrSW5kZXgsX1N0b3JhZ2UsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4gPjo6X19t
b3ZlX29wc1sKLSAgICAgICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09ewotICAgICAgICAmX19oZWxw
ZXI8X0luZGljZXM+OjpfX29wczo6X19tb3ZlX2NvbnN0cnVjdF9mdW5jLi4uCi0gICAgfTsKLQot
dGVtcGxhdGU8cHRyZGlmZl90IF9NYXNrSW5kZXgsdHlwZW5hbWUgX1N0b3JhZ2UscHRyZGlmZl90
IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8
Ci0gICAgX01hc2tJbmRleCxfU3RvcmFnZSxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiA+
OjpfX2Rlc3Ryb3lfZnVuY190eXBlCi1fX2JhY2t1cF9zdG9yYWdlX29wX3RhYmxlPAotICAgIF9N
YXNrSW5kZXgsX1N0b3JhZ2UsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4gPjo6X19kZXN0
cm95X29wc1sKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX2hlbHBlcjxf
SW5kaWNlcz46Ol9fb3BzOjpfX2Rlc3Ryb3lfZnVuYy4uLgotICAgIH07Ci0KLXRlbXBsYXRlPHB0
cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2JhY2t1cF9zdG9y
YWdlewotICAgIHR5cGVkZWYgX192YXJpYW50X2RhdGE8X1R5cGVzLi4uPiBfX3N0b3JhZ2VfdHlw
ZTsKLQotICAgIHR5cGVkZWYgX19iYWNrdXBfc3RvcmFnZV9vcF90YWJsZTwKLSAgICAgICAgX0lu
ZGV4LF9fc3RvcmFnZV90eXBlLHR5cGVuYW1lIF9fdHlwZV9pbmRpY2VzPF9UeXBlcy4uLj46Ol9f
dHlwZT4KLSAgICBfX29wX3RhYmxlX3R5cGU7Ci0KLSAgICBwdHJkaWZmX3QgX19iYWNrdXBfaW5k
ZXg7Ci0gICAgX19zdG9yYWdlX3R5cGUmIF9fbGl2ZV9zdG9yYWdlOwotICAgIF9fc3RvcmFnZV90
eXBlIF9fYmFja3VwOwotCi0gICAgX19iYWNrdXBfc3RvcmFnZShwdHJkaWZmX3QgX19saXZlX2lu
ZGV4XyxfX3N0b3JhZ2VfdHlwZSYgX19saXZlX3N0b3JhZ2VfKToKLSAgICAgICAgX19iYWNrdXBf
aW5kZXgoX19saXZlX2luZGV4XyksX19saXZlX3N0b3JhZ2UoX19saXZlX3N0b3JhZ2VfKXsKLSAg
ICAgICAgaWYoX19iYWNrdXBfaW5kZXg+PTApewotICAgICAgICAgICAgX19vcF90YWJsZV90eXBl
OjpfX21vdmVfb3BzW19fYmFja3VwX2luZGV4XSgKLSAgICAgICAgICAgICAgICAmX19iYWNrdXAs
X19saXZlX3N0b3JhZ2UpOwotICAgICAgICAgICAgX19vcF90YWJsZV90eXBlOjpfX2Rlc3Ryb3lf
b3BzW19fYmFja3VwX2luZGV4XSgKLSAgICAgICAgICAgICAgICAmX19saXZlX3N0b3JhZ2UpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIHZvaWQgX19kZXN0cm95KCl7Ci0gICAgICAgIGlmKF9fYmFj
a3VwX2luZGV4Pj0wKQotICAgICAgICAgICAgX19vcF90YWJsZV90eXBlOjpfX2Rlc3Ryb3lfb3Bz
W19fYmFja3VwX2luZGV4XSgKLSAgICAgICAgICAgICAgICAmX19iYWNrdXApOwotICAgICAgICBf
X2JhY2t1cF9pbmRleD0tMTsKLSAgICB9Ci0gICAgCi0gICAgfl9fYmFja3VwX3N0b3JhZ2UoKXsK
LSAgICAgICAgaWYoX19iYWNrdXBfaW5kZXg+PTApewotICAgICAgICAgICAgX19vcF90YWJsZV90
eXBlOjpfX21vdmVfb3BzW19fYmFja3VwX2luZGV4XSgKLSAgICAgICAgICAgICAgICAmX19saXZl
X3N0b3JhZ2UsX19iYWNrdXApOwotICAgICAgICAgICAgX19kZXN0cm95KCk7Ci0gICAgICAgIH0K
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYWxs
X21vdmVfY29uc3RydWN0aWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUg
Li4uIF9SZXN0Pgotc3RydWN0IF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfSGVhZCxfUmVzdC4u
Lj4KK2NvbnN0ZXhwciBib29sIGhvbGRzX2FsdGVybmF0aXZlKFZhcmlhbnQ8X1R5cGVzLi4uPiBj
b25zdCYgX192KSBfX05PRVhDRVBUCiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVl
PXN0ZDo6aXNfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkPjo6dmFsdWUgJiYgX19hbGxfbW92ZV9j
b25zdHJ1Y3RpYmxlPF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3Qg
X19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPD46Ci0gICAgc3RkOjp0cnVlX3R5cGV7fTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9tb3ZlX2Fzc2lnbmFibGU7
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBf
X2FsbF9tb3ZlX2Fzc2lnbmFibGU8X0hlYWQsX1Jlc3QuLi4+Ci17Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIHZhbHVlPXN0ZDo6aXNfbW92ZV9hc3NpZ25hYmxlPF9IZWFkPjo6dmFsdWUgJiYg
X19hbGxfbW92ZV9hc3NpZ25hYmxlPF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+
Ci1zdHJ1Y3QgX19hbGxfbW92ZV9hc3NpZ25hYmxlPD46Ci0gICAgc3RkOjp0cnVlX3R5cGV7fTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9jb3B5X2Fzc2ln
bmFibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0
cnVjdCBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8X0hlYWQsX1Jlc3QuLi4+Ci17Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIHZhbHVlPXN0ZDo6aXNfY29weV9hc3NpZ25hYmxlPF9IZWFkPjo6dmFs
dWUgJiYgX19hbGxfY29weV9hc3NpZ25hYmxlPF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1w
bGF0ZTw+Ci1zdHJ1Y3QgX19hbGxfY29weV9hc3NpZ25hYmxlPD46Ci0gICAgc3RkOjp0cnVlX3R5
cGV7fTsKLQotbmFtZXNwYWNlIF9fc3dhcF90ZXN0X2RldGFpbHsKLXVzaW5nIHN0ZDo6c3dhcDsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgX090aGVyPgotc3RydWN0IF9fc3dhcF9yZXN1bHR7fTsKLQot
dGVtcGxhdGU8dHlwZW5hbWU+Ci1zdGF0aWMgY2hhciBfX3Rlc3QoLi4uKTsKLXRlbXBsYXRlIDx0
eXBlbmFtZSBfT3RoZXI+Ci1zdGF0aWMgc3RkOjpwYWlyPGNoYXIsIHN0ZDo6cGFpcjxjaGFyLCBf
X3N3YXBfcmVzdWx0PGRlY2x0eXBlKAotICAgIHN3YXAoc3RkOjpkZWNsdmFsPF9PdGhlciAmPigp
LHN0ZDo6ZGVjbHZhbDxfT3RoZXIgJj4oKSkpPj4+Ci1fX3Rlc3QoX090aGVyICopOwotfQotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgX1R5cGU+IHN0cnVjdCBfX2lzX3N3YXBwYWJsZSB7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0KLSAgICAgICAgc2l6ZW9mKF9fc3dhcF90ZXN0X2Rl
dGFpbDo6X190ZXN0PF9UeXBlPihudWxscHRyKSkgIT0gMTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbGxfc3dhcHBhYmxlOwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfc3dhcHBhYmxlPF9I
ZWFkLF9SZXN0Li4uPgotewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1fX2lzX3N3
YXBwYWJsZTxfSGVhZD46OnZhbHVlICYmIF9fYWxsX3N3YXBwYWJsZTxfUmVzdC4uLj46OnZhbHVl
OwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fYWxsX3N3YXBwYWJsZTw+OgotICAgIHN0ZDo6
dHJ1ZV90eXBle307Ci0KLXRlbXBsYXRlPGJvb2wgX01vdmVDb25zdHJ1Y3RpYmxlLHR5cGVuYW1l
IC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0X2lt
cGx7fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3Ry
dWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2NvbnN0cnVjdF9pbXBsPHRydWUsX0hlYWQsX1Jl
c3QuLi4+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1ub2V4Y2VwdChfSGVhZChz
dGQ6OmRlY2x2YWw8X0hlYWQmJj4oKSkpICYmIF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2NvbnN0
cnVjdF9pbXBsPHRydWUsX1Jlc3QuLi4+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVj
dCBfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9jb25zdHJ1Y3RfaW1wbDx0cnVlPnsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgdmFsdWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4u
LiBfVHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0OgotX19u
b2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0X2ltcGw8X19hbGxfbW92ZV9jb25zdHJ1Y3Rp
YmxlPF9UeXBlcy4uLj46OnZhbHVlLF9UeXBlcy4uLj4KLXt9OwotCi10ZW1wbGF0ZTxib29sIF9N
b3ZlQXNzaWduYWJsZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRfdmFy
aWFudF9tb3ZlX2Fzc2lnbl9pbXBse307Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBfSGVhZCwgdHlw
ZW5hbWUuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduX2lt
cGw8dHJ1ZSwgX0hlYWQsIF9SZXN0Li4uPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZh
bHVlID0KLSAgICAgICAgc3RkOjppc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxfSGVhZD46OnZh
bHVlICYmCi0gICAgICAgIHN0ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X0hlYWQ+
Ojp2YWx1ZSAmJgotICAgICAgICBfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9hc3NpZ25faW1wbDx0
cnVlLCBfUmVzdC4uLj46OnZhbHVlOwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fbm9leGNl
cHRfdmFyaWFudF9tb3ZlX2Fzc2lnbl9pbXBsPHRydWU+ewotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCB2YWx1ZT10cnVlOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lLi4uIF9UeXBlcz4KLXN0
cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9hc3NpZ24KLSAgICA6IF9fbm9leGNlcHRfdmFy
aWFudF9tb3ZlX2Fzc2lnbl9pbXBsPAotICAgICAgICAgIF9fYWxsX21vdmVfYXNzaWduYWJsZTxf
VHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGli
bGU8X1R5cGVzLi4uPjo6dmFsdWUsCi0gICAgICAgICAgX1R5cGVzLi4uPiB7fTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU7
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBf
X2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X0hlYWQsX1Jlc3QuLi4+Ci17Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIHZhbHVlPXN0ZDo6aXNfY29weV9jb25zdHJ1Y3RpYmxlPF9IZWFkPjo6dmFs
dWUgJiYgX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10
ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPD46Ci0gICAgc3RkOjp0
cnVlX3R5cGV7fTsKLQotdGVtcGxhdGU8Ym9vbCBfQ29weUNvbnN0cnVjdGlibGUsdHlwZW5hbWUg
Li4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25zdHJ1
Y3RfaW1wbHt9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+
Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8dHJ1
ZSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPW5vZXhj
ZXB0KF9IZWFkKHN0ZDo6ZGVjbHZhbDxfSGVhZCBjb25zdCY+KCkpKSAmJiBfX25vZXhjZXB0X3Zh
cmlhbnRfY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDx0cnVlLF9SZXN0Li4uPjo6dmFsdWU7Ci19
OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X2NvbnN0X2NvcHlfY29u
c3RydWN0X2ltcGw8dHJ1ZT57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXRydWU7
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRf
dmFyaWFudF9jb25zdF9jb3B5X2NvbnN0cnVjdDoKLV9fbm9leGNlcHRfdmFyaWFudF9jb25zdF9j
b3B5X2NvbnN0cnVjdF9pbXBsPF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2
YWx1ZSxfVHlwZXMuLi4+Ci17fTsKLQotdGVtcGxhdGU8Ym9vbCBfQ29weU5vbl9Db25zdHJ1Y3Rp
YmxlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X25vbl9j
b25zdF9jb3B5X2NvbnN0cnVjdF9pbXBse307Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5
cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbm9uX2NvbnN0X2Nv
cHlfY29uc3RydWN0X2ltcGw8dHJ1ZSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIHZhbHVlPW5vZXhjZXB0KF9IZWFkKHN0ZDo6ZGVjbHZhbDxfSGVhZCY+KCkpKSAm
JiBfX25vZXhjZXB0X3ZhcmlhbnRfbm9uX2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8dHJ1ZSxf
UmVzdC4uLj46OnZhbHVlOwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fbm9leGNlcHRfdmFy
aWFudF9ub25fY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDx0cnVlPnsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgdmFsdWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVjdDoK
LV9fbm9leGNlcHRfdmFyaWFudF9ub25fY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDxfX2FsbF9j
b3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsX1R5cGVzLi4uPgote307Ci0KLXRl
bXBsYXRlPGJvb2wgX1N3YXBwYWJsZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9l
eGNlcHRfdmFyaWFudF9zd2FwX2ltcGx7fTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIF9IZWFkLCB0
eXBlbmFtZS4uLiBfUmVzdD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfc3dhcF9pbXBsPHRy
dWUsIF9IZWFkLCBfUmVzdC4uLj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZSA9
Ci0gICAgICAgIG5vZXhjZXB0KHN3YXAoc3RkOjpkZWNsdmFsPF9IZWFkJj4oKSxzdGQ6OmRlY2x2
YWw8X0hlYWQmPigpKSkgJiYKLSAgICAgICAgX19ub2V4Y2VwdF92YXJpYW50X3N3YXBfaW1wbDx0
cnVlLCBfUmVzdC4uLj46OnZhbHVlOwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fbm9leGNl
cHRfdmFyaWFudF9zd2FwX2ltcGw8dHJ1ZT57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZh
bHVlPXRydWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9f
bm9leGNlcHRfdmFyaWFudF9zd2FwOgotX19ub2V4Y2VwdF92YXJpYW50X3N3YXBfaW1wbDxfX2Fs
bF9zd2FwcGFibGU8X1R5cGVzLi4uPjo6dmFsdWUsX1R5cGVzLi4uPgote307Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jbGFzcyBWYXJpYW50OgotICAgICAgICBwcml2YXRlIF9f
dmFyaWFudF9iYXNlPAotICAgIFZhcmlhbnQ8X1R5cGVzLi4uPixfX2FsbF90cml2aWFsbHlfZGVz
dHJ1Y3RpYmxlPF9UeXBlcy4uLj46Ol9fdmFsdWU+Ci17Ci0gICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci0gICAgdHlwZWRlZiBfX3ZhcmlhbnRfYmFzZTxWYXJpYW50PF9UeXBlcy4uLj4sX19h
bGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxfVHlwZXMuLi4+OjpfX3ZhbHVlPiBfX2Jhc2VfdHlw
ZTsKLSAgICBmcmllbmQgX19iYXNlX3R5cGU7Ci0gICAgZnJpZW5kIHN0cnVjdCBfX2NvcHlfY29u
c3RydWN0X29wX3RhYmxlPFZhcmlhbnQ+OwotICAgIGZyaWVuZCBzdHJ1Y3QgX19jb3B5X2Fzc2ln
bl9vcF90YWJsZTxWYXJpYW50PjsKLSAgICBmcmllbmQgc3RydWN0IF9fbW92ZV9jb25zdHJ1Y3Rf
b3BfdGFibGU8VmFyaWFudD47Ci0gICAgZnJpZW5kIHN0cnVjdCBfX21vdmVfYXNzaWduX29wX3Rh
YmxlPFZhcmlhbnQ+OwotICAgIGZyaWVuZCBzdHJ1Y3QgX19kZXN0cm95X29wX3RhYmxlPFZhcmlh
bnQ+OwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9U
eXBlczI+Ci0gICAgZnJpZW5kIHN0cnVjdCBfX3ZhcmlhbnRfYWNjZXNzb3I7Ci0KLSAgICBmcmll
bmQgc3RydWN0IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOwotCi0gICAgdHlwZWRlZiBfX3Zh
cmlhbnRfZGF0YTxfVHlwZXMuLi4+IF9fc3RvcmFnZV90eXBlOwotICAgIF9fc3RvcmFnZV90eXBl
IF9fc3RvcmFnZTsKLSAgICB0eXBlbmFtZSBfX2Rpc2NyaW1pbmF0b3JfdHlwZTxzaXplb2YgLi4u
IChfVHlwZXMpPjo6X190eXBlIF9faW5kZXg7Ci0KLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4
LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBzaXplX3QgX19lbXBsYWNlX2NvbnN0cnVjdChfQXJn
cyYmIC4uLiBfX2FyZ3MpewotICAgICAgICBuZXcoJl9fc3RvcmFnZSkgX19zdG9yYWdlX3R5cGUo
Ci0gICAgICAgICAgICBpbl9wbGFjZTxfSW5kZXg+LHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdz
KS4uLik7Ci0gICAgICAgIHJldHVybiAgX0luZGV4OwotICAgIH0KLSAgICAKLSAgICB2b2lkIF9f
ZGVzdHJveV9zZWxmKCl7Ci0gICAgICAgIGlmKHZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgX19kZXN0cm95X29wX3RhYmxlPFZhcmlhbnQ+Ojpf
X2FwcGx5W2luZGV4KCldKHRoaXMpOwotICAgICAgICBfX2luZGV4PS0xOwotICAgIH0KLSAgICAK
LSAgICBwdHJkaWZmX3QgX19tb3ZlX2NvbnN0cnVjdChWYXJpYW50JiBfX290aGVyKXsKLSAgICAg
ICAgcHRyZGlmZl90IGNvbnN0IF9fb3RoZXJfaW5kZXg9X19vdGhlci5pbmRleCgpOwotICAgICAg
ICBpZihfX290aGVyX2luZGV4PT0tMSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAg
X19tb3ZlX2NvbnN0cnVjdF9vcF90YWJsZTxWYXJpYW50Pjo6X19hcHBseVtfX290aGVyX2luZGV4
XSh0aGlzLF9fb3RoZXIpOwotICAgICAgICBfX290aGVyLl9fZGVzdHJveV9zZWxmKCk7Ci0gICAg
ICAgIHJldHVybiBfX290aGVyX2luZGV4OwotICAgIH0KLQotICAgIHB0cmRpZmZfdCBfX2NvcHlf
Y29uc3RydWN0KFZhcmlhbnQgY29uc3QmIF9fb3RoZXIpewotICAgICAgICBwdHJkaWZmX3QgY29u
c3QgX19vdGhlcl9pbmRleD1fX290aGVyLmluZGV4KCk7Ci0gICAgICAgIGlmKF9fb3RoZXJfaW5k
ZXg9PS0xKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBfX2NvcHlfY29uc3RydWN0
X29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W19fb3RoZXJfaW5kZXhdKHRoaXMsX19vdGhlcik7
Ci0gICAgICAgIHJldHVybiBfX290aGVyX2luZGV4OwotICAgIH0KLQotICAgIHRlbXBsYXRlPHNp
emVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHZvaWQgX19yZXBsYWNlX2NvbnN0
cnVjdChfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faW5k
ZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgX190aGlzX3R5cGU7Ci0gICAgICAg
IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX2hlbHBlcjwKLSAgICAgICAgICAgIF9JbmRl
eCwKLSAgICAgICAgICAgIF9fc3RvcmFnZV9ub3Rocm93X2NvbnN0cnVjdGlibGU8X190aGlzX3R5
cGUsX0FyZ3MuLi4+OjpfX3ZhbHVlIHx8Ci0gICAgICAgICAgICAoc2l6ZW9mLi4uKF9UeXBlcyk9
PTEpLAotICAgICAgICAgICAgX19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9f
dGhpc190eXBlPjo6X192YWx1ZSwKLSAgICAgICAgICAgIF9fb3RoZXJfc3RvcmFnZV9ub3Rocm93
X21vdmVfY29uc3RydWN0aWJsZTwKLSAgICAgICAgICAgICAgICBfSW5kZXgsX1R5cGVzLi4uPjo6
X192YWx1ZQotICAgICAgICAgICAgPjo6X190cmFtcG9saW5lKCp0aGlzLHN0ZDo6Zm9yd2FyZDxf
QXJncz4oX19hcmdzKS4uLik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0
eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgdm9pZCBfX3R3b19zdGFnZV9yZXBsYWNlKF9BcmdzJiYg
Li4uIF9fYXJncyl7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0lu
ZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBfX3R5cGU7Ci0gICAgICAgIF9fdmFyaWFudF9kYXRhPF9f
dHlwZT4gX19sb2NhbCgKLSAgICAgICAgICAgIGluX3BsYWNlPDA+LHN0ZDo6Zm9yd2FyZDxfQXJn
cz4oX19hcmdzKS4uLik7Ci0gICAgICAgIF9fZGVzdHJveV9zZWxmKCk7Ci0gICAgICAgIF9fZW1w
bGFjZV9jb25zdHJ1Y3Q8X0luZGV4PigKLSAgICAgICAgICAgIHN0ZDo6bW92ZShfX2xvY2FsLl9f
Z2V0KGluX3BsYWNlPDA+KSkpOwotICAgICAgICBfX2luZGV4PV9JbmRleDsKLSAgICAgICAgX19s
b2NhbC5fX2Rlc3Ryb3koaW5fcGxhY2U8MD4pOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHNpemVf
dCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHZvaWQgX19sb2NhbF9iYWNrdXBfcmVw
bGFjZShfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICBfX2JhY2t1cF9zdG9yYWdlPF9JbmRl
eCxfVHlwZXMuLi4+IF9fYmFja3VwKF9faW5kZXgsX19zdG9yYWdlKTsKLSAgICAgICAgX19lbXBs
YWNlX2NvbnN0cnVjdDxfSW5kZXg+KHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7Ci0g
ICAgICAgIF9faW5kZXg9X0luZGV4OwotICAgICAgICBfX2JhY2t1cC5fX2Rlc3Ryb3koKTsKLSAg
ICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+
Ci0gICAgdm9pZCBfX2RpcmVjdF9yZXBsYWNlKF9BcmdzJiYgLi4uIF9fYXJncykgewotICAgICAg
ICBfX2Rlc3Ryb3lfc2VsZigpOwotICAgICAgICBfX2VtcGxhY2VfY29uc3RydWN0PF9JbmRleD4o
c3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICAgICAgX19pbmRleD1fSW5kZXg7
Ci0gICAgfQotCi0gICAgc3RydWN0IF9fcHJpdmF0ZV90eXBle307Ci0KLXB1YmxpYzoKLSAgICBj
b25zdGV4cHIgVmFyaWFudCgpCi0gICAgICAgIF9fTk9FWENFUFRfKG5vZXhjZXB0KHR5cGVuYW1l
IF9faW5kZXhlZF90eXBlPDAsX1R5cGVzLi4uPjo6X190eXBlKCkpKToKLSAgICAgICAgX19zdG9y
YWdlKGluX3BsYWNlPDA+KSwKLSAgICAgICAgX19pbmRleCgwKQotICAgIHt9Ci0KLSAgICBjb25z
dGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9fYWxsX21vdmVfY29uc3Ry
dWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSYm
IF9fb3RoZXIpCi0gICAgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3Ry
dWN0PF9UeXBlcy4uLj46OnZhbHVlKToKLSAgICAgICAgX19pbmRleChfX21vdmVfY29uc3RydWN0
KF9fb3RoZXIpKQotICAgIHt9Ci0KLSAgICBjb25zdGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6
OmNvbmRpdGlvbmFsPCFfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUs
VmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5cGUmJiBfX290aGVyKT1kZWxldGU7Ci0gICAgCi0g
ICAgY29uc3RleHByIFZhcmlhbnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9jb3B5
X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsVmFyaWFudCxfX3ByaXZhdGVfdHlwZT46
OnR5cGUmIF9fb3RoZXIpCi0gICAgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X25vbl9j
b25zdF9jb3B5X2NvbnN0cnVjdDxfVHlwZXMuLi4+Ojp2YWx1ZSk6Ci0gICAgICAgIF9faW5kZXgo
X19jb3B5X2NvbnN0cnVjdChfX290aGVyKSkKLSAgICB7fQotCi0gICAgY29uc3RleHByIFZhcmlh
bnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwhX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9U
eXBlcy4uLj46OnZhbHVlLFZhcmlhbnQsX19wcml2YXRlX3R5cGU+Ojp0eXBlJiBfX290aGVyKT1k
ZWxldGU7Ci0KLSAgICBjb25zdGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFs
PF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJp
dmF0ZV90eXBlPjo6dHlwZSBjb25zdCYgX19vdGhlcikKLSAgICBfX05PRVhDRVBUXyhfX25vZXhj
ZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25zdHJ1Y3Q8X1R5cGVzLi4uPjo6dmFsdWUpOgotICAg
ICAgICBfX2luZGV4KF9fY29weV9jb25zdHJ1Y3QoX19vdGhlcikpCi0gICAge30KLQotICAgIGNv
bnN0ZXhwciBWYXJpYW50KHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8IV9fYWxsX2NvcHlfY29u
c3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlw
ZSBjb25zdCYgX19vdGhlcik9ZGVsZXRlOwotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9U
eXBlLHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBleHBsaWNpdCBjb25zdGV4cHIgVmFyaWFudChp
bl9wbGFjZV90eXBlX3Q8X1R5cGU+LF9BcmdzJiYgLi4uIF9fYXJncyk6Ci0gICAgICAgIF9fc3Rv
cmFnZSgKLSAgICAgICAgICAgIGluX3BsYWNlPF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+
OjpfX3ZhbHVlPiwKLSAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLiks
Ci0gICAgICAgIF9faW5kZXgoX190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWUp
Ci0gICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29uc3RydWN0aWJsZTxfVHlw
ZSxfQXJncy4uLj46OnZhbHVlLCJUeXBlIG11c3QgYmUgY29uc3RydWN0aWJsZSBmcm9tIGFyZ3Mi
KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfQXJn
cz4KLSAgICBleHBsaWNpdCBjb25zdGV4cHIgVmFyaWFudChpbl9wbGFjZV9pbmRleF90PF9JbmRl
eD4sX0FyZ3MmJiAuLi4gX19hcmdzKToKLSAgICAgICAgX19zdG9yYWdlKGluX3BsYWNlPF9JbmRl
eD4sc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKSwKLSAgICAgICAgX19pbmRleChfSW5k
ZXgpCi0gICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29uc3RydWN0aWJsZTx0
eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlLF9BcmdzLi4u
Pjo6dmFsdWUsIlR5cGUgbXVzdCBiZSBjb25zdHJ1Y3RpYmxlIGZyb20gYXJncyIpOwotICAgIH0K
LSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLSAgICBjb25zdGV4cHIgVmFyaWFu
dChfVHlwZSYmIF9feCk6Ci0gICAgICAgIF9fc3RvcmFnZSgKLSAgICAgICAgICAgIGluX3BsYWNl
PAotICAgICAgICAgICAgX190eXBlX2luZGV4X3RvX2NvbnN0cnVjdDxfVHlwZSxfVHlwZXMuLi4+
OjpfX3ZhbHVlPiwKLSAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfVHlwZT4oX194KSksCi0gICAg
ICAgIF9faW5kZXgoX190eXBlX2luZGV4X3RvX2NvbnN0cnVjdDxfVHlwZSxfVHlwZXMuLi4+Ojpf
X3ZhbHVlKQotICAgIHt9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSwKLSAgICAgICAg
ICAgICB0eXBlbmFtZSBfRW5hYmxlPQotICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPAotICAgICAgICAgICAgICAgICAoX19jb25zdHJ1Y3RpYmxlX21hdGNoZXM8c3RkOjppbml0
aWFsaXplcl9saXN0PF9UeXBlPixfVHlwZXMuLi4+OjpfX3R5cGU6Ol9fbGVuZ3RoPjApCi0gICAg
ICAgICAgICAgPjo6dHlwZT4KLSAgICBjb25zdGV4cHIgVmFyaWFudChzdGQ6OmluaXRpYWxpemVy
X2xpc3Q8X1R5cGU+IF9feCk6Ci0gICAgICAgIF9fc3RvcmFnZSgKLSAgICAgICAgICAgIGluX3Bs
YWNlPAotICAgICAgICAgICAgX190eXBlX2luZGV4X3RvX2NvbnN0cnVjdDxzdGQ6OmluaXRpYWxp
emVyX2xpc3Q8X1R5cGU+LF9UeXBlcy4uLj46Ol9fdmFsdWU+LAotICAgICAgICAgICAgX194KSwK
LSAgICAgICAgX19pbmRleChfX3R5cGVfaW5kZXhfdG9fY29uc3RydWN0PHN0ZDo6aW5pdGlhbGl6
ZXJfbGlzdDxfVHlwZT4sX1R5cGVzLi4uPjo6X192YWx1ZSkKLSAgICB7fQotICAgIAotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotICAgIFZhcmlhbnQmIG9wZXJhdG9yPShfVHlwZSYmIF9f
eCl7Ci0gICAgICAgIGNvbnN0ZXhwciBzaXplX3QgX0luZGV4PQotICAgICAgICAgICAgX190eXBl
X2luZGV4X3RvX2NvbnN0cnVjdDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlOwotICAgICAgICBp
ZihfSW5kZXg9PV9faW5kZXgpewotICAgICAgICAgICAgZ2V0PF9JbmRleD4oKnRoaXMpPXN0ZDo6
Zm9yd2FyZDxfVHlwZT4oX194KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlewotICAgICAgICAg
ICAgX19yZXBsYWNlX2NvbnN0cnVjdDxfSW5kZXg+KHN0ZDo6Zm9yd2FyZDxfVHlwZT4oX194KSk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIFZhcmlhbnQg
Jm9wZXJhdG9yPSgKLSAgICAgICAgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwKLSAgICAgICAg
ICAgICEoX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAg
ICAgICAgICAgIF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgot
ICAgICAgICAgICAgICBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8X1R5cGVzLi4uPjo6dmFsdWUpLAot
ICAgICAgICAgICAgVmFyaWFudCwgX19wcml2YXRlX3R5cGU+Ojp0eXBlIGNvbnN0ICZfX290aGVy
KSA9IGRlbGV0ZTsKLQotICAgIFZhcmlhbnQgJm9wZXJhdG9yPSgKLSAgICAgICAgdHlwZW5hbWUg
c3RkOjpjb25kaXRpb25hbDwKLSAgICAgICAgICAgIF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxf
VHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICAgIF9fYWxsX21vdmVfY29uc3RydWN0
aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICAgIF9fYWxsX2NvcHlfYXNz
aWduYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSwKLSAgICAgICAgICAgIFZhcmlhbnQsIF9fcHJpdmF0
ZV90eXBlPjo6dHlwZSBjb25zdCAmX19vdGhlcikgewotICAgICAgICBpZiAoX19vdGhlci52YWx1
ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIF9fZGVzdHJveV9zZWxmKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZSBpZihfX290aGVyLmluZGV4KCk9PWluZGV4KCkpewotICAg
ICAgICAgICAgX19jb3B5X2Fzc2lnbl9vcF90YWJsZTxWYXJpYW50Pjo6X19hcHBseVtpbmRleCgp
XSh0aGlzLF9fb3RoZXIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2V7Ci0gICAgICAgICAgICBf
X3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTxWYXJpYW50Pjo6X19jb3B5X2Fz
c2lnblsKLSAgICAgICAgICAgICAgICBfX290aGVyLmluZGV4KCldKHRoaXMsX19vdGhlcik7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAgICBWYXJpYW50ICZvcGVy
YXRvcj0oCi0gICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8Ci0gICAgICAgICAgICAh
KF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAg
ICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAg
ICAgICAgICAgX19hbGxfY29weV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlKSwKLSAgICAg
ICAgICAgIFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZSAmX19vdGhlcikgPSBkZWxldGU7
Ci0KLSAgICBWYXJpYW50ICZvcGVyYXRvcj0oCi0gICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0
aW9uYWw8Ci0gICAgICAgICAgICBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6
dmFsdWUgJiYKLSAgICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVz
Li4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgICBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8X1R5
cGVzLi4uPjo6dmFsdWUsCi0gICAgICAgICAgICBWYXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5
cGUgJl9fb3RoZXIpIHsKLSAgICAgICAgaWYoX19vdGhlci52YWx1ZWxlc3NfYnlfZXhjZXB0aW9u
KCkpewotICAgICAgICAgICAgX19kZXN0cm95X3NlbGYoKTsKLSAgICAgICAgfQotICAgICAgICBl
bHNlIGlmKF9fb3RoZXIuaW5kZXgoKT09aW5kZXgoKSl7Ci0gICAgICAgICAgICBfX2NvcHlfYXNz
aWduX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W2luZGV4KCldKHRoaXMsX19vdGhlcik7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3Rf
aGVscGVyOjpfX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2NvcHlfYXNzaWduWwotICAgICAgICAgICAg
ICAgIF9fb3RoZXIuaW5kZXgoKV0odGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIFZhcmlhbnQgJm9wZXJhdG9yPSgKLSAgICAgICAgdHlw
ZW5hbWUgc3RkOjpjb25kaXRpb25hbDwKLSAgICAgICAgICAgICEoX19hbGxfbW92ZV9jb25zdHJ1
Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgIF9fYWxsX21vdmVfYXNz
aWduYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSksCi0gICAgICAgICAgICBWYXJpYW50LCBfX3ByaXZh
dGVfdHlwZT46OnR5cGUgJiZfX290aGVyKSA9IGRlbGV0ZTsKLQotICAgIFZhcmlhbnQgJm9wZXJh
dG9yPSgKLSAgICAgICAgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9tb3ZlX2NvbnN0
cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19hbGxfbW92ZV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6
dHlwZSAmJgotICAgICAgICAgICAgX19vdGhlcikgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJp
YW50X21vdmVfYXNzaWduPF9UeXBlcy4uLj46OnZhbHVlKSB7Ci0gICAgICAgIGlmIChfX290aGVy
LnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgewotICAgICAgICAgICAgX19kZXN0cm95X3NlbGYo
KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKF9fb3RoZXIuaW5kZXgoKT09aW5kZXgoKSl7
Ci0gICAgICAgICAgICBfX21vdmVfYXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W2lu
ZGV4KCldKHRoaXMsX19vdGhlcik7Ci0gICAgICAgICAgICBfX290aGVyLl9fZGVzdHJveV9zZWxm
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25z
dHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPFZhcmlhbnQ+OjpfX21vdmVfYXNzaWduWwotICAgICAg
ICAgICAgICAgIF9fb3RoZXIuaW5kZXgoKV0odGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUs
dHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHZvaWQgZW1wbGFjZShfQXJncyYmIC4uLiBfX2FyZ3Mp
ewotICAgICAgICBfX2RpcmVjdF9yZXBsYWNlPF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+
OjpfX3ZhbHVlPigKLSAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7
Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9B
cmdzPgotICAgIHZvaWQgZW1wbGFjZShfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICBfX2Rp
cmVjdF9yZXBsYWNlPF9JbmRleD4oc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAg
ICB9Ci0gICAgCi0gICAgY29uc3RleHByIGJvb2wgdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpIGNv
bnN0IF9fTk9FWENFUFR7Ci0gICAgICAgIHJldHVybiBfX2luZGV4PT0tMTsKLSAgICB9Ci0gICAg
Y29uc3RleHByIHB0cmRpZmZfdCBpbmRleCgpIGNvbnN0IF9fTk9FWENFUFR7Ci0gICAgICAgIHJl
dHVybiBfX2luZGV4OwotICAgIH0KLQotICAgIHZvaWQgc3dhcCgKLSAgICAgICAgdHlwZW5hbWUg
c3RkOjpjb25kaXRpb25hbDwKLSAgICAgICAgICAgIF9fYWxsX3N3YXBwYWJsZTxfVHlwZXMuLi4+
Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICAgIF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlw
ZXMuLi4+Ojp2YWx1ZSwKLSAgICAgICAgICAgIFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlw
ZQotICAgICAgICAgICAgJl9fb3RoZXIpIF9fTk9FWENFUFRfKF9fbm9leGNlcHRfdmFyaWFudF9z
d2FwPF9UeXBlcy4uLj46OnZhbHVlKSB7Ci0gICAgICAgIGlmIChfX290aGVyLmluZGV4KCkgPT0g
aW5kZXgoKSkgewotICAgICAgICAgICAgaWYoIXZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkKLSAg
ICAgICAgICAgICAgICBfX3N3YXBfb3BfdGFibGU8VmFyaWFudD46Ol9fYXBwbHlbaW5kZXgoKV0o
KnRoaXMsX19vdGhlcik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAgIFZh
cmlhbnQgX190ZW1wKHN0ZDo6bW92ZShfX290aGVyKSk7Ci0gICAgICAgICAgICBfX290aGVyLl9f
aW5kZXg9X19vdGhlci5fX21vdmVfY29uc3RydWN0KCp0aGlzKTsKLSAgICAgICAgICAgIF9faW5k
ZXg9X19tb3ZlX2NvbnN0cnVjdChfX3RlbXApOwotICAgICAgICB9Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PgotY2xhc3MgVmFyaWFudDw+ewotcHVibGljOgotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotICAgIFZhcmlhbnQoKT1kZWxldGU7Ci0gICAgCi0gICAgY29uc3RleHByIGJvb2wg
dmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpIGNvbnN0IF9fTk9FWENFUFR7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICBjb25zdGV4cHIgcHRyZGlmZl90IGluZGV4KCkgY29uc3QgX19O
T0VYQ0VQVHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIHZvaWQgc3dhcChWYXJp
YW50Jil7fQotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lLi4uIF9UeXBlcz4KLXR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPF9fYWxsX3N3YXBwYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+
Ojp2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQ+Ojp0eXBlCi1zd2FwKFZhcmlh
bnQ8X1R5cGVzLi4uPiAmX19saHMsIFZhcmlhbnQ8X1R5cGVzLi4uPiAmX19yaHMpIF9fTk9FWENF
UFRfKAotICAgIF9fbm9leGNlcHRfdmFyaWFudF9zd2FwPF9UeXBlcy4uLj46OnZhbHVlKSB7Ci0g
ICAgX19saHMuc3dhcChfX3Jocyk7Ci19Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlw
ZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3ZhcmlhbnRfYWNjZXNzb3J7Ci0gICAgdHlwZWRl
ZiB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIF9fdHlw
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIF9fdHlwZSYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYg
X192KXsKLSAgICAgICAgcmV0dXJuIF9fdi5fX3N0b3JhZ2UuX19nZXQoaW5fcGxhY2U8X0luZGV4
Pik7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgX190eXBlIGNvbnN0JiBnZXQoVmFyaWFu
dDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpewotICAgICAgICByZXR1cm4gX192Ll9fc3RvcmFnZS5f
X2dldChpbl9wbGFjZTxfSW5kZXg+KTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfX3R5
cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+JiYgX192KXsKLSAgICAgICAgcmV0dXJuIF9fdi5f
X3N0b3JhZ2UuX19nZXRfcnJlZihpbl9wbGFjZTxfSW5kZXg+KTsKLSAgICB9Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBjb25zdCBfX3R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiYg
X192KXsKLSAgICAgICAgcmV0dXJuIF9fdi5fX3N0b3JhZ2UuX19nZXRfcnJlZihpbl9wbGFjZTxf
SW5kZXg+KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAu
Li4gX1R5cGVzPgotY29uc3RleHByIF9UeXBlJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+JiBfX3Yp
ewotICAgIHJldHVybiBnZXQ8X190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU+
KF9fdik7CisgICAgcmV0dXJuIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8X1R5cGU+KF9fdik7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4
cHIgX1R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+JiYgX192KXsKLSAgICByZXR1cm4gZ2V0
PF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPihzdGQ6Om1vdmUoX192KSk7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25z
dGV4cHIgX1R5cGUgY29uc3QmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdil7Ci0g
ICAgcmV0dXJuIGdldDxfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZT4oX192
KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNv
bnN0ZXhwciBjb25zdCBfVHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmJiBfX3Yp
ewotICAgIHJldHVybiBnZXQ8X190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU+
KHN0ZDo6bW92ZShfX3YpKTsKLX0KLQotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4
LF9UeXBlcy4uLj46Ol9fdHlwZSBjb25zdCYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYg
X192KXsKLSAgICByZXR1cm4gKigKLSAgICAgICAgKF9JbmRleCE9X192LmluZGV4KCkpCi0gICAg
ICAgICAgICA/IHN0ZDo6YWRkcmVzc29mKF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPHR5cGVu
YW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3QmPigiQmFk
IFZhcmlhbnQgaW5kZXggaW4gZ2V0IikpCi0gICAgICAgICAgICA6IHN0ZDo6YWRkcmVzc29mKF9f
dmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KF9fdikpCi0gICAgKTsKLX0K
LQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3Rl
eHByIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmIGdl
dChWYXJpYW50PF9UeXBlcy4uLj4mIF9fdil7Ci0gICAgcmV0dXJuICooCi0gICAgICAgIChfSW5k
ZXghPV9fdi5pbmRleCgpKQotICAgICAgICAgICAgPyBzdGQ6OmFkZHJlc3NvZihfX3Rocm93X2Jh
ZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4u
Pjo6X190eXBlJj4oIkJhZCBWYXJpYW50IGluZGV4IGluIGdldCIpKQotICAgICAgICAgICAgOiBz
dGQ6OmFkZHJlc3NvZihfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldChf
X3YpKQotICAgICk7Ci19Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4u
IF9UeXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVz
Li4uPjo6X190eXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYmIF9fdil7Ci0gICAgcmV0dXJu
IF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KAotICAgICAgICAoKChf
SW5kZXghPV9fdi5pbmRleCgpKSA/IF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPGludD4oIkJh
ZCBWYXJpYW50IGluZGV4IGluIGdldCIpIDogMCksIHN0ZDo6bW92ZShfX3YpKQotICAgICk7Ci19
Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0
ZXhwciBjb25zdCB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190
eXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYmIF9fdil7Ci0gICAgcmV0dXJuIF9f
dmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KAotICAgICAgICAoKChfSW5k
ZXghPV9fdi5pbmRleCgpKSA/IF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPGludD4oIkJhZCBW
YXJpYW50IGluZGV4IGluIGdldCIpIDogMCksIHN0ZDo6bW92ZShfX3YpKQotICAgICk7Citjb25z
dGV4cHIgX1R5cGUmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mIF9fdikKK3sKKyAgICByZXR1cm4g
c3RkOjpnZXQ8X1R5cGU+KF9fdik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PF9UeXBlPiBnZXRf
aWYoVmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAgIHJldHVybiAoX190eXBlX2luZGV4PF9U
eXBlLF9UeXBlcy4uLj46Ol9fdmFsdWUhPV9fdi5pbmRleCgpKT9udWxscHRyOnN0ZDo6YWRkcmVz
c29mKGdldDxfVHlwZT4oX192KSk7Citjb25zdGV4cHIgX1R5cGUmJiBnZXQoVmFyaWFudDxfVHlw
ZXMuLi4+JiYgX192KQoreworICAgIHJldHVybiBzdGQ6OmdldDxfVHlwZT4oV1RGTW92ZShfX3Yp
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNv
bnN0ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8X1R5cGUgY29uc3Q+IGdldF9pZihWYXJpYW50PF9U
eXBlcy4uLj4gY29uc3QmIF9fdil7Ci0gICAgcmV0dXJuIChfX3R5cGVfaW5kZXg8X1R5cGUsX1R5
cGVzLi4uPjo6X192YWx1ZSE9X192LmluZGV4KCkpP251bGxwdHI6c3RkOjphZGRyZXNzb2YoZ2V0
PF9UeXBlPihfX3YpKTsKLX0KLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAu
Li4gX1R5cGVzPgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDx0eXBlbmFtZSBfX2luZGV4
ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlPiBnZXRfaWYoVmFyaWFudDxfVHlwZXMu
Li4+JiBfX3YpewotICAgIHJldHVybiAoKF9JbmRleCE9X192LmluZGV4KCkpP251bGxwdHI6Ci0g
ICAgICAgIHN0ZDo6YWRkcmVzc29mKF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4u
Pjo6Z2V0KF9fdikpKTsKLX0KLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAu
Li4gX1R5cGVzPgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDx0eXBlbmFtZSBfX2luZGV4
ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0PiBnZXRfaWYoCi0gICAgVmFy
aWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpewotICAgIHJldHVybiAoKF9JbmRleCE9X192Lmlu
ZGV4KCkpP251bGxwdHI6Ci0gICAgICAgIHN0ZDo6YWRkcmVzc29mKF9fdmFyaWFudF9hY2Nlc3Nv
cjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KF9fdikpKTsKK2NvbnN0ZXhwciBfVHlwZSBjb25zdCYg
Z2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX192KQoreworICAgIHJldHVybiBzdGQ6Omdl
dDxfVHlwZT4oX192KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4u
IF9UeXBlcz4KLWNvbnN0ZXhwciBib29sIGhvbGRzX2FsdGVybmF0aXZlKFZhcmlhbnQ8X1R5cGVz
Li4uPiBjb25zdCYgX192KSBfX05PRVhDRVBUewotICAgIHJldHVybiBfX3YuaW5kZXgoKT09X190
eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX192aXNpdG9yX3JldHVy
bl90eXBlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcj4KLXN0cnVjdCBfX3Zpc2l0b3Jf
cmV0dXJuX3R5cGU8X1Zpc2l0b3I+ewotICAgIHR5cGVkZWYgZGVjbHR5cGUoc3RkOjpkZWNsdmFs
PF9WaXNpdG9yJj4oKSgpKSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRv
cix0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX192aXNpdG9yX3Jl
dHVybl90eXBlPF9WaXNpdG9yLF9IZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIGRlY2x0eXBl
KHN0ZDo6ZGVjbHZhbDxfVmlzaXRvciY+KCkoc3RkOjpkZWNsdmFsPF9IZWFkJj4oKSkpIF9fdHlw
ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVHlwZXM+
Ci1zdHJ1Y3QgX192aXNpdG9yX3RhYmxlewotICAgIHR5cGVkZWYgVmFyaWFudDxfVHlwZXMuLi4+
IF9fdmFyaWFudF90eXBlOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgX192aXNpdG9yX3JldHVybl90
eXBlPF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fdHlwZSBfX3JldHVybl90eXBlOwotICAgIHR5cGVk
ZWYgX19yZXR1cm5fdHlwZSAoKl9fZnVuY190eXBlKShfVmlzaXRvciYsX192YXJpYW50X3R5cGUm
KTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotICAgIHN0YXRpYyBfX3JldHVybl90
eXBlIF9fdHJhbXBvbGluZV9mdW5jKF9WaXNpdG9yJiBfX3Zpc2l0b3IsX192YXJpYW50X3R5cGUm
IF9fdil7Ci0gICAgICAgIHJldHVybiBfX3Zpc2l0b3IoZ2V0PF9UeXBlPihfX3YpKTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgY29uc3QgX19mdW5jX3R5cGUgX190cmFtcG9saW5lW3NpemVvZi4uLihf
VHlwZXMpXTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBf
VHlwZXM+Ci1jb25zdCB0eXBlbmFtZSBfX3Zpc2l0b3JfdGFibGU8X1Zpc2l0b3IsX1R5cGVzLi4u
Pjo6X19mdW5jX3R5cGUgX192aXNpdG9yX3RhYmxlPF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fdHJh
bXBvbGluZVtzaXplb2YuLi4oX1R5cGVzKV09ewotICAgICAgICAmX190cmFtcG9saW5lX2Z1bmM8
X1R5cGVzPi4uLgotICAgIH07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1l
IC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgdHlwZW5hbWUgX192aXNpdG9yX3JldHVybl90eXBlPF9W
aXNpdG9yLF9UeXBlcy4uLj46Ol9fdHlwZQotdmlzaXQoX1Zpc2l0b3ImJiBfX3Zpc2l0b3IsVmFy
aWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAgIHJldHVybiAoX192LnZhbHVlbGVzc19ieV9leGNl
cHRpb24oKSkKLSAgICAgICAgPyBfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBf
X3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190eXBlPigiVmlzaXRp
bmcgb2YgZW1wdHkgVmFyaWFudCIpCi0gICAgICAgIDogX192aXNpdG9yX3RhYmxlPF9WaXNpdG9y
LF9UeXBlcy4uLj46Ol9fdHJhbXBvbGluZVtfX3YuaW5kZXgoKV0oX192aXNpdG9yLF9fdik7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVmFyaWFudHM+Ci1z
dHJ1Y3QgX19tdWx0aV92aXNpdG9yX3JldHVybl90eXBlewotICAgIHR5cGVkZWYgZGVjbHR5cGUo
c3RkOjpkZWNsdmFsPF9WaXNpdG9yJj4oKShnZXQ8MD4oc3RkOjpkZWNsdmFsPF9WYXJpYW50cz4o
KSkuLi4pKQotICAgIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHNpemVfdCBfVmFyaWFudEluZGV4
LHR5cGVuYW1lIF9JbmRpY2VzPgotc3RydWN0IF9fdmlzaXRfaGVscGVyOwotCi10ZW1wbGF0ZTxw
dHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9fdmlzaXRfaGVscGVyPDAsX19pbmRleF9z
ZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5
cGVuYW1lIC4uLiBfVmFyaWFudHM+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB0eXBlbmFtZSBfX211
bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCi0g
ICAgX192aXNpdChfVmlzaXRvciYgX192aXNpdG9yLF9WYXJpYW50cyYgLi4uIF9fdil7Ci0gICAg
ICAgIHJldHVybiBfX3Zpc2l0b3IoZ2V0PF9JbmRpY2VzPihfX3YpLi4uKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfQXJncz4KLXN0cnVjdCBfX2Fy
Z19zZWxlY3Rvcl90OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jl
c3Q+Ci1zdHJ1Y3QgX19hcmdfc2VsZWN0b3JfdDwwLF9IZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBl
ZGVmIF9IZWFkIF9fdHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgX190eXBlJiBfX3NlbGVj
dChfSGVhZCYgX19oZWFkLF9SZXN0JiAuLi4pewotICAgICAgICByZXR1cm4gX19oZWFkOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUg
Li4uIF9SZXN0Pgotc3RydWN0IF9fYXJnX3NlbGVjdG9yX3Q8X0luZGV4LF9IZWFkLF9SZXN0Li4u
PnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fYXJnX3NlbGVjdG9yX3Q8X0luZGV4LTEsX1Jlc3Qu
Li4+OjpfX3R5cGUgX190eXBlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgX190eXBlJiBfX3NlbGVj
dChfSGVhZCYsX1Jlc3QmIC4uLiBfX3Jlc3QpewotICAgICAgICByZXR1cm4gX19hcmdfc2VsZWN0
b3JfdDxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fc2VsZWN0KF9fcmVzdC4uLik7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci1jb25zdGV4cHIg
dHlwZW5hbWUgX19hcmdfc2VsZWN0b3JfdDxfSW5kZXgsX0FyZ3MuLi4+OjpfX3R5cGUmJiBfX2Fy
Z19zZWxlY3RvcihfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgIHJldHVybiBzdGQ6OmZvcndhcmQ8
dHlwZW5hbWUgX19hcmdfc2VsZWN0b3JfdDxfSW5kZXgsX0FyZ3MuLi4+OjpfX3R5cGU+KAotICAg
ICAgICBfX2FyZ19zZWxlY3Rvcl90PF9JbmRleCxfQXJncy4uLj46Ol9fc2VsZWN0KF9fYXJncy4u
LikpOwotfQotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHNpemVfdCBfVmFyaWFudEluZGV4
LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXIyewotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVmFyaWFudHM+Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0
b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCi0gICAgX192aXNpdChfVmlzaXRvciYgX192aXNpdG9y
LF9WYXJpYW50cyYmIC4uLiBfX3YpewotICAgICAgICByZXR1cm4gKF9fYXJnX3NlbGVjdG9yPF9W
YXJpYW50SW5kZXgtMT4oX192Li4uKS5pbmRleCgpPT1fSW5kZXgpCi0gICAgICAgICAgICA/IF9f
dmlzaXRfaGVscGVyPF9WYXJpYW50SW5kZXgtMSxfX2luZGV4X3NlcXVlbmNlPF9JbmRleCxfSW5k
aWNlcy4uLj4+OjpfX3Zpc2l0KF9fdmlzaXRvcixzdGQ6OmZvcndhcmQ8X1ZhcmlhbnRzPihfX3Yp
Li4uKQotICAgICAgICAgICAgOiBfX3Zpc2l0X2hlbHBlcjI8X0luZGV4LTEsX1ZhcmlhbnRJbmRl
eCxfSW5kaWNlcy4uLj46Ol9fdmlzaXQoX192aXNpdG9yLHN0ZDo6Zm9yd2FyZDxfVmFyaWFudHM+
KF9fdikuLi4pOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHNpemVfdCBfVmFyaWFudEluZGV4LHB0
cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXIyPC0xLF9WYXJpYW50
SW5kZXgsX0luZGljZXMuLi4+ewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVu
YW1lIC4uLiBfVmFyaWFudHM+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRp
X3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCi0gICAg
X192aXNpdChfVmlzaXRvciYsX1ZhcmlhbnRzJiYgLi4uKXsKLSAgICAgICAgcmV0dXJuIF9fdGhy
b3dfYmFkX3ZhcmlhbnRfYWNjZXNzPHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlw
ZTxfVmlzaXRvcixfVmFyaWFudHMuLi4+OjpfX3R5cGU+KCJWaXNpdGluZyBvZiBlbXB0eSBWYXJp
YW50Iik7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQ+Ci1zdHJ1Y3Qg
X192YXJpYW50X3R5cGVfY291bnQ7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1z
dHJ1Y3QgX192YXJpYW50X3R5cGVfY291bnQ8VmFyaWFudDxfVHlwZXMuLi4+PnsKLSAgICBzdGF0
aWMgY29uc3RleHByIHNpemVfdCBfX3ZhbHVlPXNpemVvZi4uLihfVHlwZXMpOwotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQ+Ci1zdHJ1Y3QgX192YXJpYW50X3R5cGVfY291bnQ8X1Zh
cmlhbnQmPnsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBfX3ZhbHVlPV9fdmFyaWFudF90
eXBlX2NvdW50PF9WYXJpYW50Pjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9W
YXJpYW50Pgotc3RydWN0IF9fdmFyaWFudF90eXBlX2NvdW50PF9WYXJpYW50IGNvbnN0Jj57Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgX192YWx1ZT1fX3ZhcmlhbnRfdHlwZV9jb3VudDxf
VmFyaWFudD46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxzaXplX3QgX1ZhcmlhbnRJbmRleCxw
dHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9fdmlzaXRfaGVscGVyPF9WYXJpYW50SW5k
ZXgsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KLSAgICBzdGF0aWMgY29uc3RleHBy
IHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFudHMu
Li4+OjpfX3R5cGUKLSAgICBfX3Zpc2l0KF9WaXNpdG9yJiBfX3Zpc2l0b3IsX1ZhcmlhbnRzJiYg
Li4uIF9fdil7Ci0gICAgICAgIHJldHVybiBfX3Zpc2l0X2hlbHBlcjI8Ci0gICAgICAgICAgICBf
X3ZhcmlhbnRfdHlwZV9jb3VudDwKLSAgICAgICAgICAgICAgICB0eXBlbmFtZSBfX2FyZ19zZWxl
Y3Rvcl90PAotICAgICAgICAgICAgICAgICAgICBfVmFyaWFudEluZGV4LTEsX1ZhcmlhbnRzLi4u
Pjo6X190eXBlPjo6X192YWx1ZS0xLAotICAgICAgICAgICAgX1ZhcmlhbnRJbmRleCxfSW5kaWNl
cy4uLj46Ol9fdmlzaXQoCi0gICAgICAgICAgICAgICAgX192aXNpdG9yLHN0ZDo6Zm9yd2FyZDxf
VmFyaWFudHMmJj4oX192KS4uLik7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zp
c2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRp
X3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCi12aXNp
dChfVmlzaXRvciYmIF9fdmlzaXRvcixfVmFyaWFudHMmJiAuLi4gX192KXsKLSAgICByZXR1cm4g
X192aXNpdF9oZWxwZXI8c2l6ZW9mLi4uKF9WYXJpYW50cyksX19pbmRleF9zZXF1ZW5jZTw+Pjo6
X192aXNpdCgKLSAgICAgICAgX192aXNpdG9yLHN0ZDo6Zm9yd2FyZDxfVmFyaWFudHM+KF9fdiku
Li4pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGJvb2wg
b3BlcmF0b3I9PShWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fbGhzLFZhcmlhbnQ8X1R5cGVz
Li4uPiBjb25zdCYgX19yaHMpewotICAgIHJldHVybiAoX19saHMuaW5kZXgoKT09X19yaHMuaW5k
ZXgoKSkgJiYKLSAgICAgICAgKChfX2xocy5pbmRleCgpPT0tMSkgfHwKLSAgICAgICAgIF9fZXF1
YWxpdHlfb3BfdGFibGU8VmFyaWFudDxfVHlwZXMuLi4+Pjo6X19lcXVhbGl0eV9jb21wYXJlW19f
bGhzLmluZGV4KCldKAotICAgICAgICAgICAgIF9fbGhzLF9fcmhzKSk7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KFZhcmlhbnQ8
X1R5cGVzLi4uPiBjb25zdCYgX19saHMsVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Jocyl7
Ci0gICAgcmV0dXJuICEoX19saHM9PV9fcmhzKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4u
IF9UeXBlcz4KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChWYXJpYW50PF9UeXBlcy4uLj4gY29u
c3QmIF9fbGhzLFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19yaHMpewotICAgIHJldHVybiAo
X19saHMuaW5kZXgoKTxfX3Jocy5pbmRleCgpKSB8fAotICAgICAgICAoKF9fbGhzLmluZGV4KCk9
PV9fcmhzLmluZGV4KCkpICYmCi0gICAgICAgICAoKF9fbGhzLmluZGV4KCkhPS0xKSAmJgotICAg
ICAgICAgIF9fbGVzc190aGFuX29wX3RhYmxlPFZhcmlhbnQ8X1R5cGVzLi4uPj46OgotICAgICAg
ICAgIF9fbGVzc190aGFuX2NvbXBhcmVbX19saHMuaW5kZXgoKV0oX19saHMsX19yaHMpKSk7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRv
cj4oVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX2xocyxWYXJpYW50PF9UeXBlcy4uLj4gY29u
c3QmIF9fcmhzKXsKLSAgICByZXR1cm4gX19yaHM8X19saHM7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KFZhcmlhbnQ8X1R5cGVz
Li4uPiBjb25zdCYgX19saHMsVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Jocyl7Ci0gICAg
cmV0dXJuICEoX19saHM8X19yaHMpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVz
PgotY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9f
bGhzLFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19yaHMpewotICAgIHJldHVybiAhKF9fbGhz
Pl9fcmhzKTsKK2NvbnN0ZXhwciBjb25zdCBfVHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4g
Y29uc3QmJiBfX3YpCit7CisgICAgcmV0dXJuIHN0ZDo6Z2V0PF9UeXBlPihXVEZNb3ZlKF9fdikp
OwogfQogCi1zdHJ1Y3QgTW9ub3N0YXRle307Ci0KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0o
TW9ub3N0YXRlIGNvbnN0JiwgTW9ub3N0YXRlIGNvbnN0JikgeyByZXR1cm4gdHJ1ZTsgfQotY29u
c3RleHByIGJvb2wgb3BlcmF0b3IhPShNb25vc3RhdGUgY29uc3QmLCBNb25vc3RhdGUgY29uc3Qm
KSB7IHJldHVybiBmYWxzZTsgfQotY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShNb25vc3RhdGUg
Y29uc3QmLCBNb25vc3RhdGUgY29uc3QmKSB7IHJldHVybiB0cnVlOyB9Ci1jb25zdGV4cHIgYm9v
bCBvcGVyYXRvcjw9KE1vbm9zdGF0ZSBjb25zdCYsIE1vbm9zdGF0ZSBjb25zdCYpIHsgcmV0dXJu
IHRydWU7IH0KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihNb25vc3RhdGUgY29uc3QmLCBNb25v
c3RhdGUgY29uc3QmKSB7IHJldHVybiBmYWxzZTsgfQotY29uc3RleHByIGJvb2wgb3BlcmF0b3I8
KE1vbm9zdGF0ZSBjb25zdCYsIE1vbm9zdGF0ZSBjb25zdCYpIHsgcmV0dXJuIGZhbHNlOyB9Ci0K
LXN0cnVjdCBfX2hhc2hfdmlzaXRvcnsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLSAg
ICBzaXplX3Qgb3BlcmF0b3IoKShfVHlwZSBjb25zdCYgX194KXsKLSAgICAgICAgcmV0dXJuIHN0
ZDo6aGFzaDxfVHlwZT4oKShfX3gpOwotICAgIH0KLX07Ci0KLS8vIC0tIFdlYktpdCBBZGRpdGlv
bnMgLS0KLQogdGVtcGxhdGU8Y2xhc3MgViwgY2xhc3MuLi4gRj4KLWF1dG8gc3dpdGNoT24oViYm
IHYsIEYmJi4uLiBmKSAtPiBkZWNsdHlwZShXVEY6OnZpc2l0KG1ha2VWaXNpdG9yKHN0ZDo6Zm9y
d2FyZDxGPihmKS4uLiksIHN0ZDo6Zm9yd2FyZDxWPih2KSkpCithdXRvIHN3aXRjaE9uKFYmJiB2
LCBGJiYuLi4gZikgLT4gZGVjbHR5cGUoc3RkOjp2aXNpdChtYWtlVmlzaXRvcihzdGQ6OmZvcndh
cmQ8Rj4oZikuLi4pLCBzdGQ6OmZvcndhcmQ8Vj4odikpKQogewotICAgIHJldHVybiBXVEY6OnZp
c2l0KG1ha2VWaXNpdG9yKHN0ZDo6Zm9yd2FyZDxGPihmKS4uLiksIHN0ZDo6Zm9yd2FyZDxWPih2
KSk7CisgICAgcmV0dXJuIHN0ZDo6dmlzaXQobWFrZVZpc2l0b3Ioc3RkOjpmb3J3YXJkPEY+KGYp
Li4uKSwgc3RkOjpmb3J3YXJkPFY+KHYpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKLW5h
bWVzcGFjZSBzdGQgewotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgaGFzaDxXVEY6Ok1vbm9zdGF0ZT57
Ci0gICAgc2l6ZV90IG9wZXJhdG9yKCkoV1RGOjpNb25vc3RhdGUpIF9fTk9FWENFUFR7Ci0gICAg
ICAgIHJldHVybiA0MjsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVz
Pgotc3RydWN0IGhhc2g8V1RGOjpWYXJpYW50PF9UeXBlcy4uLj4+ewotICAgIHNpemVfdCBvcGVy
YXRvcigpKFdURjo6VmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0ICZ2KSBfX05PRVhDRVBUIHsKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6aGFzaDxwdHJkaWZmX3Q+KCkodi5pbmRleCgpKSBeIFdURjo6dmlz
aXQoV1RGOjpfX2hhc2hfdmlzaXRvcigpLCB2KTsKLSAgICB9Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBzdGQKLQogdXNpbmcgV1RGOjpNb25vc3RhdGU7CiB1c2luZyBXVEY6OlZhcmlhbnQ7Ci0KLSNl
bmRpZiAvLyAhQ09NUElMRVIoQ0xBTkcpIHx8IFdURl9DUFBfU1REX1ZFUiA+PSAxNAotCi0jaWYg
Q09NUElMRVIoTVNWQykKLSNwcmFnbWEgd2FybmluZyhwb3ApCi0jZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDI4MzUwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzMyBAQAorMjAyMS0xMC0wNCAgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEJlZ2luIG1pZ3JhdGlvbiBmcm9t
IFdURjo6VmFyaWFudCB0byBzdGQ6OnZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMTA4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogTW9kdWxlcy9jYWNoZS9ET01DYWNoZUVuZ2luZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6aXNvbGF0ZWRSZXNwb25zZUJvZHkp
OgorICAgICAgICAoV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OmNvcHlSZXNwb25zZUJvZHkpOgor
ICAgICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5T3duZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RmV0Y2hCb2R5T3duZXI6OmxvYWRpbmdFeGNlcHRpb24gY29uc3QpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNJ
REJLZXlQYXRoVmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6aXNvbGF0ZWRDb3B5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmxvZ2dpbmdTdHJpbmcpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQlJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c291cmNlT2Jq
ZWN0U3RvcmVJZGVudGlmaWVyIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVJ
REJLZXlQYXRoKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9s
c0hvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sc0hvc3Q6OmRpc3BsYXlO
YW1lRm9yVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sc0hvc3Q6OnNob3dN
ZWRpYUNvbnRyb2xzQ29udGV4dE1lbnUpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0v
UlRDUGVlckNvbm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UlRDUGVlckNvbm5lY3Rp
b246OmFkZEljZUNhbmRpZGF0ZSk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENS
dHBUcmFuc2Zvcm0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UlRDUnRwVHJhbnNmb3JtOjppc0F0
dGFjaGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAq
IE1vZHVsZXMvbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1J0cFNlbmRlckJhY2tlbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGliV2ViUlRDUnRwU2VuZGVyQmFja2VuZDo6dmlkZW9T
b3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGliV2ViUlRDUnRwU2VuZGVyQmFja2VuZDo6aGFz
U291cmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgor
ICAgICAgICAqIE1vZHVsZXMvd2VieHIvV2ViWFJGcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJYUkZyYW1lOjpnZXRWaWV3ZXJQb3NlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lz
b2xhdGVkdHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNv
bGF0ZWRPYmplY3Q6OmludFBvaW50QXR0cmlidXRlVmFsdWUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QVhJc29sYXRlZE9iamVjdDo6b2JqZWN0QXR0cmlidXRlVmFsdWUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZE9iamVjdDo6cmVjdEF0dHJpYnV0ZVZhbHVlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6OnZlY3RvckF0dHJpYnV0ZVZh
bHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6Om9wdGlvblNl
dEF0dHJpYnV0ZVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmpl
Y3Q6OnBhaXJBdHRyaWJ1dGVWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xh
dGVkT2JqZWN0Ojp1aW50NjRBdHRyaWJ1dGVWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpBWElzb2xhdGVkT2JqZWN0Ojp1cmxBdHRyaWJ1dGVWYWx1ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpBWElzb2xhdGVkT2JqZWN0OjpwYXRoQXR0cmlidXRlVmFsdWUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZE9iamVjdDo6Y29sb3JBdHRyaWJ1dGVWYWx1ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkT2JqZWN0OjpmbG9hdEF0dHJpYnV0ZVZh
bHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6OmRvdWJsZUF0
dHJpYnV0ZVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6
OnVuc2lnbmVkQXR0cmlidXRlVmFsdWUgY29uc3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0J1
ZmZlclNvdXJjZS5oOgorICAgICAgICAoV2ViQ29yZTo6QnVmZmVyU291cmNlOjpkYXRhIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkJ1ZmZlclNvdXJjZTo6bGVuZ3RoIGNvbnN0KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZUtleVBhdGhBcnJheSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Db252
ZXJ0VW5pb24uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRXZWJHTC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9KU1ZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudDo6bWV0aG9kRGV0YWlscyBjb25zdCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5oOgorICAgICAgICAo
V2ViQ29yZTo6SlNWYWx1ZUluV3JhcHBlZE9iamVjdDo6b3BlcmF0b3IgSlNDOjpKU1ZhbHVlIGNv
bnN0KToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnN1bWVGb250V2VpZ2h0KToKKyAgICAgICAgKiBjc3MvdHlwZWRvbS9D
U1NVbnBhcnNlZFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1VucGFyc2VkVmFsdWU6
OnNlcmlhbGl6ZSBjb25zdCk6CisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjphZGRFdmVudExpc3RlbmVyRm9yQmluZGluZ3MpOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXJGb3JCaW5k
aW5ncyk6CisgICAgICAgICogZG9tL01lc3NhZ2VFdmVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpNZXNzYWdlRXZlbnQ6Om1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAqIGVkaXRpbmcvRWRp
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxs
aW5nKToKKyAgICAgICAgKiBlZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNsdXNpb25S
dWxlOjptYXRjaCBjb25zdCk6CisgICAgICAgICogaHRtbC9VUkxTZWFyY2hQYXJhbXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VVJMU2VhcmNoUGFyYW1zOjpjcmVhdGUpOgorICAgICAgICAqIGh0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJTdWJEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFRleEltYWdlU291cmNlU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFn
ZVNvdXJjZUhlbHBlcik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXM6OmNhbnZhc0NvbnRleHQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzOjpjYW52YXNFbGVtZW50IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhczo6c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXM6OmJ1aWxkT2Jq
ZWN0Rm9yQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhczo6aW5kZXhG
b3JEYXRhKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTaGFkZXJQcm9ncmFtOjpwcm9ncmFtIGNvbnN0
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvcjo6a2V5UGF0aEZyb21JREJLZXlQYXRoKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudDo6ZGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXplIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI6OmNyZWF0ZUNGRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6
OmhpbnRNZW1vcnlOb3ROZWVkZWRTb29uIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9nZW5l
cmljL0tleWVkRGVjb2RlckdlbmVyaWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZWREZWNv
ZGVyR2VuZXJpYzo6RGljdGlvbmFyeTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OktleWVkRGVj
b2RlckdlbmVyaWM6OmdldFBvaW50ZXJGcm9tRGljdGlvbmFyeVN0YWNrKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnJlYWxpemVOZXh0RmFsbGJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OnNhZmVDb3B5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6cGFkZGVkU2l6ZU9mVHlwZUFuZEl0ZW1JbkJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpkaXNwbGF5TGlzdEl0ZW1UeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9t
b2NrL01vY2tNZWRpYURldmljZS5oOgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlhRGV2aWNl
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmltYWdlT3JNZWRpYUZpbGVzQ291bnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFFbGVtZW50OjpsZW5ndGhJbkJ5dGVzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhRWxlbWVudDo6aXNvbGF0ZWRDb3B5IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmREYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1EYXRhOjpmbGF0dGVuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1EYXRhOjpwcmVwYXJlRm9yVXBsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjph
c0Jsb2JVUkwgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhRWxlbWVudDo6b3BlcmF0b3I9PSBjb25zdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9Gb3JtRGF0YVN0cmVhbUNGTmV0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmFkdmFuY2VDdXJyZW50U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEhUVFBCb2R5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6ZW5hYmxlU1NMRm9ySG9zdCk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxGb3JtRGF0YVN0cmVhbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDdXJsRm9ybURhdGFTdHJlYW06OnJlYWQpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybFNTTFZlcmlmaWVyOjpDdXJsU1NMVmVyaWZpZXIpOgorICAgICAgICAqIHN0eWxl
L1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OnJl
c29sdmVGb3JGb250UmF3KToKKwogMjAyMS0xMC0wNCAgS2F0ZSBDaGVuZXkgIDxrYXRoZXJpbmVf
Y2hlbmV5QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIG1hY2NhdGFseXN0IGJ1aWxk
IGZpeC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGVFbmdpbmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvRE9NQ2FjaGVF
bmdpbmUuY3BwCShyZXZpc2lvbiAyODM1MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Nh
Y2hlL0RPTUNhY2hlRW5naW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDIyICsxMjksMjIg
QEAgYm9vbCBxdWVyeUNhY2hlTWF0Y2goY29uc3QgUmVzb3VyY2VSZXF1ZQogCiBSZXNwb25zZUJv
ZHkgaXNvbGF0ZWRSZXNwb25zZUJvZHkoY29uc3QgUmVzcG9uc2VCb2R5JiBib2R5KQogewotICAg
IHJldHVybiBXVEY6OnN3aXRjaE9uKGJvZHksIFtdKGNvbnN0IFJlZjxGb3JtRGF0YT4mIGZvcm1E
YXRhKSB7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oYm9keSwgW10oY29uc3QgUmVmPEZvcm1E
YXRhPiYgZm9ybURhdGEpIC0+IFJlc3BvbnNlQm9keSB7CiAgICAgICAgIHJldHVybiBmb3JtRGF0
YS0+aXNvbGF0ZWRDb3B5KCk7Ci0gICAgfSwgW10oY29uc3QgUmVmPFNoYXJlZEJ1ZmZlcj4mIGJ1
ZmZlcikgeworICAgIH0sIFtdKGNvbnN0IFJlZjxTaGFyZWRCdWZmZXI+JiBidWZmZXIpIC0+IFJl
c3BvbnNlQm9keSB7CiAgICAgICAgIHJldHVybiBidWZmZXItPmNvcHkoKTsKLSAgICB9LCBbXShj
b25zdCBzdGQ6Om51bGxwdHJfdCYpIHsKKyAgICB9LCBbXShjb25zdCBzdGQ6Om51bGxwdHJfdCYp
IC0+IFJlc3BvbnNlQm9keSB7CiAgICAgICAgIHJldHVybiBET01DYWNoZUVuZ2luZTo6UmVzcG9u
c2VCb2R5IHsgfTsKICAgICB9KTsKIH0KIAogUmVzcG9uc2VCb2R5IGNvcHlSZXNwb25zZUJvZHko
Y29uc3QgUmVzcG9uc2VCb2R5JiBib2R5KQogewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGJv
ZHksIFtdKGNvbnN0IFJlZjxGb3JtRGF0YT4mIGZvcm1EYXRhKSB7CisgICAgcmV0dXJuIFdURjo6
c3dpdGNoT24oYm9keSwgW10oY29uc3QgUmVmPEZvcm1EYXRhPiYgZm9ybURhdGEpIC0+IFJlc3Bv
bnNlQm9keSB7CiAgICAgICAgIHJldHVybiBmb3JtRGF0YS5jb3B5UmVmKCk7Ci0gICAgfSwgW10o
Y29uc3QgUmVmPFNoYXJlZEJ1ZmZlcj4mIGJ1ZmZlcikgeworICAgIH0sIFtdKGNvbnN0IFJlZjxT
aGFyZWRCdWZmZXI+JiBidWZmZXIpIC0+IFJlc3BvbnNlQm9keSB7CiAgICAgICAgIHJldHVybiBi
dWZmZXIuY29weVJlZigpOwotICAgIH0sIFtdKGNvbnN0IHN0ZDo6bnVsbHB0cl90JikgeworICAg
IH0sIFtdKGNvbnN0IHN0ZDo6bnVsbHB0cl90JikgLT4gUmVzcG9uc2VCb2R5IHsKICAgICAgICAg
cmV0dXJuIERPTUNhY2hlRW5naW5lOjpSZXNwb25zZUJvZHkgeyB9OwogICAgIH0pOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlPd25lci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHlPd25lci5jcHAJ
KHJldmlzaW9uIDI4MzUwMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hC
b2R5T3duZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODgsOSArMzg4LDkgQEAgUmVzb3VyY2VF
cnJvciBGZXRjaEJvZHlPd25lcjo6bG9hZGluZ0VycgogCiBzdGQ6Om9wdGlvbmFsPEV4Y2VwdGlv
bj4gRmV0Y2hCb2R5T3duZXI6OmxvYWRpbmdFeGNlcHRpb24oKSBjb25zdAogewotICAgIHJldHVy
biBXVEY6OnN3aXRjaE9uKG1fbG9hZGluZ0Vycm9yLCBbXShjb25zdCBSZXNvdXJjZUVycm9yJiBl
cnJvcikgeworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fbG9hZGluZ0Vycm9yLCBbXShjb25z
dCBSZXNvdXJjZUVycm9yJiBlcnJvcikgLT4gc3RkOjpvcHRpb25hbDxFeGNlcHRpb24+IHsKICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciwgZXJyb3Iuc2FuaXRpemVkRGVzY3Jp
cHRpb24oKSB9OwotICAgIH0sIFtdKGNvbnN0IEV4Y2VwdGlvbiYgZXhjZXB0aW9uKSB7CisgICAg
fSwgW10oY29uc3QgRXhjZXB0aW9uJiBleGNlcHRpb24pIC0+IHN0ZDo6b3B0aW9uYWw8RXhjZXB0
aW9uPiB7CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBleGNlcHRpb24gfTsKICAgICB9LCBb
XShhdXRvJiYpIC0+IHN0ZDo6b3B0aW9uYWw8RXhjZXB0aW9uPiB7CiAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXlQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJLZXlQYXRoLmNwcAkocmV2aXNpb24gMjgzNTAzKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMyw3ICsy
MDMsNyBAQCBib29sIGlzSURCS2V5UGF0aFZhbGlkKGNvbnN0IElEQktleVBhdGgmCiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSk7Ci0gICAgcmV0dXJuIFdURjo6dmlzaXQo
dmlzaXRvciwga2V5UGF0aCk7CisgICAgcmV0dXJuIHN0ZDo6dmlzaXQodmlzaXRvciwga2V5UGF0
aCk7CiB9CiAKIElEQktleVBhdGggaXNvbGF0ZWRDb3B5KGNvbnN0IElEQktleVBhdGgmIGtleVBh
dGgpCkBAIC0yMTgsNyArMjE4LDcgQEAgSURCS2V5UGF0aCBpc29sYXRlZENvcHkoY29uc3QgSURC
S2V5UGF0aAogICAgICAgICByZXR1cm4gdmVjdG9yQ29weTsKICAgICB9KTsKIAotICAgIHJldHVy
biBXVEY6OnZpc2l0KHZpc2l0b3IsIGtleVBhdGgpOworICAgIHJldHVybiBzdGQ6OnZpc2l0KHZp
c2l0b3IsIGtleVBhdGgpOwogfQogCiAjaWYgIUxPR19ESVNBQkxFRApAQCAtMjQyLDcgKzI0Miw3
IEBAIFN0cmluZyBsb2dnaW5nU3RyaW5nKGNvbnN0IElEQktleVBhdGgmIHAKICAgICAgICAgcmV0
dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKICAgICB9KTsKIAotICAgIHJldHVybiBXVEY6OnZpc2l0
KHZpc2l0b3IsIHBhdGgpOworICAgIHJldHVybiBzdGQ6OnZpc2l0KHZpc2l0b3IsIHBhdGgpOwog
fQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJl
cXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlJlcXVlc3QuY3BwCShyZXZpc2lvbiAyODM1MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDkgKzIw
Niw5IEBAIHVpbnQ2NF90IElEQlJlcXVlc3Q6OnNvdXJjZU9iamVjdFN0b3JlSWQKICAgICAgICAg
cmV0dXJuIDA7CiAKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3NvdXJjZS52YWx1ZSgpLAot
ICAgICAgICBbXSAoY29uc3QgUmVmUHRyPElEQk9iamVjdFN0b3JlPiYgb2JqZWN0U3RvcmUpIHsg
cmV0dXJuIG9iamVjdFN0b3JlLT5pbmZvKCkuaWRlbnRpZmllcigpOyB9LAotICAgICAgICBbXSAo
Y29uc3QgUmVmUHRyPElEQkluZGV4PiYgaW5kZXgpIHsgcmV0dXJuIGluZGV4LT5pbmZvKCkub2Jq
ZWN0U3RvcmVJZGVudGlmaWVyKCk7IH0sCi0gICAgICAgIFtdIChjb25zdCBSZWZQdHI8SURCQ3Vy
c29yPiYpIHsgcmV0dXJuIDA7IH0KKyAgICAgICAgW10gKGNvbnN0IFJlZlB0cjxJREJPYmplY3RT
dG9yZT4mIG9iamVjdFN0b3JlKSAtPiB1aW50NjRfdCB7IHJldHVybiBvYmplY3RTdG9yZS0+aW5m
bygpLmlkZW50aWZpZXIoKTsgfSwKKyAgICAgICAgW10gKGNvbnN0IFJlZlB0cjxJREJJbmRleD4m
IGluZGV4KSAtPiB1aW50NjRfdCB7IHJldHVybiBpbmRleC0+aW5mbygpLm9iamVjdFN0b3JlSWRl
bnRpZmllcigpOyB9LAorICAgICAgICBbXSAoY29uc3QgUmVmUHRyPElEQkN1cnNvcj4mKSAtPiB1
aW50NjRfdCB7IHJldHVybiAwOyB9CiAgICAgKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0
aW9uLmNwcAkocmV2aXNpb24gMjgzNTAzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3
ICs1Myw3IEBAIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHNlcmlhbGl6ZUlEQktleVBhdGgKICAgICAg
ICAgICAgICAgICBlbmNvZGVyLmVuY29kZVN0cmluZygic3RyaW5nIiwgc3RyaW5nKTsKICAgICAg
ICAgICAgIH0pOwogICAgICAgICB9KTsKLSAgICAgICAgV1RGOjp2aXNpdCh2aXNpdG9yLCBrZXlQ
YXRoLnZhbHVlKCkpOworICAgICAgICBzdGQ6OnZpc2l0KHZpc2l0b3IsIGtleVBhdGgudmFsdWUo
KSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGVuY29kZXItPmVuY29kZUVudW0oInR5cGUiLCBLZXlQ
YXRoVHlwZTo6TnVsbCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250
cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcAkocmV2aXNpb24gMjgz
NTAzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJv
bHNIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDcgKzE2Niw3IEBAIFN0cmluZyBNZWRp
YUNvbnRyb2xzSG9zdDo6ZGlzcGxheU5hbWVGb3IKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJl
dHVybiBlbXB0eVN0cmluZygpOwogCi0gICAgcmV0dXJuIFdURjo6dmlzaXQoW3BhZ2VdIChhdXRv
JiB0cmFjaykgeworICAgIHJldHVybiBzdGQ6OnZpc2l0KFtwYWdlXSAoYXV0byYgdHJhY2spIHsK
ICAgICAgICAgcmV0dXJuIHBhZ2UtPmdyb3VwKCkuZW5zdXJlQ2FwdGlvblByZWZlcmVuY2VzKCku
ZGlzcGxheU5hbWVGb3JUcmFjayh0cmFjay5nZXQoKSk7CiAgICAgfSwgdHJhY2sudmFsdWUoKSk7
CiB9CkBAIC02ODEsMTMgKzY4MSwxMyBAQCBib29sIE1lZGlhQ29udHJvbHNIb3N0OjpzaG93TWVk
aWFDb250cm9sCiAjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQogICAg
ICAgICAgICAgWyZdIChSZWZQdHI8QXVkaW9UcmFjaz4mIHNlbGVjdGVkQXVkaW9UcmFjaykgewog
ICAgICAgICAgICAgICAgIGZvciAoYXV0byYgdHJhY2sgOiBpZE1hcC52YWx1ZXMoKSkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoYXV0byogYXVkaW9UcmFjayA9IFdURjo6Z2V0X2lmPFJlZlB0
cjxBdWRpb1RyYWNrPj4odHJhY2spKQorICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byogYXVk
aW9UcmFjayA9IHN0ZDo6Z2V0X2lmPFJlZlB0cjxBdWRpb1RyYWNrPj4oJnRyYWNrKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICgqYXVkaW9UcmFjayktPnNldEVuYWJsZWQoKmF1ZGlvVHJhY2sg
PT0gc2VsZWN0ZWRBdWRpb1RyYWNrKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
LAogICAgICAgICAgICAgWyZdIChSZWZQdHI8VGV4dFRyYWNrPiYgc2VsZWN0ZWRUZXh0VHJhY2sp
IHsKICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHRyYWNrIDogaWRNYXAudmFsdWVzKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHRleHRUcmFjayA9IFdURjo6Z2V0X2lmPFJl
ZlB0cjxUZXh0VHJhY2s+Pih0cmFjaykpCisgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiB0
ZXh0VHJhY2sgPSBzdGQ6OmdldF9pZjxSZWZQdHI8VGV4dFRyYWNrPj4oJnRyYWNrKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICgqdGV4dFRyYWNrKS0+c2V0TW9kZShUZXh0VHJhY2s6Ok1vZGU6
OkRpc2FibGVkKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbWVkaWFFbGVt
ZW50LnNldFNlbGVjdGVkVGV4dFRyYWNrKHNlbGVjdGVkVGV4dFRyYWNrLmdldCgpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVl
ckNvbm5lY3Rpb24uY3BwCShyZXZpc2lvbiAyODM1MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzMxLDcgKzMzMSw3IEBAIHZvaWQgUlRDUGVlckNvbm5lY3Rpb246OmFkZEljZUNhbmRpZGF0ZSgK
ICAgICBzdGQ6Om9wdGlvbmFsPEV4Y2VwdGlvbj4gZXhjZXB0aW9uOwogICAgIFJlZlB0cjxSVENJ
Y2VDYW5kaWRhdGU+IGNhbmRpZGF0ZTsKICAgICBpZiAocnRjQ2FuZGlkYXRlKSB7Ci0gICAgICAg
IGNhbmRpZGF0ZSA9IHN3aXRjaE9uKCpydGNDYW5kaWRhdGUsIFsmZXhjZXB0aW9uXShSVENJY2VD
YW5kaWRhdGVJbml0JiBpbml0KSAtPiBSZWZQdHI8UlRDSWNlQ2FuZGlkYXRlPiB7CisgICAgICAg
IGNhbmRpZGF0ZSA9IFdURjo6c3dpdGNoT24oKnJ0Y0NhbmRpZGF0ZSwgWyZleGNlcHRpb25dKFJU
Q0ljZUNhbmRpZGF0ZUluaXQmIGluaXQpIC0+IFJlZlB0cjxSVENJY2VDYW5kaWRhdGU+IHsKICAg
ICAgICAgICAgIGlmIChpbml0LmNhbmRpZGF0ZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vUlRDUnRwVHJhbnNmb3JtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1JUQ1J0cFRyYW5zZm9ybS5jcHAJKHJldmlzaW9uIDI4MzUwMykKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRwVHJhbnNmb3JtLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBSVENSdHBUcmFuc2Zvcm06On5SVENSdHBU
cmFuc2Zvcm0oKQogCiBib29sIFJUQ1J0cFRyYW5zZm9ybTo6aXNBdHRhY2hlZCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIHN3aXRjaE9uKG1fdHJhbnNmb3JtLCBbJl0oY29uc3QgUmVmUHRyPFJUQ1J0
cFNGcmFtZVRyYW5zZm9ybT4mIHNmcmFtZVRyYW5zZm9ybSkgeworICAgIHJldHVybiBXVEY6OnN3
aXRjaE9uKG1fdHJhbnNmb3JtLCBbJl0oY29uc3QgUmVmUHRyPFJUQ1J0cFNGcmFtZVRyYW5zZm9y
bT4mIHNmcmFtZVRyYW5zZm9ybSkgewogICAgICAgICByZXR1cm4gc2ZyYW1lVHJhbnNmb3JtLT5p
c0F0dGFjaGVkKCk7CiAgICAgfSwgWyZdKGNvbnN0IFJlZlB0cjxSVENSdHBTY3JpcHRUcmFuc2Zv
cm0+JiBzY3JpcHRUcmFuc2Zvcm0pIHsKICAgICAgICAgcmV0dXJuIHNjcmlwdFRyYW5zZm9ybS0+
aXNBdHRhY2hlZCgpOwpAQCAtMTMxLDE0ICsxMzEsMTQgQEAgdm9pZCBSVENSdHBUcmFuc2Zvcm06
OmRldGFjaEZyb21TZW5kZXIoUgogCiBib29sIG9wZXJhdG9yPT0oY29uc3QgUlRDUnRwVHJhbnNm
b3JtJiBhLCBjb25zdCBSVENSdHBUcmFuc2Zvcm0mIGIpCiB7Ci0gICAgcmV0dXJuIHN3aXRjaE9u
KGEubV90cmFuc2Zvcm0sIFsmXShjb25zdCBSZWZQdHI8UlRDUnRwU0ZyYW1lVHJhbnNmb3JtPiYg
c2ZyYW1lVHJhbnNmb3JtQSkgewotICAgICAgICByZXR1cm4gc3dpdGNoT24oYi5tX3RyYW5zZm9y
bSwgWyZdKGNvbnN0IFJlZlB0cjxSVENSdHBTRnJhbWVUcmFuc2Zvcm0+JiBzZnJhbWVUcmFuc2Zv
cm1CKSB7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oYS5tX3RyYW5zZm9ybSwgWyZdKGNvbnN0
IFJlZlB0cjxSVENSdHBTRnJhbWVUcmFuc2Zvcm0+JiBzZnJhbWVUcmFuc2Zvcm1BKSB7CisgICAg
ICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGIubV90cmFuc2Zvcm0sIFsmXShjb25zdCBSZWZQdHI8
UlRDUnRwU0ZyYW1lVHJhbnNmb3JtPiYgc2ZyYW1lVHJhbnNmb3JtQikgewogICAgICAgICAgICAg
cmV0dXJuIHNmcmFtZVRyYW5zZm9ybUEuZ2V0KCkgPT0gc2ZyYW1lVHJhbnNmb3JtQi5nZXQoKTsK
ICAgICAgICAgfSwgWyZdKGNvbnN0IFJlZlB0cjxSVENSdHBTY3JpcHRUcmFuc2Zvcm0+Jikgewog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9KTsKICAgICB9LCBbJl0oY29uc3Qg
UmVmUHRyPFJUQ1J0cFNjcmlwdFRyYW5zZm9ybT4mIHNjcmlwdFRyYW5zZm9ybUEpIHsKLSAgICAg
ICAgcmV0dXJuIHN3aXRjaE9uKGIubV90cmFuc2Zvcm0sIFsmXShjb25zdCBSZWZQdHI8UlRDUnRw
U0ZyYW1lVHJhbnNmb3JtPiYpIHsKKyAgICAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oYi5tX3Ry
YW5zZm9ybSwgWyZdKGNvbnN0IFJlZlB0cjxSVENSdHBTRnJhbWVUcmFuc2Zvcm0+JikgewogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9LCBbJl0oY29uc3QgUmVmUHRyPFJUQ1J0
cFNjcmlwdFRyYW5zZm9ybT4mIHNjcmlwdFRyYW5zZm9ybUIpIHsKICAgICAgICAgICAgIHJldHVy
biBzY3JpcHRUcmFuc2Zvcm1BLmdldCgpID09IHNjcmlwdFRyYW5zZm9ybUIuZ2V0KCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENS
dHBTZW5kZXJCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENSdHBTZW5kZXJCYWNrZW5kLmNwcAkocmV2
aXNpb24gMjgzNTAzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9saWJ3
ZWJydGMvTGliV2ViUlRDUnRwU2VuZGVyQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5
LDE3ICs1OSw2IEBAIExpYldlYlJUQ1J0cFNlbmRlckJhY2tlbmQ6On5MaWJXZWJSVENSdHAKICAg
ICBzdG9wU291cmNlKCk7CiB9CiAKLXN0YXRpYyBib29sIG9wZXJhdG9yPT0oY29uc3QgTGliV2Vi
UlRDUnRwU2VuZGVyQmFja2VuZDo6U291cmNlJiBhLCBjb25zdCBMaWJXZWJSVENSdHBTZW5kZXJC
YWNrZW5kOjpTb3VyY2UmIGIpCi17Ci0gICAgcmV0dXJuIHN3aXRjaE9uKGEsIFsmYl0oY29uc3Qg
UmVmPFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZT4mIHNvdXJjZSkgewotICAgICAgICByZXR1
cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNl
Pj4oYikgJiYgc291cmNlLnB0cigpID09IFdURjo6Z2V0PFJlZjxSZWFsdGltZU91dGdvaW5nQXVk
aW9Tb3VyY2U+PihiKS5wdHIoKTsKLSAgICB9LCBbJmJdKGNvbnN0IFJlZjxSZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2U+JiBzb3VyY2UpIHsKLSAgICAgICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8UmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZT4+KGIpICYmIHNvdXJjZS5w
dHIoKSA9PSBXVEY6OmdldDxSZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlPj4oYikucHRy
KCk7Ci0gICAgfSwgWyZiXShzdGQ6Om51bGxwdHJfdCkgewotICAgICAgICByZXR1cm4gV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxzdGQ6Om51bGxwdHJfdD4oYik7Ci0gICAgfSk7Ci19Ci0KIHZvaWQg
TGliV2ViUlRDUnRwU2VuZGVyQmFja2VuZDo6c3RhcnRTb3VyY2UoKQogewogICAgIC8vIFdlIGFz
eW5jaHJvbm91c2x5IHN0YXJ0IHRoZSBzb3VyY2VzIHRvIGd1YXJhbnRlZSBtZWRpYSBnb2VzIHRo
cm91Z2ggdGhlIHRyYW5zZm9ybSBpZiBhIHRyYW5zZm9ybSBpcyBzZXQgd2hlbiBjcmVhdGluZyB0
aGUgdHJhY2suCkBAIC0xODQsNyArMTczLDcgQEAgdm9pZCBMaWJXZWJSVENSdHBTZW5kZXJCYWNr
ZW5kOjpzZXRNZWRpYQogCiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2UqIExpYldlYlJUQ1J0
cFNlbmRlckJhY2tlbmQ6OnZpZGVvU291cmNlKCkKIHsKLSAgICByZXR1cm4gc3dpdGNoT24obV9z
b3VyY2UsCisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9zb3VyY2UsCiAgICAgICAgIFtdKFJl
ZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2U+JiBzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5w
dHIoKTsgfSwKICAgICAgICAgW10oY29uc3QgYXV0byYpIC0+IFJlYWx0aW1lT3V0Z29pbmdWaWRl
b1NvdXJjZSogeyByZXR1cm4gbnVsbHB0cjsgfQogICAgICk7CkBAIC0xOTIsNyArMTgxLDcgQEAg
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlKiBMaWJXZWJSVENSdAogCiBib29sIExpYldlYlJU
Q1J0cFNlbmRlckJhY2tlbmQ6Omhhc1NvdXJjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN3aXRj
aE9uKG1fc291cmNlLAorICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fc291cmNlLAogICAgICAg
ICBbXShjb25zdCBzdGQ6Om51bGxwdHJfdCYpIHsgcmV0dXJuIGZhbHNlOyB9LAogICAgICAgICBb
XShjb25zdCBhdXRvJikgeyByZXR1cm4gdHJ1ZTsgfQogICAgICk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJGcmFtZS5jcHAJKHJldmlzaW9uIDI4MzUwMykKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJGcmFtZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE4NCw3ICsxODQsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8V2ViWFJWaWV3ZXJQb3Nl
Pj4gV2ViCiAgICAgICAgIGF1dG8gdHJhbnNmb3JtID0gV2ViWFJSaWdpZFRyYW5zZm9ybTo6Y3Jl
YXRlKHBvc2UtPnRyYW5zZm9ybSgpLnJhd1RyYW5zZm9ybSgpICogb2Zmc2V0KTsKIAogICAgICAg
ICAvLyBTZXQgcHJvamVjdGlvbiBtYXRyaXggZm9yIGVhY2ggdmlldwotICAgICAgICBzdGQ6OmFy
cmF5PGZsb2F0LCAxNj4gcHJvamVjdGlvbiA9IHN3aXRjaE9uKGZyYW1lRGF0YS52aWV3c1tpbmRl
eF0ucHJvamVjdGlvbiwgWyZdKGNvbnN0IFBsYXRmb3JtWFI6OkRldmljZTo6RnJhbWVEYXRhOjpG
b3YmIGZvdikgeworICAgICAgICBzdGQ6OmFycmF5PGZsb2F0LCAxNj4gcHJvamVjdGlvbiA9IFdU
Rjo6c3dpdGNoT24oZnJhbWVEYXRhLnZpZXdzW2luZGV4XS5wcm9qZWN0aW9uLCBbJl0oY29uc3Qg
UGxhdGZvcm1YUjo6RGV2aWNlOjpGcmFtZURhdGE6OkZvdiYgZm92KSB7CiAgICAgICAgICAgICBk
b3VibGUgbmVhciA9IG1fc2Vzc2lvbi0+cmVuZGVyU3RhdGUoKS5kZXB0aE5lYXIoKTsKICAgICAg
ICAgICAgIGRvdWJsZSBmYXIgPSBtX3Nlc3Npb24tPnJlbmRlclN0YXRlKCkuZGVwdGhGYXIoKTsK
ICAgICAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6ZnJvbVByb2plY3Rpb24o
Zm92LnVwLCBmb3YuZG93biwgZm92LmxlZnQsIGZvdi5yaWdodCwgbmVhciwgZmFyKS50b0NvbHVt
bk1ham9yRmxvYXRBcnJheSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9X
ZWJYUldlYkdMTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2VieHIvV2ViWFJXZWJHTExheWVyLmNwcAkocmV2aXNpb24gMjgzNTAzKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUldlYkdMTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzMsNyArMjczLDcgQEAgSFRNTENhbnZhc0VsZW1lbnQqIFdlYlhSV2ViR0xMYXllcjo6Y2Fu
dgogICAgICAgICBhdXRvIGNhbnZhcyA9IGJhc2VDb250ZXh0LT5jYW52YXMoKTsKICAgICAgICAg
cmV0dXJuIFdURjo6c3dpdGNoT24oY2FudmFzLCBbXShjb25zdCBSZWZQdHI8SFRNTENhbnZhc0Vs
ZW1lbnQ+JiBjYW52YXMpIHsKICAgICAgICAgICAgIHJldHVybiBjYW52YXMuZ2V0KCk7Ci0gICAg
ICAgIH0sIFtdKGNvbnN0IFJlZlB0cjxPZmZzY3JlZW5DYW52YXM+KSB7CisgICAgICAgIH0sIFtd
KGNvbnN0IFJlZlB0cjxPZmZzY3JlZW5DYW52YXM+KSAtPiBIVE1MQ2FudmFzRWxlbWVudCogewog
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCJiYXNlTGF5ZXIgb2YgYSBXZWJYUldlYkdM
TGF5ZXIgbXVzdCBiZSBhbiBIVE1MQ2FudmFzRWxlbWVudCIpOwogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgIH0pOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAJ
KHJldmlzaW9uIDI4MzUwMykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0
ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03ODEsNyArNzgx
LDcgQEAgSW50UG9pbnQgQVhJc29sYXRlZE9iamVjdDo6aW50UG9pbnRBdHRyaQogewogICAgIGF1
dG8gdmFsdWUgPSBtX3Byb3BlcnR5TWFwLmdldChwcm9wZXJ0eU5hbWUpOwogICAgIHJldHVybiBX
VEY6OnN3aXRjaE9uKHZhbHVlLAotICAgICAgICBbXSAoSW50UG9pbnQmIHR5cGVkVmFsdWUpIHsg
cmV0dXJuIHR5cGVkVmFsdWU7IH0sCisgICAgICAgIFtdIChJbnRQb2ludCYgdHlwZWRWYWx1ZSkg
LT4gSW50UG9pbnQgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKICAgICAgICAgW10gKGF1dG8mKSB7
IHJldHVybiBJbnRQb2ludCgpOyB9CiAgICAgKTsKIH0KQEAgLTc5MCw3ICs3OTAsNyBAQCBBWENv
cmVPYmplY3QqIEFYSXNvbGF0ZWRPYmplY3Q6Om9iamVjdEF0CiB7CiAgICAgYXV0byB2YWx1ZSA9
IG1fcHJvcGVydHlNYXAuZ2V0KHByb3BlcnR5TmFtZSk7CiAgICAgQVhJRCBub2RlSUQgPSBXVEY6
OnN3aXRjaE9uKHZhbHVlLAotICAgICAgICBbXSAoQVhJRCYgdHlwZWRWYWx1ZSkgeyByZXR1cm4g
dHlwZWRWYWx1ZTsgfSwKKyAgICAgICAgW10gKEFYSUQmIHR5cGVkVmFsdWUpIC0+IEFYSUQgeyBy
ZXR1cm4gdHlwZWRWYWx1ZTsgfSwKICAgICAgICAgW10gKGF1dG8mKSB7IHJldHVybiBJbnZhbGlk
QVhJRDsgfQogICAgICk7CiAKQEAgLTgwMiw3ICs4MDIsNyBAQCBUIEFYSXNvbGF0ZWRPYmplY3Q6
OnJlY3RBdHRyaWJ1dGVWYWx1ZShBCiB7CiAgICAgYXV0byB2YWx1ZSA9IG1fcHJvcGVydHlNYXAu
Z2V0KHByb3BlcnR5TmFtZSk7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24odmFsdWUsCi0gICAg
ICAgIFtdIChUJiB0eXBlZFZhbHVlKSB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAorICAgICAgICBb
XSAoVCYgdHlwZWRWYWx1ZSkgLT4gVCB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAogICAgICAgICBb
XSAoYXV0byYpIHsgcmV0dXJuIFQgeyB9OyB9CiAgICAgKTsKIH0KQEAgLTgxMiw3ICs4MTIsNyBA
QCBWZWN0b3I8VD4gQVhJc29sYXRlZE9iamVjdDo6dmVjdG9yQXR0cmliCiB7CiAgICAgYXV0byB2
YWx1ZSA9IG1fcHJvcGVydHlNYXAuZ2V0KHByb3BlcnR5TmFtZSk7CiAgICAgcmV0dXJuIFdURjo6
c3dpdGNoT24odmFsdWUsCi0gICAgICAgIFtdIChWZWN0b3I8VD4mIHR5cGVkVmFsdWUpIHsgcmV0
dXJuIHR5cGVkVmFsdWU7IH0sCisgICAgICAgIFtdIChWZWN0b3I8VD4mIHR5cGVkVmFsdWUpIC0+
IFZlY3RvcjxUPiB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAogICAgICAgICBbXSAoYXV0byYpIHsg
cmV0dXJuIFZlY3RvcjxUPigpOyB9CiAgICAgKTsKIH0KQEAgLTgyMiw3ICs4MjIsNyBAQCBPcHRp
b25TZXQ8VD4gQVhJc29sYXRlZE9iamVjdDo6b3B0aW9uU2V0CiB7CiAgICAgYXV0byB2YWx1ZSA9
IG1fcHJvcGVydHlNYXAuZ2V0KHByb3BlcnR5TmFtZSk7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNo
T24odmFsdWUsCi0gICAgICAgIFtdIChUJiB0eXBlZFZhbHVlKSB7IHJldHVybiB0eXBlZFZhbHVl
OyB9LAorICAgICAgICBbXSAoVCYgdHlwZWRWYWx1ZSkgLT4gT3B0aW9uU2V0PFQ+IHsgcmV0dXJu
IHR5cGVkVmFsdWU7IH0sCiAgICAgICAgIFtdIChhdXRvJikgeyByZXR1cm4gT3B0aW9uU2V0PFQ+
KCk7IH0KICAgICApOwogfQpAQCAtODMyLDcgKzgzMiw3IEBAIHN0ZDo6cGFpcjxULCBUPiBBWElz
b2xhdGVkT2JqZWN0OjpwYWlyQXQKIHsKICAgICBhdXRvIHZhbHVlID0gbV9wcm9wZXJ0eU1hcC5n
ZXQocHJvcGVydHlOYW1lKTsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbih2YWx1ZSwKLSAgICAg
ICAgW10gKHN0ZDo6cGFpcjxULCBUPiYgdHlwZWRWYWx1ZSkgeyByZXR1cm4gdHlwZWRWYWx1ZTsg
fSwKKyAgICAgICAgW10gKHN0ZDo6cGFpcjxULCBUPiYgdHlwZWRWYWx1ZSkgLT4gc3RkOjpwYWly
PFQsIFQ+IHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCiAgICAgICAgIFtdIChhdXRvJikgeyByZXR1
cm4gc3RkOjpwYWlyPFQsIFQ+KDAsIDEpOyB9CiAgICAgKTsKIH0KQEAgLTg0MSw4ICs4NDEsOCBA
QCB1aW50NjRfdCBBWElzb2xhdGVkT2JqZWN0Ojp1aW50NjRBdHRyaWJ1CiB7CiAgICAgYXV0byB2
YWx1ZSA9IG1fcHJvcGVydHlNYXAuZ2V0KHByb3BlcnR5TmFtZSk7CiAgICAgcmV0dXJuIFdURjo6
c3dpdGNoT24odmFsdWUsCi0gICAgICAgIFtdICh1aW50NjRfdCYgdHlwZWRWYWx1ZSkgeyByZXR1
cm4gdHlwZWRWYWx1ZTsgfSwKLSAgICAgICAgW10gKGF1dG8mKSB7IHJldHVybiAwOyB9CisgICAg
ICAgIFtdICh1aW50NjRfdCYgdHlwZWRWYWx1ZSkgLT4gdWludDY0X3QgeyByZXR1cm4gdHlwZWRW
YWx1ZTsgfSwKKyAgICAgICAgW10gKGF1dG8mKSAtPiB1aW50NjRfdCB7IHJldHVybiAwOyB9CiAg
ICAgKTsKIH0KIApAQCAtODUwLDcgKzg1MCw3IEBAIFVSTCBBWElzb2xhdGVkT2JqZWN0Ojp1cmxB
dHRyaWJ1dGVWYWx1ZSgKIHsKICAgICBhdXRvIHZhbHVlID0gbV9wcm9wZXJ0eU1hcC5nZXQocHJv
cGVydHlOYW1lKTsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbih2YWx1ZSwKLSAgICAgICAgW10g
KFVSTCYgdHlwZWRWYWx1ZSkgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKKyAgICAgICAgW10gKFVS
TCYgdHlwZWRWYWx1ZSkgLT4gVVJMIHsgcmV0dXJuIHR5cGVkVmFsdWU7IH0sCiAgICAgICAgIFtd
IChhdXRvJikgeyByZXR1cm4gVVJMKCk7IH0KICAgICApOwogfQpAQCAtODU5LDcgKzg1OSw3IEBA
IFBhdGggQVhJc29sYXRlZE9iamVjdDo6cGF0aEF0dHJpYnV0ZVZhbHUKIHsKICAgICBhdXRvIHZh
bHVlID0gbV9wcm9wZXJ0eU1hcC5nZXQocHJvcGVydHlOYW1lKTsKICAgICByZXR1cm4gV1RGOjpz
d2l0Y2hPbih2YWx1ZSwKLSAgICAgICAgW10gKFBhdGgmIHR5cGVkVmFsdWUpIHsgcmV0dXJuIHR5
cGVkVmFsdWU7IH0sCisgICAgICAgIFtdIChQYXRoJiB0eXBlZFZhbHVlKSAtPiBQYXRoIHsgcmV0
dXJuIHR5cGVkVmFsdWU7IH0sCiAgICAgICAgIFtdIChhdXRvJikgeyByZXR1cm4gUGF0aCgpOyB9
CiAgICAgKTsKIH0KQEAgLTg2OCw3ICs4NjgsNyBAQCBDb2xvciBBWElzb2xhdGVkT2JqZWN0Ojpj
b2xvckF0dHJpYnV0ZVZhCiB7CiAgICAgYXV0byB2YWx1ZSA9IG1fcHJvcGVydHlNYXAuZ2V0KHBy
b3BlcnR5TmFtZSk7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24odmFsdWUsCi0gICAgICAgIFtd
IChDb2xvciYgdHlwZWRWYWx1ZSkgeyByZXR1cm4gdHlwZWRWYWx1ZTsgfSwKKyAgICAgICAgW10g
KENvbG9yJiB0eXBlZFZhbHVlKSAtPiBDb2xvciB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAogICAg
ICAgICBbXSAoYXV0byYpIHsgcmV0dXJuIENvbG9yKCk7IH0KICAgICApOwogfQpAQCAtODc3LDgg
Kzg3Nyw4IEBAIGZsb2F0IEFYSXNvbGF0ZWRPYmplY3Q6OmZsb2F0QXR0cmlidXRlVmEKIHsKICAg
ICBhdXRvIHZhbHVlID0gbV9wcm9wZXJ0eU1hcC5nZXQocHJvcGVydHlOYW1lKTsKICAgICByZXR1
cm4gV1RGOjpzd2l0Y2hPbih2YWx1ZSwKLSAgICAgICAgW10gKGZsb2F0JiB0eXBlZFZhbHVlKSB7
IHJldHVybiB0eXBlZFZhbHVlOyB9LAotICAgICAgICBbXSAoYXV0byYpIHsgcmV0dXJuIDA7IH0K
KyAgICAgICAgW10gKGZsb2F0JiB0eXBlZFZhbHVlKSAtPiBmbG9hdCB7IHJldHVybiB0eXBlZFZh
bHVlOyB9LAorICAgICAgICBbXSAoYXV0byYpIHsgcmV0dXJuIDAuMGY7IH0KICAgICApOwogfQog
CkBAIC04ODYsOCArODg2LDggQEAgZG91YmxlIEFYSXNvbGF0ZWRPYmplY3Q6OmRvdWJsZUF0dHJp
YnV0ZQogewogICAgIGF1dG8gdmFsdWUgPSBtX3Byb3BlcnR5TWFwLmdldChwcm9wZXJ0eU5hbWUp
OwogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHZhbHVlLAotICAgICAgICBbXSAoZG91YmxlJiB0
eXBlZFZhbHVlKSB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAotICAgICAgICBbXSAoYXV0byYpIHsg
cmV0dXJuIDA7IH0KKyAgICAgICAgW10gKGRvdWJsZSYgdHlwZWRWYWx1ZSkgLT4gZG91YmxlIHsg
cmV0dXJuIHR5cGVkVmFsdWU7IH0sCisgICAgICAgIFtdIChhdXRvJikgeyByZXR1cm4gMC4wOyB9
CiAgICAgKTsKIH0KIApAQCAtODk1LDggKzg5NSw4IEBAIHVuc2lnbmVkIEFYSXNvbGF0ZWRPYmpl
Y3Q6OnVuc2lnbmVkQXR0cmkKIHsKICAgICBhdXRvIHZhbHVlID0gbV9wcm9wZXJ0eU1hcC5nZXQo
cHJvcGVydHlOYW1lKTsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbih2YWx1ZSwKLSAgICAgICAg
W10gKHVuc2lnbmVkJiB0eXBlZFZhbHVlKSB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAotICAgICAg
ICBbXSAoYXV0byYpIHsgcmV0dXJuIDA7IH0KKyAgICAgICAgW10gKHVuc2lnbmVkJiB0eXBlZFZh
bHVlKSAtPiB1bnNpZ25lZCB7IHJldHVybiB0eXBlZFZhbHVlOyB9LAorICAgICAgICBbXSAoYXV0
byYpIHsgcmV0dXJuIDB1OyB9CiAgICAgKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvSURMVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9J
RExUeXBlcy5oCShyZXZpc2lvbiAyODM1MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9J
RExUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8d3Rm
L0JyaWdhbmQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3Rm
L1VSTC5oPgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAKICNpZiBFTkFCTEUoV0VCR0wpCiAj
aW5jbHVkZSAiV2ViR0xBbnkuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1
ZmZlclNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1
ZmZlclNvdXJjZS5oCShyZXZpc2lvbiAyODM1MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9CdWZmZXJTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTQgKzQ1LDE0IEBAIHB1
YmxpYzoKIAogICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEoKSBjb25zdAogICAgIHsKLSAgICAgICAg
cmV0dXJuIFdURjo6dmlzaXQoW10oYXV0byYgYnVmZmVyKSAtPiBjb25zdCB1aW50OF90KiB7Cisg
ICAgICAgIHJldHVybiBzdGQ6OnZpc2l0KFtdKGF1dG8mIGJ1ZmZlcikgLT4gY29uc3QgdWludDhf
dCogewogICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlciA/IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4
X3QqPihidWZmZXItPmRhdGEoKSkgOiBudWxscHRyOwogICAgICAgICB9LCBtX3ZhcmlhbnQpOwog
ICAgIH0KIAogICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJu
IFdURjo6dmlzaXQoW10oYXV0byYgYnVmZmVyKSAtPiBzaXplX3QgeworICAgICAgICByZXR1cm4g
c3RkOjp2aXNpdChbXShhdXRvJiBidWZmZXIpIC0+IHNpemVfdCB7CiAgICAgICAgICAgICByZXR1
cm4gYnVmZmVyID8gYnVmZmVyLT5ieXRlTGVuZ3RoKCkgOiAwOwogICAgICAgICB9LCBtX3Zhcmlh
bnQpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdV
dGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lE
QkJpbmRpbmdVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyODM1MDMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDY5LDcgKzQ2OSw3IEBAIHN0YXRpYyBWZWN0b3I8SURCS2V5RGF0YT4gY3JlYXRlS2V5UGF0aEEK
ICAgICAgICAgcmV0dXJuIGtleXM7CiAgICAgfSk7CiAKLSAgICByZXR1cm4gV1RGOjp2aXNpdCh2
aXNpdG9yLCBpbmZvLmtleVBhdGgoKSk7CisgICAgcmV0dXJuIHN0ZDo6dmlzaXQodmlzaXRvciwg
aW5mby5rZXlQYXRoKCkpOwogfQogCiB2b2lkIGdlbmVyYXRlSW5kZXhLZXlGb3JWYWx1ZShKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZv
LCBKU1ZhbHVlIHZhbHVlLCBJbmRleEtleSYgb3V0S2V5LCBjb25zdCBzdGQ6Om9wdGlvbmFsPElE
QktleVBhdGg+JiBvYmplY3RTdG9yZUtleVBhdGgsIGNvbnN0IElEQktleURhdGEmIG9iamVjdFN0
b3JlS2V5KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0VW5p
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZl
cnRVbmlvbi5oCShyZXZpc2lvbiAyODM1MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUNvbnZlcnRVbmlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODUsNyArMzg1LDcgQEAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydAogICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwogCi0gICAgdXNpbmcgU2VxdWVuY2UgPSBicmlnYW5k
OjptYWtlX3NlcXVlbmNlPGJyaWdhbmQ6OnB0cmRpZmZfdDwwPiwgV1RGOjp2YXJpYW50X3NpemU8
SW1wbGVtZW50YXRpb25UeXBlPjo6dmFsdWU+OworICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2Fu
ZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5kOjpwdHJkaWZmX3Q8MD4sIHN0ZDo6dmFyaWFudF9zaXpl
PEltcGxlbWVudGF0aW9uVHlwZT46OnZhbHVlPjsKIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBJbXBsZW1lbnRhdGlvblR5cGUmIHZhcmlh
bnQpCiAgICAgewpAQCAtMzk2LDcgKzM5Niw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0
cnVjdCBKU0NvbnZlcnQKICAgICAgICAgICAgIHVzaW5nIEkgPSB0eXBlbmFtZSBXVEY6OlJlbW92
ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKICAgICAgICAgICAg
IGlmIChJOjp2YWx1ZSA9PSBpbmRleCkgewogICAgICAgICAgICAgICAgIEFTU0VSVCghcmV0dXJu
VmFsdWUpOwotICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gdG9KUzxicmlnYW5kOjphdDxU
eXBlTGlzdCwgST4+KGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXQ8
STo6dmFsdWU+KHZhcmlhbnQpKTsKKyAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8
YnJpZ2FuZDo6YXQ8VHlwZUxpc3QsIEk+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmpl
Y3QsIHN0ZDo6Z2V0PEk6OnZhbHVlPih2YXJpYW50KSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRXZWJH
TC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252
ZXJ0V2ViR0wuY3BwCShyZXZpc2lvbiAyODM1MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUNvbnZlcnRXZWJHTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDQ5ICs4MCwz
OSBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogSlNWYWx1ZSBjb252ZXJ0VG9KU1ZhbHVlKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBjb25zdCBXZWJHTEFueSYgYW55KQogewogICAgIHJldHVybiBXVEY6OnN3aXRjaE9u
KGFueSwKLSAgICAgICAgW10gKHN0ZDo6bnVsbHB0cl90KSB7CisgICAgICAgIFtdIChzdGQ6Om51
bGxwdHJfdCkgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAg
ICAgIH0sCi0gICAgICAgIFtdIChib29sIHZhbHVlKSB7CisgICAgICAgIH0sIFtdIChib29sIHZh
bHVlKSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4odmFsdWUpOwot
ICAgICAgICB9LAotICAgICAgICBbXSAoaW50IHZhbHVlKSB7CisgICAgICAgIH0sIFtdIChpbnQg
dmFsdWUpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsK
LSAgICAgICAgfSwKLSAgICAgICAgW10gKHVuc2lnbmVkIHZhbHVlKSB7CisgICAgICAgIH0sIFtd
ICh1bnNpZ25lZCB2YWx1ZSkgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4ganNOdW1i
ZXIodmFsdWUpOwotICAgICAgICB9LAotICAgICAgICBbXSAobG9uZyBsb25nIHZhbHVlKSB7Cisg
ICAgICAgIH0sIFtdIChsb25nIGxvbmcgdmFsdWUpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAg
cmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsKLSAgICAgICAgfSwKLSAgICAgICAgW10gKGZsb2F0IHZh
bHVlKSB7CisgICAgICAgIH0sIFtdIChmbG9hdCB2YWx1ZSkgLT4gSlNWYWx1ZSB7CiAgICAgICAg
ICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOwotICAgICAgICB9LAotICAgICAgICBbJl0gKGNv
bnN0IFN0cmluZyYgdmFsdWUpIHsKKyAgICAgICAgfSwgWyZdIChjb25zdCBTdHJpbmcmIHZhbHVl
KSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShsZXhp
Y2FsR2xvYmFsT2JqZWN0LnZtKCksIHZhbHVlKTsKLSAgICAgICAgfSwKLSAgICAgICAgWyZdIChj
b25zdCBWZWN0b3I8Ym9vbD4mIHZhbHVlcykgeworICAgICAgICB9LCBbJl0gKGNvbnN0IFZlY3Rv
cjxib29sPiYgdmFsdWVzKSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50
QnVmZmVyIGxpc3Q7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIHZhbHVlIDogdmFsdWVzKQogICAg
ICAgICAgICAgICAgIGxpc3QuYXBwZW5kKGpzQm9vbGVhbih2YWx1ZSkpOwogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIWxpc3QuaGFzT3ZlcmZsb3dlZCgpKTsKICAgICAgICAgICAgIHJldHVy
biBjb25zdHJ1Y3RBcnJheSgmZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxKU0M6OkFycmF5QWxs
b2NhdGlvblByb2ZpbGUqPihudWxscHRyKSwgbGlzdCk7Ci0gICAgICAgIH0sCi0gICAgICAgIFsm
XSAoY29uc3QgVmVjdG9yPGludD4mIHZhbHVlcykgeworICAgICAgICB9LCBbJl0gKGNvbnN0IFZl
Y3RvcjxpbnQ+JiB2YWx1ZXMpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgTWFya2VkQXJndW1l
bnRCdWZmZXIgbGlzdDsKICAgICAgICAgICAgIGZvciAoYXV0byYgdmFsdWUgOiB2YWx1ZXMpCiAg
ICAgICAgICAgICAgICAgbGlzdC5hcHBlbmQoanNOdW1iZXIodmFsdWUpKTsKICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFsaXN0Lmhhc092ZXJmbG93ZWQoKSk7CiAgICAgICAgICAgICByZXR1
cm4gY29uc3RydWN0QXJyYXkoJmdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8SlNDOjpBcnJheUFs
bG9jYXRpb25Qcm9maWxlKj4obnVsbHB0ciksIGxpc3QpOwotICAgICAgICB9LAotICAgICAgICBb
Jl0gKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHZhbHVlcykgeworICAgICAgICB9LCBbJl0gKGNv
bnN0IFZlY3Rvcjx1bnNpZ25lZD4mIHZhbHVlcykgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwogICAgICAgICAgICAgZm9yIChhdXRvJiB2YWx1ZSA6
IHZhbHVlcykKICAgICAgICAgICAgICAgICBsaXN0LmFwcGVuZChqc051bWJlcih2YWx1ZSkpOwog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWxpc3QuaGFzT3ZlcmZsb3dlZCgpKTsKICAgICAg
ICAgICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheSgmZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxK
U0M6OkFycmF5QWxsb2NhdGlvblByb2ZpbGUqPihudWxscHRyKSwgbGlzdCk7Ci0gICAgICAgIH0s
Ci0gICAgICAgIFsmXSAoY29uc3QgUmVmUHRyPEZsb2F0MzJBcnJheT4mIGFycmF5KSB7CisgICAg
ICAgIH0sIFsmXSAoY29uc3QgUmVmUHRyPEZsb2F0MzJBcnJheT4mIGFycmF5KSB7CiAgICAgICAg
ICAgICByZXR1cm4gdG9KUygmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmdsb2JhbE9iamVjdCwgYXJy
YXkuZ2V0KCkpOwogICAgICAgICB9LAogICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxJbnQzMkFy
cmF5PiYgYXJyYXkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVu
dE1ldGhvZENoYW5nZUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1BheW1lbnRNZXRob2RDaGFuZ2VFdmVudEN1c3RvbS5jcHAJKHJldmlz
aW9uIDI4MzUwMykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGF5bWVudE1ldGhv
ZENoYW5nZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOSArMzMsOSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBKU0M6OkpTVmFsdWUgSlNQYXltZW50TWV0aG9kQ2hhbmdlRXZl
bnQ6Om1ldGhvZERldGFpbHMoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVkUHJvcGVydHlWYWx1ZShsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqdGhpcywgd3JhcHBlZCgpLmNhY2hlZE1ldGhvZERldGFpbHMoKSwgW3RoaXMsICZs
ZXhpY2FsR2xvYmFsT2JqZWN0XSB7Ci0gICAgICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHdyYXBw
ZWQoKS5tZXRob2REZXRhaWxzKCksIFtdKEpTQzo6SlNWYWx1ZSBtZXRob2REZXRhaWxzKSB7Cisg
ICAgICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHdyYXBwZWQoKS5tZXRob2REZXRhaWxzKCksIFtd
KEpTQzo6SlNWYWx1ZSBtZXRob2REZXRhaWxzKSAtPiBKU0M6OkpTVmFsdWUgewogICAgICAgICAg
ICAgcmV0dXJuIG1ldGhvZERldGFpbHMgPyBtZXRob2REZXRhaWxzIDogSlNDOjpqc051bGwoKTsK
LSAgICAgICAgfSwgWyZsZXhpY2FsR2xvYmFsT2JqZWN0XShjb25zdCBQYXltZW50TWV0aG9kQ2hh
bmdlRXZlbnQ6Ok1ldGhvZERldGFpbHNGdW5jdGlvbiYgZnVuY3Rpb24pIHsKKyAgICAgICAgfSwg
WyZsZXhpY2FsR2xvYmFsT2JqZWN0XShjb25zdCBQYXltZW50TWV0aG9kQ2hhbmdlRXZlbnQ6Ok1l
dGhvZERldGFpbHNGdW5jdGlvbiYgZnVuY3Rpb24pIC0+IEpTQzo6SlNWYWx1ZSB7CiAgICAgICAg
ICAgICByZXR1cm4gZnVuY3Rpb24obGV4aWNhbEdsb2JhbE9iamVjdCkuZ2V0KCk7CiAgICAgICAg
IH0pOwogICAgIH0pOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWYWx1ZUlu
V3JhcHBlZE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTVmFsdWVJbldyYXBwZWRPYmplY3QuaAkocmV2aXNpb24gMjgzNTAzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNWYWx1ZUluV3JhcHBlZE9iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC04Miw3ICs4Miw3IEBAIGlubGluZSBKU1ZhbHVlSW5XcmFwcGVkT2JqZWN0OjpvcGVyYXRv
ciAKIHsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3ZhbHVlLCBbXSAoSlNDOjpKU1ZhbHVl
IHZhbHVlKSB7CiAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9LCBbXSAoY29uc3QgV2VhayYg
dmFsdWUpIHsKKyAgICB9LCBbXSAoY29uc3QgV2VhayYgdmFsdWUpIC0+IEpTQzo6SlNWYWx1ZSB7
CiAgICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKICAgICB9KTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCShyZXZpc2lvbiAy
ODM1MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTE4LDcgKzkxOCw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNvbnN1bWUKIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bnN1bWVGb250V2VpZ2h0KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQogewogICAgIGlmIChh
dXRvIHJlc3VsdCA9IGNvbnN1bWVGb250V2VpZ2h0UmF3KHJhbmdlKSkgewotICAgICAgICByZXR1
cm4gc3dpdGNoT24oKnJlc3VsdCwgW10gKENTU1ZhbHVlSUQgdmFsdWVJRCkgeworICAgICAgICBy
ZXR1cm4gV1RGOjpzd2l0Y2hPbigqcmVzdWx0LCBbXSAoQ1NTVmFsdWVJRCB2YWx1ZUlEKSB7CiAg
ICAgICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUodmFsdWVJRCk7CiAgICAgICAgIH0sIFtdIChkb3VibGUgd2VpZ2h0TnVtYmVyKSB7
CiAgICAgICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1
ZSh3ZWlnaHROdW1iZXIsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy90eXBlZG9tL0NTU1VucGFyc2VkVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy90eXBlZG9tL0NTU1VucGFyc2VkVmFsdWUuY3BwCShyZXZpc2lvbiAy
ODM1MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvdHlwZWRvbS9DU1NVbnBhcnNlZFZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDcgKzEzMCw3IEBAIFN0cmluZyBDU1NVbnBhcnNlZFZh
bHVlOjp0b1N0cmluZygpIGNvbnMKIHZvaWQgQ1NTVW5wYXJzZWRWYWx1ZTo6c2VyaWFsaXplKFN0
cmluZ0J1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CiB7CiAgICAgZm9yIChhdXRvJiBzZWdtZW50IDog
bV9zZWdtZW50cykgewotICAgICAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdIChj
b25zdCBTdHJpbmcmIHZhbHVlKSB7CisgICAgICAgIHN0ZDo6dmlzaXQoV1RGOjptYWtlVmlzaXRv
cihbJl0gKGNvbnN0IFN0cmluZyYgdmFsdWUpIHsKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KHZhbHVlKTsKICAgICAgICAgfSwgWyZdIChjb25zdCBSZWZQdHI8Q1NTT01WYXJpYWJsZVJlZmVy
ZW5jZVZhbHVlPiYgdmFsdWUpIHsKICAgICAgICAgICAgIHZhbHVlLT5zZXJpYWxpemUoYnVpbGRl
cik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAJKHJldmlzaW9uIDI4MzUwMykK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyMyw3ICsxMjMsNyBAQCB2b2lkIEV2ZW50VGFyZ2V0OjphZGRFdmVudExpc3RlbmVyRm9yQmlu
CiAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lci5yZWxlYXNlTm9u
TnVsbCgpLCBjYXB0dXJlKTsKICAgICB9KTsKIAotICAgIFdURjo6dmlzaXQodmlzaXRvciwgdmFy
aWFudCk7CisgICAgc3RkOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKIH0KIAogdm9pZCBFdmVu
dFRhcmdldDo6cmVtb3ZlRXZlbnRMaXN0ZW5lckZvckJpbmRpbmdzKGNvbnN0IEF0b21TdHJpbmcm
IGV2ZW50VHlwZSwgUmVmUHRyPEV2ZW50TGlzdGVuZXI+JiYgbGlzdGVuZXIsIEV2ZW50TGlzdGVu
ZXJPcHRpb25zT3JCb29sZWFuJiYgdmFyaWFudCkKQEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lkIEV2
ZW50VGFyZ2V0OjpyZW1vdmVFdmVudExpc3RlbmVyRm9yCiAgICAgICAgIHJlbW92ZUV2ZW50TGlz
dGVuZXIoZXZlbnRUeXBlLCAqbGlzdGVuZXIsIGNhcHR1cmUpOwogICAgIH0pOwogCi0gICAgV1RG
Ojp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0KHZpc2l0b3IsIHZhcmlh
bnQpOwogfQogCiBib29sIEV2ZW50VGFyZ2V0OjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0
b21TdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGNvbnN0IEV2ZW50
TGlzdGVuZXJPcHRpb25zJiBvcHRpb25zKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL01lc3Nh
Z2VFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVu
dC5jcHAJKHJldmlzaW9uIDI4MzUwMykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZl
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksMTUgKzEyOSwxNSBAQCBFdmVudEludGVyZmFj
ZSBNZXNzYWdlRXZlbnQ6OmV2ZW50SW50ZXJmCiAKIHNpemVfdCBNZXNzYWdlRXZlbnQ6Om1lbW9y
eUNvc3QoKSBjb25zdAogewotICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fZGF0YSwgW10gKGNv
bnN0IEpTVmFsdWVJbldyYXBwZWRPYmplY3QmKSB7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24o
bV9kYXRhLCBbXSAoY29uc3QgSlNWYWx1ZUluV3JhcHBlZE9iamVjdCYpIC0+IHNpemVfdCB7CiAg
ICAgICAgIHJldHVybiAwOwotICAgIH0sIFtdIChjb25zdCBSZWY8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiYgZGF0YSkgeworICAgIH0sIFtdIChjb25zdCBSZWY8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiYgZGF0YSkgLT4gc2l6ZV90IHsKICAgICAgICAgcmV0dXJuIGRhdGEtPm1lbW9yeUNvc3QoKTsK
LSAgICB9LCBbXSAoY29uc3QgU3RyaW5nJiBzdHJpbmcpIHsKKyAgICB9LCBbXSAoY29uc3QgU3Ry
aW5nJiBzdHJpbmcpIC0+IHNpemVfdCB7CiAgICAgICAgIHJldHVybiBzdHJpbmcuc2l6ZUluQnl0
ZXMoKTsKLSAgICB9LCBbXSAoY29uc3QgUmVmPEJsb2I+JiBibG9iKSB7CisgICAgfSwgW10gKGNv
bnN0IFJlZjxCbG9iPiYgYmxvYikgLT4gc2l6ZV90IHsKICAgICAgICAgcmV0dXJuIGJsb2ItPnNp
emUoKTsKLSAgICB9LCBbXSAoY29uc3QgUmVmPEFycmF5QnVmZmVyPiYgYnVmZmVyKSB7CisgICAg
fSwgW10gKGNvbnN0IFJlZjxBcnJheUJ1ZmZlcj4mIGJ1ZmZlcikgLT4gc2l6ZV90IHsKICAgICAg
ICAgcmV0dXJuIGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOwogICAgIH0pOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gMjgzNTAzKQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjczLDcgKzIyNzMsNyBAQCB2
b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvCiAKICAgICBpZiAodW5pZmll
ZFRleHRDaGVja2VyRW5hYmxlZCgpKSB7CiAgICAgICAgIGF1dG8gZm91bmRJdGVtID0gVGV4dENo
ZWNraW5nSGVscGVyKCpjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlz
c3BlbGxlZFdvcmRPclVuZ3JhbW1hdGljYWxQaHJhc2UoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVk
KCkpOwotICAgICAgICBpZiAoYXV0byB3b3JkID0gV1RGOjpnZXRfaWY8VGV4dENoZWNraW5nSGVs
cGVyOjpNaXNzcGVsbGVkV29yZD4oZm91bmRJdGVtKSkKKyAgICAgICAgaWYgKGF1dG8gd29yZCA9
IHN0ZDo6Z2V0X2lmPFRleHRDaGVja2luZ0hlbHBlcjo6TWlzc3BlbGxlZFdvcmQ+KCZmb3VuZEl0
ZW0pKQogICAgICAgICAgICAgbWlzc3BlbGxlZFdvcmQgPSBXVEZNb3ZlKCp3b3JkKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgdW5ncmFtbWF0aWNhbFBocmFzZSA9IFdURjo6Z2V0PFRleHRD
aGVja2luZ0hlbHBlcjo6VW5ncmFtbWF0aWNhbFBocmFzZT4oV1RGTW92ZShmb3VuZEl0ZW0pKTsK
QEAgLTIzMDAsNyArMjMwMCw3IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxp
bmcoYm8KICAgICAgICAgCiAgICAgICAgIGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkp
IHsKICAgICAgICAgICAgIGF1dG8gZm91bmRJdGVtID0gVGV4dENoZWNraW5nSGVscGVyKCpjbGll
bnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlzc3BlbGxlZFdvcmRPclVuZ3Jh
bW1hdGljYWxQaHJhc2UoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpOwotICAgICAgICAgICAg
aWYgKGF1dG8gd29yZCA9IFdURjo6Z2V0X2lmPFRleHRDaGVja2luZ0hlbHBlcjo6TWlzc3BlbGxl
ZFdvcmQ+KGZvdW5kSXRlbSkpCisgICAgICAgICAgICBpZiAoYXV0byB3b3JkID0gc3RkOjpnZXRf
aWY8VGV4dENoZWNraW5nSGVscGVyOjpNaXNzcGVsbGVkV29yZD4oJmZvdW5kSXRlbSkpCiAgICAg
ICAgICAgICAgICAgbWlzc3BlbGxlZFdvcmQgPSBXVEZNb3ZlKCp3b3JkKTsKICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICB1bmdyYW1tYXRpY2FsUGhyYXNlID0gV1RGOjpnZXQ8VGV4
dENoZWNraW5nSGVscGVyOjpVbmdyYW1tYXRpY2FsUGhyYXNlPihXVEZNb3ZlKGZvdW5kSXRlbSkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI4MzUwMykKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw3ICs1MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogaW5saW5lIGJvb2wgVGV4dE1hbmlw
dWxhdGlvbkNvbnRyb2xsZXI6OkV4Y2x1c2lvblJ1bGU6Om1hdGNoKGNvbnN0IEVsZW1lbnQmIGVs
ZW1lbnQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN3aXRjaE9uKHJ1bGUsIFsmZWxlbWVudF0gKEVs
ZW1lbnRSdWxlIHJ1bGUpIHsKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihydWxlLCBbJmVsZW1l
bnRdIChFbGVtZW50UnVsZSBydWxlKSB7CiAgICAgICAgIHJldHVybiBydWxlLmxvY2FsTmFtZSA9
PSBlbGVtZW50LmxvY2FsTmFtZSgpOwogICAgIH0sIFsmZWxlbWVudF0gKEF0dHJpYnV0ZVJ1bGUg
cnVsZSkgewogICAgICAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShlbGVtZW50Lmdl
dEF0dHJpYnV0ZShydWxlLm5hbWUpLCBydWxlLnZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvVVJMU2VhcmNoUGFyYW1zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL1VSTFNlYXJjaFBhcmFtcy5jcHAJKHJldmlzaW9uIDI4MzUwMykKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvVVJMU2VhcmNoUGFyYW1zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTIgKzUx
LDEyIEBAIEV4Y2VwdGlvbk9yPFJlZjxVUkxTZWFyY2hQYXJhbXM+PiBVUkxTZWEKICAgICAgICAg
ICAgIHBhaXJzLmFwcGVuZCh7cGFpclswXSwgcGFpclsxXX0pOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFVSTFNlYXJjaFBhcmFtcyhXVEZNb3ZlKHBhaXJzKSkpOwot
ICAgIH0sIFsmXShjb25zdCBWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+
PiYgcGFpcnMpIHsKKyAgICB9LCBbJl0oY29uc3QgVmVjdG9yPFdURjo6S2V5VmFsdWVQYWlyPFN0
cmluZywgU3RyaW5nPj4mIHBhaXJzKSAtPiBFeGNlcHRpb25PcjxSZWY8VVJMU2VhcmNoUGFyYW1z
Pj4gewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVUkxTZWFyY2hQYXJhbXMocGFpcnMp
KTsKLSAgICB9LCBbJl0oY29uc3QgU3RyaW5nJiBzdHJpbmcpIHsKKyAgICB9LCBbJl0oY29uc3Qg
U3RyaW5nJiBzdHJpbmcpIC0+IEV4Y2VwdGlvbk9yPFJlZjxVUkxTZWFyY2hQYXJhbXM+PiB7CiAg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVSTFNlYXJjaFBhcmFtcyhzdHJpbmcsIG51bGxw
dHIpKTsKICAgICB9KTsKLSAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsK
KyAgICByZXR1cm4gc3RkOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKIH0KIAogU3RyaW5nIFVS
TFNlYXJjaFBhcmFtczo6Z2V0KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuY3BwCShyZXZpc2lvbiAyODM1MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc1OCw3
ICsxNzU4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJEYQogICAg
IGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBXVEY6OnZpc2l0KFsmXShhdXRv
JiBkYXRhKSB7CisgICAgc3RkOjp2aXNpdChbJl0oYXV0byYgZGF0YSkgewogICAgICAgICBpZiAo
IWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0YShkYXRhLmdldCgpKSkgewogICAgICAgICAgICAg
dGhpcy0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUs
ICJidWZmZXJEYXRhIiwgImludmFsaWQgYnVmZmVyIik7CiAgICAgICAgICAgICByZXR1cm47CkBA
IC0xNzg1LDcgKzE3ODUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJ1ZmZl
clN1CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBXVEY6OnZpc2l0KFsmXShhdXRvJiBk
YXRhKSB7CisgICAgc3RkOjp2aXNpdChbJl0oYXV0byYgZGF0YSkgewogICAgICAgICBpZiAoIWJ1
ZmZlci0+YXNzb2NpYXRlQnVmZmVyU3ViRGF0YShzdGF0aWNfY2FzdDxHQ0dMaW50cHRyPihvZmZz
ZXQpLCBkYXRhLmdldCgpKSkgewogICAgICAgICAgICAgdGhpcy0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0R0w6OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJEYXRhIiwgIm9mZnNl
dCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTQ4MTMsNyArNDgxMyw3
IEBAIEludFJlY3QgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VGUKICAgICB9CiAgICAg
KTsKIAotICAgIEV4Y2VwdGlvbk9yPEludFJlY3Q+IHJlc3VsdCA9IFdURjo6dmlzaXQodmlzaXRv
ciwgc291cmNlKTsKKyAgICBFeGNlcHRpb25PcjxJbnRSZWN0PiByZXN1bHQgPSBzdGQ6OnZpc2l0
KHZpc2l0b3IsIHNvdXJjZSk7CiAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIHNlbnRpbmVsRW1wdHlSZWN0KCk7CiAgICAgcmV0dXJuIHJlc3VsdC5yZXR1cm5W
YWx1ZSgpOwpAQCAtNTA3NCw3ICs1MDc0LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QgogI2VuZGlmIC8vIEVOQUJMRShWSURFTykKICAgICApOwogCi0gICAgcmV0
dXJuIFdURjo6dmlzaXQodmlzaXRvciwgc291cmNlKTsKKyAgICByZXR1cm4gc3RkOjp2aXNpdCh2
aXNpdG9yLCBzb3VyY2UpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRl
eEltYWdlQXJyYXlCdWZmZXJWaWV3SGVscGVyKFRleEltYWdlRnVuY3Rpb25JRCBmdW5jdGlvbklE
LCBHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBHQ0dM
aW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50IHhvZmZz
ZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTGludCB6b2Zmc2V0LCBSZWZQdHI8QXJyYXlCdWZmZXJW
aWV3PiYmIHBpeGVscywgTnVsbERpc3Bvc2l0aW9uIG51bGxEaXNwb3NpdGlvbiwgR0NHTHVpbnQg
c3JjT2Zmc2V0KQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZh
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNh
bnZhcy5jcHAJKHJldmlzaW9uIDI4MzUwMykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDYW52YXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcgQEAgSW5z
cGVjdG9yQ2FudmFzOjpJbnNwZWN0b3JDYW52YXMoQ2FudmFzUgogCiBDYW52YXNSZW5kZXJpbmdD
b250ZXh0KiBJbnNwZWN0b3JDYW52YXM6OmNhbnZhc0NvbnRleHQoKSBjb25zdAogewotICAgIGlm
IChhdXRvKiBjb250ZXh0V3JhcHBlciA9IFdURjo6Z2V0X2lmPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4+KG1fY29udGV4dCkpCisgICAgaWYgKGF1dG8qIGNv
bnRleHRXcmFwcGVyID0gc3RkOjpnZXRfaWY8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDYW52YXNS
ZW5kZXJpbmdDb250ZXh0Pj4oJm1fY29udGV4dCkpCiAgICAgICAgIHJldHVybiAmY29udGV4dFdy
YXBwZXItPmdldCgpOwogICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtMTI0LDggKzEyNCw3IEBA
IEhUTUxDYW52YXNFbGVtZW50KiBJbnNwZWN0b3JDYW52YXM6OmNhbnYKICAgICAgICAgICAgIGlm
IChpczxIVE1MQ2FudmFzRWxlbWVudD4oY29udGV4dC5jYW52YXNCYXNlKCkpKQogICAgICAgICAg
ICAgICAgIHJldHVybiAmZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KGNvbnRleHQuY2FudmFz
QmFzZSgpKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9LAotICAgICAg
ICBbXSAoTW9ub3N0YXRlKSB7CisgICAgICAgIH0sIFtdIChNb25vc3RhdGUpIC0+IEhUTUxDYW52
YXNFbGVtZW50KiB7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CkBAIC0xMzksOCArMTM4LDcgQEAgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogSW5zcGVjdG9yQ2FudmFzOgogICAgICAgICBbXSAoc3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiBjb250ZXh0V3JhcHBlcikgewog
ICAgICAgICAgICAgYXV0byYgY29udGV4dCA9IGNvbnRleHRXcmFwcGVyLmdldCgpOwogICAgICAg
ICAgICAgcmV0dXJuIGNvbnRleHQuY2FudmFzQmFzZSgpLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKLSAgICAgICAgfSwKLSAgICAgICAgW10gKE1vbm9zdGF0ZSkgeworICAgICAgICB9LCBbXSAo
TW9ub3N0YXRlKSAtPiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiB7CiAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9
CkBAIC04OTMsOCArODkxLDcgQEAgUmVmPFByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4gSW5zcGVj
dG9yQwogICAgICAgICAgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlw
ZTo6V2ViR0wyOwogI2VuZGlmCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAg
ICAgICB9LAotICAgICAgICBbXSAoTW9ub3N0YXRlKSB7CisgICAgICAgIH0sIFtdIChNb25vc3Rh
dGUpIC0+IENvbnRleHRUeXBlVHlwZSB7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIH0KQEAgLTkyMCw4
ICs5MTcsNyBAQCBSZWY8UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzPiBJbnNwZWN0b3JDCiAgICAg
YXV0byBjb250ZXh0QXR0cmlidXRlcyA9IFdURjo6c3dpdGNoT24obV9jb250ZXh0LAogICAgICAg
ICBbXSAoc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiBjb250
ZXh0V3JhcHBlcikgewogICAgICAgICAgICAgcmV0dXJuIGJ1aWxkT2JqZWN0Rm9yQ2FudmFzQ29u
dGV4dEF0dHJpYnV0ZXMoY29udGV4dFdyYXBwZXIpOwotICAgICAgICB9LAotICAgICAgICBbXSAo
TW9ub3N0YXRlKSB7CisgICAgICAgIH0sIFtdIChNb25vc3RhdGUpIC0+IFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRBdHRyaWJ1dGVzPiB7CiAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAg
ICB9CkBAIC0xMDQwLDggKzEwMzYsOCBAQCBpbnQgSW5zcGVjdG9yQ2FudmFzOjppbmRleEZvckRh
dGEoRHVwbGljCiAgICAgICAgIGlmIChkYXRhID09IGl0ZW0pCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgICAgICBhdXRvIHRyYWNlQSA9IFdURjo6Z2V0X2lmPFJlZlB0cjxTY3JpcHRD
YWxsU3RhY2s+PihkYXRhKTsKLSAgICAgICAgYXV0byB0cmFjZUIgPSBXVEY6OmdldF9pZjxSZWZQ
dHI8U2NyaXB0Q2FsbFN0YWNrPj4oaXRlbSk7CisgICAgICAgIGF1dG8gdHJhY2VBID0gc3RkOjpn
ZXRfaWY8UmVmUHRyPFNjcmlwdENhbGxTdGFjaz4+KCZkYXRhKTsKKyAgICAgICAgYXV0byB0cmFj
ZUIgPSBzdGQ6OmdldF9pZjxSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPj4oJml0ZW0pOwogICAgICAg
ICBpZiAodHJhY2VBICYmICp0cmFjZUEgJiYgdHJhY2VCICYmICp0cmFjZUIpCiAgICAgICAgICAg
ICByZXR1cm4gKCp0cmFjZUEpLT5pc0VxdWFsKCgqdHJhY2VCKS5nZXQoKSk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTaGFkZXJQcm9ncmFtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5j
cHAJKHJldmlzaW9uIDI4MzUwMykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JTaGFkZXJQcm9ncmFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBJbnNw
ZWN0b3JTaGFkZXJQcm9ncmFtOjpJbnNwZWN0b3JTaGFkZXJQCiAjaWYgRU5BQkxFKFdFQkdMKQog
V2ViR0xQcm9ncmFtKiBJbnNwZWN0b3JTaGFkZXJQcm9ncmFtOjpwcm9ncmFtKCkgY29uc3QKIHsK
LSAgICBpZiAoYXV0byogcHJvZ3JhbVdyYXBwZXIgPSBXVEY6OmdldF9pZjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPFdlYkdMUHJvZ3JhbT4+KG1fcHJvZ3JhbSkpCisgICAgaWYgKGF1dG8qIHByb2dy
YW1XcmFwcGVyID0gc3RkOjpnZXRfaWY8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxXZWJHTFByb2dy
YW0+PigmbV9wcm9ncmFtKSkKICAgICAgICAgcmV0dXJuICZwcm9ncmFtV3JhcHBlci0+Z2V0KCk7
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAkocmV2
aXNpb24gMjgzNTAzKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JJbmRleGVkREJBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw3ICsxNjcsNyBAQCBz
dGF0aWMgUmVmPFByb3RvY29sOjpJbmRleGVkREI6OktleVBhdGg+CiAgICAgICAgIGtleVBhdGgt
PnNldEFycmF5KFdURk1vdmUoYXJyYXkpKTsKICAgICAgICAgcmV0dXJuIGtleVBhdGg7CiAgICAg
fSk7Ci0gICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgaWRiS2V5UGF0aC52YWx1ZSgpKTsK
KyAgICByZXR1cm4gc3RkOjp2aXNpdCh2aXNpdG9yLCBpZGJLZXlQYXRoLnZhbHVlKCkpOwogfQog
CiBzdGF0aWMgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbkZvckRhdGFiYXNlKElE
QkRhdGFiYXNlKiBpZGJEYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIElE
QlRyYW5zYWN0aW9uTW9kZSBtb2RlID0gSURCVHJhbnNhY3Rpb25Nb2RlOjpSZWFkb25seSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkocmV2aXNpb24gMjgz
NTAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQxLDIwICszNDEsMjAgQEAgYm9vbCBTaGFyZWRCdWZmZXI6OmludGVybmFs
bHlDb25zaXN0ZW50KAogY29uc3QgdWludDhfdCogU2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudDo6
ZGF0YSgpIGNvbnN0CiB7CiAgICAgYXV0byB2aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcigKLSAg
ICAgICAgW10oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKSB7IHJldHVybiBkYXRhLmRhdGEo
KTsgfSwKKyAgICAgICAgW10oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKSAtPiBjb25zdCB1
aW50OF90KiB7IHJldHVybiBkYXRhLmRhdGEoKTsgfSwKICNpZiBVU0UoQ0YpCi0gICAgICAgIFtd
KGNvbnN0IFJldGFpblB0cjxDRkRhdGFSZWY+JiBkYXRhKSB7IHJldHVybiBDRkRhdGFHZXRCeXRl
UHRyKGRhdGEuZ2V0KCkpOyB9LAorICAgICAgICBbXShjb25zdCBSZXRhaW5QdHI8Q0ZEYXRhUmVm
PiYgZGF0YSkgLT4gY29uc3QgdWludDhfdCogeyByZXR1cm4gQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRh
LmdldCgpKTsgfSwKICNlbmRpZgogI2lmIFVTRShHTElCKQotICAgICAgICBbXShjb25zdCBHUmVm
UHRyPEdCeXRlcz4mIGRhdGEpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihn
X2J5dGVzX2dldF9kYXRhKGRhdGEuZ2V0KCksIG51bGxwdHIpKTsgfSwKKyAgICAgICAgW10oY29u
c3QgR1JlZlB0cjxHQnl0ZXM+JiBkYXRhKSAtPiBjb25zdCB1aW50OF90KiB7IHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZ19ieXRlc19nZXRfZGF0YShkYXRhLmdldCgpLCBudWxs
cHRyKSk7IH0sCiAjZW5kaWYKICNpZiBVU0UoR1NUUkVBTUVSKQotICAgICAgICBbXShjb25zdCBS
ZWZQdHI8R3N0TWFwcGVkT3duZWRCdWZmZXI+JiBkYXRhKSB7IHJldHVybiBkYXRhLT5kYXRhKCk7
IH0sCisgICAgICAgIFtdKGNvbnN0IFJlZlB0cjxHc3RNYXBwZWRPd25lZEJ1ZmZlcj4mIGRhdGEp
IC0+IGNvbnN0IHVpbnQ4X3QqIHsgcmV0dXJuIGRhdGEtPmRhdGEoKTsgfSwKICNlbmRpZgotICAg
ICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuZGF0YSgpKTsgfSwKLSAgICAgICAgW10o
Y29uc3QgUHJvdmlkZXImIHByb3ZpZGVyKSB7IHJldHVybiBwcm92aWRlci5kYXRhKCk7IH0KKyAg
ICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFwcGVkRmlsZURhdGEmIGRhdGEpIC0+IGNvbnN0
IHVpbnQ4X3QqIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmRhdGEo
KSk7IH0sCisgICAgICAgIFtdKGNvbnN0IFByb3ZpZGVyJiBwcm92aWRlcikgLT4gY29uc3QgdWlu
dDhfdCogeyByZXR1cm4gcHJvdmlkZXIuZGF0YSgpOyB9CiAgICAgKTsKLSAgICByZXR1cm4gV1RG
Ojp2aXNpdCh2aXNpdG9yLCBtX2ltbXV0YWJsZURhdGEpOworICAgIHJldHVybiBzdGQ6OnZpc2l0
KHZpc2l0b3IsIG1faW1tdXRhYmxlRGF0YSk7CiB9CiAKIGJvb2wgU2hhcmVkQnVmZmVyOjpEYXRh
U2VnbWVudDo6Y29udGFpbnNNYXBwZWRGaWxlRGF0YSgpIGNvbnN0CkBAIC00MjUsMjAgKzQyNSwy
MCBAQCBib29sIFNoYXJlZEJ1ZmZlcjo6b3BlcmF0b3I9PShjb25zdCBTaGFyCiBzaXplX3QgU2hh
cmVkQnVmZmVyOjpEYXRhU2VnbWVudDo6c2l6ZSgpIGNvbnN0CiB7CiAgICAgYXV0byB2aXNpdG9y
ID0gV1RGOjptYWtlVmlzaXRvcigKLSAgICAgICAgW10oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBk
YXRhKSB7IHJldHVybiBkYXRhLnNpemUoKTsgfSwKKyAgICAgICAgW10oY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiBkYXRhKSAtPiBzaXplX3QgeyByZXR1cm4gZGF0YS5zaXplKCk7IH0sCiAjaWYgVVNF
KENGKQotICAgICAgICBbXShjb25zdCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiYgZGF0YSkgeyByZXR1
cm4gQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEuZ2V0KCkpOyB9LAorICAgICAgICBbXShjb25zdCBSZXRh
aW5QdHI8Q0ZEYXRhUmVmPiYgZGF0YSkgLT4gc2l6ZV90IHsgcmV0dXJuIENGRGF0YUdldExlbmd0
aChkYXRhLmdldCgpKTsgfSwKICNlbmRpZgogI2lmIFVTRShHTElCKQotICAgICAgICBbXShjb25z
dCBHUmVmUHRyPEdCeXRlcz4mIGRhdGEpIHsgcmV0dXJuIGdfYnl0ZXNfZ2V0X3NpemUoZGF0YS5n
ZXQoKSk7IH0sCisgICAgICAgIFtdKGNvbnN0IEdSZWZQdHI8R0J5dGVzPiYgZGF0YSkgLT4gc2l6
ZV90IHsgcmV0dXJuIGdfYnl0ZXNfZ2V0X3NpemUoZGF0YS5nZXQoKSk7IH0sCiAjZW5kaWYKICNp
ZiBVU0UoR1NUUkVBTUVSKQotICAgICAgICBbXShjb25zdCBSZWZQdHI8R3N0TWFwcGVkT3duZWRC
dWZmZXI+JiBkYXRhKSB7IHJldHVybiBkYXRhLT5zaXplKCk7IH0sCisgICAgICAgIFtdKGNvbnN0
IFJlZlB0cjxHc3RNYXBwZWRPd25lZEJ1ZmZlcj4mIGRhdGEpIC0+IHNpemVfdCB7IHJldHVybiBk
YXRhLT5zaXplKCk7IH0sCiAjZW5kaWYKLSAgICAgICAgW10oY29uc3QgRmlsZVN5c3RlbTo6TWFw
cGVkRmlsZURhdGEmIGRhdGEpIHsgcmV0dXJuIGRhdGEuc2l6ZSgpOyB9LAotICAgICAgICBbXShj
b25zdCBQcm92aWRlciYgcHJvdmlkZXIpIHsgcmV0dXJuIHByb3ZpZGVyLnNpemUoKTsgfQorICAg
ICAgICBbXShjb25zdCBGaWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSYgZGF0YSkgLT4gc2l6ZV90
IHsgcmV0dXJuIGRhdGEuc2l6ZSgpOyB9LAorICAgICAgICBbXShjb25zdCBQcm92aWRlciYgcHJv
dmlkZXIpIC0+IHNpemVfdCB7IHJldHVybiBwcm92aWRlci5zaXplKCk7IH0KICAgICApOwotICAg
IHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIG1faW1tdXRhYmxlRGF0YSk7CisgICAgcmV0dXJu
IHN0ZDo6dmlzaXQodmlzaXRvciwgbV9pbW11dGFibGVEYXRhKTsKIH0KIAogU2hhcmVkQnVmZmVy
RGF0YVZpZXc6OlNoYXJlZEJ1ZmZlckRhdGFWaWV3KFJlZjxTaGFyZWRCdWZmZXI6OkRhdGFTZWdt
ZW50PiYmIHNlZ21lbnQsIHNpemVfdCBwb3NpdGlvbldpdGhpblNlZ21lbnQpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwCShyZXZpc2lvbiAy
ODM1MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZm
ZXIoQ0ZEYXRhUmVmIGRhdAogUmV0YWluUHRyPENGRGF0YVJlZj4gU2hhcmVkQnVmZmVyOjpjcmVh
dGVDRkRhdGEoKSBjb25zdAogewogICAgIGlmIChtX3NlZ21lbnRzLnNpemUoKSA9PSAxKSB7Ci0g
ICAgICAgIGlmIChhdXRvIGRhdGEgPSBXVEY6OmdldF9pZjxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4o
bV9zZWdtZW50c1swXS5zZWdtZW50LT5tX2ltbXV0YWJsZURhdGEpKQorICAgICAgICBpZiAoYXV0
byBkYXRhID0gc3RkOjpnZXRfaWY8UmV0YWluUHRyPENGRGF0YVJlZj4+KCZtX3NlZ21lbnRzWzBd
LnNlZ21lbnQtPm1faW1tdXRhYmxlRGF0YSkpCiAgICAgICAgICAgICByZXR1cm4gKmRhdGE7CiAg
ICAgfQogICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKG51bGxw
dHIsIHNpemUoKSkpOwpAQCAtNjQsNyArNjQsNyBAQCB2b2lkIFNoYXJlZEJ1ZmZlcjo6aGludE1l
bW9yeU5vdE5lZWRlZFNvCiB7CiAgICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IG1fc2VnbWVu
dHMpIHsKICAgICAgICAgaWYgKGVudHJ5LnNlZ21lbnQtPmhhc09uZVJlZigpKSB7Ci0gICAgICAg
ICAgICBpZiAoYXV0byBkYXRhID0gV1RGOjpnZXRfaWY8UmV0YWluUHRyPENGRGF0YVJlZj4+KGVu
dHJ5LnNlZ21lbnQtPm1faW1tdXRhYmxlRGF0YSkpCisgICAgICAgICAgICBpZiAoYXV0byBkYXRh
ID0gc3RkOjpnZXRfaWY8UmV0YWluUHRyPENGRGF0YVJlZj4+KCZlbnRyeS5zZWdtZW50LT5tX2lt
bXV0YWJsZURhdGEpKQogICAgICAgICAgICAgICAgIE9TQWxsb2NhdG9yOjpoaW50TWVtb3J5Tm90
TmVlZGVkU29vbihjb25zdF9jYXN0PFVJbnQ4Kj4oQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhLT5nZXQo
KSkpLCBDRkRhdGFHZXRMZW5ndGgoZGF0YS0+Z2V0KCkpKTsKICAgICAgICAgfQogICAgIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dlbmVyaWMvS2V5ZWREZWNvZGVyR2VuZXJpYy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2VuZXJpYy9LZXllZERl
Y29kZXJHZW5lcmljLmNwcAkocmV2aXNpb24gMjgzNTAzKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ2VuZXJpYy9LZXllZERlY29kZXJHZW5lcmljLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgTm9kZSA9IFZhcmlhbnQ8VmVjdG9yPHVp
bnQ4X3Q+LCBib29sLCB1aW50MzJfdCwgdWludDY0X3QsIGludDMyX3QsIGludDY0X3QsIGZsb2F0
LCBkb3VibGUsIFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPERpY3Rpb25hcnk+LCBzdGQ6OnVuaXF1
ZV9wdHI8QXJyYXk+PjsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIHZvaWQgYWRk
KGNvbnN0IFN0cmluZyYga2V5LCBUJiYgdmFsdWUpIHsgbV9tYXAuYWRkKGtleSwgbWFrZVVuaXF1
ZTxOb2RlPihzdGQ6OmZvcndhcmQ8VD4odmFsdWUpKSk7IH0KKyAgICB2b2lkIGFkZChjb25zdCBT
dHJpbmcmIGtleSwgVCYmIHZhbHVlKSB7IG1fbWFwLmFkZChrZXksIG1ha2VVbmlxdWVXaXRob3V0
RmFzdE1hbGxvY0NoZWNrPE5vZGU+KHN0ZDo6Zm9yd2FyZDxUPih2YWx1ZSkpKTsgfQogICAgIE5v
ZGUqIGdldChjb25zdCBTdHJpbmcmIGtleSkgeyByZXR1cm4gbV9tYXAuZ2V0KGtleSk7IH0KIAog
cHJpdmF0ZToKQEAgLTIyMyw3ICsyMjMsNyBAQCBjb25zdCBUKiBLZXllZERlY29kZXJHZW5lcmlj
OjpnZXRQb2ludGVyCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgIHJldHVybiBXVEY6OmdldF9pZjxUPigqbm9kZSk7CisgICAgcmV0dXJuIHN0ZDo6Z2V0X2lm
PFQ+KG5vZGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAJKHJl
dmlzaW9uIDI4MzUwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlRm9udHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNyArMTYxLDcgQEAgc3RhdGlj
IEZvbnRSYW5nZXMgcmVhbGl6ZU5leHRGYWxsYmFjayhjbwogICAgICAgICAgICAgcmV0dXJuIGZv
bnRGYW1pbHlTcGVjaWZpY2F0aW9uLmZvbnRSYW5nZXMoZGVzY3JpcHRpb24pOwogICAgICAgICB9
KTsKICAgICAgICAgY29uc3QgYXV0byYgY3VycmVudEZhbWlseSA9IGRlc2NyaXB0aW9uLmVmZmVj
dGl2ZUZhbWlseUF0KGluZGV4KyspOwotICAgICAgICBhdXRvIHJhbmdlcyA9IFdURjo6dmlzaXQo
dmlzaXRvciwgY3VycmVudEZhbWlseSk7CisgICAgICAgIGF1dG8gcmFuZ2VzID0gc3RkOjp2aXNp
dCh2aXNpdG9yLCBjdXJyZW50RmFtaWx5KTsKICAgICAgICAgaWYgKCFyYW5nZXMuaXNOdWxsKCkp
CiAgICAgICAgICAgICByZXR1cm4gcmFuZ2VzOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwCShyZXZpc2lvbiAyODM1MDMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
QnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUwLDcgKzY1MCw3IEBAIGJvb2wgSXRlbUhh
bmRsZTo6c2FmZUNvcHkoSXRlbVR5cGUgaXRlbVQKIAogYm9vbCBzYWZlQ29weShJdGVtSGFuZGxl
IGRlc3RpbmF0aW9uLCBjb25zdCBEaXNwbGF5TGlzdEl0ZW0mIHNvdXJjZSkKIHsKLSAgICByZXR1
cm4gV1RGOjp2aXNpdChbJl0oY29uc3QgYXV0byYgc291cmNlKSB7CisgICAgcmV0dXJuIHN0ZDo6
dmlzaXQoWyZdKGNvbnN0IGF1dG8mIHNvdXJjZSkgewogICAgICAgICB1c2luZyBEaXNwbGF5TGlz
dEl0ZW1UeXBlID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZShz
b3VyY2UpPjo6dHlwZTsKICAgICAgICAgY29uc3RleHByIGF1dG8gaXRlbVR5cGUgPSBEaXNwbGF5
TGlzdEl0ZW1UeXBlOjppdGVtVHlwZTsKICAgICAgICAgZGVzdGluYXRpb24uZGF0YVswXSA9IHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KGl0ZW1UeXBlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtVHlwZS5jcHAJKHJldmlzaW9uIDI4MzUwMykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjc2LDcgKzI3Niw3IEBAIHNpemVfdCBwYWRkZWRTaXplT2ZUeXBl
QW5kSXRlbUluQnl0ZXMoSXQKIAogc2l6ZV90IHBhZGRlZFNpemVPZlR5cGVBbmRJdGVtSW5CeXRl
cyhjb25zdCBEaXNwbGF5TGlzdEl0ZW0mIGRpc3BsYXlMaXN0SXRlbSkKIHsKLSAgICBhdXRvIGl0
ZW1TaXplID0gV1RGOjp2aXNpdChbXShjb25zdCBhdXRvJiBpdGVtKSB7CisgICAgYXV0byBpdGVt
U2l6ZSA9IHN0ZDo6dmlzaXQoW10oY29uc3QgYXV0byYgaXRlbSkgewogICAgICAgICByZXR1cm4g
c2l6ZW9mKGl0ZW0pOwogICAgIH0sIGRpc3BsYXlMaXN0SXRlbSk7CiAgICAgcmV0dXJuIHNpemVv
Zih1aW50NjRfdCkgKyByb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdub2YodWludDY0X3QpLCBpdGVt
U2l6ZSk7CkBAIC0yODQsNyArMjg0LDcgQEAgc2l6ZV90IHBhZGRlZFNpemVPZlR5cGVBbmRJdGVt
SW5CeXRlcyhjbwogCiBJdGVtVHlwZSBkaXNwbGF5TGlzdEl0ZW1UeXBlKGNvbnN0IERpc3BsYXlM
aXN0SXRlbSYgZGlzcGxheUxpc3RJdGVtKQogewotICAgIHJldHVybiBXVEY6OnZpc2l0KFtdKGNv
bnN0IGF1dG8mIGl0ZW0pIHsKKyAgICByZXR1cm4gc3RkOjp2aXNpdChbXShjb25zdCBhdXRvJiBp
dGVtKSB7CiAgICAgICAgIHJldHVybiBpdGVtLml0ZW1UeXBlOwogICAgIH0sIGRpc3BsYXlMaXN0
SXRlbSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyLmNwcAkocmV2aXNpb24gMjgzNTAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMTYsNyArMTAxNiw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpub3RpZnkKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICB9Ci0gICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBSZWZQdHI8VHJhY2tQcml2YXRlVHlw
ZT4+JiB0cmFja3MgPSAqZ2V0PEhhc2hNYXA8QXRvbVN0cmluZywgUmVmUHRyPFRyYWNrUHJpdmF0
ZVR5cGU+Pio+KHZhcmlhbnRUcmFja3MpOworICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUmVmUHRy
PFRyYWNrUHJpdmF0ZVR5cGU+PiYgdHJhY2tzID0gKldURjo6Z2V0PEhhc2hNYXA8QXRvbVN0cmlu
ZywgUmVmUHRyPFRyYWNrUHJpdmF0ZVR5cGU+Pio+KHZhcmlhbnRUcmFja3MpOwogCiAgICAgLy8g
SWdub3JlIG5vdGlmaWNhdGlvbnMgYWZ0ZXIgYSBFT1MuIFdlIGRvbid0IHdhbnQgdGhlIHRyYWNr
cyB0byBkaXNhcHBlYXIgd2hlbiB0aGUgdmlkZW8gaXMgZmluaXNoZWQuCiAgICAgaWYgKG1faXNF
bmRSZWFjaGVkICYmICh0eXBlID09IFRyYWNrVHlwZTo6QXVkaW8gfHwgdHlwZSA9PSBUcmFja1R5
cGU6OlZpZGVvKSkKQEAgLTEwNzEsMTYgKzEwNzEsMTYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6Om5vdGlmeQogICAgICAgICBBU1NFUlQoc3RyZWFtSWQgPT0gdHJhY2stPmlk
KCkpOwogICAgICAgICB0cmFja3MuYWRkKHN0cmVhbUlkLCB0cmFjay5jb3B5UmVmKCkpOwogCi0g
ICAgICAgIFZhcmlhbnQ8QXVkaW9UcmFja1ByaXZhdGUmLCBWaWRlb1RyYWNrUHJpdmF0ZSYsIElu
YmFuZFRleHRUcmFja1ByaXZhdGUmPiB2YXJpYW50VHJhY2sodHJhY2suZ2V0KCkpOworICAgICAg
ICBWYXJpYW50PEF1ZGlvVHJhY2tQcml2YXRlKiwgVmlkZW9UcmFja1ByaXZhdGUqLCBJbmJhbmRU
ZXh0VHJhY2tQcml2YXRlKj4gdmFyaWFudFRyYWNrKCZ0cmFjay5nZXQoKSk7CiAgICAgICAgIHN3
aXRjaCAodmFyaWFudFRyYWNrLmluZGV4KCkpIHsKICAgICAgICAgY2FzZSBUcmFja1R5cGU6OkF1
ZGlvOgotICAgICAgICAgICAgbV9wbGF5ZXItPmFkZEF1ZGlvVHJhY2soZ2V0PEF1ZGlvVHJhY2tQ
cml2YXRlJj4odmFyaWFudFRyYWNrKSk7CisgICAgICAgICAgICBtX3BsYXllci0+YWRkQXVkaW9U
cmFjaygqV1RGOjpnZXQ8QXVkaW9UcmFja1ByaXZhdGUqPih2YXJpYW50VHJhY2spKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFRyYWNrVHlwZTo6VmlkZW86Ci0gICAgICAgICAg
ICBtX3BsYXllci0+YWRkVmlkZW9UcmFjayhnZXQ8VmlkZW9UcmFja1ByaXZhdGUmPih2YXJpYW50
VHJhY2spKTsKKyAgICAgICAgICAgIG1fcGxheWVyLT5hZGRWaWRlb1RyYWNrKCpXVEY6OmdldDxW
aWRlb1RyYWNrUHJpdmF0ZSo+KHZhcmlhbnRUcmFjaykpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgVHJhY2tUeXBlOjpUZXh0OgotICAgICAgICAgICAgbV9wbGF5ZXItPmFkZFRl
eHRUcmFjayhnZXQ8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSY+KHZhcmlhbnRUcmFjaykpOworICAg
ICAgICAgICAgbV9wbGF5ZXItPmFkZFRleHRUcmFjaygqV1RGOjpnZXQ8SW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZSo+KHZhcmlhbnRUcmFjaykpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
ckJ1ZmZlci5jcHAJKHJldmlzaW9uIDI4MzUwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgzLDEyICs4MywxMiBAQCBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5CiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxCaXRtYXBUZXh0dXJlR0wm
PihjbG9uZWRUZXh0dXJlLmdldCgpKS5jb3B5RnJvbUV4dGVybmFsVGV4dHVyZSh0ZXh0dXJlLmlk
KTsKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyQnVmZmVyPihXVEZNb3ZlKGNsb25lZFRleHR1cmUpLCBtX2V4dHJhRmxhZ3MpOwogICAgICAg
ICB9LAotICAgICAgICBbXShjb25zdCBZVVZUZXh0dXJlJikKKyAgICAgICAgW10oY29uc3QgWVVW
VGV4dHVyZSYpIC0+IHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1
ZmZlcj4KICAgICAgICAgewogICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9LAotICAgICAgICBbXShjb25zdCBFeHRlcm5h
bE9FU1RleHR1cmUmKQorICAgICAgICBbXShjb25zdCBFeHRlcm5hbE9FU1RleHR1cmUmKSAtPiBz
dGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+CiAgICAgICAg
IHsKICAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja01lZGlhRGV2aWNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrTWVkaWFE
ZXZpY2UuaAkocmV2aXNpb24gMjgzNTAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9j
ay9Nb2NrTWVkaWFEZXZpY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDcgKzIwMSw3IEBAIHN0
cnVjdCBNb2NrTWVkaWFEZXZpY2UgewogICAgIHsKICAgICAgICAgZW5jb2RlciA8PCBwZXJzaXN0
ZW50SWQ7CiAgICAgICAgIGVuY29kZXIgPDwgbGFiZWw7Ci0gICAgICAgIHN3aXRjaE9uKHByb3Bl
cnRpZXMsIFsmXShjb25zdCBNb2NrTWljcm9waG9uZVByb3BlcnRpZXMmIHByb3BlcnRpZXMpIHsK
KyAgICAgICAgV1RGOjpzd2l0Y2hPbihwcm9wZXJ0aWVzLCBbJl0oY29uc3QgTW9ja01pY3JvcGhv
bmVQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzKSB7CiAgICAgICAgICAgICBlbmNvZGVyIDw8ICh1aW50
OF90KTE7CiAgICAgICAgICAgICBlbmNvZGVyIDw8IHByb3BlcnRpZXM7CiAgICAgICAgIH0sIFsm
XShjb25zdCBNb2NrU3BlYWtlclByb3BlcnRpZXMmIHByb3BlcnRpZXMpIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCShyZXZpc2lvbiAyODM1
MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTI3LDcgKzEyNyw3IEBAIHVuc2lnbmVkIEZvcm1EYXRhOjppbWFnZU9y
TWVkaWFGaWxlc0NvdW4KIHsKICAgICB1bnNpZ25lZCBpbWFnZU9yTWVkaWFGaWxlc0NvdW50ID0g
MDsKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBtX2VsZW1lbnRzKSB7Ci0gICAgICAgIGF1dG8q
IGVuY29kZWRGaWxlRGF0YSA9IFdURjo6Z2V0X2lmPEZvcm1EYXRhRWxlbWVudDo6RW5jb2RlZEZp
bGVEYXRhPihlbGVtZW50LmRhdGEpOworICAgICAgICBhdXRvKiBlbmNvZGVkRmlsZURhdGEgPSBz
dGQ6OmdldF9pZjxGb3JtRGF0YUVsZW1lbnQ6OkVuY29kZWRGaWxlRGF0YT4oJmVsZW1lbnQuZGF0
YSk7CiAgICAgICAgIGlmICghZW5jb2RlZEZpbGVEYXRhKQogICAgICAgICAgICAgY29udGludWU7
CiAKQEAgLTE0MCw3ICsxNDAsNyBAQCB1bnNpZ25lZCBGb3JtRGF0YTo6aW1hZ2VPck1lZGlhRmls
ZXNDb3VuCiAKIHVpbnQ2NF90IEZvcm1EYXRhRWxlbWVudDo6bGVuZ3RoSW5CeXRlcyhjb25zdCBG
dW5jdGlvbjx1aW50NjRfdChjb25zdCBVUkwmKT4mIGJsb2JTaXplKSBjb25zdAogewotICAgIHJl
dHVybiBzd2l0Y2hPbihkYXRhLAorICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKGRhdGEsCiAgICAg
ICAgIFtdIChjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ5dGVzKSB7CiAgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ5dGVzLnNpemUoKSk7CiAgICAgICAgIH0sIFtdIChj
b25zdCBGb3JtRGF0YUVsZW1lbnQ6OkVuY29kZWRGaWxlRGF0YSYgZmlsZURhdGEpIHsKQEAgLTE2
Miw3ICsxNjIsNyBAQCB1aW50NjRfdCBGb3JtRGF0YUVsZW1lbnQ6Omxlbmd0aEluQnl0ZXMoCiAK
IEZvcm1EYXRhRWxlbWVudCBGb3JtRGF0YUVsZW1lbnQ6Omlzb2xhdGVkQ29weSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIHN3aXRjaE9uKGRhdGEsCisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oZGF0
YSwKICAgICAgICAgW10gKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnl0ZXMpIHsKICAgICAgICAg
ICAgIHJldHVybiBGb3JtRGF0YUVsZW1lbnQoVmVjdG9yIHsgYnl0ZXMuZGF0YSgpLCBieXRlcy5z
aXplKCkgfSk7CiAgICAgICAgIH0sIFtdIChjb25zdCBGb3JtRGF0YUVsZW1lbnQ6OkVuY29kZWRG
aWxlRGF0YSYgZmlsZURhdGEpIHsKQEAgLTE3Nyw3ICsxNzcsNyBAQCB2b2lkIEZvcm1EYXRhOjph
cHBlbmREYXRhKGNvbnN0IHZvaWQqIGRhCiB7CiAgICAgbV9sZW5ndGhJbkJ5dGVzID0gc3RkOjpu
dWxsb3B0OwogICAgIGlmICghbV9lbGVtZW50cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHZlY3RvciA9IFdURjo6Z2V0X2lmPFZlY3Rvcjx1aW50OF90Pj4obV9lbGVtZW50cy5sYXN0
KCkuZGF0YSkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHZlY3RvciA9IHN0ZDo6Z2V0X2lmPFZlY3Rv
cjx1aW50OF90Pj4oJm1fZWxlbWVudHMubGFzdCgpLmRhdGEpKSB7CiAgICAgICAgICAgICB2ZWN0
b3ItPmFwcGVuZChzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSksIHNpemUpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yOTMsNyArMjkzLDcgQEAgVmVjdG9yPHVp
bnQ4X3Q+IEZvcm1EYXRhOjpmbGF0dGVuKCkgY29ucwogICAgIC8vIENvbmNhdGVuYXRlIGFsbCB0
aGUgYnl0ZSBhcnJheXMsIGJ1dCBvbWl0IGFueSBmaWxlcy4KICAgICBWZWN0b3I8dWludDhfdD4g
ZGF0YTsKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBtX2VsZW1lbnRzKSB7Ci0gICAgICAgIGlm
IChhdXRvKiB2ZWN0b3IgPSBXVEY6OmdldF9pZjxWZWN0b3I8dWludDhfdD4+KGVsZW1lbnQuZGF0
YSkpCisgICAgICAgIGlmIChhdXRvKiB2ZWN0b3IgPSBzdGQ6OmdldF9pZjxWZWN0b3I8dWludDhf
dD4+KCZlbGVtZW50LmRhdGEpKQogICAgICAgICAgICAgZGF0YS5hcHBlbmQodmVjdG9yLT5kYXRh
KCksIHZlY3Rvci0+c2l6ZSgpKTsKICAgICB9CiAgICAgcmV0dXJuIGRhdGE7CkBAIC0zNjcsNyAr
MzY3LDcgQEAgRm9ybURhdGFGb3JVcGxvYWQgRm9ybURhdGE6OnByZXBhcmVGb3JVcAogewogICAg
IFZlY3RvcjxTdHJpbmc+IGdlbmVyYXRlZEZpbGVzOwogICAgIGZvciAoYXV0byYgZWxlbWVudCA6
IG1fZWxlbWVudHMpIHsKLSAgICAgICAgYXV0byogZmlsZURhdGEgPSBXVEY6OmdldF9pZjxGb3Jt
RGF0YUVsZW1lbnQ6OkVuY29kZWRGaWxlRGF0YT4oZWxlbWVudC5kYXRhKTsKKyAgICAgICAgYXV0
byogZmlsZURhdGEgPSBzdGQ6OmdldF9pZjxGb3JtRGF0YUVsZW1lbnQ6OkVuY29kZWRGaWxlRGF0
YT4oJmVsZW1lbnQuZGF0YSk7CiAgICAgICAgIGlmICghZmlsZURhdGEpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgaWYgKEZpbGVTeXN0ZW06OmZpbGVUeXBlRm9sbG93aW5nU3ltbGlu
a3MoZmlsZURhdGEtPmZpbGVuYW1lKSAhPSBGaWxlU3lzdGVtOjpGaWxlVHlwZTo6RGlyZWN0b3J5
KQpAQCAtNDI1LDcgKzQyNSw3IEBAIFVSTCBGb3JtRGF0YTo6YXNCbG9iVVJMKCkgY29uc3QKICAg
ICBpZiAobV9lbGVtZW50cy5zaXplKCkgIT0gMSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAg
IGlmIChhdXRvKiBibG9iRGF0YSA9IFdURjo6Z2V0X2lmPEZvcm1EYXRhRWxlbWVudDo6RW5jb2Rl
ZEJsb2JEYXRhPihtX2VsZW1lbnRzLmZpcnN0KCkuZGF0YSkpCisgICAgaWYgKGF1dG8qIGJsb2JE
YXRhID0gc3RkOjpnZXRfaWY8Rm9ybURhdGFFbGVtZW50OjpFbmNvZGVkQmxvYkRhdGE+KCZtX2Vs
ZW1lbnRzLmZpcnN0KCkuZGF0YSkpCiAgICAgICAgIHJldHVybiBibG9iRGF0YS0+dXJsOwogICAg
IHJldHVybiB7IH07CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zv
cm1EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9G
b3JtRGF0YS5oCShyZXZpc2lvbiAyODM1MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0Zvcm1EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MywxMCArMTUzLDEwIEBAIHN0
cnVjdCBGb3JtRGF0YUVsZW1lbnQgewogICAgICAgICBpZiAoZGF0YS5pbmRleCgpICE9IG90aGVy
LmRhdGEuaW5kZXgoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKCFk
YXRhLmluZGV4KCkpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpnZXQ8MD4oZGF0YSkgPT0gV1RG
OjpnZXQ8MD4ob3RoZXIuZGF0YSk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpnZXQ8MD4oZGF0
YSkgPT0gc3RkOjpnZXQ8MD4ob3RoZXIuZGF0YSk7CiAgICAgICAgIGlmIChkYXRhLmluZGV4KCkg
PT0gMSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6OmdldDwxPihkYXRhKSA9PSBXVEY6OmdldDwx
PihvdGhlci5kYXRhKTsKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PDI+KGRhdGEpID09IFdURjo6
Z2V0PDI+KG90aGVyLmRhdGEpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PDE+KGRhdGEp
ID09IHN0ZDo6Z2V0PDE+KG90aGVyLmRhdGEpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8Mj4o
ZGF0YSkgPT0gc3RkOjpnZXQ8Mj4ob3RoZXIuZGF0YSk7CiAgICAgfQogICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBGb3JtRGF0YUVsZW1lbnQmIG90aGVyKSBjb25zdAogICAgIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvRm9ybURhdGFTdHJlYW1DRk5ldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Gb3JtRGF0
YVN0cmVhbUNGTmV0LmNwcAkocmV2aXNpb24gMjgzNTAzKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jZi9Gb3JtRGF0YVN0cmVhbUNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM3LDcgKzEzNyw3IEBAIHN0YXRpYyBib29sIGFkdmFuY2VDdXJyZW50U3RyZWFtKEZvcm1T
dHIKICAgICAvLyBDcmVhdGUgdGhlIG5ldyBzdHJlYW0uCiAgICAgRm9ybURhdGFFbGVtZW50JiBu
ZXh0SW5wdXQgPSBmb3JtLT5yZW1haW5pbmdFbGVtZW50cy5sYXN0KCk7CiAKLSAgICBib29sIHN1
Y2Nlc3MgPSBzd2l0Y2hPbihuZXh0SW5wdXQuZGF0YSwKKyAgICBib29sIHN1Y2Nlc3MgPSBXVEY6
OnN3aXRjaE9uKG5leHRJbnB1dC5kYXRhLAogICAgICAgICBbZm9ybV0gKFZlY3Rvcjx1aW50OF90
PiYgYnl0ZXMpIHsKICAgICAgICAgICAgIHNpemVfdCBzaXplID0gYnl0ZXMuc2l6ZSgpOwogICAg
ICAgICAgICAgTWFsbG9jUHRyPHVpbnQ4X3QsIFdURjo6VmVjdG9yTWFsbG9jPiBkYXRhID0gYnl0
ZXMucmVsZWFzZUJ1ZmZlcigpOwpAQCAtMzk3LDcgKzM5Nyw3IEBAIHZvaWQgc2V0SFRUUEJvZHko
Q0ZNdXRhYmxlVVJMUmVxdWVzdFJlZiAKICAgICAvLyBIYW5kbGUgdGhlIGNvbW1vbiBzcGVjaWFs
IGNhc2Ugb2Ygb25lIHBpZWNlIG9mIGZvcm0gZGF0YSwgd2l0aCBubyBmaWxlcy4KICAgICBhdXRv
JiBlbGVtZW50cyA9IGZvcm1EYXRhLT5lbGVtZW50cygpOwogICAgIGlmIChlbGVtZW50cy5zaXpl
KCkgPT0gMSAmJiAhZm9ybURhdGEtPmFsd2F5c1N0cmVhbSgpKSB7Ci0gICAgICAgIGlmIChhdXRv
KiB2ZWN0b3IgPSBXVEY6OmdldF9pZjxWZWN0b3I8dWludDhfdD4+KGVsZW1lbnRzWzBdLmRhdGEp
KSB7CisgICAgICAgIGlmIChhdXRvKiB2ZWN0b3IgPSBzdGQ6OmdldF9pZjxWZWN0b3I8dWludDhf
dD4+KCZlbGVtZW50c1swXS5kYXRhKSkgewogICAgICAgICAgICAgYXV0byBkYXRhID0gYWRvcHRD
RihDRkRhdGFDcmVhdGUobnVsbHB0ciwgdmVjdG9yLT5kYXRhKCksIHZlY3Rvci0+c2l6ZSgpKSk7
CiAgICAgICAgICAgICBDRlVSTFJlcXVlc3RTZXRIVFRQUmVxdWVzdEJvZHkocmVxdWVzdCwgZGF0
YS5nZXQoKSk7CiAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHAJKHJldmlzaW9uIDI4
MzUwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1MSw3ICszNTEsNyBAQCB2b2lkIEN1cmxIYW5kbGU6
OmVuYWJsZVNTTEZvckhvc3QoY29uc3QgCiAjaWYgT1MoV0lORE9XUykKICAgICBjdXJsX2Vhc3lf
c2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1NTTF9PUFRJT05TLCBDVVJMU1NMT1BUX05BVElWRV9D
QSk7CiAjZWxzZQotICAgIGlmIChhdXRvKiBwYXRoID0gV1RGOjpnZXRfaWY8U3RyaW5nPihzc2xI
YW5kbGUuZ2V0Q0FDZXJ0SW5mbygpKSkKKyAgICBpZiAoYXV0byogcGF0aCA9IHN0ZDo6Z2V0X2lm
PFN0cmluZz4oc3NsSGFuZGxlLmdldENBQ2VydEluZm8oKSkpCiAgICAgICAgIHNldENBQ2VydFBh
dGgocGF0aC0+dXRmOCgpLmRhdGEoKSk7CiAjZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRm9ybURhdGFTdHJlYW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRm9ybURhdGFTdHJl
YW0uY3BwCShyZXZpc2lvbiAyODM1MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybEZvcm1EYXRhU3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcg
KzEyOCw3IEBAIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBDdXJsRm9ybURhdGFTdHJlYW0KICAgICAg
ICAgICAgICAgICByZXR1cm4gcmVhZEZyb21EYXRhKGJ5dGVzLCBidWZmZXJQb3NpdGlvbiwgYnVm
ZmVyU2l6ZSk7CiAgICAgICAgICAgICB9LCBbJl0gKGNvbnN0IEZvcm1EYXRhRWxlbWVudDo6RW5j
b2RlZEZpbGVEYXRhJiBmaWxlRGF0YSkgewogICAgICAgICAgICAgICAgIHJldHVybiByZWFkRnJv
bUZpbGUoZmlsZURhdGEsIGJ1ZmZlclBvc2l0aW9uLCBidWZmZXJTaXplKTsKLSAgICAgICAgICAg
IH0sIFtdIChjb25zdCBGb3JtRGF0YUVsZW1lbnQ6OkVuY29kZWRCbG9iRGF0YSYpIHsKKyAgICAg
ICAgICAgIH0sIFtdIChjb25zdCBGb3JtRGF0YUVsZW1lbnQ6OkVuY29kZWRCbG9iRGF0YSYpIC0+
IHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiB7CiAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAgICAgICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVy
aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9DdXJsU1NMVmVyaWZpZXIuY3BwCShyZXZpc2lvbiAyODM1MDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNyArNDQsNyBAQCBDdXJsU1NMVmVyaWZpZXI6OkN1cmxTU0xWZXJpZmllcih2
b2lkKiBzCiAgICAgU1NMX0NUWF9zZXRfdmVyaWZ5KGN0eCwgU1NMX0NUWF9nZXRfdmVyaWZ5X21v
ZGUoY3R4KSwgdmVyaWZ5Q2FsbGJhY2spOwogCiAjaWYgZGVmaW5lZChMSUJSRVNTTF9WRVJTSU9O
X05VTUJFUikKLSAgICBpZiAoYXV0byBkYXRhID0gV1RGOjpnZXRfaWY8Q2VydGlmaWNhdGVJbmZv
OjpDZXJ0aWZpY2F0ZT4oc3NsSGFuZGxlLmdldENBQ2VydEluZm8oKSkpCisgICAgaWYgKGF1dG8g
ZGF0YSA9IHN0ZDo6Z2V0X2lmPENlcnRpZmljYXRlSW5mbzo6Q2VydGlmaWNhdGU+KCZzc2xIYW5k
bGUuZ2V0Q0FDZXJ0SW5mbygpKSkKICAgICAgICAgU1NMX0NUWF9sb2FkX3ZlcmlmeV9tZW0oY3R4
LCBzdGF0aWNfY2FzdDx2b2lkKj4oY29uc3RfY2FzdDx1aW50OF90Kj4oZGF0YS0+ZGF0YSgpKSks
IGRhdGEtPnNpemUoKSk7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAko
cmV2aXNpb24gMjgzNTAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAxLDcg
QEAgdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZVNvdXBNZXNzYWdlQgogICAgIC8vIEhhbmRs
ZSB0aGUgY29tbW9uIHNwZWNpYWwgY2FzZSBvZiBvbmUgcGllY2Ugb2YgZm9ybSBkYXRhLCB3aXRo
IG5vIGZpbGVzLgogICAgIGF1dG8mIGVsZW1lbnRzID0gZm9ybURhdGEtPmVsZW1lbnRzKCk7CiAg
ICAgaWYgKGVsZW1lbnRzLnNpemUoKSA9PSAxICYmICFmb3JtRGF0YS0+YWx3YXlzU3RyZWFtKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHZlY3RvciA9IFdURjo6Z2V0X2lmPFZlY3Rvcjx1aW50OF90
Pj4oZWxlbWVudHNbMF0uZGF0YSkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHZlY3RvciA9IHN0ZDo6
Z2V0X2lmPFZlY3Rvcjx1aW50OF90Pj4oJmVsZW1lbnRzWzBdLmRhdGEpKSB7CiAjaWYgVVNFKFNP
VVAyKQogICAgICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKHNvdXBNZXNzYWdlLT5y
ZXF1ZXN0X2JvZHksIFNPVVBfTUVNT1JZX1RFTVBPUkFSWSwgdmVjdG9yLT5kYXRhKCksIHZlY3Rv
ci0+c2l6ZSgpKTsKICNlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29s
dmVGb3JGb250UmF3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZVJlc29sdmVGb3JGb250UmF3LmNwcAkocmV2aXNpb24gMjgzNTAzKQorKysgU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
OCw3ICsxNTgsNyBAQCBzdGQ6Om9wdGlvbmFsPEZvbnRDYXNjYWRlPiByZXNvbHZlRm9yRm9uCiAg
ICAgfQogCiAgICAgaWYgKGZvbnRSYXcud2VpZ2h0KSB7Ci0gICAgICAgIGF1dG8gd2VpZ2h0ID0g
c3dpdGNoT24oKmZvbnRSYXcud2VpZ2h0LCBbJl0gKENTU1ZhbHVlSUQgaWRlbnQpIHsKKyAgICAg
ICAgYXV0byB3ZWlnaHQgPSBXVEY6OnN3aXRjaE9uKCpmb250UmF3LndlaWdodCwgWyZdIChDU1NW
YWx1ZUlEIGlkZW50KSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGlkZW50KSB7CiAgICAgICAgICAg
ICBjYXNlIENTU1ZhbHVlTm9ybWFsOgogICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxXZWln
aHRWYWx1ZSgpOwpAQCAtMTc5LDcgKzE3OSw3IEBAIHN0ZDo6b3B0aW9uYWw8Rm9udENhc2NhZGU+
IHJlc29sdmVGb3JGb24KICAgICB9CiAKICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNp
emVGcm9tSWRlbnRpZmllcihDU1NWYWx1ZUludmFsaWQpOwotICAgIGZsb2F0IHNpemUgPSBzd2l0
Y2hPbihmb250UmF3LnNpemUsIFsmXSAoQ1NTVmFsdWVJRCBpZGVudCkgeworICAgIGZsb2F0IHNp
emUgPSBXVEY6OnN3aXRjaE9uKGZvbnRSYXcuc2l6ZSwgWyZdIChDU1NWYWx1ZUlEIGlkZW50KSB7
CiAgICAgICAgIHN3aXRjaCAoaWRlbnQpIHsKICAgICAgICAgY2FzZSBDU1NWYWx1ZVh4U21hbGw6
CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVYU21hbGw6CkBAIC0xOTksNyArMTk5LDcgQEAgc3RkOjpv
cHRpb25hbDxGb250Q2FzY2FkZT4gcmVzb2x2ZUZvckZvbgogICAgICAgICAgICAgcmV0dXJuIDAu
ZjsKICAgICAgICAgfQogICAgIH0sIFsmXSAoY29uc3QgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
OjpMZW5ndGhPclBlcmNlbnRSYXcmIGxlbmd0aE9yUGVyY2VudCkgewotICAgICAgICByZXR1cm4g
c3dpdGNoT24obGVuZ3RoT3JQZXJjZW50LCBbJl0gKGNvbnN0IENTU1Byb3BlcnR5UGFyc2VySGVs
cGVyczo6TGVuZ3RoUmF3JiBsZW5ndGgpIHsKKyAgICAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24o
bGVuZ3RoT3JQZXJjZW50LCBbJl0gKGNvbnN0IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6TGVu
Z3RoUmF3JiBsZW5ndGgpIHsKICAgICAgICAgICAgIGF1dG8gZm9udENhc2NhZGUgPSBGb250Q2Fz
Y2FkZShGb250Q2FzY2FkZURlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikpOwogICAgICAgICAg
ICAgZm9udENhc2NhZGUudXBkYXRlKGNvbnRleHQuY3NzRm9udFNlbGVjdG9yKCkpOwogICAgICAg
ICAgICAgLy8gRklYTUU6IFBhc3NpbmcgbnVsbCBmb3IgdGhlIFJlbmRlclZpZXcgcGFyYW1ldGVy
IG1lYW5zIHRoYXQgdncgYW5kIHZoIHVuaXRzIHdpbGwgZXZhbHVhdGUgdG8KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyODM1MDQpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDIxLTEwLTA0ICBBbGV4IENocmlzdGVuc2VuICA8YWNo
cmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQmVnaW4gbWlncmF0aW9uIGZyb20gV1RG
OjpWYXJpYW50IHRvIHN0ZDo6dmFyaWFudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMDg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpyZXNvbHZlQmxvYlJlZmVyZW5jZXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05l
dHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Jlc291cmNlTG9hZFBhcmFtZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgICogUGxhdGZv
cm0vSVBDL0FyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgIChJUEM6OlZhcmlhbnRDb2Rlcjo6ZW5j
b2RlKToKKyAgICAgICAgKElQQzo6VmFyaWFudENvZGVyOjpkZWNvZGUpOgorICAgICAgICAqIFBs
YXRmb3JtL0lQQy9Gb3JtRGF0YVJlZmVyZW5jZS5oOgorICAgICAgICAoSVBDOjpGb3JtRGF0YVJl
ZmVyZW5jZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvTWVzc2FnZVJl
Y2VpdmVRdWV1ZU1hcC5jcHA6CisgICAgICAgIChJUEM6Ok1lc3NhZ2VSZWNlaXZlUXVldWVNYXA6
OmdldCBjb25zdCk6CisgICAgICAgICogU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRp
YVNhbXBsZUN1cnNvci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhU2FtcGxlQ3Vyc29yOjps
b2NhdGVJdGVyYXRvciBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRo
ZW50aWNhdGlvblBhbmVsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24vU2ltdWxh
dGVkSW5wdXREaXNwYXRjaGVyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dLU2FmZUJy
b3dzaW5nV2FybmluZy5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZUltYWdlQnVmZmVyUHJveHkuaDoKKwogMjAyMS0xMC0wNCAgQWxleCBDaHJpc3RlbnNlbiAgPGFj
aHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEVuYWJsZSBQQ00gZGVidWcgbW9kZSBw
ZXIgV2Vic2l0ZURhdGFTdG9yZSBpbnN0ZWFkIG9mIHByb2Nlc3MtZ2xvYmFsCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24gMjgzNTAzKQorKysgU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ3MCw3ICs0NzAsNyBAQCBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OkJsb2JE
YXRhRmlsZVJlZmVyCiAgICAgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpCbG9iRGF0YUZpbGVSZWZl
cmVuY2U+PiBmaWxlczsKICAgICBpZiAoYXV0byogYm9keSA9IGxvYWRQYXJhbWV0ZXJzLnJlcXVl
c3QuaHR0cEJvZHkoKSkgewogICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBib2R5LT5lbGVt
ZW50cygpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogYmxvYkRhdGEgPSBXVEY6OmdldF9pZjxG
b3JtRGF0YUVsZW1lbnQ6OkVuY29kZWRCbG9iRGF0YT4oZWxlbWVudC5kYXRhKSkKKyAgICAgICAg
ICAgIGlmIChhdXRvKiBibG9iRGF0YSA9IHN0ZDo6Z2V0X2lmPEZvcm1EYXRhRWxlbWVudDo6RW5j
b2RlZEJsb2JEYXRhPigmZWxlbWVudC5kYXRhKSkKICAgICAgICAgICAgICAgICBmaWxlcy5hcHBl
bmRWZWN0b3IoYmxvYlJlZ2lzdHJ5LmZpbGVzSW5CbG9iKGJsb2JEYXRhLT51cmwpKTsKICAgICAg
ICAgfQogICAgICAgICBjb25zdF9jYXN0PFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCY+KGxvYWRQ
YXJhbWV0ZXJzLnJlcXVlc3QpLnNldEhUVFBCb2R5KGJvZHktPnJlc29sdmVCbG9iUmVmZXJlbmNl
cygmYmxvYlJlZ2lzdHJ5KSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmNwcAkocmV2
aXNpb24gMjgzNTAzKQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVz
b3VyY2VMb2FkUGFyYW1ldGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAg
dm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVyczo6ZW5jbwogCiAgICAgICAgIFZlY3Rv
cjxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IHJlcXVlc3RCb2R5U2FuZGJveEV4dGVuc2lvbnM7
CiAgICAgICAgIGZvciAoY29uc3QgRm9ybURhdGFFbGVtZW50JiBlbGVtZW50IDogcmVxdWVzdC5o
dHRwQm9keSgpLT5lbGVtZW50cygpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogZmlsZURhdGEg
PSBXVEY6OmdldF9pZjxGb3JtRGF0YUVsZW1lbnQ6OkVuY29kZWRGaWxlRGF0YT4oZWxlbWVudC5k
YXRhKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIGZpbGVEYXRhID0gc3RkOjpnZXRfaWY8Rm9y
bURhdGFFbGVtZW50OjpFbmNvZGVkRmlsZURhdGE+KCZlbGVtZW50LmRhdGEpKSB7CiAgICAgICAg
ICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoID0gZmlsZURhdGEtPmZpbGVuYW1lOwogICAgICAg
ICAgICAgICAgIGlmIChhdXRvIGhhbmRsZSA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZShwYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkT25seSkpCiAgICAgICAgICAgICAg
ICAgICAgIHJlcXVlc3RCb2R5U2FuZGJveEV4dGVuc2lvbnMuYXBwZW5kKFdURk1vdmUoKmhhbmRs
ZSkpOwpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5o
CShyZXZpc2lvbiAyODM1MDMpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVu
dENvZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MDcsNyArNzA3LDcgQEAgc3RydWN0IFZhcmlh
bnRDb2RlciB7CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IFdURjo6VmFyaWFudDxUeXBlcy4uLj4mIHZhcmlhbnQsIHVuc2lnbmVkIGkpCiAgICAgewogICAg
ICAgICBpZiAoaSA9PSBpbmRleCkgewotICAgICAgICAgICAgZW5jb2RlciA8PCBXVEY6OmdldDxp
bmRleD4odmFyaWFudCk7CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0ZDo6Z2V0PGluZGV4Pih2
YXJpYW50KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBWYXJpYW50
Q29kZXI8aW5kZXggLSAxLCBUeXBlcy4uLj46OmVuY29kZShlbmNvZGVyLCB2YXJpYW50LCBpKTsK
QEAgLTcxNiw3ICs3MTYsNyBAQCBzdHJ1Y3QgVmFyaWFudENvZGVyIHsKICAgICBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxXVEY6OlZhcmlhbnQ8VHlwZXMuLi4+PiBkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
ciwgdW5zaWduZWQgaSkKICAgICB7CiAgICAgICAgIGlmIChpID09IGluZGV4KSB7Ci0gICAgICAg
ICAgICBzdGQ6Om9wdGlvbmFsPHR5cGVuYW1lIFdURjo6dmFyaWFudF9hbHRlcm5hdGl2ZTxpbmRl
eCwgV1RGOjpWYXJpYW50PFR5cGVzLi4uPj46OnR5cGU+IG9wdGlvbmFsOworICAgICAgICAgICAg
c3RkOjpvcHRpb25hbDx0eXBlbmFtZSBzdGQ6OnZhcmlhbnRfYWx0ZXJuYXRpdmU8aW5kZXgsIFdU
Rjo6VmFyaWFudDxUeXBlcy4uLj4+Ojp0eXBlPiBvcHRpb25hbDsKICAgICAgICAgICAgIGRlY29k
ZXIgPj4gb3B0aW9uYWw7CiAgICAgICAgICAgICBpZiAoIW9wdGlvbmFsKQogICAgICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CkBAIC03MzEsMTMgKzczMSwxMyBAQCBzdHJ1Y3QgVmFy
aWFudENvZGVyPDAsIFR5cGVzLi4uPiB7CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IFdURjo6VmFyaWFudDxUeXBlcy4uLj4mIHZhcmlhbnQsIHVuc2lnbmVk
IGkpCiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKGksICFpKTsKLSAgICAgICAgZW5jb2Rl
ciA8PCBXVEY6OmdldDwwPih2YXJpYW50KTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGQ6OmdldDww
Pih2YXJpYW50KTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V1RGOjpW
YXJpYW50PFR5cGVzLi4uPj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIsIHVuc2lnbmVkIGkpCiAg
ICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKGksICFpKTsKLSAgICAgICAgc3RkOjpvcHRpb25h
bDx0eXBlbmFtZSBXVEY6OnZhcmlhbnRfYWx0ZXJuYXRpdmU8MCwgV1RGOjpWYXJpYW50PFR5cGVz
Li4uPj46OnR5cGU+IG9wdGlvbmFsOworICAgICAgICBzdGQ6Om9wdGlvbmFsPHR5cGVuYW1lIHN0
ZDo6dmFyaWFudF9hbHRlcm5hdGl2ZTwwLCBXVEY6OlZhcmlhbnQ8VHlwZXMuLi4+Pjo6dHlwZT4g
b3B0aW9uYWw7CiAgICAgICAgIGRlY29kZXIgPj4gb3B0aW9uYWw7CiAgICAgICAgIGlmICghb3B0
aW9uYWwpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwpJbmRleDogU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvRm9ybURhdGFSZWZlcmVuY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Gb3JtRGF0YVJlZmVyZW5jZS5oCShyZXZpc2lvbiAyODM1
MDMpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Gb3JtRGF0YVJlZmVyZW5jZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKIAogICAgICAgICBWZWN0b3I8
V2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGU+IHNhbmRib3hFeHRlbnNpb25IYW5kbGVz
OwogICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBtX2RhdGEtPmVsZW1lbnRzKCkpIHsKLSAg
ICAgICAgICAgIGlmIChhdXRvKiBmaWxlRGF0YSA9IFdURjo6Z2V0X2lmPFdlYkNvcmU6OkZvcm1E
YXRhRWxlbWVudDo6RW5jb2RlZEZpbGVEYXRhPihlbGVtZW50LmRhdGEpKSB7CisgICAgICAgICAg
ICBpZiAoYXV0byogZmlsZURhdGEgPSBzdGQ6OmdldF9pZjxXZWJDb3JlOjpGb3JtRGF0YUVsZW1l
bnQ6OkVuY29kZWRGaWxlRGF0YT4oJmVsZW1lbnQuZGF0YSkpIHsKICAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcmIHBhdGggPSBmaWxlRGF0YS0+ZmlsZW5hbWU7CiAgICAgICAgICAgICAgICAg
aWYgKGF1dG8gaGFuZGxlID0gV2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUo
cGF0aCwgV2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkT25seSkpCiAgICAgICAg
ICAgICAgICAgICAgIHNhbmRib3hFeHRlbnNpb25IYW5kbGVzLmFwcGVuZChXVEZNb3ZlKCpoYW5k
bGUpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL01lc3NhZ2VSZWNlaXZlUXVl
dWVNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL01lc3Nh
Z2VSZWNlaXZlUXVldWVNYXAuY3BwCShyZXZpc2lvbiAyODM1MDMpCisrKyBTb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9NZXNzYWdlUmVjZWl2ZVF1ZXVlTWFwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTUsNyArNTUsNyBAQCBNZXNzYWdlUmVjZWl2ZVF1ZXVlKiBNZXNzYWdlUmVjZWl2ZVF1ZXVl
CiAgICAgfQogICAgIGlmIChpdCA9PSBtX3F1ZXVlcy5lbmQoKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgcmV0dXJuIFdURjo6dmlzaXQoCisgICAgcmV0dXJuIHN0ZDo6dmlzaXQoCiAg
ICAgICAgIFdURjo6bWFrZVZpc2l0b3IoCiAgICAgICAgICAgICBbXShjb25zdCBzdGQ6OnVuaXF1
ZV9wdHI8TWVzc2FnZVJlY2VpdmVRdWV1ZT4mIHF1ZXVlKSB7IHJldHVybiBxdWV1ZS5nZXQoKTsg
fSwKICAgICAgICAgICAgIFtdKE1lc3NhZ2VSZWNlaXZlUXVldWUqIHF1ZXVlKSB7IHJldHVybiBx
dWV1ZTsgfQpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVy
L01lZGlhU2FtcGxlQ3Vyc29yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVDdXJzb3IuY3BwCShyZXZpc2lvbiAy
ODM1MDMpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVk
aWFTYW1wbGVDdXJzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsMTMgKzE1MywxMSBAQCBz
dGQ6Om9wdGlvbmFsPHR5cGVuYW1lIE9yZGVyZWRNYXA6Oml0ZXJhCiAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAgICAgICAgIHJldHVy
biBsb2NhdGVJdGVyYXRvcihzYW1wbGVzLCBoYXNBbGxTYW1wbGVzKTsKLSAgICAgICAgfSwKLSAg
ICAgICAgWyZdKGNvbnN0IGF1dG8mIG90aGVySXRlcmF0b3IpIHsKKyAgICAgICAgfSwgWyZdKGNv
bnN0IGF1dG8mIG90aGVySXRlcmF0b3IpIC0+IHN0ZDo6b3B0aW9uYWw8SXRlcmF0b3I+IHsKICAg
ICAgICAgICAgIGFzc2VydElzSGVsZChtX2xvY2F0b3JMb2NrKTsKICAgICAgICAgICAgIG1fbG9j
YXRvciA9IG90aGVySXRlcmF0b3ItPnNlY29uZC0+cHJlc2VudGF0aW9uVGltZSgpOwogICAgICAg
ICAgICAgcmV0dXJuIGxvY2F0ZUl0ZXJhdG9yKHNhbXBsZXMsIGhhc0FsbFNhbXBsZXMpOwotICAg
ICAgICB9LAotICAgICAgICBbJl0oY29uc3QgSXRlcmF0b3ImIGl0ZXJhdG9yKSB7CisgICAgICAg
IH0sIFsmXShjb25zdCBJdGVyYXRvciYgaXRlcmF0b3IpIC0+IHN0ZDo6b3B0aW9uYWw8SXRlcmF0
b3I+IHsKICAgICAgICAgICAgIHJldHVybiBpdGVyYXRvcjsKICAgICAgICAgfQogICAgICk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJV2ViQXV0aGVudGljYXRpb25QYW5l
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElXZWJBdXRo
ZW50aWNhdGlvblBhbmVsLmgJKHJldmlzaW9uIDI4MzUwMykKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9BUElXZWJBdXRoZW50aWNhdGlvblBhbmVsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNpbmNsdWRlIDxXZWJDb3Jl
L0F1dGhlbnRpY2F0b3JUcmFuc3BvcnQuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+Cisj
aW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BdXRvbWF0aW9uL1NpbXVsYXRlZElucHV0RGlzcGF0Y2hlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vU2ltdWxhdGVkSW5wdXREaXNwYXRjaGVy
LmgJKHJldmlzaW9uIDI4MzUwMykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRp
b24vU2ltdWxhdGVkSW5wdXREaXNwYXRjaGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0
LDcgQEAKICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9v
cC5oPgogI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2FmZUJyb3dzaW5nV2Fy
bmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2Fm
ZUJyb3dzaW5nV2FybmluZy5oCShyZXZpc2lvbiAyODM1MDMpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93c2luZ1dhcm5pbmcuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsNyBAQAogI2ltcG9ydCA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAjaW1wb3J0
IDx3dGYvUmVmUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYv
VmFyaWFudC5oPgogI2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+CiAKICNpZiBQTEFURk9STShN
QUMpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUlt
YWdlQnVmZmVyUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAkocmV2aXNpb24gMjgzNTAzKQor
KysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZl
clByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzOSw3ICszMzksNyBAQCBwcm90ZWN0ZWQ6CiAK
ICAgICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBlbmNvZGVJdGVtT3V0T2ZMaW5lKGNv
bnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdEl0ZW0mIGl0ZW0pIGNvbnN0IGZp
bmFsCiAgICAgewotICAgICAgICByZXR1cm4gV1RGOjp2aXNpdChbXShjb25zdCBhdXRvJiBkaXNw
bGF5TGlzdEl0ZW0pIC0+IFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IHsKKyAgICAgICAg
cmV0dXJuIHN0ZDo6dmlzaXQoW10oY29uc3QgYXV0byYgZGlzcGxheUxpc3RJdGVtKSAtPiBSZWZQ
dHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiB7CiAgICAgICAgICAgICB1c2luZyBEaXNwbGF5TGlz
dEl0ZW1UeXBlID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZShk
aXNwbGF5TGlzdEl0ZW0pPjo6dHlwZTsKICAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoIURpc3Bs
YXlMaXN0SXRlbVR5cGU6OmlzSW5saW5lSXRlbSkKICAgICAgICAgICAgICAgICByZXR1cm4gSVBD
OjpFbmNvZGVyOjplbmNvZGVTaW5nbGVPYmplY3Q8RGlzcGxheUxpc3RJdGVtVHlwZT4oZGlzcGxh
eUxpc3RJdGVtKTsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDI4MzUwMykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtNiw2ICs2LDIwIEBACiAKICAgICAgICAgKiBDSVN1cHBvcnQvZXdzLWJ1aWxkL21h
c3Rlci5jZmc6CiAKKzIwMjEtMTAtMDQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5A
d2Via2l0Lm9yZz4KKworICAgICAgICBCZWdpbiBtaWdyYXRpb24gZnJvbSBXVEY6OlZhcmlhbnQg
dG8gc3RkOjp2YXJpYW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzEwODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hlci5jcHA6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjphZGQpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1Zh
cmlhbnQuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC5tbToK
KyAgICAgICAgKGFkZFZhbHVlc1RvVGFibGUpOgorCiAyMDIxLTEwLTAzICBEYXZpZCBLaWx6ZXIg
IDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgV1RGOjpSZXRhaW5QdHI8PiBhbGxvd3Mg
YXNzaWdubWVudCBvZiB0d28gcG9pbnRlciB0eXBlcyB0aGF0IGFyZSBub3QgYXNzaWduYWJsZQpJ
bmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoZXIuY3BwCShyZXZpc2lvbiAy
ODM1MDMpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDAsNyArMjAwLDcgQEAgc3RydWN0IEhhc2hlckFkZEN1c3RvbTIgeyB9
OwogCiB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgSGFzaGVyQWRkQ3VzdG9tMiYpCiB7
Ci0gICAgYWRkKGhhc2hlciwgeyAxLCAyLCAzLCA0IH0pOworICAgIGFkZChoYXNoZXIsIHN0ZDo6
aW5pdGlhbGl6ZXJfbGlzdDxpbnQ+IHsgMSwgMiwgMywgNCB9KTsKIH0KIAogVEVTVChXVEYsIEhh
c2hlcl9jdXN0b20pCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WYXJpYW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WYXJpYW50
LmNwcAkocmV2aXNpb24gMjgzNTAzKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
VmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDE4ICs1NCwxOCBAQCBURVNUKFdURl9W
YXJpYW50LCBJbml0aWFsKQogVEVTVChXVEZfVmFyaWFudCwgQmFzaWMpCiB7CiAgICAgVmFyaWFu
dDxpbnQsIGRvdWJsZT4gdmFyaWFudCA9IDE7Ci0gICAgRVhQRUNUX1RSVUUodmFyaWFudC5pbmRl
eCgpID09IDApOwotICAgIEVYUEVDVF9UUlVFKFdURjo6Z2V0PGludD4odmFyaWFudCkgPT0gMSk7
Ci0gICAgRVhQRUNUX1RSVUUoKldURjo6Z2V0X2lmPGludD4odmFyaWFudCkgPT0gMSk7Ci0gICAg
RVhQRUNUX1RSVUUoV1RGOjpnZXRfaWY8ZG91YmxlPih2YXJpYW50KSA9PSBudWxscHRyKTsKKyAg
ICBFWFBFQ1RfRVEodmFyaWFudC5pbmRleCgpLCAwdSk7CisgICAgRVhQRUNUX0VRKFdURjo6Z2V0
PGludD4odmFyaWFudCksIDEpOworICAgIEVYUEVDVF9FUSgqc3RkOjpnZXRfaWY8aW50PigmdmFy
aWFudCksIDEpOworICAgIEVYUEVDVF9FUShzdGQ6OmdldF9pZjxkb3VibGU+KCZ2YXJpYW50KSwg
bnVsbHB0cik7CiAgICAgRVhQRUNUX1RSVUUoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxpbnQ+KHZh
cmlhbnQpKTsKICAgICBFWFBFQ1RfRkFMU0UoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxkb3VibGU+
KHZhcmlhbnQpKTsKIAogICAgIHZhcmlhbnQgPSAxLjA7Ci0gICAgRVhQRUNUX1RSVUUodmFyaWFu
dC5pbmRleCgpID09IDEpOwotICAgIEVYUEVDVF9UUlVFKFdURjo6Z2V0PGRvdWJsZT4odmFyaWFu
dCkgPT0gMSk7Ci0gICAgRVhQRUNUX1RSVUUoKldURjo6Z2V0X2lmPGRvdWJsZT4odmFyaWFudCkg
PT0gMS4wKTsKLSAgICBFWFBFQ1RfVFJVRShXVEY6OmdldF9pZjxpbnQ+KHZhcmlhbnQpID09IG51
bGxwdHIpOworICAgIEVYUEVDVF9FUSh2YXJpYW50LmluZGV4KCksIDF1KTsKKyAgICBFWFBFQ1Rf
RVEoV1RGOjpnZXQ8ZG91YmxlPih2YXJpYW50KSwgMSk7CisgICAgRVhQRUNUX0VRKCpzdGQ6Omdl
dF9pZjxkb3VibGU+KCZ2YXJpYW50KSwgMS4wKTsKKyAgICBFWFBFQ1RfRVEoc3RkOjpnZXRfaWY8
aW50PigmdmFyaWFudCksIG51bGxwdHIpOwogICAgIEVYUEVDVF9UUlVFKFdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8ZG91YmxlPih2YXJpYW50KSk7CiAgICAgRVhQRUNUX0ZBTFNFKFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8aW50Pih2YXJpYW50KSk7CiB9CkBAIC05NSwxNyArOTUsMTcgQEAgVEVTVChX
VEZfVmFyaWFudCwgQmFzaWNWaXNpdG9yKQogICAgIFR5cGUgdHlwZSA9IFR5cGU6Ok5vbmU7CiAK
ICAgICBWYXJpYW50PGludCwgZmxvYXQsIFN0cmluZz4gdmFyaWFudCA9IDg7Ci0gICAgV1RGOjp2
aXNpdChWaXNpdG9yKHR5cGUpLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0KFZpc2l0b3IodHlw
ZSksIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6OkludCA9PSB0eXBlKTsKIAogCiAg
ICAgdmFyaWFudCA9IDEuMGY7Ci0gICAgV1RGOjp2aXNpdChWaXNpdG9yKHR5cGUpLCB2YXJpYW50
KTsKKyAgICBzdGQ6OnZpc2l0KFZpc2l0b3IodHlwZSksIHZhcmlhbnQpOwogICAgIEVYUEVDVF9U
UlVFKFR5cGU6OkZsb2F0ID09IHR5cGUpOwogCiAKICAgICB2YXJpYW50ID0gImhlbGxvIjsKLSAg
ICBXVEY6OnZpc2l0KFZpc2l0b3IodHlwZSksIHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQoVmlz
aXRvcih0eXBlKSwgdmFyaWFudCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6U3RyaW5nID09IHR5
cGUpOwogfQogCkBAIC0xMjgsMTEgKzEyOCwxMSBAQCBURVNUKFdURl9WYXJpYW50LCBSZXRhaW5Q
dHIpCiAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcmVmUHRyOwogICAgIFJldGFpblB0cjxDRkRhdGFS
ZWY+IHJldGFpblB0cjsKICAgICBWYXJpYW50PFJlZlB0cjxSZWZMb2dnZXI+LCBSZXRhaW5QdHI8
Q0ZEYXRhUmVmPj4gdmFyaWFudChXVEZNb3ZlKHJlZlB0cikpOwotICAgIFdURjo6dmlzaXQodmlz
aXRvciwgdmFyaWFudCk7CisgICAgc3RkOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKICAgICBF
WFBFQ1RfVFJVRShUeXBlOjpSZWZQdHIgPT0gdHlwZSk7CiAgICAgCiAgICAgdmFyaWFudCA9IFdU
Rk1vdmUocmV0YWluUHRyKTsKLSAgICBXVEY6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAg
IHN0ZDo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6UmV0
YWluUHRyID09IHR5cGUpOwogfQogI2VuZGlmCkBAIC0xNTUsMTcgKzE1NSwxNyBAQCBURVNUKFdU
Rl9WYXJpYW50LCBWaXNpdG9yVXNpbmdNYWtlVmlzaXRvCiAgICAgKTsKIAogICAgIFZhcmlhbnQ8
aW50LCBmbG9hdCwgU3RyaW5nPiB2YXJpYW50ID0gODsKLSAgICBXVEY6OnZpc2l0KHZpc2l0b3Is
IHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CiAgICAgRVhQRUNU
X1RSVUUoVHlwZTo6SW50ID09IHR5cGUpOwogCiAKICAgICB2YXJpYW50ID0gMS4wZjsKLSAgICBX
VEY6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQodmlzaXRvciwgdmFy
aWFudCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6RmxvYXQgPT0gdHlwZSk7CiAKIAogICAgIHZh
cmlhbnQgPSAiaGVsbG8iOwotICAgIFdURjo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CisgICAg
c3RkOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKICAgICBFWFBFQ1RfVFJVRShUeXBlOjpTdHJp
bmcgPT0gdHlwZSk7CiB9CiAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC5tbQko
cmV2aXNpb24gMjgzNTAzKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQs
NyBAQCB2b2lkIGFkZFZhbHVlc1RvVGFibGUoV2ViQ29yZTo6U1FMaXRlRGF0CiAgICAgICAgIH0s
IFsmXSAoZG91YmxlIHJlYWwpIHsKICAgICAgICAgICAgIHJldHVybiBzdGF0ZW1lbnQtPmJpbmRE
b3VibGUoaSArIDEsIHJlYWwpOwogICAgICAgICB9KTsKLSAgICAgICAgYXV0byByZXN1bHQgPSBX
VEY6OnZpc2l0KHZpc2l0b3IsIHZhbHVlc1tpXSk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gc3Rk
Ojp2aXNpdCh2aXNpdG9yLCB2YWx1ZXNbaV0pOwogICAgICAgICBFWFBFQ1RfRVEocmVzdWx0LCBT
UUxJVEVfT0spOwogICAgIH0KICAgICBFWFBFQ1RfRVEoc3RhdGVtZW50LT5zdGVwKCksIFNRTElU
RV9ET05FKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440867</attachid>
            <date>2021-10-11 18:04:10 -0700</date>
            <delta_ts>2021-10-12 08:47:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-231086-20211011190409.patch</filename>
            <type>text/plain</type>
            <size>88851</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzOTQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
NmFjMTI4YmQyYjUwMzUwOGJhMjQ0NzNlYjg5NGNkMWI0OTFkNzg2Li44YzI0MDk3M2QwOWY1NTdi
N2M3ZTVjNjdhYzcwZjExYzU0MzQ0Nzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOCBAQAorMjAyMS0xMC0xMSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3
ZWJraXQub3JnPgorCisgICAgICAgIEJlZ2luIG1pZ3JhdGlvbiBmcm9tIFdURjo6VmFyaWFudCB0
byBzdGQ6OnZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzMTA4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHA6Cisg
ICAgICAgIChKU0M6OldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hwb2lu
dCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNhbGxET00pOgorICAgICAgICAqIHJ1bnRpbWUv
VGVtcG9yYWxUaW1lWm9uZS5jcHA6CisgICAgICAgIChKU0M6OlRlbXBvcmFsVGltZVpvbmU6OmNy
ZWF0ZUZyb21JRCk6CisgICAgICAgIChKU0M6OlRlbXBvcmFsVGltZVpvbmU6OmNyZWF0ZUZyb21V
VENPZmZzZXQpOgorCiAyMDIxLTEwLTExICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29t
PgogCiAgICAgICAgIERvbid0IGJyYW5jaCBhcm91bmQgcmVnaXN0ZXIgYWxsb2NhdGlvbiBpbiBE
RkcgZW51bWVyYXRvciBnZXQgYnkgdmFsIGFuZCBwYXNzIGluIHRoZSByaWdodCBMVmFsdWUgdHlw
ZSB0byBzdHJpY3RJbnQ1MlRvSlNWYWx1ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA5MjZjODFmZWZhZjY0MDhiNjEwYWQyNjE2
YjYzNjdlZTM3OWFjZTU1Li45MDY0ZDg5ZDE2MGI4MTQ5NmJhNzBmODJjOWRlMmEzMzYyNDg3YmZk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDIxLTEwLTExICBBbGV4IENocmlzdGVuc2VuICA8YWNo
cmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQmVnaW4gbWlncmF0aW9uIGZyb20gV1RG
OjpWYXJpYW50IHRvIHN0ZDo6dmFyaWFudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjMxMDg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBpcyByZWFzb25hYmx5IGNsb3NlIHRvIGp1c3QgY2hhbmdp
bmcgdGhlIGhlYWRlciBhbmQgYWxsIHRoZSBjb2RlIHN0YXlzIHRoZSBzYW1lIHVudGlsIGxhdGVy
LgorICAgICAgICBUZW1wbGF0ZXMgdGhhdCB3ZXJlIG9ubHkgdXNlZCBvbmNlIGxpa2Ugc3RkOjp2
YXJpYW50X3NpemUgSSBqdXN0IGNoYW5nZWQgaW5saW5lIGluc3RlYWQgb2YgYWRkaW5nIGEgd3Jh
cHBlciB0byBWYXJpYW50LmguCisgICAgICAgIFdURjo6Z2V0IHN0aWxsIG1lYW5zIHNvbWV0aGlu
ZyBlbHNlLCBzbyBJIGp1c3QgY2hhbmdlZCB0aGUgZmV3IHRoYXQgdGFrZSBhIFZhcmlhbnQgcGFy
YW1ldGVyIHRvIHN0ZDo6Z2V0IGluIHRoZSBjb2RlLgorICAgICAgICBXVEY6OmluX3BsYWNlIG1h
cHMgdG8gc3RkOjppbl9wbGFjZV90eXBlIGFuZCBzdGQ6OmluX3BsYWNlX2luZGV4X3QsIHNvIEkg
anVzdCBjaGFuZ2VkIHRob3NlIGluIHRoZSBjb2RlIHRvby4KKyAgICAgICAgVGhlcmUgd2FzIGFs
c28gYW5vdGhlciB2aXNpdG9yIGFkZGVkIHNpbmNlIHIyODM5MDYgd2l0aCBkaWZmZXJlbnQgcmV0
dXJuIHR5cGVzIGFtb25nIHRoZSBsYW1iZGFzLCBzbyBJIGp1c3QgZml4ZWQgaXQgd2l0aCB0aGUg
c3dpdGNoLgorCisgICAgICAgICogd3RmL0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvSGFzaGVy
Lmg6CisgICAgICAgIChXVEY6OmFkZCk6CisgICAgICAgICogd3RmL1ZhcmlhbnQuaDoKKyAgICAg
ICAgKFdURjo6Z2V0KToKKyAgICAgICAgKFdURjo6dmlzaXQpOgorICAgICAgICAoV1RGOjpnZXRf
aWYpOgorICAgICAgICAoV1RGOjppbl9wbGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9f
dGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6PSk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6Ol9fdmFyaWFudF9zdG9yYWdlOjpfX2dldCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6Ol9fdmFyaWFudF9zdG9yYWdlOjpfX2dldF9ycmVmKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6X192YXJpYW50X3N0b3JhZ2U6Ol9fZGVzdHJveSk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Ol9fc3RvcmFnZV93cmFwcGVyOjpfX2NvbnN0cnVjdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Ol9fc3RvcmFnZV93cmFwcGVyOjpfX3N0b3JhZ2Vfd3JhcHBlcik6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6Ol9fc3RvcmFnZV93cmFwcGVyOjpfX2dldCk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Ol9fc3RvcmFnZV93cmFwcGVyOjpfX2dldCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Ol9fc3RvcmFnZV93cmFwcGVyOjpfX2Rlc3Ryb3kpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjxfVHlwZTo6X19zdG9yYWdlX3dyYXBwZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjxfVHlwZTo6X19nZXQpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjxfVHlwZTo6X19nZXQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3ZhcmlhbnRfYmFzZTo6fl9fdmFyaWFudF9i
YXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19iYWNrdXBfc3RvcmFnZV9vcHM6Ol9fbW92
ZV9jb25zdHJ1Y3RfZnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fYmFja3VwX3N0b3Jh
Z2Vfb3BzOjpfX2Rlc3Ryb3lfZnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fYmFja3Vw
X3N0b3JhZ2U6Ol9fYmFja3VwX3N0b3JhZ2UpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX2Jh
Y2t1cF9zdG9yYWdlOjpfX2Rlc3Ryb3kpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX2JhY2t1
cF9zdG9yYWdlOjp+X19iYWNrdXBfc3RvcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlZh
cmlhbnQ8Pjo6c3dhcCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fTk9FWENFUFRfKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6X192YXJpYW50X2FjY2Vzc29yOjpnZXQpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpfX3Zpc2l0b3JfdGFibGU6Ol9fdHJhbXBvbGluZV9mdW5jKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6X19hcmdfc2VsZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpfX3Zpc2l0X2hlbHBlcjI6Ol9fdmlzaXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpvcGVy
YXRvcj09KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Om9wZXJhdG9yPCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Om9wZXJhdG9y
Pik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Om9wZXJhdG9yPj0pOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpvcGVyYXRvcjw9KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19oYXNoX3Zpc2l0
b3I6Om9wZXJhdG9yKCkpOiBEZWxldGVkLgorCiAyMDIxLTEwLTExICBBbGV4IENocmlzdGVuc2Vu
ICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgT25seSBtYXJrIG5lZWRlZCBK
U09OSW1wbDo6T2JqZWN0QmFzZSBmdW5jdGlvbnMgd2l0aCBXVEZfRVhQT1JUX1BSSVZBVEUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCA2NmUwYzIwOTJjNzdmMmVhZmRhNDUzODZlMzc3NzVkMDE5NzA0Nzk0Li42ODg2
YzcxYzkyNTg5ZTFkNDRhMjg1Mzc2MDg4YTFmZWNlZGEyNzIyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTYgQEAKKzIwMjEtMTAtMTEgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Vi
a2l0Lm9yZz4KKworICAgICAgICBCZWdpbiBtaWdyYXRpb24gZnJvbSBXVEY6OlZhcmlhbnQgdG8g
c3RkOjp2YXJpYW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzEwODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFj
Lm1tOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmls
aXR5QXR0cmlidXRlVmFsdWU6XSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0
VW5pb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmg6CisgICAgICAg
IChXZWJDb3JlOjpGb3JtRGF0YUVsZW1lbnQ6Om9wZXJhdG9yPT0gY29uc3QpOgorCiAyMDIxLTEw
LTExICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIElu
dHJvZHVjZSBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJveHkgYW5kIFJlbW90ZURpc3BsYXlM
aXN0UmVjb3JkZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYWFkZGNjYjk2Y2M5OGU0OWUwYmIzZmIxNDg2ZjllMjFj
NTI2NGYwNC4uOTdjZDg0NGE0ZGQyM2Q3NjE4YzllMDI2OTlmZDFhOWRhZjcwZmVlMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0xMC0xMSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJp
c3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEJlZ2luIG1pZ3JhdGlvbiBmcm9tIFdURjo6
VmFyaWFudCB0byBzdGQ6OnZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzMTA4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmg6CisgICAgICAg
IChJUEM6OlZhcmlhbnRDb2Rlcjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6VmFyaWFudENvZGVy
OjpkZWNvZGUpOgorCiAyMDIxLTEwLTExICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBw
bGUuY29tPgogCiAgICAgICAgIEludHJvZHVjZSBSZW1vdGVEaXNwbGF5TGlzdFJlY29yZGVyUHJv
eHkgYW5kIFJlbW90ZURpc3BsYXlMaXN0UmVjb3JkZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRj
aHBvaW50LmNwcAppbmRleCA0Njc4NDZjODU0NDgwOWMwMWM0ODY4NTM4MjlhOWIwN2U4YzUxNGQ0
Li5iYWExYzBlYWFkMmYxM2JjYWFjOTE3NjNmZGY5NDNiODI4MzM1ZmFkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hw
b2ludC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwCkBAIC02NSw5ICs2NSw5IEBAIGlubGluZSBib29sIFdh
dGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6aXNWYWxpZCgpIGNvbnN0CiBXYXRjaHBvaW50
c09uU3RydWN0dXJlU3R1YkluZm86Ok5vZGUmIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5m
bzo6YWRkV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQogewog
ICAgIGlmICgha2V5IHx8IGtleS5jb25kaXRpb24oKS5raW5kKCkgIT0gUHJvcGVydHlDb25kaXRp
b246OkVxdWl2YWxlbmNlKQotICAgICAgICByZXR1cm4gKm1fd2F0Y2hwb2ludHMuYWRkKFdURjo6
aW5fcGxhY2U8U3RydWN0dXJlVHJhbnNpdGlvblN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnQ+LCBrZXksICp0aGlzKTsKKyAgICAgICAgcmV0dXJuICptX3dhdGNocG9pbnRzLmFkZChzdGQ6
OmluX3BsYWNlX3R5cGU8U3RydWN0dXJlVHJhbnNpdGlvblN0cnVjdHVyZVN0dWJDbGVhcmluZ1dh
dGNocG9pbnQ+LCBrZXksICp0aGlzKTsKICAgICBBU1NFUlQoa2V5LmNvbmRpdGlvbigpLmtpbmQo
KSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2UpOwotICAgIHJldHVybiAqbV93YXRj
aHBvaW50cy5hZGQoV1RGOjppbl9wbGFjZTxBZGFwdGl2ZVZhbHVlU3RydWN0dXJlU3R1YkNsZWFy
aW5nV2F0Y2hwb2ludD4sIGtleSwgKnRoaXMpOworICAgIHJldHVybiAqbV93YXRjaHBvaW50cy5h
ZGQoc3RkOjppbl9wbGFjZV90eXBlPEFkYXB0aXZlVmFsdWVTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50Piwga2V5LCAqdGhpcyk7CiB9CiAKIHZvaWQgV2F0Y2hwb2ludHNPblN0cnVjdHVy
ZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRJbnN0YWxsV2F0Y2hwb2ludCgKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggM2UwYmE3
OTljZjgxNzk2ZTkyMjRjZDljYTEwYjk0YTA2ZjI4NDU4MC4uMzIxYmY2NGNhMDdiZTRhZDA4Y2E0
ZjVlN2FhMmQ2ZDdlZDdjNmZkOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAKQEAgLTEwNTYyLDcgKzEwNTYyLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUNhbGxET00oTm9kZSogbm9kZSkKICAgICBhdXRvIGFwcGVuZENlbGwg
PSBbJl0oRWRnZSYgZWRnZSkgewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcGVyYW5k
KHRoaXMsIGVkZ2UpOwogICAgICAgICByZWdzLmFwcGVuZChvcGVyYW5kLmdwcigpKTsKLSAgICAg
ICAgb3BlcmFuZHMuYXBwZW5kKE9wZXJhbmRWYXJpYW50KFdURjo6aW5fcGxhY2U8U3BlY3VsYXRl
Q2VsbE9wZXJhbmQ+LCBXVEZNb3ZlKG9wZXJhbmQpKSk7CisgICAgICAgIG9wZXJhbmRzLmFwcGVu
ZChPcGVyYW5kVmFyaWFudChzdGQ6OmluX3BsYWNlX3R5cGU8U3BlY3VsYXRlQ2VsbE9wZXJhbmQ+
LCBXVEZNb3ZlKG9wZXJhbmQpKSk7CiAgICAgfTsKIAogICAgIGF1dG8gYXBwZW5kU3RyaW5nID0g
WyZdKEVkZ2UmIGVkZ2UpIHsKQEAgLTEwNTcwLDE5ICsxMDU3MCwxOSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlQ2FsbERPTShOb2RlKiBub2RlKQogICAgICAgICBHUFJSZWcgZ3ByID0g
b3BlcmFuZC5ncHIoKTsKICAgICAgICAgcmVncy5hcHBlbmQoZ3ByKTsKICAgICAgICAgc3BlY3Vs
YXRlU3RyaW5nKGVkZ2UsIGdwcik7Ci0gICAgICAgIG9wZXJhbmRzLmFwcGVuZChPcGVyYW5kVmFy
aWFudChXVEY6OmluX3BsYWNlPFNwZWN1bGF0ZUNlbGxPcGVyYW5kPiwgV1RGTW92ZShvcGVyYW5k
KSkpOworICAgICAgICBvcGVyYW5kcy5hcHBlbmQoT3BlcmFuZFZhcmlhbnQoc3RkOjppbl9wbGFj
ZV90eXBlPFNwZWN1bGF0ZUNlbGxPcGVyYW5kPiwgV1RGTW92ZShvcGVyYW5kKSkpOwogICAgIH07
CiAKICAgICBhdXRvIGFwcGVuZEludDMyID0gWyZdKEVkZ2UmIGVkZ2UpIHsKICAgICAgICAgU3Bl
Y3VsYXRlSW50MzJPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSk7CiAgICAgICAgIHJlZ3MuYXBw
ZW5kKG9wZXJhbmQuZ3ByKCkpOwotICAgICAgICBvcGVyYW5kcy5hcHBlbmQoT3BlcmFuZFZhcmlh
bnQoV1RGOjppbl9wbGFjZTxTcGVjdWxhdGVJbnQzMk9wZXJhbmQ+LCBXVEZNb3ZlKG9wZXJhbmQp
KSk7CisgICAgICAgIG9wZXJhbmRzLmFwcGVuZChPcGVyYW5kVmFyaWFudChzdGQ6OmluX3BsYWNl
X3R5cGU8U3BlY3VsYXRlSW50MzJPcGVyYW5kPiwgV1RGTW92ZShvcGVyYW5kKSkpOwogICAgIH07
CiAKICAgICBhdXRvIGFwcGVuZEJvb2xlYW4gPSBbJl0oRWRnZSYgZWRnZSkgewogICAgICAgICBT
cGVjdWxhdGVCb29sZWFuT3BlcmFuZCBvcGVyYW5kKHRoaXMsIGVkZ2UpOwogICAgICAgICByZWdz
LmFwcGVuZChvcGVyYW5kLmdwcigpKTsKLSAgICAgICAgb3BlcmFuZHMuYXBwZW5kKE9wZXJhbmRW
YXJpYW50KFdURjo6aW5fcGxhY2U8U3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ+LCBXVEZNb3ZlKG9w
ZXJhbmQpKSk7CisgICAgICAgIG9wZXJhbmRzLmFwcGVuZChPcGVyYW5kVmFyaWFudChzdGQ6Omlu
X3BsYWNlX3R5cGU8U3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ+LCBXVEZNb3ZlKG9wZXJhbmQpKSk7
CiAgICAgfTsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBvcmFsVGltZVpvbmUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVGVtcG9yYWxUaW1lWm9uZS5jcHAKaW5kZXggNzdkYjQwOTVkMjdj
MWJmMmZjMTc3MGNmZTAzOWQ1Njk4YTE2YmVjYy4uODNhMzkwNmJkNTQ1MDYyMmVhZWE5YWM5MDNi
YmQyODE1Y2QwOWNlNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VGVtcG9yYWxUaW1lWm9uZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VGVtcG9yYWxUaW1lWm9uZS5jcHAKQEAgLTM1LDE0ICszNSwxNCBAQCBjb25zdCBDbGFzc0luZm8g
VGVtcG9yYWxUaW1lWm9uZTo6c19pbmZvID0geyAiT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVs
bHB0ciwgbgogCiBUZW1wb3JhbFRpbWVab25lKiBUZW1wb3JhbFRpbWVab25lOjpjcmVhdGVGcm9t
SUQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgVGltZVpvbmVJRCBpZGVudGlmaWVyKQog
ewotICAgIFRlbXBvcmFsVGltZVpvbmUqIGZvcm1hdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPFRlbXBvcmFsVGltZVpvbmU+KHZtLmhlYXApKSBUZW1wb3JhbFRpbWVab25lKHZtLCBzdHJ1
Y3R1cmUsIFRpbWVab25lIHsgV1RGOjppbl9wbGFjZTwwPiwgaWRlbnRpZmllciB9KTsKKyAgICBU
ZW1wb3JhbFRpbWVab25lKiBmb3JtYXQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxUZW1w
b3JhbFRpbWVab25lPih2bS5oZWFwKSkgVGVtcG9yYWxUaW1lWm9uZSh2bSwgc3RydWN0dXJlLCBU
aW1lWm9uZSB7IHN0ZDo6aW5fcGxhY2VfaW5kZXhfdDwwPigpLCBpZGVudGlmaWVyIH0pOwogICAg
IGZvcm1hdC0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiBmb3JtYXQ7CiB9CiAKIFRl
bXBvcmFsVGltZVpvbmUqIFRlbXBvcmFsVGltZVpvbmU6OmNyZWF0ZUZyb21VVENPZmZzZXQoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50NjRfdCB1dGNPZmZzZXQpCiB7Ci0gICAgVGVt
cG9yYWxUaW1lWm9uZSogZm9ybWF0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VGVtcG9y
YWxUaW1lWm9uZT4odm0uaGVhcCkpIFRlbXBvcmFsVGltZVpvbmUodm0sIHN0cnVjdHVyZSwgVGlt
ZVpvbmUgeyBXVEY6OmluX3BsYWNlPDE+LCB1dGNPZmZzZXQgfSk7CisgICAgVGVtcG9yYWxUaW1l
Wm9uZSogZm9ybWF0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8VGVtcG9yYWxUaW1lWm9u
ZT4odm0uaGVhcCkpIFRlbXBvcmFsVGltZVpvbmUodm0sIHN0cnVjdHVyZSwgVGltZVpvbmUgeyBz
dGQ6OmluX3BsYWNlX2luZGV4X3Q8MT4oKSwgdXRjT2Zmc2V0IH0pOwogICAgIGZvcm1hdC0+Zmlu
aXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiBmb3JtYXQ7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9Gb3J3YXJkLmggYi9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKaW5kZXggM2E3
Mjk3NDM3YjU5ZDQ1M2RiZDZlOTY4NDM0Njk3NGU1M2M4NmNmOS4uZjAwY2UzOTYwOTllZmJjZjkw
ZDNlYTFjYjE4YzQ1ZTQ4N2E3MjI1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvRm9yd2Fy
ZC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaApAQCAtODMsNyArODMsNiBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZT4gY2xhc3MgU3RyaW5nQnVmZmVyOwogdGVtcGxhdGU8dHlwZW5hbWU+IGNs
YXNzIFN0cmluZ1BhcnNpbmdCdWZmZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWUgPSB2
b2lkPiBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjsKIHRlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBV
bmlxdWVSZWY7Ci10ZW1wbGF0ZTx0eXBlbmFtZS4uLj4gY2xhc3MgVmFyaWFudDsKIHRlbXBsYXRl
PHR5cGVuYW1lLCBzaXplX3QgPSAwLCB0eXBlbmFtZSA9IENyYXNoT25PdmVyZmxvdywgc2l6ZV90
ID0gMTYsIHR5cGVuYW1lIE1hbGxvYyA9IFZlY3Rvck1hbGxvYz4gY2xhc3MgVmVjdG9yOwogdGVt
cGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lID0gRW1wdHlDb3VudGVyPiBjbGFzcyBXZWFrUHRyOwog
CkBAIC0xNTcsNyArMTU2LDYgQEAgdXNpbmcgV1RGOjpUZXh0UG9zaXRpb247CiB1c2luZyBXVEY6
OlRleHRTdHJlYW07CiB1c2luZyBXVEY6OlVSTDsKIHVzaW5nIFdURjo6VW5pcXVlUmVmOwotdXNp
bmcgV1RGOjpWYXJpYW50OwogdXNpbmcgV1RGOjpWZWN0b3I7CiAKIHRlbXBsYXRlPGNsYXNzIFQs
IGNsYXNzIEU+IHVzaW5nIEV4cGVjdGVkID0gc3RkOjpleHBlcmltZW50YWw6OmV4cGVjdGVkPFQs
IEU+OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaGVyLmggYi9Tb3VyY2UvV1RGL3d0
Zi9IYXNoZXIuaAppbmRleCA4ZmU5YjI0MGMwZWZhYzcwOGFjODAzZjU1MDE1MGQ4Y2E1OTM1MmQy
Li5hNzdhNDhhOWVjYTg4YTUxNzcyZWI0ODE1Y2U4YmEwMDU5OTMzN2E4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9IYXNoZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIuaApAQCAt
MjEsNiArMjEsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxvcHRpb25hbD4KKyNpbmNs
dWRlIDx2YXJpYW50PgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3
dGYvVVJMLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgpAQCAtMTY2LDEwICsx
NjcsMTAgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNv
bnN0IHN0ZDo6b3B0aW9uYWw8VD4mIG9wdGlvbmFsKQogICAgICAgICBhZGQoaGFzaGVyLCBvcHRp
b25hbC52YWx1ZSgpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUuLi4gVHlwZXM+IHZvaWQgYWRk
KEhhc2hlciYgaGFzaGVyLCBjb25zdCBWYXJpYW50PFR5cGVzLi4uPiYgdmFyaWFudCkKK3RlbXBs
YXRlPHR5cGVuYW1lLi4uIFR5cGVzPiB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3Qgc3Rk
Ojp2YXJpYW50PFR5cGVzLi4uPiYgdmFyaWFudCkKIHsKICAgICBhZGQoaGFzaGVyLCB2YXJpYW50
LmluZGV4KCkpOwotICAgIHZpc2l0KFsmaGFzaGVyXSAoYXV0byYgdmFsdWUpIHsKKyAgICBzdGQ6
OnZpc2l0KFsmaGFzaGVyXSAoYXV0byYgdmFsdWUpIHsKICAgICAgICAgYWRkKGhhc2hlciwgdmFs
dWUpOwogICAgIH0sIHZhcmlhbnQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVmFy
aWFudC5oIGIvU291cmNlL1dURi93dGYvVmFyaWFudC5oCmluZGV4IDUwM2Q5MTVmZWFlMDFkMTNh
MWI1M2ZkYmY0NThiYTYwZmQ4YjA0ZWEuLmUyYTU1MWIwZDdiZGFlODY1OTQ0ZTJhOGQyY2NlYjk1
ZTUyOTJlMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9WYXJpYW50LmgKQEAgLTQ3LDE5ICs0NywxMCBAQAogI2luY2x1ZGUgPHN0cmlu
Zz4KICNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KICNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUg
PHZhcmlhbnQ+CiAjaW5jbHVkZSA8d3RmL0NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgogCi0jaWYgQ09NUElMRVIoTVNWQykKLSNwcmFnbWEgd2FybmluZyhwdXNoKQot
I3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDI0NSkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ1
MjEpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0NTIyKQotI3ByYWdtYSB3YXJuaW5nKGRpc2Fi
bGU6NDgxNCkKLSNlbmRpZgotCi0jaWYgIUNPTVBJTEVSKENMQU5HKSB8fCBXVEZfQ1BQX1NURF9W
RVIgPj0gMTQKLQogbmFtZXNwYWNlIFdURiB7CiAKICNpZiBDT01QSUxFUl9TVVBQT1JUUyhFWENF
UFRJT05TKQpAQCAtNzIsMTk4MCArNjMsNzEgQEAgbmFtZXNwYWNlIFdURiB7CiAjZGVmaW5lIF9f
Tk9FWENFUFRfKC4uLikKICNlbmRpZgogCi1zdHJ1Y3QgX19pbl9wbGFjZV9wcml2YXRlewotICAg
IHRlbXBsYXRlPHR5cGVuYW1lPgotICAgIHN0cnVjdCBfX3R5cGVfaG9sZGVyOwotCi0gICAgdGVt
cGxhdGU8c2l6ZV90PgotICAgIHN0cnVjdCBfX3ZhbHVlX2hvbGRlcjsKLX07Ci0KLQotc3RydWN0
IGluX3BsYWNlX3RhZyB7Ci0gICAgaW5fcGxhY2VfdGFnKCkgPSBkZWxldGU7Ci19OwotCi11c2lu
ZyBpbl9wbGFjZV90ID0gaW5fcGxhY2VfdGFnKCYpKF9faW5fcGxhY2VfcHJpdmF0ZSYpOwotCi10
ZW1wbGF0ZSA8Y2xhc3MgX1R5cGU+Ci11c2luZyBpbl9wbGFjZV90eXBlX3QgPSBpbl9wbGFjZV90
YWcoJikoX19pbl9wbGFjZV9wcml2YXRlOjpfX3R5cGVfaG9sZGVyPF9UeXBlPiYpOwotCi10ZW1w
bGF0ZSA8c2l6ZV90IF9JbmRleD4KLXVzaW5nIGluX3BsYWNlX2luZGV4X3QgPSBpbl9wbGFjZV90
YWcoJikoX19pbl9wbGFjZV9wcml2YXRlOjpfX3ZhbHVlX2hvbGRlcjxfSW5kZXg+Jik7Ci0KLWlu
X3BsYWNlX3RhZyBpbl9wbGFjZShfX2luX3BsYWNlX3ByaXZhdGUmKTsKLQotdGVtcGxhdGUgPGNs
YXNzIF9UeXBlPgotaW5fcGxhY2VfdGFnIGluX3BsYWNlKF9faW5fcGxhY2VfcHJpdmF0ZTo6X190
eXBlX2hvbGRlcjxfVHlwZT4gJikgewotICAgIF9fVEhST1dfRVhDRVBUSU9OKF9faW5fcGxhY2Vf
cHJpdmF0ZSgpKTsKLX0KLQotdGVtcGxhdGUgPHNpemVfdCBfSW5kZXg+Ci1pbl9wbGFjZV90YWcg
aW5fcGxhY2UoX19pbl9wbGFjZV9wcml2YXRlOjpfX3ZhbHVlX2hvbGRlcjxfSW5kZXg+ICYpIHsK
LSAgICBfX1RIUk9XX0VYQ0VQVElPTihfX2luX3BsYWNlX3ByaXZhdGUoKSk7Ci19Ci0KLWNsYXNz
IGJhZF92YXJpYW50X2FjY2VzczogcHVibGljIHN0ZDo6bG9naWNfZXJyb3J7Ci1wdWJsaWM6Ci0g
ICAgZXhwbGljaXQgYmFkX3ZhcmlhbnRfYWNjZXNzKGNvbnN0IHN0ZDo6c3RyaW5nJiB3aGF0X2Fy
Zyk6Ci0gICAgICAgIHN0ZDo6bG9naWNfZXJyb3Iod2hhdF9hcmcpCi0gICAge30KLSAgICBleHBs
aWNpdCBiYWRfdmFyaWFudF9hY2Nlc3MoY29uc3QgY2hhciogd2hhdF9hcmcpOgotICAgICAgICBz
dGQ6OmxvZ2ljX2Vycm9yKHdoYXRfYXJnKQotICAgIHt9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotTk9fUkVUVVJOX0RVRV9UT19DUkFTSCBpbmxpbmUgVCBfX3Rocm93X2JhZF92YXJpYW50
X2FjY2Vzcyhjb25zdCBjaGFyKiB3aGF0X2FyZyl7Ci0gICAgX19USFJPV19FWENFUFRJT04oYmFk
X3ZhcmlhbnRfYWNjZXNzKHdoYXRfYXJnKSkKLX0KLQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZz
ZXQsdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3R5cGVfaW5k
ZXhfaGVscGVyOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBfVHlwZSx0
eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX190eXBlX2luZGV4X2hl
bHBlcjxfT2Zmc2V0LF9UeXBlLF9IZWFkLF9SZXN0Li4uPnsKLSAgICBzdGF0aWMgY29uc3RleHBy
IHB0cmRpZmZfdCBfX3ZhbHVlPQotICAgICAgICBfX3R5cGVfaW5kZXhfaGVscGVyPF9PZmZzZXQr
MSxfVHlwZSxfUmVzdC4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09m
ZnNldCx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX190eXBlX2lu
ZGV4X2hlbHBlcjxfT2Zmc2V0LF9UeXBlLF9UeXBlLF9SZXN0Li4uPnsKLSAgICBzdGF0aWMgY29u
c3RleHByIHB0cmRpZmZfdCBfX3ZhbHVlPV9PZmZzZXQ7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdHlwZV9pbmRleHsKLSAgICBz
dGF0aWMgY29uc3RleHByIHB0cmRpZmZfdCBfX3ZhbHVlPQotICAgICAgICBfX3R5cGVfaW5kZXhf
aGVscGVyPDAsX1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRp
ZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2luZGV4ZWRfdHlwZTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9f
aW5kZXhlZF90eXBlPDAsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgX0hlYWQgX190eXBl
OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3Ry
dWN0IF9faW5kZXhlZF90eXBlPC0xLF9IZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIHZvaWQg
X190eXBlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSBfSGVhZCx0
eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19pbmRleGVkX3R5cGU8X0luZGV4LF9IZWFkLF9S
ZXN0Li4uPnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleC0xLF9S
ZXN0Li4uPjo6X190eXBlIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgs
dHlwZW5hbWUgLi4uX1R5cGVzPgotc3RydWN0IF9fbmV4dF9pbmRleHsKLSAgICBzdGF0aWMgY29u
c3RleHByIHB0cmRpZmZfdCBfX3ZhbHVlPQotICAgICAgICAoX0luZGV4Pj1wdHJkaWZmX3Qoc2l6
ZW9mLi4uKF9UeXBlcyktMSkpPy0xOl9JbmRleCsxOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
Li4uIF9UeXBlcz4KLWNsYXNzIFZhcmlhbnQ7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lPgotc3RydWN0
IHZhcmlhbnRfc2l6ZTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IHZhcmlh
bnRfc2l6ZTxjb25zdCBfVHlwZT4gOiB2YXJpYW50X3NpemU8X1R5cGU+IHt9OwotCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgdmFyaWFudF9zaXplPHZvbGF0aWxlIF9UeXBlPiA6
IHZhcmlhbnRfc2l6ZTxfVHlwZT4ge307Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBfVHlwZT4KLXN0
cnVjdCB2YXJpYW50X3NpemU8Y29uc3Qgdm9sYXRpbGUgX1R5cGU+IDogdmFyaWFudF9zaXplPF9U
eXBlPiB7fTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lLi4uIF9UeXBlcz4KLXN0cnVjdCB2YXJpYW50
X3NpemU8VmFyaWFudDxfVHlwZXMuLi4+PgotICAgIDogc3RkOjppbnRlZ3JhbF9jb25zdGFudDxz
aXplX3QsIHNpemVvZi4uLihfVHlwZXMpPiB7fTsKLQotdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0
eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlOwotCi10ZW1wbGF0ZTxz
aXplX3QgX0luZGV4LHR5cGVuYW1lIF9UeXBlPgotdXNpbmcgdmFyaWFudF9hbHRlcm5hdGl2ZV90
PXR5cGVuYW1lIHZhcmlhbnRfYWx0ZXJuYXRpdmU8X0luZGV4LF9UeXBlPjo6dHlwZTsKLQotdGVt
cGxhdGUgPHNpemVfdCBfSW5kZXgsIHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IHZhcmlhbnRfYWx0
ZXJuYXRpdmU8X0luZGV4LCBjb25zdCBfVHlwZT57Ci0gICAgdXNpbmcgdHlwZT1zdGQ6OmFkZF9j
b25zdF90PHZhcmlhbnRfYWx0ZXJuYXRpdmVfdDxfSW5kZXgsX1R5cGU+PjsKLX07Ci0KLXRlbXBs
YXRlIDxzaXplX3QgX0luZGV4LCB0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50X2FsdGVy
bmF0aXZlPF9JbmRleCwgdm9sYXRpbGUgX1R5cGU+ewotICAgIHVzaW5nIHR5cGU9c3RkOjphZGRf
dm9sYXRpbGVfdDx2YXJpYW50X2FsdGVybmF0aXZlX3Q8X0luZGV4LF9UeXBlPj47Ci19OwotCi10
ZW1wbGF0ZSA8c2l6ZV90IF9JbmRleCwgdHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgdmFyaWFudF9h
bHRlcm5hdGl2ZTxfSW5kZXgsIHZvbGF0aWxlIGNvbnN0IF9UeXBlPnsKLSAgICB1c2luZyB0eXBl
PXN0ZDo6YWRkX3ZvbGF0aWxlX3Q8c3RkOjphZGRfY29uc3RfdDx2YXJpYW50X2FsdGVybmF0aXZl
X3Q8X0luZGV4LF9UeXBlPj4+OwotfTsKLQotdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFt
ZSAuLi4gX1R5cGVzPgotc3RydWN0IHZhcmlhbnRfYWx0ZXJuYXRpdmU8X0luZGV4LFZhcmlhbnQ8
X1R5cGVzLi4uPj57Ci0gICAgdXNpbmcgdHlwZT10eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5k
ZXgsX1R5cGVzLi4uPjo6X190eXBlOwotfTsKLQotY29uc3RleHByIHNpemVfdCB2YXJpYW50X25w
b3M9LTE7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1j
b25zdGV4cHIgX1R5cGUmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mKTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBfVHlwZSBjb25zdCYg
Z2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlw
ZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIF9UeXBlJiYgZ2V0KFZhcmlhbnQ8X1R5
cGVzLi4uPiYmKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBl
cz4KLWNvbnN0ZXhwciBjb25zdCBfVHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3Qm
Jik7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNv
bnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBl
JiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+Jik7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgs
dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxf
SW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYmKTsKLQot
dGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHBy
IHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3Qm
IGdldCgKLSAgICBWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmKTsKLQotdGVtcGxhdGUgPHB0cmRp
ZmZfdCBfSW5kZXgsIHR5cGVuYW1lLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBjb25zdCB0eXBlbmFt
ZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsIF9UeXBlcy4uLj46Ol9fdHlwZSAmJgotZ2V0KFZhcmlh
bnQ8X1R5cGVzLi4uPiBjb25zdCAmJik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PF9UeXBlPiBnZXRf
aWYoVmFyaWFudDxfVHlwZXMuLi4+Kik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PF9UeXBlIGNvbnN0
PiBnZXRfaWYoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0Kik7Ci0KLXRlbXBsYXRlPHB0cmRpZmZf
dCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9wb2ludGVy
X3Q8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LCBfVHlwZXMuLi4+OjpfX3R5cGU+IGdl
dF9pZihWYXJpYW50PF9UeXBlcy4uLj4qKTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0
eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDx0eXBlbmFt
ZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0PiBnZXRfaWYo
Ci0gICAgVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0Kik7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBf
SW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3ZhcmlhbnRfYWNjZXNzb3I7Ci0K
LXRlbXBsYXRlPHNpemVfdCBfX2NvdW50LAotICAgICAgICAgYm9vbCBfX2xhcmdlcl90aGFuX2No
YXI9KF9fY291bnQ+U0NIQVJfTUFYKSwKLSAgICBib29sIF9fbGFyZ2VyX3RoYW5fc2hvcnQ9KF9f
Y291bnQ+U0hSVF9NQVgpLAotICAgIGJvb2wgX19sYXJnZXJfdGhhbl9pbnQ9KF9fY291bnQ+SU5U
X01BWCk+Ci1zdHJ1Y3QgX19kaXNjcmltaW5hdG9yX3R5cGV7Ci0gICAgdHlwZWRlZiBzaWduZWQg
Y2hhciBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxzaXplX3QgX19jb3VudD4KLXN0cnVjdCBfX2Rp
c2NyaW1pbmF0b3JfdHlwZTxfX2NvdW50LHRydWUsZmFsc2UsZmFsc2U+ewotICAgIHR5cGVkZWYg
c2lnbmVkIHNob3J0IF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHNpemVfdCBfX2NvdW50Pgotc3Ry
dWN0IF9fZGlzY3JpbWluYXRvcl90eXBlPF9fY291bnQsdHJ1ZSx0cnVlLGZhbHNlPnsKLSAgICB0
eXBlZGVmIGludCBfX3R5cGU7Ci19OwotdGVtcGxhdGU8c2l6ZV90IF9fY291bnQ+Ci1zdHJ1Y3Qg
X19kaXNjcmltaW5hdG9yX3R5cGU8X19jb3VudCx0cnVlLHRydWUsdHJ1ZT57Ci0gICAgdHlwZWRl
ZiBzaWduZWQgbG9uZyBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXN0
cnVjdCBfX3N0b3JlZF90eXBlewotICAgIHR5cGVkZWYgX1R5cGUgX190eXBlOwotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX19zdG9yZWRfdHlwZTxfVHlwZSY+ewotICAg
IHR5cGVkZWYgX1R5cGUqIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Ci1zdHJ1Y3QgX19hbGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTsKLQotdGVtcGxhdGU8Pgot
c3RydWN0IF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8PiB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIF9fdmFsdWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgot
c3RydWN0IF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X1R5cGU+IHsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgX192YWx1ZT0KLSAgICAgICAgc3RkOjppc190cml2aWFsbHlfZGVzdHJ1
Y3RpYmxlPHR5cGVuYW1lIF9fc3RvcmVkX3R5cGU8X1R5cGU+OjpfX3R5cGU+Ojp2YWx1ZTsKLX07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBf
X2FsbF90cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPiB7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIF9fdmFsdWU9Ci0gICAgICAgIF9fYWxsX3RyaXZpYWxseV9kZXN0cnVj
dGlibGU8X0hlYWQ+OjpfX3ZhbHVlICYmCi0gICAgICAgIF9fYWxsX3RyaXZpYWxseV9kZXN0cnVj
dGlibGU8X1Jlc3QuLi4+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Rhcmdl
dCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci1zdHJ1Y3QgX19zdG9yYWdlX25vdGhyb3dfY29uc3RydWN0
aWJsZXsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBfX3ZhbHVlPQotICAgICAgICBzdGQ6OmlzX25v
dGhyb3dfY29uc3RydWN0aWJsZTxfVGFyZ2V0LCBfQXJncy4uLj46OnZhbHVlOwotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19tb3Zl
X2NvbnN0cnVjdGlibGU7Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19t
b3ZlX2NvbnN0cnVjdGlibGU8PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fdmFsdWU9
dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fc3RvcmFnZV9u
b3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxfVHlwZT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBfX3ZhbHVlPQotICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxl
PAotICAgICAgICB0eXBlbmFtZSBfX3N0b3JlZF90eXBlPF9UeXBlPjo6X190eXBlPjo6dmFsdWU7
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1
Y3QgX19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPiB7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fdmFsdWU9Ci0gICAgICAgIF9fc3RvcmFnZV9u
b3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxfSGVhZD46Ol9fdmFsdWUgJiYKLSAgICAgICAgX19z
dG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9SZXN0Li4uPjo6X192YWx1ZTsKLX07
Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVj
dCBfX290aGVyX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU7Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX290aGVyX3N0b3Jh
Z2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8MCxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3Rh
dGljIGNvbnN0IGJvb2wgX192YWx1ZT1fX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGli
bGU8X1Jlc3QuLi4+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlw
ZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fb3RoZXJfc3RvcmFnZV9ub3Rocm93X21vdmVfY29u
c3RydWN0aWJsZTwtMSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgX192
YWx1ZT0KLSAgICAgICAgX19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFk
LF9SZXN0Li4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlw
ZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fb3RoZXJfc3RvcmFnZV9u
b3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxfSW5kZXgsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHN0
YXRpYyBjb25zdCBib29sIF9fdmFsdWU9Ci0gICAgICAgIF9fc3RvcmFnZV9ub3Rocm93X21vdmVf
Y29uc3RydWN0aWJsZTxfSGVhZD46Ol9fdmFsdWUgJiYKLSAgICAgICAgX19vdGhlcl9zdG9yYWdl
X25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9JbmRleC0xLF9SZXN0Li4uPjo6X192YWx1ZTsK
LX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0
cnVjdCBfX2JhY2t1cF9zdG9yYWdlX3JlcXVpcmVkewotICAgIHN0YXRpYyBjb25zdCBib29sIF9f
dmFsdWU9Ci0gICAgICAgICFfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8Ci0g
ICAgICAgIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGU+
OjpfX3ZhbHVlICYmCi0gICAgICAgICFfX290aGVyX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0
cnVjdGlibGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxwdHJk
aWZmX3QgX0luZGV4LHB0cmRpZmZfdCBfQ291bnQsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVj
dCBfX2FueV9iYWNrdXBfc3RvcmFnZV9yZXF1aXJlZF9pbXBsewotICAgIHN0YXRpYyBjb25zdCBi
b29sIF9fdmFsdWU9Ci0gICAgICAgIF9fYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWQ8X0luZGV4LF9U
eXBlcy4uLj46Ol9fdmFsdWUgfHwKLSAgICAgICAgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWly
ZWRfaW1wbDxfSW5kZXgrMSxfQ291bnQtMSxfVHlwZXMuLi4+OjpfX3ZhbHVlOwotfTsKLQotdGVt
cGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYW55
X2JhY2t1cF9zdG9yYWdlX3JlcXVpcmVkX2ltcGw8X0luZGV4LDAsX1R5cGVzLi4uPnsKLSAgICBz
dGF0aWMgY29uc3QgYm9vbCBfX3ZhbHVlPWZhbHNlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
X1ZhcmlhbnQ+Ci1zdHJ1Y3QgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWQ7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVx
dWlyZWQ8VmFyaWFudDxfVHlwZXMuLi4+ID57Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1
ZT0KLSAgICAgICAgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWRfaW1wbDwwLHNpemVvZi4u
LihfVHlwZXMpLF9UeXBlcy4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAu
Li4gX1R5cGVzPgotdW5pb24gX192YXJpYW50X2RhdGE7Ci0KLS8vIHN0ZDo6aXNfbGl0ZXJhbF90
eXBlIGlzIGRlcHJlY2F0ZWQgaW4gQysrMTcgYW5kIHJlbW92ZWQgaW4gQysrMjAKLUFMTE9XX0RF
UFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSxib29s
PXN0ZDo6aXNfbGl0ZXJhbF90eXBlPF9UeXBlPjo6dmFsdWU+Ci1zdHJ1Y3QgX192YXJpYW50X3N0
b3JhZ2V7Ci0gICAgdHlwZWRlZiBfVHlwZSBfX3R5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHBy
IF9UeXBlJiBfX2dldChfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIF9fdmFsOwotICAg
IH0KLSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiYgX19nZXRfcnJlZihfX3R5cGUmIF9fdmFs
KXsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZShfX3ZhbCk7Ci0gICAgfQotICAgIHN0YXRpYyBj
b25zdGV4cHIgY29uc3QgX1R5cGUmIF9fZ2V0KF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAg
ICByZXR1cm4gX192YWw7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgX1R5cGUm
JiBfX2dldF9ycmVmKF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gc3RkOjpt
b3ZlKF9fdmFsKTsKLSAgICB9Ci0gICAgc3RhdGljIHZvaWQgX19kZXN0cm95KF9fdHlwZSYpe30K
LX07Ci1BTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLQotdGVtcGxhdGU8dHlwZW5h
bWUgX1R5cGU+Ci1zdHJ1Y3QgX19zdG9yYWdlX3dyYXBwZXJ7Ci0gICAgdHlwZW5hbWUgc3RkOjph
bGlnbmVkX3N0b3JhZ2U8c2l6ZW9mKF9UeXBlKSxhbGlnbm9mKF9UeXBlKT46OnR5cGUgX19zdG9y
YWdlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHN0YXRpYyBjb25z
dGV4cHIgdm9pZCBfX2NvbnN0cnVjdCh2b2lkKiBfX3AsX0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAg
ICAgICAgbmV3IChfX3ApIF9UeXBlKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7Ci0g
ICAgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9EdW1teSA9IF9UeXBlPgotICAgIF9fc3Rv
cmFnZV93cmFwcGVyKAotICAgICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2Rl
ZmF1bHRfY29uc3RydWN0aWJsZTxfRHVtbXk+Ojp2YWx1ZSwKLSAgICAgICAgdm9pZCAoX19zdG9y
YWdlX3dyYXBwZXI6OiopKCk+Ojp0eXBlID0gbnVsbHB0cikgewotICAgICAgX19jb25zdHJ1Y3Qo
Jl9fc3RvcmFnZSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9EdW1teSA9IF9U
eXBlPgotICAgIF9fc3RvcmFnZV93cmFwcGVyKAotICAgICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjwhc3RkOjppc19kZWZhdWx0X2NvbnN0cnVjdGlibGU8X0R1bW15Pjo6dmFsdWUsCi0gICAg
ICAgIHZvaWQgKF9fc3RvcmFnZV93cmFwcGVyOjoqKSgpPjo6dHlwZSA9IG51bGxwdHIpIHsKLSAg
ICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZpcnN0LHR5cGVuYW1lIC4uLiBfQXJn
cz4KLSAgICBfX3N0b3JhZ2Vfd3JhcHBlcihfRmlyc3QmJiBfX2ZpcnN0LF9BcmdzJiYgLi4uIF9f
YXJncyl7Ci0gICAgICAgIF9fY29uc3RydWN0KCZfX3N0b3JhZ2Usc3RkOjpmb3J3YXJkPF9GaXJz
dD4oX19maXJzdCksc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9Ci0KLSAg
ICBfVHlwZSYgX19nZXQoKXsKLSAgICAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxfVHlwZSo+KHN0
YXRpY19jYXN0PHZvaWQqPigmX19zdG9yYWdlKSk7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBfVHlw
ZSBjb25zdCYgX19nZXQoKSBjb25zdHsKLSAgICAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxfVHlw
ZSBjb25zdCo+KHN0YXRpY19jYXN0PHZvaWQgY29uc3QqPigmX19zdG9yYWdlKSk7Ci0gICAgfQot
ICAgIHZvaWQgX19kZXN0cm95KCl7Ci0gICAgICAgIF9fZ2V0KCkufl9UeXBlKCk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX19zdG9yYWdlX3dyYXBwZXI8
X1R5cGUmPnsKLSAgICBfVHlwZSogX19zdG9yYWdlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
X0FyZz4KLSAgICBjb25zdGV4cHIgX19zdG9yYWdlX3dyYXBwZXIoX0FyZyYgX19hcmcpOgotICAg
ICAgICBfX3N0b3JhZ2UoJl9fYXJnKXt9Ci0KLSAgICBfVHlwZSYgX19nZXQoKXsKLSAgICAgICAg
cmV0dXJuICpfX3N0b3JhZ2U7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBfVHlwZSBjb25zdCYgX19n
ZXQoKSBjb25zdHsKLSAgICAgICAgcmV0dXJuICpfX3N0b3JhZ2U7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUsZmFs
c2U+ewotICAgIHR5cGVkZWYgX19zdG9yYWdlX3dyYXBwZXI8X1R5cGU+IF9fdHlwZTsKLQotICAg
IHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0KF9fdHlwZSYgX192YWwpewotICAgICAgICBy
ZXR1cm4gX192YWwuX19nZXQoKTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYm
IF9fZ2V0X3JyZWYoX190eXBlJiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1vdmUoX192
YWwuX19nZXQoKSk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgX1R5cGUmIF9f
Z2V0KF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gX192YWwuX19nZXQoKTsK
LSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBfVHlwZSYmIF9fZ2V0X3JyZWYoX190
eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1vdmUoX192YWwuX19nZXQo
KSk7Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIF9fZGVzdHJveShfX3R5cGUmIF9fdmFsKXsKLSAg
ICAgICAgX192YWwuX19kZXN0cm95KCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
X1R5cGUsYm9vbCBfX2I+Ci1zdHJ1Y3QgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmLF9fYj57Ci0g
ICAgdHlwZWRlZiBfVHlwZSogX190eXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYg
X19nZXQoX190eXBlJiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiAqX192YWw7Ci0gICAgfQotICAg
IHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0X3JyZWYoX190eXBlJiBfX3ZhbCl7Ci0gICAg
ICAgIHJldHVybiAqX192YWw7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmIF9f
Z2V0KF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gKl9fdmFsOwotICAgIH0K
LSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiBfX2dldF9ycmVmKF9fdHlwZSBjb25zdCYgX192
YWwpewotICAgICAgICByZXR1cm4gKl9fdmFsOwotICAgIH0KLSAgICBzdGF0aWMgdm9pZCBfX2Rl
c3Ryb3koX190eXBlJil7fQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsYm9vbCBfX2I+
Ci1zdHJ1Y3QgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJixfX2I+ewotICAgIHR5cGVkZWYgX1R5
cGUqIF9fdHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmJiBfX2dldChfX3R5cGUm
IF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PF9UeXBlJiY+KCpfX3ZhbCk7Ci0g
ICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmJiBfX2dldF9ycmVmKF9fdHlwZSYgX192
YWwpewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8X1R5cGUmJj4oKl9fdmFsKTsKLSAgICB9
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0KF9fdHlwZSBjb25zdCYgX192YWwp
ewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8X1R5cGUmJj4oKl9fdmFsKTsKLSAgICB9Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0X3JyZWYoX190eXBlIGNvbnN0JiBfX3Zh
bCl7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxfVHlwZSYmPigqX192YWwpOwotICAgIH0K
LSAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3koX190eXBlJil7fQotfTsKLQotdGVtcGxhdGU8Pgot
dW5pb24gX192YXJpYW50X2RhdGE8PnsKLSAgICBjb25zdGV4cHIgX192YXJpYW50X2RhdGEoKXt9
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXVuaW9uIF9fdmFyaWFudF9kYXRhPF9U
eXBlPnsKLSAgICB0eXBlbmFtZSBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fdHlwZSBfX3Zh
bDsKLSAgICBzdHJ1Y3QgX19kdW1teV90eXBle30gX19kdW1teTsKLQotICAgIGNvbnN0ZXhwciBf
X3ZhcmlhbnRfZGF0YSgpOl9fZHVtbXkoKXt9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4g
X0FyZ3M+Ci0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKGluX3BsYWNlX2luZGV4X3Q8MD4s
X0FyZ3MmJiAuLi4gX19hcmdzKToKLSAgICAgICAgX192YWwoc3RkOjpmb3J3YXJkPF9BcmdzPihf
X2FyZ3MpLi4uKXt9Ci0KLSAgICBfVHlwZSYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPil7Ci0g
ICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fZ2V0KF9fdmFsKTsKLSAg
ICB9Ci0gICAgLypjb25zdGV4cHIqLyBfVHlwZSYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhf
dDwwPil7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fZ2V0X3Jy
ZWYoX192YWwpOwotICAgIH0KLSAgICBjb25zdGV4cHIgY29uc3QgX1R5cGUmIF9fZ2V0KGluX3Bs
YWNlX2luZGV4X3Q8MD4pIGNvbnN0ewotICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8
X1R5cGU+OjpfX2dldChfX3ZhbCk7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBjb25zdCBfVHlwZSYm
IF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVybiBf
X3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fZ2V0X3JyZWYoX192YWwpOwotICAgIH0KLSAgICB2
b2lkIF9fZGVzdHJveShpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgX192YXJpYW50X3N0
b3JhZ2U8X1R5cGU+OjpfX2Rlc3Ryb3koX192YWwpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIF9UeXBlPgotdW5pb24gX192YXJpYW50X2RhdGE8X1R5cGUmPnsKLSAgICB0eXBlbmFt
ZSBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSY+OjpfX3R5cGUgX192YWw7Ci0gICAgc3RydWN0IF9f
ZHVtbXlfdHlwZXt9IF9fZHVtbXk7Ci0KLSAgICBjb25zdGV4cHIgX192YXJpYW50X2RhdGEoKTpf
X2R1bW15KCl7fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIGNvbnN0
ZXhwciBfX3ZhcmlhbnRfZGF0YShpbl9wbGFjZV9pbmRleF90PDA+LF9BcmdzJiYgLi4uIF9fYXJn
cyk6Ci0gICAgICAgIF9fdmFsKCZzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pe30KLQot
ICAgIF9UeXBlJiBfX2dldChpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9f
dmFyaWFudF9zdG9yYWdlPF9UeXBlJj46Ol9fZ2V0KF9fdmFsKTsKLSAgICB9Ci0gICAgY29uc3Rl
eHByIF9UeXBlJiBfX2dldChpbl9wbGFjZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAgICAgcmV0
dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJj46Ol9fZ2V0KF9fdmFsKTsKLSAgICB9Ci0KLSAg
ICBfVHlwZSYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJu
IF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJj46Ol9fZ2V0X3JyZWYoX192YWwpOwotICAgIH0KLSAg
ICBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDwwPikgY29uc3R7
Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSY+OjpfX2dldF9ycmVmKF9f
dmFsKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBfX2Rlc3Ryb3koaW5fcGxhY2VfaW5kZXhfdDww
Pil7Ci0gICAgICAgIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJj46Ol9fZGVzdHJveShfX3ZhbCk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci11bmlvbiBfX3ZhcmlhbnRf
ZGF0YTxfVHlwZSYmPnsKLSAgICB0eXBlbmFtZSBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYmPjo6
X190eXBlIF9fdmFsOwotICAgIHN0cnVjdCBfX2R1bW15X3R5cGV7fSBfX2R1bW15OwotCi0gICAg
Y29uc3RleHByIF9fdmFyaWFudF9kYXRhKCk6X19kdW1teSgpe30KLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIF9Bcmc+Ci0gICAgX192YXJpYW50X2RhdGEoaW5fcGxhY2VfaW5kZXhfdDwwPixfQXJn
JiYgX19hcmcpOgotICAgICAgICBfX3ZhbCgmX19hcmcpe30KLQotICAgIF9UeXBlJiYgX19nZXQo
aW5fcGxhY2VfaW5kZXhfdDwwPil7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxf
VHlwZSYmPjo6X19nZXQoX192YWwpOwotICAgIH0KLSAgICBjb25zdGV4cHIgX1R5cGUmJiBfX2dl
dChpbl9wbGFjZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9z
dG9yYWdlPF9UeXBlJiY+OjpfX2dldChfX3ZhbCk7Ci0gICAgfQotICAgIF9UeXBlJiYgX19nZXRf
cnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9y
YWdlPF9UeXBlJiY+OjpfX2dldF9ycmVmKF9fdmFsKTsKLSAgICB9Ci0gICAgY29uc3RleHByIF9U
eXBlJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAgICAgcmV0
dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJiY+OjpfX2dldF9ycmVmKF9fdmFsKTsKLSAgICB9
Ci0gICAgdm9pZCBfX2Rlc3Ryb3koaW5fcGxhY2VfaW5kZXhfdDwwPil7Ci0gICAgICAgIF9fdmFy
aWFudF9zdG9yYWdlPF9UeXBlJiY+OjpfX2Rlc3Ryb3koX192YWwpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXVuaW9uIF9fdmFyaWFu
dF9kYXRhPF9IZWFkLF9SZXN0Li4uPnsKLSAgICBfX3ZhcmlhbnRfZGF0YTxfSGVhZD4gX19oZWFk
OwotICAgIF9fdmFyaWFudF9kYXRhPF9SZXN0Li4uPiBfX3Jlc3Q7Ci0KLSAgICBjb25zdGV4cHIg
X192YXJpYW50X2RhdGEoKToKLSAgICAgICAgX19oZWFkKCl7fQotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgLi4uIF9BcmdzPgotICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YShpbl9wbGFjZV9p
bmRleF90PDA+LF9BcmdzJiYgLi4uIF9fYXJncyk6Ci0gICAgICAgIF9faGVhZChpbl9wbGFjZTww
PixzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pe30KLSAgICB0ZW1wbGF0ZTxzaXplX3Qg
X0luZGV4LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBjb25zdGV4cHIgX192YXJpYW50X2RhdGEo
aW5fcGxhY2VfaW5kZXhfdDxfSW5kZXg+LF9BcmdzJiYgLi4uIF9fYXJncyk6Ci0gICAgICAgIF9f
cmVzdChpbl9wbGFjZTxfSW5kZXgtMT4sc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKXt9
Ci0KLSAgICBfSGVhZCYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPil7Ci0gICAgICAgIHJldHVy
biBfX2hlYWQuX19nZXQoaW5fcGxhY2U8MD4pOwotICAgIH0KLQotICAgIC8qY29uc3RleHByKi8g
X0hlYWQmJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICByZXR1cm4g
X19oZWFkLl9fZ2V0X3JyZWYoaW5fcGxhY2U8MD4pOwotICAgIH0KLSAgICAKLSAgICBjb25zdGV4
cHIgY29uc3QgX0hlYWQmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pIGNvbnN0ewotICAgICAg
ICByZXR1cm4gX19oZWFkLl9fZ2V0KGluX3BsYWNlPDA+KTsKLSAgICB9Ci0KLSAgICBjb25zdGV4
cHIgY29uc3QgX0hlYWQmJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4pIGNvbnN0ewot
ICAgICAgICByZXR1cm4gX19oZWFkLl9fZ2V0X3JyZWYoaW5fcGxhY2U8MD4pOwotICAgIH0KLSAg
ICAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgotICAgIHR5cGVuYW1lIF9faW5kZXhlZF90
eXBlPF9JbmRleC0xLF9SZXN0Li4uPjo6X190eXBlJiBfX2dldCgKLSAgICAgICAgaW5fcGxhY2Vf
aW5kZXhfdDxfSW5kZXg+KXsKLSAgICAgICAgcmV0dXJuIF9fcmVzdC5fX2dldChpbl9wbGFjZTxf
SW5kZXgtMT4pOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0gICAgLypj
b25zdGV4cHIqLyB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9f
dHlwZSYmIF9fZ2V0X3JyZWYoCi0gICAgICAgIGluX3BsYWNlX2luZGV4X3Q8X0luZGV4Pil7Ci0g
ICAgICAgIHJldHVybiBfX3Jlc3QuX19nZXRfcnJlZihpbl9wbGFjZTxfSW5kZXgtMT4pOwotICAg
IH0KLSAgICAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgotICAgIGNvbnN0ZXhwciBjb25z
dCB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSYgX19n
ZXQoCi0gICAgICAgIGluX3BsYWNlX2luZGV4X3Q8X0luZGV4PikgY29uc3R7Ci0gICAgICAgIHJl
dHVybiBfX3Jlc3QuX19nZXQoaW5fcGxhY2U8X0luZGV4LTE+KTsKLSAgICB9Ci0KLSAgICB0ZW1w
bGF0ZTxzaXplX3QgX0luZGV4PgotICAgIGNvbnN0ZXhwciBjb25zdCB0eXBlbmFtZSBfX2luZGV4
ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSYmIF9fZ2V0X3JyZWYoCi0gICAgICAg
IGluX3BsYWNlX2luZGV4X3Q8X0luZGV4PikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX3Jlc3Qu
X19nZXRfcnJlZihpbl9wbGFjZTxfSW5kZXgtMT4pOwotICAgIH0KLSAgICAKLSAgICAKLSAgICB2
b2lkIF9fZGVzdHJveShpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgX19oZWFkLl9fZGVz
dHJveShpbl9wbGFjZTwwPik7Ci0gICAgfQotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0g
ICAgdm9pZCBfX2Rlc3Ryb3koaW5fcGxhY2VfaW5kZXhfdDxfSW5kZXg+KXsKLSAgICAgICAgX19y
ZXN0Ll9fZGVzdHJveShpbl9wbGFjZTxfSW5kZXgtMT4pOwotICAgIH0KLX07Ci0KLQotdGVtcGxh
dGU8cHRyZGlmZl90Li4uIF9JbmRpY2VzPgotc3RydWN0IF9faW5kZXhfc2VxdWVuY2V7Ci0gICAg
dHlwZWRlZiBfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uLHNpemVvZi4uLihfSW5kaWNlcyk+
IF9fbmV4dDsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBfX2xlbmd0aD1zaXplb2YuLi4o
X0luZGljZXMpOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBf
X3R5cGVfaW5kaWNlczsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fdHlwZV9pbmRpY2VzPD57Ci0g
ICAgdHlwZWRlZiBfX2luZGV4X3NlcXVlbmNlPD4gX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX190eXBlX2luZGljZXM8X1R5cGU+ewotICAgIHR5cGVkZWYg
X19pbmRleF9zZXF1ZW5jZTwwPiBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlw
ZSx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX190eXBlX2luZGljZXM8X1R5cGUsX1Jlc3Qu
Li4+ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX2luZGljZXM8X1Jlc3QuLi4+OjpfX3R5
cGU6Ol9fbmV4dCBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudD4KLXN0
cnVjdCBfX3ZhcmlhbnRfaW5kaWNlczsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4K
LXN0cnVjdCBfX3ZhcmlhbnRfaW5kaWNlczxWYXJpYW50PF9UeXBlcy4uLj4+ewotICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX190eXBlX2luZGljZXM8X1R5cGVzLi4uPjo6X190eXBlIF9fdHlwZTsKLX07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGlj
ZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3Qg
X19tb3ZlX2NvbnN0cnVjdF9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQs
cHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX21vdmVfY29uc3RydWN0X29wX3RhYmxl
PF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIHZv
aWQoKiBjb25zdCBfX2Z1bmNfdHlwZSkoX1ZhcmlhbnQqLF9WYXJpYW50Jik7Ci0gICAgCi0gICAg
dGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX21vdmVfY29uc3Ry
dWN0X2Z1bmMoCi0gICAgICAgIF9WYXJpYW50ICogX19saHMsX1ZhcmlhbnQmIF9fcmhzKXsKLSAg
ICAgICAgX19saHMtPnRlbXBsYXRlIF9fZW1wbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PigKLSAgICAg
ICAgICAgIHN0ZDo6bW92ZShnZXQ8X0luZGV4PihfX3JocykpKTsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgY29uc3QgX19mdW5jX3R5cGUgX19hcHBseVtzaXplb2YuLi4oX0luZGljZXMpXTsKLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1jb25z
dCB0eXBlbmFtZSBfX21vdmVfY29uc3RydWN0X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2Vx
dWVuY2U8X0luZGljZXMuLi4+Pjo6Ci1fX2Z1bmNfdHlwZQotX19tb3ZlX2NvbnN0cnVjdF9vcF90
YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fYXBwbHlbCi0g
ICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09ewotICAgICAgICAmX19tb3ZlX2NvbnN0cnVjdF9mdW5j
PF9JbmRpY2VzPi4uLgotICAgIH07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LAotICAg
ICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGljZXM8X1Zhcmlh
bnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19tb3ZlX2Fzc2lnbl9vcF90YWJsZTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX21vdmVf
YXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsK
LSAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Z1bmNfdHlwZSkoX1ZhcmlhbnQqLF9WYXJpYW50
Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9p
ZCBfX21vdmVfYXNzaWduX2Z1bmMoCi0gICAgICAgIF9WYXJpYW50ICogX19saHMsX1ZhcmlhbnQm
IF9fcmhzKXsKLSAgICAgICAgZ2V0PF9JbmRleD4oKl9fbGhzKT1zdGQ6Om1vdmUoZ2V0PF9JbmRl
eD4oX19yaHMpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgX19mdW5jX3R5cGUgX19hcHBs
eVtzaXplb2YuLi4oX0luZGljZXMpXTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50
LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1jb25zdCB0eXBlbmFtZSBfX21vdmVfYXNzaWduX29w
X3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6Ci1fX2Z1bmNf
dHlwZQotX19tb3ZlX2Fzc2lnbl9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9J
bmRpY2VzLi4uPj46Ol9fYXBwbHlbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09ewotICAgICAg
ICAmX19tb3ZlX2Fzc2lnbl9mdW5jPF9JbmRpY2VzPi4uLgotICAgIH07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIF9WYXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192
YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19jb3B5X2NvbnN0cnVj
dF9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBf
SW5kaWNlcz4KLXN0cnVjdCBfX2NvcHlfY29uc3RydWN0X29wX3RhYmxlPF9WYXJpYW50LF9faW5k
ZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Z1
bmNfdHlwZSkoX1ZhcmlhbnQqLF9WYXJpYW50IGNvbnN0Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8
cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX2NvcHlfY29uc3RydWN0X2Z1bmMo
Ci0gICAgICAgIF9WYXJpYW50ICogX19saHMsX1ZhcmlhbnQgY29uc3QmIF9fcmhzKXsKLSAgICAg
ICAgX19saHMtPnRlbXBsYXRlIF9fZW1wbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PigKLSAgICAgICAg
ICAgIGdldDxfSW5kZXg+KF9fcmhzKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IF9fZnVu
Y190eXBlIF9fYXBwbHlbc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci19OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19j
b3B5X2NvbnN0cnVjdF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2Vz
Li4uPj46OgotX19mdW5jX3R5cGUKLV9fY29weV9jb25zdHJ1Y3Rfb3BfdGFibGU8X1ZhcmlhbnQs
X19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2FwcGx5WwotICAgIHNpemVvZi4uLihf
SW5kaWNlcyldPXsKLSAgICAgICAgJl9fY29weV9jb25zdHJ1Y3RfZnVuYzxfSW5kaWNlcz4uLi4K
LSAgICB9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1l
IF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgot
c3RydWN0IF9fY29weV9hc3NpZ25fb3BfdGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJp
YW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX19jb3B5X2Fzc2lnbl9vcF90YWJs
ZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0gICAgdHlwZWRlZiB2
b2lkKCogY29uc3QgX19mdW5jX3R5cGUpKF9WYXJpYW50KixfVmFyaWFudCBjb25zdCYpOwotICAg
IAotICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGljIHZvaWQgX19jb3B5
X2Fzc2lnbl9mdW5jKAotICAgICAgICBfVmFyaWFudCAqIF9fbGhzLF9WYXJpYW50IGNvbnN0JiBf
X3Jocyl7Ci0gICAgICAgIGdldDxfSW5kZXg+KCpfX2xocyk9Z2V0PF9JbmRleD4oX19yaHMpOwot
ICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlwZSBfX2FwcGx5W3NpemVvZi4uLihf
SW5kaWNlcyldOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4u
LiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fY29weV9hc3NpZ25fb3BfdGFibGU8X1Zhcmlh
bnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKLV9fZnVuY190eXBlCi1fX2NvcHlf
YXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6
X19hcHBseVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX2NvcHlfYXNz
aWduX2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zhcmlh
bnQsCi0gICAgICAgICB0eXBlbmFtZSBfSW5kaWNlcz10eXBlbmFtZSBfX3ZhcmlhbnRfaW5kaWNl
czxfVmFyaWFudD46Ol9fdHlwZT4KLXN0cnVjdCBfX2Rlc3Ryb3lfb3BfdGFibGU7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX19k
ZXN0cm95X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsK
LSAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Z1bmNfdHlwZSkoX1ZhcmlhbnQqKTsKLSAgICAK
LSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyB2b2lkIF9fZGVzdHJv
eV9mdW5jKAotICAgICAgICBfVmFyaWFudCAqIF9fc2VsZil7Ci0gICAgICAgIGlmKF9fc2VsZi0+
X19pbmRleD49MCl7Ci0gICAgICAgICAgICBfX3NlbGYtPl9fc3RvcmFnZS5fX2Rlc3Ryb3koaW5f
cGxhY2U8X0luZGV4Pik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgX19m
dW5jX3R5cGUgX19hcHBseVtzaXplb2YuLi4oX0luZGljZXMpXTsKLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1jb25zdCB0eXBlbmFtZSBf
X2Rlc3Ryb3lfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+
OjoKLV9fZnVuY190eXBlCi1fX2Rlc3Ryb3lfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1
ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2FwcGx5WwotICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsK
LSAgICAgICAgJl9fZGVzdHJveV9mdW5jPF9JbmRpY2VzPi4uLgotICAgIH07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIF9WYXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUg
X192YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19zd2FwX29wX3Rh
YmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2Vz
Pgotc3RydWN0IF9fc3dhcF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRp
Y2VzLi4uPj57Ci0gICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19mdW5jX3R5cGUpKF9WYXJpYW50
JixfVmFyaWFudCYpOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0gICAg
c3RhdGljIHZvaWQgX19zd2FwX2Z1bmMoCi0gICAgICAgIF9WYXJpYW50ICYgX19saHMsX1Zhcmlh
bnQgJiBfX3Jocyl7Ci0gICAgICAgIHN3YXAoZ2V0PF9JbmRleD4oX19saHMpLGdldDxfSW5kZXg+
KF9fcmhzKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IF9fZnVuY190eXBlIF9fYXBwbHlb
c2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxw
dHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19zd2FwX29wX3RhYmxlPF9W
YXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6Ci1fX2Z1bmNfdHlwZQotX19z
d2FwX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19h
cHBseVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX3N3YXBfZnVuYzxf
SW5kaWNlcz4uLi4KLSAgICB9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAg
ICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50
Pjo6X190eXBlPgotc3RydWN0IF9fZXF1YWxpdHlfb3BfdGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX19lcXVhbGl0eV9v
cF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0gICAgdHlw
ZWRlZiBib29sKCogY29uc3QgX19jb21wYXJlX2Z1bmNfdHlwZSkoX1ZhcmlhbnQgY29uc3QmLF9W
YXJpYW50IGNvbnN0Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgX19lcXVhbGl0eV9jb21wYXJlX2Z1bmMoCi0gICAgICAg
IF9WYXJpYW50IGNvbnN0JiBfX2xocyxfVmFyaWFudCBjb25zdCYgX19yaHMpewotICAgICAgICBy
ZXR1cm4gZ2V0PF9JbmRleD4oX19saHMpPT1nZXQ8X0luZGV4PihfX3Jocyk7Ci0gICAgfQotCi0g
ICAgc3RhdGljIGNvbnN0ZXhwciBfX2NvbXBhcmVfZnVuY190eXBlIF9fZXF1YWxpdHlfY29tcGFy
ZVtzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX2VxdWFsaXR5X2NvbXBhcmVfZnVu
YzxfSW5kaWNlcz4uLi4KLSAgICB9OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQs
cHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2VxdWFsaXR5X29w
X3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6Ci1fX2NvbXBh
cmVfZnVuY190eXBlCi1fX2VxdWFsaXR5X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVu
Y2U8X0luZGljZXMuLi4+Pjo6X19lcXVhbGl0eV9jb21wYXJlWwotICAgIHNpemVvZi4uLihfSW5k
aWNlcyldOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1l
IF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgot
c3RydWN0IF9fbGVzc190aGFuX29wX3RhYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFu
dCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9fbGVzc190aGFuX29wX3RhYmxlPF9W
YXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIGJvb2wo
KiBjb25zdCBfX2NvbXBhcmVfZnVuY190eXBlKShfVmFyaWFudCBjb25zdCYsX1ZhcmlhbnQgY29u
c3QmKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBfX2xlc3NfdGhhbl9jb21wYXJlX2Z1bmMoCi0gICAgICAgIF9WYXJpYW50
IGNvbnN0JiBfX2xocyxfVmFyaWFudCBjb25zdCYgX19yaHMpewotICAgICAgICByZXR1cm4gZ2V0
PF9JbmRleD4oX19saHMpPGdldDxfSW5kZXg+KF9fcmhzKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
Y29uc3RleHByIF9fY29tcGFyZV9mdW5jX3R5cGUgX19sZXNzX3RoYW5fY29tcGFyZVtzaXplb2Yu
Li4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX2xlc3NfdGhhbl9jb21wYXJlX2Z1bmM8X0luZGlj
ZXM+Li4uCi0gICAgfTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZf
dCAuLi4gX0luZGljZXM+Ci1jb25zdGV4cHIgdHlwZW5hbWUgX19sZXNzX3RoYW5fb3BfdGFibGU8
X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKLV9fY29tcGFyZV9mdW5j
X3R5cGUKLV9fbGVzc190aGFuX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0lu
ZGljZXMuLi4+Pjo6X19sZXNzX3RoYW5fY29tcGFyZVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMp
XTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQ+Ci1zdHJ1Y3QgX192YXJpYW50X3N0b3Jh
Z2VfdHlwZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0Rlcml2ZWQsYm9vbCBfX3RyaXZpYWxfZGVz
dHJ1Y3Rvcj4KLXN0cnVjdCBfX3ZhcmlhbnRfYmFzZQotewotICAgIH5fX3ZhcmlhbnRfYmFzZSgp
ewotICAgICAgICBzdGF0aWNfY2FzdDxfRGVyaXZlZCo+KHRoaXMpLT5fX2Rlc3Ryb3lfc2VsZigp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9EZXJpdmVkPgotc3RydWN0IF9fdmFy
aWFudF9iYXNlPF9EZXJpdmVkLHRydWU+ewotfTsKLQotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09m
ZnNldCx0eXBlbmFtZSBfQ3VycmVudFNlcXVlbmNlLAotICAgICAgICAgdHlwZW5hbWUgX1R5cGUs
dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9pbmRpY2VzX2hlbHBlcjsKLQotdGVt
cGxhdGU8cHRyZGlmZl90IF9PZmZzZXQscHRyZGlmZl90IC4uLiBfSW5kaWNlcywKLSAgICAgICAg
IHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2FsbF9pbmRpY2Vz
X2hlbHBlcjwKLSAgICBfT2Zmc2V0LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+LAotICAg
IF9UeXBlLF9UeXBlLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fYWxsX2luZGlj
ZXNfaGVscGVyPAotICAgICAgICBfT2Zmc2V0KzEsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4u
LixfT2Zmc2V0PixfVHlwZSxfUmVzdC4uLj46Ol9fdHlwZQotICAgICAgICBfX3R5cGU7Ci19Owot
Ci10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBfQ3VycmVudFNlcXVlbmNlLAot
ICAgICAgICAgdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0
Pgotc3RydWN0IF9fYWxsX2luZGljZXNfaGVscGVyPF9PZmZzZXQsX0N1cnJlbnRTZXF1ZW5jZSxf
VHlwZSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2FsbF9pbmRpY2Vz
X2hlbHBlcjwKLSAgICAgICAgX09mZnNldCsxLF9DdXJyZW50U2VxdWVuY2UsX1R5cGUsX1Jlc3Qu
Li4+OjpfX3R5cGUgX190eXBlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlw
ZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBfX2FsbF9pbmRp
Y2VzX2hlbHBlcjxfT2Zmc2V0LF9DdXJyZW50U2VxdWVuY2UsX1R5cGU+ewotICAgIHR5cGVkZWYg
X0N1cnJlbnRTZXF1ZW5jZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0
eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYWxsX2luZGljZXN7Ci0gICAgdHlwZWRlZiB0
eXBlbmFtZSBfX2FsbF9pbmRpY2VzX2hlbHBlcjwKLSAgICAgICAgMCxfX2luZGV4X3NlcXVlbmNl
PD4sX1R5cGUsX1R5cGVzLi4uPjo6X190eXBlIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIC4uLiBfU2VxdWVuY2VzPgotc3RydWN0IF9fY29tYmluZV9zZXF1ZW5jZXM7Ci0KLXRlbXBs
YXRlPHB0cmRpZmZfdCAuLi4gX0luZGljZXMxLHB0cmRpZmZfdCAuLi4gX0luZGljZXMyPgotc3Ry
dWN0IF9fY29tYmluZV9zZXF1ZW5jZXM8Ci0gICAgX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlczEu
Li4+LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMyLi4uPj57Ci0gICAgdHlwZWRlZiBfX2luZGV4
X3NlcXVlbmNlPF9JbmRpY2VzMS4uLixfSW5kaWNlczIuLi4+IF9fdHlwZTsKLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIF9TZXF1ZW5jZSx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19jb21i
aW5lX3NlcXVlbmNlczxfU2VxdWVuY2UsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgdHlwZW5hbWUg
X19jb21iaW5lX3NlcXVlbmNlczwKLSAgICAgICAgX1NlcXVlbmNlLAotICAgICAgICB0eXBlbmFt
ZSBfX2NvbWJpbmVfc2VxdWVuY2VzPF9SZXN0Li4uPjo6X190eXBlPjo6X190eXBlIF9fdHlwZTsK
LX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9JbmRpY2VzPgotc3RydWN0IF9fZmlyc3RfaW5kZXg7
Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfRmlyc3RJbmRleCxwdHJkaWZmX3QgLi4uIF9SZXN0Pgot
c3RydWN0IF9fZmlyc3RfaW5kZXg8X19pbmRleF9zZXF1ZW5jZTxfRmlyc3RJbmRleCxfUmVzdC4u
Lj4+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgcHRyZGlmZl90IF9fdmFsdWU9X0ZpcnN0SW5kZXg7
Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBfQ3VycmVudFNlcXVl
bmNlLAotICAgICAgICAgdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVj
dCBfX2NvbnN0cnVjdGlibGVfbWF0Y2hlc19oZWxwZXI7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBf
T2Zmc2V0LHR5cGVuYW1lIF9TZXF1ZW5jZSx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBfX2NvbnN0
cnVjdGlibGVfbWF0Y2hlc19oZWxwZXI8Ci0gICAgX09mZnNldCxfU2VxdWVuY2UsX1R5cGU+ewot
ICAgIHR5cGVkZWYgX1NlcXVlbmNlIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPGJvb2wgX0FjY2Vw
dCxwdHJkaWZmX3QgX0VudHJ5Pgotc3RydWN0IF9fc2VxdWVuY2Vfb3JfZW1wdHl7Ci0gICAgdHlw
ZWRlZiBfX2luZGV4X3NlcXVlbmNlPD4gX190eXBlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90
IF9FbnRyeT4KLXN0cnVjdCBfX3NlcXVlbmNlX29yX2VtcHR5PHRydWUsX0VudHJ5PnsKLSAgICB0
eXBlZGVmIF9faW5kZXhfc2VxdWVuY2U8X0VudHJ5PiBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxw
dHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBfQ3VycmVudFNlcXVlbmNlLAotICAgICAgICAgdHlw
ZW5hbWUgX1R5cGUsdHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9f
Y29uc3RydWN0aWJsZV9tYXRjaGVzX2hlbHBlcjwKLSAgICBfT2Zmc2V0LF9DdXJyZW50U2VxdWVu
Y2UsX1R5cGUsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYKLSAgICB0eXBlbmFtZSBfX2Nv
bnN0cnVjdGlibGVfbWF0Y2hlc19oZWxwZXI8Ci0gICAgICAgIF9PZmZzZXQrMSwKLSAgICAgICAg
dHlwZW5hbWUgX19jb21iaW5lX3NlcXVlbmNlczwKLSAgICAgICAgICAgIF9DdXJyZW50U2VxdWVu
Y2UsCi0gICAgICAgICAgICB0eXBlbmFtZSBfX3NlcXVlbmNlX29yX2VtcHR5PAotICAgICAgICAg
ICAgICAgIHN0ZDo6aXNfY29uc3RydWN0aWJsZTxfSGVhZCxfVHlwZT46OnZhbHVlLAotICAgICAg
ICAgICAgICAgIF9PZmZzZXQ+OjpfX3R5cGU+OjpfX3R5cGUsCi0gICAgICAgIF9UeXBlLF9SZXN0
Li4uPjo6X190eXBlIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19jb25zdHJ1Y3RpYmxlX21hdGNoZXN7Ci0gICAgdHlw
ZWRlZiB0eXBlbmFtZSBfX2NvbnN0cnVjdGlibGVfbWF0Y2hlc19oZWxwZXI8Ci0gICAgICAgIDAs
X19pbmRleF9zZXF1ZW5jZTw+LF9UeXBlLF9UeXBlcy4uLj46Ol9fdHlwZSBfX3R5cGU7Ci19Owor
dXNpbmcgTW9ub3N0YXRlID0gc3RkOjptb25vc3RhdGU7Cit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBU
eXBlcz4KK3VzaW5nIFZhcmlhbnQgPSBzdGQ6OnZhcmlhbnQ8VHlwZXMuLi4+OwogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdHlwZV9pbmRl
eF90b19jb25zdHJ1Y3R7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2FsbF9pbmRpY2VzPF9UeXBl
LF9UeXBlcy4uLj46Ol9fdHlwZSBfX2RpcmVjdF9tYXRjaGVzOwotICAgIHR5cGVkZWYgdHlwZW5h
bWUgX19hbGxfaW5kaWNlczwKLSAgICAgICAgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8Ci0g
ICAgICAgICAgICB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8X1R5cGU+Ojp0eXBlCi0g
ICAgICAgICAgICA+Ojp0eXBlLF9UeXBlcy4uLj46Ol9fdHlwZSBfX3ZhbHVlX21hdGNoZXM7Ci0g
ICAgdHlwZWRlZiB0eXBlbmFtZSBfX2FsbF9pbmRpY2VzPAotICAgICAgICBfVHlwZSwKLSAgICAg
ICAgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8Ci0gICAgICAgICAgICB0eXBlbmFtZSBzdGQ6
OnJlbW92ZV9yZWZlcmVuY2U8X1R5cGVzPjo6dHlwZQotICAgICAgICAgICAgPjo6dHlwZS4uLj46
Ol9fdHlwZSBfX3JyZWZfbWF0Y2hlczsKLQotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19jb25zdHJ1
Y3RpYmxlX21hdGNoZXM8X1R5cGUsX1R5cGVzLi4uPjo6X190eXBlCi0gICAgX19jb25zdHJ1Y3Rp
YmxlczsKLQotICAgIHN0YXRpY19hc3NlcnQoCi0gICAgICAgIChfX2RpcmVjdF9tYXRjaGVzOjpf
X2xlbmd0aD4wKSB8fAotICAgICAgICAoX192YWx1ZV9tYXRjaGVzOjpfX2xlbmd0aD4wKSB8fAot
ICAgICAgICAoX19ycmVmX21hdGNoZXM6Ol9fbGVuZ3RoPjApIHx8Ci0gICAgICAgIChfX2NvbnN0
cnVjdGlibGVzOjpfX2xlbmd0aD09MSksCi0gICAgICAgICJGb3IgY29udmVyc2lvbiBjb25zdHJ1
Y3Rpb24gb2YgdmFyaWFudHMsIGV4YWN0bHkgb25lIHR5cGUgbXVzdCBiZSBjb25zdHJ1Y3RpYmxl
Iik7Ci0gICAgCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2NvbWJpbmVfc2VxdWVuY2VzPAotICAg
ICAgICBfX2RpcmVjdF9tYXRjaGVzLF9fdmFsdWVfbWF0Y2hlcyxfX3JyZWZfbWF0Y2hlcywKLSAg
ICAgICAgX19jb25zdHJ1Y3RpYmxlcz46Ol9fdHlwZSBfX2FsbF9tYXRjaGVzOwotICAgIAotICAg
IHN0YXRpYyBjb25zdGV4cHIgcHRyZGlmZl90IF9fdmFsdWU9X19maXJzdF9pbmRleDxfX2FsbF9t
YXRjaGVzPjo6X192YWx1ZTsKLX07Ci0KLXN0cnVjdCBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBl
cnsKLSAgICB0ZW1wbGF0ZTwKLSAgICAgICAgcHRyZGlmZl90IF9JbmRleCwKLSAgICAgICAgYm9v
bCBfX2NvbnN0cnVjdF9kaXJlY3RseSwKLSAgICAgICAgYm9vbCBfX2luZGV4ZWRfdHlwZV9oYXNf
bm90aHJvd19tb3ZlLAotICAgICAgICBib29sIF9fb3RoZXJfdHlwZXNfaGF2ZV9ub3Rocm93X21v
dmU+Ci0gICAgc3RydWN0IF9faGVscGVyOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Zhcmlh
bnQsCi0gICAgICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2lu
ZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci0gICAgc3RydWN0IF9fb3BfdGFibGU7Ci19OwotCi10
ZW1wbGF0ZTwKLSAgICBwdHJkaWZmX3QgX0luZGV4LAotICAgIGJvb2wgX19vdGhlcl90eXBlc19o
YXZlX25vdGhyb3dfbW92ZT4KLXN0cnVjdCBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19o
ZWxwZXI8Ci0gICAgX0luZGV4LGZhbHNlLHRydWUsX19vdGhlcl90eXBlc19oYXZlX25vdGhyb3df
bW92ZT57Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCx0eXBlbmFtZSAuLi4gX0Fy
Z3M+Ci0gICAgc3RhdGljIHZvaWQgX190cmFtcG9saW5lKF9WYXJpYW50JiBfX3YsX0FyZ3MmJiAu
Li4gX19hcmdzKXsKLSAgICAgICAgX192LnRlbXBsYXRlIF9fdHdvX3N0YWdlX3JlcGxhY2U8X0lu
ZGV4PihfX2FyZ3MuLi4pOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPAotICAgIHB0cmRpZmZfdCBf
SW5kZXgsCi0gICAgYm9vbCBfX2luZGV4ZWRfdHlwZV9oYXNfbm90aHJvd19tb3ZlLAotICAgIGJv
b2wgX19vdGhlcl90eXBlc19oYXZlX25vdGhyb3dfbW92ZT4KLXN0cnVjdCBfX3JlcGxhY2VfY29u
c3RydWN0X2hlbHBlcjo6X19oZWxwZXI8Ci0gICAgX0luZGV4LHRydWUsX19pbmRleGVkX3R5cGVf
aGFzX25vdGhyb3dfbW92ZSwKLSAgICBfX290aGVyX3R5cGVzX2hhdmVfbm90aHJvd19tb3ZlPnsK
LQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAg
ICBzdGF0aWMgdm9pZCBfX3RyYW1wb2xpbmUoX1ZhcmlhbnQmIF9fdixfQXJncyYmIC4uLiBfX2Fy
Z3MpewotICAgICAgICBfX3YudGVtcGxhdGUgX19kaXJlY3RfcmVwbGFjZTxfSW5kZXg+KHN0ZDo6
Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7Ci0gICAgfQotfTsKLQotCi10ZW1wbGF0ZTwKLSAg
ICBwdHJkaWZmX3QgX0luZGV4Pgotc3RydWN0IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpf
X2hlbHBlcjwKLSAgICBfSW5kZXgsZmFsc2UsZmFsc2UsdHJ1ZT57Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVmFyaWFudCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgc3RhdGljIHZvaWQgX190
cmFtcG9saW5lKF9WYXJpYW50JiBfX3YsX0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgX192
LnRlbXBsYXRlIF9fbG9jYWxfYmFja3VwX3JlcGxhY2U8X0luZGV4PihzdGQ6OmZvcndhcmQ8X0Fy
Z3M+KF9fYXJncykuLi4pOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPAotICAgIHB0cmRpZmZfdCBf
SW5kZXg+Ci1zdHJ1Y3QgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9faGVscGVyPAotICAg
IF9JbmRleCxmYWxzZSxmYWxzZSxmYWxzZT57Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFy
aWFudCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgc3RhdGljIHZvaWQgX190cmFtcG9saW5lKF9W
YXJpYW50JiBfX3YsX0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgX192LnRlbXBsYXRlIF9f
ZGlyZWN0X3JlcGxhY2U8X0luZGV4PihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0lu
ZGljZXM+Ci1zdHJ1Y3QgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8X1Zh
cmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgq
IGNvbnN0IF9fbW92ZV9mdW5jX3R5cGUpKF9WYXJpYW50KixfVmFyaWFudCYpOwotICAgIHR5cGVk
ZWYgdm9pZCgqIGNvbnN0IF9fY29weV9mdW5jX3R5cGUpKF9WYXJpYW50KixfVmFyaWFudCBjb25z
dCYpOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGljIHZv
aWQgX19tb3ZlX2Fzc2lnbl9mdW5jKAotICAgICAgICBfVmFyaWFudCAqIF9fbGhzLF9WYXJpYW50
JiBfX3Jocyl7Ci0gICAgICAgIF9fbGhzLT50ZW1wbGF0ZSBfX3JlcGxhY2VfY29uc3RydWN0PF9J
bmRleD4oc3RkOjptb3ZlKGdldDxfSW5kZXg+KF9fcmhzKSkpOwotICAgICAgICBfX3Jocy5fX2Rl
c3Ryb3lfc2VsZigpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0g
ICAgc3RhdGljIHZvaWQgX19jb3B5X2Fzc2lnbl9mdW5jKAotICAgICAgICBfVmFyaWFudCAqIF9f
bGhzLF9WYXJpYW50IGNvbnN0JiBfX3Jocyl7Ci0gICAgICAgIF9fbGhzLT50ZW1wbGF0ZSBfX3Jl
cGxhY2VfY29uc3RydWN0PF9JbmRleD4oZ2V0PF9JbmRleD4oX19yaHMpKTsKLSAgICB9Ci0gICAg
Ci0gICAgc3RhdGljIGNvbnN0IF9fbW92ZV9mdW5jX3R5cGUgX19tb3ZlX2Fzc2lnbltzaXplb2Yu
Li4oX0luZGljZXMpXTsKLSAgICBzdGF0aWMgY29uc3QgX19jb3B5X2Z1bmNfdHlwZSBfX2NvcHlf
YXNzaWduW3NpemVvZi4uLihfSW5kaWNlcyldOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zh
cmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fcmVwbGFjZV9j
b25zdHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPAotICAgIF9WYXJpYW50LF9faW5kZXhfc2VxdWVu
Y2U8X0luZGljZXMuLi4+Pjo6X19tb3ZlX2Z1bmNfdHlwZQotX19yZXBsYWNlX2NvbnN0cnVjdF9o
ZWxwZXI6Ol9fb3BfdGFibGU8Ci0gICAgX1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNl
cy4uLj4+OjpfX21vdmVfYXNzaWduWwotICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAg
ICAgJl9fbW92ZV9hc3NpZ25fZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUg
X19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8Ci0gICAgX1ZhcmlhbnQsX19p
bmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2NvcHlfZnVuY190eXBlCi1fX3JlcGxhY2Vf
Y29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTwKLSAgICBfVmFyaWFudCxfX2luZGV4X3NlcXVl
bmNlPF9JbmRpY2VzLi4uPj46Ol9fY29weV9hc3NpZ25bCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2Vz
KV09ewotICAgICAgICAmX19jb3B5X2Fzc2lnbl9mdW5jPF9JbmRpY2VzPi4uLgotICAgIH07Ci0K
LXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgscHRyZGlmZl90IF9NYXNrSW5kZXgsdHlwZW5hbWUg
X1N0b3JhZ2U+Ci1zdHJ1Y3QgX19iYWNrdXBfc3RvcmFnZV9vcHN7Ci0gICAgc3RhdGljIHZvaWQg
X19tb3ZlX2NvbnN0cnVjdF9mdW5jKAotICAgICAgICBfU3RvcmFnZSAqIF9fZGVzdCxfU3RvcmFn
ZSYgX19zb3VyY2UpewotICAgICAgICBuZXcoX19kZXN0KSBfU3RvcmFnZSgKLSAgICAgICAgICAg
IGluX3BsYWNlPF9JbmRleD4sCi0gICAgICAgICAgICBzdGQ6Om1vdmUoX19zb3VyY2UuX19nZXQo
aW5fcGxhY2U8X0luZGV4PikpKTsKLSAgICB9Ci0gICAgc3RhdGljIHZvaWQgX19kZXN0cm95X2Z1
bmMoX1N0b3JhZ2UgKiBfX29iail7Ci0gICAgICAgIF9fb2JqLT5fX2Rlc3Ryb3koaW5fcGxhY2U8
X0luZGV4Pik7Ci0gICAgfTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5h
bWUgX1N0b3JhZ2U+Ci1zdHJ1Y3QgX19iYWNrdXBfc3RvcmFnZV9vcHM8X0luZGV4LF9JbmRleCxf
U3RvcmFnZT57Ci0gICAgc3RhdGljIHZvaWQgX19tb3ZlX2NvbnN0cnVjdF9mdW5jKF9TdG9yYWdl
ICosX1N0b3JhZ2UmKXsKLSAgICAgICAgX19USFJPV19FWENFUFRJT04oc3RkOjpiYWRfYWxsb2Mo
KSk7Ci0gICAgfTsKLSAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3lfZnVuYyhfU3RvcmFnZSAqKXsK
LSAgICAgICAgX19USFJPV19FWENFUFRJT04oc3RkOjpiYWRfYWxsb2MoKSk7Ci0gICAgfTsKLX07
Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfTWFza0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlLHR5cGVu
YW1lIF9JbmRpY2VzPgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU7Ci0KLXRlbXBs
YXRlPHB0cmRpZmZfdCBfTWFza0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlLHB0cmRpZmZfdCAuLi4g
X0luZGljZXM+Ci1zdHJ1Y3QgX19iYWNrdXBfc3RvcmFnZV9vcF90YWJsZTwKLSAgICBfTWFza0lu
ZGV4LF9TdG9yYWdlLF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+ID4KK2NvbnN0ZXhwciBi
b29sIGhvbGRzX2FsdGVybmF0aXZlKFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX192KSBfX05P
RVhDRVBUCiB7Ci0gICAgdHlwZWRlZiB2b2lkICgqX19tb3ZlX2Z1bmNfdHlwZSkoX1N0b3JhZ2Ug
KiBfX2Rlc3QsX1N0b3JhZ2UmIF9fc291cmNlKTsKLSAgICB0eXBlZGVmIHZvaWQgKCpfX2Rlc3Ry
b3lfZnVuY190eXBlKShfU3RvcmFnZSAqIF9fb2JqKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxzaXpl
X3QgX0luZGV4PgotICAgIHN0cnVjdCBfX2hlbHBlcnsKLSAgICAgICAgdHlwZWRlZiBfX2JhY2t1
cF9zdG9yYWdlX29wczxfSW5kZXgsX01hc2tJbmRleCxfU3RvcmFnZT4gX19vcHM7Ci0gICAgfTsK
LQotICAgIHN0YXRpYyBjb25zdCBfX21vdmVfZnVuY190eXBlIF9fbW92ZV9vcHNbc2l6ZW9mLi4u
KF9JbmRpY2VzKV07Ci0gICAgc3RhdGljIGNvbnN0IF9fZGVzdHJveV9mdW5jX3R5cGUgX19kZXN0
cm95X29wc1tzaXplb2YuLi4oX0luZGljZXMpXTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBf
TWFza0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlLHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1jb25z
dCB0eXBlbmFtZSBfX2JhY2t1cF9zdG9yYWdlX29wX3RhYmxlPAotICAgIF9NYXNrSW5kZXgsX1N0
b3JhZ2UsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4gPjo6X19tb3ZlX2Z1bmNfdHlwZQot
X19iYWNrdXBfc3RvcmFnZV9vcF90YWJsZTwKLSAgICBfTWFza0luZGV4LF9TdG9yYWdlLF9faW5k
ZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+ID46Ol9fbW92ZV9vcHNbCi0gICAgICAgIHNpemVvZi4u
LihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9faGVscGVyPF9JbmRpY2VzPjo6X19vcHM6Ol9fbW92
ZV9jb25zdHJ1Y3RfZnVuYy4uLgotICAgIH07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfTWFza0lu
ZGV4LHR5cGVuYW1lIF9TdG9yYWdlLHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1jb25zdCB0eXBl
bmFtZSBfX2JhY2t1cF9zdG9yYWdlX29wX3RhYmxlPAotICAgIF9NYXNrSW5kZXgsX1N0b3JhZ2Us
X19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4gPjo6X19kZXN0cm95X2Z1bmNfdHlwZQotX19i
YWNrdXBfc3RvcmFnZV9vcF90YWJsZTwKLSAgICBfTWFza0luZGV4LF9TdG9yYWdlLF9faW5kZXhf
c2VxdWVuY2U8X0luZGljZXMuLi4+ID46Ol9fZGVzdHJveV9vcHNbCi0gICAgc2l6ZW9mLi4uKF9J
bmRpY2VzKV09ewotICAgICAgICAmX19oZWxwZXI8X0luZGljZXM+OjpfX29wczo6X19kZXN0cm95
X2Z1bmMuLi4KLSAgICB9OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4u
LiBfVHlwZXM+Ci1zdHJ1Y3QgX19iYWNrdXBfc3RvcmFnZXsKLSAgICB0eXBlZGVmIF9fdmFyaWFu
dF9kYXRhPF9UeXBlcy4uLj4gX19zdG9yYWdlX3R5cGU7Ci0KLSAgICB0eXBlZGVmIF9fYmFja3Vw
X3N0b3JhZ2Vfb3BfdGFibGU8Ci0gICAgICAgIF9JbmRleCxfX3N0b3JhZ2VfdHlwZSx0eXBlbmFt
ZSBfX3R5cGVfaW5kaWNlczxfVHlwZXMuLi4+OjpfX3R5cGU+Ci0gICAgX19vcF90YWJsZV90eXBl
OwotCi0gICAgcHRyZGlmZl90IF9fYmFja3VwX2luZGV4OwotICAgIF9fc3RvcmFnZV90eXBlJiBf
X2xpdmVfc3RvcmFnZTsKLSAgICBfX3N0b3JhZ2VfdHlwZSBfX2JhY2t1cDsKLQotICAgIF9fYmFj
a3VwX3N0b3JhZ2UocHRyZGlmZl90IF9fbGl2ZV9pbmRleF8sX19zdG9yYWdlX3R5cGUmIF9fbGl2
ZV9zdG9yYWdlXyk6Ci0gICAgICAgIF9fYmFja3VwX2luZGV4KF9fbGl2ZV9pbmRleF8pLF9fbGl2
ZV9zdG9yYWdlKF9fbGl2ZV9zdG9yYWdlXyl7Ci0gICAgICAgIGlmKF9fYmFja3VwX2luZGV4Pj0w
KXsKLSAgICAgICAgICAgIF9fb3BfdGFibGVfdHlwZTo6X19tb3ZlX29wc1tfX2JhY2t1cF9pbmRl
eF0oCi0gICAgICAgICAgICAgICAgJl9fYmFja3VwLF9fbGl2ZV9zdG9yYWdlKTsKLSAgICAgICAg
ICAgIF9fb3BfdGFibGVfdHlwZTo6X19kZXN0cm95X29wc1tfX2JhY2t1cF9pbmRleF0oCi0gICAg
ICAgICAgICAgICAgJl9fbGl2ZV9zdG9yYWdlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICB2b2lk
IF9fZGVzdHJveSgpewotICAgICAgICBpZihfX2JhY2t1cF9pbmRleD49MCkKLSAgICAgICAgICAg
IF9fb3BfdGFibGVfdHlwZTo6X19kZXN0cm95X29wc1tfX2JhY2t1cF9pbmRleF0oCi0gICAgICAg
ICAgICAgICAgJl9fYmFja3VwKTsKLSAgICAgICAgX19iYWNrdXBfaW5kZXg9LTE7Ci0gICAgfQot
ICAgIAotICAgIH5fX2JhY2t1cF9zdG9yYWdlKCl7Ci0gICAgICAgIGlmKF9fYmFja3VwX2luZGV4
Pj0wKXsKLSAgICAgICAgICAgIF9fb3BfdGFibGVfdHlwZTo6X19tb3ZlX29wc1tfX2JhY2t1cF9p
bmRleF0oCi0gICAgICAgICAgICAgICAgJl9fbGl2ZV9zdG9yYWdlLF9fYmFja3VwKTsKLSAgICAg
ICAgICAgIF9fZGVzdHJveSgpOwotICAgICAgICB9Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2FsbF9t
b3ZlX2NvbnN0cnVjdGlibGU8X0hlYWQsX1Jlc3QuLi4+Ci17Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIHZhbHVlPXN0ZDo6aXNfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkPjo6dmFsdWUgJiYg
X19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0
ZTw+Ci1zdHJ1Y3QgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPD46Ci0gICAgc3RkOjp0cnVlX3R5
cGV7fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9tb3Zl
X2Fzc2lnbmFibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVz
dD4KLXN0cnVjdCBfX2FsbF9tb3ZlX2Fzc2lnbmFibGU8X0hlYWQsX1Jlc3QuLi4+Ci17Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXN0ZDo6aXNfbW92ZV9hc3NpZ25hYmxlPF9IZWFk
Pjo6dmFsdWUgJiYgX19hbGxfbW92ZV9hc3NpZ25hYmxlPF9SZXN0Li4uPjo6dmFsdWU7Ci19Owot
Ci10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19hbGxfbW92ZV9hc3NpZ25hYmxlPD46Ci0gICAgc3RkOjp0
cnVlX3R5cGV7fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2Fs
bF9jb3B5X2Fzc2lnbmFibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4u
LiBfUmVzdD4KLXN0cnVjdCBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8X0hlYWQsX1Jlc3QuLi4+Ci17
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXN0ZDo6aXNfY29weV9hc3NpZ25hYmxl
PF9IZWFkPjo6dmFsdWUgJiYgX19hbGxfY29weV9hc3NpZ25hYmxlPF9SZXN0Li4uPjo6dmFsdWU7
Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19hbGxfY29weV9hc3NpZ25hYmxlPD46Ci0gICAg
c3RkOjp0cnVlX3R5cGV7fTsKLQotbmFtZXNwYWNlIF9fc3dhcF90ZXN0X2RldGFpbHsKLXVzaW5n
IHN0ZDo6c3dhcDsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX090aGVyPgotc3RydWN0IF9fc3dhcF9y
ZXN1bHR7fTsKLQotdGVtcGxhdGU8dHlwZW5hbWU+Ci1zdGF0aWMgY2hhciBfX3Rlc3QoLi4uKTsK
LXRlbXBsYXRlIDx0eXBlbmFtZSBfT3RoZXI+Ci1zdGF0aWMgc3RkOjpwYWlyPGNoYXIsIHN0ZDo6
cGFpcjxjaGFyLCBfX3N3YXBfcmVzdWx0PGRlY2x0eXBlKAotICAgIHN3YXAoc3RkOjpkZWNsdmFs
PF9PdGhlciAmPigpLHN0ZDo6ZGVjbHZhbDxfT3RoZXIgJj4oKSkpPj4+Ci1fX3Rlc3QoX090aGVy
ICopOworICAgIHJldHVybiBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPF9UeXBlPihfX3YpOwogfQog
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgX1R5cGU+IHN0cnVjdCBfX2lzX3N3YXBwYWJsZSB7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0KLSAgICAgICAgc2l6ZW9mKF9fc3dhcF90ZXN0
X2RldGFpbDo6X190ZXN0PF9UeXBlPihudWxscHRyKSkgIT0gMTsKLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbGxfc3dhcHBhYmxlOwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfc3dhcHBhYmxl
PF9IZWFkLF9SZXN0Li4uPgotewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1fX2lz
X3N3YXBwYWJsZTxfSGVhZD46OnZhbHVlICYmIF9fYWxsX3N3YXBwYWJsZTxfUmVzdC4uLj46OnZh
bHVlOwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fYWxsX3N3YXBwYWJsZTw+OgotICAgIHN0
ZDo6dHJ1ZV90eXBle307Ci0KLXRlbXBsYXRlPGJvb2wgX01vdmVDb25zdHJ1Y3RpYmxlLHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0
X2ltcGx7fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgot
c3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2NvbnN0cnVjdF9pbXBsPHRydWUsX0hlYWQs
X1Jlc3QuLi4+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1ub2V4Y2VwdChfSGVh
ZChzdGQ6OmRlY2x2YWw8X0hlYWQmJj4oKSkpICYmIF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Nv
bnN0cnVjdF9pbXBsPHRydWUsX1Jlc3QuLi4+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0
cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9jb25zdHJ1Y3RfaW1wbDx0cnVlPnsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0Ogot
X19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0X2ltcGw8X19hbGxfbW92ZV9jb25zdHJ1
Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLF9UeXBlcy4uLj4KLXt9OwotCi10ZW1wbGF0ZTxib29s
IF9Nb3ZlQXNzaWduYWJsZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRf
dmFyaWFudF9tb3ZlX2Fzc2lnbl9pbXBse307Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBfSGVhZCwg
dHlwZW5hbWUuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWdu
X2ltcGw8dHJ1ZSwgX0hlYWQsIF9SZXN0Li4uPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IHZhbHVlID0KLSAgICAgICAgc3RkOjppc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxfSGVhZD46
OnZhbHVlICYmCi0gICAgICAgIHN0ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X0hl
YWQ+Ojp2YWx1ZSAmJgotICAgICAgICBfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9hc3NpZ25faW1w
bDx0cnVlLCBfUmVzdC4uLj46OnZhbHVlOwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fbm9l
eGNlcHRfdmFyaWFudF9tb3ZlX2Fzc2lnbl9pbXBsPHRydWU+ewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCB2YWx1ZT10cnVlOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lLi4uIF9UeXBlcz4K
LXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9hc3NpZ24KLSAgICA6IF9fbm9leGNlcHRf
dmFyaWFudF9tb3ZlX2Fzc2lnbl9pbXBsPAotICAgICAgICAgIF9fYWxsX21vdmVfYXNzaWduYWJs
ZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVj
dGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsCi0gICAgICAgICAgX1R5cGVzLi4uPiB7fTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9jb3B5X2NvbnN0cnVjdGli
bGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVj
dCBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X0hlYWQsX1Jlc3QuLi4+Ci17Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIHZhbHVlPXN0ZDo6aXNfY29weV9jb25zdHJ1Y3RpYmxlPF9IZWFkPjo6
dmFsdWUgJiYgX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9SZXN0Li4uPjo6dmFsdWU7Ci19Owot
Ci10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPD46Ci0gICAgc3Rk
Ojp0cnVlX3R5cGV7fTsKLQotdGVtcGxhdGU8Ym9vbCBfQ29weUNvbnN0cnVjdGlibGUsdHlwZW5h
bWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25z
dHJ1Y3RfaW1wbHt9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jl
c3Q+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8
dHJ1ZSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPW5v
ZXhjZXB0KF9IZWFkKHN0ZDo6ZGVjbHZhbDxfSGVhZCBjb25zdCY+KCkpKSAmJiBfX25vZXhjZXB0
X3ZhcmlhbnRfY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDx0cnVlLF9SZXN0Li4uPjo6dmFsdWU7
Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X2NvbnN0X2NvcHlf
Y29uc3RydWN0X2ltcGw8dHJ1ZT57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXRy
dWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNl
cHRfdmFyaWFudF9jb25zdF9jb3B5X2NvbnN0cnVjdDoKLV9fbm9leGNlcHRfdmFyaWFudF9jb25z
dF9jb3B5X2NvbnN0cnVjdF9pbXBsPF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+
Ojp2YWx1ZSxfVHlwZXMuLi4+Ci17fTsKLQotdGVtcGxhdGU8Ym9vbCBfQ29weU5vbl9Db25zdHJ1
Y3RpYmxlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X25v
bl9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBse307Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFk
LHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbm9uX2NvbnN0
X2NvcHlfY29uc3RydWN0X2ltcGw8dHJ1ZSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIHZhbHVlPW5vZXhjZXB0KF9IZWFkKHN0ZDo6ZGVjbHZhbDxfSGVhZCY+KCkp
KSAmJiBfX25vZXhjZXB0X3ZhcmlhbnRfbm9uX2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8dHJ1
ZSxfUmVzdC4uLj46OnZhbHVlOwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fbm9leGNlcHRf
dmFyaWFudF9ub25fY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDx0cnVlPnsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgdmFsdWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBf
VHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVj
dDoKLV9fbm9leGNlcHRfdmFyaWFudF9ub25fY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDxfX2Fs
bF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsX1R5cGVzLi4uPgote307Ci0K
LXRlbXBsYXRlPGJvb2wgX1N3YXBwYWJsZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9f
bm9leGNlcHRfdmFyaWFudF9zd2FwX2ltcGx7fTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIF9IZWFk
LCB0eXBlbmFtZS4uLiBfUmVzdD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfc3dhcF9pbXBs
PHRydWUsIF9IZWFkLCBfUmVzdC4uLj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1
ZSA9Ci0gICAgICAgIG5vZXhjZXB0KHN3YXAoc3RkOjpkZWNsdmFsPF9IZWFkJj4oKSxzdGQ6OmRl
Y2x2YWw8X0hlYWQmPigpKSkgJiYKLSAgICAgICAgX19ub2V4Y2VwdF92YXJpYW50X3N3YXBfaW1w
bDx0cnVlLCBfUmVzdC4uLj46OnZhbHVlOwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fbm9l
eGNlcHRfdmFyaWFudF9zd2FwX2ltcGw8dHJ1ZT57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IHZhbHVlPXRydWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0
IF9fbm9leGNlcHRfdmFyaWFudF9zd2FwOgotX19ub2V4Y2VwdF92YXJpYW50X3N3YXBfaW1wbDxf
X2FsbF9zd2FwcGFibGU8X1R5cGVzLi4uPjo6dmFsdWUsX1R5cGVzLi4uPgote307Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jbGFzcyBWYXJpYW50OgotICAgICAgICBwcml2YXRl
IF9fdmFyaWFudF9iYXNlPAotICAgIFZhcmlhbnQ8X1R5cGVzLi4uPixfX2FsbF90cml2aWFsbHlf
ZGVzdHJ1Y3RpYmxlPF9UeXBlcy4uLj46Ol9fdmFsdWU+Ci17Ci0gICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci0gICAgdHlwZWRlZiBfX3ZhcmlhbnRfYmFzZTxWYXJpYW50PF9UeXBlcy4uLj4s
X19hbGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxfVHlwZXMuLi4+OjpfX3ZhbHVlPiBfX2Jhc2Vf
dHlwZTsKLSAgICBmcmllbmQgX19iYXNlX3R5cGU7Ci0gICAgZnJpZW5kIHN0cnVjdCBfX2NvcHlf
Y29uc3RydWN0X29wX3RhYmxlPFZhcmlhbnQ+OwotICAgIGZyaWVuZCBzdHJ1Y3QgX19jb3B5X2Fz
c2lnbl9vcF90YWJsZTxWYXJpYW50PjsKLSAgICBmcmllbmQgc3RydWN0IF9fbW92ZV9jb25zdHJ1
Y3Rfb3BfdGFibGU8VmFyaWFudD47Ci0gICAgZnJpZW5kIHN0cnVjdCBfX21vdmVfYXNzaWduX29w
X3RhYmxlPFZhcmlhbnQ+OwotICAgIGZyaWVuZCBzdHJ1Y3QgX19kZXN0cm95X29wX3RhYmxlPFZh
cmlhbnQ+OwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4u
IF9UeXBlczI+Ci0gICAgZnJpZW5kIHN0cnVjdCBfX3ZhcmlhbnRfYWNjZXNzb3I7Ci0KLSAgICBm
cmllbmQgc3RydWN0IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOwotCi0gICAgdHlwZWRlZiBf
X3ZhcmlhbnRfZGF0YTxfVHlwZXMuLi4+IF9fc3RvcmFnZV90eXBlOwotICAgIF9fc3RvcmFnZV90
eXBlIF9fc3RvcmFnZTsKLSAgICB0eXBlbmFtZSBfX2Rpc2NyaW1pbmF0b3JfdHlwZTxzaXplb2Yg
Li4uIChfVHlwZXMpPjo6X190eXBlIF9faW5kZXg7Ci0KLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0lu
ZGV4LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBzaXplX3QgX19lbXBsYWNlX2NvbnN0cnVjdChf
QXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICBuZXcoJl9fc3RvcmFnZSkgX19zdG9yYWdlX3R5
cGUoCi0gICAgICAgICAgICBpbl9wbGFjZTxfSW5kZXg+LHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19h
cmdzKS4uLik7Ci0gICAgICAgIHJldHVybiAgX0luZGV4OwotICAgIH0KLSAgICAKLSAgICB2b2lk
IF9fZGVzdHJveV9zZWxmKCl7Ci0gICAgICAgIGlmKHZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgX19kZXN0cm95X29wX3RhYmxlPFZhcmlhbnQ+
OjpfX2FwcGx5W2luZGV4KCldKHRoaXMpOwotICAgICAgICBfX2luZGV4PS0xOwotICAgIH0KLSAg
ICAKLSAgICBwdHJkaWZmX3QgX19tb3ZlX2NvbnN0cnVjdChWYXJpYW50JiBfX290aGVyKXsKLSAg
ICAgICAgcHRyZGlmZl90IGNvbnN0IF9fb3RoZXJfaW5kZXg9X19vdGhlci5pbmRleCgpOwotICAg
ICAgICBpZihfX290aGVyX2luZGV4PT0tMSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAg
ICAgX19tb3ZlX2NvbnN0cnVjdF9vcF90YWJsZTxWYXJpYW50Pjo6X19hcHBseVtfX290aGVyX2lu
ZGV4XSh0aGlzLF9fb3RoZXIpOwotICAgICAgICBfX290aGVyLl9fZGVzdHJveV9zZWxmKCk7Ci0g
ICAgICAgIHJldHVybiBfX290aGVyX2luZGV4OwotICAgIH0KLQotICAgIHB0cmRpZmZfdCBfX2Nv
cHlfY29uc3RydWN0KFZhcmlhbnQgY29uc3QmIF9fb3RoZXIpewotICAgICAgICBwdHJkaWZmX3Qg
Y29uc3QgX19vdGhlcl9pbmRleD1fX290aGVyLmluZGV4KCk7Ci0gICAgICAgIGlmKF9fb3RoZXJf
aW5kZXg9PS0xKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBfX2NvcHlfY29uc3Ry
dWN0X29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W19fb3RoZXJfaW5kZXhdKHRoaXMsX19vdGhl
cik7Ci0gICAgICAgIHJldHVybiBfX290aGVyX2luZGV4OwotICAgIH0KLQotICAgIHRlbXBsYXRl
PHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHZvaWQgX19yZXBsYWNlX2Nv
bnN0cnVjdChfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f
aW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgX190aGlzX3R5cGU7Ci0gICAg
ICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX2hlbHBlcjwKLSAgICAgICAgICAgIF9J
bmRleCwKLSAgICAgICAgICAgIF9fc3RvcmFnZV9ub3Rocm93X2NvbnN0cnVjdGlibGU8X190aGlz
X3R5cGUsX0FyZ3MuLi4+OjpfX3ZhbHVlIHx8Ci0gICAgICAgICAgICAoc2l6ZW9mLi4uKF9UeXBl
cyk9PTEpLAotICAgICAgICAgICAgX19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxl
PF9fdGhpc190eXBlPjo6X192YWx1ZSwKLSAgICAgICAgICAgIF9fb3RoZXJfc3RvcmFnZV9ub3Ro
cm93X21vdmVfY29uc3RydWN0aWJsZTwKLSAgICAgICAgICAgICAgICBfSW5kZXgsX1R5cGVzLi4u
Pjo6X192YWx1ZQotICAgICAgICAgICAgPjo6X190cmFtcG9saW5lKCp0aGlzLHN0ZDo6Zm9yd2Fy
ZDxfQXJncz4oX19hcmdzKS4uLik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRl
eCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgdm9pZCBfX3R3b19zdGFnZV9yZXBsYWNlKF9Bcmdz
JiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8
X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBfX3R5cGU7Ci0gICAgICAgIF9fdmFyaWFudF9kYXRh
PF9fdHlwZT4gX19sb2NhbCgKLSAgICAgICAgICAgIGluX3BsYWNlPDA+LHN0ZDo6Zm9yd2FyZDxf
QXJncz4oX19hcmdzKS4uLik7Ci0gICAgICAgIF9fZGVzdHJveV9zZWxmKCk7Ci0gICAgICAgIF9f
ZW1wbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PigKLSAgICAgICAgICAgIHN0ZDo6bW92ZShfX2xvY2Fs
Ll9fZ2V0KGluX3BsYWNlPDA+KSkpOwotICAgICAgICBfX2luZGV4PV9JbmRleDsKLSAgICAgICAg
X19sb2NhbC5fX2Rlc3Ryb3koaW5fcGxhY2U8MD4pOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHNp
emVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHZvaWQgX19sb2NhbF9iYWNrdXBf
cmVwbGFjZShfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICBfX2JhY2t1cF9zdG9yYWdlPF9J
bmRleCxfVHlwZXMuLi4+IF9fYmFja3VwKF9faW5kZXgsX19zdG9yYWdlKTsKLSAgICAgICAgX19l
bXBsYWNlX2NvbnN0cnVjdDxfSW5kZXg+KHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7
Ci0gICAgICAgIF9faW5kZXg9X0luZGV4OwotICAgICAgICBfX2JhY2t1cC5fX2Rlc3Ryb3koKTsK
LSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0Fy
Z3M+Ci0gICAgdm9pZCBfX2RpcmVjdF9yZXBsYWNlKF9BcmdzJiYgLi4uIF9fYXJncykgewotICAg
ICAgICBfX2Rlc3Ryb3lfc2VsZigpOwotICAgICAgICBfX2VtcGxhY2VfY29uc3RydWN0PF9JbmRl
eD4oc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICAgICAgX19pbmRleD1fSW5k
ZXg7Ci0gICAgfQotCi0gICAgc3RydWN0IF9fcHJpdmF0ZV90eXBle307Ci0KLXB1YmxpYzoKLSAg
ICBjb25zdGV4cHIgVmFyaWFudCgpCi0gICAgICAgIF9fTk9FWENFUFRfKG5vZXhjZXB0KHR5cGVu
YW1lIF9faW5kZXhlZF90eXBlPDAsX1R5cGVzLi4uPjo6X190eXBlKCkpKToKLSAgICAgICAgX19z
dG9yYWdlKGluX3BsYWNlPDA+KSwKLSAgICAgICAgX19pbmRleCgwKQotICAgIHt9Ci0KLSAgICBj
b25zdGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9fYWxsX21vdmVfY29u
c3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlw
ZSYmIF9fb3RoZXIpCi0gICAgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29u
c3RydWN0PF9UeXBlcy4uLj46OnZhbHVlKToKLSAgICAgICAgX19pbmRleChfX21vdmVfY29uc3Ry
dWN0KF9fb3RoZXIpKQotICAgIHt9Ci0KLSAgICBjb25zdGV4cHIgVmFyaWFudCh0eXBlbmFtZSBz
dGQ6OmNvbmRpdGlvbmFsPCFfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFs
dWUsVmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5cGUmJiBfX290aGVyKT1kZWxldGU7Ci0gICAg
Ci0gICAgY29uc3RleHByIFZhcmlhbnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9j
b3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsVmFyaWFudCxfX3ByaXZhdGVfdHlw
ZT46OnR5cGUmIF9fb3RoZXIpCi0gICAgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X25v
bl9jb25zdF9jb3B5X2NvbnN0cnVjdDxfVHlwZXMuLi4+Ojp2YWx1ZSk6Ci0gICAgICAgIF9faW5k
ZXgoX19jb3B5X2NvbnN0cnVjdChfX290aGVyKSkKLSAgICB7fQotCi0gICAgY29uc3RleHByIFZh
cmlhbnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwhX19hbGxfY29weV9jb25zdHJ1Y3RpYmxl
PF9UeXBlcy4uLj46OnZhbHVlLFZhcmlhbnQsX19wcml2YXRlX3R5cGU+Ojp0eXBlJiBfX290aGVy
KT1kZWxldGU7Ci0KLSAgICBjb25zdGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlv
bmFsPF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9f
cHJpdmF0ZV90eXBlPjo6dHlwZSBjb25zdCYgX19vdGhlcikKLSAgICBfX05PRVhDRVBUXyhfX25v
ZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25zdHJ1Y3Q8X1R5cGVzLi4uPjo6dmFsdWUpOgot
ICAgICAgICBfX2luZGV4KF9fY29weV9jb25zdHJ1Y3QoX19vdGhlcikpCi0gICAge30KLQotICAg
IGNvbnN0ZXhwciBWYXJpYW50KHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8IV9fYWxsX2NvcHlf
Y29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6
dHlwZSBjb25zdCYgX19vdGhlcik9ZGVsZXRlOwotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IF9UeXBlLHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBleHBsaWNpdCBjb25zdGV4cHIgVmFyaWFu
dChpbl9wbGFjZV90eXBlX3Q8X1R5cGU+LF9BcmdzJiYgLi4uIF9fYXJncyk6Ci0gICAgICAgIF9f
c3RvcmFnZSgKLSAgICAgICAgICAgIGluX3BsYWNlPF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMu
Li4+OjpfX3ZhbHVlPiwKLSAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4u
LiksCi0gICAgICAgIF9faW5kZXgoX190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFs
dWUpCi0gICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29uc3RydWN0aWJsZTxf
VHlwZSxfQXJncy4uLj46OnZhbHVlLCJUeXBlIG11c3QgYmUgY29uc3RydWN0aWJsZSBmcm9tIGFy
Z3MiKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBf
QXJncz4KLSAgICBleHBsaWNpdCBjb25zdGV4cHIgVmFyaWFudChpbl9wbGFjZV9pbmRleF90PF9J
bmRleD4sX0FyZ3MmJiAuLi4gX19hcmdzKToKLSAgICAgICAgX19zdG9yYWdlKGluX3BsYWNlPF9J
bmRleD4sc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKSwKLSAgICAgICAgX19pbmRleChf
SW5kZXgpCi0gICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29uc3RydWN0aWJs
ZTx0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlLF9Bcmdz
Li4uPjo6dmFsdWUsIlR5cGUgbXVzdCBiZSBjb25zdHJ1Y3RpYmxlIGZyb20gYXJncyIpOwotICAg
IH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLSAgICBjb25zdGV4cHIgVmFy
aWFudChfVHlwZSYmIF9feCk6Ci0gICAgICAgIF9fc3RvcmFnZSgKLSAgICAgICAgICAgIGluX3Bs
YWNlPAotICAgICAgICAgICAgX190eXBlX2luZGV4X3RvX2NvbnN0cnVjdDxfVHlwZSxfVHlwZXMu
Li4+OjpfX3ZhbHVlPiwKLSAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfVHlwZT4oX194KSksCi0g
ICAgICAgIF9faW5kZXgoX190eXBlX2luZGV4X3RvX2NvbnN0cnVjdDxfVHlwZSxfVHlwZXMuLi4+
OjpfX3ZhbHVlKQotICAgIHt9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSwKLSAgICAg
ICAgICAgICB0eXBlbmFtZSBfRW5hYmxlPQotICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmPAotICAgICAgICAgICAgICAgICAoX19jb25zdHJ1Y3RpYmxlX21hdGNoZXM8c3RkOjpp
bml0aWFsaXplcl9saXN0PF9UeXBlPixfVHlwZXMuLi4+OjpfX3R5cGU6Ol9fbGVuZ3RoPjApCi0g
ICAgICAgICAgICAgPjo6dHlwZT4KLSAgICBjb25zdGV4cHIgVmFyaWFudChzdGQ6OmluaXRpYWxp
emVyX2xpc3Q8X1R5cGU+IF9feCk6Ci0gICAgICAgIF9fc3RvcmFnZSgKLSAgICAgICAgICAgIGlu
X3BsYWNlPAotICAgICAgICAgICAgX190eXBlX2luZGV4X3RvX2NvbnN0cnVjdDxzdGQ6OmluaXRp
YWxpemVyX2xpc3Q8X1R5cGU+LF9UeXBlcy4uLj46Ol9fdmFsdWU+LAotICAgICAgICAgICAgX194
KSwKLSAgICAgICAgX19pbmRleChfX3R5cGVfaW5kZXhfdG9fY29uc3RydWN0PHN0ZDo6aW5pdGlh
bGl6ZXJfbGlzdDxfVHlwZT4sX1R5cGVzLi4uPjo6X192YWx1ZSkKLSAgICB7fQotICAgIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotICAgIFZhcmlhbnQmIG9wZXJhdG9yPShfVHlwZSYm
IF9feCl7Ci0gICAgICAgIGNvbnN0ZXhwciBzaXplX3QgX0luZGV4PQotICAgICAgICAgICAgX190
eXBlX2luZGV4X3RvX2NvbnN0cnVjdDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlOwotICAgICAg
ICBpZihfSW5kZXg9PV9faW5kZXgpewotICAgICAgICAgICAgZ2V0PF9JbmRleD4oKnRoaXMpPXN0
ZDo6Zm9yd2FyZDxfVHlwZT4oX194KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlewotICAgICAg
ICAgICAgX19yZXBsYWNlX2NvbnN0cnVjdDxfSW5kZXg+KHN0ZDo6Zm9yd2FyZDxfVHlwZT4oX194
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIFZhcmlh
bnQgJm9wZXJhdG9yPSgKLSAgICAgICAgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwKLSAgICAg
ICAgICAgICEoX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0g
ICAgICAgICAgICAgIF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAm
JgotICAgICAgICAgICAgICBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8X1R5cGVzLi4uPjo6dmFsdWUp
LAotICAgICAgICAgICAgVmFyaWFudCwgX19wcml2YXRlX3R5cGU+Ojp0eXBlIGNvbnN0ICZfX290
aGVyKSA9IGRlbGV0ZTsKLQotICAgIFZhcmlhbnQgJm9wZXJhdG9yPSgKLSAgICAgICAgdHlwZW5h
bWUgc3RkOjpjb25kaXRpb25hbDwKLSAgICAgICAgICAgIF9fYWxsX2NvcHlfY29uc3RydWN0aWJs
ZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICAgIF9fYWxsX21vdmVfY29uc3Ry
dWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICAgIF9fYWxsX2NvcHlf
YXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSwKLSAgICAgICAgICAgIFZhcmlhbnQsIF9fcHJp
dmF0ZV90eXBlPjo6dHlwZSBjb25zdCAmX19vdGhlcikgewotICAgICAgICBpZiAoX19vdGhlci52
YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIF9fZGVzdHJveV9zZWxmKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZihfX290aGVyLmluZGV4KCk9PWluZGV4KCkpewot
ICAgICAgICAgICAgX19jb3B5X2Fzc2lnbl9vcF90YWJsZTxWYXJpYW50Pjo6X19hcHBseVtpbmRl
eCgpXSh0aGlzLF9fb3RoZXIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2V7Ci0gICAgICAgICAg
ICBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTxWYXJpYW50Pjo6X19jb3B5
X2Fzc2lnblsKLSAgICAgICAgICAgICAgICBfX290aGVyLmluZGV4KCldKHRoaXMsX19vdGhlcik7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAgICBWYXJpYW50ICZv
cGVyYXRvcj0oCi0gICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8Ci0gICAgICAgICAg
ICAhKF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAg
ICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAg
ICAgICAgICAgICAgX19hbGxfY29weV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlKSwKLSAg
ICAgICAgICAgIFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZSAmX19vdGhlcikgPSBkZWxl
dGU7Ci0KLSAgICBWYXJpYW50ICZvcGVyYXRvcj0oCi0gICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29u
ZGl0aW9uYWw8Ci0gICAgICAgICAgICBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4u
Pjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5
cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgICBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8
X1R5cGVzLi4uPjo6dmFsdWUsCi0gICAgICAgICAgICBWYXJpYW50LCBfX3ByaXZhdGVfdHlwZT46
OnR5cGUgJl9fb3RoZXIpIHsKLSAgICAgICAgaWYoX19vdGhlci52YWx1ZWxlc3NfYnlfZXhjZXB0
aW9uKCkpewotICAgICAgICAgICAgX19kZXN0cm95X3NlbGYoKTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlIGlmKF9fb3RoZXIuaW5kZXgoKT09aW5kZXgoKSl7Ci0gICAgICAgICAgICBfX2NvcHlf
YXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W2luZGV4KCldKHRoaXMsX19vdGhlcik7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1
Y3RfaGVscGVyOjpfX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2NvcHlfYXNzaWduWwotICAgICAgICAg
ICAgICAgIF9fb3RoZXIuaW5kZXgoKV0odGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIFZhcmlhbnQgJm9wZXJhdG9yPSgKLSAgICAgICAg
dHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwKLSAgICAgICAgICAgICEoX19hbGxfbW92ZV9jb25z
dHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgIF9fYWxsX21vdmVf
YXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSksCi0gICAgICAgICAgICBWYXJpYW50LCBfX3By
aXZhdGVfdHlwZT46OnR5cGUgJiZfX290aGVyKSA9IGRlbGV0ZTsKLQotICAgIFZhcmlhbnQgJm9w
ZXJhdG9yPSgKLSAgICAgICAgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9tb3ZlX2Nv
bnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19hbGxfbW92ZV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBl
Pjo6dHlwZSAmJgotICAgICAgICAgICAgX19vdGhlcikgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92
YXJpYW50X21vdmVfYXNzaWduPF9UeXBlcy4uLj46OnZhbHVlKSB7Ci0gICAgICAgIGlmIChfX290
aGVyLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgewotICAgICAgICAgICAgX19kZXN0cm95X3Nl
bGYoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKF9fb3RoZXIuaW5kZXgoKT09aW5kZXgo
KSl7Ci0gICAgICAgICAgICBfX21vdmVfYXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5
W2luZGV4KCldKHRoaXMsX19vdGhlcik7Ci0gICAgICAgICAgICBfX290aGVyLl9fZGVzdHJveV9z
ZWxmKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAgIF9fcmVwbGFjZV9j
b25zdHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPFZhcmlhbnQ+OjpfX21vdmVfYXNzaWduWwotICAg
ICAgICAgICAgICAgIF9fb3RoZXIuaW5kZXgoKV0odGhpcyxfX290aGVyKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5
cGUsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHZvaWQgZW1wbGFjZShfQXJncyYmIC4uLiBfX2Fy
Z3MpewotICAgICAgICBfX2RpcmVjdF9yZXBsYWNlPF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMu
Li4+OjpfX3ZhbHVlPigKLSAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4u
Lik7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4u
IF9BcmdzPgotICAgIHZvaWQgZW1wbGFjZShfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICBf
X2RpcmVjdF9yZXBsYWNlPF9JbmRleD4oc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsK
LSAgICB9Ci0gICAgCi0gICAgY29uc3RleHByIGJvb2wgdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigp
IGNvbnN0IF9fTk9FWENFUFR7Ci0gICAgICAgIHJldHVybiBfX2luZGV4PT0tMTsKLSAgICB9Ci0g
ICAgY29uc3RleHByIHB0cmRpZmZfdCBpbmRleCgpIGNvbnN0IF9fTk9FWENFUFR7Ci0gICAgICAg
IHJldHVybiBfX2luZGV4OwotICAgIH0KLQotICAgIHZvaWQgc3dhcCgKLSAgICAgICAgdHlwZW5h
bWUgc3RkOjpjb25kaXRpb25hbDwKLSAgICAgICAgICAgIF9fYWxsX3N3YXBwYWJsZTxfVHlwZXMu
Li4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICAgIF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxf
VHlwZXMuLi4+Ojp2YWx1ZSwKLSAgICAgICAgICAgIFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6
dHlwZQotICAgICAgICAgICAgJl9fb3RoZXIpIF9fTk9FWENFUFRfKF9fbm9leGNlcHRfdmFyaWFu
dF9zd2FwPF9UeXBlcy4uLj46OnZhbHVlKSB7Ci0gICAgICAgIGlmIChfX290aGVyLmluZGV4KCkg
PT0gaW5kZXgoKSkgewotICAgICAgICAgICAgaWYoIXZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkK
LSAgICAgICAgICAgICAgICBfX3N3YXBfb3BfdGFibGU8VmFyaWFudD46Ol9fYXBwbHlbaW5kZXgo
KV0oKnRoaXMsX19vdGhlcik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAg
IFZhcmlhbnQgX190ZW1wKHN0ZDo6bW92ZShfX290aGVyKSk7Ci0gICAgICAgICAgICBfX290aGVy
Ll9faW5kZXg9X19vdGhlci5fX21vdmVfY29uc3RydWN0KCp0aGlzKTsKLSAgICAgICAgICAgIF9f
aW5kZXg9X19tb3ZlX2NvbnN0cnVjdChfX3RlbXApOwotICAgICAgICB9Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8PgotY2xhc3MgVmFyaWFudDw+ewotcHVibGljOgotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotICAgIFZhcmlhbnQoKT1kZWxldGU7Ci0gICAgCi0gICAgY29uc3RleHByIGJv
b2wgdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpIGNvbnN0IF9fTk9FWENFUFR7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLSAgICBjb25zdGV4cHIgcHRyZGlmZl90IGluZGV4KCkgY29uc3Qg
X19OT0VYQ0VQVHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIHZvaWQgc3dhcChW
YXJpYW50Jil7fQotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lLi4uIF9UeXBlcz4KLXR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPF9fYWxsX3N3YXBwYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMu
Li4+Ojp2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQ+Ojp0eXBlCi1zd2FwKFZh
cmlhbnQ8X1R5cGVzLi4uPiAmX19saHMsIFZhcmlhbnQ8X1R5cGVzLi4uPiAmX19yaHMpIF9fTk9F
WENFUFRfKAotICAgIF9fbm9leGNlcHRfdmFyaWFudF9zd2FwPF9UeXBlcy4uLj46OnZhbHVlKSB7
Ci0gICAgX19saHMuc3dhcChfX3Jocyk7Ci19Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgs
dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3ZhcmlhbnRfYWNjZXNzb3J7Ci0gICAgdHlw
ZWRlZiB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIF9f
dHlwZTsKLSAgICBzdGF0aWMgY29uc3RleHByIF9fdHlwZSYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4u
PiYgX192KXsKLSAgICAgICAgcmV0dXJuIF9fdi5fX3N0b3JhZ2UuX19nZXQoaW5fcGxhY2U8X0lu
ZGV4Pik7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgX190eXBlIGNvbnN0JiBnZXQoVmFy
aWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpewotICAgICAgICByZXR1cm4gX192Ll9fc3RvcmFn
ZS5fX2dldChpbl9wbGFjZTxfSW5kZXg+KTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBf
X3R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+JiYgX192KXsKLSAgICAgICAgcmV0dXJuIF9f
di5fX3N0b3JhZ2UuX19nZXRfcnJlZihpbl9wbGFjZTxfSW5kZXg+KTsKLSAgICB9Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBjb25zdCBfX3R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0
JiYgX192KXsKLSAgICAgICAgcmV0dXJuIF9fdi5fX3N0b3JhZ2UuX19nZXRfcnJlZihpbl9wbGFj
ZTxfSW5kZXg+KTsKLSAgICB9Ci19OwotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFt
ZSAuLi4gX1R5cGVzPgotY29uc3RleHByIF9UeXBlJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+JiBf
X3YpewotICAgIHJldHVybiBnZXQ8X190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFs
dWU+KF9fdik7Citjb25zdGV4cHIgX1R5cGUmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mIF9fdikK
K3sKKyAgICByZXR1cm4gc3RkOjpnZXQ8X1R5cGU+KF9fdik7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgX1R5cGUmJiBnZXQoVmFy
aWFudDxfVHlwZXMuLi4+JiYgX192KXsKLSAgICByZXR1cm4gZ2V0PF9fdHlwZV9pbmRleDxfVHlw
ZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPihzdGQ6Om1vdmUoX192KSk7Citjb25zdGV4cHIgX1R5cGUm
JiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+JiYgX192KQoreworICAgIHJldHVybiBzdGQ6OmdldDxf
VHlwZT4oV1RGTW92ZShfX3YpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5h
bWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBfVHlwZSBjb25zdCYgZ2V0KFZhcmlhbnQ8X1R5cGVz
Li4uPiBjb25zdCYgX192KXsKLSAgICByZXR1cm4gZ2V0PF9fdHlwZV9pbmRleDxfVHlwZSxfVHlw
ZXMuLi4+OjpfX3ZhbHVlPihfX3YpOworY29uc3RleHByIF9UeXBlIGNvbnN0JiBnZXQoVmFyaWFu
dDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpCit7CisgICAgcmV0dXJuIHN0ZDo6Z2V0PF9UeXBlPihf
X3YpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgot
Y29uc3RleHByIGNvbnN0IF9UeXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYmIF9f
dil7Ci0gICAgcmV0dXJuIGdldDxfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1
ZT4oc3RkOjptb3ZlKF9fdikpOwotfQotCi0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlw
ZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5k
ZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0JiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0
JiBfX3YpewotICAgIHJldHVybiAqKAotICAgICAgICAoX0luZGV4IT1fX3YuaW5kZXgoKSkKLSAg
ICAgICAgICAgID8gc3RkOjphZGRyZXNzb2YoX190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3M8dHlw
ZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBjb25zdCY+KCJC
YWQgVmFyaWFudCBpbmRleCBpbiBnZXQiKSkKLSAgICAgICAgICAgIDogc3RkOjphZGRyZXNzb2Yo
X192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoX192KSkKLSAgICApOwot
fQotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25z
dGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYg
Z2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYgX192KXsKLSAgICByZXR1cm4gKigKLSAgICAgICAgKF9J
bmRleCE9X192LmluZGV4KCkpCi0gICAgICAgICAgICA/IHN0ZDo6YWRkcmVzc29mKF9fdGhyb3df
YmFkX3ZhcmlhbnRfYWNjZXNzPHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMu
Li4+OjpfX3R5cGUmPigiQmFkIFZhcmlhbnQgaW5kZXggaW4gZ2V0IikpCi0gICAgICAgICAgICA6
IHN0ZDo6YWRkcmVzc29mKF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0
KF9fdikpCi0gICAgKTsKLX0KLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAu
Li4gX1R5cGVzPgotY29uc3RleHByIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlw
ZXMuLi4+OjpfX3R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+JiYgX192KXsKLSAgICByZXR1
cm4gX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoCi0gICAgICAgICgo
KF9JbmRleCE9X192LmluZGV4KCkpID8gX190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3M8aW50Pigi
QmFkIFZhcmlhbnQgaW5kZXggaW4gZ2V0IikgOiAwKSwgc3RkOjptb3ZlKF9fdikpCi0gICAgKTsK
K2NvbnN0ZXhwciBjb25zdCBfVHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmJiBf
X3YpCit7CisgICAgcmV0dXJuIHN0ZDo6Z2V0PF9UeXBlPihXVEZNb3ZlKF9fdikpOwogfQogCi10
ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIg
Y29uc3QgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYm
IGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmJiBfX3YpewotICAgIHJldHVybiBfX3Zhcmlh
bnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldCgKLSAgICAgICAgKCgoX0luZGV4IT1f
X3YuaW5kZXgoKSkgPyBfX3Rocm93X2JhZF92YXJpYW50X2FjY2VzczxpbnQ+KCJCYWQgVmFyaWFu
dCBpbmRleCBpbiBnZXQiKSA6IDApLCBzdGQ6Om1vdmUoX192KSkKLSAgICApOwordGVtcGxhdGUg
PHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZhcmlhbnRzPgorY29uc3RleHByIGF1dG8g
dmlzaXQoVmlzaXRvciYmIHZpc2l0b3IsIFZhcmlhbnRzJiYuLi4gdmFyaWFudHMpIC0+IGRlY2x0
eXBlKHN0ZDo6dmlzaXQoc3RkOjpmb3J3YXJkPFZpc2l0b3I+KHZpc2l0b3IpLCBzdGQ6OmZvcndh
cmQ8VmFyaWFudHM+KHZhcmlhbnRzKS4uLikpCit7CisgICAgcmV0dXJuIHN0ZDo6dmlzaXQoc3Rk
Ojpmb3J3YXJkPFZpc2l0b3I+KHZpc2l0b3IpLCBzdGQ6OmZvcndhcmQ8VmFyaWFudHM+KHZhcmlh
bnRzKS4uLik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PF9UeXBlPiBnZXRfaWYoVmFyaWFudDxf
VHlwZXMuLi4+KiBfX3YpIHsKLSAgICByZXR1cm4gKF9fdHlwZV9pbmRleDxfVHlwZSwgX1R5cGVz
Li4uPjo6X192YWx1ZSAhPSBfX3YtPmluZGV4KCkpID8gbnVsbHB0ciA6IHN0ZDo6YWRkcmVzc29m
KGdldDxfVHlwZT4oKl9fdikpOworY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDxfVHlwZT4g
Z2V0X2lmKFZhcmlhbnQ8X1R5cGVzLi4uPiogdmFyaWFudCkKK3sKKyAgICByZXR1cm4gc3RkOjpn
ZXRfaWY8X1R5cGU+KHZhcmlhbnQpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBl
bmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDxfVHlwZSBjb25z
dD4gZ2V0X2lmKFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCogX192KSB7Ci0gICAgcmV0dXJuIChf
X3R5cGVfaW5kZXg8X1R5cGUsIF9UeXBlcy4uLj46Ol9fdmFsdWUgIT0gX192LT5pbmRleCgpKSA/
IG51bGxwdHIgOiBzdGQ6OmFkZHJlc3NvZihnZXQ8X1R5cGU+KCpfX3YpKTsKK2NvbnN0ZXhwciBz
dGQ6OmFkZF9wb2ludGVyX3Q8X1R5cGUgY29uc3Q+IGdldF9pZihWYXJpYW50PF9UeXBlcy4uLj4g
Y29uc3QqIHZhcmlhbnQpCit7CisgICAgcmV0dXJuIHN0ZDo6Z2V0X2lmPF9UeXBlPih2YXJpYW50
KTsKIH0KIAogdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgot
Y29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDx0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5k
ZXgsIF9UeXBlcy4uLj46Ol9fdHlwZT4gZ2V0X2lmKFZhcmlhbnQ8X1R5cGVzLi4uPiogX192KSB7
Ci0gICAgcmV0dXJuICgoX0luZGV4ICE9IF9fdi0+aW5kZXgoKSkgPyBudWxscHRyIDoKLSAgICAg
ICAgc3RkOjphZGRyZXNzb2YoX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCwgX1R5cGVzLi4uPjo6
Z2V0KCpfX3YpKSk7Citjb25zdGV4cHIgdHlwZW5hbWUgc3RkOjphZGRfcG9pbnRlcl90PHN0ZDo6
dmFyaWFudF9hbHRlcm5hdGl2ZV90PF9JbmRleCwgc3RkOjp2YXJpYW50PF9UeXBlcy4uLj4+Pjo6
X190eXBlIGdldF9pZihWYXJpYW50PF9UeXBlcy4uLj4qIHZhcmlhbnQpCit7CisgICAgcmV0dXJu
IHN0ZDo6Z2V0X2lmPF9JbmRleD4odmFyaWFudCk7CiB9CiAKIHRlbXBsYXRlPHB0cmRpZmZfdCBf
SW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8
dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LCBfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3Q+
IGdldF9pZigKLSAgICBWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QqIF9fdikgewotICAgIHJldHVy
biAoKF9JbmRleCAhPSBfX3YtPmluZGV4KCkpID8gbnVsbHB0ciA6Ci0gICAgICAgIHN0ZDo6YWRk
cmVzc29mKF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsIF9UeXBlcy4uLj46OmdldCgqX192KSkp
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29u
c3RleHByIGJvb2wgaG9sZHNfYWx0ZXJuYXRpdmUoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBf
X3YpIF9fTk9FWENFUFR7Ci0gICAgcmV0dXJuIF9fdi5pbmRleCgpPT1fX3R5cGVfaW5kZXg8X1R5
cGUsX1R5cGVzLi4uPjo6X192YWx1ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3Is
dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yPgotc3RydWN0IF9fdmlzaXRvcl9yZXR1cm5fdHlwZTxf
VmlzaXRvcj57Ci0gICAgdHlwZWRlZiBkZWNsdHlwZShzdGQ6OmRlY2x2YWw8X1Zpc2l0b3ImPigp
KCkpIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIF9I
ZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zp
c2l0b3IsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgZGVjbHR5cGUoc3RkOjpkZWNsdmFs
PF9WaXNpdG9yJj4oKShzdGQ6OmRlY2x2YWw8X0hlYWQmPigpKSkgX190eXBlOwotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3Zp
c2l0b3JfdGFibGV7Ci0gICAgdHlwZWRlZiBWYXJpYW50PF9UeXBlcy4uLj4gX192YXJpYW50X3R5
cGU7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3Is
X1R5cGVzLi4uPjo6X190eXBlIF9fcmV0dXJuX3R5cGU7Ci0gICAgdHlwZWRlZiBfX3JldHVybl90
eXBlICgqX19mdW5jX3R5cGUpKF9WaXNpdG9yJixfX3ZhcmlhbnRfdHlwZSYpOwotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci0gICAgc3RhdGljIF9fcmV0dXJuX3R5cGUgX190cmFtcG9s
aW5lX2Z1bmMoX1Zpc2l0b3ImIF9fdmlzaXRvcixfX3ZhcmlhbnRfdHlwZSYgX192KXsKLSAgICAg
ICAgcmV0dXJuIF9fdmlzaXRvcihnZXQ8X1R5cGU+KF9fdikpOwotICAgIH0KLQotICAgIHN0YXRp
YyBjb25zdCBfX2Z1bmNfdHlwZSBfX3RyYW1wb2xpbmVbc2l6ZW9mLi4uKF9UeXBlcyldOwotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0
IHR5cGVuYW1lIF9fdmlzaXRvcl90YWJsZTxfVmlzaXRvcixfVHlwZXMuLi4+OjpfX2Z1bmNfdHlw
ZSBfX3Zpc2l0b3JfdGFibGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190cmFtcG9saW5lW3NpemVv
Zi4uLihfVHlwZXMpXT17Ci0gICAgICAgICZfX3RyYW1wb2xpbmVfZnVuYzxfVHlwZXM+Li4uCi0g
ICAgfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9UeXBlcz4K
LWNvbnN0ZXhwciB0eXBlbmFtZSBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1R5cGVz
Li4uPjo6X190eXBlCi12aXNpdChfVmlzaXRvciYmIF9fdmlzaXRvcixWYXJpYW50PF9UeXBlcy4u
Lj4mIF9fdil7Ci0gICAgcmV0dXJuIChfX3YudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKQotICAg
ICAgICA/IF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPHR5cGVuYW1lIF9fdmlzaXRvcl9yZXR1
cm5fdHlwZTxfVmlzaXRvcixfVHlwZXMuLi4+OjpfX3R5cGU+KCJWaXNpdGluZyBvZiBlbXB0eSBW
YXJpYW50IikKLSAgICAgICAgOiBfX3Zpc2l0b3JfdGFibGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6
X190cmFtcG9saW5lW19fdi5pbmRleCgpXShfX3Zpc2l0b3IsX192KTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KLXN0cnVjdCBfX211bHRp
X3Zpc2l0b3JfcmV0dXJuX3R5cGV7Ci0gICAgdHlwZWRlZiBkZWNsdHlwZShzdGQ6OmRlY2x2YWw8
X1Zpc2l0b3ImPigpKGdldDwwPihzdGQ6OmRlY2x2YWw8X1ZhcmlhbnRzPigpKS4uLikpCi0gICAg
X190eXBlOwotfTsKLQotdGVtcGxhdGU8c2l6ZV90IF9WYXJpYW50SW5kZXgsdHlwZW5hbWUgX0lu
ZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXI7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCAuLi4g
X0luZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXI8MCxfX2luZGV4X3NlcXVlbmNlPF9JbmRp
Y2VzLi4uPj57Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9W
YXJpYW50cz4KLSAgICBzdGF0aWMgY29uc3RleHByIHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9y
ZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFudHMuLi4+OjpfX3R5cGUKLSAgICBfX3Zpc2l0KF9W
aXNpdG9yJiBfX3Zpc2l0b3IsX1ZhcmlhbnRzJiAuLi4gX192KXsKLSAgICAgICAgcmV0dXJuIF9f
dmlzaXRvcihnZXQ8X0luZGljZXM+KF9fdikuLi4pOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHNp
emVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgotc3RydWN0IF9fYXJnX3NlbGVjdG9yX3Q7
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBf
X2FyZ19zZWxlY3Rvcl90PDAsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgX0hlYWQgX190
eXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBfX3R5cGUmIF9fc2VsZWN0KF9IZWFkJiBfX2hl
YWQsX1Jlc3QmIC4uLil7Ci0gICAgICAgIHJldHVybiBfX2hlYWQ7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1z
dHJ1Y3QgX19hcmdfc2VsZWN0b3JfdDxfSW5kZXgsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX19hcmdfc2VsZWN0b3JfdDxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSBf
X3R5cGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfX3R5cGUmIF9fc2VsZWN0KF9IZWFkJixfUmVz
dCYgLi4uIF9fcmVzdCl7Ci0gICAgICAgIHJldHVybiBfX2FyZ19zZWxlY3Rvcl90PF9JbmRleC0x
LF9SZXN0Li4uPjo6X19zZWxlY3QoX19yZXN0Li4uKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTxz
aXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfQXJncz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2Fy
Z19zZWxlY3Rvcl90PF9JbmRleCxfQXJncy4uLj46Ol9fdHlwZSYmIF9fYXJnX3NlbGVjdG9yKF9B
cmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgcmV0dXJuIHN0ZDo6Zm9yd2FyZDx0eXBlbmFtZSBfX2Fy
Z19zZWxlY3Rvcl90PF9JbmRleCxfQXJncy4uLj46Ol9fdHlwZT4oCi0gICAgICAgIF9fYXJnX3Nl
bGVjdG9yX3Q8X0luZGV4LF9BcmdzLi4uPjo6X19zZWxlY3QoX19hcmdzLi4uKSk7Ci19Ci0KLXRl
bXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsc2l6ZV90IF9WYXJpYW50SW5kZXgscHRyZGlmZl90IC4u
LiBfSW5kaWNlcz4KLXN0cnVjdCBfX3Zpc2l0X2hlbHBlcjJ7Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KLSAgICBzdGF0aWMgY29uc3RleHBy
IHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFudHMu
Li4+OjpfX3R5cGUKLSAgICBfX3Zpc2l0KF9WaXNpdG9yJiBfX3Zpc2l0b3IsX1ZhcmlhbnRzJiYg
Li4uIF9fdil7Ci0gICAgICAgIHJldHVybiAoX19hcmdfc2VsZWN0b3I8X1ZhcmlhbnRJbmRleC0x
PihfX3YuLi4pLmluZGV4KCk9PV9JbmRleCkKLSAgICAgICAgICAgID8gX192aXNpdF9oZWxwZXI8
X1ZhcmlhbnRJbmRleC0xLF9faW5kZXhfc2VxdWVuY2U8X0luZGV4LF9JbmRpY2VzLi4uPj46Ol9f
dmlzaXQoX192aXNpdG9yLHN0ZDo6Zm9yd2FyZDxfVmFyaWFudHM+KF9fdikuLi4pCi0gICAgICAg
ICAgICA6IF9fdmlzaXRfaGVscGVyMjxfSW5kZXgtMSxfVmFyaWFudEluZGV4LF9JbmRpY2VzLi4u
Pjo6X192aXNpdChfX3Zpc2l0b3Isc3RkOjpmb3J3YXJkPF9WYXJpYW50cz4oX192KS4uLik7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8c2l6ZV90IF9WYXJpYW50SW5kZXgscHRyZGlmZl90IC4uLiBf
SW5kaWNlcz4KLXN0cnVjdCBfX3Zpc2l0X2hlbHBlcjI8LTEsX1ZhcmlhbnRJbmRleCxfSW5kaWNl
cy4uLj57Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJp
YW50cz4KLSAgICBzdGF0aWMgY29uc3RleHByIHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1
cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFudHMuLi4+OjpfX3R5cGUKLSAgICBfX3Zpc2l0KF9WaXNp
dG9yJixfVmFyaWFudHMmJiAuLi4pewotICAgICAgICByZXR1cm4gX190aHJvd19iYWRfdmFyaWFu
dF9hY2Nlc3M8dHlwZW5hbWUgX19tdWx0aV92aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9W
YXJpYW50cy4uLj46Ol9fdHlwZT4oIlZpc2l0aW5nIG9mIGVtcHR5IFZhcmlhbnQiKTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudD4KLXN0cnVjdCBfX3ZhcmlhbnRfdHlw
ZV9jb3VudDsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3Zhcmlh
bnRfdHlwZV9jb3VudDxWYXJpYW50PF9UeXBlcy4uLj4+ewotICAgIHN0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IF9fdmFsdWU9c2l6ZW9mLi4uKF9UeXBlcyk7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfVmFyaWFudD4KLXN0cnVjdCBfX3ZhcmlhbnRfdHlwZV9jb3VudDxfVmFyaWFudCY+ewotICAg
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IF9fdmFsdWU9X192YXJpYW50X3R5cGVfY291bnQ8X1Zh
cmlhbnQ+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQ+Ci1zdHJ1
Y3QgX192YXJpYW50X3R5cGVfY291bnQ8X1ZhcmlhbnQgY29uc3QmPnsKLSAgICBzdGF0aWMgY29u
c3RleHByIHNpemVfdCBfX3ZhbHVlPV9fdmFyaWFudF90eXBlX2NvdW50PF9WYXJpYW50Pjo6X192
YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHNpemVfdCBfVmFyaWFudEluZGV4LHB0cmRpZmZfdCAuLi4g
X0luZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXI8X1ZhcmlhbnRJbmRleCxfX2luZGV4X3Nl
cXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0
eXBlbmFtZSAuLi4gX1ZhcmlhbnRzPgotICAgIHN0YXRpYyBjb25zdGV4cHIgdHlwZW5hbWUgX19t
dWx0aV92aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9WYXJpYW50cy4uLj46Ol9fdHlwZQot
ICAgIF9fdmlzaXQoX1Zpc2l0b3ImIF9fdmlzaXRvcixfVmFyaWFudHMmJiAuLi4gX192KXsKLSAg
ICAgICAgcmV0dXJuIF9fdmlzaXRfaGVscGVyMjwKLSAgICAgICAgICAgIF9fdmFyaWFudF90eXBl
X2NvdW50PAotICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9fYXJnX3NlbGVjdG9yX3Q8Ci0gICAg
ICAgICAgICAgICAgICAgIF9WYXJpYW50SW5kZXgtMSxfVmFyaWFudHMuLi4+OjpfX3R5cGU+Ojpf
X3ZhbHVlLTEsCi0gICAgICAgICAgICBfVmFyaWFudEluZGV4LF9JbmRpY2VzLi4uPjo6X192aXNp
dCgKLSAgICAgICAgICAgICAgICBfX3Zpc2l0b3Isc3RkOjpmb3J3YXJkPF9WYXJpYW50cyYmPihf
X3YpLi4uKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFt
ZSAuLi4gX1ZhcmlhbnRzPgotY29uc3RleHByIHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1
cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFudHMuLi4+OjpfX3R5cGUKLXZpc2l0KF9WaXNpdG9yJiYg
X192aXNpdG9yLF9WYXJpYW50cyYmIC4uLiBfX3YpewotICAgIHJldHVybiBfX3Zpc2l0X2hlbHBl
cjxzaXplb2YuLi4oX1ZhcmlhbnRzKSxfX2luZGV4X3NlcXVlbmNlPD4+OjpfX3Zpc2l0KAotICAg
ICAgICBfX3Zpc2l0b3Isc3RkOjpmb3J3YXJkPF9WYXJpYW50cz4oX192KS4uLik7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KFZh
cmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19saHMsVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBf
X3Jocyl7Ci0gICAgcmV0dXJuIChfX2xocy5pbmRleCgpPT1fX3Jocy5pbmRleCgpKSAmJgotICAg
ICAgICAoKF9fbGhzLmluZGV4KCk9PS0xKSB8fAotICAgICAgICAgX19lcXVhbGl0eV9vcF90YWJs
ZTxWYXJpYW50PF9UeXBlcy4uLj4+OjpfX2VxdWFsaXR5X2NvbXBhcmVbX19saHMuaW5kZXgoKV0o
Ci0gICAgICAgICAgICAgX19saHMsX19yaHMpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4u
IF9UeXBlcz4KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oVmFyaWFudDxfVHlwZXMuLi4+IGNv
bnN0JiBfX2xocyxWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsKLSAgICByZXR1cm4g
IShfX2xocz09X19yaHMpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29u
c3RleHByIGJvb2wgb3BlcmF0b3I8KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19saHMsVmFy
aWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Jocyl7Ci0gICAgcmV0dXJuIChfX2xocy5pbmRleCgp
PF9fcmhzLmluZGV4KCkpIHx8Ci0gICAgICAgICgoX19saHMuaW5kZXgoKT09X19yaHMuaW5kZXgo
KSkgJiYKLSAgICAgICAgICgoX19saHMuaW5kZXgoKSE9LTEpICYmCi0gICAgICAgICAgX19sZXNz
X3RoYW5fb3BfdGFibGU8VmFyaWFudDxfVHlwZXMuLi4+Pjo6Ci0gICAgICAgICAgX19sZXNzX3Ro
YW5fY29tcGFyZVtfX2xocy5pbmRleCgpXShfX2xocyxfX3JocykpKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihWYXJpYW50PF9U
eXBlcy4uLj4gY29uc3QmIF9fbGhzLFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19yaHMpewot
ICAgIHJldHVybiBfX3JoczxfX2xoczsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBl
cz4KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0oVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBf
X2xocyxWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsKLSAgICByZXR1cm4gIShfX2xo
czxfX3Jocyk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcjw9KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19saHMsVmFyaWFudDxf
VHlwZXMuLi4+IGNvbnN0JiBfX3Jocyl7Ci0gICAgcmV0dXJuICEoX19saHM+X19yaHMpOworY29u
c3RleHByIHR5cGVuYW1lIHN0ZDo6YWRkX3BvaW50ZXJfdDxzdGQ6OnZhcmlhbnRfYWx0ZXJuYXRp
dmVfdDxfSW5kZXgsIHN0ZDo6dmFyaWFudDxfVHlwZXMuLi4+Pj46Ol9fdHlwZSBjb25zdCBnZXRf
aWYoCisgICAgVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0KiB2YXJpYW50KQoreworICAgIHJldHVy
biBzdGQ6OmdldF9pZjxfSW5kZXg+KHZhcmlhbnQpOwogfQogCi1zdHJ1Y3QgTW9ub3N0YXRle307
Ci0KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oTW9ub3N0YXRlIGNvbnN0JiwgTW9ub3N0YXRl
IGNvbnN0JikgeyByZXR1cm4gdHJ1ZTsgfQotY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShNb25v
c3RhdGUgY29uc3QmLCBNb25vc3RhdGUgY29uc3QmKSB7IHJldHVybiBmYWxzZTsgfQotY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I+PShNb25vc3RhdGUgY29uc3QmLCBNb25vc3RhdGUgY29uc3QmKSB7
IHJldHVybiB0cnVlOyB9Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KE1vbm9zdGF0ZSBjb25z
dCYsIE1vbm9zdGF0ZSBjb25zdCYpIHsgcmV0dXJuIHRydWU7IH0KLWNvbnN0ZXhwciBib29sIG9w
ZXJhdG9yPihNb25vc3RhdGUgY29uc3QmLCBNb25vc3RhdGUgY29uc3QmKSB7IHJldHVybiBmYWxz
ZTsgfQotY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KE1vbm9zdGF0ZSBjb25zdCYsIE1vbm9zdGF0
ZSBjb25zdCYpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLXN0cnVjdCBfX2hhc2hfdmlzaXRvcnsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLSAgICBzaXplX3Qgb3BlcmF0b3IoKShfVHlwZSBj
b25zdCYgX194KXsKLSAgICAgICAgcmV0dXJuIHN0ZDo6aGFzaDxfVHlwZT4oKShfX3gpOwotICAg
IH0KLX07Ci0KIC8vIC0tIFdlYktpdCBBZGRpdGlvbnMgLS0KIAogdGVtcGxhdGU8Y2xhc3MgViwg
Y2xhc3MuLi4gRj4KQEAgLTIwNTYsMjkgKzEzOCw1IEBAIGF1dG8gc3dpdGNoT24oViYmIHYsIEYm
Ji4uLiBmKSAtPiBkZWNsdHlwZShXVEY6OnZpc2l0KG1ha2VWaXNpdG9yKHN0ZDo6Zm9yd2FyZDxG
CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCi1uYW1lc3BhY2Ugc3RkIHsKLQotdGVtcGxhdGU8Pgot
c3RydWN0IGhhc2g8V1RGOjpNb25vc3RhdGU+ewotICAgIHNpemVfdCBvcGVyYXRvcigpKFdURjo6
TW9ub3N0YXRlKSBfX05PRVhDRVBUewotICAgICAgICByZXR1cm4gNDI7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBoYXNoPFdURjo6VmFyaWFudDxf
VHlwZXMuLi4+PnsKLSAgICBzaXplX3Qgb3BlcmF0b3IoKShXVEY6OlZhcmlhbnQ8X1R5cGVzLi4u
PiBjb25zdCAmdikgX19OT0VYQ0VQVCB7Ci0gICAgICAgIHJldHVybiBzdGQ6Omhhc2g8cHRyZGlm
Zl90PigpKHYuaW5kZXgoKSkgXiBXVEY6OnZpc2l0KFdURjo6X19oYXNoX3Zpc2l0b3IoKSwgdik7
Ci0gICAgfQotfTsKLQotfSAvLyBuYW1lc3BhY2Ugc3RkCi0KIHVzaW5nIFdURjo6TW9ub3N0YXRl
OwogdXNpbmcgV1RGOjpWYXJpYW50OwotCi0jZW5kaWYgLy8gIUNPTVBJTEVSKENMQU5HKSB8fCBX
VEZfQ1BQX1NURF9WRVIgPj0gMTQKLQotI2lmIENPTVBJTEVSKE1TVkMpCi0jcHJhZ21hIHdhcm5p
bmcocG9wKQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCmlu
ZGV4IDRlZTc3MDQ1ZTM2MDc1MjI0YTZlODExZDc1ZDU4Y2M2OTFjNjk5ODcuLjNjYThkNDg2MzZk
NjYwZDA0ZDE5MzUxNTFmODk1OGQ0ZmI2MzE0OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyTWFjLm1tCkBAIC0yMzAyLDExICsyMzAyLDExIEBAIEFMTE9XX0RFUFJFQ0FURURf
SU1QTEVNRU5UQVRJT05TX0VORAogCiAgICAgICAgIGF1dG8gdmFsdWUgPSBiYWNraW5nT2JqZWN0
LT52YWx1ZSgpOwogICAgICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbih2YWx1ZSwKLSAgICAgICAg
ICAgIFtdIChib29sJiB0eXBlZFZhbHVlKSB7IHJldHVybiBAKHR5cGVkVmFsdWUpOyB9LAotICAg
ICAgICAgICAgW10gKHVuc2lnbmVkJiB0eXBlZFZhbHVlKSB7IHJldHVybiBAKHR5cGVkVmFsdWUp
OyB9LAotICAgICAgICAgICAgW10gKGZsb2F0JiB0eXBlZFZhbHVlKSB7IHJldHVybiBAKHR5cGVk
VmFsdWUpOyB9LAotICAgICAgICAgICAgW10gKFN0cmluZyYgdHlwZWRWYWx1ZSkgeyByZXR1cm4g
KGlkKShOU1N0cmluZyAqKXR5cGVkVmFsdWU7IH0sCi0gICAgICAgICAgICBbXSAoQWNjZXNzaWJp
bGl0eUJ1dHRvblN0YXRlJiB0eXBlZFZhbHVlKSB7IHJldHVybiBAKCh1bnNpZ25lZCl0eXBlZFZh
bHVlKTsgfSwKKyAgICAgICAgICAgIFtdIChib29sJiB0eXBlZFZhbHVlKSAtPiBpZCB7IHJldHVy
biBAKHR5cGVkVmFsdWUpOyB9LAorICAgICAgICAgICAgW10gKHVuc2lnbmVkJiB0eXBlZFZhbHVl
KSAtPiBpZCB7IHJldHVybiBAKHR5cGVkVmFsdWUpOyB9LAorICAgICAgICAgICAgW10gKGZsb2F0
JiB0eXBlZFZhbHVlKSAtPiBpZCB7IHJldHVybiBAKHR5cGVkVmFsdWUpOyB9LAorICAgICAgICAg
ICAgW10gKFN0cmluZyYgdHlwZWRWYWx1ZSkgLT4gaWQgeyByZXR1cm4gKE5TU3RyaW5nICopdHlw
ZWRWYWx1ZTsgfSwKKyAgICAgICAgICAgIFtdIChBY2Nlc3NpYmlsaXR5QnV0dG9uU3RhdGUmIHR5
cGVkVmFsdWUpIC0+IGlkIHsgcmV0dXJuIEAoKHVuc2lnbmVkKXR5cGVkVmFsdWUpOyB9LAogICAg
ICAgICAgICAgW10gKEFYQ29yZU9iamVjdComIHR5cGVkVmFsdWUpIHsgcmV0dXJuIHR5cGVkVmFs
dWUgPyAoaWQpdHlwZWRWYWx1ZS0+d3JhcHBlcigpIDogbmlsOyB9LAogICAgICAgICAgICAgW10g
KGF1dG8mKSB7IHJldHVybiBuaWw7IH0KICAgICAgICAgKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFVuaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRVbmlvbi5oCmluZGV4IDA3NjIxMWE3NmU0YTM3YTg1NGRk
ZDllMDY4NWE3MWM2ODMyMmVhZTQuLmE0YmQ2YWVlMzAwZDYyY2M5ZDY1MzIwNjNmMzY2ZGIwMTk5
NTFlYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVy
dFVuaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0VW5p
b24uaApAQCAtMzg1LDcgKzM4NSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSB0cnVlOwogCi0gICAgdXNpbmcgU2VxdWVuY2UgPSBicmlnYW5kOjptYWtlX3NlcXVl
bmNlPGJyaWdhbmQ6OnB0cmRpZmZfdDwwPiwgV1RGOjp2YXJpYW50X3NpemU8SW1wbGVtZW50YXRp
b25UeXBlPjo6dmFsdWU+OworICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1
ZW5jZTxicmlnYW5kOjpwdHJkaWZmX3Q8MD4sIHN0ZDo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0
aW9uVHlwZT46OnZhbHVlPjsKIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBjb25zdCBJbXBsZW1lbnRhdGlvblR5cGUmIHZhcmlhbnQpCiAgICAgewpA
QCAtMzk2LDcgKzM5Niw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExVbmlvbjxULi4uPj4gewogICAgICAgICAgICAgdXNpbmcgSSA9IHR5cGVuYW1lIFdU
Rjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOwogICAg
ICAgICAgICAgaWYgKEk6OnZhbHVlID09IGluZGV4KSB7CiAgICAgICAgICAgICAgICAgQVNTRVJU
KCFyZXR1cm5WYWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0b0pTPGJyaWdh
bmQ6OmF0PFR5cGVMaXN0LCBJPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBX
VEY6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOworICAgICAgICAgICAgICAgIHJldHVyblZhbHVl
ID0gdG9KUzxicmlnYW5kOjphdDxUeXBlTGlzdCwgST4+KGxleGljYWxHbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdCwgc3RkOjpnZXQ8STo6dmFsdWU+KHZhcmlhbnQpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvRm9ybURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEu
aAppbmRleCA2MzU0MDhjNTQ4OTljYWI5YWFlODUzNTFmMjViNDIyOGFjMjdhZmFmLi5mZWViMTk0
ZDNmNjA5NjQ1MTAxMTczMjJhZWJlZTgwZWM5MDIzNmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oCkBAIC0xNTMsMTAgKzE1MywxMCBAQCBzdHJ1Y3QgRm9y
bURhdGFFbGVtZW50IHsKICAgICAgICAgaWYgKGRhdGEuaW5kZXgoKSAhPSBvdGhlci5kYXRhLmlu
ZGV4KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghZGF0YS5pbmRl
eCgpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6Z2V0PDA+KGRhdGEpID09IFdURjo6Z2V0PDA+
KG90aGVyLmRhdGEpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PDA+KGRhdGEpID09IHN0
ZDo6Z2V0PDA+KG90aGVyLmRhdGEpOwogICAgICAgICBpZiAoZGF0YS5pbmRleCgpID09IDEpCi0g
ICAgICAgICAgICByZXR1cm4gV1RGOjpnZXQ8MT4oZGF0YSkgPT0gV1RGOjpnZXQ8MT4ob3RoZXIu
ZGF0YSk7Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDwyPihkYXRhKSA9PSBXVEY6OmdldDwyPihv
dGhlci5kYXRhKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6OmdldDwxPihkYXRhKSA9PSBzdGQ6
OmdldDwxPihvdGhlci5kYXRhKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PDI+KGRhdGEpID09
IHN0ZDo6Z2V0PDI+KG90aGVyLmRhdGEpOwogICAgIH0KICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgRm9ybURhdGFFbGVtZW50JiBvdGhlcikgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oIGIvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvQXJndW1lbnRDb2RlcnMuaAppbmRleCBmYWUwOWZlZGQ5MWU1YWFkNzM5Y2I0
ZWU2MDA2NGY2NmVlOWFiNDk3Li5mNzNmZTk3ZTdlYWM3YWJmMDhiYjhhNmY2YzZkYTk5NWY3MDg5
MTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVy
cy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgKQEAg
LTczMyw3ICs3MzMsNyBAQCBzdHJ1Y3QgVmFyaWFudENvZGVyIHsKICAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV1RGOjpWYXJpYW50PFR5cGVzLi4uPiYgdmFy
aWFudCwgdW5zaWduZWQgaSkKICAgICB7CiAgICAgICAgIGlmIChpID09IGluZGV4KSB7Ci0gICAg
ICAgICAgICBlbmNvZGVyIDw8IFdURjo6Z2V0PGluZGV4Pih2YXJpYW50KTsKKyAgICAgICAgICAg
IGVuY29kZXIgPDwgc3RkOjpnZXQ8aW5kZXg+KHZhcmlhbnQpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIFZhcmlhbnRDb2RlcjxpbmRleCAtIDEsIFR5cGVzLi4uPjo6
ZW5jb2RlKGVuY29kZXIsIHZhcmlhbnQsIGkpOwpAQCAtNzQzLDcgKzc0Myw3IEBAIHN0cnVjdCBW
YXJpYW50Q29kZXIgewogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdURjo6VmFyaWFudDxUeXBl
cy4uLj4+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCB1bnNpZ25lZCBpKQogICAgIHsKICAgICAg
ICAgaWYgKGkgPT0gaW5kZXgpIHsKLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dHlwZW5hbWUg
V1RGOjp2YXJpYW50X2FsdGVybmF0aXZlPGluZGV4LCBXVEY6OlZhcmlhbnQ8VHlwZXMuLi4+Pjo6
dHlwZT4gb3B0aW9uYWw7CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPHR5cGVuYW1lIHN0ZDo6
dmFyaWFudF9hbHRlcm5hdGl2ZTxpbmRleCwgV1RGOjpWYXJpYW50PFR5cGVzLi4uPj46OnR5cGU+
IG9wdGlvbmFsOwogICAgICAgICAgICAgZGVjb2RlciA+PiBvcHRpb25hbDsKICAgICAgICAgICAg
IGlmICghb3B0aW9uYWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKQEAg
LTc1OSwxNCArNzU5LDE0IEBAIHN0cnVjdCBWYXJpYW50Q29kZXI8MCwgVHlwZXMuLi4+IHsKICAg
ICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV1RGOjpWYXJpYW50
PFR5cGVzLi4uPiYgdmFyaWFudCwgdW5zaWduZWQgaSkKICAgICB7CiAgICAgICAgIEFTU0VSVF9V
TlVTRUQoaSwgIWkpOwotICAgICAgICBlbmNvZGVyIDw8IFdURjo6Z2V0PDA+KHZhcmlhbnQpOwor
ICAgICAgICBlbmNvZGVyIDw8IHN0ZDo6Z2V0PDA+KHZhcmlhbnQpOwogICAgIH0KICAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPgogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdU
Rjo6VmFyaWFudDxUeXBlcy4uLj4+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCB1bnNpZ25lZCBp
KQogICAgIHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChpLCAhaSk7Ci0gICAgICAgIHN0ZDo6b3B0
aW9uYWw8dHlwZW5hbWUgV1RGOjp2YXJpYW50X2FsdGVybmF0aXZlPDAsIFdURjo6VmFyaWFudDxU
eXBlcy4uLj4+Ojp0eXBlPiBvcHRpb25hbDsKKyAgICAgICAgc3RkOjpvcHRpb25hbDx0eXBlbmFt
ZSBzdGQ6OnZhcmlhbnRfYWx0ZXJuYXRpdmU8MCwgV1RGOjpWYXJpYW50PFR5cGVzLi4uPj46OnR5
cGU+IG9wdGlvbmFsOwogICAgICAgICBkZWNvZGVyID4+IG9wdGlvbmFsOwogICAgICAgICBpZiAo
IW9wdGlvbmFsKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>