<?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>192958</bug_id>
          
          <creation_ts>2018-12-20 15:45:27 -0800</creation_ts>
          <short_desc>Move Windows-specific code from NetworkStorageSessionCFNet.cpp to its own file</short_desc>
          <delta_ts>2019-05-02 16:19:28 -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>dinhphuong569</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1490105</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-12-20 15:45:27 -0800</bug_when>
    <thetext>Move Windows-specific code from NetworkStorageSessionCFNet.cpp to its own file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1490107</commentid>
    <comment_count>1</comment_count>
      <attachid>357881</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-12-20 15:46:42 -0800</bug_when>
    <thetext>Created attachment 357881
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1490379</commentid>
    <comment_count>4</comment_count>
      <attachid>357955</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-12-21 10:03:55 -0800</bug_when>
    <thetext>Created attachment 357955
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1490531</commentid>
    <comment_count>5</comment_count>
      <attachid>357992</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-12-21 15:44:18 -0800</bug_when>
    <thetext>Created attachment 357992
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1491049</commentid>
    <comment_count>6</comment_count>
      <attachid>357992</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-12-30 14:16:47 -0800</bug_when>
    <thetext>Comment on attachment 357992
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492590</commentid>
    <comment_count>7</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-01-08 07:19:10 -0800</bug_when>
    <thetext>http://trac.webkit.org/r239724</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492592</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-01-08 07:22:56 -0800</bug_when>
    <thetext>&lt;rdar://problem/47114991&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357881</attachid>
            <date>2018-12-20 15:46:42 -0800</date>
            <delta_ts>2018-12-21 10:03:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192958-20181220154641.patch</filename>
            <type>text/plain</type>
            <size>34306</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzOTQ2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDE4LTEyLTIwICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBXaW5k
