<?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>214915</bug_id>
          
          <creation_ts>2020-07-29 03:39:30 -0700</creation_ts>
          <short_desc>[Curl][WinCairo] Remove deprecated cipher suites.</short_desc>
          <delta_ts>2022-11-17 00:41:17 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</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="Takashi Komori">takashi.komori</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>annulen</cc>
    
    <cc>basuke</cc>
    
    <cc>chris.reid</cc>
    
    <cc>darin</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>stephan.szabo</cc>
    
    <cc>takashi.komori</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1675940</commentid>
    <comment_count>0</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2020-07-29 03:39:30 -0700</bug_when>
    <thetext>In WinCairo port some deprecated cipher suites are enabled.
We remove those cipher suites and enable stronger algorithms, for reducing handshake time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676272</commentid>
    <comment_count>1</comment_count>
      <attachid>405537</attachid>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2020-07-29 18:06:07 -0700</bug_when>
    <thetext>Created attachment 405537
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676530</commentid>
    <comment_count>2</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2020-07-30 13:48:35 -0700</bug_when>
    <thetext>Looks good to me.

If possible, can you point the default set of ciphers libcurl uses? It is not clear which cipher suites are removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676773</commentid>
    <comment_count>3</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2020-07-31 02:19:30 -0700</bug_when>
    <thetext>(In reply to Basuke Suzuki from comment #2)
&gt; Looks good to me.
&gt; 
&gt; If possible, can you point the default set of ciphers libcurl uses? It is
&gt; not clear which cipher suites are removed.

In WinCairo port cipher suites below are enabled.

AES_128_GCM_SHA256
CHACHA20_POLY1305_SHA256
AES_256_GCM_SHA384
ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
ECDHE_RSA_WITH_AES_128_GCM_SHA256
ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
ECDHE_RSA_WITH_AES_256_GCM_SHA384
ECDHE_ECDSA_WITH_AES_256_CBC_SHA
ECDHE_ECDSA_WITH_AES_128_CBC_SHA
ECDHE_RSA_WITH_AES_128_CBC_SHA
ECDHE_RSA_WITH_AES_256_CBC_SHA
DHE_RSA_WITH_AES_128_CBC_SHA
DHE_RSA_WITH_AES_256_CBC_SHA
RSA_WITH_AES_128_CBC_SHA
RSA_WITH_AES_256_CBC_SHA
RSA_WITH_3DES_EDE_CBC_SHA</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676775</commentid>
    <comment_count>4</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2020-07-31 02:19:57 -0700</bug_when>
    <thetext>Cipher suites below are disabled.

RSA_WITH_RC4_128_MD5
RSA_WITH_RC4_128_SHA
DHE_RSA_WITH_3DES_EDE_CBC_SHA
RSA_WITH_AES_128_CBC_SHA256
RSA_WITH_AES_256_CBC_SHA256
RSA_WITH_CAMELLIA_128_CBC_SHA
DHE_RSA_WITH_CAMELLIA_128_CBC_SHA
DHE_RSA_WITH_AES_128_CBC_SHA256
DHE_RSA_WITH_AES_256_CBC_SHA256
GOSTR341001_WITH_28147_CNT_IMIT
RSA_WITH_CAMELLIA_256_CBC_SHA
DHE_RSA_WITH_CAMELLIA_256_CBC_SHA
DHE_RSA_WITH_AES_128_GCM_SHA256
RSA_WITH_AES_128_GCM_SHA256
RSA_WITH_AES_256_GCM_SHA384
DHE_RSA_WITH_AES_256_GCM_SHA384
RSA_WITH_CAMELLIA_128_CBC_SHA256
DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256
RSA_WITH_CAMELLIA_256_CBC_SHA256
DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256
ECDHE_ECDSA_WITH_RC4_128_SHA
ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
ECDHE_RSA_WITH_RC4_128_SHA
ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
ECDHE_RSA_WITH_AES_128_CBC_SHA256
ECDHE_RSA_WITH_AES_256_CBC_SHA384
DHE_RAS_WITH_CHACHA20_POLY1305_SHA256</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676776</commentid>
    <comment_count>5</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2020-07-31 02:24:31 -0700</bug_when>
    <thetext>Default cipher suites for curl before applying the patch are suites summed up　enabled and disabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679536</commentid>
    <comment_count>6</comment_count>
      <attachid>405537</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-08-11 13:47:51 -0700</bug_when>
    <thetext>Comment on attachment 405537
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=405537&amp;action=review

&gt; Tools/ChangeLog:11
&gt; +        For testing enabled/diabled ciphers we added HTTPServer.cpp which uses TCPServer.cpp

Bug 215379 is going to land HTTPServer as a separate patch. Let&apos;s redo this patch after Bug 215379.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1913093</commentid>
    <comment_count>7</comment_count>
    <who name="Kenji Shukuwa">kenji.shukuwa</who>
    <bug_when>2022-11-16 22:19:18 -0800</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/6582</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1913117</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-11-17 00:40:38 -0800</bug_when>
    <thetext>Committed 256775@main (597ffc8de927): &lt;https://commits.webkit.org/256775@main&gt;

Reviewed commits have been landed. Closing PR #6582 and removing active labels.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1913118</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-11-17 00:41:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/102455626&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405537</attachid>
            <date>2020-07-29 18:06:07 -0700</date>
            <delta_ts>2020-08-11 13:47:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214915-20200730095834.patch</filename>
            <type>text/plain</type>
            <size>61036</size>
            <attacher name="Takashi Komori">takashi.komori</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0OTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjY2NmQxMTA2YmI2NTY3
NmVlMzNiNWM1NjgwNjVjMGRmN2Q3MzFkZS4uMzZkOThhNjdlZTBhNDQwNDE4ZTg3ZTkxMzI2NTZh
NTVjYzNiYmQ1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDIwLTA3LTI5ICBUYWth
c2hpIEtvbW9yaSAgPFRha2FzaGkuS29tb3JpQHNvbnkuY29tPgorCisgICAgICAgIFtDdXJsXVtX
aW5DYWlyb10gUmVtb3ZlIGRlcHJlY2F0ZWQgY2lwaGVyIHN1aXRlcy4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDkxNQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSBkZXByZWNhdGVkIGNpcGhl
ciBzdWl0ZXMgYW5kIGVuYWJsZSBjaXBoZXJzIGluIEN1cmxTU0xIYW5kbGVXaW4uY3BwCisgICAg
ICAgIFRoaXMgY2hhbmdlIGFpbXMgdG8gcmVkdWNlIHRoZSB0aW1lIGNvc3VtcHRpb24gb2YgVExT
IGhhbmRzaGFrZS4KKworICAgICAgICBGb3IgdGVzdGluZyBlbmFibGVkL2RpYWJsZWQgY2lwaGVy
cyB3ZSBhZGRlZCBIVFRQU2VydmVyLmNwcCB3aGljaCB1c2VzIFRDUFNlcnZlci5jcHAKKyAgICAg
ICAgVGhlIGFkZGVkIHRlc3RzIGluIGNlcnRpZmljYXRlcy5jcHAgdHJ5IHRvIGNvbm5lY3QgSFRU
UFNlcnZlciBidXQgdGhlIGNvbm5lY3Rpb25zIGZhaWwgYmVjYXVzZSB0aGUgY2VydHMgd2hpY2gg
dGhlIHNlcnZlciBwcm92aWRlcyBhcmUgc2VsZiBzaWduZWQuCisgICAgICAgIEFsdGhvdWdoIHdl
IGNhbiBub3QgY29ubmVjdCB0aGUgc2V2ZXIsIHdlIGNhbiBjaGVjayBpZiBlbmFibGVkL2Rpc2Fi
bGVkIGNpcGhlcnMgaXMgd29ya2luZyBjb3JyZWN0bHkgb3Igbm90IGJ5IGNoZWNraW5nIGVycm9y
IGNvZGUuCisKKyAgICAgICAgQVBJIHRlc3RzOiBDdXJsLkNlcnRpZmljYXRlQVBJCisgICAgICAg
ICAgICAgICAgICAgQ3VybC5DaXBoZXJTdWl0ZXNFQ0RIRV9FQ0RTQV9BRVNfMjU2X0dDTV9TSEEz
ODQKKyAgICAgICAgICAgICAgICAgICBDdXJsLkNpcGhlclN1aXRlc0VDREhFX1JTQV9BRVNfMTI4
X0NCQ19TSEEKKyAgICAgICAgICAgICAgICAgICBDdXJsLkNpcGhlclN1aXRlc0VDREhFX0VDRFNB
X1JDNF8xMjhfU0hBCisgICAgICAgICAgICAgICAgICAgQ3VybC5DaXBoZXJTdWl0ZXNSU0FfQUVT
XzEyOF9DQkNfU0hBMjU2CisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9DdXJsU1NM
SGFuZGxlV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTU0xIYW5kbGU6OnBsYXRmb3Jt
SW5pdGlhbGl6ZSk6CisKIDIwMjAtMDctMjcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5z
ZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBOdWxsIGNoZWNrIGlubGluZVN0eWxlIGluIFN0eWxl
ZEVsZW1lbnQ6OmludmFsaWRhdGVTdHlsZUF0dHJpYnV0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vQ3VybFNTTEhhbmRsZVdpbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9DdXJsU1NMSGFuZGxlV2luLmNwcAppbmRleCA0
N2M4OGJhZDk0ODc5MmU3YzQ0MTYyYWExNjUwNjIxZTVkMWY0YzAyLi5iOGMxMzk3NTFmMzgxNmY5
M2E5YzIxZTU2NzIwNDZkZDc1NGEyYjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3dpbi9DdXJsU1NMSGFuZGxlV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9DdXJsU1NMSGFuZGxlV2luLmNwcApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5t
ZW50IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFp
bm1lbnQgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OSw5ICs1OSwz
OCBAQCBzdGF0aWMgU3RyaW5nIGdldENBQ2VydFBhdGhFbnYoKQogCiB2b2lkIEN1cmxTU0xIYW5k
bGU6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiB7CisgICAgY29uc3QgY2hhciogY29uc3QgY2lwaGVy
TGlzdCA9CisgICAgICAgICJUTFNfQUVTXzEyOF9HQ01fU0hBMjU2OiIKKyAgICAgICAgIlRMU19D
SEFDSEEyMF9QT0xZMTMwNV9TSEEyNTY6IgorICAgICAgICAiVExTX0FFU18yNTZfR0NNX1NIQTM4
NDoiCisgICAgICAgICJFQ0RIRS1FQ0RTQS1BRVMxMjgtR0NNLVNIQTI1NjoiCisgICAgICAgICJF
Q0RIRS1SU0EtQUVTMTI4LUdDTS1TSEEyNTY6IgorICAgICAgICAiRUNESEUtRUNEU0EtQ0hBQ0hB
MjAtUE9MWTEzMDU6IgorICAgICAgICAiRUNESEUtUlNBLUNIQUNIQTIwLVBPTFkxMzA1OiIKKyAg
ICAgICAgIkVDREhFLUVDRFNBLUFFUzI1Ni1HQ00tU0hBMzg0OiIKKyAgICAgICAgIkVDREhFLVJT
QS1BRVMyNTYtR0NNLVNIQTM4NDoiCisgICAgICAgICJFQ0RIRS1FQ0RTQS1BRVMyNTYtU0hBOiIK
KyAgICAgICAgIkVDREhFLUVDRFNBLUFFUzEyOC1TSEE6IgorICAgICAgICAiRUNESEUtUlNBLUFF
UzEyOC1TSEE6IgorICAgICAgICAiRUNESEUtUlNBLUFFUzI1Ni1TSEE6IgorICAgICAgICAiREhF
LVJTQS1BRVMxMjgtU0hBOiIKKyAgICAgICAgIkRIRS1SU0EtQUVTMjU2LVNIQToiCisgICAgICAg
ICJBRVMxMjgtU0hBOiIKKyAgICAgICAgIkFFUzI1Ni1TSEE6IgorICAgICAgICAiREVTLUNCQzMt
U0hBIjsKKworICAgIGNvbnN0IGNoYXIqIGNvbnN0IGN1cnZlc0xpc3QgPQorICAgICAgICAiWDI1
NTE5OiIKKyAgICAgICAgIlAtMjU2OiIKKyAgICAgICAgIlAtMzg0OiIKKyAgICAgICAgIlAtNTIx
IjsKKwogICAgIGF1dG8gY2FDZXJ0UGF0aCA9IGdldENBQ2VydFBhdGhFbnYoKTsKICAgICBpZiAo
IWNhQ2VydFBhdGguaXNFbXB0eSgpKQogICAgICAgICBzZXRDQUNlcnRQYXRoKFdURk1vdmUoY2FD
ZXJ0UGF0aCkpOworCisgICAgc2V0Q2lwaGVyTGlzdChjaXBoZXJMaXN0KTsKKyAgICBzZXRDdXJ2
ZXNMaXN0KGN1cnZlc0xpc3QpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYmU0M2UyZTBlYzJmZTVhNWFjODdjMTZjNDQ0NzYxMzQw
YThlMGEwZC4uZmM4OWE5NDg5N2ViMjkxMmE3MjRiM2UwODg5ZjcwMjU0MDZlMGVmOCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgy
IEBACisyMDIwLTA3LTI5ICBUYWthc2hpIEtvbW9yaSAgPFRha2FzaGkuS29tb3JpQHNvbnkuY29t
PgorCisgICAgICAgIFtDdXJsXVtXaW5DYWlyb10gUmVtb3ZlIGRlcHJlY2F0ZWQgY2lwaGVyIHN1
aXRlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
NDkxNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
bW92ZSBkZXByZWNhdGVkIGNpcGhlciBzdWl0ZXMgYW5kIGVuYWJsZSBjaXBoZXJzIGluIEN1cmxT
U0xIYW5kbGVXaW4uY3BwCisgICAgICAgIFRoaXMgY2hhbmdlIGFpbXMgdG8gcmVkdWNlIHRoZSB0
aW1lIGNvc3VtcHRpb24gb2YgVExTIGhhbmRzaGFrZS4KKworICAgICAgICBGb3IgdGVzdGluZyBl
bmFibGVkL2RpYWJsZWQgY2lwaGVycyB3ZSBhZGRlZCBIVFRQU2VydmVyLmNwcCB3aGljaCB1c2Vz
IFRDUFNlcnZlci5jcHAKKyAgICAgICAgVGhlIGFkZGVkIHRlc3RzIGluIGNlcnRpZmljYXRlcy5j
cHAgdHJ5IHRvIGNvbm5lY3QgSFRUUFNlcnZlciBidXQgdGhlIGNvbm5lY3Rpb25zIGZhaWwgYmVj
YXVzZSB0aGUgY2VydHMgd2hpY2ggdGhlIHNlcnZlciBwcm92aWRlcyBhcmUgc2VsZiBzaWduZWQu
CisgICAgICAgIEFsdGhvdWdoIHdlIGNhbiBub3QgY29ubmVjdCB0aGUgc2V2ZXIsIHdlIGNhbiBj
aGVjayBpZiBlbmFibGVkL2Rpc2FibGVkIGNpcGhlcnMgaXMgd29ya2luZyBjb3JyZWN0bHkgb3Ig
bm90IGJ5IGNoZWNraW5nIGVycm9yIGNvZGUuCisKKyAgICAgICAgQVBJIHRlc3RzOiBDdXJsLkNl
cnRpZmljYXRlQVBJCisgICAgICAgICAgICAgICAgICAgQ3VybC5DaXBoZXJTdWl0ZXNFQ0RIRV9F
Q0RTQV9BRVNfMjU2X0dDTV9TSEEzODQKKyAgICAgICAgICAgICAgICAgICBDdXJsLkNpcGhlclN1
aXRlc0VDREhFX1JTQV9BRVNfMTI4X0NCQ19TSEEKKyAgICAgICAgICAgICAgICAgICBDdXJsLkNp
cGhlclN1aXRlc0VDREhFX0VDRFNBX1JDNF8xMjhfU0hBCisgICAgICAgICAgICAgICAgICAgQ3Vy
bC5DaXBoZXJTdWl0ZXNSU0FfQUVTXzEyOF9DQkNfU0hBMjU2CisKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1BsYXRmb3JtU29ja2V0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvd2luL0N1cmxTU0xIYW5kbGVXaW4uY3BwLgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvUGxhdGZvcm1Tb2NrZXRQT1NJWC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvd2luL0N1cmxTU0xIYW5kbGVXaW4uY3BwLgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6U29ja2V0Ojppbml0aWFsaXplKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OlNvY2tldDo6c29ja2V0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNvY2tldDo6aXNWYWxp
ZFNvY2tldCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OmFjY2VwdCk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OnNodXRkb3duKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlNvY2tldDo6Y2xvc2UpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U29ja2V0Ojpy
ZWFkKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNvY2tldDo6d3JpdGUpOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvUGxhdGZvcm1XaW4uY21ha2U6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9Tb3VyY2VzLnR4dDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1RDUFNlcnZlci5jcHA6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpUQ1BTZXJ2ZXI6OlRDUFNlcnZlcik6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpUQ1BTZXJ2ZXI6OnN0YXJ0U2VjdXJlQ29ubmVjdGlvbik6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpUQ1BTZXJ2ZXI6Omxpc3RlbkZvckNvbm5lY3Rpb25zKToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OlRDUFNlcnZlcjo6flRDUFNlcnZlcik6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpUQ1BTZXJ2ZXI6OnN0b3ApOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VENQ
U2VydmVyOjpzb2NrZXRCaW5kTGlzdGVuKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRDUFNl
cnZlcjo6cmVhZCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUQ1BTZXJ2ZXI6OndyaXRlKToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRDUFNlcnZlcjo6cmVzcG9uZFdpdGhDaGFsbGVuZ2VU
aGVuT0spOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VENQU2VydmVyOjpkZWZhdWx0Q2VydGlm
aWNhdGUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VENQU2VydmVyOjpkZWZhdWx0UHJpdmF0
ZUtleSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUQ1BTZXJ2ZXI6OmNlcnRpZmljYXRlKToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRDUFNlcnZlcjo6cHJpdmF0ZUtleSk6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UQ1BTZXJ2ZXIuaDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdC9jdXJsL0NlcnRpZmljYXRlcy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpDdXJsOjpjcmVhdGVTdHJpbmcpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q3VybDo6Y2xl
YXJMb2FkaW5nU3RhdHVzKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkN1cmw6OmRpZEZpbmlz
aE5hdmlnYXRpb24pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q3VybDo6ZGlkRmFpbE5hdmln
YXRpb24pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q3VybDo6ZGlkUmVjZWl2ZUF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkN1cmw6OnNldFBhZ2VM
b2FkZXJDbGllbnQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q3VybDo6dGVzdENpcGhlclN1
aXRlcyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDdXJsOjpjZXJ0aWZpY2F0ZVJTQSk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpDdXJsOjpjZXJ0aWZpY2F0ZUVDQyk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpDdXJsOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1Byb3h5Lm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9jdXJsL0hUVFBTZXJ2ZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OkhUVFBTZXJ2ZXIpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6SFRUUFNlcnZlcjo6fkhUVFBTZXJ2ZXIpOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6SFRUUFNlcnZlcjo6dXJsIGNvbnN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkhU
VFBTZXJ2ZXI6OnBvcnQgY29uc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6c3RhdHVzVGV4
dCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjpyZXNwb25kVG9SZXF1ZXN0
cyk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9jdXJsL0hUVFBTZXJ2ZXIuaDogQWRkZWQuCisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjpIVFRQUmVzcG9uc2U6OkhUVFBSZXNw
b25zZSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS93aW4vUGxhdGZvcm1Tb2NrZXRXaW4uY3Bw
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9DdXJsU1NM
SGFuZGxlV2luLmNwcC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlNvY2tldDo6aW5pdGlhbGl6
ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OnNvY2tldCk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OmlzVmFsaWRTb2NrZXQpOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6U29ja2V0OjphY2NlcHQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6U29ja2V0Ojpz
aHV0ZG93bik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpTb2NrZXQ6OmNsb3NlKToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OlNvY2tldDo6cmVhZCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpTb2NrZXQ6OndyaXRlKToKKwogMjAyMC0wNy0yNyAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hz
aWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBEcmFnIGFuZCBkcm9wIGRvZXMgbm90IHBy
ZXNlcnZlIGZpbGUgbmFtZXMgdGhhdCBjb250YWluIHBlcmlvZHMKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1Tb2NrZXQuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxh
dGZvcm1Tb2NrZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZDFhYTA5YTY5NTE5ZDRlZWU2MWMxOTlhNTIwNjVh
ZmZiNzljNTcyCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9y
bVNvY2tldC5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29u
eSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBPUyhXSU5ET1dTKQorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZWxzZQorI2luY2x1
ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCituYW1lc3Bh
Y2UgVGVzdFdlYktpdEFQSSB7CituYW1lc3BhY2UgU29ja2V0IHsKKworI2lmIE9TKFdJTkRPV1Mp
Cit1c2luZyBTb2NrZXQgPSBTT0NLRVQ7CisjZWxzZQordXNpbmcgU29ja2V0ID0gaW50OworI2Rl
ZmluZSBTT0NLRVRfRVJST1IgLTEKKyNlbmRpZgorCit2b2lkIGluaXRpYWxpemUoKTsKK1NvY2tl
dCBzb2NrZXQoaW50IGRvbWFpbiwgaW50IHR5cGUsIGludCBwcm90b2NvbCk7Citib29sIGlzVmFs
aWRTb2NrZXQoU29ja2V0KTsKK1NvY2tldCBhY2NlcHQoU29ja2V0KTsKK2ludCBzaHV0ZG93bihT
b2NrZXQpOworaW50IGNsb3NlKFNvY2tldCk7CitpbnQgcmVhZChTb2NrZXQsIHZvaWQqIGJ1ZmZl
ciwgc2l6ZV90IGNvdW50KTsKK2ludCB3cml0ZShTb2NrZXQsIGNvbnN0IHZvaWQqIGJ1ZmZlciwg
c2l6ZV90IGNvdW50KTsKKworfSAvLyBuYW1lc3BhY2UgU29ja2V0Cit9IC8vIG5hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtU29j
a2V0UE9TSVguY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVNvY2tldFBPU0lYLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44NDI1NjgwN2YwN2RmYjhkZDc0ZDM4ZDkxZDE2ZGU2NjdiZjQ4OGU3Ci0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVNvY2tldFBPU0lY
LmNwcApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50
ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNvY2tldC5oIgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQ
SSB7CituYW1lc3BhY2UgU29ja2V0IHsKKwordm9pZCBpbml0aWFsaXplKCkKK3sKK30KKworU29j
a2V0IHNvY2tldChpbnQgZG9tYWluLCBpbnQgdHlwZSwgaW50IHByb3RvY29sKQoreworICAgIHJl
dHVybiA6OnNvY2tldChkb21haW4sIHR5cGUsIHByb3RvY29sKTsKK30KKworYm9vbCBpc1ZhbGlk
U29ja2V0KFNvY2tldCBzb2NrZXQpCit7CisgICAgcmV0dXJuIHNvY2tldCA+PSAwOworfQorCitT
b2NrZXQgYWNjZXB0KFNvY2tldCBzb2NrZXQpCit7CisgICAgcmV0dXJuIDo6YWNjZXB0KHNvY2tl
dCwgbnVsbHB0ciwgbnVsbHB0cik7Cit9CisKK2ludCBzaHV0ZG93bihTb2NrZXQgc29ja2V0KQor
eworICAgIHJldHVybiA6OnNodXRkb3duKHNvY2tldCwgU0hVVF9SRFdSKTsKK30KKworaW50IGNs
b3NlKFNvY2tldCBzb2NrZXQpCit7CisgICAgcmV0dXJuIDo6Y2xvc2Uoc29ja2V0KTsKK30KKwor
aW50IHJlYWQoU29ja2V0IHNvY2tldCwgdm9pZCogYnVmZmVyLCBzaXplX3QgY291bnQpCit7Cisg
ICAgcmV0dXJuIDo6cmVhZChzb2NrZXQsIGJ1ZmZlciwgY291bnQpOworfQorCitpbnQgd3JpdGUo
U29ja2V0IHNvY2tldCwgY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3QgY291bnQpCit7CisgICAg
cmV0dXJuIDo6d3JpdGUoc29ja2V0LCBidWZmZXIsIGNvdW50KTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgU29ja2V0Cit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2luLmNtYWtlIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9Q
bGF0Zm9ybVdpbi5jbWFrZQppbmRleCAzZDYxODAxNDVkZDM3ZDcyN2FlYjRmMzJmZjg1MzQ0MmNl
YjBlNThhLi42MzZmNzgwYjc5Njg0MWVhYWZkNzlmZWQ3ZThiNGU2ZTZmODQwNmQwIDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTEyNyw3ICsxMjcsOSBAQCBpZiAoRU5B
QkxFX1dFQktJVCkKIAogICAgIGxpc3QoQVBQRU5EIFRlc3RXZWJLaXRfU09VUkNFUwogICAgICAg
ICAke3Rlc3RfbWFpbl9TT1VSQ0VTfQorICAgICAgICBUQ1BTZXJ2ZXIuY3BwCiAKKyAgICAgICAg
d2luL1BsYXRmb3JtU29ja2V0V2luLmNwcAogICAgICAgICB3aW4vUGxhdGZvcm1VdGlsaXRpZXNX
aW4uY3BwCiAgICAgICAgIHdpbi9QbGF0Zm9ybVdlYlZpZXdXaW4uY3BwCiAgICAgICAgIHdpbi9V
dGlsaXRpZXNXaW4uY3BwCkBAIC0xMzUsNiArMTM3LDggQEAgaWYgKEVOQUJMRV9XRUJLSVQpCiAK
ICAgICBpZiAoJHtXVEZfUExBVEZPUk1fV0lOX0NBSVJPfSkKICAgICAgICAgbGlzdChBUFBFTkQg
VGVzdFdlYktpdF9TT1VSQ0VTCisgICAgICAgICAgICBjdXJsL0hUVFBTZXJ2ZXIuY3BwCisKICAg
ICAgICAgICAgIFRlc3RzL1dlYktpdC9jdXJsL0NlcnRpZmljYXRlcy5jcHAKICAgICAgICAgKQog
ICAgIGVuZGlmICgpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1NvdXJjZXMudHh0
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9Tb3VyY2VzLnR4dAppbmRleCBjM2FhNGJmMmYwNzMyZjRk
MGUwMzEzODYwOTQxMzgyYjg2ODUwNmExLi5lMTc5ZTUzODRhNjJiZWU3NjYxNDljNGU2MjY0YTU1
ZDYxYzc1MDkwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1NvdXJjZXMudHh0Cisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvU291cmNlcy50eHQKQEAgLTIyLDcgKzIyLDcgQEAKIC8v
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAogSmF2YVNjcmlwdFRlc3QuY3BwCitQ
bGF0Zm9ybVNvY2tldFBPU0lYLmNwcAogUGxhdGZvcm1VdGlsaXRpZXMuY3BwCiBUQ1BTZXJ2ZXIu
Y3BwCiBUZXN0c0NvbnRyb2xsZXIuY3BwCi0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVENQU2VydmVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVENQU2VydmVyLmNwcAppbmRl
eCA4MjRiYjAzMDcwNWM4MjExOGMwY2YxMjU5Njg5ZDczNTE4YjI3M2E0Li4yMTNlMjRjMWNkNWEw
ZDYyOWNjNDYyNDhkYjcxYTA2MThkODBiZGQzIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1RDUFNlcnZlci5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UQ1BTZXJ2ZXIuY3Bw
CkBAIC0yNiwxNCArMjYsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUQ1BT
ZXJ2ZXIuaCIKIAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNpbmNsdWRlIDx0aHJlYWQ+Ci0j
aW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvQmFzZTY0Lmg+CiAKLSNpZiBIQVZFKFNTTCkKLQorI2lmIEhBVkUoU1NMKSAmJiAh
VVNFKE9QRU5TU0wpCiAjZGVmaW5lIFNUQUNLX09GKHR5cGUpIHN0cnVjdCBzdGFja19zdF8jI3R5
cGUKIAogZXh0ZXJuICJDIiB7CkBAIC00Nyw3ICs0Myw2IEBAIGVudW0gc3NsX3ZlcmlmeV9yZXN1
bHRfdCB7CiBzdHJ1Y3QgQklPOwogc3RydWN0IENSWVBUT19CVUZGRVI7CiBzdHJ1Y3QgU1NMX0NU
WDsKLXN0cnVjdCBFVlBfUEtFWTsKIHN0cnVjdCBTU0xfTUVUSE9EOwogc3RydWN0IFNTTF9QUklW
QVRFX0tFWV9NRVRIT0Q7CiBzdHJ1Y3QgX1NUQUNLOwpAQCAtODEsNyArNzYsNiBAQCBjb25zdCBT
VEFDS19PRihDUllQVE9fQlVGRkVSKSAqU1NMX2dldDBfcGVlcl9jZXJ0aWZpY2F0ZXMoY29uc3Qg
U1NMKik7CiB2b2lkIFNTTF9DVFhfc2V0X21heF9wcm90b192ZXJzaW9uKFNTTF9DVFgqLCB1aW50
MTZfdCk7CiAjZGVmaW5lIFNTTF9WRVJJRllfUEVFUiAweDAxCiAjZGVmaW5lIFNTTF9WRVJJRllf
RkFJTF9JRl9OT19QRUVSX0NFUlQgMHgwMgotCiB9IC8vIGV4dGVybiAiQyIKIAogaW5saW5lIHNp
emVfdCBza19DUllQVE9fQlVGRkVSX251bShjb25zdCBTVEFDS19PRihDUllQVE9fQlVGRkVSKSAq
c2spIHsgcmV0dXJuIHNrX251bSgoY29uc3QgX1NUQUNLICopc2spOyB9CkBAIC05MSw3ICs4NSw2
IEBAIGlubGluZSBDUllQVE9fQlVGRkVSKiBza19DUllQVE9fQlVGRkVSX3ZhbHVlKGNvbnN0IFNU
QUNLX09GKENSWVBUT19CVUZGRVIpICpzaywKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAog
I2lmIEhBVkUoU1NMKQotdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBkZWxldGVyOwogdGVtcGxh
dGU8PiBzdHJ1Y3QgZGVsZXRlcjxCSU8+IHsKICAgICB2b2lkIG9wZXJhdG9yKCkoQklPKiBiaW8p
CiAgICAgewpAQCAtMTE2LDczICsxMDksNTEgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgZGVsZXRlcjxF
VlBfUEtFWT4gewogICAgICAgICBFVlBfUEtFWV9mcmVlKGtleSk7CiAgICAgfQogfTsKKyNpZiAh
VVNFKE9QRU5TU0wpCiB0ZW1wbGF0ZTw+IHN0cnVjdCBkZWxldGVyPENSWVBUT19CVUZGRVI+IHsK
ICAgICB2b2lkIG9wZXJhdG9yKCkoQ1JZUFRPX0JVRkZFUiogYnVmZmVyKQogICAgIHsKICAgICAg
ICAgQ1JZUFRPX0JVRkZFUl9mcmVlKGJ1ZmZlcik7CiAgICAgfQogfTsKLW5hbWVzcGFjZSBzc2wg
ewotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHVzaW5nIHVuaXF1ZV9wdHIgPSBzdGQ6OnVuaXF1ZV9w
dHI8VCwgZGVsZXRlcjxUPj47Ci19CisjZW5kaWYKICNlbmRpZiAvLyBIQVZFKFNTTCkKIAotVENQ
U2VydmVyOjpUQ1BTZXJ2ZXIoRnVuY3Rpb248dm9pZChTb2NrZXQpPiYmIGNvbm5lY3Rpb25IYW5k
bGVyLCBzaXplX3QgY29ubmVjdGlvbnMpCitUQ1BTZXJ2ZXI6OlRDUFNlcnZlcihGdW5jdGlvbjx2
b2lkKFNvY2tldDo6U29ja2V0KT4mJiBjb25uZWN0aW9uSGFuZGxlciwgc2l6ZV90IGNvbm5lY3Rp
b25zKQogICAgIDogbV9jb25uZWN0aW9uSGFuZGxlcihXVEZNb3ZlKGNvbm5lY3Rpb25IYW5kbGVy
KSkKIHsKKyAgICBTb2NrZXQ6OmluaXRpYWxpemUoKTsKICAgICBsaXN0ZW5Gb3JDb25uZWN0aW9u
cyhjb25uZWN0aW9ucyk7CiB9CiAKICNpZiBIQVZFKFNTTCkKLXZvaWQgVENQU2VydmVyOjpzdGFy
dFNlY3VyZUNvbm5lY3Rpb24oU29ja2V0IHNvY2tldCwgRnVuY3Rpb248dm9pZChTU0wqKT4mJiBz
ZWN1cmVDb25uZWN0aW9uSGFuZGxlciwgYm9vbCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUsIE9w
dGlvbmFsPHVpbnQxNl90PiBtYXhUTFNWZXJzaW9uKQordm9pZCBUQ1BTZXJ2ZXI6OnN0YXJ0U2Vj
dXJlQ29ubmVjdGlvbihTb2NrZXQ6OlNvY2tldCBzb2NrZXQsIEZ1bmN0aW9uPHZvaWQoU1NMKik+
JiYgc2VjdXJlQ29ubmVjdGlvbkhhbmRsZXIsIGJvb2wgcmVxdWVzdENsaWVudENlcnRpZmljYXRl
LCBPcHRpb25hbDx1aW50MTZfdD4gbWF4VExTVmVyc2lvbiwgT3B0aW9uYWw8U3RyaW5nPiBjaXBo
ZXJTdWl0ZXMsIE9wdGlvbmFsPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IHNlcnZlckNlcnRp
ZmljYXRlKQogeworICAgIGF1dG8gY2VydERFUiA9IGRlZmF1bHRDZXJ0aWZpY2F0ZSgpOworICAg
IGF1dG8gcGtleSA9IGRlZmF1bHRQcml2YXRlS2V5KCk7CisKICAgICBTU0xfbGlicmFyeV9pbml0
KCk7CiAKKyNpZiBVU0UoT1BFTlNTTCkKKyAgICBzc2w6OnVuaXF1ZV9wdHI8U1NMX0NUWD4gY3R4
KFNTTF9DVFhfbmV3KFNTTHYyM19tZXRob2QoKSkpOworCisgICAgaWYgKHNlcnZlckNlcnRpZmlj
YXRlKSB7CisgICAgICAgIGF1dG8gdG1wQ2VydCA9IGNlcnRpZmljYXRlKHNlcnZlckNlcnRpZmlj
YXRlLT5maXJzdCk7CisgICAgICAgIGF1dG8gdG1wUEtleSA9IHByaXZhdGVLZXkoc2VydmVyQ2Vy
dGlmaWNhdGUtPnNlY29uZCk7CisgICAgICAgIFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX0FTTjEo
Y3R4LmdldCgpLCB0bXBDZXJ0LnNpemUoKSwgdG1wQ2VydC5kYXRhKCkpOworICAgICAgICBTU0xf
Q1RYX3VzZV9Qcml2YXRlS2V5KGN0eC5nZXQoKSwgdG1wUEtleS5nZXQoKSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfQVNOMShjdHguZ2V0KCksIGNlcnRE
RVIuc2l6ZSgpLCBjZXJ0REVSLmRhdGEoKSk7CisgICAgICAgIFNTTF9DVFhfdXNlX1ByaXZhdGVL
ZXkoY3R4LmdldCgpLCBwa2V5LmdldCgpKTsKKyAgICB9CisgICAgaWYgKGNpcGhlclN1aXRlcykK
KyAgICAgICAgU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3QoY3R4LmdldCgpLCBjaXBoZXJTdWl0ZXMt
PmxhdGluMSgpLmRhdGEoKSk7CisjZWxzZQogICAgIHNzbDo6dW5pcXVlX3B0cjxTU0xfQ1RYPiBj
dHgoU1NMX0NUWF9uZXcoVExTX3dpdGhfYnVmZmVyc19tZXRob2QoKSkpOwotCi0gICAgLy8gVGhp
cyBpcyBhIHRlc3QgY2VydGlmaWNhdGUgZnJvbSBCb3JpbmdTU0wuCi0gICAgU3RyaW5nIGNlcnRQ
RU0oCi0gICAgIk1JSUNXRENDQWNHZ0F3SUJBZ0lKQVB1d1RDNnJFSnNNTUEwR0NTcUdTSWIzRFFF
QkJRVUFNRVV4Q3pBSkJnTlYiCi0gICAgIkJBWVRBa0ZWTVJNd0VRWURWUVFJREFwVGIyMWxMVk4w
WVhSbE1TRXdId1lEVlFRS0RCaEpiblJsY201bGRDQlgiCi0gICAgImFXUm5hWFJ6SUZCMGVTQk1k
R1F3SGhjTk1UUXdOREl6TWpBMU1EUXdXaGNOTVRjd05ESXlNakExTURRd1dqQkYiCi0gICAgIk1R
c3dDUVlEVlFRR0V3SkJWVEVUTUJFR0ExVUVDQXdLVTI5dFpTMVRkR0YwWlRFaE1COEdBMVVFQ2d3
WVNXNTAiCi0gICAgIlpYSnVaWFFnVjJsa1oybDBjeUJRZEhrZ1RIUmtNSUdmTUEwR0NTcUdTSWIz
RFFFQkFRVUFBNEdOQURDQmlRS0IiCi0gICAgImdRRFlLOGltTXVSaS8wM3owSzFaaTBXbnZmRkh2
d2xZZXlLOU5hNlhKWWFVb0lEQXRCOTJrV2RHTWRBUWhMY2kiCi0gICAgIkhuQWprWExJNlcxNU9v
VjNnQS9FbFJaMXhVcHhUTWhqUDZQeVk1d3FUNXI2eThGeGJpaUZLS0FuSG1VY3JnZlYiCi0gICAg
IlcyOHRRKzBya0xHTXJ5UnRydWtYT2dYQnY3Z2NybVU3RzFqQzJhN1dxbWVJOFFJREFRQUJvMUF3
VGpBZEJnTlYiCi0gICAgIkhRNEVGZ1FVaTNYVnJNc0l2ZzRmWmJmNlZyNXNwM1hhaGE4d0h3WURW
UjBqQkJnd0ZvQVVpM1hWck1zSXZnNGYiCi0gICAgIlpiZjZWcjVzcDNYYWhhOHdEQVlEVlIwVEJB
VXdBd0VCL3pBTkJna3Foa2lHOXcwQkFRVUZBQU9CZ1FBNzZIaHQiCi0gICAgImxkWTlhdmNUR1N3
YndvaXVJcXYwalRMMWZIRm56eTNSSE1MRGgrTHB2b2xjNURTclNKSENQNVd1SzBlZUpYaHIiCi0g
ICAgIlQ1b1FwSEw5ei9jQ0RMQUtDS1JhNHVWMGZoRWRPV0JxeVI5cDh5NWpKdHllNzJ0NkN1RlVW
NWlxY3BGNEJINGYiCi0gICAgImoyVk5Id3NTckp3a0Q0UVVHbFV0SDd2d25RbXlDRnhaTW1XQUpn
PT0iKTsKLSAgICBWZWN0b3I8dWludDhfdD4gY2VydERFUjsKLSAgICBiYXNlNjREZWNvZGUoY2Vy
dFBFTSwgY2VydERFUiwgV1RGOjpCYXNlNjREZWNvZGVPcHRpb25zOjpCYXNlNjREZWZhdWx0KTsK
ICAgICBzc2w6OnVuaXF1ZV9wdHI8Q1JZUFRPX0JVRkZFUj4gY2VydChDUllQVE9fQlVGRkVSX25l
dyhjZXJ0REVSLmRhdGEoKSwgY2VydERFUi5zaXplKCksIG51bGxwdHIpKTsKICAgICBBU1NFUlQo
Y2VydCk7CiAKLSAgICAvLyBUaGlzIGlzIGEgdGVzdCBrZXkgZnJvbSBCb3JpbmdTU0wuCi0gICAg
Y2hhciBrS2V5UEVNW10gPQotICAgICItLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tXG4i
Ci0gICAgIk1JSUNYZ0lCQUFLQmdRRFlLOGltTXVSaS8wM3owSzFaaTBXbnZmRkh2d2xZZXlLOU5h
NlhKWWFVb0lEQXRCOTJcbiIKLSAgICAia1dkR01kQVFoTGNpSG5BamtYTEk2VzE1T29WM2dBL0Vs
UloxeFVweFRNaGpQNlB5WTV3cVQ1cjZ5OEZ4YmlpRlxuIgotICAgICJLS0FuSG1VY3JnZlZXMjh0
USswcmtMR01yeVJ0cnVrWE9nWEJ2N2djcm1VN0cxakMyYTdXcW1lSThRSURBUUFCXG4iCi0gICAg
IkFvR0JBSUJ5MDlGZDRET3EvSWpwOEhlS3VDTUtUSHFUVzF4R0hzaExRNmp3VlYydldaSW45YUln
bURzdmtqQ2VcbiIKLSAgICAiaTZzc1p2bmJqVmN3elNvQnloak44WkNmL2kxNUhFQ1dERkZoNmd0
MFA1ejBNbkNod3pabXZhdFYvRlhDVDBqK1xuIgotICAgICJXbUdOQi9na2VoS2pHWExMY2pUYjZk
UllWSlNDWmhWdU9MTGNiV0lWMTBnZ2dKUUJBa0VBOFM4c0dlNGV6eXlaXG4iCi0gICAgIm00ZTly
OTVnNnM0M2tQcXRqNXJld1RzVXh0KzJuNGVWb2REK1pVbENVTFdWTkFGTGtZUlRCQ0FTbFNybTlY
aGpcbiIKLSAgICAiUXBtV0FISlVrUUpCQU9WelFkRlVhZXdMdGRPSm9QQ3RwWW9ZMXpkMjJlYWU4
VFFFbXBHT1IxMUw2a2J4TFFza1xuIgotICAgICJhTWx5L0RPbk9hYTgydHFBR1RkcURFWmdTTm1D
ZUtLa25tRUNRQXZwblk4R1VPVkF1YkdSNmMrVzkwaUJ1UUxqXG4iCi0gICAgIkx0RnAvOWloZDJ3
L1BvRHdySFphb1VZVmNUNFZTZkpRb2cvazdrakU0TVlYWVdMOGVFS2czV1RXUU5FQ1FRRGtcbiIK
LSAgICAiMTA0V2k5MVVtZDFQekYwaWpkMmpYT0VSSlUxd0VLZTZYTGtZWU5IV1FBZTVsNEo0TVdq
OU9keEZYQXhJdXVSL1xuIgotICAgICJ0ZkR3YnFrdGE0eGN1eDY3Ly9raEFrRUF2dlJYTEhUYWE2
VkZ6VGFpaU84U2FGc0hWM2xReVhPdE1yQnBCNWpkXG4iCi0gICAgIm1vWldnakh2QjJXOUNrbjdz
RHFzUEIrVTJ0eVgwam9EZFFFeXVpTUVDRFk4b1E9PVxuIgotICAgICItLS0tLUVORCBSU0EgUFJJ
VkFURSBLRVktLS0tLVxuIjsKLQotICAgIHNzbDo6dW5pcXVlX3B0cjxCSU8+IHByaXZhdGVLZXlC
SU8oQklPX25ld19tZW1fYnVmKGtLZXlQRU0sIHN0cmxlbihrS2V5UEVNKSkpOwotICAgIHNzbDo6
dW5pcXVlX3B0cjxFVlBfUEtFWT4gcHJpdmF0ZUtleShQRU1fcmVhZF9iaW9fUHJpdmF0ZUtleShw
cml2YXRlS2V5QklPLmdldCgpLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAgQVNT
RVJUKHByaXZhdGVLZXkpOwotCi0gICAgU1NMX0NUWF9zZXRfY2hhaW5fYW5kX2tleShjdHguZ2V0
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Q1JZUFRPX0JVRkZFUiAqY29uc3QgKj4oJmNlcnQpLCAxLCBw
cml2YXRlS2V5LmdldCgpLCBudWxscHRyKTsKKyAgICBTU0xfQ1RYX3NldF9jaGFpbl9hbmRfa2V5
KGN0eC5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxDUllQVE9fQlVGRkVSICpjb25zdCAqPigmY2Vy
dCksIDEsIHBrZXkuZ2V0KCksIG51bGxwdHIpOwogCiAgICAgaWYgKHJlcXVlc3RDbGllbnRDZXJ0
aWZpY2F0ZSkgewogICAgICAgICBTU0xfQ1RYX3NldF9jdXN0b21fdmVyaWZ5KGN0eC5nZXQoKSwg
U1NMX1ZFUklGWV9QRUVSIHwgU1NMX1ZFUklGWV9GQUlMX0lGX05PX1BFRVJfQ0VSVCwgW10gKFNT
TCogc3NsLCB1aW50OF90KikgLT4gc3NsX3ZlcmlmeV9yZXN1bHRfdCB7CkBAIC0xOTUsNiArMTY2
LDcgQEAgdm9pZCBUQ1BTZXJ2ZXI6OnN0YXJ0U2VjdXJlQ29ubmVjdGlvbihTb2NrZXQgc29ja2V0
LCBGdW5jdGlvbjx2b2lkKFNTTCopPiYmIHNlY3UKICAgICAgICAgICAgIHJldHVybiBzc2xfdmVy
aWZ5X29rOwogICAgICAgICB9KTsKICAgICB9CisjZW5kaWYKIAogICAgIGlmIChtYXhUTFNWZXJz
aW9uKQogICAgICAgICBTU0xfQ1RYX3NldF9tYXhfcHJvdG9fdmVyc2lvbihjdHguZ2V0KCksICpt
YXhUTFNWZXJzaW9uKTsKQEAgLTIwNywyNiArMTc5LDI3IEBAIHZvaWQgVENQU2VydmVyOjpzdGFy
dFNlY3VyZUNvbm5lY3Rpb24oU29ja2V0IHNvY2tldCwgRnVuY3Rpb248dm9pZChTU0wqKT4mJiBz
ZWN1CiAgICAgc2VjdXJlQ29ubmVjdGlvbkhhbmRsZXIoYWNjZXB0UmVzdWx0ID4gMCA/IHNzbC5n
ZXQoKSA6IG51bGxwdHIpOwogfTsKIAotVENQU2VydmVyOjpUQ1BTZXJ2ZXIoUHJvdG9jb2wgcHJv
dG9jb2wsIEZ1bmN0aW9uPHZvaWQoU1NMKik+JiYgc2VjdXJlQ29ubmVjdGlvbkhhbmRsZXIsIE9w
dGlvbmFsPHVpbnQxNl90PiBtYXhUTFNWZXJzaW9uLCBzaXplX3QgY29ubmVjdGlvbnMpCitUQ1BT
ZXJ2ZXI6OlRDUFNlcnZlcihQcm90b2NvbCBwcm90b2NvbCwgRnVuY3Rpb248dm9pZChTU0wqKT4m
JiBzZWN1cmVDb25uZWN0aW9uSGFuZGxlciwgT3B0aW9uYWw8dWludDE2X3Q+IG1heFRMU1ZlcnNp
b24sIHNpemVfdCBjb25uZWN0aW9ucywgT3B0aW9uYWw8U3RyaW5nPiBjaXBoZXJTdWl0ZXMsIE9w
dGlvbmFsPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IHNlcnZlckNlcnRpZmljYXRlKQogewor
ICAgIFNvY2tldDo6aW5pdGlhbGl6ZSgpOwogICAgIHN3aXRjaCAocHJvdG9jb2wpIHsKICAgICBj
YXNlIFByb3RvY29sOjpIVFRQUzoKICAgICBjYXNlIFByb3RvY29sOjpIVFRQU1dpdGhDbGllbnRD
ZXJ0aWZpY2F0ZVJlcXVlc3Q6Ci0gICAgICAgIG1fY29ubmVjdGlvbkhhbmRsZXIgPSBbc2VjdXJl
Q29ubmVjdGlvbkhhbmRsZXIgPSBXVEZNb3ZlKHNlY3VyZUNvbm5lY3Rpb25IYW5kbGVyKSwgcHJv
dG9jb2wsIG1heFRMU1ZlcnNpb25dIChTb2NrZXQgc29ja2V0KSBtdXRhYmxlIHsKLSAgICAgICAg
ICAgIHN0YXJ0U2VjdXJlQ29ubmVjdGlvbihzb2NrZXQsIFdURk1vdmUoc2VjdXJlQ29ubmVjdGlv
bkhhbmRsZXIpLCBwcm90b2NvbCA9PSBQcm90b2NvbDo6SFRUUFNXaXRoQ2xpZW50Q2VydGlmaWNh
dGVSZXF1ZXN0LCBtYXhUTFNWZXJzaW9uKTsKKyAgICAgICAgbV9jb25uZWN0aW9uSGFuZGxlciA9
IFt0aGlzLCBzZWN1cmVDb25uZWN0aW9uSGFuZGxlciA9IFdURk1vdmUoc2VjdXJlQ29ubmVjdGlv
bkhhbmRsZXIpLCBwcm90b2NvbCwgbWF4VExTVmVyc2lvbiwgY2lwaGVyU3VpdGVzID0gV1RGTW92
ZShjaXBoZXJTdWl0ZXMpLCBzZXJ2ZXJDZXJ0aWZpY2F0ZSA9IFdURk1vdmUoc2VydmVyQ2VydGlm
aWNhdGUpXSAoU29ja2V0OjpTb2NrZXQgc29ja2V0KSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHN0
YXJ0U2VjdXJlQ29ubmVjdGlvbihzb2NrZXQsIFdURk1vdmUoc2VjdXJlQ29ubmVjdGlvbkhhbmRs
ZXIpLCBwcm90b2NvbCA9PSBQcm90b2NvbDo6SFRUUFNXaXRoQ2xpZW50Q2VydGlmaWNhdGVSZXF1
ZXN0LCBtYXhUTFNWZXJzaW9uLCBjaXBoZXJTdWl0ZXMsIHNlcnZlckNlcnRpZmljYXRlKTsKICAg
ICAgICAgfTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQcm90b2NvbDo6SFRUUFNQcm94eToK
LSAgICAgICAgbV9jb25uZWN0aW9uSGFuZGxlciA9IFtzZWN1cmVDb25uZWN0aW9uSGFuZGxlciA9
IFdURk1vdmUoc2VjdXJlQ29ubmVjdGlvbkhhbmRsZXIpXSAoU29ja2V0IHNvY2tldCkgbXV0YWJs
ZSB7CisgICAgICAgIG1fY29ubmVjdGlvbkhhbmRsZXIgPSBbdGhpcywgc2VjdXJlQ29ubmVjdGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKHNlY3VyZUNvbm5lY3Rpb25IYW5kbGVyKV0gKFNvY2tldDo6U29j
a2V0IHNvY2tldCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBjaGFyIHJlYWRCdWZmZXJbMTAwMF07
Ci0gICAgICAgICAgICBhdXRvIGJ5dGVzUmVhZCA9IDo6cmVhZChzb2NrZXQsIHJlYWRCdWZmZXIs
IHNpemVvZihyZWFkQnVmZmVyKSk7CisgICAgICAgICAgICBhdXRvIGJ5dGVzUmVhZCA9IFNvY2tl
dDo6cmVhZChzb2NrZXQsIHJlYWRCdWZmZXIsIHNpemVvZihyZWFkQnVmZmVyKSk7CiAgICAgICAg
ICAgICBFWFBFQ1RfR1QoYnl0ZXNSZWFkLCAwKTsKICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHN0
YXRpY19jYXN0PHNpemVfdD4oYnl0ZXNSZWFkKSA8IHNpemVvZihyZWFkQnVmZmVyKSk7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlc3BvbnNlSGVhZGVyID0gIiIKICAg
ICAgICAgICAgICJIVFRQLzEuMSAyMDAgQ29ubmVjdGlvbiBFc3RhYmxpc2hlZFxyXG4iCiAgICAg
ICAgICAgICAiQ29ubmVjdGlvbjogY2xvc2VcclxuXHJcbiI7Ci0gICAgICAgICAgICBhdXRvIGJ5
dGVzV3JpdHRlbiA9IDo6d3JpdGUoc29ja2V0LCByZXNwb25zZUhlYWRlciwgc3RybGVuKHJlc3Bv
bnNlSGVhZGVyKSk7CisgICAgICAgICAgICBhdXRvIGJ5dGVzV3JpdHRlbiA9IFNvY2tldDo6d3Jp
dGUoc29ja2V0LCByZXNwb25zZUhlYWRlciwgc3RybGVuKHJlc3BvbnNlSGVhZGVyKSk7CiAgICAg
ICAgICAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PihieXRlc1dyaXR0ZW4pLCBzdHJs
ZW4ocmVzcG9uc2VIZWFkZXIpKTsKICAgICAgICAgICAgIHN0YXJ0U2VjdXJlQ29ubmVjdGlvbihz
b2NrZXQsIFdURk1vdmUoc2VjdXJlQ29ubmVjdGlvbkhhbmRsZXIpKTsKICAgICAgICAgfTsKQEAg
LTIzOCwzMiArMjExLDc3IEBAIFRDUFNlcnZlcjo6VENQU2VydmVyKFByb3RvY29sIHByb3RvY29s
LCBGdW5jdGlvbjx2b2lkKFNTTCopPiYmIHNlY3VyZUNvbm5lY3Rpb25ICiAKIHZvaWQgVENQU2Vy
dmVyOjpsaXN0ZW5Gb3JDb25uZWN0aW9ucyhzaXplX3QgY29ubmVjdGlvbnMpCiB7Ci0gICAgYXV0
byBsaXN0ZW5pbmdTb2NrZXQgPSBzb2NrZXRCaW5kTGlzdGVuKGNvbm5lY3Rpb25zKTsKLSAgICBB
U1NFUlQobGlzdGVuaW5nU29ja2V0KTsKLSAgICBtX2xpc3RlbmluZ1RocmVhZCA9IHN0ZDo6dGhy
ZWFkKFt0aGlzLCBsaXN0ZW5pbmdTb2NrZXQgPSAqbGlzdGVuaW5nU29ja2V0LCBjb25uZWN0aW9u
c10geworICAgIG1fbGlzdGVuaW5nU29ja2V0ID0gc29ja2V0QmluZExpc3Rlbihjb25uZWN0aW9u
cyk7CisgICAgQVNTRVJUKG1fbGlzdGVuaW5nU29ja2V0KTsKKworICAgIG1fcnVubmluZ0xpc3Rl
bmluZ1RocmVhZCA9IHRydWU7CisgICAgbV9saXN0ZW5pbmdUaHJlYWQgPSBzdGQ6OnRocmVhZChb
dGhpcywgbGlzdGVuaW5nU29ja2V0ID0gKm1fbGlzdGVuaW5nU29ja2V0LCBjb25uZWN0aW9uc10g
ewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbm5lY3Rpb25zOyArK2kpIHsKLSAg
ICAgICAgICAgIFNvY2tldCBjb25uZWN0aW9uU29ja2V0ID0gYWNjZXB0KGxpc3RlbmluZ1NvY2tl
dCwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgICAgICBTb2NrZXQ6OlNvY2tldCBjb25uZWN0
aW9uU29ja2V0ID0gSW52YWxpZFBvcnQ7CisKKyAgICAgICAgICAgIHdoaWxlIChtX3J1bm5pbmdM
aXN0ZW5pbmdUaHJlYWQgJiYgY29ubmVjdGlvblNvY2tldCA9PSBJbnZhbGlkUG9ydCkgeworICAg
ICAgICAgICAgICAgIGZkX3NldCByZWFkZmQ7CisgICAgICAgICAgICAgICAgRkRfWkVSTygmcmVh
ZGZkKTsKKyAgICAgICAgICAgICAgICBGRF9TRVQobGlzdGVuaW5nU29ja2V0LCAmcmVhZGZkKTsK
KworICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsIHRpbWVvdXQ7CisgICAgICAgICAgICAg
ICAgdGltZW91dC50dl9zZWMgPSAxOworICAgICAgICAgICAgICAgIHRpbWVvdXQudHZfdXNlYyA9
IDA7CisKKyAgICAgICAgICAgICAgICBhdXRvIHJjID0gc2VsZWN0KGxpc3RlbmluZ1NvY2tldCAr
IDEsICZyZWFkZmQsIG51bGxwdHIsIG51bGxwdHIsICZ0aW1lb3V0KTsKKyAgICAgICAgICAgICAg
ICBpZiAocmMgPD0gMCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgICAgICBjb25uZWN0aW9uU29ja2V0ID0gU29ja2V0OjphY2NlcHQobGlzdGVuaW5nU29ja2V0
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFtX3J1bm5pbmdMaXN0ZW5pbmdU
aHJlYWQgfHwgY29ubmVjdGlvblNvY2tldCA8IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoY29u
bmVjdGlvblNvY2tldCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgU29ja2V0OjpzaHV0ZG93
bihjb25uZWN0aW9uU29ja2V0KTsKKyAgICAgICAgICAgICAgICAgICAgU29ja2V0OjpjbG9zZShj
b25uZWN0aW9uU29ja2V0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIG1fY29ubmVjdGlvblRocmVhZHMuYXBw
ZW5kKHN0ZDo6dGhyZWFkKFt0aGlzLCBjb25uZWN0aW9uU29ja2V0XSB7Ci0gICAgICAgICAgICAg
ICAgbV9jb25uZWN0aW9uSGFuZGxlcihjb25uZWN0aW9uU29ja2V0KTsKLSAgICAgICAgICAgICAg
ICBzaHV0ZG93bihjb25uZWN0aW9uU29ja2V0LCBTSFVUX1JEV1IpOwotICAgICAgICAgICAgICAg
IGNsb3NlKGNvbm5lY3Rpb25Tb2NrZXQpOworICAgICAgICAgICAgICAgIGlmIChtX2Nvbm5lY3Rp
b25IYW5kbGVyKQorICAgICAgICAgICAgICAgICAgICBtX2Nvbm5lY3Rpb25IYW5kbGVyKGNvbm5l
Y3Rpb25Tb2NrZXQpOworICAgICAgICAgICAgICAgIFNvY2tldDo6c2h1dGRvd24oY29ubmVjdGlv
blNvY2tldCk7CisgICAgICAgICAgICAgICAgU29ja2V0OjpjbG9zZShjb25uZWN0aW9uU29ja2V0
KTsKICAgICAgICAgICAgIH0pKTsKICAgICAgICAgfQotICAgICAgICBjbG9zZShsaXN0ZW5pbmdT
b2NrZXQpOworICAgICAgICBTb2NrZXQ6OmNsb3NlKGxpc3RlbmluZ1NvY2tldCk7CiAgICAgfSk7
CiB9CiAKIFRDUFNlcnZlcjo6flRDUFNlcnZlcigpCiB7CisgICAgc3RvcCgpOworfQorCit2b2lk
IFRDUFNlcnZlcjo6c3RvcCgpCit7CisgICAgaWYgKCFtX3J1bm5pbmdMaXN0ZW5pbmdUaHJlYWQp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fcnVubmluZ0xpc3RlbmluZ1RocmVhZCA9IGZhbHNl
OworCisgICAgaWYgKG1fbGlzdGVuaW5nU29ja2V0KSB7CisgICAgICAgIFNvY2tldDo6c2h1dGRv
d24oKm1fbGlzdGVuaW5nU29ja2V0KTsKKyAgICAgICAgU29ja2V0OjpjbG9zZSgqbV9saXN0ZW5p
bmdTb2NrZXQpOworICAgICAgICBtX2xpc3RlbmluZ1NvY2tldCA9IFdURjo6bnVsbG9wdDsKKyAg
ICB9CisKICAgICBtX2xpc3RlbmluZ1RocmVhZC5qb2luKCk7Ci0gICAgZm9yIChhdXRvJiBjb25u
ZWN0aW9uVGhyZWFkcyA6IG1fY29ubmVjdGlvblRocmVhZHMpCi0gICAgICAgIGNvbm5lY3Rpb25U
aHJlYWRzLmpvaW4oKTsKKworICAgIGZvciAoYXV0byYgY29ubmVjdGlvblRocmVhZCA6IG1fY29u
bmVjdGlvblRocmVhZHMpCisgICAgICAgIGNvbm5lY3Rpb25UaHJlYWQuam9pbigpOwogfQogCi1h
dXRvIFRDUFNlcnZlcjo6c29ja2V0QmluZExpc3RlbihzaXplX3QgY29ubmVjdGlvbnMpIC0+IE9w
dGlvbmFsPFNvY2tldD4KK2F1dG8gVENQU2VydmVyOjpzb2NrZXRCaW5kTGlzdGVuKHNpemVfdCBj
b25uZWN0aW9ucykgLT4gT3B0aW9uYWw8U29ja2V0OjpTb2NrZXQ+CiB7Ci0gICAgU29ja2V0IGxp
c3RlbmluZ1NvY2tldCA9IHNvY2tldChQRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7Ci0gICAgaWYg
KGxpc3RlbmluZ1NvY2tldCA9PSAtMSkKKyAgICBhdXRvIGxpc3RlbmluZ1NvY2tldCA9IFNvY2tl
dDo6c29ja2V0KFBGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKKyAgICBpZiAoIVNvY2tldDo6aXNW
YWxpZFNvY2tldChsaXN0ZW5pbmdTb2NrZXQpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogICAgIAogICAgIC8vIFBvcnRzIDQ5MTUyLTY1NTM1IGFyZSB1bmFsbG9jYXRlZCBwb3J0cy4g
VHJ5IHVudGlsIHdlIGZpbmQgb25lIHRoYXQncyBmcmVlLgpAQCAtMjc3LDkgKzI5NSw5IEBAIGF1
dG8gVENQU2VydmVyOjpzb2NrZXRCaW5kTGlzdGVuKHNpemVfdCBjb25uZWN0aW9ucykgLT4gT3B0
aW9uYWw8U29ja2V0PgogICAgICAgICAgICAgLy8gVGhpcyBwb3J0IGlzIGJ1c3kuIFRyeSB0aGUg
bmV4dCBwb3J0LgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KGxpc3RlbihsaXN0ZW5pbmdTb2NrZXQsIGNvbm5lY3Rpb25zKSA9PSAtMSkgeworICAgICAgICBp
ZiAobGlzdGVuKGxpc3RlbmluZ1NvY2tldCwgY29ubmVjdGlvbnMpID09IFNPQ0tFVF9FUlJPUikg
ewogICAgICAgICAgICAgLy8gTGlzdGVuaW5nIGZhaWxlZC4KLSAgICAgICAgICAgIGNsb3NlKGxp
c3RlbmluZ1NvY2tldCk7CisgICAgICAgICAgICBTb2NrZXQ6OmNsb3NlKGxpc3RlbmluZ1NvY2tl
dCk7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CiAgICAgICAg
IG1fcG9ydCA9IHBvcnQ7CkBAIC0yODcsMTQgKzMwNSwxNCBAQCBhdXRvIFRDUFNlcnZlcjo6c29j
a2V0QmluZExpc3RlbihzaXplX3QgY29ubmVjdGlvbnMpIC0+IE9wdGlvbmFsPFNvY2tldD4KICAg
ICB9CiAgICAgCiAgICAgLy8gQ291bGRuJ3QgZmluZCBhbiBhdmFpbGFibGUgcG9ydC4KLSAgICBj
bG9zZShsaXN0ZW5pbmdTb2NrZXQpOworICAgIFNvY2tldDo6Y2xvc2UobGlzdGVuaW5nU29ja2V0
KTsKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi10ZW1wbGF0ZTw+IFZlY3Rvcjx1aW50
OF90PiBUQ1BTZXJ2ZXI6OnJlYWQoU29ja2V0IHNvY2tldCkKK3RlbXBsYXRlPD4gVmVjdG9yPHVp
bnQ4X3Q+IFRDUFNlcnZlcjo6cmVhZChTb2NrZXQ6OlNvY2tldCBzb2NrZXQpCiB7CiAgICAgdWlu
dDhfdCBidWZmZXJbMTAwMF07Ci0gICAgYXV0byBieXRlc1JlYWQgPSA6OnJlYWQoc29ja2V0LCBi
dWZmZXIsIHNpemVvZihidWZmZXIpKTsKKyAgICBhdXRvIGJ5dGVzUmVhZCA9IFNvY2tldDo6cmVh
ZChzb2NrZXQsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOwogICAgIGlmIChieXRlc1JlYWQgPD0g
MCkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90Pihi
eXRlc1JlYWQpIDwgc2l6ZW9mKGJ1ZmZlcikpOwpAQCAtMzA0LDkgKzMyMiw5IEBAIHRlbXBsYXRl
PD4gVmVjdG9yPHVpbnQ4X3Q+IFRDUFNlcnZlcjo6cmVhZChTb2NrZXQgc29ja2V0KQogICAgIHJl
dHVybiB2ZWN0b3I7CiB9CiAKLXRlbXBsYXRlPD4gdm9pZCBUQ1BTZXJ2ZXI6OndyaXRlKFNvY2tl
dCBzb2NrZXQsIGNvbnN0IHZvaWQqIHJlc3BvbnNlLCBzaXplX3QgbGVuZ3RoKQordGVtcGxhdGU8
PiB2b2lkIFRDUFNlcnZlcjo6d3JpdGUoU29ja2V0OjpTb2NrZXQgc29ja2V0LCBjb25zdCB2b2lk
KiByZXNwb25zZSwgc2l6ZV90IGxlbmd0aCkKIHsKLSAgICBhdXRvIGJ5dGVzV3JpdHRlbiA9IDo6
d3JpdGUoc29ja2V0LCByZXNwb25zZSwgbGVuZ3RoKTsKKyAgICBhdXRvIGJ5dGVzV3JpdHRlbiA9
IFNvY2tldDo6d3JpdGUoc29ja2V0LCByZXNwb25zZSwgbGVuZ3RoKTsKICAgICBFWFBFQ1RfRVEo
c3RhdGljX2Nhc3Q8c2l6ZV90PihieXRlc1dyaXR0ZW4pLCBsZW5ndGgpOwogfQogCkBAIC0zMzEs
NyArMzQ5LDcgQEAgdGVtcGxhdGU8PiB2b2lkIFRDUFNlcnZlcjo6d3JpdGUoU1NMKiBzc2wsIGNv
bnN0IHZvaWQqIHJlc3BvbnNlLCBzaXplX3QgbGVuZ3RoKQogfQogI2VuZGlmCiAKLXZvaWQgVENQ
U2VydmVyOjpyZXNwb25kV2l0aENoYWxsZW5nZVRoZW5PSyhTb2NrZXQgc29ja2V0KQordm9pZCBU
Q1BTZXJ2ZXI6OnJlc3BvbmRXaXRoQ2hhbGxlbmdlVGhlbk9LKFNvY2tldDo6U29ja2V0IHNvY2tl
dCkKIHsKICAgICByZWFkKHNvY2tldCk7CiAgICAgCkBAIC0zNjMsNiArMzgxLDY3IEBAIHZvaWQg
VENQU2VydmVyOjpyZXNwb25kV2l0aE9LKFNTTCogc3NsKQogICAgICI8c2NyaXB0PmFsZXJ0KCdz
dWNjZXNzIScpPC9zY3JpcHQ+IjsKICAgICB3cml0ZShzc2wsIHJlcGx5LCBzdHJsZW4ocmVwbHkp
KTsKIH0KKworVmVjdG9yPHVpbnQ4X3Q+IFRDUFNlcnZlcjo6ZGVmYXVsdENlcnRpZmljYXRlKCkK
K3sKKyAgICAvLyBUaGlzIGlzIGEgdGVzdCBjZXJ0aWZpY2F0ZSBmcm9tIEJvcmluZ1NTTC4KKyAg
ICBTdHJpbmcgcGVtRW5jb2RlZENlcnRpZmljYXRlKCIiCisgICAgICAgICJNSUlDV0RDQ0FjR2dB
d0lCQWdJSkFQdXdUQzZyRUpzTU1BMEdDU3FHU0liM0RRRUJCUVVBTUVVeEN6QUpCZ05WIgorICAg
ICAgICAiQkFZVEFrRlZNUk13RVFZRFZRUUlEQXBUYjIxbExWTjBZWFJsTVNFd0h3WURWUVFLREJo
SmJuUmxjbTVsZENCWCIKKyAgICAgICAgImFXUm5hWFJ6SUZCMGVTQk1kR1F3SGhjTk1UUXdOREl6
TWpBMU1EUXdXaGNOTVRjd05ESXlNakExTURRd1dqQkYiCisgICAgICAgICJNUXN3Q1FZRFZRUUdF
d0pCVlRFVE1CRUdBMVVFQ0F3S1UyOXRaUzFUZEdGMFpURWhNQjhHQTFVRUNnd1lTVzUwIgorICAg
ICAgICAiWlhKdVpYUWdWMmxrWjJsMGN5QlFkSGtnVEhSa01JR2ZNQTBHQ1NxR1NJYjNEUUVCQVFV
QUE0R05BRENCaVFLQiIKKyAgICAgICAgImdRRFlLOGltTXVSaS8wM3owSzFaaTBXbnZmRkh2d2xZ
ZXlLOU5hNlhKWWFVb0lEQXRCOTJrV2RHTWRBUWhMY2kiCisgICAgICAgICJIbkFqa1hMSTZXMTVP
b1YzZ0EvRWxSWjF4VXB4VE1oalA2UHlZNXdxVDVyNnk4RnhiaWlGS0tBbkhtVWNyZ2ZWIgorICAg
ICAgICAiVzI4dFErMHJrTEdNcnlSdHJ1a1hPZ1hCdjdnY3JtVTdHMWpDMmE3V3FtZUk4UUlEQVFB
Qm8xQXdUakFkQmdOViIKKyAgICAgICAgIkhRNEVGZ1FVaTNYVnJNc0l2ZzRmWmJmNlZyNXNwM1hh
aGE4d0h3WURWUjBqQkJnd0ZvQVVpM1hWck1zSXZnNGYiCisgICAgICAgICJaYmY2VnI1c3AzWGFo
YTh3REFZRFZSMFRCQVV3QXdFQi96QU5CZ2txaGtpRzl3MEJBUVVGQUFPQmdRQTc2SGh0IgorICAg
ICAgICAibGRZOWF2Y1RHU3did29pdUlxdjBqVEwxZkhGbnp5M1JITUxEaCtMcHZvbGM1RFNyU0pI
Q1A1V3VLMGVlSlhociIKKyAgICAgICAgIlQ1b1FwSEw5ei9jQ0RMQUtDS1JhNHVWMGZoRWRPV0Jx
eVI5cDh5NWpKdHllNzJ0NkN1RlVWNWlxY3BGNEJINGYiCisgICAgICAgICJqMlZOSHdzU3JKd2tE
NFFVR2xVdEg3dnduUW15Q0Z4Wk1tV0FKZz09Iik7CisKKyAgICByZXR1cm4gY2VydGlmaWNhdGUo
cGVtRW5jb2RlZENlcnRpZmljYXRlKTsKK30KKworc3NsOjp1bmlxdWVfcHRyPEVWUF9QS0VZPiBU
Q1BTZXJ2ZXI6OmRlZmF1bHRQcml2YXRlS2V5KCkKK3sKKyAgICAvLyBUaGlzIGlzIGEgdGVzdCBr
ZXkgZnJvbSBCb3JpbmdTU0wuCisgICAgU3RyaW5nIGtleVBFTSgiIgorICAgICAgICAiLS0tLS1C
RUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLVxuIgorICAgICAgICAiTUlJQ1hnSUJBQUtCZ1FEWUs4
aW1NdVJpLzAzejBLMVppMFdudmZGSHZ3bFlleUs5TmE2WEpZYVVvSURBdEI5MlxuIgorICAgICAg
ICAia1dkR01kQVFoTGNpSG5BamtYTEk2VzE1T29WM2dBL0VsUloxeFVweFRNaGpQNlB5WTV3cVQ1
cjZ5OEZ4YmlpRlxuIgorICAgICAgICAiS0tBbkhtVWNyZ2ZWVzI4dFErMHJrTEdNcnlSdHJ1a1hP
Z1hCdjdnY3JtVTdHMWpDMmE3V3FtZUk4UUlEQVFBQlxuIgorICAgICAgICAiQW9HQkFJQnkwOUZk
NERPcS9JanA4SGVLdUNNS1RIcVRXMXhHSHNoTFE2andWVjJ2V1pJbjlhSWdtRHN2a2pDZVxuIgor
ICAgICAgICAiaTZzc1p2bmJqVmN3elNvQnloak44WkNmL2kxNUhFQ1dERkZoNmd0MFA1ejBNbkNo
d3pabXZhdFYvRlhDVDBqK1xuIgorICAgICAgICAiV21HTkIvZ2tlaEtqR1hMTGNqVGI2ZFJZVkpT
Q1poVnVPTExjYldJVjEwZ2dnSlFCQWtFQThTOHNHZTRlenl5WlxuIgorICAgICAgICAibTRlOXI5
NWc2czQza1BxdGo1cmV3VHNVeHQrMm40ZVZvZEQrWlVsQ1VMV1ZOQUZMa1lSVEJDQVNsU3JtOVho
alxuIgorICAgICAgICAiUXBtV0FISlVrUUpCQU9WelFkRlVhZXdMdGRPSm9QQ3RwWW9ZMXpkMjJl
YWU4VFFFbXBHT1IxMUw2a2J4TFFza1xuIgorICAgICAgICAiYU1seS9ET25PYWE4MnRxQUdUZHFE
RVpnU05tQ2VLS2tubUVDUUF2cG5ZOEdVT1ZBdWJHUjZjK1c5MGlCdVFMalxuIgorICAgICAgICAi
THRGcC85aWhkMncvUG9Ed3JIWmFvVVlWY1Q0VlNmSlFvZy9rN2tqRTRNWVhZV0w4ZUVLZzNXVFdR
TkVDUVFEa1xuIgorICAgICAgICAiMTA0V2k5MVVtZDFQekYwaWpkMmpYT0VSSlUxd0VLZTZYTGtZ
WU5IV1FBZTVsNEo0TVdqOU9keEZYQXhJdXVSL1xuIgorICAgICAgICAidGZEd2Jxa3RhNHhjdXg2
Ny8va2hBa0VBdnZSWExIVGFhNlZGelRhaWlPOFNhRnNIVjNsUXlYT3RNckJwQjVqZFxuIgorICAg
ICAgICAibW9aV2dqSHZCMlc5Q2tuN3NEcXNQQitVMnR5WDBqb0RkUUV5dWlNRUNEWThvUT09XG4i
CisgICAgICAgICItLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLVxuIik7CisKKyAgICByZXR1
cm4gcHJpdmF0ZUtleShrZXlQRU0pOworfQorCitWZWN0b3I8dWludDhfdD4gVENQU2VydmVyOjpj
ZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmIGNlcnQpCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHZl
Y3RvcjsKKyAgICBiYXNlNjREZWNvZGUoY2VydCwgdmVjdG9yLCBXVEY6OkJhc2U2NERlY29kZU9w
dGlvbnM6OkJhc2U2NERlZmF1bHQpOworICAgIHJldHVybiB2ZWN0b3I7Cit9CisKK3NzbDo6dW5p
cXVlX3B0cjxFVlBfUEtFWT4gVENQU2VydmVyOjpwcml2YXRlS2V5KGNvbnN0IFN0cmluZyYga2V5
KQoreworICAgIGF1dG8gdG1wS2V5ID0ga2V5LmxhdGluMSgpOworICAgIHNzbDo6dW5pcXVlX3B0
cjxCSU8+IHByaXZhdGVLZXlCSU8oQklPX25ld19tZW1fYnVmKHRtcEtleS5kYXRhKCksIHRtcEtl
eS5sZW5ndGgoKSkpOworICAgIHNzbDo6dW5pcXVlX3B0cjxFVlBfUEtFWT4gcGtleShQRU1fcmVh
ZF9iaW9fUHJpdmF0ZUtleShwcml2YXRlS2V5QklPLmdldCgpLCBudWxscHRyLCBudWxscHRyLCBu
dWxscHRyKSk7CisgICAgQVNTRVJUKHBrZXkpOworICAgIHJldHVybiBwa2V5OworfQorCiAjZW5k
aWYKIAogVmVjdG9yPHVpbnQ4X3Q+IFRDUFNlcnZlcjo6dGVzdENlcnRpZmljYXRlKCkKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVENQU2VydmVyLmggYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1RDUFNlcnZlci5oCmluZGV4IDkwZTJlMzE4YjBmMmE0ZGE4YWRkYzRjMjExM2Q5YmRlMjY4
ZTY2MGYuLmNmMzczZGQ4ZjY5OGVhN2FkYTE1MDM0MTQ2YzY3MGYyYWM3ZmVjOTQgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVENQU2VydmVyLmgKKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UQ1BTZXJ2ZXIuaApAQCAtMjUsNTQgKzI1LDgzIEBACiAKICNwcmFnbWEgb25jZQogCisj
aW5jbHVkZSAiUGxhdGZvcm1Tb2NrZXQuaCIKICNpbmNsdWRlIDx0aHJlYWQ+CiAjaW5jbHVkZSA8
d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaWYgSEFWRShT
U0wpCisjaWYgVVNFKE9QRU5TU0wpCisjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKyNpbmNs
dWRlIDxvcGVuc3NsL3NzbC5oPgorI2Vsc2UKK3N0cnVjdCBFVlBfUEtFWTsKIHN0cnVjdCBTU0w7
CisjZW5kaWYKICNlbmRpZiAvLyBIQVZFKFNTTCkKIAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkg
ewogCisjaWYgSEFWRShTU0wpCit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IGRlbGV0ZXI7Citu
YW1lc3BhY2Ugc3NsIHsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiB1c2luZyB1bmlxdWVfcHRyID0g
c3RkOjp1bmlxdWVfcHRyPFQsIGRlbGV0ZXI8VD4+OworfQorI2VuZGlmIC8vIEhBVkUoU1NMKQor
CiBjbGFzcyBUQ1BTZXJ2ZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgotICAgIHVzaW5nIFNvY2tldCA9IGludDsKICAgICB1c2luZyBQb3J0ID0gdWludDE2X3Q7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBQb3J0IEludmFsaWRQb3J0ID0gMDsKICAgICAKLSAgICBUQ1BT
ZXJ2ZXIoRnVuY3Rpb248dm9pZChTb2NrZXQpPiYmLCBzaXplX3QgY29ubmVjdGlvbnMgPSAxKTsK
KyAgICBUQ1BTZXJ2ZXIoRnVuY3Rpb248dm9pZChTb2NrZXQ6OlNvY2tldCk+JiYsIHNpemVfdCBj
b25uZWN0aW9ucyA9IDEpOwogI2lmIEhBVkUoU1NMKQogICAgIGVudW0gY2xhc3MgUHJvdG9jb2wg
OiB1aW50OF90IHsKICAgICAgICAgSFRUUFMsIEhUVFBTUHJveHksIEhUVFBTV2l0aENsaWVudENl
cnRpZmljYXRlUmVxdWVzdAogICAgIH07Ci0gICAgVENQU2VydmVyKFByb3RvY29sLCBGdW5jdGlv
bjx2b2lkKFNTTCopPiYmLCBPcHRpb25hbDx1aW50MTZfdD4gbWF4VExTVmVyc2lvbiA9IFdURjo6
bnVsbG9wdCwgc2l6ZV90IGNvbm5lY3Rpb25zID0gMSk7CisgICAgVENQU2VydmVyKFByb3RvY29s
LCBGdW5jdGlvbjx2b2lkKFNTTCopPiYmLCBPcHRpb25hbDx1aW50MTZfdD4gbWF4VExTVmVyc2lv
biA9IFdURjo6bnVsbG9wdCwgc2l6ZV90IGNvbm5lY3Rpb25zID0gMSwgT3B0aW9uYWw8U3RyaW5n
PiA9IFdURjo6bnVsbG9wdCwgT3B0aW9uYWw8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gPSBX
VEY6Om51bGxvcHQpOwogI2VuZGlmIC8vIEhBVkUoU1NMKQogICAgIH5UQ1BTZXJ2ZXIoKTsKLSAg
ICAKKwogICAgIFBvcnQgcG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9ydDsgfQotICAgIAorCiAj
aWYgSEFWRShTU0wpCiAgICAgc3RhdGljIHZvaWQgcmVzcG9uZFdpdGhPSyhTU0wqKTsKLSAgICBz
dGF0aWMgdm9pZCBzdGFydFNlY3VyZUNvbm5lY3Rpb24oU29ja2V0LCBGdW5jdGlvbjx2b2lkKFNT
TCopPiYmIHNlY3VyZUNvbm5lY3Rpb25IYW5kbGVyLCBib29sIHJlcXVlc3RDbGllbnRDZXJ0aWZp
Y2F0ZSA9IGZhbHNlLCBPcHRpb25hbDx1aW50MTZfdD4gbWF4VExTVmVyc2lvbiA9IFdURjo6bnVs
bG9wdCk7CisgICAgdm9pZCBzdGFydFNlY3VyZUNvbm5lY3Rpb24oU29ja2V0OjpTb2NrZXQsIEZ1
bmN0aW9uPHZvaWQoU1NMKik+JiYgc2VjdXJlQ29ubmVjdGlvbkhhbmRsZXIsIGJvb2wgcmVxdWVz
dENsaWVudENlcnRpZmljYXRlID0gZmFsc2UsIE9wdGlvbmFsPHVpbnQxNl90PiBtYXhUTFNWZXJz
aW9uID0gV1RGOjpudWxsb3B0LCBPcHRpb25hbDxTdHJpbmc+ID0gV1RGOjpudWxsb3B0LCBPcHRp
b25hbDxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiA9IFdURjo6bnVsbG9wdCk7CiAjZW5kaWYK
LSAgICBzdGF0aWMgdm9pZCByZXNwb25kV2l0aENoYWxsZW5nZVRoZW5PSyhTb2NrZXQpOworICAg
IHN0YXRpYyB2b2lkIHJlc3BvbmRXaXRoQ2hhbGxlbmdlVGhlbk9LKFNvY2tldDo6U29ja2V0KTsK
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBWZWN0b3I8dWludDhfdD4gcmVhZChU
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdm9pZCB3cml0ZShULCBjb25zdCB2
b2lkKiwgc2l6ZV90KTsKICAgICAKKyNpZiBIQVZFKFNTTCkKKyAgICBWZWN0b3I8dWludDhfdD4g
ZGVmYXVsdENlcnRpZmljYXRlKCk7CisgICAgc3NsOjp1bmlxdWVfcHRyPEVWUF9QS0VZPiBkZWZh
dWx0UHJpdmF0ZUtleSgpOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGNlcnRpZmljYXRlKGNvbnN0
IFN0cmluZyYpOworICAgIHNzbDo6dW5pcXVlX3B0cjxFVlBfUEtFWT4gcHJpdmF0ZUtleShjb25z
dCBTdHJpbmcmKTsKKyNlbmRpZgorCiAgICAgc3RhdGljIFZlY3Rvcjx1aW50OF90PiB0ZXN0UHJp
dmF0ZUtleSgpOwogICAgIHN0YXRpYyBWZWN0b3I8dWludDhfdD4gdGVzdENlcnRpZmljYXRlKCk7
Ci0gICAgCisKKyAgICB2b2lkIHN0b3AoKTsKKwogcHJpdmF0ZToKLSAgICBPcHRpb25hbDxTb2Nr
ZXQ+IHNvY2tldEJpbmRMaXN0ZW4oc2l6ZV90IGNvbm5lY3Rpb25zKTsKKyAgICBPcHRpb25hbDxT
b2NrZXQ6OlNvY2tldD4gc29ja2V0QmluZExpc3RlbihzaXplX3QgY29ubmVjdGlvbnMpOwogICAg
IHZvaWQgbGlzdGVuRm9yQ29ubmVjdGlvbnMoc2l6ZV90IGNvbm5lY3Rpb25zKTsKIAogICAgIFBv
cnQgbV9wb3J0IHsgSW52YWxpZFBvcnQgfTsKKworICAgIGJvb2wgbV9ydW5uaW5nTGlzdGVuaW5n
VGhyZWFkIHsgZmFsc2UgfTsKICAgICBzdGQ6OnRocmVhZCBtX2xpc3RlbmluZ1RocmVhZDsKKyAg
ICBPcHRpb25hbDxTb2NrZXQ6OlNvY2tldD4gbV9saXN0ZW5pbmdTb2NrZXQ7CisKICAgICBWZWN0
b3I8c3RkOjp0aHJlYWQ+IG1fY29ubmVjdGlvblRocmVhZHM7Ci0gICAgRnVuY3Rpb248dm9pZChT
b2NrZXQpPiBtX2Nvbm5lY3Rpb25IYW5kbGVyOworICAgIEZ1bmN0aW9uPHZvaWQoU29ja2V0OjpT
b2NrZXQpPiBtX2Nvbm5lY3Rpb25IYW5kbGVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdl
YktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvY3Vy
bC9DZXJ0aWZpY2F0ZXMuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvY3Vy
bC9DZXJ0aWZpY2F0ZXMuY3BwCmluZGV4IGVlMmY5ZDNiMWY0NDU5MWZmZmRmYWQzYzY5OGYxZTg1
NWI3ZjQ5MzIuLmM2MjdkN2I2YTBmNTUxZmFhY2Q3ZjVmM2JkMzIzMDE4YTA5Njc2YTMgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L2N1cmwvQ2VydGlmaWNhdGVz
LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9jdXJsL0NlcnRpZmlj
YXRlcy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IFNvbnkg
SW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29u
eSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjcsMTAgKzI3LDIxIEBACiAKICNpZiBVU0UoQ1VSTCkKIAorI2luY2x1ZGUg
IlBsYXRmb3JtVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCiAjaW5j
bHVkZSAiV1RGU3RyaW5nVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiY3VybC9IVFRQU2VydmVyLmgi
CisjaW5jbHVkZSA8V2ViS2l0L1dLQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaD4KKyNpbmNsdWRl
IDxXZWJLaXQvV0tBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIuaD4KICNpbmNsdWRlIDxX
ZWJLaXQvV0tDZXJ0aWZpY2F0ZUluZm8uaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tDZXJ0aWZpY2F0
ZUluZm9DdXJsLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLQ29udGV4dFByaXZhdGUuaD4KKyNpbmNs
dWRlIDxXZWJLaXQvV0tQcm90ZWN0aW9uU3BhY2UuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tQcm90
ZWN0aW9uU3BhY2VDdXJsLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLUmV0YWluUHRyLmg+CisjaW5j
bHVkZSA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVJlZkN1cmwuaD4KKyNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IFRlc3RXZWJLaXRBUEkgewogCkBAIC02Miw2ICs3MywyMyBAQCBzdGF0aWMgY29uc3QgY2hhciog
UEVNMiA9CiAgICAgImlBMjhYY2VxUVIwPVxuIgogICAgICItLS0tLUVORCBDRVJUSUZJQ0FURS0t
LS0tXG4iOwogCitzdGF0aWMgYm9vbCBkaWRSZWNlaXZlU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVx
dWVzdDsKK3N0YXRpYyBpbnQgdmVyaWZpY2F0aW9uRXJyb3I7CitzdGF0aWMgc3RkOjp3c3RyaW5n
IHZlcmlmaWNhdGlvbkVycm9yRGVzY3JpcHRpb247CitzdGF0aWMgYm9vbCBkaWRGYWlsTG9hZDsK
K3N0YXRpYyBib29sIGRpZEZpbmlzaExvYWQ7CitzdGF0aWMgaW50IGVycm9yQ29kZTsKK3N0YXRp
YyBzdGQ6OndzdHJpbmcgbG9jYWxpemVkRGVzY3JpcHRpb247CisKK3N0YXRpYyBzdGQ6OndzdHJp
bmcgY3JlYXRlU3RyaW5nKFdLU3RyaW5nUmVmIHdrU3RyaW5nKQoreworICAgIHNpemVfdCBtYXhT
aXplID0gV0tTdHJpbmdHZXRMZW5ndGgod2tTdHJpbmcpOworCisgICAgc3RkOjp2ZWN0b3I8V0tD
aGFyPiB3a0NoYXJCdWZmZXIobWF4U2l6ZSk7CisgICAgc2l6ZV90IGFjdHVhbExlbmd0aCA9IFdL
U3RyaW5nR2V0Q2hhcmFjdGVycyh3a1N0cmluZywgd2tDaGFyQnVmZmVyLmRhdGEoKSwgbWF4U2l6
ZSk7CisgICAgcmV0dXJuIHN0ZDo6d3N0cmluZyh3a0NoYXJCdWZmZXIuZGF0YSgpLCBhY3R1YWxM
ZW5ndGgpOworfQorCiBzdGF0aWMgYXV0byBtYWtlQ2VydGlmaWNhdGVJbmZvKHN0ZDo6dmVjdG9y
PGNvbnN0IGNoYXIqPiBwZW1zKQogewogICAgIGF1dG8gY2VydGlmaWNhdGVDaGFpbiA9IGFkb3B0
V0soV0tNdXRhYmxlQXJyYXlDcmVhdGUoKSk7CkBAIC04Myw2ICsxMTEsMTYwIEBAIHN0YXRpYyBi
b29sIGlzU2FtZVBFTShXS0RhdGFSZWYgZGF0YSwgY29uc3QgY2hhciogcGVtKQogICAgIHJldHVy
biAhc3RkOjptZW1jbXAoV0tEYXRhR2V0Qnl0ZXMoZGF0YSksIHBlbSwgc2l6ZSk7CiB9CiAKK3N0
YXRpYyB2b2lkIGNsZWFyTG9hZGluZ1N0YXR1cygpCit7CisgICAgZGlkUmVjZWl2ZVNlcnZlclRy
dXN0RXZhbHVhdGlvblJlcXVlc3QgPSBmYWxzZTsKKyAgICB2ZXJpZmljYXRpb25FcnJvciA9IDA7
CisgICAgdmVyaWZpY2F0aW9uRXJyb3JEZXNjcmlwdGlvbi5jbGVhcigpOworICAgIGRpZEZpbmlz
aExvYWQgPSBmYWxzZTsKKyAgICBkaWRGYWlsTG9hZCA9IGZhbHNlOworICAgIGVycm9yQ29kZSA9
IDA7CisgICAgbG9jYWxpemVkRGVzY3JpcHRpb24uY2xlYXIoKTsKK30KKworc3RhdGljIHZvaWQg
ZGlkRmluaXNoTmF2aWdhdGlvbihXS1BhZ2VSZWYsIFdLTmF2aWdhdGlvblJlZiwgV0tUeXBlUmVm
LCBjb25zdCB2b2lkKikKK3sKKyAgICBkaWRGYWlsTG9hZCA9IGZhbHNlOworICAgIGRpZEZpbmlz
aExvYWQgPSB0cnVlOworfQorCitzdGF0aWMgdm9pZCBkaWRGYWlsTmF2aWdhdGlvbihXS1BhZ2VS
ZWYsIFdLTmF2aWdhdGlvblJlZiwgV0tFcnJvclJlZiBlcnJvciwgV0tUeXBlUmVmLCBjb25zdCB2
b2lkKikKK3sKKyAgICBkaWRGYWlsTG9hZCA9IHRydWU7CisgICAgZGlkRmluaXNoTG9hZCA9IHRy
dWU7CisgICAgZXJyb3JDb2RlID0gV0tFcnJvckdldEVycm9yQ29kZShlcnJvcik7CisgICAgbG9j
YWxpemVkRGVzY3JpcHRpb24gPSBjcmVhdGVTdHJpbmcoYWRvcHRXSyhXS0Vycm9yQ29weUxvY2Fs
aXplZERlc2NyaXB0aW9uKGVycm9yKSkuZ2V0KCkpOworfQorCitzdGF0aWMgdm9pZCBkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV0tQYWdlUmVmLCBXS0F1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlUmVmIGNoYWxsZW5nZSwgY29uc3Qgdm9pZCopCit7CisgICAgYXV0byBwcm90ZWN0aW9u
U3BhY2UgPSBXS0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlR2V0UHJvdGVjdGlvblNwYWNlKGNoYWxs
ZW5nZSk7CisgICAgYXV0byBkZWNpc2lvbkxpc3RlbmVyID0gV0tBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZUdldERlY2lzaW9uTGlzdGVuZXIoY2hhbGxlbmdlKTsKKyAgICBhdXRvIGF1dGhlbnRpY2F0
aW9uU2NoZW1lID0gV0tQcm90ZWN0aW9uU3BhY2VHZXRBdXRoZW50aWNhdGlvblNjaGVtZShwcm90
ZWN0aW9uU3BhY2UpOworCisgICAgaWYgKGF1dGhlbnRpY2F0aW9uU2NoZW1lID09IGtXS1Byb3Rl
Y3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVz
dGVkKSB7CisgICAgICAgIGF1dG8gY2VydGlmaWNhdGVJbmZvID0gYWRvcHRXSyhXS1Byb3RlY3Rp
b25TcGFjZUNvcHlDZXJ0aWZpY2F0ZUluZm8ocHJvdGVjdGlvblNwYWNlKSk7CisgICAgICAgIGRp
ZFJlY2VpdmVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0ID0gdHJ1ZTsKKyAgICAgICAgdmVy
aWZpY2F0aW9uRXJyb3IgPSBXS0NlcnRpZmljYXRlSW5mb0dldFZlcmlmaWNhdGlvbkVycm9yKGNl
cnRpZmljYXRlSW5mby5nZXQoKSk7CisgICAgICAgIHZlcmlmaWNhdGlvbkVycm9yRGVzY3JpcHRp
b24gPSBjcmVhdGVTdHJpbmcoYWRvcHRXSyhXS0NlcnRpZmljYXRlSW5mb0NvcHlWZXJpZmljYXRp
b25FcnJvckRlc2NyaXB0aW9uKGNlcnRpZmljYXRlSW5mby5nZXQoKSkpLmdldCgpKTsKKyAgICB9
CisKKyAgICBXS0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lclVzZUNyZWRlbnRpYWwoZGVj
aXNpb25MaXN0ZW5lciwgbnVsbHB0cik7Cit9CisKK3N0YXRpYyB2b2lkIHNldFBhZ2VMb2FkZXJD
bGllbnQoV0tQYWdlUmVmIHBhZ2UpCit7CisgICAgV0tQYWdlTmF2aWdhdGlvbkNsaWVudFYwIGxv
YWRlckNsaWVudDsKKyAgICBtZW1zZXQoJmxvYWRlckNsaWVudCwgMCwgc2l6ZW9mKGxvYWRlckNs
aWVudCkpOworCisgICAgbG9hZGVyQ2xpZW50LmJhc2UudmVyc2lvbiA9IDA7CisgICAgbG9hZGVy
Q2xpZW50LmRpZEZpbmlzaE5hdmlnYXRpb24gPSBkaWRGaW5pc2hOYXZpZ2F0aW9uOworICAgIGxv
YWRlckNsaWVudC5kaWRGYWlsTmF2aWdhdGlvbiA9IGRpZEZhaWxOYXZpZ2F0aW9uOworICAgIGxv
YWRlckNsaWVudC5kaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0aW9uID0gZGlkRmFpbE5hdmlnYXRp
b247CisgICAgbG9hZGVyQ2xpZW50LmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSA9
IGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKKworICAgIFdLUGFnZVNldFBhZ2VO
YXZpZ2F0aW9uQ2xpZW50KHBhZ2UsICZsb2FkZXJDbGllbnQuYmFzZSk7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3RDaXBoZXJTdWl0ZXMoT3B0aW9uYWw8U3RyaW5nPiBjaXBoZXJTdWl0ZXMsIE9wdGlv
bmFsPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IHNlcnZlckNlcnRpZmljYXRlID0gV1RGOjpu
dWxsb3B0KQoreworICAgIGF1dG8gY29udGV4dCA9IGFkb3B0V0soV0tDb250ZXh0Q3JlYXRlV2l0
aENvbmZpZ3VyYXRpb24obnVsbHB0cikpOworICAgIGF1dG8gc3RvcmUgPSBXS1dlYnNpdGVEYXRh
U3RvcmVHZXREZWZhdWx0RGF0YVN0b3JlKCk7CisKKyAgICBQbGF0Zm9ybVdlYlZpZXcgd2ViVmll
dyhjb250ZXh0LmdldCgpKTsKKyAgICBzZXRQYWdlTG9hZGVyQ2xpZW50KHdlYlZpZXcucGFnZSgp
KTsKKworICAgIEhUVFBTZXJ2ZXIgaHR0cHNTZXJ2ZXIoeyB7ICIvIiwgeyI8aHRtbD48dGl0bGU+
UmVzcG9uc2UgZnJvbSBIVFRQUyBzZXJ2ZXI8L3RpdGxlPjwvaHRtbD4ifSB9IH0sIEhUVFBTZXJ2
ZXI6OlByb3RvY29sOjpIdHRwcywgMywgY2lwaGVyU3VpdGVzLCBzZXJ2ZXJDZXJ0aWZpY2F0ZSk7
CisKKyAgICBhdXRvIGRhdGEgPSBodHRwc1NlcnZlci51cmwoKS51dGY4KCkuZGF0YSgpOworICAg
IGF1dG8gc2VydmVyVVJMID0gYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyhkYXRh
KSk7CisKKyAgICBXS1BhZ2VMb2FkVVJMKHdlYlZpZXcucGFnZSgpLCBzZXJ2ZXJVUkwuZ2V0KCkp
OworICAgIGNsZWFyTG9hZGluZ1N0YXR1cygpOworICAgIFV0aWw6OnJ1bigmZGlkRmluaXNoTG9h
ZCk7Cit9CisKK3N0YXRpYyBzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+IGNlcnRpZmljYXRlUlNB
KCkKK3sKKyAgICBTdHJpbmcgY2VydGlmaWNhdGUoIiIKKyAgICAgICAgIk1JSURtVENDQW9HZ0F3
SUJBZ0lSQUxqUVFtL2N5TkxKb2RLSzNvelo5K0l3RFFZSktvWklodmNOQVFFTEJRQXciCisgICAg
ICAgICJRVEVMTUFrR0ExVUVCaE1DU2xBeERqQU1CZ05WQkFnTUJWUnZhM2x2TVEwd0N3WURWUVFL
REFSVFpXeG1NUk13IgorICAgICAgICAiRVFZRFZRUUREQXBRY21sMllYUmxJRU5CTUI0WERUSXdN
RGN3T1RBNE5EVTBNMW9YRFRNd01EY3dOekE0TkRVMCIKKyAgICAgICAgIk0xb3dRREVMTUFrR0Ex
VUVCaE1DU2xBeERqQU1CZ05WQkFnTUJWUnZhM2x2TVEwd0N3WURWUVFLREFSVFpXeG0iCisgICAg
ICAgICJNUkl3RUFZRFZRUUREQWxzYjJOaGJHaHZjM1F3Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVB
QTRJQkR3QXdnZ0VLIgorICAgICAgICAiQW9JQkFRREZxN2p3T29nUmZUdTYwMFBpRXR0QmxmdmN2
cFpGdFp3cE5RenhPTnNLcE83NEZZT3B0QXNtWlhPdyIKKyAgICAgICAgImV3QUJ2a0JwSE1NWk5X
OUZ6NURqMXVEMDRNclBPWDRRWXQ5S0ZQVytNYy9QbWV1R09jLzVscDJ0Y0hzeElib04iCisgICAg
ICAgICI3M0pYY2FBU1BBR1dIZVBLS2hOanZGaFVzWHBLNGd1bWRnYXY3VFRuaXdJdEh0aUFOblRt
NVBoYTQ5OThGTVdvIgorICAgICAgICAieTBvVTJRMFpNY20xNDVHZFRFeGV0TGFRUytzVHo2VTNI
eHlzMkVoVTBJbnJKTWxvc1NVN1ViMlA2QkNCUzMyVSIKKyAgICAgICAgIjRCYlZrc000b2l2dXEr
TUV1UDMwVUpJN2tONGk5Z0J1MkJsV3hhRTZGalh6OWlNUVdiMjBGeHNwZENaZGxNWDEiCisgICAg
ICAgICJwTzdhSXpQKzdEZDZlUFdtcXFkUm8zMkpvNHBoQWdNQkFBR2pnWXd3Z1lrd0NRWURWUjBU
QkFJd0FEQUxCZ05WIgorICAgICAgICAiSFE4RUJBTUNCYUF3RXdZRFZSMGxCQXd3Q2dZSUt3WUJC
UVVIQXdFd0hRWURWUjBPQkJZRUZCYnJ4eURoSnM2aCIKKyAgICAgICAgImVSRnZkdTJwYjNDVFJ0
a3lNQjhHQTFVZEl3UVlNQmFBRkZNSHovcGZpT0NsOEEwZ0tFcmxvWWljVGx5bU1Cb0ciCisgICAg
ICAgICJBMVVkRVFRVE1CR0NDV3h2WTJGc2FHOXpkSWNFZndBQUFUQU5CZ2txaGtpRzl3MEJBUXNG
QUFPQ0FRRUFwV0kxIgorICAgICAgICAiR0FCQmxrRHRsZlpEZDZhVGJpcWt2Zm5sRjB0bVE4d3dt
UGtiNkIvSVBOSzZWdTdqUUZLQklQb05zZEh0alJsZSIKKyAgICAgICAgIkNUUm9pcmZpMVN3UFZT
WDJTb3JzV1Jtd210QXZxVE4zUW9qcFdtV3BXRWp2Um1mc2tSSFlKQUpOYUZSTDZQQkUiCisgICAg
ICAgICJEWGVpT3B4NUZvSkdGUTBLcVEvUjFJbDJxZGc3WmJPMFEvUWl4d2UweklGcVoyOHlvNU4r
dThDTFVlNEVSR09FIgorICAgICAgICAiVThCSjFEeXFUdnJ1b1NmNW1nSGF3bUkyRHd5YkxEUHVm
Q25jcERHK09wMGVWWnMrcXBsckg5NmNuZnI5ZGtkeCIKKyAgICAgICAgIk9La3FBa0xTaXZQdGZn
aElPd1JPLzI0SHVqcnI2cTYxNWt6aFhQTUJ0bzkweXVlNFR2U3BiNXJZZFI3OGtJUEwiCisgICAg
ICAgICJBbTUwdm4xWm5sVmNveTl5ZFE9PSIpOworCisgICAgU3RyaW5nIHByaXZhdGVLZXkoIiIK
KyAgICAgICAgIi0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS1cbiIKKyAgICAgICAgIk1J
SUVwQUlCQUFLQ0FRRUF4YXU0OERxSUVYMDd1dE5ENGhMYlFaWDczTDZXUmJXY0tUVU04VGpiQ3FU
dStCV0RcbiIKKyAgICAgICAgInFiUUxKbVZ6c0hzQUFiNUFhUnpER1RWdlJjK1E0OWJnOU9ES3p6
bCtFR0xmU2hUMXZqSFB6NW5yaGpuUCtaYWRcbiIKKyAgICAgICAgInJYQjdNU0c2RGU5eVYzR2dF
andCbGgzanlpb1RZN3hZVkxGNlN1SUxwbllHciswMDU0c0NMUjdZZ0RaMDV1VDRcbiIKKyAgICAg
ICAgIld1UGZmQlRGcU10S0ZOa05HVEhKdGVPUm5VeE1YclMya0V2ckU4K2xOeDhjck5oSVZOQ0o2
eVRKYUxFbE8xRzlcbiIKKyAgICAgICAgImorZ1FnVXQ5bE9BVzFaTERPS0lyN3F2akJMajk5RkNT
TzVEZUl2WUFidGdaVnNXaE9oWTE4L1lqRUZtOXRCY2JcbiIKKyAgICAgICAgIktYUW1YWlRGOWFU
dTJpTXovdXczZW5qMXBxcW5VYU45aWFPS1lRSURBUUFCQW9JQkFIRnc4cXJUUElHaytHRm9cbiIK
KyAgICAgICAgIm16MmtDcmFpQjdBUXBKY08rYmJnWGpRVnFBZDh6alFMek1yWXE4bDJVYVdIZ1dK
K3QrSmJBbEIyVFF5b2FZT0lcbiIKKyAgICAgICAgIkx3UDUrZ3BnK1VzWUl3TVY4azRic2lKM09D
YUpDU1U0M2ZiS1piaTFuVndmL2VQWExzRW9OTlRkQkh4aUYweVdcbiIKKyAgICAgICAgInE2NjNS
L0t2dFhYcnFEelFpaHNUdU1VQ1BjZWQ5VWczUXJzMDE2Z0ZUSStGU0dMaGZISkxmRVNSQTZEUWp2
bjNcbiIKKyAgICAgICAgInNScU45YkR1OWdycm1uWDRkSC85RmViZ0M0Y3J5dFBPZ1REelpwL01m
TFBNL2I4WlJoSzREUFpSNUdmdXZ2RzVcbiIKKyAgICAgICAgIjdKRmF0RGJOeXVvcWRTc1gyZFR5
UGVabFMzellaTlBtT2JpS0dRelBPNFlzNTFoTHNiQUplNHlaRStMaWVTN3FcbiIKKyAgICAgICAg
ImhOZE5BVjBDZ1lFQSt4WW5RcDltczgxL2pubG9ITVNrMnZjQzFuZUhacXZDYlhGSWJlK2U1OUow
TGh6Z3dUaE5cbiIKKyAgICAgICAgIk8zY3dFdVFmbHc2bXFMMTlaWStRTkVJdml2OVdPRkpMWG8z
WUNJREIwNU5QZis1OWlnbnRXSHNhNVAyTURUMjZcbiIKKyAgICAgICAgIkQrWTRSam02bkdGSzI1
N1Y2WDd6a09uejBiUndXMGF6SDZSZlJvK0lISGVCdGtxNlpyV2ExL01DZ1lFQXlZbjZcbiIKKyAg
ICAgICAgIkRvM2xIU29pbHY2eDA3UlFwdE56N2krZGZSUTFyckZmRHVMaDVjK2ZhalkyeDJ4VUNX
bHNBOENpYXZDTkpPMnFcbiIKKyAgICAgICAgIlJjM3VHb0VmOWNTRExuUnJqRnpobjRDOFBaNmdj
dTZGRERiejZyVm9XZWdCektvRVlXazlLU0xZN3psbEIxY0VcbiIKKyAgICAgICAgIjFoejJRZmhv
aTlWSFBrTDhCMGw2aUVLWkE0Vmg2Vit5WDRzazNWc0NnWUVBM1pVVFdLd3Jpb25VQS93SWNUcm9c
biIKKyAgICAgICAgIjhZUURzUmtUR1B5RFBPbzRMU3pHWTNkS3FGYzcwY2pKLzZ5VGRGaDF1RzFw
am9pTFhWRnd4VzJUWDJzdXY4MkFcbiIKKyAgICAgICAgIlRoV0hqUmx6OUMrUWZTb1BCLzd5d3A4
QmdReHd5RTZ0SU5MZTNycWJnTjRybmQxeWtmbERJYVFWVS8rVkdEZ3dcbiIKKyAgICAgICAgIlk4
QS9oSm11V05EdVc5MWUycjF4eFJrQ2dZQVB0NkgzdHBzeW5oR2Fndnh0VFRlbyt2NmtpYlFYaUJi
enE4T0ZcbiIKKyAgICAgICAgIkRxNmRWSWJUS3EwMCtqN0hpU0F5WHJpTDdIeWxiNStDMkIrRWs2
TmhjRlRtcjQrZm43SzgxTFpaZStCNWRoNk1cbiIKKyAgICAgICAgIktGRDNjZlJVWnFLVlNvRVM4
N2tnVnlaaDZiRDJWSlA4K3I4OXY5aXZadytxVEdFSlZIS280OEM1SkpMUk4zUmFcbiIKKyAgICAg
ICAgInZTZy8xd0tCZ1FEaGI4QlljdWt5NUx2S1JmRUR6YUZFK05XM2s1VmxQQjVBdHhmQVpqZFIy
czdxblh2b05nTWdcbiIKKyAgICAgICAgImo4cU43WWJwYXlwVXRZU3hpY3Q5Z3VvR1FQdVFVS3g1
OWlNQkJoaGlnNWJrVzNHQyt3M3dQbjhoMkdFMldma2FcbiIKKyAgICAgICAgIjdCeHhnaXIzT1Jy
Q0lKSHRwSTZZNFhXdEMzbFErbWhZOFZLU292b1laZVpCbC9SOGJwUWE3UT09XG4iCisgICAgICAg
ICItLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLVxuIik7CisKKyAgICByZXR1cm4geyBXVEZN
b3ZlKGNlcnRpZmljYXRlKSwgV1RGTW92ZShwcml2YXRlS2V5KSB9OworfQorCitzdGF0aWMgc3Rk
OjpwYWlyPFN0cmluZywgU3RyaW5nPiBjZXJ0aWZpY2F0ZUVDQygpCit7CisgICAgU3RyaW5nIGNl
cnRpZmljYXRlKCIiCisgICAgICAgICJNSUlDRERDQ0FiT2dBd0lCQWdJUkFMN2lwQkE2S0RIdGVR
dXpibEttYk5Rd0NnWUlLb1pJemowRUF3SXdRVEVMIgorICAgICAgICAiTUFrR0ExVUVCaE1DU2xB
eERqQU1CZ05WQkFnTUJWUnZhM2x2TVEwd0N3WURWUVFLREFSVFpXeG1NUk13RVFZRCIKKyAgICAg
ICAgIlZRUUREQXBRY21sMllYUmxJRU5CTUI0WERUSXdNRGN3T1RBM01UVXlNMW9YRFRNd01EY3dO
ekEzTVRVeU0xb3ciCisgICAgICAgICJRREVMTUFrR0ExVUVCaE1DU2xBeERqQU1CZ05WQkFnTUJW
UnZhM2x2TVEwd0N3WURWUVFLREFSVFpXeG1NUkl3IgorICAgICAgICAiRUFZRFZRUUREQWxzYjJO
aGJHaHZjM1F3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFaRkxwWiIKKyAgICAg
ICAgIkdvdldlM2pqK1BwUXZFL0dMR2REUlFBYWkrQmVzSjRMTXI2dmJOZGZvL2IvbVl3K29OM0VB
aGFyWFFNR2lYcUIiCisgICAgICAgICJVUG5NK1U3S2VaZlo3ZDVHbzRHTU1JR0pNQWtHQTFVZEV3
UUNNQUF3Q3dZRFZSMFBCQVFEQWdXZ01CTUdBMVVkIgorICAgICAgICAiSlFRTU1Bb0dDQ3NHQVFV
RkJ3TUJNQjBHQTFVZERnUVdCQlRYVkZmcXVUNXBMQ0tMbG8xaXAwckhRTE5wS3pBZiIKKyAgICAg
ICAgIkJnTlZIU01FR0RBV2dCUXhGVVZsbGVFdE1lTHRaNHBMeEYySXZnRG1xakFhQmdOVkhSRUVF
ekFSZ2dsc2IyTmgiCisgICAgICAgICJiR2h2YzNTSEJIOEFBQUV3Q2dZSUtvWkl6ajBFQXdJRFJ3
QXdSQUlnWkI2UXF6SnZJZVE0cDR1a3F5cktDUGxkIgorICAgICAgICAibENNMEY3MGVNVDBlVXhE
a3pUQUNJQXJmWSs4RTY5ZlN6b3V3R1JDZi9VajRBL1E3VmZpcnRSRUhlTXNMaWxFaiIpOworCisg
ICAgU3RyaW5nIHByaXZhdGVLZXkoIiIKKyAgICAgICAgIi0tLS0tQkVHSU4gRUMgUFJJVkFURSBL
RVktLS0tLVxuIgorICAgICAgICAiTUhjQ0FRRUVJTkE0OXo1UXZEZ2VRbjQ5S3o4NHFodXBMd1RN
U2lYeEhEd1kwNGhNWS9pZ29Bb0dDQ3FHU000OVxuIgorICAgICAgICAiQXdFSG9VUURRZ0FFR1JT
NldScUwxbnQ0NC9qNlVMeFB4aXhuUTBVQUdvdmdYckNlQ3pLK3IyelhYNlAyLzVtTVxuIgorICAg
ICAgICAiUHFEZHhBSVdxMTBEQm9sNmdWRDV6UGxPeW5tWDJlM2VSZz09XG4iCisgICAgICAgICIt
LS0tLUVORCBFQyBQUklWQVRFIEtFWS0tLS0tXG4iKTsKKworICAgIHJldHVybiB7IFdURk1vdmUo
Y2VydGlmaWNhdGUpLCBXVEZNb3ZlKHByaXZhdGVLZXkpIH07Cit9CisKIFRFU1QoQ3VybCwgQ2Vy
dGlmaWNhdGVBUEkpCiB7CiAgICAgYXV0byBjZXJ0aWZpY2F0ZUluZm8gPSBhZG9wdFdLKG1ha2VD
ZXJ0aWZpY2F0ZUluZm8oeyBQRU0xLCBQRU0yIH0pKTsKQEAgLTk1LDggKzI3Nyw1NSBAQCBURVNU
KEN1cmwsIENlcnRpZmljYXRlQVBJKQogICAgIEFTU0VSVF9UUlVFKGlzU2FtZVBFTShhZG9wdFdL
KFdLQ2VydGlmaWNhdGVJbmZvQ29weUNlcnRpZmljYXRlQXRJbmRleChjZXJ0aWZpY2F0ZUluZm8u
Z2V0KCksIDEpKS5nZXQoKSwgUEVNMikpOwogfQogCitURVNUKEN1cmwsIENpcGhlclN1aXRlc0VD
REhFX0VDRFNBX0FFU18yNTZfR0NNX1NIQTM4NCkKK3sKKyAgICB0ZXN0Q2lwaGVyU3VpdGVzKFN0
cmluZygiRUNESEUtRUNEU0EtQUVTMjU2LUdDTS1TSEEzODQiKSwgY2VydGlmaWNhdGVFQ0MoKSk7
CisKKyAgICBFWFBFQ1RfVFJVRShkaWRSZWNlaXZlU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVz
dCk7CisgICAgRVhQRUNUX0VRKHZlcmlmaWNhdGlvbkVycm9yLCAyMCk7CisgICAgRVhQRUNUX0VR
KHZlcmlmaWNhdGlvbkVycm9yRGVzY3JpcHRpb24sIEwidW5hYmxlIHRvIGdldCBsb2NhbCBpc3N1
ZXIgY2VydGlmaWNhdGUiKTsKKyAgICBFWFBFQ1RfVFJVRShkaWRGYWlsTG9hZCk7CisgICAgRVhQ
RUNUX0VRKGVycm9yQ29kZSwgNjApOworICAgIEVYUEVDVF9FUShsb2NhbGl6ZWREZXNjcmlwdGlv
biwgTCJTU0wgcGVlciBjZXJ0aWZpY2F0ZSBvciBTU0ggcmVtb3RlIGtleSB3YXMgbm90IE9LIik7
Cit9CisKK1RFU1QoQ3VybCwgQ2lwaGVyU3VpdGVzRUNESEVfUlNBX0FFU18xMjhfQ0JDX1NIQSkK
K3sKKyAgICB0ZXN0Q2lwaGVyU3VpdGVzKFN0cmluZygiRUNESEUtUlNBLUFFUzEyOC1TSEEiKSwg
Y2VydGlmaWNhdGVSU0EoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShkaWRSZWNlaXZlU2VydmVyVHJ1
c3RFdmFsdWF0aW9uUmVxdWVzdCk7CisgICAgRVhQRUNUX0VRKHZlcmlmaWNhdGlvbkVycm9yLCAy
MCk7CisgICAgRVhQRUNUX0VRKHZlcmlmaWNhdGlvbkVycm9yRGVzY3JpcHRpb24sIEwidW5hYmxl
IHRvIGdldCBsb2NhbCBpc3N1ZXIgY2VydGlmaWNhdGUiKTsKKyAgICBFWFBFQ1RfVFJVRShkaWRG
YWlsTG9hZCk7CisgICAgRVhQRUNUX0VRKGVycm9yQ29kZSwgNjApOworICAgIEVYUEVDVF9FUShs
b2NhbGl6ZWREZXNjcmlwdGlvbiwgTCJTU0wgcGVlciBjZXJ0aWZpY2F0ZSBvciBTU0ggcmVtb3Rl
IGtleSB3YXMgbm90IE9LIik7Cit9CisKK1RFU1QoQ3VybCwgQ2lwaGVyU3VpdGVzRUNESEVfRUNE
U0FfUkM0XzEyOF9TSEEpCit7CisgICAgdGVzdENpcGhlclN1aXRlcyhTdHJpbmcoIkVDREhFLUVD
RFNBLVJDNC1TSEEiKSwgY2VydGlmaWNhdGVFQ0MoKSk7CisKKyAgICBFWFBFQ1RfRkFMU0UoZGlk
UmVjZWl2ZVNlcnZlclRydXN0RXZhbHVhdGlvblJlcXVlc3QpOworICAgIEVYUEVDVF9FUSh2ZXJp
ZmljYXRpb25FcnJvciwgMCk7CisgICAgRVhQRUNUX0VRKHZlcmlmaWNhdGlvbkVycm9yRGVzY3Jp
cHRpb24sIEwiIik7CisgICAgRVhQRUNUX1RSVUUoZGlkRmFpbExvYWQpOworICAgIEVYUEVDVF9F
UShlcnJvckNvZGUsIDM1KTsKKyAgICBFWFBFQ1RfRVEobG9jYWxpemVkRGVzY3JpcHRpb24sIEwi
U1NMIGNvbm5lY3QgZXJyb3IiKTsKK30KKworVEVTVChDdXJsLCBDaXBoZXJTdWl0ZXNSU0FfQUVT
XzEyOF9DQkNfU0hBMjU2KQoreworICAgIHRlc3RDaXBoZXJTdWl0ZXMoU3RyaW5nKCJBRVMxMjgt
U0hBMjU2IiksIGNlcnRpZmljYXRlUlNBKCkpOworCisgICAgRVhQRUNUX0ZBTFNFKGRpZFJlY2Vp
dmVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0KTsKKyAgICBFWFBFQ1RfRVEodmVyaWZpY2F0
aW9uRXJyb3IsIDApOworICAgIEVYUEVDVF9FUSh2ZXJpZmljYXRpb25FcnJvckRlc2NyaXB0aW9u
LCBMIiIpOworICAgIEVYUEVDVF9UUlVFKGRpZEZhaWxMb2FkKTsKKyAgICBFWFBFQ1RfRVEoZXJy
b3JDb2RlLCAzNSk7CisgICAgRVhQRUNUX0VRKGxvY2FsaXplZERlc2NyaXB0aW9uLCBMIlNTTCBj
b25uZWN0IGVycm9yIik7CiB9CiAKK30gLy8gbmFtZXNwYWNlIEN1cmwKIH0gLy8gbmFtZXNwYWNl
IFRlc3RXZWJLaXRBUEkKIAogI2VuZGlmIC8vIFVTRShDVVJMKQpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm94eS5tbSBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUHJveHkubW0KaW5kZXggMmVmZmE4MWJjMGZkZDI5OWMx
ZmU4YjI1ZThkMDA2YzcxZTcwZDlhNi4uNDU2ODkyNDUzNTVhMTgxMjhhMGRiMGI3Y2ExOTVmZDY3
YzQ1YmIzZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9Qcm94eS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1By
b3h5Lm1tCkBAIC05NCw3ICs5NCw3IEBAIFRFU1QoV2ViS2l0LCBIVFRQU1Byb3h5KQogCiBURVNU
KFdlYktpdCwgSFRUUFByb3h5QXV0aGVudGljYXRpb24pCiB7Ci0gICAgVENQU2VydmVyIHNlcnZl
cihbXSAoaW50IHNvY2tldCkgeworICAgIHN0ZDo6dW5pcXVlX3B0cjxUQ1BTZXJ2ZXI+IHNlcnZl
ciA9IG1ha2VVbmlxdWU8VENQU2VydmVyPihbJnNlcnZlcl0gKGludCBzb2NrZXQpIHsKICAgICAg
ICAgYXV0byByZXF1ZXN0U2hvdWxkQ29udGFpbiA9IFtdIChjb25zdCBhdXRvJiByZXF1ZXN0LCBj
b25zdCBjaGFyKiBzdHIpIHsKICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHN0cm5zdHIocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4ocmVxdWVzdC5kYXRhKCkpLCBzdHIsIHJlcXVlc3Quc2l6
ZSgpKSk7CiAgICAgICAgIH07CkBAIC0xMTYsMTQgKzExNiwxMyBAQCBURVNUKFdlYktpdCwgSFRU
UFByb3h5QXV0aGVudGljYXRpb24pCiAgICAgICAgICAgICAiQ29ubmVjdGlvbjogY2xvc2Vcclxu
IgogICAgICAgICAgICAgIlxyXG4iOwogICAgICAgICBUQ1BTZXJ2ZXI6OndyaXRlKHNvY2tldCwg
cmVzcG9uc2UyLCBzdHJsZW4ocmVzcG9uc2UyKSk7Ci0KLSAgICAgICAgVENQU2VydmVyOjpzdGFy
dFNlY3VyZUNvbm5lY3Rpb24oc29ja2V0LCBUQ1BTZXJ2ZXI6OnJlc3BvbmRXaXRoT0spOworICAg
ICAgICBzZXJ2ZXItPnN0YXJ0U2VjdXJlQ29ubmVjdGlvbihzb2NrZXQsIFRDUFNlcnZlcjo6cmVz
cG9uZFdpdGhPSyk7CiAgICAgfSk7CiAgICAgCiAgICAgYXV0byBzdG9yZUNvbmZpZ3VyYXRpb24g
PSBhZG9wdE5TKFtfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddKTsKICAgICBb
c3RvcmVDb25maWd1cmF0aW9uIHNldFByb3h5Q29uZmlndXJhdGlvbjpAewogICAgICAgICAoTlNT
dHJpbmcgKilrQ0ZTdHJlYW1Qcm9wZXJ0eUhUVFBTUHJveHlIb3N0OiBAIjEyNy4wLjAuMSIsCi0g
ICAgICAgIChOU1N0cmluZyAqKWtDRlN0cmVhbVByb3BlcnR5SFRUUFNQcm94eVBvcnQ6IEAoc2Vy
dmVyLnBvcnQoKSkKKyAgICAgICAgKE5TU3RyaW5nICopa0NGU3RyZWFtUHJvcGVydHlIVFRQU1By
b3h5UG9ydDogQChzZXJ2ZXItPnBvcnQoKSkKICAgICB9XTsKICAgICBbc3RvcmVDb25maWd1cmF0
aW9uIHNldEFsbG93c1NlcnZlclByZWNvbm5lY3Q6Tk9dOwogICAgIFtzdG9yZUNvbmZpZ3VyYXRp
b24gc2V0UHJldmVudHNTeXN0ZW1IVFRQUHJveHlBdXRoZW50aWNhdGlvbjpZRVNdOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9jdXJsL0hUVFBTZXJ2ZXIuY3BwIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9jdXJsL0hUVFBTZXJ2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzNmQ1YTUxYTk4MjEw
NzMzOGI2M2M5ZDlhMDk3NzdmNjcyOThhNGEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL2N1cmwvSFRUUFNlcnZlci5jcHAKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJIVFRQU2VydmVyLmgiCisKKyNp
bmNsdWRlICJVdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDx3dGYvVVJMLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK0hUVFBTZXJ2ZXI6OkhUVFBTZXJ2ZXIoc3Rk
Ojppbml0aWFsaXplcl9saXN0PHN0ZDo6cGFpcjxTdHJpbmcsIEhUVFBSZXNwb25zZT4+IHJlc3Bv
bnNlcywgUHJvdG9jb2wgcHJvdG9jb2wsIHNpemVfdCBjb25uZWN0aW9ucywgT3B0aW9uYWw8U3Ry
aW5nPiBjaXBoZXJTdWl0ZXMsIE9wdGlvbmFsPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IHNl
cnZlckNlcnRpZmljYXRlKQorICAgIDogbV9wcm90b2NvbChwcm90b2NvbCkKKyAgICAsIG1fcmVx
dWVzdFJlc3BvbnNlTWFwKFtdKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnBhaXI8U3RyaW5n
LCBIVFRQU2VydmVyOjpIVFRQUmVzcG9uc2U+PiBsaXN0KSB7CisgICAgICAgIEhhc2hNYXA8U3Ry
aW5nLCBIVFRQU2VydmVyOjpIVFRQUmVzcG9uc2U+IG1hcDsKKyAgICAgICAgZm9yIChhdXRvJiBw
YWlyIDogbGlzdCkKKyAgICAgICAgICAgIG1hcC5hZGQocGFpci5maXJzdCwgcGFpci5zZWNvbmQp
OworICAgICAgICByZXR1cm4gbWFwOworICAgIH0ocmVzcG9uc2VzKSkKK3sKKyNpZiAhSEFWRShT
U0wpCisgICAgQVNTRVJUKHByb3RvY29sID09IFByb3RvY29sOjpIdHRwKTsKKyNlbmRpZgorCisg
ICAgaWYgKHByb3RvY29sID09IFByb3RvY29sOjpIdHRwKSB7CisgICAgICAgIG1fc2VydmVyID0g
V1RGOjptYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVjazxUQ1BTZXJ2ZXI+KAorICAgICAg
ICAgICAgW3RoaXNdIChTb2NrZXQ6OlNvY2tldCBzb2NrZXQpIHsKKyAgICAgICAgICAgICAgICBy
ZXNwb25kVG9SZXF1ZXN0cyhzb2NrZXQpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGNv
bm5lY3Rpb25zKTsKKyAgICB9IGVsc2UgaWYgKHByb3RvY29sID09IFByb3RvY29sOjpIdHRwcykg
eworI2lmIEhBVkUoU1NMKQorICAgICAgICBtX3NlcnZlciA9IFdURjo6bWFrZVVuaXF1ZVdpdGhv
dXRGYXN0TWFsbG9jQ2hlY2s8VENQU2VydmVyPigKKyAgICAgICAgICAgIFRDUFNlcnZlcjo6UHJv
dG9jb2w6OkhUVFBTLAorICAgICAgICAgICAgW3RoaXNdIChTU0wqIHNzbCkgeworICAgICAgICAg
ICAgICAgIGlmIChzc2wpCisgICAgICAgICAgICAgICAgICAgIHJlc3BvbmRUb1JlcXVlc3RzKHNz
bCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgV1RGOjpudWxsb3B0LCBjb25uZWN0aW9u
cywgY2lwaGVyU3VpdGVzLCBzZXJ2ZXJDZXJ0aWZpY2F0ZSk7CisjZW5kaWYKKyAgICB9Cit9CisK
K0hUVFBTZXJ2ZXI6On5IVFRQU2VydmVyKCkKK3sKKyAgICBpZiAobV9zZXJ2ZXIpCisgICAgICAg
IG1fc2VydmVyLT5zdG9wKCk7Cit9CisKK1N0cmluZyBIVFRQU2VydmVyOjp1cmwoKSBjb25zdAor
eworICAgIGlmICghbV9zZXJ2ZXIpCisgICAgICAgIHJldHVybiBTdHJpbmcoIiIpOworCisgICAg
aWYgKG1fcHJvdG9jb2wgPT0gUHJvdG9jb2w6Okh0dHApCisgICAgICAgIHJldHVybiBtYWtlU3Ry
aW5nKCJodHRwOi8vMTI3LjAuMC4xOiIsIFN0cmluZzo6bnVtYmVyKHBvcnQoKSkpOworCisgICAg
aWYgKG1fcHJvdG9jb2wgPT0gUHJvdG9jb2w6Okh0dHBzIHx8IG1fcHJvdG9jb2wgPT0gUHJvdG9j
b2w6Okh0dHBzV2l0aExlZ2FjeVRMUykKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImh0dHBz
Oi8vMTI3LjAuMC4xOiIsIFN0cmluZzo6bnVtYmVyKHBvcnQoKSkpOworCisgICAgcmV0dXJuIFN0
cmluZygiIik7Cit9CisKK3VpbnQxNl90IEhUVFBTZXJ2ZXI6OnBvcnQoKSBjb25zdAoreworICAg
IHJldHVybiBtX3NlcnZlciA/IG1fc2VydmVyLT5wb3J0KCkgOiAwOworfQorCitzdGF0aWMgU3Ry
aW5nIHN0YXR1c1RleHQodW5zaWduZWQgc3RhdHVzQ29kZSkKK3sKKyAgICBzd2l0Y2ggKHN0YXR1
c0NvZGUpIHsKKyAgICBjYXNlIDIwMDoKKyAgICAgICAgcmV0dXJuICJPSyJfczsKKyAgICBjYXNl
IDMwMToKKyAgICAgICAgcmV0dXJuICJNb3ZlZCBQZXJtYW5lbnRseSJfczsKKyAgICB9CisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gIHZvaWQgSFRUUFNlcnZlcjo6cmVzcG9uZFRvUmVxdWVzdHMoVCBjb25uZWN0aW9u
SGFuZGxlKQoreworICAgIHN0YXRpYyBpbnQgQ09VTlQgPSAwOworICAgIGF1dG8gcmVxdWVzdCA9
IFRDUFNlcnZlcjo6cmVhZChjb25uZWN0aW9uSGFuZGxlKTsKKyAgICBhdXRvIHJlcXVlc3RTdHJp
bmcgPSBTdHJpbmc6OmZyb21VVEY4KHJlcXVlc3QuZGF0YSgpLCByZXF1ZXN0LnNpemUoKSk7CisK
KyAgICBjb25zdCBTdHJpbmcgZ2V0UGF0aFByZWZpeCgiR0VUICIpOworICAgIGNvbnN0IFN0cmlu
ZyBwb3N0UGF0aFByZWZpeCgiUE9TVCAiKTsKKyAgICBjb25zdCBTdHJpbmcgcGF0aFN1ZmZpeCgi
IEhUVFAvMS4xXHJcbiIpOworCisgICAgYXV0byBwYXRoRW5kID0gcmVxdWVzdFN0cmluZy5maW5k
KHBhdGhTdWZmaXgpOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UocGF0aEVuZCAhPSBub3RGb3Vu
ZCAsICJIVFRQU2VydmVyIGFzc3VtZXMgcmVxdWVzdCBpcyBIVFRQIDEuMSIpOworICAgIGF1dG8g
ZG91YmxlTmV3bGluZSA9IHJlcXVlc3RTdHJpbmcuZmluZCgiXHJcblxyXG4iKTsKKyAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKGRvdWJsZU5ld2xpbmUgIT0gbm90Rm91bmQsICJIVFRQU2VydmVyIGFz
c3VtZXMgZW50aXJlIEhUVFAgcmVxdWVzdCBpcyByZWNlaXZlZCBhdCBvbmNlIik7CisKKyAgICBz
aXplX3QgcGF0aFByZWZpeExlbmd0aCA9IDA7CisgICAgaWYgKCFyZXF1ZXN0U3RyaW5nLmZpbmQo
Z2V0UGF0aFByZWZpeCkpCisgICAgICAgIHBhdGhQcmVmaXhMZW5ndGggPSBnZXRQYXRoUHJlZml4
Lmxlbmd0aCgpOworICAgIGVsc2UgaWYgKCFyZXF1ZXN0U3RyaW5nLmZpbmQocG9zdFBhdGhQcmVm
aXgpKQorICAgICAgICBwYXRoUHJlZml4TGVuZ3RoID0gcG9zdFBhdGhQcmVmaXgubGVuZ3RoKCk7
CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShwYXRoUHJlZml4TGVuZ3RoLCAiSFRUUFNlcnZlciBh
c3N1bWVzIHJlcXVlc3QgaXMgR0VUIG9yIFBPU1QiKTsKKworICAgIHNpemVfdCBwYXRoTGVuZ3Ro
ID0gcGF0aEVuZCAtIHBhdGhQcmVmaXhMZW5ndGg7CisgICAgU3RyaW5nIHBhdGggPSByZXF1ZXN0
U3RyaW5nLnN1YnN0cmluZyhwYXRoUHJlZml4TGVuZ3RoLCBwYXRoTGVuZ3RoKTsKKyAgICBpZiAo
cGF0aC5maW5kKCJodHRwOi8vIikgIT0gbm90Rm91bmQgfHwgcGF0aC5maW5kKCJodHRwczovLyIp
ICE9IG5vdEZvdW5kKSB7CisgICAgICAgIFVSTCByZXF1ZXN0VVJMKHsgfSwgcGF0aCk7CisgICAg
ICAgIHBhdGggPSBTdHJpbmcocmVxdWVzdFVSTC5wYXRoKCkuY2hhcmFjdGVyczgoKSwgcmVxdWVz
dFVSTC5wYXRoKCkubGVuZ3RoKCkpOworICAgIH0KKworICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uo
bV9yZXF1ZXN0UmVzcG9uc2VNYXAuY29udGFpbnMocGF0aCksICJUaGlzIEhUVFBTZXJ2ZXIgZG9l
cyBub3Qga25vdyBob3cgdG8gcmVzcG9uZCB0byBhIHJlcXVlc3QgZm9yICVzIiwgcGF0aC51dGY4
KCkuZGF0YSgpKTsKKworICAgIGF1dG8gY29udGVudExlbmd0aEJlZ2luID0gcmVxdWVzdFN0cmlu
Zy5maW5kKCJDb250ZW50LUxlbmd0aDogIik7CisgICAgaWYgKGNvbnRlbnRMZW5ndGhCZWdpbiAh
PSBub3RGb3VuZCkgeworICAgICAgICBhdXRvIGNvbnRlbnRMZW5ndGhFbmQgPSByZXF1ZXN0U3Ry
aW5nLmZpbmQoIlxyXG4iLCBjb250ZW50TGVuZ3RoQmVnaW4pOworICAgICAgICBhdXRvIGxlbmd0
aFN0cmluZyA9IHJlcXVlc3RTdHJpbmcuc3Vic3RyaW5nKGNvbnRlbnRMZW5ndGhCZWdpbiwgY29u
dGVudExlbmd0aEVuZCAtIGNvbnRlbnRMZW5ndGhCZWdpbik7CisgICAgICAgIHNpemVfdCBjb250
ZW50TGVuZ3RoID0gbGVuZ3RoU3RyaW5nLnRvVUludCgpOworICAgICAgICBzaXplX3QgaGVhZGVy
TGVuZ3RoID0gZG91YmxlTmV3bGluZSArIFN0cmluZygiXHJcblxyXG4iKS5sZW5ndGgoKTsKKyAg
ICB9CisKKyAgICBhdXRvIHJlc3BvbnNlID0gbV9yZXF1ZXN0UmVzcG9uc2VNYXAuZ2V0KHBhdGgp
OworICAgIFN0cmluZ0J1aWxkZXIgcmVzcG9uc2VCdWlsZGVyOworICAgIHJlc3BvbnNlQnVpbGRl
ci5hcHBlbmQoIkhUVFAvMS4xICIpOworICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmROdW1iZXIo
cmVzcG9uc2Uuc3RhdHVzQ29kZSk7CisgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZCgnICcpOwor
ICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmQoc3RhdHVzVGV4dChyZXNwb25zZS5zdGF0dXNDb2Rl
KSk7CisgICAgcmVzcG9uc2VCdWlsZGVyLmFwcGVuZCgiXHJcbkNvbnRlbnQtTGVuZ3RoOiAiKTsK
KyAgICByZXNwb25zZUJ1aWxkZXIuYXBwZW5kTnVtYmVyKHJlc3BvbnNlLmJvZHkubGVuZ3RoKCkp
OworICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmQoIlxyXG4iKTsKKyAgICBmb3IgKGF1dG8mIHBh
aXIgOiByZXNwb25zZS5oZWFkZXJGaWVsZHMpIHsKKyAgICAgICAgcmVzcG9uc2VCdWlsZGVyLmFw
cGVuZChwYWlyLmtleSk7CisgICAgICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmQoIjogIik7Cisg
ICAgICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmQocGFpci52YWx1ZSk7CisgICAgICAgIHJlc3Bv
bnNlQnVpbGRlci5hcHBlbmQoIlxyXG4iKTsKKyAgICB9CisgICAgcmVzcG9uc2VCdWlsZGVyLmFw
cGVuZCgiXHJcbiIpOworICAgIHJlc3BvbnNlQnVpbGRlci5hcHBlbmQocmVzcG9uc2UuYm9keSk7
CisKKyAgICBhdXRvIHJlc3BvbnNlQm9keUFuZEhlYWRlciA9IHJlc3BvbnNlQnVpbGRlci50b1N0
cmluZygpLnJlbGVhc2VJbXBsKCk7CisgICAgVENQU2VydmVyOjp3cml0ZShjb25uZWN0aW9uSGFu
ZGxlLCByZXNwb25zZUJvZHlBbmRIZWFkZXItPmNoYXJhY3RlcnM4KCksIHJlc3BvbnNlQm9keUFu
ZEhlYWRlci0+bGVuZ3RoKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2N1cmwvSFRUUFNlcnZlci5oIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9jdXJsL0hUVFBTZXJ2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MDcwMzk4OTVhOTYz
ZmM0NTY0YTBjNzVmOWM3NTRiYzA4NjUyOWE3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9jdXJsL0hUVFBTZXJ2ZXIuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlRDUFNlcnZlci5oIgorI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSSB7CisKK2NsYXNzIEhUVFBTZXJ2ZXIgeworcHVibGljOgorICAgIHN0cnVj
dCBIVFRQUmVzcG9uc2U7CisgICAgZW51bSBjbGFzcyBQcm90b2NvbCA6IHVpbnQ4X3QgeyBIdHRw
LCBIdHRwcywgSHR0cHNXaXRoTGVnYWN5VExTIH07CisKKyAgICBIVFRQU2VydmVyKHN0ZDo6aW5p
dGlhbGl6ZXJfbGlzdDxzdGQ6OnBhaXI8U3RyaW5nLCBIVFRQUmVzcG9uc2U+PiwgUHJvdG9jb2wg
PSBQcm90b2NvbDo6SHR0cCwgc2l6ZV90IGNvbm5lY3Rpb25zID0gMSwgT3B0aW9uYWw8U3RyaW5n
PiA9IFdURjo6bnVsbG9wdCwgT3B0aW9uYWw8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gPSBX
VEY6Om51bGxvcHQpOworICAgIH5IVFRQU2VydmVyKCk7CisKKyAgICBTdHJpbmcgdXJsKCkgY29u
c3Q7CisgICAgdWludDE2X3QgcG9ydCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHZvaWQgcmVzcG9uZFRvUmVxdWVzdHMoVCk7CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8VENQU2VydmVyPiBtX3NlcnZlcjsKKyAgICBjb25zdCBQcm90b2NvbCBtX3Byb3RvY29s
OworICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBIVFRQUmVzcG9uc2U+IG1fcmVxdWVzdFJlc3Bv
bnNlTWFwOworfTsKKworc3RydWN0IEhUVFBTZXJ2ZXI6OkhUVFBSZXNwb25zZSB7CisgICAgSFRU
UFJlc3BvbnNlKFN0cmluZyYmIGJvZHkpCisgICAgICAgIDogYm9keShXVEZNb3ZlKGJvZHkpKSB7
IH0KKyAgICBIVFRQUmVzcG9uc2UoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mJiBoZWFkZXJGaWVs
ZHMsIFN0cmluZyYmIGJvZHkpCisgICAgICAgIDogaGVhZGVyRmllbGRzKFdURk1vdmUoaGVhZGVy
RmllbGRzKSkKKyAgICAgICAgLCBib2R5KFdURk1vdmUoYm9keSkpIHsgfQorICAgIEhUVFBSZXNw
b25zZSh1bnNpZ25lZCBzdGF0dXNDb2RlLCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYmIGhlYWRl
ckZpZWxkcywgU3RyaW5nJiYgYm9keSA9IHsgfSkKKyAgICAgICAgOiBzdGF0dXNDb2RlKHN0YXR1
c0NvZGUpCisgICAgICAgICwgaGVhZGVyRmllbGRzKFdURk1vdmUoaGVhZGVyRmllbGRzKSkKKyAg
ICAgICAgLCBib2R5KFdURk1vdmUoYm9keSkpIHsgfQorCisgICAgSFRUUFJlc3BvbnNlKGNvbnN0
IEhUVFBSZXNwb25zZSYpID0gZGVmYXVsdDsKKyAgICBIVFRQUmVzcG9uc2UoSFRUUFJlc3BvbnNl
JiYpID0gZGVmYXVsdDsKKyAgICBIVFRQUmVzcG9uc2UoKSA9IGRlZmF1bHQ7CisgICAgSFRUUFJl
c3BvbnNlJiBvcGVyYXRvcj0oY29uc3QgSFRUUFJlc3BvbnNlJikgPSBkZWZhdWx0OworICAgIEhU
VFBSZXNwb25zZSYgb3BlcmF0b3I9KEhUVFBSZXNwb25zZSYmKSA9IGRlZmF1bHQ7CisKKyAgICB1
bnNpZ25lZCBzdGF0dXNDb2RlIHsgMjAwIH07CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4g
aGVhZGVyRmllbGRzOworICAgIFN0cmluZyBib2R5OworfTsKKworfSAvLyBuYW1lc3BhY2UgVGVz
dFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS93aW4vUGxhdGZvcm1T
b2NrZXRXaW4uY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS93aW4vUGxhdGZvcm1Tb2NrZXRXaW4u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjc3M2YwMWEwMmIzMjU0OTMxYjg3Nzk1NzAyNmZiZTE1NmIwMTJiMmQK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL3dpbi9QbGF0Zm9ybVNvY2tl
dFdpbi5jcHAKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBTb255
IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Tb2NrZXQuaCIKKworI2luY2x1ZGUgPG11dGV4Pgor
CituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CituYW1lc3BhY2UgU29ja2V0IHsKKwordm9pZCBp
bml0aWFsaXplKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgZmxhZzsKKworICAgIHN0
ZDo6Y2FsbF9vbmNlKGZsYWcsIFtdIHsKKyAgICAgICAgV1NBREFUQSBkYXRhOworICAgICAgICBX
U0FTdGFydHVwKE1BS0VXT1JEKDIsIDApLCAmZGF0YSk7CisgICAgfSk7Cit9CisKK1NvY2tldCBz
b2NrZXQoaW50IGRvbWFpbiwgaW50IHR5cGUsIGludCBwcm90b2NvbCkKK3sKKyAgICByZXR1cm4g
Ojpzb2NrZXQoZG9tYWluLCB0eXBlLCBwcm90b2NvbCk7Cit9CisKK2Jvb2wgaXNWYWxpZFNvY2tl
dChTb2NrZXQgc29ja2V0KQoreworICAgIHJldHVybiBzb2NrZXQgIT0gSU5WQUxJRF9TT0NLRVQ7
Cit9CisKK1NvY2tldCBhY2NlcHQoU29ja2V0IHNvY2tldCkKK3sKKyAgICByZXR1cm4gOjphY2Nl
cHQoc29ja2V0LCBudWxscHRyLCBudWxscHRyKTsKK30KKworaW50IHNodXRkb3duKFNvY2tldCBz
b2NrZXQpCit7CisgICAgcmV0dXJuIDo6c2h1dGRvd24oc29ja2V0LCBTRF9CT1RIKTsKK30KKwor
aW50IGNsb3NlKFNvY2tldCBzb2NrZXQpCit7CisgICAgcmV0dXJuIDo6Y2xvc2Vzb2NrZXQoc29j
a2V0KTsKK30KKworaW50IHJlYWQoU29ja2V0IHNvY2tldCwgdm9pZCogYnVmZmVyLCBzaXplX3Qg
Y291bnQpCit7CisgICAgcmV0dXJuIDo6cmVjdihzb2NrZXQsIHN0YXRpY19jYXN0PGNoYXIqPihi
dWZmZXIpLCBjb3VudCwgMCk7Cit9CisKK2ludCB3cml0ZShTb2NrZXQgc29ja2V0LCBjb25zdCB2
b2lkKiBidWZmZXIsIHNpemVfdCBjb3VudCkKK3sKKyAgICByZXR1cm4gOjpzZW5kKHNvY2tldCwg
c3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGJ1ZmZlciksIGNvdW50LCAwKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgU29ja2V0Cit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>