b3dzLXNwZWNpZmljIGNvZGUgZnJvbSBOZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHAgdG8g
aXRzIG93biBmaWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xOTI5NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIG1ha2VzIGl0IGVhc2llciB0byByZWFzb24gYWJvdXQgd2hhdCBjb2RlIGlzIHVz
ZWQgd2hlcmUuCisKKyAgICAgICAgKiBQbGF0Zm9ybUFwcGxlV2luLmNtYWtlOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmNvb2tpZURvbWFpbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpjYW5vbmljYWxDb29raWVUaW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvb2tp
ZUNyZWF0ZWRUaW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZUV4cGlyYXRp
b25UaW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZU5hbWUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Y29va2llUGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpjb29raWVWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpmaWx0ZXJDb29r
aWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvcHlDb29raWVzRm9yVVJMV2l0aEZp
cnN0UGFydHlVUkwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ29va2llcyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENv
b2tpZXNGcm9tRE9NIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnRhaW5z
U2VjdXJlQ29va2llcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OmNvb2tpZXNGb3JET00gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246
OmNvb2tpZXNFbmFibGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6Z2V0UmF3Q29va2llcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVBbGxD
b29raWVzTW9kaWZpZWRTaW5jZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldFdpbi5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpj
b29raWVEb21haW4pOgorICAgICAgICAoV2ViQ29yZTo6Y2Fub25pY2FsQ29va2llVGltZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb29raWVDcmVhdGVkVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpj
b29raWVFeHBpcmF0aW9uVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVOYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvb2tpZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsdGVyQ29va2llcyk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb3B5Q29va2llc0ZvclVSTFdpdGhGaXJzdFBhcnR5VVJMKToKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9u
OjpzZXRDb29raWVzRnJvbURPTSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpjb250YWluc1Nl
Y3VyZUNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpj
b29raWVzRm9yRE9NIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVzRW5hYmxlZCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldFJhd0Nvb2tpZXMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVDb29raWUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRIb3N0
bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Np
b246OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UpOgorCiAy
MDE4LTEyLTIwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVXNl
IE9wdGlvbmFsOjp2YWx1ZU9yKCkgaW5zdGVhZCBvZiBPcHRpb25hbDo6dmFsdWVfb3IoKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCShyZXZpc2lvbiAyMzk0NjEpCisr
KyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBA
IC01NCw2ICs1NCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3Jt
L25ldHdvcmsvY2YvRm9ybURhdGFTdHJlYW1DRk5ldC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3Jr
L2NmL0xvYWRlclJ1bkxvb3BDRi5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2NmL05ldHdvcmtT
dG9yYWdlU2Vzc2lvbkNGTmV0LmNwcAorICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29ya1N0
b3JhZ2VTZXNzaW9uQ0ZOZXRXaW4uY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jZi9Qcm90ZWN0
aW9uU3BhY2VDRk5ldC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Byb3h5U2VydmVyQ0ZO
ZXQuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUVycm9yQ0YuY3BwCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL05ldHdvcmtTdG9yYWdlU2Vzc2lv
bkNGTmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2NmL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNGTmV0LmNwcAkocmV2aXNpb24gMjM5NDYxKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25D
Rk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDQ0ICszNSw2IEBACiAjaW5jbHVkZSAiUHVi
bGljU3VmZml4LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjZW5kaWYKLSNpZiBV
U0UoQ0ZVUkxDT05ORUNUSU9OKQotI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5LmgiCi0jaW5jbHVkZSAiQ29va2llc1N0cmF0ZWd5Lmgi
Ci0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZIVFRQ
Q29va2llc1ByaXYuaD4KLSNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5o
PgotI2luY2x1ZGUgPHBhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg+Ci0jaW5jbHVkZSA8d2luZG93
cy5oPgotI2luY2x1ZGUgPHd0Zi9Tb2Z0TGlua2luZy5oPgotI2luY2x1ZGUgPHd0Zi9VUkwuaD4K
LSNpbmNsdWRlIDx3dGYvY2YvVHlwZUNhc3RzQ0YuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotZW51bSB7Ci0gICAgQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeUV4
Y2x1c2l2ZWx5RnJvbU1haW5Eb2N1bWVudERvbWFpbiA9IDMKLX07Ci0KLW5hbWVzcGFjZSBXVEYg
ewotCi0jZGVmaW5lIERFQ0xBUkVfQ0ZfVFlQRV9UUkFJVChDbGFzc05hbWUpIFwKLXRlbXBsYXRl
IDw+IFwKLXN0cnVjdCBDRlR5cGVUcmFpdDxDbGFzc05hbWUjI1JlZj4geyBcCi1zdGF0aWMgaW5s
aW5lIENGVHlwZUlEIHR5cGVJRCgpIHsgcmV0dXJuIENsYXNzTmFtZSMjR2V0VHlwZUlEKCk7IH0g
XAotfTsKLQotI2lmIENPTVBJTEVSKENMQU5HKQotQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElP
TlNfQkVHSU4KLSNlbmRpZgotREVDTEFSRV9DRl9UWVBFX1RSQUlUKENGSFRUUENvb2tpZSk7Ci0j
aWYgQ09NUElMRVIoQ0xBTkcpCi1BTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLSNl
bmRpZgotCi0jdW5kZWYgREVDTEFSRV9DRl9UWVBFX1RSQUlUCi19IC8vIG5hbWVzcGFjZSBXVEYK
LQotI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTMxLDQyICs5Myw2IEBAIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1N0b3JhZ2VTZXMKICAgICByZXR1cm4gc2Vzc2lv
bjsKIH0KIAotI2lmICFQTEFURk9STShDT0NPQSkKLXN0YXRpYyBDRlVSTFN0b3JhZ2VTZXNzaW9u
UmVmIGNyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihDRlN0cmluZ1JlZiBpZGVudGlmaWVyLCBD
RlVSTFN0b3JhZ2VTZXNzaW9uUmVmIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbikKLXsKLSAgICBjb25z
dCB2b2lkKiBzZXNzaW9uUHJvcGVydHlLZXlzW10gPSB7IF9rQ0ZVUkxTdG9yYWdlU2Vzc2lvbklz
UHJpdmF0ZSB9OwotICAgIGNvbnN0IHZvaWQqIHNlc3Npb25Qcm9wZXJ0eVZhbHVlc1tdID0geyBr
Q0ZCb29sZWFuVHJ1ZSB9OwotICAgIENGRGljdGlvbmFyeVJlZiBzZXNzaW9uUHJvcGVydGllcyA9
IENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzZXNzaW9uUHJvcGVydHlL
ZXlzLCBzZXNzaW9uUHJvcGVydHlWYWx1ZXMsIHNpemVvZihzZXNzaW9uUHJvcGVydHlLZXlzKSAv
IHNpemVvZigqc2Vzc2lvblByb3BlcnR5S2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxC
YWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpOwotICAgIENGVVJMU3RvcmFn
ZVNlc3Npb25SZWYgc3RvcmFnZVNlc3Npb24gPSBfQ0ZVUkxTdG9yYWdlU2Vzc2lvbkNyZWF0ZShr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCBpZGVudGlmaWVyLCBzZXNzaW9uUHJvcGVydGllcyk7Ci0KLSAg
ICAvLyBUaGUgcHJpdmF0ZSBzdG9yYWdlIHNlc3Npb24gc2hvdWxkIGhhdmUgdGhlIHNhbWUgcHJv
cGVydGllcyBhcyB0aGUgZGVmYXVsdCBzdG9yYWdlIHNlc3Npb24sCi0gICAgLy8gd2l0aCB0aGUg
ZXhjZXB0aW9uIHRoYXQgaXQgc2hvdWxkIGJlIGluLW1lbW9yeSBvbmx5IHN0b3JhZ2UuCi0gICAg
Q0ZVUkxDYWNoZVJlZiBjYWNoZSA9IF9DRlVSTFN0b3JhZ2VTZXNzaW9uQ29weUNhY2hlKGtDRkFs
bG9jYXRvckRlZmF1bHQsIHN0b3JhZ2VTZXNzaW9uKTsKLSAgICBDRlVSTENhY2hlU2V0RGlza0Nh
cGFjaXR5KGNhY2hlLCAwKTsKLSAgICBDRlVSTENhY2hlUmVmIGRlZmF1bHRDYWNoZTsKLSAgICBp
ZiAoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKQotICAgICAgICBkZWZhdWx0Q2FjaGUgPSBfQ0ZVUkxT
dG9yYWdlU2Vzc2lvbkNvcHlDYWNoZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBkZWZhdWx0U3RvcmFn
ZVNlc3Npb24pOwotICAgIGVsc2UgCi0gICAgICAgIGRlZmF1bHRDYWNoZSA9IENGVVJMQ2FjaGVD
b3B5U2hhcmVkVVJMQ2FjaGUoKTsKLSAgICBDRlVSTENhY2hlU2V0TWVtb3J5Q2FwYWNpdHkoY2Fj
aGUsIENGVVJMQ2FjaGVNZW1vcnlDYXBhY2l0eShkZWZhdWx0Q2FjaGUpKTsKLSAgICBDRlJlbGVh
c2UoZGVmYXVsdENhY2hlKTsKLSAgICBDRlJlbGVhc2UoY2FjaGUpOwotCi0gICAgQ0ZIVFRQQ29v
a2llU3RvcmFnZVJlZiBjb29raWVTdG9yYWdlID0gX0NGVVJMU3RvcmFnZVNlc3Npb25Db3B5Q29v
a2llU3RvcmFnZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzdG9yYWdlU2Vzc2lvbik7Ci0gICAgQ0ZI
VFRQQ29va2llU3RvcmFnZVJlZiBkZWZhdWx0Q29va2llU3RvcmFnZTsKLSAgICBpZiAoZGVmYXVs
dFN0b3JhZ2VTZXNzaW9uKQotICAgICAgICBkZWZhdWx0Q29va2llU3RvcmFnZSA9IF9DRlVSTFN0
b3JhZ2VTZXNzaW9uQ29weUNvb2tpZVN0b3JhZ2Uoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZGVmYXVs
dFN0b3JhZ2VTZXNzaW9uKTsKLSAgICBlbHNlCi0gICAgICAgIGRlZmF1bHRDb29raWVTdG9yYWdl
ID0gX0NGSFRUUENvb2tpZVN0b3JhZ2VHZXREZWZhdWx0KGtDRkFsbG9jYXRvckRlZmF1bHQpOwot
ICAgIENGSFRUUENvb2tpZVN0b3JhZ2VTZXRDb29raWVBY2NlcHRQb2xpY3koY29va2llU3RvcmFn
ZSwgQ0ZIVFRQQ29va2llU3RvcmFnZUdldENvb2tpZUFjY2VwdFBvbGljeShkZWZhdWx0Q29va2ll
U3RvcmFnZSkpOwotICAgIGlmIChkZWZhdWx0U3RvcmFnZVNlc3Npb24pCi0gICAgICAgIENGUmVs
ZWFzZShkZWZhdWx0Q29va2llU3RvcmFnZSk7Ci0gICAgQ0ZSZWxlYXNlKGNvb2tpZVN0b3JhZ2Up
OwotCi0gICAgcmV0dXJuIHN0b3JhZ2VTZXNzaW9uOwotfQotI2VuZGlmCi0KIHZvaWQgTmV0d29y
a1N0b3JhZ2VTZXNzaW9uOjpzd2l0Y2hUb05ld1Rlc3RpbmdTZXNzaW9uKCkKIHsKICAgICAvLyBT
ZXNzaW9uIG5hbWUgc2hvdWxkIGJlIHNob3J0IGVub3VnaCBmb3Igc2hhcmVkIG1lbW9yeSByZWdp
b24gbmFtZSB0byBiZSB1bmRlciB0aGUgbGltaXQsIG90ZWhyd2lzZSBzYW5kYm94IHJ1bGVzIHdv
bid0IHdvcmsgKHNlZSA8cmRhcjovL3Byb2JsZW0vMTM2NDI4NTI+KS4KQEAgLTI2MiwyNjIgKzE4
OCwzIEBAIHZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVzKGMKICNlbmRpZgog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNpZiBVU0UoQ0ZVUkxDT05ORUNUSU9OKQotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBzX3NldENvb2tp
ZUtleUNGID0gQ0ZTVFIoIlNldC1Db29raWUiKTsKLXN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBz
X2Nvb2tpZUNGID0gQ0ZTVFIoIkNvb2tpZSIpOwotc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIHNf
Y3JlYXRlZENGID0gQ0ZTVFIoIkNyZWF0ZWQiKTsKLQotc3RhdGljIGlubGluZSBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IGNvb2tpZURvbWFpbihDRkhUVFBDb29raWVSZWYgY29va2llKQotewotICAg
IHJldHVybiBhZG9wdENGKENGSFRUUENvb2tpZUNvcHlEb21haW4oY29va2llKSk7Ci19Ci0KLXN0
YXRpYyBkb3VibGUgY2Fub25pY2FsQ29va2llVGltZShkb3VibGUgdGltZSkKLXsKLSAgICBpZiAo
IXRpbWUpCi0gICAgICAgIHJldHVybiB0aW1lOwotCi0gICAgcmV0dXJuICh0aW1lICsga0NGQWJz
b2x1dGVUaW1lSW50ZXJ2YWxTaW5jZTE5NzApICogMTAwMDsKLX0KLQotc3RhdGljIGRvdWJsZSBj
b29raWVDcmVhdGVkVGltZShDRkhUVFBDb29raWVSZWYgY29va2llKQotewotICAgIFJldGFpblB0
cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BzID0gYWRvcHRDRihDRkhUVFBDb29raWVDb3B5UHJvcGVy
dGllcyhjb29raWUpKTsKLSAgICBhdXRvIHZhbHVlID0gQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJv
cHMuZ2V0KCksIHNfY3JlYXRlZENGKTsKLQotICAgIGF1dG8gYXNOdW1iZXIgPSBkeW5hbWljX2Nm
X2Nhc3Q8Q0ZOdW1iZXJSZWY+KHZhbHVlKTsKLSAgICBpZiAoYXNOdW1iZXIpIHsKLSAgICAgICAg
ZG91YmxlIGFzRG91YmxlOwotICAgICAgICBpZiAoQ0ZOdW1iZXJHZXRWYWx1ZShhc051bWJlciwg
a0NGTnVtYmVyRmxvYXQ2NFR5cGUsICZhc0RvdWJsZSkpCi0gICAgICAgICAgICByZXR1cm4gY2Fu
b25pY2FsQ29va2llVGltZShhc0RvdWJsZSk7Ci0gICAgICAgIHJldHVybiAwLjA7Ci0gICAgfQot
Ci0gICAgYXV0byBhc1N0cmluZyA9IGR5bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4odmFsdWUp
OwotICAgIGlmIChhc1N0cmluZykKLSAgICAgICAgcmV0dXJuIGNhbm9uaWNhbENvb2tpZVRpbWUo
Q0ZTdHJpbmdHZXREb3VibGVWYWx1ZShhc1N0cmluZykpOwotCi0gICAgcmV0dXJuIDAuMDsKLX0K
LQotc3RhdGljIGlubGluZSBDRkFic29sdXRlVGltZSBjb29raWVFeHBpcmF0aW9uVGltZShDRkhU
VFBDb29raWVSZWYgY29va2llKQotewotICAgIHJldHVybiBjYW5vbmljYWxDb29raWVUaW1lKENG
SFRUUENvb2tpZUdldEV4cGlyYXRpb25UaW1lKGNvb2tpZSkpOwotfQotCi1zdGF0aWMgaW5saW5l
IFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY29va2llTmFtZShDRkhUVFBDb29raWVSZWYgY29va2ll
KQotewotICAgIHJldHVybiBhZG9wdENGKENGSFRUUENvb2tpZUNvcHlOYW1lKGNvb2tpZSkpOwot
fQotCi1zdGF0aWMgaW5saW5lIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY29va2llUGF0aChDRkhU
VFBDb29raWVSZWYgY29va2llKQotewotICAgIHJldHVybiBhZG9wdENGKENGSFRUUENvb2tpZUNv
cHlQYXRoKGNvb2tpZSkpOwotfQotCi1zdGF0aWMgaW5saW5lIFJldGFpblB0cjxDRlN0cmluZ1Jl
Zj4gY29va2llVmFsdWUoQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSkKLXsKLSAgICByZXR1cm4gYWRv
cHRDRihDRkhUVFBDb29raWVDb3B5VmFsdWUoY29va2llKSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5Q
dHI8Q0ZBcnJheVJlZj4gZmlsdGVyQ29va2llcyhDRkFycmF5UmVmIHVuZmlsdGVyZWRDb29raWVz
KQotewotICAgIEFTU0VSVCh1bmZpbHRlcmVkQ29va2llcyk7Ci0gICAgQ0ZJbmRleCBjb3VudCA9
IENGQXJyYXlHZXRDb3VudCh1bmZpbHRlcmVkQ29va2llcyk7Ci0gICAgUmV0YWluUHRyPENGTXV0
YWJsZUFycmF5UmVmPiBmaWx0ZXJlZENvb2tpZXMgPSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRh
YmxlKDAsIGNvdW50LCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0gICAgZm9yIChDRkluZGV4
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBDRkhUVFBDb29raWVSZWYgY29va2ll
ID0gKENGSFRUUENvb2tpZVJlZilDRkFycmF5R2V0VmFsdWVBdEluZGV4KHVuZmlsdGVyZWRDb29r
aWVzLCBpKTsKLQotICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNTYzMjg4Mz4gQ0ZIVFRQQ29v
a2llU3RvcmFnZSB3b3VsZCBzdG9yZSBhbiBlbXB0eSBjb29raWUsCi0gICAgICAgIC8vIHdoaWNo
IHdvdWxkIGJlIHNlbnQgYXMgIkNvb2tpZTogPSIuIFdlIGhhdmUgYSB3b3JrYXJvdW5kIGluIHNl
dENvb2tpZXMoKSB0byBwcmV2ZW50Ci0gICAgICAgIC8vIHRoYXQsIGJ1dCB3ZSBhbHNvIG5lZWQg
dG8gYXZvaWQgc2VuZGluZyBjb29raWVzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHN0b3JlZCwgYW5k
Ci0gICAgICAgIC8vIHRoZXJlJ3Mgbm8gaGFybSB0byBkb2luZyB0aGlzIGNoZWNrIGJlY2F1c2Ug
c3VjaCBhIGNvb2tpZSBpcyBuZXZlciB2YWxpZC4KLSAgICAgICAgaWYgKCFDRlN0cmluZ0dldExl
bmd0aChjb29raWVOYW1lKGNvb2tpZSkuZ2V0KCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgaWYgKENGSFRUUENvb2tpZUlzSFRUUE9ubHkoY29va2llKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShmaWx0ZXJlZENvb2tpZXMu
Z2V0KCksIGNvb2tpZSk7Ci0gICAgfQotICAgIHJldHVybiBmaWx0ZXJlZENvb2tpZXM7Ci19Ci0K
LXN0YXRpYyBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY29weUNvb2tpZXNGb3JVUkxXaXRoRmlyc3RQ
YXJ0eVVSTChjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYg
Zmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1cmwsIEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVT
ZWN1cmVDb29raWVzKQotewotICAgIGJvb2wgc2VjdXJlID0gaW5jbHVkZVNlY3VyZUNvb2tpZXMg
PT0gSW5jbHVkZVNlY3VyZUNvb2tpZXM6OlllczsKLQotICAgIEFTU0VSVCghc2VjdXJlIHx8IChz
ZWN1cmUgJiYgdXJsLnByb3RvY29sSXMoImh0dHBzIikpKTsKLQotICAgIFVOVVNFRF9QQVJBTShm
aXJzdFBhcnR5KTsKLSAgICByZXR1cm4gYWRvcHRDRihDRkhUVFBDb29raWVTdG9yYWdlQ29weUNv
b2tpZXNGb3JVUkwoc2Vzc2lvbi5jb29raWVTdG9yYWdlKCkuZ2V0KCksIHVybC5jcmVhdGVDRlVS
TCgpLmdldCgpLCBzZWN1cmUpKTsKLX0KLQotc3RhdGljIENGQXJyYXlSZWYgY3JlYXRlQ29va2ll
cyhDRkRpY3Rpb25hcnlSZWYgaGVhZGVyRmllbGRzLCBDRlVSTFJlZiB1cmwpCi17Ci0gICAgQ0ZB
cnJheVJlZiBwYXJzZWRDb29raWVzID0gQ0ZIVFRQQ29va2llQ3JlYXRlV2l0aFJlc3BvbnNlSGVh
ZGVyRmllbGRzKGtDRkFsbG9jYXRvckRlZmF1bHQsIGhlYWRlckZpZWxkcywgdXJsKTsKLSAgICBp
ZiAoIXBhcnNlZENvb2tpZXMpCi0gICAgICAgIHBhcnNlZENvb2tpZXMgPSBDRkFycmF5Q3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsIDAsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpOwotCi0g
ICAgcmV0dXJuIHBhcnNlZENvb2tpZXM7Ci19Ci0KLXZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9u
OjpzZXRDb29raWVzRnJvbURPTShjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRl
SW5mbyYsIGNvbnN0IFVSTCYgdXJsLCBPcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgT3B0aW9u
YWw8dWludDY0X3Q+IHBhZ2VJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKLXsKLSAgICBV
TlVTRURfUEFSQU0oZnJhbWVJRCk7Ci0gICAgVU5VU0VEX1BBUkFNKHBhZ2VJRCk7Ci0gICAgLy8g
PHJkYXI6Ly9wcm9ibGVtLzU2MzI4ODM+IENGSFRUUENvb2tpZVN0b3JhZ2Ugc3RvcmVzIGFuIGVt
cHR5IGNvb2tpZSwgd2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29va2llOiA9Ii4KLSAgICBpZiAo
dmFsdWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZXRhaW5QdHI8Q0ZVUkxS
ZWY+IHVybENGID0gdXJsLmNyZWF0ZUNGVVJMKCk7Ci0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBm
aXJzdFBhcnR5Rm9yQ29va2llc0NGID0gZmlyc3RQYXJ0eS5jcmVhdGVDRlVSTCgpOwotCi0gICAg
Ly8gPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1MzE+LCA8cmRhcjov
LzQ0MDkwMzQ+Ci0gICAgLy8gY29va2llc1dpdGhSZXNwb25zZUhlYWRlckZpZWxkcyBkb2Vzbid0
IHBhcnNlIGNvb2tpZXMgd2l0aG91dCBhIHZhbHVlCi0gICAgU3RyaW5nIGNvb2tpZVN0cmluZyA9
IHZhbHVlLmNvbnRhaW5zKCc9JykgPyB2YWx1ZSA6IHZhbHVlICsgIj0iOwotCi0gICAgUmV0YWlu
UHRyPENGU3RyaW5nUmVmPiBjb29raWVTdHJpbmdDRiA9IGNvb2tpZVN0cmluZy5jcmVhdGVDRlN0
cmluZygpOwotICAgIGF1dG8gY29va2llU3RyaW5nQ0ZQdHIgPSBjb29raWVTdHJpbmdDRi5nZXQo
KTsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBoZWFkZXJGaWVsZHNDRiA9IGFkb3B0
Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsCi0gICAgICAgIChjb25z
dCB2b2lkKiopJnNfc2V0Q29va2llS2V5Q0YsIChjb25zdCB2b2lkKiopJmNvb2tpZVN0cmluZ0NG
UHRyLCAxLAotICAgICAgICAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBl
RGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4g
dW5maWx0ZXJlZENvb2tpZXMgPSBhZG9wdENGKGNyZWF0ZUNvb2tpZXMoaGVhZGVyRmllbGRzQ0Yu
Z2V0KCksIHVybENGLmdldCgpKSk7Ci0gICAgQ0ZIVFRQQ29va2llU3RvcmFnZVNldENvb2tpZXMo
Y29va2llU3RvcmFnZSgpLmdldCgpLCBmaWx0ZXJDb29raWVzKHVuZmlsdGVyZWRDb29raWVzLmdl
dCgpKS5nZXQoKSwgdXJsQ0YuZ2V0KCksIGZpcnN0UGFydHlGb3JDb29raWVzQ0YuZ2V0KCkpOwot
fQotCi1zdGF0aWMgYm9vbCBjb250YWluc1NlY3VyZUNvb2tpZXMoQ0ZBcnJheVJlZiBjb29raWVz
KQotewotICAgIENGSW5kZXggY29va2llQ291bnQgPSBDRkFycmF5R2V0Q291bnQoY29va2llcyk7
Ci0gICAgd2hpbGUgKGNvb2tpZUNvdW50LS0pIHsKLSAgICAgICAgaWYgKENGSFRUUENvb2tpZUlz
U2VjdXJlKGNoZWNrZWRfY2ZfY2FzdDxDRkhUVFBDb29raWVSZWY+KENGQXJyYXlHZXRWYWx1ZUF0
SW5kZXgoY29va2llcywgY29va2llQ291bnQpKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+
IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llc0ZvckRPTShjb25zdCBVUkwmIGZpcnN0UGFy
dHksIGNvbnN0IFNhbWVTaXRlSW5mbyYsIGNvbnN0IFVSTCYgdXJsLCBPcHRpb25hbDx1aW50NjRf
dD4gZnJhbWVJRCwgT3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tp
ZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMpIGNvbnN0Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGZyYW1l
SUQpOwotICAgIFVOVVNFRF9QQVJBTShwYWdlSUQpOwotICAgIFJldGFpblB0cjxDRkFycmF5UmVm
PiBjb29raWVzQ0YgPSBjb3B5Q29va2llc0ZvclVSTFdpdGhGaXJzdFBhcnR5VVJMKCp0aGlzLCBm
aXJzdFBhcnR5LCB1cmwsIGluY2x1ZGVTZWN1cmVDb29raWVzKTsKLQotICAgIGF1dG8gZmlsdGVy
ZWRDb29raWVzID0gZmlsdGVyQ29va2llcyhjb29raWVzQ0YuZ2V0KCkpOwotCi0gICAgYm9vbCBk
aWRBY2Nlc3NTZWN1cmVDb29raWVzID0gY29udGFpbnNTZWN1cmVDb29raWVzKGZpbHRlcmVkQ29v
a2llcy5nZXQoKSk7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBoZWFkZXJDRiA9
IGFkb3B0Q0YoQ0ZIVFRQQ29va2llQ29weVJlcXVlc3RIZWFkZXJGaWVsZHMoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgZmlsdGVyZWRDb29raWVzLmdldCgpKSk7Ci0gICAgU3RyaW5nIGNvb2tpZVN0cmlu
ZyA9IGNoZWNrZWRfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoaGVh
ZGVyQ0YuZ2V0KCksIHNfY29va2llQ0YpKTsKLSAgICByZXR1cm4geyBjb29raWVTdHJpbmcsIGRp
ZEFjY2Vzc1NlY3VyZUNvb2tpZXMgfTsKLX0KLQotc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gTmV0
d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBV
UkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYsIGNvbnN0IFVSTCYgdXJsLCBPcHRp
b25hbDx1aW50NjRfdD4gZnJhbWVJRCwgT3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVk
ZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMpIGNvbnN0Ci17Ci0gICAgVU5VU0VE
X1BBUkFNKGZyYW1lSUQpOwotICAgIFVOVVNFRF9QQVJBTShwYWdlSUQpOwotICAgIFJldGFpblB0
cjxDRkFycmF5UmVmPiBjb29raWVzQ0YgPSBjb3B5Q29va2llc0ZvclVSTFdpdGhGaXJzdFBhcnR5
VVJMKCp0aGlzLCBmaXJzdFBhcnR5LCB1cmwsIGluY2x1ZGVTZWN1cmVDb29raWVzKTsKLQotICAg
IGJvb2wgZGlkQWNjZXNzU2VjdXJlQ29va2llcyA9IGNvbnRhaW5zU2VjdXJlQ29va2llcyhjb29r
aWVzQ0YuZ2V0KCkpOwotCi0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaGVhZGVyQ0Yg
PSBhZG9wdENGKENGSFRUUENvb2tpZUNvcHlSZXF1ZXN0SGVhZGVyRmllbGRzKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGNvb2tpZXNDRi5nZXQoKSkpOwotICAgIFN0cmluZyBjb29raWVTdHJpbmcgPSBj
aGVja2VkX2NmX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGhlYWRlckNG
LmdldCgpLCBzX2Nvb2tpZUNGKSk7Ci0gICAgcmV0dXJuIHsgY29va2llU3RyaW5nLCBkaWRBY2Nl
c3NTZWN1cmVDb29raWVzIH07Ci19Ci0KLXN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgQ29va2ll
UmVxdWVzdEhlYWRlckZpZWxkUHJveHkmIGhlYWRlckZpZWxkUHJveHkpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGhlYWRlckZpZWxkUHJveHkuZmly
c3RQYXJ0eSwgaGVhZGVyRmllbGRQcm94eS5zYW1lU2l0ZUluZm8sIGhlYWRlckZpZWxkUHJveHku
dXJsLCBoZWFkZXJGaWVsZFByb3h5LmZyYW1lSUQsIGhlYWRlckZpZWxkUHJveHkucGFnZUlELCBo
ZWFkZXJGaWVsZFByb3h5LmluY2x1ZGVTZWN1cmVDb29raWVzKTsKLX0KLQotYm9vbCBOZXR3b3Jr
U3RvcmFnZVNlc3Npb246OmNvb2tpZXNFbmFibGVkKCkgY29uc3QKLXsKLSAgICBDRkhUVFBDb29r
aWVTdG9yYWdlQWNjZXB0UG9saWN5IHBvbGljeSA9IENGSFRUUENvb2tpZVN0b3JhZ2VHZXRDb29r
aWVBY2NlcHRQb2xpY3koY29va2llU3RvcmFnZSgpLmdldCgpKTsKLSAgICByZXR1cm4gcG9saWN5
ID09IENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERv
bWFpbiB8fCBwb2xpY3kgPT0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeUV4Y2x1c2l2
ZWx5RnJvbU1haW5Eb2N1bWVudERvbWFpbiB8fCBwb2xpY3kgPT0gQ0ZIVFRQQ29va2llU3RvcmFn
ZUFjY2VwdFBvbGljeUFsd2F5czsKLX0KLQotYm9vbCBOZXR3b3JrU3RvcmFnZVNlc3Npb246Omdl
dFJhd0Nvb2tpZXMoY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBj
b25zdCBVUkwmIHVybCwgT3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIE9wdGlvbmFsPHVpbnQ2
NF90PiBwYWdlSUQsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKSBjb25zdAotewotICAgIFVO
VVNFRF9QQVJBTShmcmFtZUlEKTsKLSAgICBVTlVTRURfUEFSQU0ocGFnZUlEKTsKLSAgICByYXdD
b29raWVzLmNsZWFyKCk7Ci0KLSAgICBhdXRvIGluY2x1ZGVTZWN1cmVDb29raWVzID0gdXJsLnBy
b3RvY29sSXMoImh0dHBzIikgPyBJbmNsdWRlU2VjdXJlQ29va2llczo6WWVzIDogSW5jbHVkZVNl
Y3VyZUNvb2tpZXM6Ok5vOwotCi0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNvb2tpZXNDRiA9
IGNvcHlDb29raWVzRm9yVVJMV2l0aEZpcnN0UGFydHlVUkwoKnRoaXMsIGZpcnN0UGFydHksIHVy
bCwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOwotCi0gICAgQ0ZJbmRleCBjb3VudCA9IENGQXJyYXlH
ZXRDb3VudChjb29raWVzQ0YuZ2V0KCkpOwotICAgIHJhd0Nvb2tpZXMucmVzZXJ2ZUNhcGFjaXR5
KGNvdW50KTsKLQotICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAg
ICAgICAgQ0ZIVFRQQ29va2llUmVmIGNmQ29va2llID0gY2hlY2tlZF9jZl9jYXN0PENGSFRUUENv
b2tpZVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChjb29raWVzQ0YuZ2V0KCksIGkpKTsKLSAg
ICAgICAgQ29va2llIGNvb2tpZTsKLSAgICAgICAgY29va2llLm5hbWUgPSBjb29raWVOYW1lKGNm
Q29va2llKS5nZXQoKTsKLSAgICAgICAgY29va2llLnZhbHVlID0gY29va2llVmFsdWUoY2ZDb29r
aWUpLmdldCgpOwotICAgICAgICBjb29raWUuZG9tYWluID0gY29va2llRG9tYWluKGNmQ29va2ll
KS5nZXQoKTsKLSAgICAgICAgY29va2llLnBhdGggPSBjb29raWVQYXRoKGNmQ29va2llKS5nZXQo
KTsKLSAgICAgICAgY29va2llLmNyZWF0ZWQgPSBjb29raWVDcmVhdGVkVGltZShjZkNvb2tpZSk7
Ci0gICAgICAgIGNvb2tpZS5leHBpcmVzID0gY29va2llRXhwaXJhdGlvblRpbWUoY2ZDb29raWUp
OwotICAgICAgICBjb29raWUuaHR0cE9ubHkgPSBDRkhUVFBDb29raWVJc0hUVFBPbmx5KGNmQ29v
a2llKTsKLSAgICAgICAgY29va2llLnNlY3VyZSA9IENGSFRUUENvb2tpZUlzU2VjdXJlKGNmQ29v
a2llKTsKLSAgICAgICAgY29va2llLnNlc3Npb24gPSBmYWxzZTsgLy8gRklYTUU6IE5lZWQgQVBJ
IGZvciBpZiBhIGNvb2tpZSBpcyBhIHNlc3Npb24gY29va2llLgotICAgICAgICByYXdDb29raWVz
LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGNvb2tpZSkpOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llKGNvbnN0
IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Ci17Ci0gICAgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSB0aGlzLT5jb29raWVTdG9yYWdl
KCk7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybENGID0gdXJsLmNyZWF0ZUNGVVJMKCk7
Ci0KLSAgICBib29sIHNlbmRTZWN1cmVDb29raWVzID0gdXJsLnByb3RvY29sSXMoImh0dHBzIik7
Ci0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNvb2tpZXNDRiA9IGFkb3B0Q0YoQ0ZIVFRQQ29v
a2llU3RvcmFnZUNvcHlDb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIHVybENGLmdl
dCgpLCBzZW5kU2VjdXJlQ29va2llcykpOwotCi0gICAgQ0ZJbmRleCBjb3VudCA9IENGQXJyYXlH
ZXRDb3VudChjb29raWVzQ0YuZ2V0KCkpOwotICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGNv
dW50OyBpKyspIHsKLSAgICAgICAgQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSA9IGNoZWNrZWRfY2Zf
Y2FzdDxDRkhUVFBDb29raWVSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoY29va2llc0NGLmdl
dCgpLCBpKSk7Ci0gICAgICAgIGlmIChTdHJpbmcoY29va2llTmFtZShjb29raWUpLmdldCgpKSA9
PSBuYW1lKSB7Ci0gICAgICAgICAgICBDRkhUVFBDb29raWVTdG9yYWdlRGVsZXRlQ29va2llKGNv
b2tpZVN0b3JhZ2UuZ2V0KCksIGNvb2tpZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldEhvc3RuYW1lc1dp
dGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQotewotICAgIFJldGFpblB0cjxD
RkFycmF5UmVmPiBjb29raWVzQ0YgPSBhZG9wdENGKENGSFRUUENvb2tpZVN0b3JhZ2VDb3B5Q29v
a2llcyhjb29raWVTdG9yYWdlKCkuZ2V0KCkpKTsKLSAgICBpZiAoIWNvb2tpZXNDRikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQ0ZJbmRleCBjb3VudCA9IENGQXJyYXlHZXRDb3VudChjb29raWVz
Q0YuZ2V0KCkpOwotICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAg
ICAgICAgQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSA9IGNoZWNrZWRfY2ZfY2FzdDxDRkhUVFBDb29r
aWVSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoY29va2llc0NGLmdldCgpLCBpKSk7Ci0gICAg
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZG9tYWluID0gY29va2llRG9tYWluKGNvb2tpZSk7
Ci0gICAgICAgIGhvc3RuYW1lcy5hZGQoZG9tYWluLmdldCgpKTsKLSAgICB9Ci19Ci0KLXZvaWQg
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKCkKLXsKLSAgICBDRkhUVFBD
b29raWVTdG9yYWdlRGVsZXRlQWxsQ29va2llcyhjb29raWVTdG9yYWdlKCkuZ2V0KCkpOwotfQot
Ci12b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhj
b25zdCBWZWN0b3I8U3RyaW5nPiYgaG9zdG5hbWVzKQotewotfQotCi12b2lkIE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoV2FsbFRpbWUpCi17Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDRlVSTENPTk5FQ1RJ
T04pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL05ldHdvcmtTdG9y
YWdlU2Vzc2lvbkNGTmV0V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2NmL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNGTmV0V2luLmNwcAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL05ldHdvcmtTdG9y
YWdlU2Vzc2lvbkNGTmV0V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM1NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOZXR3b3JrU3RvcmFn
ZVNlc3Npb24uaCIKKworI2luY2x1ZGUgIkNvb2tpZS5oIgorI2luY2x1ZGUgIkNvb2tpZVJlcXVl
c3RIZWFkZXJGaWVsZFByb3h5LmgiCisjaW5jbHVkZSAiQ29va2llc1N0cmF0ZWd5LmgiCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZIVFRQQ29va2ll
c1ByaXYuaD4KKyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgorI2lu
Y2x1ZGUgPHBhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgor
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgorI2luY2x1ZGUgPHd0Zi9Qcm9jZXNzUHJp
dmlsZWdlLmg+CisjaW5jbHVkZSA8d3RmL1NvZnRMaW5raW5nLmg+CisjaW5jbHVkZSA8d3RmL1VS
TC5oPgorI2luY2x1ZGUgPHd0Zi9jZi9UeXBlQ2FzdHNDRi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCitlbnVtIHsKKyAgICBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9s
aWN5RXhjbHVzaXZlbHlGcm9tTWFpbkRvY3VtZW50RG9tYWluID0gMworfTsKKworbmFtZXNwYWNl
IFdURiB7CisgICAgCisjZGVmaW5lIERFQ0xBUkVfQ0ZfVFlQRV9UUkFJVChDbGFzc05hbWUpIFwK
K3RlbXBsYXRlIDw+IFwKK3N0cnVjdCBDRlR5cGVUcmFpdDxDbGFzc05hbWUjI1JlZj4geyBcCitz
dGF0aWMgaW5saW5lIENGVHlwZUlEIHR5cGVJRCgpIHsgcmV0dXJuIENsYXNzTmFtZSMjR2V0VHlw
ZUlEKCk7IH0gXAorfTsKKyAgICAKK0RFQ0xBUkVfQ0ZfVFlQRV9UUkFJVChDRkhUVFBDb29raWUp
OworICAgIAorI3VuZGVmIERFQ0xBUkVfQ0ZfVFlQRV9UUkFJVAorfSAvLyBuYW1lc3BhY2UgV1RG
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIENGVVJMU3RvcmFnZVNlc3Npb25SZWYg
Y3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKENGU3RyaW5nUmVmIGlkZW50aWZpZXIsIENGVVJM
U3RvcmFnZVNlc3Npb25SZWYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKQoreworICAgIGNvbnN0IHZv
aWQqIHNlc3Npb25Qcm9wZXJ0eUtleXNbXSA9IHsgX2tDRlVSTFN0b3JhZ2VTZXNzaW9uSXNQcml2
YXRlIH07CisgICAgY29uc3Qgdm9pZCogc2Vzc2lvblByb3BlcnR5VmFsdWVzW10gPSB7IGtDRkJv
b2xlYW5UcnVlIH07CisgICAgQ0ZEaWN0aW9uYXJ5UmVmIHNlc3Npb25Qcm9wZXJ0aWVzID0gQ0ZE
aWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIHNlc3Npb25Qcm9wZXJ0eUtleXMs
IHNlc3Npb25Qcm9wZXJ0eVZhbHVlcywgc2l6ZW9mKHNlc3Npb25Qcm9wZXJ0eUtleXMpIC8gc2l6
ZW9mKCpzZXNzaW9uUHJvcGVydHlLZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tz
LCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7CisgICAgQ0ZVUkxTdG9yYWdlU2Vz
c2lvblJlZiBzdG9yYWdlU2Vzc2lvbiA9IF9DRlVSTFN0b3JhZ2VTZXNzaW9uQ3JlYXRlKGtDRkFs
bG9jYXRvckRlZmF1bHQsIGlkZW50aWZpZXIsIHNlc3Npb25Qcm9wZXJ0aWVzKTsKKyAgICAKKyAg
ICAvLyBUaGUgcHJpdmF0ZSBzdG9yYWdlIHNlc3Npb24gc2hvdWxkIGhhdmUgdGhlIHNhbWUgcHJv
cGVydGllcyBhcyB0aGUgZGVmYXVsdCBzdG9yYWdlIHNlc3Npb24sCisgICAgLy8gd2l0aCB0aGUg
ZXhjZXB0aW9uIHRoYXQgaXQgc2hvdWxkIGJlIGluLW1lbW9yeSBvbmx5IHN0b3JhZ2UuCisgICAg
Q0ZVUkxDYWNoZVJlZiBjYWNoZSA9IF9DRlVSTFN0b3JhZ2VTZXNzaW9uQ29weUNhY2hlKGtDRkFs
bG9jYXRvckRlZmF1bHQsIHN0b3JhZ2VTZXNzaW9uKTsKKyAgICBDRlVSTENhY2hlU2V0RGlza0Nh
cGFjaXR5KGNhY2hlLCAwKTsKKyAgICBDRlVSTENhY2hlUmVmIGRlZmF1bHRDYWNoZTsKKyAgICBp
ZiAoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKQorICAgICAgICBkZWZhdWx0Q2FjaGUgPSBfQ0ZVUkxT
dG9yYWdlU2Vzc2lvbkNvcHlDYWNoZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBkZWZhdWx0U3RvcmFn
ZVNlc3Npb24pOworICAgIGVsc2UKKyAgICAgICAgZGVmYXVsdENhY2hlID0gQ0ZVUkxDYWNoZUNv
cHlTaGFyZWRVUkxDYWNoZSgpOworICAgIENGVVJMQ2FjaGVTZXRNZW1vcnlDYXBhY2l0eShjYWNo
ZSwgQ0ZVUkxDYWNoZU1lbW9yeUNhcGFjaXR5KGRlZmF1bHRDYWNoZSkpOworICAgIENGUmVsZWFz
ZShkZWZhdWx0Q2FjaGUpOworICAgIENGUmVsZWFzZShjYWNoZSk7CisgICAgCisgICAgQ0ZIVFRQ
Q29va2llU3RvcmFnZVJlZiBjb29raWVTdG9yYWdlID0gX0NGVVJMU3RvcmFnZVNlc3Npb25Db3B5
Q29va2llU3RvcmFnZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzdG9yYWdlU2Vzc2lvbik7CisgICAg
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZiBkZWZhdWx0Q29va2llU3RvcmFnZTsKKyAgICBpZiAoZGVm
YXVsdFN0b3JhZ2VTZXNzaW9uKQorICAgICAgICBkZWZhdWx0Q29va2llU3RvcmFnZSA9IF9DRlVS
TFN0b3JhZ2VTZXNzaW9uQ29weUNvb2tpZVN0b3JhZ2Uoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZGVm
YXVsdFN0b3JhZ2VTZXNzaW9uKTsKKyAgICBlbHNlCisgICAgICAgIGRlZmF1bHRDb29raWVTdG9y
YWdlID0gX0NGSFRUUENvb2tpZVN0b3JhZ2VHZXREZWZhdWx0KGtDRkFsbG9jYXRvckRlZmF1bHQp
OworICAgIENGSFRUUENvb2tpZVN0b3JhZ2VTZXRDb29raWVBY2NlcHRQb2xpY3koY29va2llU3Rv
cmFnZSwgQ0ZIVFRQQ29va2llU3RvcmFnZUdldENvb2tpZUFjY2VwdFBvbGljeShkZWZhdWx0Q29v
a2llU3RvcmFnZSkpOworICAgIGlmIChkZWZhdWx0U3RvcmFnZVNlc3Npb24pCisgICAgICAgIENG
UmVsZWFzZShkZWZhdWx0Q29va2llU3RvcmFnZSk7CisgICAgQ0ZSZWxlYXNlKGNvb2tpZVN0b3Jh
Z2UpOworICAgIAorICAgIHJldHVybiBzdG9yYWdlU2Vzc2lvbjsKK30KKwordm9pZCBOZXR3b3Jr
U3RvcmFnZVNlc3Npb246OnNldENvb2tpZXMoY29uc3QgVmVjdG9yPENvb2tpZT4mLCBjb25zdCBV
UkwmLCBjb25zdCBVUkwmKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4gPGh0dHBz
Oi8vd2Via2l0Lm9yZy9iLzE1NjI5OD4KK30KKworc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIHNf
c2V0Q29va2llS2V5Q0YgPSBDRlNUUigiU2V0LUNvb2tpZSIpOworc3RhdGljIGNvbnN0IENGU3Ry
aW5nUmVmIHNfY29va2llQ0YgPSBDRlNUUigiQ29va2llIik7CitzdGF0aWMgY29uc3QgQ0ZTdHJp
bmdSZWYgc19jcmVhdGVkQ0YgPSBDRlNUUigiQ3JlYXRlZCIpOworCitzdGF0aWMgaW5saW5lIFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4gY29va2llRG9tYWluKENGSFRUUENvb2tpZVJlZiBjb29raWUp
Cit7CisgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZIVFRQQ29va2llQ29weURvbWFpbihjb29raWUpKTsK
K30KKworc3RhdGljIGRvdWJsZSBjYW5vbmljYWxDb29raWVUaW1lKGRvdWJsZSB0aW1lKQorewor
ICAgIGlmICghdGltZSkKKyAgICAgICAgcmV0dXJuIHRpbWU7CisgICAgCisgICAgcmV0dXJuICh0
aW1lICsga0NGQWJzb2x1dGVUaW1lSW50ZXJ2YWxTaW5jZTE5NzApICogMTAwMDsKK30KKworc3Rh
dGljIGRvdWJsZSBjb29raWVDcmVhdGVkVGltZShDRkhUVFBDb29raWVSZWYgY29va2llKQorewor
ICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BzID0gYWRvcHRDRihDRkhUVFBDb29r
aWVDb3B5UHJvcGVydGllcyhjb29raWUpKTsKKyAgICBhdXRvIHZhbHVlID0gQ0ZEaWN0aW9uYXJ5
R2V0VmFsdWUocHJvcHMuZ2V0KCksIHNfY3JlYXRlZENGKTsKKyAgICAKKyAgICBhdXRvIGFzTnVt
YmVyID0gZHluYW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPih2YWx1ZSk7CisgICAgaWYgKGFzTnVt
YmVyKSB7CisgICAgICAgIGRvdWJsZSBhc0RvdWJsZTsKKyAgICAgICAgaWYgKENGTnVtYmVyR2V0
VmFsdWUoYXNOdW1iZXIsIGtDRk51bWJlckZsb2F0NjRUeXBlLCAmYXNEb3VibGUpKQorICAgICAg
ICAgICAgcmV0dXJuIGNhbm9uaWNhbENvb2tpZVRpbWUoYXNEb3VibGUpOworICAgICAgICByZXR1
cm4gMC4wOworICAgIH0KKyAgICAKKyAgICBhdXRvIGFzU3RyaW5nID0gZHluYW1pY19jZl9jYXN0
PENGU3RyaW5nUmVmPih2YWx1ZSk7CisgICAgaWYgKGFzU3RyaW5nKQorICAgICAgICByZXR1cm4g
Y2Fub25pY2FsQ29va2llVGltZShDRlN0cmluZ0dldERvdWJsZVZhbHVlKGFzU3RyaW5nKSk7Cisg
ICAgCisgICAgcmV0dXJuIDAuMDsKK30KKworc3RhdGljIGlubGluZSBDRkFic29sdXRlVGltZSBj
b29raWVFeHBpcmF0aW9uVGltZShDRkhUVFBDb29raWVSZWYgY29va2llKQoreworICAgIHJldHVy
biBjYW5vbmljYWxDb29raWVUaW1lKENGSFRUUENvb2tpZUdldEV4cGlyYXRpb25UaW1lKGNvb2tp
ZSkpOworfQorCitzdGF0aWMgaW5saW5lIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY29va2llTmFt
ZShDRkhUVFBDb29raWVSZWYgY29va2llKQoreworICAgIHJldHVybiBhZG9wdENGKENGSFRUUENv
b2tpZUNvcHlOYW1lKGNvb2tpZSkpOworfQorCitzdGF0aWMgaW5saW5lIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gY29va2llUGF0aChDRkhUVFBDb29raWVSZWYgY29va2llKQoreworICAgIHJldHVy
biBhZG9wdENGKENGSFRUUENvb2tpZUNvcHlQYXRoKGNvb2tpZSkpOworfQorCitzdGF0aWMgaW5s
aW5lIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY29va2llVmFsdWUoQ0ZIVFRQQ29va2llUmVmIGNv
b2tpZSkKK3sKKyAgICByZXR1cm4gYWRvcHRDRihDRkhUVFBDb29raWVDb3B5VmFsdWUoY29va2ll
KSk7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gZmlsdGVyQ29va2llcyhDRkFy
cmF5UmVmIHVuZmlsdGVyZWRDb29raWVzKQoreworICAgIEFTU0VSVCh1bmZpbHRlcmVkQ29va2ll
cyk7CisgICAgQ0ZJbmRleCBjb3VudCA9IENGQXJyYXlHZXRDb3VudCh1bmZpbHRlcmVkQ29va2ll
cyk7CisgICAgUmV0YWluUHRyPENGTXV0YWJsZUFycmF5UmVmPiBmaWx0ZXJlZENvb2tpZXMgPSBh
ZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKDAsIGNvdW50LCAma0NGVHlwZUFycmF5Q2FsbEJh
Y2tzKSk7CisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAg
ICBDRkhUVFBDb29raWVSZWYgY29va2llID0gKENGSFRUUENvb2tpZVJlZilDRkFycmF5R2V0VmFs
dWVBdEluZGV4KHVuZmlsdGVyZWRDb29raWVzLCBpKTsKKyAgICAgICAgCisgICAgICAgIC8vIDxy
ZGFyOi8vcHJvYmxlbS81NjMyODgzPiBDRkhUVFBDb29raWVTdG9yYWdlIHdvdWxkIHN0b3JlIGFu
IGVtcHR5IGNvb2tpZSwKKyAgICAgICAgLy8gd2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29va2ll
OiA9Ii4gV2UgaGF2ZSBhIHdvcmthcm91bmQgaW4gc2V0Q29va2llcygpIHRvIHByZXZlbnQKKyAg
ICAgICAgLy8gdGhhdCwgYnV0IHdlIGFsc28gbmVlZCB0byBhdm9pZCBzZW5kaW5nIGNvb2tpZXMg
dGhhdCB3ZXJlIHByZXZpb3VzbHkgc3RvcmVkLCBhbmQKKyAgICAgICAgLy8gdGhlcmUncyBubyBo
YXJtIHRvIGRvaW5nIHRoaXMgY2hlY2sgYmVjYXVzZSBzdWNoIGEgY29va2llIGlzIG5ldmVyIHZh
bGlkLgorICAgICAgICBpZiAoIUNGU3RyaW5nR2V0TGVuZ3RoKGNvb2tpZU5hbWUoY29va2llKS5n
ZXQoKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChDRkhU
VFBDb29raWVJc0hUVFBPbmx5KGNvb2tpZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgCisgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShmaWx0ZXJlZENvb2tpZXMuZ2V0KCksIGNv
b2tpZSk7CisgICAgfQorICAgIHJldHVybiBmaWx0ZXJlZENvb2tpZXM7Cit9CisKK3N0YXRpYyBS
ZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY29weUNvb2tpZXNGb3JVUkxXaXRoRmlyc3RQYXJ0eVVSTChj
b25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0
eSwgY29uc3QgVVJMJiB1cmwsIEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29r
aWVzKQoreworICAgIGJvb2wgc2VjdXJlID0gaW5jbHVkZVNlY3VyZUNvb2tpZXMgPT0gSW5jbHVk
ZVNlY3VyZUNvb2tpZXM6OlllczsKKyAgICAKKyAgICBBU1NFUlQoIXNlY3VyZSB8fCAoc2VjdXJl
ICYmIHVybC5wcm90b2NvbElzKCJodHRwcyIpKSk7CisgICAgCisgICAgVU5VU0VEX1BBUkFNKGZp
cnN0UGFydHkpOworICAgIHJldHVybiBhZG9wdENGKENGSFRUUENvb2tpZVN0b3JhZ2VDb3B5Q29v
a2llc0ZvclVSTChzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKS5nZXQoKSwgdXJsLmNyZWF0ZUNGVVJM
KCkuZ2V0KCksIHNlY3VyZSkpOworfQorCitzdGF0aWMgQ0ZBcnJheVJlZiBjcmVhdGVDb29raWVz
KENGRGljdGlvbmFyeVJlZiBoZWFkZXJGaWVsZHMsIENGVVJMUmVmIHVybCkKK3sKKyAgICBDRkFy
cmF5UmVmIHBhcnNlZENvb2tpZXMgPSBDRkhUVFBDb29raWVDcmVhdGVXaXRoUmVzcG9uc2VIZWFk
ZXJGaWVsZHMoa0NGQWxsb2NhdG9yRGVmYXVsdCwgaGVhZGVyRmllbGRzLCB1cmwpOworICAgIGlm
ICghcGFyc2VkQ29va2llcykKKyAgICAgICAgcGFyc2VkQ29va2llcyA9IENGQXJyYXlDcmVhdGUo
a0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgMCwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcyk7CisgICAg
CisgICAgcmV0dXJuIHBhcnNlZENvb2tpZXM7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNz
aW9uOjpzZXRDb29raWVzRnJvbURPTShjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVT
aXRlSW5mbyYsIGNvbnN0IFVSTCYgdXJsLCBPcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgT3B0
aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKK3sKKyAg
ICBVTlVTRURfUEFSQU0oZnJhbWVJRCk7CisgICAgVU5VU0VEX1BBUkFNKHBhZ2VJRCk7CisgICAg
Ly8gPHJkYXI6Ly9wcm9ibGVtLzU2MzI4ODM+IENGSFRUUENvb2tpZVN0b3JhZ2Ugc3RvcmVzIGFu
IGVtcHR5IGNvb2tpZSwgd2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29va2llOiA9Ii4KKyAgICBp
ZiAodmFsdWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUmV0YWluUHRy
PENGVVJMUmVmPiB1cmxDRiA9IHVybC5jcmVhdGVDRlVSTCgpOworICAgIFJldGFpblB0cjxDRlVS
TFJlZj4gZmlyc3RQYXJ0eUZvckNvb2tpZXNDRiA9IGZpcnN0UGFydHkuY3JlYXRlQ0ZVUkwoKTsK
KyAgICAKKyAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUz
MT4sIDxyZGFyOi8vNDQwOTAzND4KKyAgICAvLyBjb29raWVzV2l0aFJlc3BvbnNlSGVhZGVyRmll
bGRzIGRvZXNuJ3QgcGFyc2UgY29va2llcyB3aXRob3V0IGEgdmFsdWUKKyAgICBTdHJpbmcgY29v
a2llU3RyaW5nID0gdmFsdWUuY29udGFpbnMoJz0nKSA/IHZhbHVlIDogdmFsdWUgKyAiPSI7Cisg
ICAgCisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjb29raWVTdHJpbmdDRiA9IGNvb2tpZVN0
cmluZy5jcmVhdGVDRlN0cmluZygpOworICAgIGF1dG8gY29va2llU3RyaW5nQ0ZQdHIgPSBjb29r
aWVTdHJpbmdDRi5nZXQoKTsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBoZWFkZXJG
aWVsZHNDRiA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQs
CisgICAgICAgIChjb25zdCB2b2lkKiopJnNfc2V0Q29va2llS2V5Q0YsIChjb25zdCB2b2lkKiop
JmNvb2tpZVN0cmluZ0NGUHRyLCAxLAorICAgICAgICAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxs
QmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgCisgICAgUmV0
YWluUHRyPENGQXJyYXlSZWY+IHVuZmlsdGVyZWRDb29raWVzID0gYWRvcHRDRihjcmVhdGVDb29r
aWVzKGhlYWRlckZpZWxkc0NGLmdldCgpLCB1cmxDRi5nZXQoKSkpOworICAgIENGSFRUUENvb2tp
ZVN0b3JhZ2VTZXRDb29raWVzKGNvb2tpZVN0b3JhZ2UoKS5nZXQoKSwgZmlsdGVyQ29va2llcyh1
bmZpbHRlcmVkQ29va2llcy5nZXQoKSkuZ2V0KCksIHVybENGLmdldCgpLCBmaXJzdFBhcnR5Rm9y
Q29va2llc0NGLmdldCgpKTsKK30KKworc3RhdGljIGJvb2wgY29udGFpbnNTZWN1cmVDb29raWVz
KENGQXJyYXlSZWYgY29va2llcykKK3sKKyAgICBDRkluZGV4IGNvb2tpZUNvdW50ID0gQ0ZBcnJh
eUdldENvdW50KGNvb2tpZXMpOworICAgIHdoaWxlIChjb29raWVDb3VudC0tKSB7CisgICAgICAg
IGlmIChDRkhUVFBDb29raWVJc1NlY3VyZShjaGVja2VkX2NmX2Nhc3Q8Q0ZIVFRQQ29va2llUmVm
PihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGNvb2tpZXMsIGNvb2tpZUNvdW50KSkpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwor
c3RkOjpwYWlyPFN0cmluZywgYm9vbD4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVzRm9y
RE9NKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29uc3QgVVJM
JiB1cmwsIE9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBPcHRpb25hbDx1aW50NjRfdD4gcGFn
ZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRlU2VjdXJlQ29va2llcykgY29uc3QKK3sK
KyAgICBVTlVTRURfUEFSQU0oZnJhbWVJRCk7CisgICAgVU5VU0VEX1BBUkFNKHBhZ2VJRCk7Cisg
ICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNvb2tpZXNDRiA9IGNvcHlDb29raWVzRm9yVVJMV2l0
aEZpcnN0UGFydHlVUkwoKnRoaXMsIGZpcnN0UGFydHksIHVybCwgaW5jbHVkZVNlY3VyZUNvb2tp
ZXMpOworICAgIAorICAgIGF1dG8gZmlsdGVyZWRDb29raWVzID0gZmlsdGVyQ29va2llcyhjb29r
aWVzQ0YuZ2V0KCkpOworICAgIAorICAgIGJvb2wgZGlkQWNjZXNzU2VjdXJlQ29va2llcyA9IGNv
bnRhaW5zU2VjdXJlQ29va2llcyhmaWx0ZXJlZENvb2tpZXMuZ2V0KCkpOworICAgIAorICAgIFJl
dGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGhlYWRlckNGID0gYWRvcHRDRihDRkhUVFBDb29raWVD
b3B5UmVxdWVzdEhlYWRlckZpZWxkcyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBmaWx0ZXJlZENvb2tp
ZXMuZ2V0KCkpKTsKKyAgICBTdHJpbmcgY29va2llU3RyaW5nID0gY2hlY2tlZF9jZl9jYXN0PENG
U3RyaW5nUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShoZWFkZXJDRi5nZXQoKSwgc19jb29raWVD
RikpOworICAgIHJldHVybiB7IGNvb2tpZVN0cmluZywgZGlkQWNjZXNzU2VjdXJlQ29va2llcyB9
OworfQorCitzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNv
b2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3Qg
U2FtZVNpdGVJbmZvJiwgY29uc3QgVVJMJiB1cmwsIE9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlE
LCBPcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRl
U2VjdXJlQ29va2llcykgY29uc3QKK3sKKyAgICBVTlVTRURfUEFSQU0oZnJhbWVJRCk7CisgICAg
VU5VU0VEX1BBUkFNKHBhZ2VJRCk7CisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNvb2tpZXND
RiA9IGNvcHlDb29raWVzRm9yVVJMV2l0aEZpcnN0UGFydHlVUkwoKnRoaXMsIGZpcnN0UGFydHks
IHVybCwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOworICAgIAorICAgIGJvb2wgZGlkQWNjZXNzU2Vj
dXJlQ29va2llcyA9IGNvbnRhaW5zU2VjdXJlQ29va2llcyhjb29raWVzQ0YuZ2V0KCkpOworICAg
IAorICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGhlYWRlckNGID0gYWRvcHRDRihDRkhU
VFBDb29raWVDb3B5UmVxdWVzdEhlYWRlckZpZWxkcyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb29r
aWVzQ0YuZ2V0KCkpKTsKKyAgICBTdHJpbmcgY29va2llU3RyaW5nID0gY2hlY2tlZF9jZl9jYXN0
PENGU3RyaW5nUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShoZWFkZXJDRi5nZXQoKSwgc19jb29r
aWVDRikpOworICAgIHJldHVybiB7IGNvb2tpZVN0cmluZywgZGlkQWNjZXNzU2VjdXJlQ29va2ll
cyB9OworfQorCitzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246
OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IENvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFByb3h5JiBoZWFkZXJGaWVsZFByb3h5KSBjb25zdAoreworICAgIHJldHVybiBjb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShoZWFkZXJGaWVsZFByb3h5LmZpcnN0UGFydHksIGhlYWRl
ckZpZWxkUHJveHkuc2FtZVNpdGVJbmZvLCBoZWFkZXJGaWVsZFByb3h5LnVybCwgaGVhZGVyRmll
bGRQcm94eS5mcmFtZUlELCBoZWFkZXJGaWVsZFByb3h5LnBhZ2VJRCwgaGVhZGVyRmllbGRQcm94
eS5pbmNsdWRlU2VjdXJlQ29va2llcyk7Cit9CisKK2Jvb2wgTmV0d29ya1N0b3JhZ2VTZXNzaW9u
Ojpjb29raWVzRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2Vw
dFBvbGljeSBwb2xpY3kgPSBDRkhUVFBDb29raWVTdG9yYWdlR2V0Q29va2llQWNjZXB0UG9saWN5
KGNvb2tpZVN0b3JhZ2UoKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvbGljeSA9PSBDRkhUVFBDb29r
aWVTdG9yYWdlQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW4gfHwgcG9saWN5
ID09IENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lFeGNsdXNpdmVseUZyb21NYWluRG9j
dW1lbnREb21haW4gfHwgcG9saWN5ID09IENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lB
bHdheXM7Cit9CisKK2Jvb2wgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRSYXdDb29raWVzKGNv
bnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29uc3QgVVJMJiB1cmws
IE9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBPcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBW
ZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykgY29uc3QKK3sKKyAgICBVTlVTRURfUEFSQU0oZnJh
bWVJRCk7CisgICAgVU5VU0VEX1BBUkFNKHBhZ2VJRCk7CisgICAgcmF3Q29va2llcy5jbGVhcigp
OworICAgIAorICAgIGF1dG8gaW5jbHVkZVNlY3VyZUNvb2tpZXMgPSB1cmwucHJvdG9jb2xJcygi
aHR0cHMiKSA/IEluY2x1ZGVTZWN1cmVDb29raWVzOjpZZXMgOiBJbmNsdWRlU2VjdXJlQ29va2ll
czo6Tm87CisgICAgCisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNvb2tpZXNDRiA9IGNvcHlD
b29raWVzRm9yVVJMV2l0aEZpcnN0UGFydHlVUkwoKnRoaXMsIGZpcnN0UGFydHksIHVybCwgaW5j
bHVkZVNlY3VyZUNvb2tpZXMpOworICAgIAorICAgIENGSW5kZXggY291bnQgPSBDRkFycmF5R2V0
Q291bnQoY29va2llc0NGLmdldCgpKTsKKyAgICByYXdDb29raWVzLnJlc2VydmVDYXBhY2l0eShj
b3VudCk7CisgICAgCisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewor
ICAgICAgICBDRkhUVFBDb29raWVSZWYgY2ZDb29raWUgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZIVFRQ
Q29va2llUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGNvb2tpZXNDRi5nZXQoKSwgaSkpOwor
ICAgICAgICBDb29raWUgY29va2llOworICAgICAgICBjb29raWUubmFtZSA9IGNvb2tpZU5hbWUo
Y2ZDb29raWUpLmdldCgpOworICAgICAgICBjb29raWUudmFsdWUgPSBjb29raWVWYWx1ZShjZkNv
b2tpZSkuZ2V0KCk7CisgICAgICAgIGNvb2tpZS5kb21haW4gPSBjb29raWVEb21haW4oY2ZDb29r
aWUpLmdldCgpOworICAgICAgICBjb29raWUucGF0aCA9IGNvb2tpZVBhdGgoY2ZDb29raWUpLmdl
dCgpOworICAgICAgICBjb29raWUuY3JlYXRlZCA9IGNvb2tpZUNyZWF0ZWRUaW1lKGNmQ29va2ll
KTsKKyAgICAgICAgY29va2llLmV4cGlyZXMgPSBjb29raWVFeHBpcmF0aW9uVGltZShjZkNvb2tp
ZSk7CisgICAgICAgIGNvb2tpZS5odHRwT25seSA9IENGSFRUUENvb2tpZUlzSFRUUE9ubHkoY2ZD
b29raWUpOworICAgICAgICBjb29raWUuc2VjdXJlID0gQ0ZIVFRQQ29va2llSXNTZWN1cmUoY2ZD
b29raWUpOworICAgICAgICBjb29raWUuc2Vzc2lvbiA9IGZhbHNlOyAvLyBGSVhNRTogTmVlZCBB
UEkgZm9yIGlmIGEgY29va2llIGlzIGEgc2Vzc2lvbiBjb29raWUuCisgICAgICAgIHJhd0Nvb2tp
ZXMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoY29va2llKSk7CisgICAgfQorICAgIAorICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2ll
KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Cit7CisgICAgUmV0YWlu
UHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSB0aGlzLT5jb29raWVT
dG9yYWdlKCk7CisgICAgCisgICAgUmV0YWluUHRyPENGVVJMUmVmPiB1cmxDRiA9IHVybC5jcmVh
dGVDRlVSTCgpOworICAgIAorICAgIGJvb2wgc2VuZFNlY3VyZUNvb2tpZXMgPSB1cmwucHJvdG9j
b2xJcygiaHR0cHMiKTsKKyAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY29va2llc0NGID0gYWRv
cHRDRihDRkhUVFBDb29raWVTdG9yYWdlQ29weUNvb2tpZXNGb3JVUkwoY29va2llU3RvcmFnZS5n
ZXQoKSwgdXJsQ0YuZ2V0KCksIHNlbmRTZWN1cmVDb29raWVzKSk7CisgICAgCisgICAgQ0ZJbmRl
eCBjb3VudCA9IENGQXJyYXlHZXRDb3VudChjb29raWVzQ0YuZ2V0KCkpOworICAgIGZvciAoQ0ZJ
bmRleCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgQ0ZIVFRQQ29va2llUmVmIGNv
b2tpZSA9IGNoZWNrZWRfY2ZfY2FzdDxDRkhUVFBDb29raWVSZWY+KENGQXJyYXlHZXRWYWx1ZUF0
SW5kZXgoY29va2llc0NGLmdldCgpLCBpKSk7CisgICAgICAgIGlmIChTdHJpbmcoY29va2llTmFt
ZShjb29raWUpLmdldCgpKSA9PSBuYW1lKSB7CisgICAgICAgICAgICBDRkhUVFBDb29raWVTdG9y
YWdlRGVsZXRlQ29va2llKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGNvb2tpZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Np
b246OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQor
eworICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBjb29raWVzQ0YgPSBhZG9wdENGKENGSFRUUENv
b2tpZVN0b3JhZ2VDb3B5Q29va2llcyhjb29raWVTdG9yYWdlKCkuZ2V0KCkpKTsKKyAgICBpZiAo
IWNvb2tpZXNDRikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIENGSW5kZXggY291bnQgPSBD
RkFycmF5R2V0Q291bnQoY29va2llc0NGLmdldCgpKTsKKyAgICBmb3IgKENGSW5kZXggaSA9IDA7
IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIENGSFRUUENvb2tpZVJlZiBjb29raWUgPSBjaGVj
a2VkX2NmX2Nhc3Q8Q0ZIVFRQQ29va2llUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGNvb2tp
ZXNDRi5nZXQoKSwgaSkpOworICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGRvbWFpbiA9
IGNvb2tpZURvbWFpbihjb29raWUpOworICAgICAgICBob3N0bmFtZXMuYWRkKGRvbWFpbi5nZXQo
KSk7CisgICAgfQorfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQWxsQ29v
a2llcygpCit7CisgICAgQ0ZIVFRQQ29va2llU3RvcmFnZURlbGV0ZUFsbENvb2tpZXMoY29va2ll
U3RvcmFnZSgpLmdldCgpKTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0
ZUNvb2tpZXNGb3JIb3N0bmFtZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3RuYW1lcykKK3sK
K30KKwordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmll
ZFNpbmNlKFdhbGxUaW1lKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357955</attachid>
            <date>2018-12-21 10:03:55 -0800</date>
            <delta_ts>2018-12-21 15:44:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192958-20181221100354.patch</filename>
            <type>text/plain</type>
            <size>34924</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzOTUwNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDE4LTEyLTIxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBXaW5k
b3dzLXNwZWNpZmljIGNvZGUgZnJvbSBOZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHAgdG8g
aXRzIG93biBmaWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xOTI5NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIG1ha2VzIGl0IGVhc2llciB0byByZWFzb24gYWJvdXQgd2hhdCBjb2RlIGlzIHVz
ZWQgd2hlcmUuCisKKyAgICAgICAgKiBQbGF0Zm9ybUFwcGxlV2luLmNtYWtlOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmNvb2tpZURvbWFpbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpjYW5vbmljYWxDb29raWVUaW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvb2tp
ZUNyZWF0ZWRUaW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZUV4cGlyYXRp
b25UaW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZU5hbWUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Y29va2llUGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpjb29raWVWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpmaWx0ZXJDb29r
aWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvcHlDb29raWVzRm9yVVJMV2l0aEZp
cnN0UGFydHlVUkwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ29va2llcyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENv
b2tpZXNGcm9tRE9NIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnRhaW5z
U2VjdXJlQ29va2llcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OmNvb2tpZXNGb3JET00gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246
OmNvb2tpZXNFbmFibGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6Z2V0UmF3Q29va2llcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVBbGxD
b29raWVzTW9kaWZpZWRTaW5jZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldFdpbi5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpj
b29raWVEb21haW4pOgorICAgICAgICAoV2ViQ29yZTo6Y2Fub25pY2FsQ29va2llVGltZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb29raWVDcmVhdGVkVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpj
b29raWVFeHBpcmF0aW9uVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVOYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvb2tpZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsdGVyQ29va2llcyk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb3B5Q29va2llc0ZvclVSTFdpdGhGaXJzdFBhcnR5VVJMKToKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9u
OjpzZXRDb29raWVzRnJvbURPTSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpjb250YWluc1Nl
Y3VyZUNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpj
b29raWVzRm9yRE9NIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVzRW5hYmxlZCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldFJhd0Nvb2tpZXMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVDb29raWUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRIb3N0
bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Np
b246OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UpOgorCiAy
MDE4LTEyLTIxICBKdXN0aW4gTWljaGF1ZCAgPGp1c3Rpbl9taWNoYXVkQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXBlYXRlZCBiYWNrZ3JvdW5kIGltYWdlcyB3aXRoIHplcm8gc2l6ZSBzaG91bGQg
ZGlzcGxheSB0aGUgYmFja2dyb3VuZCBjb2xvcgpJbmRleDogU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1BcHBsZVdpbi5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFw
cGxlV2luLmNtYWtlCShyZXZpc2lvbiAyMzk1MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUFwcGxlV2luLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBAIGxpc3QoQVBQ
RU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvRm9ybURhdGFTdHJl
YW1DRk5ldC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2NmL0xvYWRlclJ1bkxvb3BDRi5jcHAK
ICAgICBwbGF0Zm9ybS9uZXR3b3JrL2NmL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNGTmV0LmNwcAor
ICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXRXaW4uY3Bw
CiAgICAgcGxhdGZvcm0vbmV0d29yay9jZi9Qcm90ZWN0aW9uU3BhY2VDRk5ldC5jcHAKICAgICBw
bGF0Zm9ybS9uZXR3b3JrL2NmL1Byb3h5U2VydmVyQ0ZOZXQuY3BwCiAgICAgcGxhdGZvcm0vbmV0
d29yay9jZi9SZXNvdXJjZUVycm9yQ0YuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgJKHJldmlzaW9u
IDIzOTUwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMCw2ICsyMTAsOCBAQCBwcml2YXRlOgog
CiAjaWYgUExBVEZPUk0oQ09DT0EpCiBXRUJDT1JFX0VYUE9SVCBDRlVSTFN0b3JhZ2VTZXNzaW9u
UmVmIGNyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihDRlN0cmluZ1JlZiBpZGVudGlmaWVyKTsK
KyNlbGlmIFVTRShDRlVSTENPTk5FQ1RJT04pCitDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIGNyZWF0
ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihDRlN0cmluZ1JlZiBpZGVudGlmaWVyLCBDRlVSTFN0b3Jh
Z2VTZXNzaW9uUmVmIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbik7CiAjZW5kaWYKIAogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25D
Rk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
Zi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHAJKHJldmlzaW9uIDIzOTUwNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZO
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw0NCArMzUsNiBAQAogI2luY2x1ZGUgIlB1Ymxp
Y1N1ZmZpeC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2VuZGlmCi0jaWYgVVNF
KENGVVJMQ09OTkVDVElPTikKLSNpbmNsdWRlICJDb29raWUuaCIKLSNpbmNsdWRlICJDb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRQcm94eS5oIgotI2luY2x1ZGUgIkNvb2tpZXNTdHJhdGVneS5oIgot
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGSFRUUENv
b2tpZXNQcml2Lmg+Ci0jaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4K
LSNpbmNsdWRlIDxwYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oPgotI2luY2x1ZGUgPHdpbmRvd3Mu
aD4KLSNpbmNsdWRlIDx3dGYvU29mdExpbmtpbmcuaD4KLSNpbmNsdWRlIDx3dGYvVVJMLmg+Ci0j
aW5jbHVkZSA8d3RmL2NmL1R5cGVDYXN0c0NGLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLWVudW0gewotICAgIENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lFeGNs
dXNpdmVseUZyb21NYWluRG9jdW1lbnREb21haW4gPSAzCi19OwotCi1uYW1lc3BhY2UgV1RGIHsK
LQotI2RlZmluZSBERUNMQVJFX0NGX1RZUEVfVFJBSVQoQ2xhc3NOYW1lKSBcCi10ZW1wbGF0ZSA8
PiBcCi1zdHJ1Y3QgQ0ZUeXBlVHJhaXQ8Q2xhc3NOYW1lIyNSZWY+IHsgXAotc3RhdGljIGlubGlu
ZSBDRlR5cGVJRCB0eXBlSUQoKSB7IHJldHVybiBDbGFzc05hbWUjI0dldFR5cGVJRCgpOyB9IFwK
LX07Ci0KLSNpZiBDT01QSUxFUihDTEFORykKLUFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05T
X0JFR0lOCi0jZW5kaWYKLURFQ0xBUkVfQ0ZfVFlQRV9UUkFJVChDRkhUVFBDb29raWUpOwotI2lm
IENPTVBJTEVSKENMQU5HKQotQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi0jZW5k
aWYKLQotI3VuZGVmIERFQ0xBUkVfQ0ZfVFlQRV9UUkFJVAotfSAvLyBuYW1lc3BhY2UgV1RGCi0K
LSNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEzMSw0MiArOTMsNiBAQCBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTdG9yYWdlU2VzCiAgICAgcmV0dXJuIHNlc3Npb247
CiB9CiAKLSNpZiAhUExBVEZPUk0oQ09DT0EpCi1zdGF0aWMgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJl
ZiBjcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24oQ0ZTdHJpbmdSZWYgaWRlbnRpZmllciwgQ0ZV
UkxTdG9yYWdlU2Vzc2lvblJlZiBkZWZhdWx0U3RvcmFnZVNlc3Npb24pCi17Ci0gICAgY29uc3Qg
dm9pZCogc2Vzc2lvblByb3BlcnR5S2V5c1tdID0geyBfa0NGVVJMU3RvcmFnZVNlc3Npb25Jc1By
aXZhdGUgfTsKLSAgICBjb25zdCB2b2lkKiBzZXNzaW9uUHJvcGVydHlWYWx1ZXNbXSA9IHsga0NG
Qm9vbGVhblRydWUgfTsKLSAgICBDRkRpY3Rpb25hcnlSZWYgc2Vzc2lvblByb3BlcnRpZXMgPSBD
RkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc2Vzc2lvblByb3BlcnR5S2V5
cywgc2Vzc2lvblByb3BlcnR5VmFsdWVzLCBzaXplb2Yoc2Vzc2lvblByb3BlcnR5S2V5cykgLyBz
aXplb2YoKnNlc3Npb25Qcm9wZXJ0eUtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFj
a3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKTsKLSAgICBDRlVSTFN0b3JhZ2VT
ZXNzaW9uUmVmIHN0b3JhZ2VTZXNzaW9uID0gX0NGVVJMU3RvcmFnZVNlc3Npb25DcmVhdGUoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgaWRlbnRpZmllciwgc2Vzc2lvblByb3BlcnRpZXMpOwotCi0gICAg
Ly8gVGhlIHByaXZhdGUgc3RvcmFnZSBzZXNzaW9uIHNob3VsZCBoYXZlIHRoZSBzYW1lIHByb3Bl
cnRpZXMgYXMgdGhlIGRlZmF1bHQgc3RvcmFnZSBzZXNzaW9uLAotICAgIC8vIHdpdGggdGhlIGV4
Y2VwdGlvbiB0aGF0IGl0IHNob3VsZCBiZSBpbi1tZW1vcnkgb25seSBzdG9yYWdlLgotICAgIENG
VVJMQ2FjaGVSZWYgY2FjaGUgPSBfQ0ZVUkxTdG9yYWdlU2Vzc2lvbkNvcHlDYWNoZShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBzdG9yYWdlU2Vzc2lvbik7Ci0gICAgQ0ZVUkxDYWNoZVNldERpc2tDYXBh
Y2l0eShjYWNoZSwgMCk7Ci0gICAgQ0ZVUkxDYWNoZVJlZiBkZWZhdWx0Q2FjaGU7Ci0gICAgaWYg
KGRlZmF1bHRTdG9yYWdlU2Vzc2lvbikKLSAgICAgICAgZGVmYXVsdENhY2hlID0gX0NGVVJMU3Rv
cmFnZVNlc3Npb25Db3B5Q2FjaGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZGVmYXVsdFN0b3JhZ2VT
ZXNzaW9uKTsKLSAgICBlbHNlIAotICAgICAgICBkZWZhdWx0Q2FjaGUgPSBDRlVSTENhY2hlQ29w
eVNoYXJlZFVSTENhY2hlKCk7Ci0gICAgQ0ZVUkxDYWNoZVNldE1lbW9yeUNhcGFjaXR5KGNhY2hl
LCBDRlVSTENhY2hlTWVtb3J5Q2FwYWNpdHkoZGVmYXVsdENhY2hlKSk7Ci0gICAgQ0ZSZWxlYXNl
KGRlZmF1bHRDYWNoZSk7Ci0gICAgQ0ZSZWxlYXNlKGNhY2hlKTsKLQotICAgIENGSFRUUENvb2tp
ZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSA9IF9DRlVSTFN0b3JhZ2VTZXNzaW9uQ29weUNvb2tp
ZVN0b3JhZ2Uoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc3RvcmFnZVNlc3Npb24pOwotICAgIENGSFRU
UENvb2tpZVN0b3JhZ2VSZWYgZGVmYXVsdENvb2tpZVN0b3JhZ2U7Ci0gICAgaWYgKGRlZmF1bHRT
dG9yYWdlU2Vzc2lvbikKLSAgICAgICAgZGVmYXVsdENvb2tpZVN0b3JhZ2UgPSBfQ0ZVUkxTdG9y
YWdlU2Vzc2lvbkNvcHlDb29raWVTdG9yYWdlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGRlZmF1bHRT
dG9yYWdlU2Vzc2lvbik7Ci0gICAgZWxzZQotICAgICAgICBkZWZhdWx0Q29va2llU3RvcmFnZSA9
IF9DRkhUVFBDb29raWVTdG9yYWdlR2V0RGVmYXVsdChrQ0ZBbGxvY2F0b3JEZWZhdWx0KTsKLSAg
ICBDRkhUVFBDb29raWVTdG9yYWdlU2V0Q29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2Us
IENGSFRUUENvb2tpZVN0b3JhZ2VHZXRDb29raWVBY2NlcHRQb2xpY3koZGVmYXVsdENvb2tpZVN0
b3JhZ2UpKTsKLSAgICBpZiAoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKQotICAgICAgICBDRlJlbGVh
c2UoZGVmYXVsdENvb2tpZVN0b3JhZ2UpOwotICAgIENGUmVsZWFzZShjb29raWVTdG9yYWdlKTsK
LQotICAgIHJldHVybiBzdG9yYWdlU2Vzc2lvbjsKLX0KLSNlbmRpZgotCiB2b2lkIE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbjo6c3dpdGNoVG9OZXdUZXN0aW5nU2Vzc2lvbigpCiB7CiAgICAgLy8gU2Vz
c2lvbiBuYW1lIHNob3VsZCBiZSBzaG9ydCBlbm91Z2ggZm9yIHNoYXJlZCBtZW1vcnkgcmVnaW9u
IG5hbWUgdG8gYmUgdW5kZXIgdGhlIGxpbWl0LCBvdGVocndpc2Ugc2FuZGJveCBydWxlcyB3b24n
dCB3b3JrIChzZWUgPHJkYXI6Ly9wcm9ibGVtLzEzNjQyODUyPikuCkBAIC0yNjIsMjYyICsxODgs
MyBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llcyhjCiAjZW5kaWYKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jaWYgVVNFKENGVVJMQ09OTkVDVElPTikKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYgc19zZXRDb29raWVL
ZXlDRiA9IENGU1RSKCJTZXQtQ29va2llIik7Ci1zdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYgc19j
b29raWVDRiA9IENGU1RSKCJDb29raWUiKTsKLXN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBzX2Ny
ZWF0ZWRDRiA9IENGU1RSKCJDcmVhdGVkIik7Ci0KLXN0YXRpYyBpbmxpbmUgUmV0YWluUHRyPENG
U3RyaW5nUmVmPiBjb29raWVEb21haW4oQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSkKLXsKLSAgICBy
ZXR1cm4gYWRvcHRDRihDRkhUVFBDb29raWVDb3B5RG9tYWluKGNvb2tpZSkpOwotfQotCi1zdGF0
aWMgZG91YmxlIGNhbm9uaWNhbENvb2tpZVRpbWUoZG91YmxlIHRpbWUpCi17Ci0gICAgaWYgKCF0
aW1lKQotICAgICAgICByZXR1cm4gdGltZTsKLQotICAgIHJldHVybiAodGltZSArIGtDRkFic29s
dXRlVGltZUludGVydmFsU2luY2UxOTcwKSAqIDEwMDA7Ci19Ci0KLXN0YXRpYyBkb3VibGUgY29v
a2llQ3JlYXRlZFRpbWUoQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSkKLXsKLSAgICBSZXRhaW5QdHI8
Q0ZEaWN0aW9uYXJ5UmVmPiBwcm9wcyA9IGFkb3B0Q0YoQ0ZIVFRQQ29va2llQ29weVByb3BlcnRp
ZXMoY29va2llKSk7Ci0gICAgYXV0byB2YWx1ZSA9IENGRGljdGlvbmFyeUdldFZhbHVlKHByb3Bz
LmdldCgpLCBzX2NyZWF0ZWRDRik7Ci0KLSAgICBhdXRvIGFzTnVtYmVyID0gZHluYW1pY19jZl9j
YXN0PENGTnVtYmVyUmVmPih2YWx1ZSk7Ci0gICAgaWYgKGFzTnVtYmVyKSB7Ci0gICAgICAgIGRv
dWJsZSBhc0RvdWJsZTsKLSAgICAgICAgaWYgKENGTnVtYmVyR2V0VmFsdWUoYXNOdW1iZXIsIGtD
Rk51bWJlckZsb2F0NjRUeXBlLCAmYXNEb3VibGUpKQotICAgICAgICAgICAgcmV0dXJuIGNhbm9u
aWNhbENvb2tpZVRpbWUoYXNEb3VibGUpOwotICAgICAgICByZXR1cm4gMC4wOwotICAgIH0KLQot
ICAgIGF1dG8gYXNTdHJpbmcgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZTdHJpbmdSZWY+KHZhbHVlKTsK
LSAgICBpZiAoYXNTdHJpbmcpCi0gICAgICAgIHJldHVybiBjYW5vbmljYWxDb29raWVUaW1lKENG
U3RyaW5nR2V0RG91YmxlVmFsdWUoYXNTdHJpbmcpKTsKLQotICAgIHJldHVybiAwLjA7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgQ0ZBYnNvbHV0ZVRpbWUgY29va2llRXhwaXJhdGlvblRpbWUoQ0ZIVFRQ
Q29va2llUmVmIGNvb2tpZSkKLXsKLSAgICByZXR1cm4gY2Fub25pY2FsQ29va2llVGltZShDRkhU
VFBDb29raWVHZXRFeHBpcmF0aW9uVGltZShjb29raWUpKTsKLX0KLQotc3RhdGljIGlubGluZSBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNvb2tpZU5hbWUoQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSkK
LXsKLSAgICByZXR1cm4gYWRvcHRDRihDRkhUVFBDb29raWVDb3B5TmFtZShjb29raWUpKTsKLX0K
LQotc3RhdGljIGlubGluZSBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNvb2tpZVBhdGgoQ0ZIVFRQ
Q29va2llUmVmIGNvb2tpZSkKLXsKLSAgICByZXR1cm4gYWRvcHRDRihDRkhUVFBDb29raWVDb3B5
UGF0aChjb29raWUpKTsKLX0KLQotc3RhdGljIGlubGluZSBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IGNvb2tpZVZhbHVlKENGSFRUUENvb2tpZVJlZiBjb29raWUpCi17Ci0gICAgcmV0dXJuIGFkb3B0
Q0YoQ0ZIVFRQQ29va2llQ29weVZhbHVlKGNvb2tpZSkpOwotfQotCi1zdGF0aWMgUmV0YWluUHRy
PENGQXJyYXlSZWY+IGZpbHRlckNvb2tpZXMoQ0ZBcnJheVJlZiB1bmZpbHRlcmVkQ29va2llcykK
LXsKLSAgICBBU1NFUlQodW5maWx0ZXJlZENvb2tpZXMpOwotICAgIENGSW5kZXggY291bnQgPSBD
RkFycmF5R2V0Q291bnQodW5maWx0ZXJlZENvb2tpZXMpOwotICAgIFJldGFpblB0cjxDRk11dGFi
bGVBcnJheVJlZj4gZmlsdGVyZWRDb29raWVzID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJs
ZSgwLCBjb3VudCwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwotICAgIGZvciAoQ0ZJbmRleCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSA9
IChDRkhUVFBDb29raWVSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleCh1bmZpbHRlcmVkQ29va2ll
cywgaSk7Ci0KLSAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzU2MzI4ODM+IENGSFRUUENvb2tp
ZVN0b3JhZ2Ugd291bGQgc3RvcmUgYW4gZW1wdHkgY29va2llLAotICAgICAgICAvLyB3aGljaCB3
b3VsZCBiZSBzZW50IGFzICJDb29raWU6ID0iLiBXZSBoYXZlIGEgd29ya2Fyb3VuZCBpbiBzZXRD
b29raWVzKCkgdG8gcHJldmVudAotICAgICAgICAvLyB0aGF0LCBidXQgd2UgYWxzbyBuZWVkIHRv
IGF2b2lkIHNlbmRpbmcgY29va2llcyB0aGF0IHdlcmUgcHJldmlvdXNseSBzdG9yZWQsIGFuZAot
ICAgICAgICAvLyB0aGVyZSdzIG5vIGhhcm0gdG8gZG9pbmcgdGhpcyBjaGVjayBiZWNhdXNlIHN1
Y2ggYSBjb29raWUgaXMgbmV2ZXIgdmFsaWQuCi0gICAgICAgIGlmICghQ0ZTdHJpbmdHZXRMZW5n
dGgoY29va2llTmFtZShjb29raWUpLmdldCgpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgIGlmIChDRkhUVFBDb29raWVJc0hUVFBPbmx5KGNvb2tpZSkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoZmlsdGVyZWRDb29raWVzLmdl
dCgpLCBjb29raWUpOwotICAgIH0KLSAgICByZXR1cm4gZmlsdGVyZWRDb29raWVzOwotfQotCi1z
dGF0aWMgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNvcHlDb29raWVzRm9yVVJMV2l0aEZpcnN0UGFy
dHlVUkwoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZp
cnN0UGFydHksIGNvbnN0IFVSTCYgdXJsLCBJbmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRlU2Vj
dXJlQ29va2llcykKLXsKLSAgICBib29sIHNlY3VyZSA9IGluY2x1ZGVTZWN1cmVDb29raWVzID09
IEluY2x1ZGVTZWN1cmVDb29raWVzOjpZZXM7Ci0KLSAgICBBU1NFUlQoIXNlY3VyZSB8fCAoc2Vj
dXJlICYmIHVybC5wcm90b2NvbElzKCJodHRwcyIpKSk7Ci0KLSAgICBVTlVTRURfUEFSQU0oZmly
c3RQYXJ0eSk7Ci0gICAgcmV0dXJuIGFkb3B0Q0YoQ0ZIVFRQQ29va2llU3RvcmFnZUNvcHlDb29r
aWVzRm9yVVJMKHNlc3Npb24uY29va2llU3RvcmFnZSgpLmdldCgpLCB1cmwuY3JlYXRlQ0ZVUkwo
KS5nZXQoKSwgc2VjdXJlKSk7Ci19Ci0KLXN0YXRpYyBDRkFycmF5UmVmIGNyZWF0ZUNvb2tpZXMo
Q0ZEaWN0aW9uYXJ5UmVmIGhlYWRlckZpZWxkcywgQ0ZVUkxSZWYgdXJsKQotewotICAgIENGQXJy
YXlSZWYgcGFyc2VkQ29va2llcyA9IENGSFRUUENvb2tpZUNyZWF0ZVdpdGhSZXNwb25zZUhlYWRl
ckZpZWxkcyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBoZWFkZXJGaWVsZHMsIHVybCk7Ci0gICAgaWYg
KCFwYXJzZWRDb29raWVzKQotICAgICAgICBwYXJzZWRDb29raWVzID0gQ0ZBcnJheUNyZWF0ZShr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAwLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKTsKLQotICAg
IHJldHVybiBwYXJzZWRDb29raWVzOwotfQotCi12b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6
c2V0Q29va2llc0Zyb21ET00oY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUlu
Zm8mLCBjb25zdCBVUkwmIHVybCwgT3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIE9wdGlvbmFs
PHVpbnQ2NF90PiBwYWdlSUQsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0Ci17Ci0gICAgVU5V
U0VEX1BBUkFNKGZyYW1lSUQpOwotICAgIFVOVVNFRF9QQVJBTShwYWdlSUQpOwotICAgIC8vIDxy
ZGFyOi8vcHJvYmxlbS81NjMyODgzPiBDRkhUVFBDb29raWVTdG9yYWdlIHN0b3JlcyBhbiBlbXB0
eSBjb29raWUsIHdoaWNoIHdvdWxkIGJlIHNlbnQgYXMgIkNvb2tpZTogPSIuCi0gICAgaWYgKHZh
bHVlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmV0YWluUHRyPENGVVJMUmVm
PiB1cmxDRiA9IHVybC5jcmVhdGVDRlVSTCgpOwotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gZmly
c3RQYXJ0eUZvckNvb2tpZXNDRiA9IGZpcnN0UGFydHkuY3JlYXRlQ0ZVUkwoKTsKLQotICAgIC8v
IDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTMxPiwgPHJkYXI6Ly80
NDA5MDM0PgotICAgIC8vIGNvb2tpZXNXaXRoUmVzcG9uc2VIZWFkZXJGaWVsZHMgZG9lc24ndCBw
YXJzZSBjb29raWVzIHdpdGhvdXQgYSB2YWx1ZQotICAgIFN0cmluZyBjb29raWVTdHJpbmcgPSB2
YWx1ZS5jb250YWlucygnPScpID8gdmFsdWUgOiB2YWx1ZSArICI9IjsKLQotICAgIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gY29va2llU3RyaW5nQ0YgPSBjb29raWVTdHJpbmcuY3JlYXRlQ0ZTdHJp
bmcoKTsKLSAgICBhdXRvIGNvb2tpZVN0cmluZ0NGUHRyID0gY29va2llU3RyaW5nQ0YuZ2V0KCk7
Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaGVhZGVyRmllbGRzQ0YgPSBhZG9wdENG
KENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LAotICAgICAgICAoY29uc3Qg
dm9pZCoqKSZzX3NldENvb2tpZUtleUNGLCAoY29uc3Qgdm9pZCoqKSZjb29raWVTdHJpbmdDRlB0
ciwgMSwKLSAgICAgICAgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURp
Y3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotCi0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IHVu
ZmlsdGVyZWRDb29raWVzID0gYWRvcHRDRihjcmVhdGVDb29raWVzKGhlYWRlckZpZWxkc0NGLmdl
dCgpLCB1cmxDRi5nZXQoKSkpOwotICAgIENGSFRUUENvb2tpZVN0b3JhZ2VTZXRDb29raWVzKGNv
b2tpZVN0b3JhZ2UoKS5nZXQoKSwgZmlsdGVyQ29va2llcyh1bmZpbHRlcmVkQ29va2llcy5nZXQo
KSkuZ2V0KCksIHVybENGLmdldCgpLCBmaXJzdFBhcnR5Rm9yQ29va2llc0NGLmdldCgpKTsKLX0K
LQotc3RhdGljIGJvb2wgY29udGFpbnNTZWN1cmVDb29raWVzKENGQXJyYXlSZWYgY29va2llcykK
LXsKLSAgICBDRkluZGV4IGNvb2tpZUNvdW50ID0gQ0ZBcnJheUdldENvdW50KGNvb2tpZXMpOwot
ICAgIHdoaWxlIChjb29raWVDb3VudC0tKSB7Ci0gICAgICAgIGlmIChDRkhUVFBDb29raWVJc1Nl
Y3VyZShjaGVja2VkX2NmX2Nhc3Q8Q0ZIVFRQQ29va2llUmVmPihDRkFycmF5R2V0VmFsdWVBdElu
ZGV4KGNvb2tpZXMsIGNvb2tpZUNvdW50KSkpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBO
ZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZXNGb3JET00oY29uc3QgVVJMJiBmaXJzdFBhcnR5
LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBVUkwmIHVybCwgT3B0aW9uYWw8dWludDY0X3Q+
IGZyYW1lSUQsIE9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVDb29raWVz
IGluY2x1ZGVTZWN1cmVDb29raWVzKSBjb25zdAotewotICAgIFVOVVNFRF9QQVJBTShmcmFtZUlE
KTsKLSAgICBVTlVTRURfUEFSQU0ocGFnZUlEKTsKLSAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4g
Y29va2llc0NGID0gY29weUNvb2tpZXNGb3JVUkxXaXRoRmlyc3RQYXJ0eVVSTCgqdGhpcywgZmly
c3RQYXJ0eSwgdXJsLCBpbmNsdWRlU2VjdXJlQ29va2llcyk7Ci0KLSAgICBhdXRvIGZpbHRlcmVk
Q29va2llcyA9IGZpbHRlckNvb2tpZXMoY29va2llc0NGLmdldCgpKTsKLQotICAgIGJvb2wgZGlk
QWNjZXNzU2VjdXJlQ29va2llcyA9IGNvbnRhaW5zU2VjdXJlQ29va2llcyhmaWx0ZXJlZENvb2tp
ZXMuZ2V0KCkpOwotCi0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaGVhZGVyQ0YgPSBh
ZG9wdENGKENGSFRUUENvb2tpZUNvcHlSZXF1ZXN0SGVhZGVyRmllbGRzKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIGZpbHRlcmVkQ29va2llcy5nZXQoKSkpOwotICAgIFN0cmluZyBjb29raWVTdHJpbmcg
PSBjaGVja2VkX2NmX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGhlYWRl
ckNGLmdldCgpLCBzX2Nvb2tpZUNGKSk7Ci0gICAgcmV0dXJuIHsgY29va2llU3RyaW5nLCBkaWRB
Y2Nlc3NTZWN1cmVDb29raWVzIH07Ci19Ci0KLXN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgVVJM
JiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBVUkwmIHVybCwgT3B0aW9u
YWw8dWludDY0X3Q+IGZyYW1lSUQsIE9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVT
ZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzKSBjb25zdAotewotICAgIFVOVVNFRF9Q
QVJBTShmcmFtZUlEKTsKLSAgICBVTlVTRURfUEFSQU0ocGFnZUlEKTsKLSAgICBSZXRhaW5QdHI8
Q0ZBcnJheVJlZj4gY29va2llc0NGID0gY29weUNvb2tpZXNGb3JVUkxXaXRoRmlyc3RQYXJ0eVVS
TCgqdGhpcywgZmlyc3RQYXJ0eSwgdXJsLCBpbmNsdWRlU2VjdXJlQ29va2llcyk7Ci0KLSAgICBi
b29sIGRpZEFjY2Vzc1NlY3VyZUNvb2tpZXMgPSBjb250YWluc1NlY3VyZUNvb2tpZXMoY29va2ll
c0NGLmdldCgpKTsKLQotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGhlYWRlckNGID0g
YWRvcHRDRihDRkhUVFBDb29raWVDb3B5UmVxdWVzdEhlYWRlckZpZWxkcyhrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBjb29raWVzQ0YuZ2V0KCkpKTsKLSAgICBTdHJpbmcgY29va2llU3RyaW5nID0gY2hl
Y2tlZF9jZl9jYXN0PENGU3RyaW5nUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShoZWFkZXJDRi5n
ZXQoKSwgc19jb29raWVDRikpOwotICAgIHJldHVybiB7IGNvb2tpZVN0cmluZywgZGlkQWNjZXNz
U2VjdXJlQ29va2llcyB9OwotfQotCi1zdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBOZXR3b3JrU3Rv
cmFnZVNlc3Npb246OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IENvb2tpZVJl
cXVlc3RIZWFkZXJGaWVsZFByb3h5JiBoZWFkZXJGaWVsZFByb3h5KSBjb25zdAotewotICAgIHJl
dHVybiBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShoZWFkZXJGaWVsZFByb3h5LmZpcnN0
UGFydHksIGhlYWRlckZpZWxkUHJveHkuc2FtZVNpdGVJbmZvLCBoZWFkZXJGaWVsZFByb3h5LnVy
bCwgaGVhZGVyRmllbGRQcm94eS5mcmFtZUlELCBoZWFkZXJGaWVsZFByb3h5LnBhZ2VJRCwgaGVh
ZGVyRmllbGRQcm94eS5pbmNsdWRlU2VjdXJlQ29va2llcyk7Ci19Ci0KLWJvb2wgTmV0d29ya1N0
b3JhZ2VTZXNzaW9uOjpjb29raWVzRW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgQ0ZIVFRQQ29va2ll
U3RvcmFnZUFjY2VwdFBvbGljeSBwb2xpY3kgPSBDRkhUVFBDb29raWVTdG9yYWdlR2V0Q29va2ll
QWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2UoKS5nZXQoKSk7Ci0gICAgcmV0dXJuIHBvbGljeSA9
PSBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21h
aW4gfHwgcG9saWN5ID09IENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lFeGNsdXNpdmVs
eUZyb21NYWluRG9jdW1lbnREb21haW4gfHwgcG9saWN5ID09IENGSFRUUENvb2tpZVN0b3JhZ2VB
Y2NlcHRQb2xpY3lBbHdheXM7Ci19Ci0KLWJvb2wgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRS
YXdDb29raWVzKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29u
c3QgVVJMJiB1cmwsIE9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBPcHRpb25hbDx1aW50NjRf
dD4gcGFnZUlELCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykgY29uc3QKLXsKLSAgICBVTlVT
RURfUEFSQU0oZnJhbWVJRCk7Ci0gICAgVU5VU0VEX1BBUkFNKHBhZ2VJRCk7Ci0gICAgcmF3Q29v
a2llcy5jbGVhcigpOwotCi0gICAgYXV0byBpbmNsdWRlU2VjdXJlQ29va2llcyA9IHVybC5wcm90
b2NvbElzKCJodHRwcyIpID8gSW5jbHVkZVNlY3VyZUNvb2tpZXM6OlllcyA6IEluY2x1ZGVTZWN1
cmVDb29raWVzOjpObzsKLQotICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBjb29raWVzQ0YgPSBj
b3B5Q29va2llc0ZvclVSTFdpdGhGaXJzdFBhcnR5VVJMKCp0aGlzLCBmaXJzdFBhcnR5LCB1cmws
IGluY2x1ZGVTZWN1cmVDb29raWVzKTsKLQotICAgIENGSW5kZXggY291bnQgPSBDRkFycmF5R2V0
Q291bnQoY29va2llc0NGLmdldCgpKTsKLSAgICByYXdDb29raWVzLnJlc2VydmVDYXBhY2l0eShj
b3VudCk7Ci0KLSAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAg
ICAgIENGSFRUUENvb2tpZVJlZiBjZkNvb2tpZSA9IGNoZWNrZWRfY2ZfY2FzdDxDRkhUVFBDb29r
aWVSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoY29va2llc0NGLmdldCgpLCBpKSk7Ci0gICAg
ICAgIENvb2tpZSBjb29raWU7Ci0gICAgICAgIGNvb2tpZS5uYW1lID0gY29va2llTmFtZShjZkNv
b2tpZSkuZ2V0KCk7Ci0gICAgICAgIGNvb2tpZS52YWx1ZSA9IGNvb2tpZVZhbHVlKGNmQ29va2ll
KS5nZXQoKTsKLSAgICAgICAgY29va2llLmRvbWFpbiA9IGNvb2tpZURvbWFpbihjZkNvb2tpZSku
Z2V0KCk7Ci0gICAgICAgIGNvb2tpZS5wYXRoID0gY29va2llUGF0aChjZkNvb2tpZSkuZ2V0KCk7
Ci0gICAgICAgIGNvb2tpZS5jcmVhdGVkID0gY29va2llQ3JlYXRlZFRpbWUoY2ZDb29raWUpOwot
ICAgICAgICBjb29raWUuZXhwaXJlcyA9IGNvb2tpZUV4cGlyYXRpb25UaW1lKGNmQ29va2llKTsK
LSAgICAgICAgY29va2llLmh0dHBPbmx5ID0gQ0ZIVFRQQ29va2llSXNIVFRQT25seShjZkNvb2tp
ZSk7Ci0gICAgICAgIGNvb2tpZS5zZWN1cmUgPSBDRkhUVFBDb29raWVJc1NlY3VyZShjZkNvb2tp
ZSk7Ci0gICAgICAgIGNvb2tpZS5zZXNzaW9uID0gZmFsc2U7IC8vIEZJWE1FOiBOZWVkIEFQSSBm
b3IgaWYgYSBjb29raWUgaXMgYSBzZXNzaW9uIGNvb2tpZS4KLSAgICAgICAgcmF3Q29va2llcy51
bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShjb29raWUpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZShjb25zdCBV
UkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAotewotICAgIFJldGFpblB0cjxDRkhU
VFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gdGhpcy0+Y29va2llU3RvcmFnZSgp
OwotCi0gICAgUmV0YWluUHRyPENGVVJMUmVmPiB1cmxDRiA9IHVybC5jcmVhdGVDRlVSTCgpOwot
Ci0gICAgYm9vbCBzZW5kU2VjdXJlQ29va2llcyA9IHVybC5wcm90b2NvbElzKCJodHRwcyIpOwot
ICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBjb29raWVzQ0YgPSBhZG9wdENGKENGSFRUUENvb2tp
ZVN0b3JhZ2VDb3B5Q29va2llc0ZvclVSTChjb29raWVTdG9yYWdlLmdldCgpLCB1cmxDRi5nZXQo
KSwgc2VuZFNlY3VyZUNvb2tpZXMpKTsKLQotICAgIENGSW5kZXggY291bnQgPSBDRkFycmF5R2V0
Q291bnQoY29va2llc0NGLmdldCgpKTsKLSAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKSB7Ci0gICAgICAgIENGSFRUUENvb2tpZVJlZiBjb29raWUgPSBjaGVja2VkX2NmX2Nh
c3Q8Q0ZIVFRQQ29va2llUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGNvb2tpZXNDRi5nZXQo
KSwgaSkpOwotICAgICAgICBpZiAoU3RyaW5nKGNvb2tpZU5hbWUoY29va2llKS5nZXQoKSkgPT0g
bmFtZSkgewotICAgICAgICAgICAgQ0ZIVFRQQ29va2llU3RvcmFnZURlbGV0ZUNvb2tpZShjb29r
aWVTdG9yYWdlLmdldCgpLCBjb29raWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLXZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRIb3N0bmFtZXNXaXRo
Q29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKLXsKLSAgICBSZXRhaW5QdHI8Q0ZB
cnJheVJlZj4gY29va2llc0NGID0gYWRvcHRDRihDRkhUVFBDb29raWVTdG9yYWdlQ29weUNvb2tp
ZXMoY29va2llU3RvcmFnZSgpLmdldCgpKSk7Ci0gICAgaWYgKCFjb29raWVzQ0YpCi0gICAgICAg
IHJldHVybjsKLQotICAgIENGSW5kZXggY291bnQgPSBDRkFycmF5R2V0Q291bnQoY29va2llc0NG
LmdldCgpKTsKLSAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAg
ICAgIENGSFRUUENvb2tpZVJlZiBjb29raWUgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZIVFRQQ29va2ll
UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGNvb2tpZXNDRi5nZXQoKSwgaSkpOwotICAgICAg
ICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGRvbWFpbiA9IGNvb2tpZURvbWFpbihjb29raWUpOwot
ICAgICAgICBob3N0bmFtZXMuYWRkKGRvbWFpbi5nZXQoKSk7Ci0gICAgfQotfQotCi12b2lkIE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcygpCi17Ci0gICAgQ0ZIVFRQQ29v
a2llU3RvcmFnZURlbGV0ZUFsbENvb2tpZXMoY29va2llU3RvcmFnZSgpLmdldCgpKTsKLX0KLQot
dm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMoY29u
c3QgVmVjdG9yPFN0cmluZz4mIGhvc3RuYW1lcykKLXsKLX0KLQotdm9pZCBOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKFdhbGxUaW1lKQotewotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQ0ZVUkxDT05ORUNUSU9O
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9OZXR3b3JrU3RvcmFn
ZVNlc3Npb25DRk5ldFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldFdpbi5jcHAJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9OZXR3b3JrU3RvcmFn
ZVNlc3Npb25DRk5ldFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uLmgiCisKKyNpbmNsdWRlICJDb29raWUuaCIKKyNpbmNsdWRlICJDb29raWVSZXF1ZXN0
SGVhZGVyRmllbGRQcm94eS5oIgorI2luY2x1ZGUgIkNvb2tpZXNTdHJhdGVneS5oIgorI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGSFRUUENvb2tpZXNQ
cml2Lmg+CisjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKyNpbmNs
dWRlIDxwYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgorI2luY2x1ZGUgPHd0Zi9Qcm9jZXNzSUQuaD4KKyNpbmNsdWRlIDx3dGYvUHJvY2Vzc1ByaXZp
bGVnZS5oPgorI2luY2x1ZGUgPHd0Zi9Tb2Z0TGlua2luZy5oPgorI2luY2x1ZGUgPHd0Zi9VUkwu
aD4KKyNpbmNsdWRlIDx3dGYvY2YvVHlwZUNhc3RzQ0YuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworZW51bSB7CisgICAgQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGlj
eUV4Y2x1c2l2ZWx5RnJvbU1haW5Eb2N1bWVudERvbWFpbiA9IDMKK307CisKK25hbWVzcGFjZSBX
VEYgeworICAgIAorI2RlZmluZSBERUNMQVJFX0NGX1RZUEVfVFJBSVQoQ2xhc3NOYW1lKSBcCit0
ZW1wbGF0ZSA8PiBcCitzdHJ1Y3QgQ0ZUeXBlVHJhaXQ8Q2xhc3NOYW1lIyNSZWY+IHsgXAorc3Rh
dGljIGlubGluZSBDRlR5cGVJRCB0eXBlSUQoKSB7IHJldHVybiBDbGFzc05hbWUjI0dldFR5cGVJ
RCgpOyB9IFwKK307CisgICAgCitERUNMQVJFX0NGX1RZUEVfVFJBSVQoQ0ZIVFRQQ29va2llKTsK
KyAgICAKKyN1bmRlZiBERUNMQVJFX0NGX1RZUEVfVFJBSVQKK30gLy8gbmFtZXNwYWNlIFdURgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NGVVJMU3RvcmFnZVNlc3Npb25SZWYgY3JlYXRlUHJp
dmF0ZVN0b3JhZ2VTZXNzaW9uKENGU3RyaW5nUmVmIGlkZW50aWZpZXIsIENGVVJMU3RvcmFnZVNl
c3Npb25SZWYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKQoreworICAgIGNvbnN0IHZvaWQqIHNlc3Np
b25Qcm9wZXJ0eUtleXNbXSA9IHsgX2tDRlVSTFN0b3JhZ2VTZXNzaW9uSXNQcml2YXRlIH07Cisg
ICAgY29uc3Qgdm9pZCogc2Vzc2lvblByb3BlcnR5VmFsdWVzW10gPSB7IGtDRkJvb2xlYW5UcnVl
IH07CisgICAgQ0ZEaWN0aW9uYXJ5UmVmIHNlc3Npb25Qcm9wZXJ0aWVzID0gQ0ZEaWN0aW9uYXJ5
Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIHNlc3Npb25Qcm9wZXJ0eUtleXMsIHNlc3Npb25Q
cm9wZXJ0eVZhbHVlcywgc2l6ZW9mKHNlc3Npb25Qcm9wZXJ0eUtleXMpIC8gc2l6ZW9mKCpzZXNz
aW9uUHJvcGVydHlLZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlw
ZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7CisgICAgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBz
dG9yYWdlU2Vzc2lvbiA9IF9DRlVSTFN0b3JhZ2VTZXNzaW9uQ3JlYXRlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIGlkZW50aWZpZXIsIHNlc3Npb25Qcm9wZXJ0aWVzKTsKKyAgICAKKyAgICAvLyBUaGUg
cHJpdmF0ZSBzdG9yYWdlIHNlc3Npb24gc2hvdWxkIGhhdmUgdGhlIHNhbWUgcHJvcGVydGllcyBh
cyB0aGUgZGVmYXVsdCBzdG9yYWdlIHNlc3Npb24sCisgICAgLy8gd2l0aCB0aGUgZXhjZXB0aW9u
IHRoYXQgaXQgc2hvdWxkIGJlIGluLW1lbW9yeSBvbmx5IHN0b3JhZ2UuCisgICAgQ0ZVUkxDYWNo
ZVJlZiBjYWNoZSA9IF9DRlVSTFN0b3JhZ2VTZXNzaW9uQ29weUNhY2hlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIHN0b3JhZ2VTZXNzaW9uKTsKKyAgICBDRlVSTENhY2hlU2V0RGlza0NhcGFjaXR5KGNh
Y2hlLCAwKTsKKyAgICBDRlVSTENhY2hlUmVmIGRlZmF1bHRDYWNoZTsKKyAgICBpZiAoZGVmYXVs
dFN0b3JhZ2VTZXNzaW9uKQorICAgICAgICBkZWZhdWx0Q2FjaGUgPSBfQ0ZVUkxTdG9yYWdlU2Vz
c2lvbkNvcHlDYWNoZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBkZWZhdWx0U3RvcmFnZVNlc3Npb24p
OworICAgIGVsc2UKKyAgICAgICAgZGVmYXVsdENhY2hlID0gQ0ZVUkxDYWNoZUNvcHlTaGFyZWRV
UkxDYWNoZSgpOworICAgIENGVVJMQ2FjaGVTZXRNZW1vcnlDYXBhY2l0eShjYWNoZSwgQ0ZVUkxD
YWNoZU1lbW9yeUNhcGFjaXR5KGRlZmF1bHRDYWNoZSkpOworICAgIENGUmVsZWFzZShkZWZhdWx0
Q2FjaGUpOworICAgIENGUmVsZWFzZShjYWNoZSk7CisgICAgCisgICAgQ0ZIVFRQQ29va2llU3Rv
cmFnZVJlZiBjb29raWVTdG9yYWdlID0gX0NGVVJMU3RvcmFnZVNlc3Npb25Db3B5Q29va2llU3Rv
cmFnZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzdG9yYWdlU2Vzc2lvbik7CisgICAgQ0ZIVFRQQ29v
a2llU3RvcmFnZVJlZiBkZWZhdWx0Q29va2llU3RvcmFnZTsKKyAgICBpZiAoZGVmYXVsdFN0b3Jh
Z2VTZXNzaW9uKQorICAgICAgICBkZWZhdWx0Q29va2llU3RvcmFnZSA9IF9DRlVSTFN0b3JhZ2VT
ZXNzaW9uQ29weUNvb2tpZVN0b3JhZ2Uoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZGVmYXVsdFN0b3Jh
Z2VTZXNzaW9uKTsKKyAgICBlbHNlCisgICAgICAgIGRlZmF1bHRDb29raWVTdG9yYWdlID0gX0NG
SFRUUENvb2tpZVN0b3JhZ2VHZXREZWZhdWx0KGtDRkFsbG9jYXRvckRlZmF1bHQpOworICAgIENG
SFRUUENvb2tpZVN0b3JhZ2VTZXRDb29raWVBY2NlcHRQb2xpY3koY29va2llU3RvcmFnZSwgQ0ZI
VFRQQ29va2llU3RvcmFnZUdldENvb2tpZUFjY2VwdFBvbGljeShkZWZhdWx0Q29va2llU3RvcmFn
ZSkpOworICAgIGlmIChkZWZhdWx0U3RvcmFnZVNlc3Npb24pCisgICAgICAgIENGUmVsZWFzZShk
ZWZhdWx0Q29va2llU3RvcmFnZSk7CisgICAgQ0ZSZWxlYXNlKGNvb2tpZVN0b3JhZ2UpOworICAg
IAorICAgIHJldHVybiBzdG9yYWdlU2Vzc2lvbjsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZVNl
c3Npb246OnNldENvb2tpZXMoY29uc3QgVmVjdG9yPENvb2tpZT4mLCBjb25zdCBVUkwmLCBjb25z
dCBVUkwmKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4gPGh0dHBzOi8vd2Via2l0
Lm9yZy9iLzE1NjI5OD4KK30KKworc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIHNfc2V0Q29va2ll
S2V5Q0YgPSBDRlNUUigiU2V0LUNvb2tpZSIpOworc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIHNf
Y29va2llQ0YgPSBDRlNUUigiQ29va2llIik7CitzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYgc19j
cmVhdGVkQ0YgPSBDRlNUUigiQ3JlYXRlZCIpOworCitzdGF0aWMgaW5saW5lIFJldGFpblB0cjxD
RlN0cmluZ1JlZj4gY29va2llRG9tYWluKENGSFRUUENvb2tpZVJlZiBjb29raWUpCit7CisgICAg
cmV0dXJuIGFkb3B0Q0YoQ0ZIVFRQQ29va2llQ29weURvbWFpbihjb29raWUpKTsKK30KKworc3Rh
dGljIGRvdWJsZSBjYW5vbmljYWxDb29raWVUaW1lKGRvdWJsZSB0aW1lKQoreworICAgIGlmICgh
dGltZSkKKyAgICAgICAgcmV0dXJuIHRpbWU7CisgICAgCisgICAgcmV0dXJuICh0aW1lICsga0NG
QWJzb2x1dGVUaW1lSW50ZXJ2YWxTaW5jZTE5NzApICogMTAwMDsKK30KKworc3RhdGljIGRvdWJs
ZSBjb29raWVDcmVhdGVkVGltZShDRkhUVFBDb29raWVSZWYgY29va2llKQoreworICAgIFJldGFp
blB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3BzID0gYWRvcHRDRihDRkhUVFBDb29raWVDb3B5UHJv
cGVydGllcyhjb29raWUpKTsKKyAgICBhdXRvIHZhbHVlID0gQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUo
cHJvcHMuZ2V0KCksIHNfY3JlYXRlZENGKTsKKyAgICAKKyAgICBhdXRvIGFzTnVtYmVyID0gZHlu
YW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPih2YWx1ZSk7CisgICAgaWYgKGFzTnVtYmVyKSB7Cisg
ICAgICAgIGRvdWJsZSBhc0RvdWJsZTsKKyAgICAgICAgaWYgKENGTnVtYmVyR2V0VmFsdWUoYXNO
dW1iZXIsIGtDRk51bWJlckZsb2F0NjRUeXBlLCAmYXNEb3VibGUpKQorICAgICAgICAgICAgcmV0
dXJuIGNhbm9uaWNhbENvb2tpZVRpbWUoYXNEb3VibGUpOworICAgICAgICByZXR1cm4gMC4wOwor
ICAgIH0KKyAgICAKKyAgICBhdXRvIGFzU3RyaW5nID0gZHluYW1pY19jZl9jYXN0PENGU3RyaW5n
UmVmPih2YWx1ZSk7CisgICAgaWYgKGFzU3RyaW5nKQorICAgICAgICByZXR1cm4gY2Fub25pY2Fs
Q29va2llVGltZShDRlN0cmluZ0dldERvdWJsZVZhbHVlKGFzU3RyaW5nKSk7CisgICAgCisgICAg
cmV0dXJuIDAuMDsKK30KKworc3RhdGljIGlubGluZSBDRkFic29sdXRlVGltZSBjb29raWVFeHBp
cmF0aW9uVGltZShDRkhUVFBDb29raWVSZWYgY29va2llKQoreworICAgIHJldHVybiBjYW5vbmlj
YWxDb29raWVUaW1lKENGSFRUUENvb2tpZUdldEV4cGlyYXRpb25UaW1lKGNvb2tpZSkpOworfQor
CitzdGF0aWMgaW5saW5lIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY29va2llTmFtZShDRkhUVFBD
b29raWVSZWYgY29va2llKQoreworICAgIHJldHVybiBhZG9wdENGKENGSFRUUENvb2tpZUNvcHlO
YW1lKGNvb2tpZSkpOworfQorCitzdGF0aWMgaW5saW5lIFJldGFpblB0cjxDRlN0cmluZ1JlZj4g
Y29va2llUGF0aChDRkhUVFBDb29raWVSZWYgY29va2llKQoreworICAgIHJldHVybiBhZG9wdENG
KENGSFRUUENvb2tpZUNvcHlQYXRoKGNvb2tpZSkpOworfQorCitzdGF0aWMgaW5saW5lIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gY29va2llVmFsdWUoQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSkKK3sK
KyAgICByZXR1cm4gYWRvcHRDRihDRkhUVFBDb29raWVDb3B5VmFsdWUoY29va2llKSk7Cit9CisK
K3N0YXRpYyBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gZmlsdGVyQ29va2llcyhDRkFycmF5UmVmIHVu
ZmlsdGVyZWRDb29raWVzKQoreworICAgIEFTU0VSVCh1bmZpbHRlcmVkQ29va2llcyk7CisgICAg
Q0ZJbmRleCBjb3VudCA9IENGQXJyYXlHZXRDb3VudCh1bmZpbHRlcmVkQ29va2llcyk7CisgICAg
UmV0YWluUHRyPENGTXV0YWJsZUFycmF5UmVmPiBmaWx0ZXJlZENvb2tpZXMgPSBhZG9wdENGKENG
QXJyYXlDcmVhdGVNdXRhYmxlKDAsIGNvdW50LCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Cisg
ICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBDRkhUVFBD
b29raWVSZWYgY29va2llID0gKENGSFRUUENvb2tpZVJlZilDRkFycmF5R2V0VmFsdWVBdEluZGV4
KHVuZmlsdGVyZWRDb29raWVzLCBpKTsKKyAgICAgICAgCisgICAgICAgIC8vIDxyZGFyOi8vcHJv
YmxlbS81NjMyODgzPiBDRkhUVFBDb29raWVTdG9yYWdlIHdvdWxkIHN0b3JlIGFuIGVtcHR5IGNv
b2tpZSwKKyAgICAgICAgLy8gd2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29va2llOiA9Ii4gV2Ug
aGF2ZSBhIHdvcmthcm91bmQgaW4gc2V0Q29va2llcygpIHRvIHByZXZlbnQKKyAgICAgICAgLy8g
dGhhdCwgYnV0IHdlIGFsc28gbmVlZCB0byBhdm9pZCBzZW5kaW5nIGNvb2tpZXMgdGhhdCB3ZXJl
IHByZXZpb3VzbHkgc3RvcmVkLCBhbmQKKyAgICAgICAgLy8gdGhlcmUncyBubyBoYXJtIHRvIGRv
aW5nIHRoaXMgY2hlY2sgYmVjYXVzZSBzdWNoIGEgY29va2llIGlzIG5ldmVyIHZhbGlkLgorICAg
ICAgICBpZiAoIUNGU3RyaW5nR2V0TGVuZ3RoKGNvb2tpZU5hbWUoY29va2llKS5nZXQoKSkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChDRkhUVFBDb29raWVJ
c0hUVFBPbmx5KGNvb2tpZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAg
ICAgIENGQXJyYXlBcHBlbmRWYWx1ZShmaWx0ZXJlZENvb2tpZXMuZ2V0KCksIGNvb2tpZSk7Cisg
ICAgfQorICAgIHJldHVybiBmaWx0ZXJlZENvb2tpZXM7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8
Q0ZBcnJheVJlZj4gY29weUNvb2tpZXNGb3JVUkxXaXRoRmlyc3RQYXJ0eVVSTChjb25zdCBOZXR3
b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3Qg
VVJMJiB1cmwsIEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzKQorewor
ICAgIGJvb2wgc2VjdXJlID0gaW5jbHVkZVNlY3VyZUNvb2tpZXMgPT0gSW5jbHVkZVNlY3VyZUNv
b2tpZXM6OlllczsKKyAgICAKKyAgICBBU1NFUlQoIXNlY3VyZSB8fCAoc2VjdXJlICYmIHVybC5w
cm90b2NvbElzKCJodHRwcyIpKSk7CisgICAgCisgICAgVU5VU0VEX1BBUkFNKGZpcnN0UGFydHkp
OworICAgIHJldHVybiBhZG9wdENGKENGSFRUUENvb2tpZVN0b3JhZ2VDb3B5Q29va2llc0ZvclVS
TChzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKS5nZXQoKSwgdXJsLmNyZWF0ZUNGVVJMKCkuZ2V0KCks
IHNlY3VyZSkpOworfQorCitzdGF0aWMgQ0ZBcnJheVJlZiBjcmVhdGVDb29raWVzKENGRGljdGlv
bmFyeVJlZiBoZWFkZXJGaWVsZHMsIENGVVJMUmVmIHVybCkKK3sKKyAgICBDRkFycmF5UmVmIHBh
cnNlZENvb2tpZXMgPSBDRkhUVFBDb29raWVDcmVhdGVXaXRoUmVzcG9uc2VIZWFkZXJGaWVsZHMo
a0NGQWxsb2NhdG9yRGVmYXVsdCwgaGVhZGVyRmllbGRzLCB1cmwpOworICAgIGlmICghcGFyc2Vk
Q29va2llcykKKyAgICAgICAgcGFyc2VkQ29va2llcyA9IENGQXJyYXlDcmVhdGUoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgMCwgMCwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcyk7CisgICAgCisgICAgcmV0
dXJuIHBhcnNlZENvb2tpZXM7Cit9CisKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRD
b29raWVzRnJvbURPTShjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYs
IGNvbnN0IFVSTCYgdXJsLCBPcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgT3B0aW9uYWw8dWlu
dDY0X3Q+IHBhZ2VJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKK3sKKyAgICBVTlVTRURf
UEFSQU0oZnJhbWVJRCk7CisgICAgVU5VU0VEX1BBUkFNKHBhZ2VJRCk7CisgICAgLy8gPHJkYXI6
Ly9wcm9ibGVtLzU2MzI4ODM+IENGSFRUUENvb2tpZVN0b3JhZ2Ugc3RvcmVzIGFuIGVtcHR5IGNv
b2tpZSwgd2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29va2llOiA9Ii4KKyAgICBpZiAodmFsdWUu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUmV0YWluUHRyPENGVVJMUmVm
PiB1cmxDRiA9IHVybC5jcmVhdGVDRlVSTCgpOworICAgIFJldGFpblB0cjxDRlVSTFJlZj4gZmly
c3RQYXJ0eUZvckNvb2tpZXNDRiA9IGZpcnN0UGFydHkuY3JlYXRlQ0ZVUkwoKTsKKyAgICAKKyAg
ICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUzMT4sIDxyZGFy
Oi8vNDQwOTAzND4KKyAgICAvLyBjb29raWVzV2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzIGRvZXNu
J3QgcGFyc2UgY29va2llcyB3aXRob3V0IGEgdmFsdWUKKyAgICBTdHJpbmcgY29va2llU3RyaW5n
ID0gdmFsdWUuY29udGFpbnMoJz0nKSA/IHZhbHVlIDogdmFsdWUgKyAiPSI7CisgICAgCisgICAg
UmV0YWluUHRyPENGU3RyaW5nUmVmPiBjb29raWVTdHJpbmdDRiA9IGNvb2tpZVN0cmluZy5jcmVh
dGVDRlN0cmluZygpOworICAgIGF1dG8gY29va2llU3RyaW5nQ0ZQdHIgPSBjb29raWVTdHJpbmdD
Ri5nZXQoKTsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBoZWFkZXJGaWVsZHNDRiA9
IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsCisgICAgICAg
IChjb25zdCB2b2lkKiopJnNfc2V0Q29va2llS2V5Q0YsIChjb25zdCB2b2lkKiopJmNvb2tpZVN0
cmluZ0NGUHRyLCAxLAorICAgICAgICAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZr
Q0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgCisgICAgUmV0YWluUHRyPENG
QXJyYXlSZWY+IHVuZmlsdGVyZWRDb29raWVzID0gYWRvcHRDRihjcmVhdGVDb29raWVzKGhlYWRl
ckZpZWxkc0NGLmdldCgpLCB1cmxDRi5nZXQoKSkpOworICAgIENGSFRUUENvb2tpZVN0b3JhZ2VT
ZXRDb29raWVzKGNvb2tpZVN0b3JhZ2UoKS5nZXQoKSwgZmlsdGVyQ29va2llcyh1bmZpbHRlcmVk
Q29va2llcy5nZXQoKSkuZ2V0KCksIHVybENGLmdldCgpLCBmaXJzdFBhcnR5Rm9yQ29va2llc0NG
LmdldCgpKTsKK30KKworc3RhdGljIGJvb2wgY29udGFpbnNTZWN1cmVDb29raWVzKENGQXJyYXlS
ZWYgY29va2llcykKK3sKKyAgICBDRkluZGV4IGNvb2tpZUNvdW50ID0gQ0ZBcnJheUdldENvdW50
KGNvb2tpZXMpOworICAgIHdoaWxlIChjb29raWVDb3VudC0tKSB7CisgICAgICAgIGlmIChDRkhU
VFBDb29raWVJc1NlY3VyZShjaGVja2VkX2NmX2Nhc3Q8Q0ZIVFRQQ29va2llUmVmPihDRkFycmF5
R2V0VmFsdWVBdEluZGV4KGNvb2tpZXMsIGNvb2tpZUNvdW50KSkpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RkOjpwYWly
PFN0cmluZywgYm9vbD4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVzRm9yRE9NKGNvbnN0
IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29uc3QgVVJMJiB1cmwsIE9w
dGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBPcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNs
dWRlU2VjdXJlQ29va2llcyBpbmNsdWRlU2VjdXJlQ29va2llcykgY29uc3QKK3sKKyAgICBVTlVT
RURfUEFSQU0oZnJhbWVJRCk7CisgICAgVU5VU0VEX1BBUkFNKHBhZ2VJRCk7CisgICAgUmV0YWlu
UHRyPENGQXJyYXlSZWY+IGNvb2tpZXNDRiA9IGNvcHlDb29raWVzRm9yVVJMV2l0aEZpcnN0UGFy
dHlVUkwoKnRoaXMsIGZpcnN0UGFydHksIHVybCwgaW5jbHVkZVNlY3VyZUNvb2tpZXMpOworICAg
IAorICAgIGF1dG8gZmlsdGVyZWRDb29raWVzID0gZmlsdGVyQ29va2llcyhjb29raWVzQ0YuZ2V0
KCkpOworICAgIAorICAgIGJvb2wgZGlkQWNjZXNzU2VjdXJlQ29va2llcyA9IGNvbnRhaW5zU2Vj
dXJlQ29va2llcyhmaWx0ZXJlZENvb2tpZXMuZ2V0KCkpOworICAgIAorICAgIFJldGFpblB0cjxD
RkRpY3Rpb25hcnlSZWY+IGhlYWRlckNGID0gYWRvcHRDRihDRkhUVFBDb29raWVDb3B5UmVxdWVz
dEhlYWRlckZpZWxkcyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBmaWx0ZXJlZENvb2tpZXMuZ2V0KCkp
KTsKKyAgICBTdHJpbmcgY29va2llU3RyaW5nID0gY2hlY2tlZF9jZl9jYXN0PENGU3RyaW5nUmVm
PihDRkRpY3Rpb25hcnlHZXRWYWx1ZShoZWFkZXJDRi5nZXQoKSwgc19jb29raWVDRikpOworICAg
IHJldHVybiB7IGNvb2tpZVN0cmluZywgZGlkQWNjZXNzU2VjdXJlQ29va2llcyB9OworfQorCitz
dGQ6OnBhaXI8U3RyaW5nLCBib29sPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZVJlcXVl
c3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJ
bmZvJiwgY29uc3QgVVJMJiB1cmwsIE9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBPcHRpb25h
bDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRlU2VjdXJlQ29va2llcyBpbmNsdWRlU2VjdXJlQ29v
a2llcykgY29uc3QKK3sKKyAgICBVTlVTRURfUEFSQU0oZnJhbWVJRCk7CisgICAgVU5VU0VEX1BB
UkFNKHBhZ2VJRCk7CisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNvb2tpZXNDRiA9IGNvcHlD
b29raWVzRm9yVVJMV2l0aEZpcnN0UGFydHlVUkwoKnRoaXMsIGZpcnN0UGFydHksIHVybCwgaW5j
bHVkZVNlY3VyZUNvb2tpZXMpOworICAgIAorICAgIGJvb2wgZGlkQWNjZXNzU2VjdXJlQ29va2ll
cyA9IGNvbnRhaW5zU2VjdXJlQ29va2llcyhjb29raWVzQ0YuZ2V0KCkpOworICAgIAorICAgIFJl
dGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGhlYWRlckNGID0gYWRvcHRDRihDRkhUVFBDb29raWVD
b3B5UmVxdWVzdEhlYWRlckZpZWxkcyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb29raWVzQ0YuZ2V0
KCkpKTsKKyAgICBTdHJpbmcgY29va2llU3RyaW5nID0gY2hlY2tlZF9jZl9jYXN0PENGU3RyaW5n
UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShoZWFkZXJDRi5nZXQoKSwgc19jb29raWVDRikpOwor
ICAgIHJldHVybiB7IGNvb2tpZVN0cmluZywgZGlkQWNjZXNzU2VjdXJlQ29va2llcyB9OworfQor
CitzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZVJl
cXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IENvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFByb3h5
JiBoZWFkZXJGaWVsZFByb3h5KSBjb25zdAoreworICAgIHJldHVybiBjb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZShoZWFkZXJGaWVsZFByb3h5LmZpcnN0UGFydHksIGhlYWRlckZpZWxkUHJv
eHkuc2FtZVNpdGVJbmZvLCBoZWFkZXJGaWVsZFByb3h5LnVybCwgaGVhZGVyRmllbGRQcm94eS5m
cmFtZUlELCBoZWFkZXJGaWVsZFByb3h5LnBhZ2VJRCwgaGVhZGVyRmllbGRQcm94eS5pbmNsdWRl
U2VjdXJlQ29va2llcyk7Cit9CisKK2Jvb2wgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVz
RW5hYmxlZCgpIGNvbnN0Cit7CisgICAgQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeSBw
b2xpY3kgPSBDRkhUVFBDb29raWVTdG9yYWdlR2V0Q29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0
b3JhZ2UoKS5nZXQoKSk7CisgICAgcmV0dXJuIHBvbGljeSA9PSBDRkhUVFBDb29raWVTdG9yYWdl
QWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW4gfHwgcG9saWN5ID09IENGSFRU
UENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lFeGNsdXNpdmVseUZyb21NYWluRG9jdW1lbnREb21h
aW4gfHwgcG9saWN5ID09IENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lBbHdheXM7Cit9
CisKK2Jvb2wgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRSYXdDb29raWVzKGNvbnN0IFVSTCYg
Zmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29uc3QgVVJMJiB1cmwsIE9wdGlvbmFs
PHVpbnQ2NF90PiBmcmFtZUlELCBPcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBWZWN0b3I8Q29v
a2llPiYgcmF3Q29va2llcykgY29uc3QKK3sKKyAgICBVTlVTRURfUEFSQU0oZnJhbWVJRCk7Cisg
ICAgVU5VU0VEX1BBUkFNKHBhZ2VJRCk7CisgICAgcmF3Q29va2llcy5jbGVhcigpOworICAgIAor
ICAgIGF1dG8gaW5jbHVkZVNlY3VyZUNvb2tpZXMgPSB1cmwucHJvdG9jb2xJcygiaHR0cHMiKSA/
IEluY2x1ZGVTZWN1cmVDb29raWVzOjpZZXMgOiBJbmNsdWRlU2VjdXJlQ29va2llczo6Tm87Cisg
ICAgCisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNvb2tpZXNDRiA9IGNvcHlDb29raWVzRm9y
VVJMV2l0aEZpcnN0UGFydHlVUkwoKnRoaXMsIGZpcnN0UGFydHksIHVybCwgaW5jbHVkZVNlY3Vy
ZUNvb2tpZXMpOworICAgIAorICAgIENGSW5kZXggY291bnQgPSBDRkFycmF5R2V0Q291bnQoY29v
a2llc0NGLmdldCgpKTsKKyAgICByYXdDb29raWVzLnJlc2VydmVDYXBhY2l0eShjb3VudCk7Cisg
ICAgCisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICBD
RkhUVFBDb29raWVSZWYgY2ZDb29raWUgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZIVFRQQ29va2llUmVm
PihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGNvb2tpZXNDRi5nZXQoKSwgaSkpOworICAgICAgICBD
b29raWUgY29va2llOworICAgICAgICBjb29raWUubmFtZSA9IGNvb2tpZU5hbWUoY2ZDb29raWUp
LmdldCgpOworICAgICAgICBjb29raWUudmFsdWUgPSBjb29raWVWYWx1ZShjZkNvb2tpZSkuZ2V0
KCk7CisgICAgICAgIGNvb2tpZS5kb21haW4gPSBjb29raWVEb21haW4oY2ZDb29raWUpLmdldCgp
OworICAgICAgICBjb29raWUucGF0aCA9IGNvb2tpZVBhdGgoY2ZDb29raWUpLmdldCgpOworICAg
ICAgICBjb29raWUuY3JlYXRlZCA9IGNvb2tpZUNyZWF0ZWRUaW1lKGNmQ29va2llKTsKKyAgICAg
ICAgY29va2llLmV4cGlyZXMgPSBjb29raWVFeHBpcmF0aW9uVGltZShjZkNvb2tpZSk7CisgICAg
ICAgIGNvb2tpZS5odHRwT25seSA9IENGSFRUUENvb2tpZUlzSFRUUE9ubHkoY2ZDb29raWUpOwor
ICAgICAgICBjb29raWUuc2VjdXJlID0gQ0ZIVFRQQ29va2llSXNTZWN1cmUoY2ZDb29raWUpOwor
ICAgICAgICBjb29raWUuc2Vzc2lvbiA9IGZhbHNlOyAvLyBGSVhNRTogTmVlZCBBUEkgZm9yIGlm
IGEgY29va2llIGlzIGEgc2Vzc2lvbiBjb29raWUuCisgICAgICAgIHJhd0Nvb2tpZXMudW5jaGVj
a2VkQXBwZW5kKFdURk1vdmUoY29va2llKSk7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llKGNvbnN0IFVS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Cit7CisgICAgUmV0YWluUHRyPENGSFRU
UENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSB0aGlzLT5jb29raWVTdG9yYWdlKCk7
CisgICAgCisgICAgUmV0YWluUHRyPENGVVJMUmVmPiB1cmxDRiA9IHVybC5jcmVhdGVDRlVSTCgp
OworICAgIAorICAgIGJvb2wgc2VuZFNlY3VyZUNvb2tpZXMgPSB1cmwucHJvdG9jb2xJcygiaHR0
cHMiKTsKKyAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY29va2llc0NGID0gYWRvcHRDRihDRkhU
VFBDb29raWVTdG9yYWdlQ29weUNvb2tpZXNGb3JVUkwoY29va2llU3RvcmFnZS5nZXQoKSwgdXJs
Q0YuZ2V0KCksIHNlbmRTZWN1cmVDb29raWVzKSk7CisgICAgCisgICAgQ0ZJbmRleCBjb3VudCA9
IENGQXJyYXlHZXRDb3VudChjb29raWVzQ0YuZ2V0KCkpOworICAgIGZvciAoQ0ZJbmRleCBpID0g
MDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSA9IGNo
ZWNrZWRfY2ZfY2FzdDxDRkhUVFBDb29raWVSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoY29v
a2llc0NGLmdldCgpLCBpKSk7CisgICAgICAgIGlmIChTdHJpbmcoY29va2llTmFtZShjb29raWUp
LmdldCgpKSA9PSBuYW1lKSB7CisgICAgICAgICAgICBDRkhUVFBDb29raWVTdG9yYWdlRGVsZXRl
Q29va2llKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGNvb2tpZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldEhv
c3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQoreworICAgIFJl
dGFpblB0cjxDRkFycmF5UmVmPiBjb29raWVzQ0YgPSBhZG9wdENGKENGSFRUUENvb2tpZVN0b3Jh
Z2VDb3B5Q29va2llcyhjb29raWVTdG9yYWdlKCkuZ2V0KCkpKTsKKyAgICBpZiAoIWNvb2tpZXND
RikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIENGSW5kZXggY291bnQgPSBDRkFycmF5R2V0
Q291bnQoY29va2llc0NGLmdldCgpKTsKKyAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKSB7CisgICAgICAgIENGSFRUUENvb2tpZVJlZiBjb29raWUgPSBjaGVja2VkX2NmX2Nh
c3Q8Q0ZIVFRQQ29va2llUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGNvb2tpZXNDRi5nZXQo
KSwgaSkpOworICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGRvbWFpbiA9IGNvb2tpZURv
bWFpbihjb29raWUpOworICAgICAgICBob3N0bmFtZXMuYWRkKGRvbWFpbi5nZXQoKSk7CisgICAg
fQorfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcygpCit7
CisgICAgQ0ZIVFRQQ29va2llU3RvcmFnZURlbGV0ZUFsbENvb2tpZXMoY29va2llU3RvcmFnZSgp
LmdldCgpKTsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZXNG
b3JIb3N0bmFtZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGhvc3RuYW1lcykKK3sKK30KKwordm9p
ZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKFdh
bGxUaW1lKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357992</attachid>
            <date>2018-12-21 15:44:18 -0800</date>
            <delta_ts>2018-12-30 14:16:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192958-20181221154417.patch</filename>
            <type>text/plain</type>
            <size>35145</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzOTUwNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDE4LTEyLTIxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBXaW5k
b3dzLXNwZWNpZmljIGNvZGUgZnJvbSBOZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHAgdG8g
aXRzIG93biBmaWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xOTI5NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIG1ha2VzIGl0IGVhc2llciB0byByZWFzb24gYWJvdXQgd2hhdCBjb2RlIGlzIHVz
ZWQgd2hlcmUuCisKKyAgICAgICAgKiBQbGF0Zm9ybUFwcGxlV2luLmNtYWtlOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmNvb2tpZURvbWFpbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpjYW5vbmljYWxDb29raWVUaW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvb2tp
ZUNyZWF0ZWRUaW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZUV4cGlyYXRp
b25UaW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZU5hbWUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Y29va2llUGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpjb29raWVWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpmaWx0ZXJDb29r
aWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvcHlDb29raWVzRm9yVVJMV2l0aEZp
cnN0UGFydHlVUkwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ29va2llcyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENv
b2tpZXNGcm9tRE9NIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnRhaW5z
U2VjdXJlQ29va2llcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OmNvb2tpZXNGb3JET00gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246
OmNvb2tpZXNFbmFibGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6Z2V0UmF3Q29va2llcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVBbGxD
b29raWVzTW9kaWZpZWRTaW5jZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldFdpbi5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpj
b29raWVEb21haW4pOgorICAgICAgICAoV2ViQ29yZTo6Y2Fub25pY2FsQ29va2llVGltZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb29raWVDcmVhdGVkVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpj
b29raWVFeHBpcmF0aW9uVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVOYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvb2tpZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsdGVyQ29va2llcyk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb3B5Q29va2llc0ZvclVSTFdpdGhGaXJzdFBhcnR5VVJMKToKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9u
OjpzZXRDb29raWVzRnJvbURPTSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpjb250YWluc1Nl
Y3VyZUNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpj
b29raWVzRm9yRE9NIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vz
c2lvbjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjb29raWVzRW5hYmxlZCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldFJhd0Nvb2tpZXMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVDb29raWUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpnZXRIb3N0
bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Np
b246OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UpOgorCiAy
MDE4LTEyLTIxICBKdXN0aW4gTWljaGF1ZCAgPGp1c3Rpbl9taWNoYXVkQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXBlYXRlZCBiYWNrZ3JvdW5kIGltYWdlcyB3aXRoIHplcm8gc2l6ZSBzaG91bGQg
ZGlzcGxheSB0aGUgYmFja2dyb3VuZCBjb2xvcgpJbmRleDogU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1BcHBsZVdpbi5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFw
cGxlV2luLmNtYWtlCShyZXZpc2lvbiAyMzk1MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUFwcGxlV2luLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBAIGxpc3QoQVBQ
RU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvRm9ybURhdGFTdHJl
YW1DRk5ldC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2NmL0xvYWRlclJ1bkxvb3BDRi5jcHAK
ICAgICBwbGF0Zm9ybS9uZXR3b3JrL2NmL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNGTmV0LmNwcAor
ICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZOZXRXaW4uY3Bw
CiAgICAgcGxhdGZvcm0vbmV0d29yay9jZi9Qcm90ZWN0aW9uU3BhY2VDRk5ldC5jcHAKICAgICBw
bGF0Zm9ybS9uZXR3b3JrL2NmL1Byb3h5U2VydmVyQ0ZOZXQuY3BwCiAgICAgcGxhdGZvcm0vbmV0
d29yay9jZi9SZXNvdXJjZUVycm9yQ0YuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgJKHJldmlzaW9u
IDIzOTUwNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMCw2ICsyMTAsOCBAQCBwcml2YXRlOgog
CiAjaWYgUExBVEZPUk0oQ09DT0EpCiBXRUJDT1JFX0VYUE9SVCBDRlVSTFN0b3JhZ2VTZXNzaW9u
UmVmIGNyZWF0ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihDRlN0cmluZ1JlZiBpZGVudGlmaWVyKTsK
KyNlbGlmIFVTRShDRlVSTENPTk5FQ1RJT04pCitDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIGNyZWF0
ZVByaXZhdGVTdG9yYWdlU2Vzc2lvbihDRlN0cmluZ1JlZiBpZGVudGlmaWVyLCBDRlVSTFN0b3Jh
Z2VTZXNzaW9uUmVmIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbik7CiAjZW5kaWYKIAogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25D
Rk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
Zi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHAJKHJldmlzaW9uIDIzOTUwNykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ0ZO
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw0NCArMzUsNiBAQAogI2luY2x1ZGUgIlB1Ymxp
Y1N1ZmZpeC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2VuZGlmCi0jaWYgVVNF
KENGVVJMQ09OTkVDVElPTikKLSNpbmNsdWRlICJDb29raWUuaCIKLSNpbmNsdWRlICJDb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRQcm94eS5oIgotI2luY2x1ZGUgIkNvb2tpZXNTdHJhdGVneS5oIgot
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGSFRUUENv
b2tpZXNQcml2Lmg+Ci0jaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4K
LSNpbmNsdWRlIDxwYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oPgotI2luY2x1ZGUgPHdpbmRvd3Mu
aD4KLSNpbmNsdWRlIDx3dGYvU29mdExpbmtpbmcuaD4KLSNpbmNsdWRlIDx3dGYvVVJMLmg+Ci0j
aW5jbHVkZSA8d3RmL2NmL1R5cGVDYXN0c0NGLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLWVudW0gewotICAgIENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lFeGNs
dXNpdmVseUZyb21NYWluRG9jdW1lbnREb21haW4gPSAzCi19OwotCi1uYW1lc3BhY2UgV1RGIHsK
LQotI2RlZmluZSBERUNMQVJFX0NGX1RZUEVfVFJBSVQoQ2xhc3NOYW1lKSBcCi10ZW1wbGF0ZSA8
PiBcCi1zdHJ1Y3QgQ0ZUeXBlVHJhaXQ8Q2xhc3NOYW1lIyNSZWY+IHsgXAotc3RhdGljIGlubGlu
ZSBDRlR5cGVJRCB0eXBlSUQoKSB7IHJldHVybiBDbGFzc05hbWUjI0dldFR5cGVJRCgpOyB9IFwK
LX07Ci0KLSNpZiBDT01QSUxFUihDTEFORykKLUFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05T
X0JFR0lOCi0jZW5kaWYKLURFQ0xBUkVfQ0ZfVFlQRV9UUkFJVChDRkhUVFBDb29raWUpOwotI2lm
IENPTVBJTEVSKENMQU5HKQotQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi0jZW5k
aWYKLQotI3VuZGVmIERFQ0xBUkVfQ0ZfVFlQRV9UUkFJVAotfSAvLyBuYW1lc3BhY2UgV1RGCi0K
LSNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEzMSw0MiArOTMsNiBAQCBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtTdG9yYWdlU2VzCiAgICAgcmV0dXJuIHNlc3Npb247
CiB9CiAKLSNpZiAhUExBVEZPUk0oQ09DT0EpCi1zdGF0aWMgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJl
ZiBjcmVhdGVQcml2YXRlU3RvcmFnZVNlc3Npb24oQ0ZTdHJpbmdSZWYgaWRlbnRpZmllciwgQ0ZV
UkxTdG9yYWdlU2Vzc2lvblJlZiBkZWZhdWx0U3RvcmFnZVNlc3Npb24pCi17Ci0gICAgY29uc3Qg
dm9pZCogc2Vzc2lvblByb3BlcnR5S2V5c1tdID0geyBfa0NGVVJMU3RvcmFnZVNlc3Npb25Jc1By
aXZhdGUgfTsKLSAgICBjb25zdCB2b2lkKiBzZXNzaW9uUHJvcGVydHlWYWx1ZXNbXSA9IHsga0NG
Qm9vbGVhblRydWUgfTsKLSAgICBDRkRpY3Rpb25hcnlSZWYgc2Vzc2lvblByb3BlcnRpZXMgPSBD
RkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc2Vzc2lvblByb3BlcnR5S2V5
cywgc2Vzc2lvblByb3BlcnR5VmFsdWVzLCBzaXplb2Yoc2Vzc2lvblByb3BlcnR5S2V5cykgLyBz
aXplb2YoKnNlc3Npb25Qcm9wZXJ0eUtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFj
a3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKTsKLSAgICBDRlVSTFN0b3JhZ2VT
ZXNzaW9uUmVmIHN0b3JhZ2VTZXNzaW9uID0gX0NGVVJMU3RvcmFnZVNlc3Npb25DcmVhdGUoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgaWRlbnRpZmllciwgc2Vzc2lvblByb3BlcnRpZXMpOwotCi0gICAg
Ly8gVGhlIHByaXZhdGUgc3RvcmFnZSBzZXNzaW9uIHNob3VsZCBoYXZlIHRoZSBzYW1lIHByb3Bl
cnRpZXMgYXMgdGhlIGRlZmF1bHQgc3RvcmFnZSBzZXNzaW9uLAotICAgIC8vIHdpdGggdGhlIGV4
Y2VwdGlvbiB0aGF0IGl0IHNob3VsZCBiZSBpbi1tZW1vcnkgb25seSBzdG9yYWdlLgotICAgIENG
VVJMQ2FjaGVSZWYgY2FjaGUgPSBfQ0ZVUkxTdG9yYWdlU2Vzc2lvbkNvcHlDYWNoZShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBzdG9yYWdlU2Vzc2lvbik7Ci0gICAgQ0ZVUkxDYWNoZVNldERpc2tDYXBh
Y2l0eShjYWNoZSwgMCk7Ci0gICAgQ0ZVUkxDYWNoZVJlZiBkZWZhdWx0Q2FjaGU7Ci0gICAgaWYg
KGRlZmF1bHRTdG9yYWdlU2Vzc2lvbikKLSAgICAgICAgZGVmYXVsdENhY2hlID0gX0NGVVJMU3Rv
cmFnZVNlc3Npb25Db3B5Q2FjaGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZGVmYXVsdFN0b3JhZ2VT
ZXNzaW9uKTsKLSAgICBlbHNlIAotICAgICAgICBkZWZhdWx0Q2FjaGUgPSBDRlVSTENhY2hlQ29w
eVNoYXJlZFVSTENhY2hlKCk7Ci0gICAgQ0ZVUkxDYWNoZVNldE1lbW9yeUNhcGFjaXR5KGNhY2hl
LCBDRlVSTENhY2hlTWVtb3J5Q2FwYWNpdHkoZGVmYXVsdENhY2hlKSk7Ci0gICAgQ0ZSZWxlYXNl
KGRlZmF1bHRDYWNoZSk7Ci0gICAgQ0ZSZWxlYXNlKGNhY2hlKTsKLQotICAgIENGSFRUUENvb2tp
ZVN0b3JhZ2VSZWYgY29va2llU3RvcmFnZSA9IF9DRlVSTFN0b3JhZ2VTZXNzaW9uQ29weUNvb2tp
ZVN0b3JhZ2Uoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc3RvcmFnZVNlc3Npb24pOwotICAgIENGSFRU
UENvb2tpZVN0b3JhZ2VSZWYgZGVmYXVsdENvb2tpZVN0b3JhZ2U7Ci0gICAgaWYgKGRlZmF1bHRT
dG9yYWdlU2Vzc2lvbikKLSAgICAgICAgZGVmYXVsdENvb2tpZVN0b3JhZ2UgPSBfQ0ZVUkxTdG9y
YWdlU2Vzc2lvbkNvcHlDb29raWVTdG9yYWdlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGRlZmF1bHRT
dG9yYWdlU2Vzc2lvbik7Ci0gICAgZWxzZQotICAgICAgICBkZWZhdWx0Q29va2llU3RvcmFnZSA9
IF9DRkhUVFBDb29raWVTdG9yYWdlR2V0RGVmYXVsdChrQ0ZBbGxvY2F0b3JEZWZhdWx0KTsKLSAg
ICBDRkhUVFBDb29raWVTdG9yYWdlU2V0Q29va2llQWNjZXB0UG9saWN5KGNvb2tpZVN0b3JhZ2Us
IENGSFRUUENvb2tpZVN0b3JhZ2VHZXRDb29raWVBY2NlcHRQb2xpY3koZGVmYXVsdENvb2tpZVN0
b3JhZ2UpKTsKLSAgICBpZiAoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKQotICAgICAgICBDRlJlbGVh
c2UoZGVmYXVsdENvb2tpZVN0b3JhZ2UpOwotICAgIENGUmVsZWFzZShjb29raWVTdG9yYWdlKTsK
LQotICAgIHJldHVybiBzdG9yYWdlU2Vzc2lvbjsKLX0KLSNlbmRpZgotCiB2b2lkIE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbjo6c3dpdGNoVG9OZXdUZXN0aW5nU2Vzc2lvbigpCiB7CiAgICAgLy8gU2Vz
c2lvbiBuYW1lIHNob3VsZCBiZSBzaG9ydCBlbm91Z2ggZm9yIHNoYXJlZCBtZW1vcnkgcmVnaW9u
IG5hbWUgdG8gYmUgdW5kZXIgdGhlIGxpbWl0LCBvdGVocndpc2Ugc2FuZGJveCBydWxlcyB3b24n
dCB3b3JrIChzZWUgPHJkYXI6Ly9wcm9ibGVtLzEzNjQyODUyPikuCkBAIC0yNTQsMjcwICsxODAs
NCBAQCB2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c2V0U3RvcmFnZUFjCiAgICAgc3RvcmFn
ZUFjY2Vzc0FQSUVuYWJsZWQgPSBlbmFibGVkOwogfQogCi0jaWYgIVBMQVRGT1JNKENPQ09BKQot
dm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZXMoY29uc3QgVmVjdG9yPENvb2tp
ZT4mLCBjb25zdCBVUkwmLCBjb25zdCBVUkwmKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcy4gPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE1NjI5OD4KLX0KLSNlbmRpZgotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNpZiBVU0UoQ0ZVUkxDT05ORUNUSU9OKQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBzX3NldENvb2tpZUtleUNGID0g
Q0ZTVFIoIlNldC1Db29raWUiKTsKLXN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBzX2Nvb2tpZUNG
ID0gQ0ZTVFIoIkNvb2tpZSIpOwotc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIHNfY3JlYXRlZENG
ID0gQ0ZTVFIoIkNyZWF0ZWQiKTsKLQotc3RhdGljIGlubGluZSBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IGNvb2tpZURvbWFpbihDRkhUVFBDb29raWVSZWYgY29va2llKQotewotICAgIHJldHVybiBh
ZG9wdENGKENGSFRUUENvb2tpZUNvcHlEb21haW4oY29va2llKSk7Ci19Ci0KLXN0YXRpYyBkb3Vi
bGUgY2Fub25pY2FsQ29va2llVGltZShkb3VibGUgdGltZSkKLXsKLSAgICBpZiAoIXRpbWUpCi0g
ICAgICAgIHJldHVybiB0aW1lOwotCi0gICAgcmV0dXJuICh0aW1lICsga0NGQWJzb2x1dGVUaW1l
SW50ZXJ2YWxTaW5jZTE5NzApICogMTAwMDsKLX0KLQotc3RhdGljIGRvdWJsZSBjb29raWVDcmVh
dGVkVGltZShDRkhUVFBDb29raWVSZWYgY29va2llKQotewotICAgIFJldGFpblB0cjxDRkRpY3Rp
b25hcnlSZWY+IHByb3BzID0gYWRvcHRDRihDRkhUVFBDb29raWVDb3B5UHJvcGVydGllcyhjb29r
aWUpKTsKLSAgICBhdXRvIHZhbHVlID0gQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvcHMuZ2V0KCks
IHNfY3JlYXRlZENGKTsKLQotICAgIGF1dG8gYXNOdW1iZXIgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZO
dW1iZXJSZWY+KHZhbHVlKTsKLSAgICBpZiAoYXNOdW1iZXIpIHsKLSAgICAgICAgZG91YmxlIGFz
RG91YmxlOwotICAgICAgICBpZiAoQ0ZOdW1iZXJHZXRWYWx1ZShhc051bWJlciwga0NGTnVtYmVy
RmxvYXQ2NFR5cGUsICZhc0RvdWJsZSkpCi0gICAgICAgICAgICByZXR1cm4gY2Fub25pY2FsQ29v
a2llVGltZShhc0RvdWJsZSk7Ci0gICAgICAgIHJldHVybiAwLjA7Ci0gICAgfQotCi0gICAgYXV0
byBhc1N0cmluZyA9IGR5bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4odmFsdWUpOwotICAgIGlm
IChhc1N0cmluZykKLSAgICAgICAgcmV0dXJuIGNhbm9uaWNhbENvb2tpZVRpbWUoQ0ZTdHJpbmdH
ZXREb3VibGVWYWx1ZShhc1N0cmluZykpOwotCi0gICAgcmV0dXJuIDAuMDsKLX0KLQotc3RhdGlj
IGlubGluZSBDRkFic29sdXRlVGltZSBjb29raWVFeHBpcmF0aW9uVGltZShDRkhUVFBDb29raWVS
ZWYgY29va2llKQotewotICAgIHJldHVybiBjYW5vbmljYWxDb29raWVUaW1lKENGSFRUUENvb2tp
ZUdldEV4cGlyYXRpb25UaW1lKGNvb2tpZSkpOwotfQotCi1zdGF0aWMgaW5saW5lIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gY29va2llTmFtZShDRkhUVFBDb29raWVSZWYgY29va2llKQotewotICAg
IHJldHVybiBhZG9wdENGKENGSFRUUENvb2tpZUNvcHlOYW1lKGNvb2tpZSkpOwotfQotCi1zdGF0
aWMgaW5saW5lIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY29va2llUGF0aChDRkhUVFBDb29raWVS
ZWYgY29va2llKQotewotICAgIHJldHVybiBhZG9wdENGKENGSFRUUENvb2tpZUNvcHlQYXRoKGNv
b2tpZSkpOwotfQotCi1zdGF0aWMgaW5saW5lIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY29va2ll
VmFsdWUoQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSkKLXsKLSAgICByZXR1cm4gYWRvcHRDRihDRkhU
VFBDb29raWVDb3B5VmFsdWUoY29va2llKSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZBcnJh
eVJlZj4gZmlsdGVyQ29va2llcyhDRkFycmF5UmVmIHVuZmlsdGVyZWRDb29raWVzKQotewotICAg
IEFTU0VSVCh1bmZpbHRlcmVkQ29va2llcyk7Ci0gICAgQ0ZJbmRleCBjb3VudCA9IENGQXJyYXlH
ZXRDb3VudCh1bmZpbHRlcmVkQ29va2llcyk7Ci0gICAgUmV0YWluUHRyPENGTXV0YWJsZUFycmF5
UmVmPiBmaWx0ZXJlZENvb2tpZXMgPSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKDAsIGNv
dW50LCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0gICAgZm9yIChDRkluZGV4IGkgPSAwOyBp
IDwgY291bnQ7ICsraSkgewotICAgICAgICBDRkhUVFBDb29raWVSZWYgY29va2llID0gKENGSFRU
UENvb2tpZVJlZilDRkFycmF5R2V0VmFsdWVBdEluZGV4KHVuZmlsdGVyZWRDb29raWVzLCBpKTsK
LQotICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNTYzMjg4Mz4gQ0ZIVFRQQ29va2llU3RvcmFn
ZSB3b3VsZCBzdG9yZSBhbiBlbXB0eSBjb29raWUsCi0gICAgICAgIC8vIHdoaWNoIHdvdWxkIGJl
IHNlbnQgYXMgIkNvb2tpZTogPSIuIFdlIGhhdmUgYSB3b3JrYXJvdW5kIGluIHNldENvb2tpZXMo
KSB0byBwcmV2ZW50Ci0gICAgICAgIC8vIHRoYXQsIGJ1dCB3ZSBhbHNvIG5lZWQgdG8gYXZvaWQg
c2VuZGluZyBjb29raWVzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHN0b3JlZCwgYW5kCi0gICAgICAg
IC8vIHRoZXJlJ3Mgbm8gaGFybSB0byBkb2luZyB0aGlzIGNoZWNrIGJlY2F1c2Ugc3VjaCBhIGNv
b2tpZSBpcyBuZXZlciB2YWxpZC4KLSAgICAgICAgaWYgKCFDRlN0cmluZ0dldExlbmd0aChjb29r
aWVOYW1lKGNvb2tpZSkuZ2V0KCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
aWYgKENGSFRUUENvb2tpZUlzSFRUUE9ubHkoY29va2llKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShmaWx0ZXJlZENvb2tpZXMuZ2V0KCksIGNv
b2tpZSk7Ci0gICAgfQotICAgIHJldHVybiBmaWx0ZXJlZENvb2tpZXM7Ci19Ci0KLXN0YXRpYyBS
ZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY29weUNvb2tpZXNGb3JVUkxXaXRoRmlyc3RQYXJ0eVVSTChj
b25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0
eSwgY29uc3QgVVJMJiB1cmwsIEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29r
aWVzKQotewotICAgIGJvb2wgc2VjdXJlID0gaW5jbHVkZVNlY3VyZUNvb2tpZXMgPT0gSW5jbHVk
ZVNlY3VyZUNvb2tpZXM6OlllczsKLQotICAgIEFTU0VSVCghc2VjdXJlIHx8IChzZWN1cmUgJiYg
dXJsLnByb3RvY29sSXMoImh0dHBzIikpKTsKLQotICAgIFVOVVNFRF9QQVJBTShmaXJzdFBhcnR5
KTsKLSAgICByZXR1cm4gYWRvcHRDRihDRkhUVFBDb29raWVTdG9yYWdlQ29weUNvb2tpZXNGb3JV
Ukwoc2Vzc2lvbi5jb29raWVTdG9yYWdlKCkuZ2V0KCksIHVybC5jcmVhdGVDRlVSTCgpLmdldCgp
LCBzZWN1cmUpKTsKLX0KLQotc3RhdGljIENGQXJyYXlSZWYgY3JlYXRlQ29va2llcyhDRkRpY3Rp
b25hcnlSZWYgaGVhZGVyRmllbGRzLCBDRlVSTFJlZiB1cmwpCi17Ci0gICAgQ0ZBcnJheVJlZiBw
YXJzZWRDb29raWVzID0gQ0ZIVFRQQ29va2llQ3JlYXRlV2l0aFJlc3BvbnNlSGVhZGVyRmllbGRz
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGhlYWRlckZpZWxkcywgdXJsKTsKLSAgICBpZiAoIXBhcnNl
ZENvb2tpZXMpCi0gICAgICAgIHBhcnNlZENvb2tpZXMgPSBDRkFycmF5Q3JlYXRlKGtDRkFsbG9j
YXRvckRlZmF1bHQsIDAsIDAsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpOwotCi0gICAgcmV0dXJu
IHBhcnNlZENvb2tpZXM7Ci19Ci0KLXZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29r
aWVzRnJvbURPTShjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYsIGNv
bnN0IFVSTCYgdXJsLCBPcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgT3B0aW9uYWw8dWludDY0
X3Q+IHBhZ2VJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3QKLXsKLSAgICBVTlVTRURfUEFS
QU0oZnJhbWVJRCk7Ci0gICAgVU5VU0VEX1BBUkFNKHBhZ2VJRCk7Ci0gICAgLy8gPHJkYXI6Ly9w
cm9ibGVtLzU2MzI4ODM+IENGSFRUUENvb2tpZVN0b3JhZ2Ugc3RvcmVzIGFuIGVtcHR5IGNvb2tp
ZSwgd2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29va2llOiA9Ii4KLSAgICBpZiAodmFsdWUuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybENG
ID0gdXJsLmNyZWF0ZUNGVVJMKCk7Ci0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBmaXJzdFBhcnR5
Rm9yQ29va2llc0NGID0gZmlyc3RQYXJ0eS5jcmVhdGVDRlVSTCgpOwotCi0gICAgLy8gPGh0dHA6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1MzE+LCA8cmRhcjovLzQ0MDkwMzQ+
Ci0gICAgLy8gY29va2llc1dpdGhSZXNwb25zZUhlYWRlckZpZWxkcyBkb2Vzbid0IHBhcnNlIGNv
b2tpZXMgd2l0aG91dCBhIHZhbHVlCi0gICAgU3RyaW5nIGNvb2tpZVN0cmluZyA9IHZhbHVlLmNv
bnRhaW5zKCc9JykgPyB2YWx1ZSA6IHZhbHVlICsgIj0iOwotCi0gICAgUmV0YWluUHRyPENGU3Ry
aW5nUmVmPiBjb29raWVTdHJpbmdDRiA9IGNvb2tpZVN0cmluZy5jcmVhdGVDRlN0cmluZygpOwot
ICAgIGF1dG8gY29va2llU3RyaW5nQ0ZQdHIgPSBjb29raWVTdHJpbmdDRi5nZXQoKTsKLSAgICBS
ZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBoZWFkZXJGaWVsZHNDRiA9IGFkb3B0Q0YoQ0ZEaWN0
aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsCi0gICAgICAgIChjb25zdCB2b2lkKiop
JnNfc2V0Q29va2llS2V5Q0YsIChjb25zdCB2b2lkKiopJmNvb2tpZVN0cmluZ0NGUHRyLCAxLAot
ICAgICAgICAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFy
eVZhbHVlQ2FsbEJhY2tzKSk7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gdW5maWx0ZXJl
ZENvb2tpZXMgPSBhZG9wdENGKGNyZWF0ZUNvb2tpZXMoaGVhZGVyRmllbGRzQ0YuZ2V0KCksIHVy
bENGLmdldCgpKSk7Ci0gICAgQ0ZIVFRQQ29va2llU3RvcmFnZVNldENvb2tpZXMoY29va2llU3Rv
cmFnZSgpLmdldCgpLCBmaWx0ZXJDb29raWVzKHVuZmlsdGVyZWRDb29raWVzLmdldCgpKS5nZXQo
KSwgdXJsQ0YuZ2V0KCksIGZpcnN0UGFydHlGb3JDb29raWVzQ0YuZ2V0KCkpOwotfQotCi1zdGF0
aWMgYm9vbCBjb250YWluc1NlY3VyZUNvb2tpZXMoQ0ZBcnJheVJlZiBjb29raWVzKQotewotICAg
IENGSW5kZXggY29va2llQ291bnQgPSBDRkFycmF5R2V0Q291bnQoY29va2llcyk7Ci0gICAgd2hp
bGUgKGNvb2tpZUNvdW50LS0pIHsKLSAgICAgICAgaWYgKENGSFRUUENvb2tpZUlzU2VjdXJlKGNo
ZWNrZWRfY2ZfY2FzdDxDRkhUVFBDb29raWVSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoY29v
a2llcywgY29va2llQ291bnQpKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbjo6Y29va2llc0ZvckRPTShjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0
IFNhbWVTaXRlSW5mbyYsIGNvbnN0IFVSTCYgdXJsLCBPcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJ
RCwgT3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVk
ZVNlY3VyZUNvb2tpZXMpIGNvbnN0Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGZyYW1lSUQpOwotICAg
IFVOVVNFRF9QQVJBTShwYWdlSUQpOwotICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBjb29raWVz
Q0YgPSBjb3B5Q29va2llc0ZvclVSTFdpdGhGaXJzdFBhcnR5VVJMKCp0aGlzLCBmaXJzdFBhcnR5
LCB1cmwsIGluY2x1ZGVTZWN1cmVDb29raWVzKTsKLQotICAgIGF1dG8gZmlsdGVyZWRDb29raWVz
ID0gZmlsdGVyQ29va2llcyhjb29raWVzQ0YuZ2V0KCkpOwotCi0gICAgYm9vbCBkaWRBY2Nlc3NT
ZWN1cmVDb29raWVzID0gY29udGFpbnNTZWN1cmVDb29raWVzKGZpbHRlcmVkQ29va2llcy5nZXQo
KSk7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBoZWFkZXJDRiA9IGFkb3B0Q0Yo
Q0ZIVFRQQ29va2llQ29weVJlcXVlc3RIZWFkZXJGaWVsZHMoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
ZmlsdGVyZWRDb29raWVzLmdldCgpKSk7Ci0gICAgU3RyaW5nIGNvb2tpZVN0cmluZyA9IGNoZWNr
ZWRfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoaGVhZGVyQ0YuZ2V0
KCksIHNfY29va2llQ0YpKTsKLSAgICByZXR1cm4geyBjb29raWVTdHJpbmcsIGRpZEFjY2Vzc1Nl
Y3VyZUNvb2tpZXMgfTsKLX0KLQotc3RkOjpwYWlyPFN0cmluZywgYm9vbD4gTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBVUkwmIGZpcnN0
UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYsIGNvbnN0IFVSTCYgdXJsLCBPcHRpb25hbDx1aW50
NjRfdD4gZnJhbWVJRCwgT3B0aW9uYWw8dWludDY0X3Q+IHBhZ2VJRCwgSW5jbHVkZVNlY3VyZUNv
b2tpZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMpIGNvbnN0Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGZy
YW1lSUQpOwotICAgIFVOVVNFRF9QQVJBTShwYWdlSUQpOwotICAgIFJldGFpblB0cjxDRkFycmF5
UmVmPiBjb29raWVzQ0YgPSBjb3B5Q29va2llc0ZvclVSTFdpdGhGaXJzdFBhcnR5VVJMKCp0aGlz
LCBmaXJzdFBhcnR5LCB1cmwsIGluY2x1ZGVTZWN1cmVDb29raWVzKTsKLQotICAgIGJvb2wgZGlk
QWNjZXNzU2VjdXJlQ29va2llcyA9IGNvbnRhaW5zU2VjdXJlQ29va2llcyhjb29raWVzQ0YuZ2V0
KCkpOwotCi0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaGVhZGVyQ0YgPSBhZG9wdENG
KENGSFRUUENvb2tpZUNvcHlSZXF1ZXN0SGVhZGVyRmllbGRzKGtDRkFsbG9jYXRvckRlZmF1bHQs
IGNvb2tpZXNDRi5nZXQoKSkpOwotICAgIFN0cmluZyBjb29raWVTdHJpbmcgPSBjaGVja2VkX2Nm
X2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGhlYWRlckNGLmdldCgpLCBz
X2Nvb2tpZUNGKSk7Ci0gICAgcmV0dXJuIHsgY29va2llU3RyaW5nLCBkaWRBY2Nlc3NTZWN1cmVD
b29raWVzIH07Ci19Ci0KLXN0ZDo6cGFpcjxTdHJpbmcsIGJvb2w+IE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgQ29va2llUmVxdWVzdEhl
YWRlckZpZWxkUHJveHkmIGhlYWRlckZpZWxkUHJveHkpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNv
b2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGhlYWRlckZpZWxkUHJveHkuZmlyc3RQYXJ0eSwg
aGVhZGVyRmllbGRQcm94eS5zYW1lU2l0ZUluZm8sIGhlYWRlckZpZWxkUHJveHkudXJsLCBoZWFk
ZXJGaWVsZFByb3h5LmZyYW1lSUQsIGhlYWRlckZpZWxkUHJveHkucGFnZUlELCBoZWFkZXJGaWVs
ZFByb3h5LmluY2x1ZGVTZWN1cmVDb29raWVzKTsKLX0KLQotYm9vbCBOZXR3b3JrU3RvcmFnZVNl
c3Npb246OmNvb2tpZXNFbmFibGVkKCkgY29uc3QKLXsKLSAgICBDRkhUVFBDb29raWVTdG9yYWdl
QWNjZXB0UG9saWN5IHBvbGljeSA9IENGSFRUUENvb2tpZVN0b3JhZ2VHZXRDb29raWVBY2NlcHRQ
b2xpY3koY29va2llU3RvcmFnZSgpLmdldCgpKTsKLSAgICByZXR1cm4gcG9saWN5ID09IENGSFRU
UENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbiB8fCBw
b2xpY3kgPT0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeUV4Y2x1c2l2ZWx5RnJvbU1h
aW5Eb2N1bWVudERvbWFpbiB8fCBwb2xpY3kgPT0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBv
bGljeUFsd2F5czsKLX0KLQotYm9vbCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldFJhd0Nvb2tp
ZXMoY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBVUkwm
IHVybCwgT3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIE9wdGlvbmFsPHVpbnQ2NF90PiBwYWdl
SUQsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKSBjb25zdAotewotICAgIFVOVVNFRF9QQVJB
TShmcmFtZUlEKTsKLSAgICBVTlVTRURfUEFSQU0ocGFnZUlEKTsKLSAgICByYXdDb29raWVzLmNs
ZWFyKCk7Ci0KLSAgICBhdXRvIGluY2x1ZGVTZWN1cmVDb29raWVzID0gdXJsLnByb3RvY29sSXMo
Imh0dHBzIikgPyBJbmNsdWRlU2VjdXJlQ29va2llczo6WWVzIDogSW5jbHVkZVNlY3VyZUNvb2tp
ZXM6Ok5vOwotCi0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNvb2tpZXNDRiA9IGNvcHlDb29r
aWVzRm9yVVJMV2l0aEZpcnN0UGFydHlVUkwoKnRoaXMsIGZpcnN0UGFydHksIHVybCwgaW5jbHVk
ZVNlY3VyZUNvb2tpZXMpOwotCi0gICAgQ0ZJbmRleCBjb3VudCA9IENGQXJyYXlHZXRDb3VudChj
b29raWVzQ0YuZ2V0KCkpOwotICAgIHJhd0Nvb2tpZXMucmVzZXJ2ZUNhcGFjaXR5KGNvdW50KTsK
LQotICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgQ0ZI
VFRQQ29va2llUmVmIGNmQ29va2llID0gY2hlY2tlZF9jZl9jYXN0PENGSFRUUENvb2tpZVJlZj4o
Q0ZBcnJheUdldFZhbHVlQXRJbmRleChjb29raWVzQ0YuZ2V0KCksIGkpKTsKLSAgICAgICAgQ29v
a2llIGNvb2tpZTsKLSAgICAgICAgY29va2llLm5hbWUgPSBjb29raWVOYW1lKGNmQ29va2llKS5n
ZXQoKTsKLSAgICAgICAgY29va2llLnZhbHVlID0gY29va2llVmFsdWUoY2ZDb29raWUpLmdldCgp
OwotICAgICAgICBjb29raWUuZG9tYWluID0gY29va2llRG9tYWluKGNmQ29va2llKS5nZXQoKTsK
LSAgICAgICAgY29va2llLnBhdGggPSBjb29raWVQYXRoKGNmQ29va2llKS5nZXQoKTsKLSAgICAg
ICAgY29va2llLmNyZWF0ZWQgPSBjb29raWVDcmVhdGVkVGltZShjZkNvb2tpZSk7Ci0gICAgICAg
IGNvb2tpZS5leHBpcmVzID0gY29va2llRXhwaXJhdGlvblRpbWUoY2ZDb29raWUpOwotICAgICAg
ICBjb29raWUuaHR0cE9ubHkgPSBDRkhUVFBDb29raWVJc0hUVFBPbmx5KGNmQ29va2llKTsKLSAg
ICAgICAgY29va2llLnNlY3VyZSA9IENGSFRUUENvb2tpZUlzU2VjdXJlKGNmQ29va2llKTsKLSAg
ICAgICAgY29va2llLnNlc3Npb24gPSBmYWxzZTsgLy8gRklYTUU6IE5lZWQgQVBJIGZvciBpZiBh
IGNvb2tpZSBpcyBhIHNlc3Npb24gY29va2llLgotICAgICAgICByYXdDb29raWVzLnVuY2hlY2tl
ZEFwcGVuZChXVEZNb3ZlKGNvb2tpZSkpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llKGNvbnN0IFVSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Ci17Ci0gICAgUmV0YWluUHRyPENGSFRUUENvb2tp
ZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSB0aGlzLT5jb29raWVTdG9yYWdlKCk7Ci0KLSAg
ICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybENGID0gdXJsLmNyZWF0ZUNGVVJMKCk7Ci0KLSAgICBi
b29sIHNlbmRTZWN1cmVDb29raWVzID0gdXJsLnByb3RvY29sSXMoImh0dHBzIik7Ci0gICAgUmV0
YWluUHRyPENGQXJyYXlSZWY+IGNvb2tpZXNDRiA9IGFkb3B0Q0YoQ0ZIVFRQQ29va2llU3RvcmFn
ZUNvcHlDb29raWVzRm9yVVJMKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIHVybENGLmdldCgpLCBzZW5k
U2VjdXJlQ29va2llcykpOwotCi0gICAgQ0ZJbmRleCBjb3VudCA9IENGQXJyYXlHZXRDb3VudChj
b29raWVzQ0YuZ2V0KCkpOwotICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGNvdW50OyBpKysp
IHsKLSAgICAgICAgQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSA9IGNoZWNrZWRfY2ZfY2FzdDxDRkhU
VFBDb29raWVSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoY29va2llc0NGLmdldCgpLCBpKSk7
Ci0gICAgICAgIGlmIChTdHJpbmcoY29va2llTmFtZShjb29raWUpLmdldCgpKSA9PSBuYW1lKSB7
Ci0gICAgICAgICAgICBDRkhUVFBDb29raWVTdG9yYWdlRGVsZXRlQ29va2llKGNvb2tpZVN0b3Jh
Z2UuZ2V0KCksIGNvb2tpZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldEhvc3RuYW1lc1dpdGhDb29raWVz
KEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQotewotICAgIFJldGFpblB0cjxDRkFycmF5UmVm
PiBjb29raWVzQ0YgPSBhZG9wdENGKENGSFRUUENvb2tpZVN0b3JhZ2VDb3B5Q29va2llcyhjb29r
aWVTdG9yYWdlKCkuZ2V0KCkpKTsKLSAgICBpZiAoIWNvb2tpZXNDRikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQ0ZJbmRleCBjb3VudCA9IENGQXJyYXlHZXRDb3VudChjb29raWVzQ0YuZ2V0KCkp
OwotICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgQ0ZI
VFRQQ29va2llUmVmIGNvb2tpZSA9IGNoZWNrZWRfY2ZfY2FzdDxDRkhUVFBDb29raWVSZWY+KENG
QXJyYXlHZXRWYWx1ZUF0SW5kZXgoY29va2llc0NGLmdldCgpLCBpKSk7Ci0gICAgICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gZG9tYWluID0gY29va2llRG9tYWluKGNvb2tpZSk7Ci0gICAgICAg
IGhvc3RuYW1lcy5hZGQoZG9tYWluLmdldCgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgTmV0d29ya1N0
b3JhZ2VTZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKCkKLXsKLSAgICBDRkhUVFBDb29raWVTdG9y
YWdlRGVsZXRlQWxsQ29va2llcyhjb29raWVTdG9yYWdlKCkuZ2V0KCkpOwotfQotCi12b2lkIE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYgaG9zdG5hbWVzKQotewotfQotCi12b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lv
bjo6ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoV2FsbFRpbWUpCi17Ci19Ci0KIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDRlVSTENPTk5FQ1RJT04pCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL05ldHdvcmtTdG9yYWdlU2Vzc2lv
bkNGTmV0V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NmL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNGTmV0V2luLmNwcAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL05ldHdvcmtTdG9yYWdlU2Vzc2lv
bkNGTmV0V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM1NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOZXR3b3JrU3RvcmFnZVNlc3Npb24u
aCIKKworI2luY2x1ZGUgIkNvb2tpZS5oIgorI2luY2x1ZGUgIkNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFByb3h5LmgiCisjaW5jbHVkZSAiQ29va2llc1N0cmF0ZWd5LmgiCisjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZIVFRQQ29va2llc1ByaXYuaD4K
KyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgorI2luY2x1ZGUgPHBh
bC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5j
bHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgorI2luY2x1ZGUgPHd0Zi9Qcm9jZXNzUHJpdmlsZWdlLmg+
CisjaW5jbHVkZSA8d3RmL1NvZnRMaW5raW5nLmg+CisjaW5jbHVkZSA8d3RmL1VSTC5oPgorI2lu
Y2x1ZGUgPHd0Zi9jZi9UeXBlQ2FzdHNDRi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCitlbnVtIHsKKyAgICBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5RXhjbHVz
aXZlbHlGcm9tTWFpbkRvY3VtZW50RG9tYWluID0gMworfTsKKworbmFtZXNwYWNlIFdURiB7Cisg
ICAgCisjZGVmaW5lIERFQ0xBUkVfQ0ZfVFlQRV9UUkFJVChDbGFzc05hbWUpIFwKK3RlbXBsYXRl
IDw+IFwKK3N0cnVjdCBDRlR5cGVUcmFpdDxDbGFzc05hbWUjI1JlZj4geyBcCitzdGF0aWMgaW5s
aW5lIENGVHlwZUlEIHR5cGVJRCgpIHsgcmV0dXJuIENsYXNzTmFtZSMjR2V0VHlwZUlEKCk7IH0g
XAorfTsKKyAgICAKK0RFQ0xBUkVfQ0ZfVFlQRV9UUkFJVChDRkhUVFBDb29raWUpOworICAgIAor
I3VuZGVmIERFQ0xBUkVfQ0ZfVFlQRV9UUkFJVAorfSAvLyBuYW1lc3BhY2UgV1RGCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBjcmVhdGVQcml2YXRlU3Rv
cmFnZVNlc3Npb24oQ0ZTdHJpbmdSZWYgaWRlbnRpZmllciwgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJl
ZiBkZWZhdWx0U3RvcmFnZVNlc3Npb24pCit7CisgICAgY29uc3Qgdm9pZCogc2Vzc2lvblByb3Bl
cnR5S2V5c1tdID0geyBfa0NGVVJMU3RvcmFnZVNlc3Npb25Jc1ByaXZhdGUgfTsKKyAgICBjb25z
dCB2b2lkKiBzZXNzaW9uUHJvcGVydHlWYWx1ZXNbXSA9IHsga0NGQm9vbGVhblRydWUgfTsKKyAg
ICBDRkRpY3Rpb25hcnlSZWYgc2Vzc2lvblByb3BlcnRpZXMgPSBDRkRpY3Rpb25hcnlDcmVhdGUo
a0NGQWxsb2NhdG9yRGVmYXVsdCwgc2Vzc2lvblByb3BlcnR5S2V5cywgc2Vzc2lvblByb3BlcnR5
VmFsdWVzLCBzaXplb2Yoc2Vzc2lvblByb3BlcnR5S2V5cykgLyBzaXplb2YoKnNlc3Npb25Qcm9w
ZXJ0eUtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlv
bmFyeVZhbHVlQ2FsbEJhY2tzKTsKKyAgICBDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHN0b3JhZ2VT
ZXNzaW9uID0gX0NGVVJMU3RvcmFnZVNlc3Npb25DcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
aWRlbnRpZmllciwgc2Vzc2lvblByb3BlcnRpZXMpOworICAgIAorICAgIC8vIFRoZSBwcml2YXRl
IHN0b3JhZ2Ugc2Vzc2lvbiBzaG91bGQgaGF2ZSB0aGUgc2FtZSBwcm9wZXJ0aWVzIGFzIHRoZSBk
ZWZhdWx0IHN0b3JhZ2Ugc2Vzc2lvbiwKKyAgICAvLyB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCBp
dCBzaG91bGQgYmUgaW4tbWVtb3J5IG9ubHkgc3RvcmFnZS4KKyAgICBDRlVSTENhY2hlUmVmIGNh
Y2hlID0gX0NGVVJMU3RvcmFnZVNlc3Npb25Db3B5Q2FjaGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
c3RvcmFnZVNlc3Npb24pOworICAgIENGVVJMQ2FjaGVTZXREaXNrQ2FwYWNpdHkoY2FjaGUsIDAp
OworICAgIENGVVJMQ2FjaGVSZWYgZGVmYXVsdENhY2hlOworICAgIGlmIChkZWZhdWx0U3RvcmFn
ZVNlc3Npb24pCisgICAgICAgIGRlZmF1bHRDYWNoZSA9IF9DRlVSTFN0b3JhZ2VTZXNzaW9uQ29w
eUNhY2hlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbik7CisgICAg
ZWxzZQorICAgICAgICBkZWZhdWx0Q2FjaGUgPSBDRlVSTENhY2hlQ29weVNoYXJlZFVSTENhY2hl
KCk7CisgICAgQ0ZVUkxDYWNoZVNldE1lbW9yeUNhcGFjaXR5KGNhY2hlLCBDRlVSTENhY2hlTWVt
b3J5Q2FwYWNpdHkoZGVmYXVsdENhY2hlKSk7CisgICAgQ0ZSZWxlYXNlKGRlZmF1bHRDYWNoZSk7
CisgICAgQ0ZSZWxlYXNlKGNhY2hlKTsKKyAgICAKKyAgICBDRkhUVFBDb29raWVTdG9yYWdlUmVm
IGNvb2tpZVN0b3JhZ2UgPSBfQ0ZVUkxTdG9yYWdlU2Vzc2lvbkNvcHlDb29raWVTdG9yYWdlKGtD
RkFsbG9jYXRvckRlZmF1bHQsIHN0b3JhZ2VTZXNzaW9uKTsKKyAgICBDRkhUVFBDb29raWVTdG9y
YWdlUmVmIGRlZmF1bHRDb29raWVTdG9yYWdlOworICAgIGlmIChkZWZhdWx0U3RvcmFnZVNlc3Np
b24pCisgICAgICAgIGRlZmF1bHRDb29raWVTdG9yYWdlID0gX0NGVVJMU3RvcmFnZVNlc3Npb25D
b3B5Q29va2llU3RvcmFnZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBkZWZhdWx0U3RvcmFnZVNlc3Np
b24pOworICAgIGVsc2UKKyAgICAgICAgZGVmYXVsdENvb2tpZVN0b3JhZ2UgPSBfQ0ZIVFRQQ29v
a2llU3RvcmFnZUdldERlZmF1bHQoa0NGQWxsb2NhdG9yRGVmYXVsdCk7CisgICAgQ0ZIVFRQQ29v
a2llU3RvcmFnZVNldENvb2tpZUFjY2VwdFBvbGljeShjb29raWVTdG9yYWdlLCBDRkhUVFBDb29r
aWVTdG9yYWdlR2V0Q29va2llQWNjZXB0UG9saWN5KGRlZmF1bHRDb29raWVTdG9yYWdlKSk7Cisg
ICAgaWYgKGRlZmF1bHRTdG9yYWdlU2Vzc2lvbikKKyAgICAgICAgQ0ZSZWxlYXNlKGRlZmF1bHRD
b29raWVTdG9yYWdlKTsKKyAgICBDRlJlbGVhc2UoY29va2llU3RvcmFnZSk7CisgICAgCisgICAg
cmV0dXJuIHN0b3JhZ2VTZXNzaW9uOworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6
c2V0Q29va2llcyhjb25zdCBWZWN0b3I8Q29va2llPiYsIGNvbnN0IFVSTCYsIGNvbnN0IFVSTCYp
Cit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLiA8aHR0cHM6Ly93ZWJraXQub3JnL2Iv
MTU2Mjk4PgorfQorCitzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYgc19zZXRDb29raWVLZXlDRiA9
IENGU1RSKCJTZXQtQ29va2llIik7CitzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYgc19jb29raWVD
RiA9IENGU1RSKCJDb29raWUiKTsKK3N0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBzX2NyZWF0ZWRD
RiA9IENGU1RSKCJDcmVhdGVkIik7CisKK3N0YXRpYyBpbmxpbmUgUmV0YWluUHRyPENGU3RyaW5n
UmVmPiBjb29raWVEb21haW4oQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSkKK3sKKyAgICByZXR1cm4g
YWRvcHRDRihDRkhUVFBDb29raWVDb3B5RG9tYWluKGNvb2tpZSkpOworfQorCitzdGF0aWMgZG91
YmxlIGNhbm9uaWNhbENvb2tpZVRpbWUoZG91YmxlIHRpbWUpCit7CisgICAgaWYgKCF0aW1lKQor
ICAgICAgICByZXR1cm4gdGltZTsKKyAgICAKKyAgICByZXR1cm4gKHRpbWUgKyBrQ0ZBYnNvbHV0
ZVRpbWVJbnRlcnZhbFNpbmNlMTk3MCkgKiAxMDAwOworfQorCitzdGF0aWMgZG91YmxlIGNvb2tp
ZUNyZWF0ZWRUaW1lKENGSFRUUENvb2tpZVJlZiBjb29raWUpCit7CisgICAgUmV0YWluUHRyPENG
RGljdGlvbmFyeVJlZj4gcHJvcHMgPSBhZG9wdENGKENGSFRUUENvb2tpZUNvcHlQcm9wZXJ0aWVz
KGNvb2tpZSkpOworICAgIGF1dG8gdmFsdWUgPSBDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9wcy5n
ZXQoKSwgc19jcmVhdGVkQ0YpOworICAgIAorICAgIGF1dG8gYXNOdW1iZXIgPSBkeW5hbWljX2Nm
X2Nhc3Q8Q0ZOdW1iZXJSZWY+KHZhbHVlKTsKKyAgICBpZiAoYXNOdW1iZXIpIHsKKyAgICAgICAg
ZG91YmxlIGFzRG91YmxlOworICAgICAgICBpZiAoQ0ZOdW1iZXJHZXRWYWx1ZShhc051bWJlciwg
a0NGTnVtYmVyRmxvYXQ2NFR5cGUsICZhc0RvdWJsZSkpCisgICAgICAgICAgICByZXR1cm4gY2Fu
b25pY2FsQ29va2llVGltZShhc0RvdWJsZSk7CisgICAgICAgIHJldHVybiAwLjA7CisgICAgfQor
ICAgIAorICAgIGF1dG8gYXNTdHJpbmcgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZTdHJpbmdSZWY+KHZh
bHVlKTsKKyAgICBpZiAoYXNTdHJpbmcpCisgICAgICAgIHJldHVybiBjYW5vbmljYWxDb29raWVU
aW1lKENGU3RyaW5nR2V0RG91YmxlVmFsdWUoYXNTdHJpbmcpKTsKKyAgICAKKyAgICByZXR1cm4g
MC4wOworfQorCitzdGF0aWMgaW5saW5lIENGQWJzb2x1dGVUaW1lIGNvb2tpZUV4cGlyYXRpb25U
aW1lKENGSFRUUENvb2tpZVJlZiBjb29raWUpCit7CisgICAgcmV0dXJuIGNhbm9uaWNhbENvb2tp
ZVRpbWUoQ0ZIVFRQQ29va2llR2V0RXhwaXJhdGlvblRpbWUoY29va2llKSk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjb29raWVOYW1lKENGSFRUUENvb2tpZVJl
ZiBjb29raWUpCit7CisgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZIVFRQQ29va2llQ29weU5hbWUoY29v
a2llKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjb29raWVQ
YXRoKENGSFRUUENvb2tpZVJlZiBjb29raWUpCit7CisgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZIVFRQ
Q29va2llQ29weVBhdGgoY29va2llKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmV0YWluUHRyPENG
U3RyaW5nUmVmPiBjb29raWVWYWx1ZShDRkhUVFBDb29raWVSZWYgY29va2llKQoreworICAgIHJl
dHVybiBhZG9wdENGKENGSFRUUENvb2tpZUNvcHlWYWx1ZShjb29raWUpKTsKK30KKworc3RhdGlj
IFJldGFpblB0cjxDRkFycmF5UmVmPiBmaWx0ZXJDb29raWVzKENGQXJyYXlSZWYgdW5maWx0ZXJl
ZENvb2tpZXMpCit7CisgICAgQVNTRVJUKHVuZmlsdGVyZWRDb29raWVzKTsKKyAgICBDRkluZGV4
IGNvdW50ID0gQ0ZBcnJheUdldENvdW50KHVuZmlsdGVyZWRDb29raWVzKTsKKyAgICBSZXRhaW5Q
dHI8Q0ZNdXRhYmxlQXJyYXlSZWY+IGZpbHRlcmVkQ29va2llcyA9IGFkb3B0Q0YoQ0ZBcnJheUNy
ZWF0ZU11dGFibGUoMCwgY291bnQsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKKyAgICBmb3Ig
KENGSW5kZXggaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIENGSFRUUENvb2tpZVJl
ZiBjb29raWUgPSAoQ0ZIVFRQQ29va2llUmVmKUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgodW5maWx0
ZXJlZENvb2tpZXMsIGkpOworICAgICAgICAKKyAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzU2
MzI4ODM+IENGSFRUUENvb2tpZVN0b3JhZ2Ugd291bGQgc3RvcmUgYW4gZW1wdHkgY29va2llLAor
ICAgICAgICAvLyB3aGljaCB3b3VsZCBiZSBzZW50IGFzICJDb29raWU6ID0iLiBXZSBoYXZlIGEg
d29ya2Fyb3VuZCBpbiBzZXRDb29raWVzKCkgdG8gcHJldmVudAorICAgICAgICAvLyB0aGF0LCBi
dXQgd2UgYWxzbyBuZWVkIHRvIGF2b2lkIHNlbmRpbmcgY29va2llcyB0aGF0IHdlcmUgcHJldmlv
dXNseSBzdG9yZWQsIGFuZAorICAgICAgICAvLyB0aGVyZSdzIG5vIGhhcm0gdG8gZG9pbmcgdGhp
cyBjaGVjayBiZWNhdXNlIHN1Y2ggYSBjb29raWUgaXMgbmV2ZXIgdmFsaWQuCisgICAgICAgIGlm
ICghQ0ZTdHJpbmdHZXRMZW5ndGgoY29va2llTmFtZShjb29raWUpLmdldCgpKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgaWYgKENGSFRUUENvb2tpZUlzSFRUUE9u
bHkoY29va2llKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgQ0ZB
cnJheUFwcGVuZFZhbHVlKGZpbHRlcmVkQ29va2llcy5nZXQoKSwgY29va2llKTsKKyAgICB9Cisg
ICAgcmV0dXJuIGZpbHRlcmVkQ29va2llczsKK30KKworc3RhdGljIFJldGFpblB0cjxDRkFycmF5
UmVmPiBjb3B5Q29va2llc0ZvclVSTFdpdGhGaXJzdFBhcnR5VVJMKGNvbnN0IE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVy
bCwgSW5jbHVkZVNlY3VyZUNvb2tpZXMgaW5jbHVkZVNlY3VyZUNvb2tpZXMpCit7CisgICAgYm9v
bCBzZWN1cmUgPSBpbmNsdWRlU2VjdXJlQ29va2llcyA9PSBJbmNsdWRlU2VjdXJlQ29va2llczo6
WWVzOworICAgIAorICAgIEFTU0VSVCghc2VjdXJlIHx8IChzZWN1cmUgJiYgdXJsLnByb3RvY29s
SXMoImh0dHBzIikpKTsKKyAgICAKKyAgICBVTlVTRURfUEFSQU0oZmlyc3RQYXJ0eSk7CisgICAg
cmV0dXJuIGFkb3B0Q0YoQ0ZIVFRQQ29va2llU3RvcmFnZUNvcHlDb29raWVzRm9yVVJMKHNlc3Np
b24uY29va2llU3RvcmFnZSgpLmdldCgpLCB1cmwuY3JlYXRlQ0ZVUkwoKS5nZXQoKSwgc2VjdXJl
KSk7Cit9CisKK3N0YXRpYyBDRkFycmF5UmVmIGNyZWF0ZUNvb2tpZXMoQ0ZEaWN0aW9uYXJ5UmVm
IGhlYWRlckZpZWxkcywgQ0ZVUkxSZWYgdXJsKQoreworICAgIENGQXJyYXlSZWYgcGFyc2VkQ29v
a2llcyA9IENGSFRUUENvb2tpZUNyZWF0ZVdpdGhSZXNwb25zZUhlYWRlckZpZWxkcyhrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBoZWFkZXJGaWVsZHMsIHVybCk7CisgICAgaWYgKCFwYXJzZWRDb29raWVz
KQorICAgICAgICBwYXJzZWRDb29raWVzID0gQ0ZBcnJheUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCAwLCAwLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKTsKKyAgICAKKyAgICByZXR1cm4gcGFy
c2VkQ29va2llczsKK30KKwordm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnNldENvb2tpZXNG
cm9tRE9NKGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgU2FtZVNpdGVJbmZvJiwgY29uc3Qg
VVJMJiB1cmwsIE9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBPcHRpb25hbDx1aW50NjRfdD4g
cGFnZUlELCBjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdAoreworICAgIFVOVVNFRF9QQVJBTShm
cmFtZUlEKTsKKyAgICBVTlVTRURfUEFSQU0ocGFnZUlEKTsKKyAgICAvLyA8cmRhcjovL3Byb2Js
ZW0vNTYzMjg4Mz4gQ0ZIVFRQQ29va2llU3RvcmFnZSBzdG9yZXMgYW4gZW1wdHkgY29va2llLCB3
aGljaCB3b3VsZCBiZSBzZW50IGFzICJDb29raWU6ID0iLgorICAgIGlmICh2YWx1ZS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybENG
ID0gdXJsLmNyZWF0ZUNGVVJMKCk7CisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBmaXJzdFBhcnR5
Rm9yQ29va2llc0NGID0gZmlyc3RQYXJ0eS5jcmVhdGVDRlVSTCgpOworICAgIAorICAgIC8vIDxo
dHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTMxPiwgPHJkYXI6Ly80NDA5
MDM0PgorICAgIC8vIGNvb2tpZXNXaXRoUmVzcG9uc2VIZWFkZXJGaWVsZHMgZG9lc24ndCBwYXJz
ZSBjb29raWVzIHdpdGhvdXQgYSB2YWx1ZQorICAgIFN0cmluZyBjb29raWVTdHJpbmcgPSB2YWx1
ZS5jb250YWlucygnPScpID8gdmFsdWUgOiB2YWx1ZSArICI9IjsKKyAgICAKKyAgICBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IGNvb2tpZVN0cmluZ0NGID0gY29va2llU3RyaW5nLmNyZWF0ZUNGU3Ry
aW5nKCk7CisgICAgYXV0byBjb29raWVTdHJpbmdDRlB0ciA9IGNvb2tpZVN0cmluZ0NGLmdldCgp
OworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGhlYWRlckZpZWxkc0NGID0gYWRvcHRD
RihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwKKyAgICAgICAgKGNvbnN0
IHZvaWQqKikmc19zZXRDb29raWVLZXlDRiwgKGNvbnN0IHZvaWQqKikmY29va2llU3RyaW5nQ0ZQ
dHIsIDEsCisgICAgICAgICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVE
aWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZBcnJheVJl
Zj4gdW5maWx0ZXJlZENvb2tpZXMgPSBhZG9wdENGKGNyZWF0ZUNvb2tpZXMoaGVhZGVyRmllbGRz
Q0YuZ2V0KCksIHVybENGLmdldCgpKSk7CisgICAgQ0ZIVFRQQ29va2llU3RvcmFnZVNldENvb2tp
ZXMoY29va2llU3RvcmFnZSgpLmdldCgpLCBmaWx0ZXJDb29raWVzKHVuZmlsdGVyZWRDb29raWVz
LmdldCgpKS5nZXQoKSwgdXJsQ0YuZ2V0KCksIGZpcnN0UGFydHlGb3JDb29raWVzQ0YuZ2V0KCkp
OworfQorCitzdGF0aWMgYm9vbCBjb250YWluc1NlY3VyZUNvb2tpZXMoQ0ZBcnJheVJlZiBjb29r
aWVzKQoreworICAgIENGSW5kZXggY29va2llQ291bnQgPSBDRkFycmF5R2V0Q291bnQoY29va2ll
cyk7CisgICAgd2hpbGUgKGNvb2tpZUNvdW50LS0pIHsKKyAgICAgICAgaWYgKENGSFRUUENvb2tp
ZUlzU2VjdXJlKGNoZWNrZWRfY2ZfY2FzdDxDRkhUVFBDb29raWVSZWY+KENGQXJyYXlHZXRWYWx1
ZUF0SW5kZXgoY29va2llcywgY29va2llQ291bnQpKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGQ6OnBhaXI8U3RyaW5n
LCBib29sPiBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZXNGb3JET00oY29uc3QgVVJMJiBm
aXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBVUkwmIHVybCwgT3B0aW9uYWw8
dWludDY0X3Q+IGZyYW1lSUQsIE9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1
cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzKSBjb25zdAoreworICAgIFVOVVNFRF9QQVJB
TShmcmFtZUlEKTsKKyAgICBVTlVTRURfUEFSQU0ocGFnZUlEKTsKKyAgICBSZXRhaW5QdHI8Q0ZB
cnJheVJlZj4gY29va2llc0NGID0gY29weUNvb2tpZXNGb3JVUkxXaXRoRmlyc3RQYXJ0eVVSTCgq
dGhpcywgZmlyc3RQYXJ0eSwgdXJsLCBpbmNsdWRlU2VjdXJlQ29va2llcyk7CisgICAgCisgICAg
YXV0byBmaWx0ZXJlZENvb2tpZXMgPSBmaWx0ZXJDb29raWVzKGNvb2tpZXNDRi5nZXQoKSk7Cisg
ICAgCisgICAgYm9vbCBkaWRBY2Nlc3NTZWN1cmVDb29raWVzID0gY29udGFpbnNTZWN1cmVDb29r
aWVzKGZpbHRlcmVkQ29va2llcy5nZXQoKSk7CisgICAgCisgICAgUmV0YWluUHRyPENGRGljdGlv
bmFyeVJlZj4gaGVhZGVyQ0YgPSBhZG9wdENGKENGSFRUUENvb2tpZUNvcHlSZXF1ZXN0SGVhZGVy
RmllbGRzKGtDRkFsbG9jYXRvckRlZmF1bHQsIGZpbHRlcmVkQ29va2llcy5nZXQoKSkpOworICAg
IFN0cmluZyBjb29raWVTdHJpbmcgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGRGlj
dGlvbmFyeUdldFZhbHVlKGhlYWRlckNGLmdldCgpLCBzX2Nvb2tpZUNGKSk7CisgICAgcmV0dXJu
IHsgY29va2llU3RyaW5nLCBkaWRBY2Nlc3NTZWN1cmVDb29raWVzIH07Cit9CisKK3N0ZDo6cGFp
cjxTdHJpbmcsIGJvb2w+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBj
b25zdCBVUkwmIHVybCwgT3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIE9wdGlvbmFsPHVpbnQ2
NF90PiBwYWdlSUQsIEluY2x1ZGVTZWN1cmVDb29raWVzIGluY2x1ZGVTZWN1cmVDb29raWVzKSBj
b25zdAoreworICAgIFVOVVNFRF9QQVJBTShmcmFtZUlEKTsKKyAgICBVTlVTRURfUEFSQU0ocGFn
ZUlEKTsKKyAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY29va2llc0NGID0gY29weUNvb2tpZXNG
b3JVUkxXaXRoRmlyc3RQYXJ0eVVSTCgqdGhpcywgZmlyc3RQYXJ0eSwgdXJsLCBpbmNsdWRlU2Vj
dXJlQ29va2llcyk7CisgICAgCisgICAgYm9vbCBkaWRBY2Nlc3NTZWN1cmVDb29raWVzID0gY29u
dGFpbnNTZWN1cmVDb29raWVzKGNvb2tpZXNDRi5nZXQoKSk7CisgICAgCisgICAgUmV0YWluUHRy
PENGRGljdGlvbmFyeVJlZj4gaGVhZGVyQ0YgPSBhZG9wdENGKENGSFRUUENvb2tpZUNvcHlSZXF1
ZXN0SGVhZGVyRmllbGRzKGtDRkFsbG9jYXRvckRlZmF1bHQsIGNvb2tpZXNDRi5nZXQoKSkpOwor
ICAgIFN0cmluZyBjb29raWVTdHJpbmcgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENG
RGljdGlvbmFyeUdldFZhbHVlKGhlYWRlckNGLmdldCgpLCBzX2Nvb2tpZUNGKSk7CisgICAgcmV0
dXJuIHsgY29va2llU3RyaW5nLCBkaWRBY2Nlc3NTZWN1cmVDb29raWVzIH07Cit9CisKK3N0ZDo6
cGFpcjxTdHJpbmcsIGJvb2w+IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llUmVxdWVzdEhl
YWRlckZpZWxkVmFsdWUoY29uc3QgQ29va2llUmVxdWVzdEhlYWRlckZpZWxkUHJveHkmIGhlYWRl
ckZpZWxkUHJveHkpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGhlYWRlckZpZWxkUHJveHkuZmlyc3RQYXJ0eSwgaGVhZGVyRmllbGRQcm94eS5zYW1l
U2l0ZUluZm8sIGhlYWRlckZpZWxkUHJveHkudXJsLCBoZWFkZXJGaWVsZFByb3h5LmZyYW1lSUQs
IGhlYWRlckZpZWxkUHJveHkucGFnZUlELCBoZWFkZXJGaWVsZFByb3h5LmluY2x1ZGVTZWN1cmVD
b29raWVzKTsKK30KKworYm9vbCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZXNFbmFibGVk
KCkgY29uc3QKK3sKKyAgICBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5IHBvbGljeSA9
IENGSFRUUENvb2tpZVN0b3JhZ2VHZXRDb29raWVBY2NlcHRQb2xpY3koY29va2llU3RvcmFnZSgp
LmdldCgpKTsKKyAgICByZXR1cm4gcG9saWN5ID09IENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQ
b2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbiB8fCBwb2xpY3kgPT0gQ0ZIVFRQQ29va2ll
U3RvcmFnZUFjY2VwdFBvbGljeUV4Y2x1c2l2ZWx5RnJvbU1haW5Eb2N1bWVudERvbWFpbiB8fCBw
b2xpY3kgPT0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeUFsd2F5czsKK30KKworYm9v
bCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmdldFJhd0Nvb2tpZXMoY29uc3QgVVJMJiBmaXJzdFBh
cnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBVUkwmIHVybCwgT3B0aW9uYWw8dWludDY0
X3Q+IGZyYW1lSUQsIE9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQsIFZlY3RvcjxDb29raWU+JiBy
YXdDb29raWVzKSBjb25zdAoreworICAgIFVOVVNFRF9QQVJBTShmcmFtZUlEKTsKKyAgICBVTlVT
RURfUEFSQU0ocGFnZUlEKTsKKyAgICByYXdDb29raWVzLmNsZWFyKCk7CisgICAgCisgICAgYXV0
byBpbmNsdWRlU2VjdXJlQ29va2llcyA9IHVybC5wcm90b2NvbElzKCJodHRwcyIpID8gSW5jbHVk
ZVNlY3VyZUNvb2tpZXM6OlllcyA6IEluY2x1ZGVTZWN1cmVDb29raWVzOjpObzsKKyAgICAKKyAg
ICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY29va2llc0NGID0gY29weUNvb2tpZXNGb3JVUkxXaXRo
Rmlyc3RQYXJ0eVVSTCgqdGhpcywgZmlyc3RQYXJ0eSwgdXJsLCBpbmNsdWRlU2VjdXJlQ29va2ll
cyk7CisgICAgCisgICAgQ0ZJbmRleCBjb3VudCA9IENGQXJyYXlHZXRDb3VudChjb29raWVzQ0Yu
Z2V0KCkpOworICAgIHJhd0Nvb2tpZXMucmVzZXJ2ZUNhcGFjaXR5KGNvdW50KTsKKyAgICAKKyAg
ICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIENGSFRUUENv
b2tpZVJlZiBjZkNvb2tpZSA9IGNoZWNrZWRfY2ZfY2FzdDxDRkhUVFBDb29raWVSZWY+KENGQXJy
YXlHZXRWYWx1ZUF0SW5kZXgoY29va2llc0NGLmdldCgpLCBpKSk7CisgICAgICAgIENvb2tpZSBj
b29raWU7CisgICAgICAgIGNvb2tpZS5uYW1lID0gY29va2llTmFtZShjZkNvb2tpZSkuZ2V0KCk7
CisgICAgICAgIGNvb2tpZS52YWx1ZSA9IGNvb2tpZVZhbHVlKGNmQ29va2llKS5nZXQoKTsKKyAg
ICAgICAgY29va2llLmRvbWFpbiA9IGNvb2tpZURvbWFpbihjZkNvb2tpZSkuZ2V0KCk7CisgICAg
ICAgIGNvb2tpZS5wYXRoID0gY29va2llUGF0aChjZkNvb2tpZSkuZ2V0KCk7CisgICAgICAgIGNv
b2tpZS5jcmVhdGVkID0gY29va2llQ3JlYXRlZFRpbWUoY2ZDb29raWUpOworICAgICAgICBjb29r
aWUuZXhwaXJlcyA9IGNvb2tpZUV4cGlyYXRpb25UaW1lKGNmQ29va2llKTsKKyAgICAgICAgY29v
a2llLmh0dHBPbmx5ID0gQ0ZIVFRQQ29va2llSXNIVFRQT25seShjZkNvb2tpZSk7CisgICAgICAg
IGNvb2tpZS5zZWN1cmUgPSBDRkhUVFBDb29raWVJc1NlY3VyZShjZkNvb2tpZSk7CisgICAgICAg
IGNvb2tpZS5zZXNzaW9uID0gZmFsc2U7IC8vIEZJWE1FOiBOZWVkIEFQSSBmb3IgaWYgYSBjb29r
aWUgaXMgYSBzZXNzaW9uIGNvb2tpZS4KKyAgICAgICAgcmF3Q29va2llcy51bmNoZWNrZWRBcHBl
bmQoV1RGTW92ZShjb29raWUpKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVDb29raWUoY29uc3QgVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKK3sKKyAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2ll
U3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IHRoaXMtPmNvb2tpZVN0b3JhZ2UoKTsKKyAgICAK
KyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybENGID0gdXJsLmNyZWF0ZUNGVVJMKCk7CisgICAg
CisgICAgYm9vbCBzZW5kU2VjdXJlQ29va2llcyA9IHVybC5wcm90b2NvbElzKCJodHRwcyIpOwor
ICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBjb29raWVzQ0YgPSBhZG9wdENGKENGSFRUUENvb2tp
ZVN0b3JhZ2VDb3B5Q29va2llc0ZvclVSTChjb29raWVTdG9yYWdlLmdldCgpLCB1cmxDRi5nZXQo
KSwgc2VuZFNlY3VyZUNvb2tpZXMpKTsKKyAgICAKKyAgICBDRkluZGV4IGNvdW50ID0gQ0ZBcnJh
eUdldENvdW50KGNvb2tpZXNDRi5nZXQoKSk7CisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykgeworICAgICAgICBDRkhUVFBDb29raWVSZWYgY29va2llID0gY2hlY2tlZF9j
Zl9jYXN0PENGSFRUUENvb2tpZVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChjb29raWVzQ0Yu
Z2V0KCksIGkpKTsKKyAgICAgICAgaWYgKFN0cmluZyhjb29raWVOYW1lKGNvb2tpZSkuZ2V0KCkp
ID09IG5hbWUpIHsKKyAgICAgICAgICAgIENGSFRUUENvb2tpZVN0b3JhZ2VEZWxldGVDb29raWUo
Y29va2llU3RvcmFnZS5nZXQoKSwgY29va2llKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Z2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit7CisgICAgUmV0YWluUHRy
PENGQXJyYXlSZWY+IGNvb2tpZXNDRiA9IGFkb3B0Q0YoQ0ZIVFRQQ29va2llU3RvcmFnZUNvcHlD
b29raWVzKGNvb2tpZVN0b3JhZ2UoKS5nZXQoKSkpOworICAgIGlmICghY29va2llc0NGKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgQ0ZJbmRleCBjb3VudCA9IENGQXJyYXlHZXRDb3VudChj
b29raWVzQ0YuZ2V0KCkpOworICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGNvdW50OyArK2kp
IHsKKyAgICAgICAgQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSA9IGNoZWNrZWRfY2ZfY2FzdDxDRkhU
VFBDb29raWVSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoY29va2llc0NGLmdldCgpLCBpKSk7
CisgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZG9tYWluID0gY29va2llRG9tYWluKGNv
b2tpZSk7CisgICAgICAgIGhvc3RuYW1lcy5hZGQoZG9tYWluLmdldCgpKTsKKyAgICB9Cit9CisK
K3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKCkKK3sKKyAgICBD
RkhUVFBDb29raWVTdG9yYWdlRGVsZXRlQWxsQ29va2llcyhjb29raWVTdG9yYWdlKCkuZ2V0KCkp
OworfQorCit2b2lkIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgaG9zdG5hbWVzKQoreworfQorCit2b2lkIE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoV2FsbFRpbWUp
Cit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="374883"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
      

    </bug>

</bugzilla>