From: Bryan Schumaker <[email protected]>
idmap_pipe_downcall already clears this field if the upcall succeeds,
but if it fails (rpc.idmapd isn't running) the field will still be set
on the next call triggering a BUG_ON(). This patch tries to handle all
possible ways that the upcall could fail and clear the idmap key data
for each one.
Signed-off-by: Bryan Schumaker <[email protected]>
Cc: [email protected] [>= 3.4]
Signed-off-by: Trond Myklebust <[email protected]>
---
fs/nfs/idmap.c | 56 ++++++++++++++++++++++++++++++++++++++++++--------------
1 file changed, 42 insertions(+), 14 deletions(-)
diff --git a/fs/nfs/idmap.c b/fs/nfs/idmap.c
index b701358..6703c73 100644
--- a/fs/nfs/idmap.c
+++ b/fs/nfs/idmap.c
@@ -61,6 +61,12 @@ struct idmap {
struct mutex idmap_mutex;
};
+struct idmap_legacy_upcalldata {
+ struct rpc_pipe_msg pipe_msg;
+ struct idmap_msg idmap_msg;
+ struct idmap *idmap;
+};
+
/**
* nfs_fattr_init_names - initialise the nfs_fattr owner_name/group_name fields
* @fattr: fully initialised struct nfs_fattr
@@ -324,6 +330,7 @@ static ssize_t nfs_idmap_get_key(const char *name, size_t namelen,
ret = nfs_idmap_request_key(&key_type_id_resolver_legacy,
name, namelen, type, data,
data_size, idmap);
+ idmap->idmap_key_cons = NULL;
mutex_unlock(&idmap->idmap_mutex);
}
return ret;
@@ -380,11 +387,13 @@ static const match_table_t nfs_idmap_tokens = {
static int nfs_idmap_legacy_upcall(struct key_construction *, const char *, void *);
static ssize_t idmap_pipe_downcall(struct file *, const char __user *,
size_t);
+static void idmap_release_pipe(struct inode *);
static void idmap_pipe_destroy_msg(struct rpc_pipe_msg *);
static const struct rpc_pipe_ops idmap_upcall_ops = {
.upcall = rpc_pipe_generic_upcall,
.downcall = idmap_pipe_downcall,
+ .release_pipe = idmap_release_pipe,
.destroy_msg = idmap_pipe_destroy_msg,
};
@@ -616,7 +625,8 @@ void nfs_idmap_quit(void)
nfs_idmap_quit_keyring();
}
-static int nfs_idmap_prepare_message(char *desc, struct idmap_msg *im,
+static int nfs_idmap_prepare_message(char *desc, struct idmap *idmap,
+ struct idmap_msg *im,
struct rpc_pipe_msg *msg)
{
substring_t substr;
@@ -659,6 +669,7 @@ static int nfs_idmap_legacy_upcall(struct key_construction *cons,
const char *op,
void *aux)
{
+ struct idmap_legacy_upcalldata *data;
struct rpc_pipe_msg *msg;
struct idmap_msg *im;
struct idmap *idmap = (struct idmap *)aux;
@@ -666,15 +677,15 @@ static int nfs_idmap_legacy_upcall(struct key_construction *cons,
int ret = -ENOMEM;
/* msg and im are freed in idmap_pipe_destroy_msg */
- msg = kmalloc(sizeof(*msg), GFP_KERNEL);
- if (!msg)
- goto out0;
-
- im = kmalloc(sizeof(*im), GFP_KERNEL);
- if (!im)
+ data = kmalloc(sizeof(*data), GFP_KERNEL);
+ if (!data)
goto out1;
- ret = nfs_idmap_prepare_message(key->description, im, msg);
+ msg = &data->pipe_msg;
+ im = &data->idmap_msg;
+ data->idmap = idmap;
+
+ ret = nfs_idmap_prepare_message(key->description, idmap, im, msg);
if (ret < 0)
goto out2;
@@ -683,15 +694,15 @@ static int nfs_idmap_legacy_upcall(struct key_construction *cons,
ret = rpc_queue_upcall(idmap->idmap_pipe, msg);
if (ret < 0)
- goto out2;
+ goto out3;
return ret;
+out3:
+ idmap->idmap_key_cons = NULL;
out2:
- kfree(im);
+ kfree(data);
out1:
- kfree(msg);
-out0:
complete_request_key(cons, ret);
return ret;
}
@@ -775,9 +786,26 @@ out_incomplete:
static void
idmap_pipe_destroy_msg(struct rpc_pipe_msg *msg)
{
+ struct idmap_legacy_upcalldata *data = container_of(msg,
+ struct idmap_legacy_upcalldata,
+ pipe_msg);
+ struct idmap *idmap = data->idmap;
+ struct key_construction *cons;
+ if (msg->errno) {
+ cons = ACCESS_ONCE(idmap->idmap_key_cons);
+ idmap->idmap_key_cons = NULL;
+ complete_request_key(cons, msg->errno);
+ }
/* Free memory allocated in nfs_idmap_legacy_upcall() */
- kfree(msg->data);
- kfree(msg);
+ kfree(data);
+}
+
+static void
+idmap_release_pipe(struct inode *inode)
+{
+ struct rpc_inode *rpci = RPC_I(inode);
+ struct idmap *idmap = (struct idmap *)rpci->private;
+ idmap->idmap_key_cons = NULL;
}
int nfs_map_name_to_uid(const struct nfs_server *server, const char *name, size_t namelen, __u32 *uid)
--
1.7.11.2
Patch fails with "
git apply --check
fatal: patch fragment without header at line 31: @@ -380,11 +387,13 @@ static const match_table_t nfs_idmap_tokens = { static int nfs_idmap_legacy_upcall(struct key_construction *, const char *, void *); static ssize_t idmap_pipe_downcall(struct file *, const char __user *,
"
-----Original Message-----
From: Trond Myklebust [mailto:[email protected]]
Sent: Thursday, August 16, 2012 1:24 PM
To: William Dauchy
Cc: Shai Lazmi; Bryan Schumaker; [email protected]
Subject: [PATCH 1/2] NFS: Clear key construction data if the idmap upcall fails
From: Bryan Schumaker <[email protected]>
idmap_pipe_downcall already clears this field if the upcall succeeds,
but if it fails (rpc.idmapd isn't running) the field will still be set
on the next call triggering a BUG_ON(). This patch tries to handle all
possible ways that the upcall could fail and clear the idmap key data
for each one.
Signed-off-by: Bryan Schumaker <[email protected]>
Cc: [email protected] [>= 3.4]
Signed-off-by: Trond Myklebust <[email protected]>
---
fs/nfs/idmap.c | 56 ++++++++++++++++++++++++++++++++++++++++++--------------
1 file changed, 42 insertions(+), 14 deletions(-)
diff --git a/fs/nfs/idmap.c b/fs/nfs/idmap.c
index b701358..6703c73 100644
--- a/fs/nfs/idmap.c
+++ b/fs/nfs/idmap.c
@@ -61,6 +61,12 @@ struct idmap {
struct mutex idmap_mutex;
};
+struct idmap_legacy_upcalldata {
+ struct rpc_pipe_msg pipe_msg;
+ struct idmap_msg idmap_msg;
+ struct idmap *idmap;
+};
+
/**
* nfs_fattr_init_names - initialise the nfs_fattr owner_name/group_name fields
* @fattr: fully initialised struct nfs_fattr
@@ -324,6 +330,7 @@ static ssize_t nfs_idmap_get_key(const char *name, size_t namelen,
ret = nfs_idmap_request_key(&key_type_id_resolver_legacy,
name, namelen, type, data,
data_size, idmap);
+ idmap->idmap_key_cons = NULL;
mutex_unlock(&idmap->idmap_mutex);
}
return ret;
@@ -380,11 +387,13 @@ static const match_table_t nfs_idmap_tokens = {
static int nfs_idmap_legacy_upcall(struct key_construction *, const char *, void *);
static ssize_t idmap_pipe_downcall(struct file *, const char __user *,
size_t);
+static void idmap_release_pipe(struct inode *);
static void idmap_pipe_destroy_msg(struct rpc_pipe_msg *);
static const struct rpc_pipe_ops idmap_upcall_ops = {
.upcall = rpc_pipe_generic_upcall,
.downcall = idmap_pipe_downcall,
+ .release_pipe = idmap_release_pipe,
.destroy_msg = idmap_pipe_destroy_msg,
};
@@ -616,7 +625,8 @@ void nfs_idmap_quit(void)
nfs_idmap_quit_keyring();
}
-static int nfs_idmap_prepare_message(char *desc, struct idmap_msg *im,
+static int nfs_idmap_prepare_message(char *desc, struct idmap *idmap,
+ struct idmap_msg *im,
struct rpc_pipe_msg *msg)
{
substring_t substr;
@@ -659,6 +669,7 @@ static int nfs_idmap_legacy_upcall(struct key_construction *cons,
const char *op,
void *aux)
{
+ struct idmap_legacy_upcalldata *data;
struct rpc_pipe_msg *msg;
struct idmap_msg *im;
struct idmap *idmap = (struct idmap *)aux;
@@ -666,15 +677,15 @@ static int nfs_idmap_legacy_upcall(struct key_construction *cons,
int ret = -ENOMEM;
/* msg and im are freed in idmap_pipe_destroy_msg */
- msg = kmalloc(sizeof(*msg), GFP_KERNEL);
- if (!msg)
- goto out0;
-
- im = kmalloc(sizeof(*im), GFP_KERNEL);
- if (!im)
+ data = kmalloc(sizeof(*data), GFP_KERNEL);
+ if (!data)
goto out1;
- ret = nfs_idmap_prepare_message(key->description, im, msg);
+ msg = &data->pipe_msg;
+ im = &data->idmap_msg;
+ data->idmap = idmap;
+
+ ret = nfs_idmap_prepare_message(key->description, idmap, im, msg);
if (ret < 0)
goto out2;
@@ -683,15 +694,15 @@ static int nfs_idmap_legacy_upcall(struct key_construction *cons,
ret = rpc_queue_upcall(idmap->idmap_pipe, msg);
if (ret < 0)
- goto out2;
+ goto out3;
return ret;
+out3:
+ idmap->idmap_key_cons = NULL;
out2:
- kfree(im);
+ kfree(data);
out1:
- kfree(msg);
-out0:
complete_request_key(cons, ret);
return ret;
}
@@ -775,9 +786,26 @@ out_incomplete:
static void
idmap_pipe_destroy_msg(struct rpc_pipe_msg *msg)
{
+ struct idmap_legacy_upcalldata *data = container_of(msg,
+ struct idmap_legacy_upcalldata,
+ pipe_msg);
+ struct idmap *idmap = data->idmap;
+ struct key_construction *cons;
+ if (msg->errno) {
+ cons = ACCESS_ONCE(idmap->idmap_key_cons);
+ idmap->idmap_key_cons = NULL;
+ complete_request_key(cons, msg->errno);
+ }
/* Free memory allocated in nfs_idmap_legacy_upcall() */
- kfree(msg->data);
- kfree(msg);
+ kfree(data);
+}
+
+static void
+idmap_release_pipe(struct inode *inode)
+{
+ struct rpc_inode *rpci = RPC_I(inode);
+ struct idmap *idmap = (struct idmap *)rpci->private;
+ idmap->idmap_key_cons = NULL;
}
int nfs_map_name_to_uid(const struct nfs_server *server, const char *name, size_t namelen, __u32 *uid)
--
1.7.11.2
This message and any attached documents contain information from QLogic Corporation or its wholly-owned subsidiaries that may be confidential. If you are not the intended recipient, you may not read, copy, distribute, or use this information. If you have received this transmission in error, please notify the sender immediately by reply e-mail and then delete this message.
T24gVGh1LCAyMDEyLTA4LTE2IGF0IDE3OjE1IC0wNzAwLCBTaGFpIExhem1pIHdyb3RlOg0KPiBn
aXQgYXBwbHkgLS1jaGVjayAwMDAxLU5GUy1DbGVhci1rZXktY29uc3RydWN0aW9uLWRhdGEtaWYt
dGhlLWlkbWFwLXVwY2FsbC0ucGF0Y2gNCj4gZXJyb3I6IHBhdGNoIGZhaWxlZDogZnMvbmZzL2lk
bWFwLmM6NjENCj4gZXJyb3I6IGZzL25mcy9pZG1hcC5jOiBwYXRjaCBkb2VzIG5vdCBhcHBseQ0K
PiANCj4gDQo+IGlkbWFwLmMNCj4gZGVmaW5lIE5GU19VSU5UX01BWExFTiAxMQ0KPiANCj4gc3Rh
dGljIGNvbnN0IHN0cnVjdCBjcmVkICppZF9yZXNvbHZlcl9jYWNoZTsNCj4gc3RhdGljIHN0cnVj
dCBrZXlfdHlwZSBrZXlfdHlwZV9pZF9yZXNvbHZlcl9sZWdhY3k7DQo+IA0KPiBzdHJ1Y3QgaWRt
YXAgew0KPiAgICAgICAgIHN0cnVjdCBycGNfcGlwZSAgICAgICAgICppZG1hcF9waXBlOw0KPiAg
ICAgICAgIHN0cnVjdCBrZXlfY29uc3RydWN0aW9uICppZG1hcF9rZXlfY29uczsNCj4gICAgICAg
ICBzdHJ1Y3QgbXV0ZXggICAgICAgICAgICBpZG1hcF9tdXRleDsNCj4gfTsNCg0KVGhhdCdzIGhv
dyBpdCBzaG91bGQgbW9yZSBvciBsZXNzIGxvb2sgYWZ0ZXIgYXBwbHlpbmcgdGhlIHBhdGNoLiBJ
J20NCmd1ZXNzaW5nIHRoYXQgb25lIG9mIHlvdXIgcHJldmlvdXMgYXR0ZW1wdHMgaGFzIHBhcnRp
YWxseSB3b3JrZWQsIGFuZA0KaGFzIGxlZnQgeW91ciBjaGVja2VkIG91dCBnaXQgdHJlZSBpbiBh
ICJkaXJ0eSIgc3RhdGUuDQoNClBsZWFzZSB0cnkgdGhlIGZvbGxvd2luZzoNCg0KJCBnaXQgcmVz
ZXQgLS1oYXJkIEhFQUQNCiQgZ2l0IGFwcGx5IC0tY2hlY2sgMDAwMS1ORlMtQ2xlYXIta2V5LWNv
bnN0cnVjdGlvbi1kYXRhLWlmLXRoZS1pZG1hcC11cGNhbGwtLnBhdGNoDQokIGdpdCBhcHBseSAt
LWNoZWNrIDAwMDItTkZTLXJldHVybi1FTk9LRVktd2hlbi10aGUtdXBjYWxsLWZhaWxzLXRvLW1h
cC10aGUtbi5wYXRjaA0KDQoNCj4gDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZy
b206IE15a2xlYnVzdCwgVHJvbmQgW21haWx0bzpUcm9uZC5NeWtsZWJ1c3RAbmV0YXBwLmNvbV0N
Cj4gU2VudDogVGh1cnNkYXksIEF1Z3VzdCAxNiwgMjAxMiA1OjE0IFBNDQo+IFRvOiBTaGFpIExh
em1pDQo+IENjOiBXaWxsaWFtIERhdWNoeTsgU2NodW1ha2VyLCBCcnlhbjsgbGludXgtbmZzQHZn
ZXIua2VybmVsLm9yZw0KPiBTdWJqZWN0OiBSZTogW1BBVENIIDEvMl0gTkZTOiBDbGVhciBrZXkg
Y29uc3RydWN0aW9uIGRhdGEgaWYgdGhlIGlkbWFwIHVwY2FsbCBmYWlscw0KPiANCj4gT24gVGh1
LCAyMDEyLTA4LTE2IGF0IDE3OjA3IC0wNzAwLCBTaGFpIExhem1pIHdyb3RlOg0KPiA+IFNvcnJ5
IC0gY29tcGFueSdzIHBvbGljeSAuLi4NCj4gPiBXaGF0IGlkbWFwIHZlcnNpb24gd2FzIHRoaXMg
cGF0Y2ggdXNlZCBhZ2FpbnN0PyBUaGUgb25lIEkgaGF2ZSAoYjcwMTM1OGMpIHNlZW1zIHRvIGJl
IGEgYml0IGRpZmZlcmVudCAoSSB1c2VkIGxhdGVzdCBwdWxsIGNvbW1pdCBkZGYzNDNmNjM1ZmU0
NDQwY2FkNTI4ZTEyZjk2ZjI4YmQ1MGFhMDk5KSwgaGVuY2UgdGhlIHBhdGNoIGZhaWxzIGFnYWlu
DQo+IA0KPiBJdCB3b3JrcyBmaW5lIGZvciBtZSBhZ2FpbnN0IGNvbW1pdCBkZGYzNDNmNjM1ZmU0
NDQwY2FkNTI4ZTEyZjk2ZjI4YmQ1MGFhMDk5Og0KPiANCj4gW3Ryb25kbXlAbGFkZSBsaW51eC1u
ZnNdJCBnaXQgYnJhbmNoIHRlc3QtYXBwbHkgZGRmMzQzZjYzNWZlNDQ0MGNhZDUyOGUxMmY5NmYy
OGJkNTBhYTA5OQ0KPiBbdHJvbmRteUBsYWRlIGxpbnV4LW5mc10kIGdpdCBjaGVja291dCB0ZXN0
LWFwcGx5DQo+IFN3aXRjaGVkIHRvIGJyYW5jaCAndGVzdC1hcHBseScNCj4gW3Ryb25kbXlAbGFk
ZSBsaW51eC1uZnNdJCBnaXQgYW0gfi9EZXNrdG9wL2Zvcl9zaGFpLzAwMDEtTkZTLUNsZWFyLWtl
eS1jb25zdHJ1Y3Rpb24tZGF0YS1pZi10aGUtaWRtYXAtdXBjYWxsLS5wYXRjaA0KPiBBcHBseWlu
ZzogTkZTOiBDbGVhciBrZXkgY29uc3RydWN0aW9uIGRhdGEgaWYgdGhlIGlkbWFwIHVwY2FsbCBm
YWlscw0KPiBbdHJvbmRteUBsYWRlIGxpbnV4LW5mc10kIGdpdCBhbSB+L0Rlc2t0b3AvZm9yX3No
YWkvMDAwMi1ORlMtcmV0dXJuLUVOT0tFWS13aGVuLXRoZS11cGNhbGwtZmFpbHMtdG8tbWFwLXRo
ZS1uLnBhdGNoDQo+IEFwcGx5aW5nOiBORlM6IHJldHVybiAtRU5PS0VZIHdoZW4gdGhlIHVwY2Fs
bCBmYWlscyB0byBtYXAgdGhlIG5hbWUNCj4gDQo+IFdoYXQgZXJyb3IgbWVzc2FnZXMgYXJlIHlv
dSBzZWVpbmc/DQo+IA0KPiBDaGVlcnMNCj4gICBUcm9uZA0KPiANCj4gPiAtLS0tLU9yaWdpbmFs
IE1lc3NhZ2UtLS0tLQ0KPiA+IEZyb206IE15a2xlYnVzdCwgVHJvbmQgW21haWx0bzpUcm9uZC5N
eWtsZWJ1c3RAbmV0YXBwLmNvbV0NCj4gPiBTZW50OiBUaHVyc2RheSwgQXVndXN0IDE2LCAyMDEy
IDQ6NTcgUE0NCj4gPiBUbzogU2hhaSBMYXptaQ0KPiA+IENjOiBXaWxsaWFtIERhdWNoeTsgU2No
dW1ha2VyLCBCcnlhbjsgbGludXgtbmZzQHZnZXIua2VybmVsLm9yZw0KPiA+IFN1YmplY3Q6IFJl
OiBbUEFUQ0ggMS8yXSBORlM6IENsZWFyIGtleSBjb25zdHJ1Y3Rpb24gZGF0YSBpZiB0aGUgaWRt
YXAgdXBjYWxsIGZhaWxzDQo+ID4NCj4gPiBPbiBUaHUsIDIwMTItMDgtMTYgYXQgMTY6NTAgLTA3
MDAsIFNoYWkgTGF6bWkgd3JvdGU6DQo+ID4gPiBNUyBvdXRsb29rDQo+ID4NCj4gPiBEb24ndCBl
dmVyIHVzZSBMb29rT3V0IGZvciBwYXRjaGVzLiBJdHMgIkkganVzdCByZWZvcm1hdHRlZCB5b3Vy
IGVtYWlsIg0KPiA+IHdvbmRlciBmZWF0dXJlIGJyZWFrcyBhbGwgdGhlIHdoaXRlc3BhY2UuDQo+
ID4NCj4gPiA+IEJlc3QgdGhpbmcgaXMgdG8gYXR0YWNoZWQgdGhlIHBhdGNoDQo+ID4NCj4gPiBX
ZSBkbyBub3Qgbm9ybWFsbHkgdXNlIGF0dGFjaG1lbnRzIG9uIHRoZSBtYWlsaW5nIGxpc3QgYmVj
YXVzZSBpdCBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIGNvbW1lbnQgdGhlIHBhdGNoZXMgaW5saW5l
LiBBaCB3ZWxsLCBoZXJlIGdvZXMuLi4NCj4gPg0KPiA+IC0tDQo+ID4gVHJvbmQgTXlrbGVidXN0
DQo+ID4gTGludXggTkZTIGNsaWVudCBtYWludGFpbmVyDQo+ID4NCj4gPiBOZXRBcHANCj4gPiBU
cm9uZC5NeWtsZWJ1c3RAbmV0YXBwLmNvbQ0KPiA+IHd3dy5uZXRhcHAuY29tDQo+ID4NCj4gPg0K
PiA+IFRoaXMgbWVzc2FnZSBhbmQgYW55IGF0dGFjaGVkIGRvY3VtZW50cyBjb250YWluIGluZm9y
bWF0aW9uIGZyb20gUUxvZ2ljIENvcnBvcmF0aW9uIG9yIGl0cyB3aG9sbHktb3duZWQgc3Vic2lk
aWFyaWVzIHRoYXQgbWF5IGJlIGNvbmZpZGVudGlhbC4gSWYgeW91IGFyZSBub3QgdGhlIGludGVu
ZGVkIHJlY2lwaWVudCwgeW91IG1heSBub3QgcmVhZCwgY29weSwgZGlzdHJpYnV0ZSwgb3IgdXNl
IHRoaXMgaW5mb3JtYXRpb24uIElmIHlvdSBoYXZlIHJlY2VpdmVkIHRoaXMgdHJhbnNtaXNzaW9u
IGluIGVycm9yLCBwbGVhc2Ugbm90aWZ5IHRoZSBzZW5kZXIgaW1tZWRpYXRlbHkgYnkgcmVwbHkg
ZS1tYWlsIGFuZCB0aGVuIGRlbGV0ZSB0aGlzIG1lc3NhZ2UuDQo+IA0KPiAtLQ0KPiBUcm9uZCBN
eWtsZWJ1c3QNCj4gTGludXggTkZTIGNsaWVudCBtYWludGFpbmVyDQo+IA0KPiBOZXRBcHANCj4g
VHJvbmQuTXlrbGVidXN0QG5ldGFwcC5jb20NCj4gd3d3Lm5ldGFwcC5jb20NCj4gDQo+IA0KPiBU
aGlzIG1lc3NhZ2UgYW5kIGFueSBhdHRhY2hlZCBkb2N1bWVudHMgY29udGFpbiBpbmZvcm1hdGlv
biBmcm9tIFFMb2dpYyBDb3Jwb3JhdGlvbiBvciBpdHMgd2hvbGx5LW93bmVkIHN1YnNpZGlhcmll
cyB0aGF0IG1heSBiZSBjb25maWRlbnRpYWwuIElmIHlvdSBhcmUgbm90IHRoZSBpbnRlbmRlZCBy
ZWNpcGllbnQsIHlvdSBtYXkgbm90IHJlYWQsIGNvcHksIGRpc3RyaWJ1dGUsIG9yIHVzZSB0aGlz
IGluZm9ybWF0aW9uLiBJZiB5b3UgaGF2ZSByZWNlaXZlZCB0aGlzIHRyYW5zbWlzc2lvbiBpbiBl
cnJvciwgcGxlYXNlIG5vdGlmeSB0aGUgc2VuZGVyIGltbWVkaWF0ZWx5IGJ5IHJlcGx5IGUtbWFp
bCBhbmQgdGhlbiBkZWxldGUgdGhpcyBtZXNzYWdlLg0KDQotLSANClRyb25kIE15a2xlYnVzdA0K
TGludXggTkZTIGNsaWVudCBtYWludGFpbmVyDQoNCk5ldEFwcA0KVHJvbmQuTXlrbGVidXN0QG5l
dGFwcC5jb20NCnd3dy5uZXRhcHAuY29tDQoNCg==
T24gVGh1LCAyMDEyLTA4LTE2IGF0IDE4OjA5IC0wNzAwLCBTaGFpIExhem1pIHdyb3RlOg0KPiBJ
J3ZlIGxvb2tlZCBhdCB0aGUgcmVwbyAoaHR0cDovL2dpdC5rZXJuZWwub3JnLz9wPWxpbnV4L2tl
cm5lbC9naXQvdG9ydmFsZHMvbGludXguZ2l0O2E9YmxvYjtmPWZzL25mcy9pZG1hcC5jO2g9Yjcw
MTM1OGMzOWMzNTFkMDYxM2QxZGIyOWViY2YzODJjYThjYjBhNjtoYj1kZGYzNDNmNjM1ZmU0NDQw
Y2FkNTI4ZTEyZjk2ZjI4YmQ1MGFhMDk5KSwgc2VlbXMganVzdCBsaWtlIHdoYXQgSSBoYXZlDQo+
IENhbiBpdCBiZSBhbHJlYWR5IGNoYW5nZWQgb24gdGhlIHRyZWU/DQoNCk5vLiBJdCBoYXNuJ3Qg
YmVlbiBtZXJnZWQgdXBzdHJlYW0geWV0Lg0KDQpIb3dldmVyLCBJJ3ZlIG5vdyBwdXNoZWQgdGhl
IHBhdGNoZXMgdXBzdHJlYW0gdG8gdGhlIE5GUyBidWdmaXhlcw0KYnJhbmNoLiBJbnN0ZWFkIG9m
IGFwcGx5aW5nIHRoZSBwYXRjaGVzLCBwZXJoYXBzIHlvdSBjb3VsZCBqdXN0IHB1bGwgdGhlDQpm
dWxsIHNldCBvZiBORlMgY2xpZW50IGJ1Z2ZpeGVzIGJ5IGRvaW5nDQoNCmdpdCBwdWxsIGdpdDov
L2dpdC5saW51eC1uZnMub3JnL3Byb2plY3RzL3Ryb25kbXkvbGludXgtbmZzLmdpdCBidWdmaXhl
cw0KDQpDaGVlcnMNCiAgVHJvbmQNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBG
cm9tOiBNeWtsZWJ1c3QsIFRyb25kIFttYWlsdG86VHJvbmQuTXlrbGVidXN0QG5ldGFwcC5jb21d
DQo+IFNlbnQ6IFRodXJzZGF5LCBBdWd1c3QgMTYsIDIwMTIgNToyMiBQTQ0KPiBUbzogU2hhaSBM
YXptaQ0KPiBDYzogV2lsbGlhbSBEYXVjaHk7IFNjaHVtYWtlciwgQnJ5YW47IGxpbnV4LW5mc0B2
Z2VyLmtlcm5lbC5vcmcNCj4gU3ViamVjdDogUmU6IFtQQVRDSCAxLzJdIE5GUzogQ2xlYXIga2V5
IGNvbnN0cnVjdGlvbiBkYXRhIGlmIHRoZSBpZG1hcCB1cGNhbGwgZmFpbHMNCj4gDQo+IE9uIFRo
dSwgMjAxMi0wOC0xNiBhdCAxNzoxNSAtMDcwMCwgU2hhaSBMYXptaSB3cm90ZToNCj4gPiBnaXQg
YXBwbHkgLS1jaGVjayAwMDAxLU5GUy1DbGVhci1rZXktY29uc3RydWN0aW9uLWRhdGEtaWYtdGhl
LWlkbWFwLXVwY2FsbC0ucGF0Y2gNCj4gPiBlcnJvcjogcGF0Y2ggZmFpbGVkOiBmcy9uZnMvaWRt
YXAuYzo2MQ0KPiA+IGVycm9yOiBmcy9uZnMvaWRtYXAuYzogcGF0Y2ggZG9lcyBub3QgYXBwbHkN
Cj4gPg0KPiA+DQo+ID4gaWRtYXAuYw0KPiA+IGRlZmluZSBORlNfVUlOVF9NQVhMRU4gMTENCj4g
Pg0KPiA+IHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3JlZCAqaWRfcmVzb2x2ZXJfY2FjaGU7DQo+ID4g
c3RhdGljIHN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV9pZF9yZXNvbHZlcl9sZWdhY3k7DQo+ID4N
Cj4gPiBzdHJ1Y3QgaWRtYXAgew0KPiA+ICAgICAgICAgc3RydWN0IHJwY19waXBlICAgICAgICAg
KmlkbWFwX3BpcGU7DQo+ID4gICAgICAgICBzdHJ1Y3Qga2V5X2NvbnN0cnVjdGlvbiAqaWRtYXBf
a2V5X2NvbnM7DQo+ID4gICAgICAgICBzdHJ1Y3QgbXV0ZXggICAgICAgICAgICBpZG1hcF9tdXRl
eDsNCj4gPiB9Ow0KPiANCj4gVGhhdCdzIGhvdyBpdCBzaG91bGQgbW9yZSBvciBsZXNzIGxvb2sg
YWZ0ZXIgYXBwbHlpbmcgdGhlIHBhdGNoLiBJJ20NCj4gZ3Vlc3NpbmcgdGhhdCBvbmUgb2YgeW91
ciBwcmV2aW91cyBhdHRlbXB0cyBoYXMgcGFydGlhbGx5IHdvcmtlZCwgYW5kDQo+IGhhcyBsZWZ0
IHlvdXIgY2hlY2tlZCBvdXQgZ2l0IHRyZWUgaW4gYSAiZGlydHkiIHN0YXRlLg0KPiANCj4gUGxl
YXNlIHRyeSB0aGUgZm9sbG93aW5nOg0KPiANCj4gJCBnaXQgcmVzZXQgLS1oYXJkIEhFQUQNCj4g
JCBnaXQgYXBwbHkgLS1jaGVjayAwMDAxLU5GUy1DbGVhci1rZXktY29uc3RydWN0aW9uLWRhdGEt
aWYtdGhlLWlkbWFwLXVwY2FsbC0ucGF0Y2gNCj4gJCBnaXQgYXBwbHkgLS1jaGVjayAwMDAyLU5G
Uy1yZXR1cm4tRU5PS0VZLXdoZW4tdGhlLXVwY2FsbC1mYWlscy10by1tYXAtdGhlLW4ucGF0Y2gN
Cj4gDQo+IA0KPiA+DQo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiBGcm9tOiBN
eWtsZWJ1c3QsIFRyb25kIFttYWlsdG86VHJvbmQuTXlrbGVidXN0QG5ldGFwcC5jb21dDQo+ID4g
U2VudDogVGh1cnNkYXksIEF1Z3VzdCAxNiwgMjAxMiA1OjE0IFBNDQo+ID4gVG86IFNoYWkgTGF6
bWkNCj4gPiBDYzogV2lsbGlhbSBEYXVjaHk7IFNjaHVtYWtlciwgQnJ5YW47IGxpbnV4LW5mc0B2
Z2VyLmtlcm5lbC5vcmcNCj4gPiBTdWJqZWN0OiBSZTogW1BBVENIIDEvMl0gTkZTOiBDbGVhciBr
ZXkgY29uc3RydWN0aW9uIGRhdGEgaWYgdGhlIGlkbWFwIHVwY2FsbCBmYWlscw0KPiA+DQo+ID4g
T24gVGh1LCAyMDEyLTA4LTE2IGF0IDE3OjA3IC0wNzAwLCBTaGFpIExhem1pIHdyb3RlOg0KPiA+
ID4gU29ycnkgLSBjb21wYW55J3MgcG9saWN5IC4uLg0KPiA+ID4gV2hhdCBpZG1hcCB2ZXJzaW9u
IHdhcyB0aGlzIHBhdGNoIHVzZWQgYWdhaW5zdD8gVGhlIG9uZSBJIGhhdmUgKGI3MDEzNThjKSBz
ZWVtcyB0byBiZSBhIGJpdCBkaWZmZXJlbnQgKEkgdXNlZCBsYXRlc3QgcHVsbCBjb21taXQgZGRm
MzQzZjYzNWZlNDQ0MGNhZDUyOGUxMmY5NmYyOGJkNTBhYTA5OSksIGhlbmNlIHRoZSBwYXRjaCBm
YWlscyBhZ2Fpbg0KPiA+DQo+ID4gSXQgd29ya3MgZmluZSBmb3IgbWUgYWdhaW5zdCBjb21taXQg
ZGRmMzQzZjYzNWZlNDQ0MGNhZDUyOGUxMmY5NmYyOGJkNTBhYTA5OToNCj4gPg0KPiA+IFt0cm9u
ZG15QGxhZGUgbGludXgtbmZzXSQgZ2l0IGJyYW5jaCB0ZXN0LWFwcGx5IGRkZjM0M2Y2MzVmZTQ0
NDBjYWQ1MjhlMTJmOTZmMjhiZDUwYWEwOTkNCj4gPiBbdHJvbmRteUBsYWRlIGxpbnV4LW5mc10k
IGdpdCBjaGVja291dCB0ZXN0LWFwcGx5DQo+ID4gU3dpdGNoZWQgdG8gYnJhbmNoICd0ZXN0LWFw
cGx5Jw0KPiA+IFt0cm9uZG15QGxhZGUgbGludXgtbmZzXSQgZ2l0IGFtIH4vRGVza3RvcC9mb3Jf
c2hhaS8wMDAxLU5GUy1DbGVhci1rZXktY29uc3RydWN0aW9uLWRhdGEtaWYtdGhlLWlkbWFwLXVw
Y2FsbC0ucGF0Y2gNCj4gPiBBcHBseWluZzogTkZTOiBDbGVhciBrZXkgY29uc3RydWN0aW9uIGRh
dGEgaWYgdGhlIGlkbWFwIHVwY2FsbCBmYWlscw0KPiA+IFt0cm9uZG15QGxhZGUgbGludXgtbmZz
XSQgZ2l0IGFtIH4vRGVza3RvcC9mb3Jfc2hhaS8wMDAyLU5GUy1yZXR1cm4tRU5PS0VZLXdoZW4t
dGhlLXVwY2FsbC1mYWlscy10by1tYXAtdGhlLW4ucGF0Y2gNCj4gPiBBcHBseWluZzogTkZTOiBy
ZXR1cm4gLUVOT0tFWSB3aGVuIHRoZSB1cGNhbGwgZmFpbHMgdG8gbWFwIHRoZSBuYW1lDQo+ID4N
Cj4gPiBXaGF0IGVycm9yIG1lc3NhZ2VzIGFyZSB5b3Ugc2VlaW5nPw0KPiA+DQo+ID4gQ2hlZXJz
DQo+ID4gICBUcm9uZA0KPiA+DQo+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+
ID4gRnJvbTogTXlrbGVidXN0LCBUcm9uZCBbbWFpbHRvOlRyb25kLk15a2xlYnVzdEBuZXRhcHAu
Y29tXQ0KPiA+ID4gU2VudDogVGh1cnNkYXksIEF1Z3VzdCAxNiwgMjAxMiA0OjU3IFBNDQo+ID4g
PiBUbzogU2hhaSBMYXptaQ0KPiA+ID4gQ2M6IFdpbGxpYW0gRGF1Y2h5OyBTY2h1bWFrZXIsIEJy
eWFuOyBsaW51eC1uZnNAdmdlci5rZXJuZWwub3JnDQo+ID4gPiBTdWJqZWN0OiBSZTogW1BBVENI
IDEvMl0gTkZTOiBDbGVhciBrZXkgY29uc3RydWN0aW9uIGRhdGEgaWYgdGhlIGlkbWFwIHVwY2Fs
bCBmYWlscw0KPiA+ID4NCj4gPiA+IE9uIFRodSwgMjAxMi0wOC0xNiBhdCAxNjo1MCAtMDcwMCwg
U2hhaSBMYXptaSB3cm90ZToNCj4gPiA+ID4gTVMgb3V0bG9vaw0KPiA+ID4NCj4gPiA+IERvbid0
IGV2ZXIgdXNlIExvb2tPdXQgZm9yIHBhdGNoZXMuIEl0cyAiSSBqdXN0IHJlZm9ybWF0dGVkIHlv
dXIgZW1haWwiDQo+ID4gPiB3b25kZXIgZmVhdHVyZSBicmVha3MgYWxsIHRoZSB3aGl0ZXNwYWNl
Lg0KPiA+ID4NCj4gPiA+ID4gQmVzdCB0aGluZyBpcyB0byBhdHRhY2hlZCB0aGUgcGF0Y2gNCj4g
PiA+DQo+ID4gPiBXZSBkbyBub3Qgbm9ybWFsbHkgdXNlIGF0dGFjaG1lbnRzIG9uIHRoZSBtYWls
aW5nIGxpc3QgYmVjYXVzZSBpdCBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIGNvbW1lbnQgdGhlIHBh
dGNoZXMgaW5saW5lLiBBaCB3ZWxsLCBoZXJlIGdvZXMuLi4NCj4gPiA+DQo+ID4gPiAtLQ0KPiA+
ID4gVHJvbmQgTXlrbGVidXN0DQo+ID4gPiBMaW51eCBORlMgY2xpZW50IG1haW50YWluZXINCj4g
PiA+DQo+ID4gPiBOZXRBcHANCj4gPiA+IFRyb25kLk15a2xlYnVzdEBuZXRhcHAuY29tDQo+ID4g
PiB3d3cubmV0YXBwLmNvbQ0KPiA+ID4NCj4gPiA+DQo+ID4gPiBUaGlzIG1lc3NhZ2UgYW5kIGFu
eSBhdHRhY2hlZCBkb2N1bWVudHMgY29udGFpbiBpbmZvcm1hdGlvbiBmcm9tIFFMb2dpYyBDb3Jw
b3JhdGlvbiBvciBpdHMgd2hvbGx5LW93bmVkIHN1YnNpZGlhcmllcyB0aGF0IG1heSBiZSBjb25m
aWRlbnRpYWwuIElmIHlvdSBhcmUgbm90IHRoZSBpbnRlbmRlZCByZWNpcGllbnQsIHlvdSBtYXkg
bm90IHJlYWQsIGNvcHksIGRpc3RyaWJ1dGUsIG9yIHVzZSB0aGlzIGluZm9ybWF0aW9uLiBJZiB5
b3UgaGF2ZSByZWNlaXZlZCB0aGlzIHRyYW5zbWlzc2lvbiBpbiBlcnJvciwgcGxlYXNlIG5vdGlm
eSB0aGUgc2VuZGVyIGltbWVkaWF0ZWx5IGJ5IHJlcGx5IGUtbWFpbCBhbmQgdGhlbiBkZWxldGUg
dGhpcyBtZXNzYWdlLg0KPiA+DQo+ID4gLS0NCj4gPiBUcm9uZCBNeWtsZWJ1c3QNCj4gPiBMaW51
eCBORlMgY2xpZW50IG1haW50YWluZXINCj4gPg0KPiA+IE5ldEFwcA0KPiA+IFRyb25kLk15a2xl
YnVzdEBuZXRhcHAuY29tDQo+ID4gd3d3Lm5ldGFwcC5jb20NCj4gPg0KPiA+DQo+ID4gVGhpcyBt
ZXNzYWdlIGFuZCBhbnkgYXR0YWNoZWQgZG9jdW1lbnRzIGNvbnRhaW4gaW5mb3JtYXRpb24gZnJv
bSBRTG9naWMgQ29ycG9yYXRpb24gb3IgaXRzIHdob2xseS1vd25lZCBzdWJzaWRpYXJpZXMgdGhh
dCBtYXkgYmUgY29uZmlkZW50aWFsLiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQgcmVjaXBp
ZW50LCB5b3UgbWF5IG5vdCByZWFkLCBjb3B5LCBkaXN0cmlidXRlLCBvciB1c2UgdGhpcyBpbmZv
cm1hdGlvbi4gSWYgeW91IGhhdmUgcmVjZWl2ZWQgdGhpcyB0cmFuc21pc3Npb24gaW4gZXJyb3Is
IHBsZWFzZSBub3RpZnkgdGhlIHNlbmRlciBpbW1lZGlhdGVseSBieSByZXBseSBlLW1haWwgYW5k
IHRoZW4gZGVsZXRlIHRoaXMgbWVzc2FnZS4NCj4gDQo+IC0tDQo+IFRyb25kIE15a2xlYnVzdA0K
PiBMaW51eCBORlMgY2xpZW50IG1haW50YWluZXINCj4gDQo+IE5ldEFwcA0KPiBUcm9uZC5NeWts
ZWJ1c3RAbmV0YXBwLmNvbQ0KPiB3d3cubmV0YXBwLmNvbQ0KPiANCj4gDQo+IFRoaXMgbWVzc2Fn
ZSBhbmQgYW55IGF0dGFjaGVkIGRvY3VtZW50cyBjb250YWluIGluZm9ybWF0aW9uIGZyb20gUUxv
Z2ljIENvcnBvcmF0aW9uIG9yIGl0cyB3aG9sbHktb3duZWQgc3Vic2lkaWFyaWVzIHRoYXQgbWF5
IGJlIGNvbmZpZGVudGlhbC4gSWYgeW91IGFyZSBub3QgdGhlIGludGVuZGVkIHJlY2lwaWVudCwg
eW91IG1heSBub3QgcmVhZCwgY29weSwgZGlzdHJpYnV0ZSwgb3IgdXNlIHRoaXMgaW5mb3JtYXRp
b24uIElmIHlvdSBoYXZlIHJlY2VpdmVkIHRoaXMgdHJhbnNtaXNzaW9uIGluIGVycm9yLCBwbGVh
c2Ugbm90aWZ5IHRoZSBzZW5kZXIgaW1tZWRpYXRlbHkgYnkgcmVwbHkgZS1tYWlsIGFuZCB0aGVu
IGRlbGV0ZSB0aGlzIG1lc3NhZ2UuDQoNCi0tIA0KVHJvbmQgTXlrbGVidXN0DQpMaW51eCBORlMg
Y2xpZW50IG1haW50YWluZXINCg0KTmV0QXBwDQpUcm9uZC5NeWtsZWJ1c3RAbmV0YXBwLmNvbQ0K
d3d3Lm5ldGFwcC5jb20NCg0K
WXVwIC0gYWxyZWFkeSBzYXcgdGhhdCA7LSkNCg0KLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0N
CkZyb206IE15a2xlYnVzdCwgVHJvbmQgW21haWx0bzpUcm9uZC5NeWtsZWJ1c3RAbmV0YXBwLmNv
bV0NClNlbnQ6IFRodXJzZGF5LCBBdWd1c3QgMTYsIDIwMTIgNjoxNSBQTQ0KVG86IFNoYWkgTGF6
bWkNCkNjOiBXaWxsaWFtIERhdWNoeTsgU2NodW1ha2VyLCBCcnlhbjsgbGludXgtbmZzQHZnZXIu
a2VybmVsLm9yZw0KU3ViamVjdDogUmU6IFtQQVRDSCAxLzJdIE5GUzogQ2xlYXIga2V5IGNvbnN0
cnVjdGlvbiBkYXRhIGlmIHRoZSBpZG1hcCB1cGNhbGwgZmFpbHMNCg0KT24gVGh1LCAyMDEyLTA4
LTE2IGF0IDE4OjA5IC0wNzAwLCBTaGFpIExhem1pIHdyb3RlOg0KPiBJJ3ZlIGxvb2tlZCBhdCB0
aGUgcmVwbyAoaHR0cDovL2dpdC5rZXJuZWwub3JnLz9wPWxpbnV4L2tlcm5lbC9naXQvdG9ydmFs
ZHMvbGludXguZ2l0O2E9YmxvYjtmPWZzL25mcy9pZG1hcC5jO2g9YjcwMTM1OGMzOWMzNTFkMDYx
M2QxZGIyOWViY2YzODJjYThjYjBhNjtoYj1kZGYzNDNmNjM1ZmU0NDQwY2FkNTI4ZTEyZjk2ZjI4
YmQ1MGFhMDk5KSwgc2VlbXMganVzdCBsaWtlIHdoYXQgSSBoYXZlDQo+IENhbiBpdCBiZSBhbHJl
YWR5IGNoYW5nZWQgb24gdGhlIHRyZWU/DQoNCk5vLiBJdCBoYXNuJ3QgYmVlbiBtZXJnZWQgdXBz
dHJlYW0geWV0Lg0KDQpIb3dldmVyLCBJJ3ZlIG5vdyBwdXNoZWQgdGhlIHBhdGNoZXMgdXBzdHJl
YW0gdG8gdGhlIE5GUyBidWdmaXhlcw0KYnJhbmNoLiBJbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBw
YXRjaGVzLCBwZXJoYXBzIHlvdSBjb3VsZCBqdXN0IHB1bGwgdGhlDQpmdWxsIHNldCBvZiBORlMg
Y2xpZW50IGJ1Z2ZpeGVzIGJ5IGRvaW5nDQoNCmdpdCBwdWxsIGdpdDovL2dpdC5saW51eC1uZnMu
b3JnL3Byb2plY3RzL3Ryb25kbXkvbGludXgtbmZzLmdpdCBidWdmaXhlcw0KDQpDaGVlcnMNCiAg
VHJvbmQNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBNeWtsZWJ1c3Qs
IFRyb25kIFttYWlsdG86VHJvbmQuTXlrbGVidXN0QG5ldGFwcC5jb21dDQo+IFNlbnQ6IFRodXJz
ZGF5LCBBdWd1c3QgMTYsIDIwMTIgNToyMiBQTQ0KPiBUbzogU2hhaSBMYXptaQ0KPiBDYzogV2ls
bGlhbSBEYXVjaHk7IFNjaHVtYWtlciwgQnJ5YW47IGxpbnV4LW5mc0B2Z2VyLmtlcm5lbC5vcmcN
Cj4gU3ViamVjdDogUmU6IFtQQVRDSCAxLzJdIE5GUzogQ2xlYXIga2V5IGNvbnN0cnVjdGlvbiBk
YXRhIGlmIHRoZSBpZG1hcCB1cGNhbGwgZmFpbHMNCj4NCj4gT24gVGh1LCAyMDEyLTA4LTE2IGF0
IDE3OjE1IC0wNzAwLCBTaGFpIExhem1pIHdyb3RlOg0KPiA+IGdpdCBhcHBseSAtLWNoZWNrIDAw
MDEtTkZTLUNsZWFyLWtleS1jb25zdHJ1Y3Rpb24tZGF0YS1pZi10aGUtaWRtYXAtdXBjYWxsLS5w
YXRjaA0KPiA+IGVycm9yOiBwYXRjaCBmYWlsZWQ6IGZzL25mcy9pZG1hcC5jOjYxDQo+ID4gZXJy
b3I6IGZzL25mcy9pZG1hcC5jOiBwYXRjaCBkb2VzIG5vdCBhcHBseQ0KPiA+DQo+ID4NCj4gPiBp
ZG1hcC5jDQo+ID4gZGVmaW5lIE5GU19VSU5UX01BWExFTiAxMQ0KPiA+DQo+ID4gc3RhdGljIGNv
bnN0IHN0cnVjdCBjcmVkICppZF9yZXNvbHZlcl9jYWNoZTsNCj4gPiBzdGF0aWMgc3RydWN0IGtl
eV90eXBlIGtleV90eXBlX2lkX3Jlc29sdmVyX2xlZ2FjeTsNCj4gPg0KPiA+IHN0cnVjdCBpZG1h
cCB7DQo+ID4gICAgICAgICBzdHJ1Y3QgcnBjX3BpcGUgICAgICAgICAqaWRtYXBfcGlwZTsNCj4g
PiAgICAgICAgIHN0cnVjdCBrZXlfY29uc3RydWN0aW9uICppZG1hcF9rZXlfY29uczsNCj4gPiAg
ICAgICAgIHN0cnVjdCBtdXRleCAgICAgICAgICAgIGlkbWFwX211dGV4Ow0KPiA+IH07DQo+DQo+
IFRoYXQncyBob3cgaXQgc2hvdWxkIG1vcmUgb3IgbGVzcyBsb29rIGFmdGVyIGFwcGx5aW5nIHRo
ZSBwYXRjaC4gSSdtDQo+IGd1ZXNzaW5nIHRoYXQgb25lIG9mIHlvdXIgcHJldmlvdXMgYXR0ZW1w
dHMgaGFzIHBhcnRpYWxseSB3b3JrZWQsIGFuZA0KPiBoYXMgbGVmdCB5b3VyIGNoZWNrZWQgb3V0
IGdpdCB0cmVlIGluIGEgImRpcnR5IiBzdGF0ZS4NCj4NCj4gUGxlYXNlIHRyeSB0aGUgZm9sbG93
aW5nOg0KPg0KPiAkIGdpdCByZXNldCAtLWhhcmQgSEVBRA0KPiAkIGdpdCBhcHBseSAtLWNoZWNr
IDAwMDEtTkZTLUNsZWFyLWtleS1jb25zdHJ1Y3Rpb24tZGF0YS1pZi10aGUtaWRtYXAtdXBjYWxs
LS5wYXRjaA0KPiAkIGdpdCBhcHBseSAtLWNoZWNrIDAwMDItTkZTLXJldHVybi1FTk9LRVktd2hl
bi10aGUtdXBjYWxsLWZhaWxzLXRvLW1hcC10aGUtbi5wYXRjaA0KPg0KPg0KPiA+DQo+ID4gLS0t
LS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiBGcm9tOiBNeWtsZWJ1c3QsIFRyb25kIFttYWls
dG86VHJvbmQuTXlrbGVidXN0QG5ldGFwcC5jb21dDQo+ID4gU2VudDogVGh1cnNkYXksIEF1Z3Vz
dCAxNiwgMjAxMiA1OjE0IFBNDQo+ID4gVG86IFNoYWkgTGF6bWkNCj4gPiBDYzogV2lsbGlhbSBE
YXVjaHk7IFNjaHVtYWtlciwgQnJ5YW47IGxpbnV4LW5mc0B2Z2VyLmtlcm5lbC5vcmcNCj4gPiBT
dWJqZWN0OiBSZTogW1BBVENIIDEvMl0gTkZTOiBDbGVhciBrZXkgY29uc3RydWN0aW9uIGRhdGEg
aWYgdGhlIGlkbWFwIHVwY2FsbCBmYWlscw0KPiA+DQo+ID4gT24gVGh1LCAyMDEyLTA4LTE2IGF0
IDE3OjA3IC0wNzAwLCBTaGFpIExhem1pIHdyb3RlOg0KPiA+ID4gU29ycnkgLSBjb21wYW55J3Mg
cG9saWN5IC4uLg0KPiA+ID4gV2hhdCBpZG1hcCB2ZXJzaW9uIHdhcyB0aGlzIHBhdGNoIHVzZWQg
YWdhaW5zdD8gVGhlIG9uZSBJIGhhdmUgKGI3MDEzNThjKSBzZWVtcyB0byBiZSBhIGJpdCBkaWZm
ZXJlbnQgKEkgdXNlZCBsYXRlc3QgcHVsbCBjb21taXQgZGRmMzQzZjYzNWZlNDQ0MGNhZDUyOGUx
MmY5NmYyOGJkNTBhYTA5OSksIGhlbmNlIHRoZSBwYXRjaCBmYWlscyBhZ2Fpbg0KPiA+DQo+ID4g
SXQgd29ya3MgZmluZSBmb3IgbWUgYWdhaW5zdCBjb21taXQgZGRmMzQzZjYzNWZlNDQ0MGNhZDUy
OGUxMmY5NmYyOGJkNTBhYTA5OToNCj4gPg0KPiA+IFt0cm9uZG15QGxhZGUgbGludXgtbmZzXSQg
Z2l0IGJyYW5jaCB0ZXN0LWFwcGx5IGRkZjM0M2Y2MzVmZTQ0NDBjYWQ1MjhlMTJmOTZmMjhiZDUw
YWEwOTkNCj4gPiBbdHJvbmRteUBsYWRlIGxpbnV4LW5mc10kIGdpdCBjaGVja291dCB0ZXN0LWFw
cGx5DQo+ID4gU3dpdGNoZWQgdG8gYnJhbmNoICd0ZXN0LWFwcGx5Jw0KPiA+IFt0cm9uZG15QGxh
ZGUgbGludXgtbmZzXSQgZ2l0IGFtIH4vRGVza3RvcC9mb3Jfc2hhaS8wMDAxLU5GUy1DbGVhci1r
ZXktY29uc3RydWN0aW9uLWRhdGEtaWYtdGhlLWlkbWFwLXVwY2FsbC0ucGF0Y2gNCj4gPiBBcHBs
eWluZzogTkZTOiBDbGVhciBrZXkgY29uc3RydWN0aW9uIGRhdGEgaWYgdGhlIGlkbWFwIHVwY2Fs
bCBmYWlscw0KPiA+IFt0cm9uZG15QGxhZGUgbGludXgtbmZzXSQgZ2l0IGFtIH4vRGVza3RvcC9m
b3Jfc2hhaS8wMDAyLU5GUy1yZXR1cm4tRU5PS0VZLXdoZW4tdGhlLXVwY2FsbC1mYWlscy10by1t
YXAtdGhlLW4ucGF0Y2gNCj4gPiBBcHBseWluZzogTkZTOiByZXR1cm4gLUVOT0tFWSB3aGVuIHRo
ZSB1cGNhbGwgZmFpbHMgdG8gbWFwIHRoZSBuYW1lDQo+ID4NCj4gPiBXaGF0IGVycm9yIG1lc3Nh
Z2VzIGFyZSB5b3Ugc2VlaW5nPw0KPiA+DQo+ID4gQ2hlZXJzDQo+ID4gICBUcm9uZA0KPiA+DQo+
ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gRnJvbTogTXlrbGVidXN0LCBU
cm9uZCBbbWFpbHRvOlRyb25kLk15a2xlYnVzdEBuZXRhcHAuY29tXQ0KPiA+ID4gU2VudDogVGh1
cnNkYXksIEF1Z3VzdCAxNiwgMjAxMiA0OjU3IFBNDQo+ID4gPiBUbzogU2hhaSBMYXptaQ0KPiA+
ID4gQ2M6IFdpbGxpYW0gRGF1Y2h5OyBTY2h1bWFrZXIsIEJyeWFuOyBsaW51eC1uZnNAdmdlci5r
ZXJuZWwub3JnDQo+ID4gPiBTdWJqZWN0OiBSZTogW1BBVENIIDEvMl0gTkZTOiBDbGVhciBrZXkg
Y29uc3RydWN0aW9uIGRhdGEgaWYgdGhlIGlkbWFwIHVwY2FsbCBmYWlscw0KPiA+ID4NCj4gPiA+
IE9uIFRodSwgMjAxMi0wOC0xNiBhdCAxNjo1MCAtMDcwMCwgU2hhaSBMYXptaSB3cm90ZToNCj4g
PiA+ID4gTVMgb3V0bG9vaw0KPiA+ID4NCj4gPiA+IERvbid0IGV2ZXIgdXNlIExvb2tPdXQgZm9y
IHBhdGNoZXMuIEl0cyAiSSBqdXN0IHJlZm9ybWF0dGVkIHlvdXIgZW1haWwiDQo+ID4gPiB3b25k
ZXIgZmVhdHVyZSBicmVha3MgYWxsIHRoZSB3aGl0ZXNwYWNlLg0KPiA+ID4NCj4gPiA+ID4gQmVz
dCB0aGluZyBpcyB0byBhdHRhY2hlZCB0aGUgcGF0Y2gNCj4gPiA+DQo+ID4gPiBXZSBkbyBub3Qg
bm9ybWFsbHkgdXNlIGF0dGFjaG1lbnRzIG9uIHRoZSBtYWlsaW5nIGxpc3QgYmVjYXVzZSBpdCBt
YWtlcyBpdCBpbXBvc3NpYmxlIHRvIGNvbW1lbnQgdGhlIHBhdGNoZXMgaW5saW5lLiBBaCB3ZWxs
LCBoZXJlIGdvZXMuLi4NCj4gPiA+DQo+ID4gPiAtLQ0KPiA+ID4gVHJvbmQgTXlrbGVidXN0DQo+
ID4gPiBMaW51eCBORlMgY2xpZW50IG1haW50YWluZXINCj4gPiA+DQo+ID4gPiBOZXRBcHANCj4g
PiA+IFRyb25kLk15a2xlYnVzdEBuZXRhcHAuY29tDQo+ID4gPiB3d3cubmV0YXBwLmNvbQ0KPiA+
ID4NCj4gPiA+DQo+ID4gPiBUaGlzIG1lc3NhZ2UgYW5kIGFueSBhdHRhY2hlZCBkb2N1bWVudHMg
Y29udGFpbiBpbmZvcm1hdGlvbiBmcm9tIFFMb2dpYyBDb3Jwb3JhdGlvbiBvciBpdHMgd2hvbGx5
LW93bmVkIHN1YnNpZGlhcmllcyB0aGF0IG1heSBiZSBjb25maWRlbnRpYWwuIElmIHlvdSBhcmUg
bm90IHRoZSBpbnRlbmRlZCByZWNpcGllbnQsIHlvdSBtYXkgbm90IHJlYWQsIGNvcHksIGRpc3Ry
aWJ1dGUsIG9yIHVzZSB0aGlzIGluZm9ybWF0aW9uLiBJZiB5b3UgaGF2ZSByZWNlaXZlZCB0aGlz
IHRyYW5zbWlzc2lvbiBpbiBlcnJvciwgcGxlYXNlIG5vdGlmeSB0aGUgc2VuZGVyIGltbWVkaWF0
ZWx5IGJ5IHJlcGx5IGUtbWFpbCBhbmQgdGhlbiBkZWxldGUgdGhpcyBtZXNzYWdlLg0KPiA+DQo+
ID4gLS0NCj4gPiBUcm9uZCBNeWtsZWJ1c3QNCj4gPiBMaW51eCBORlMgY2xpZW50IG1haW50YWlu
ZXINCj4gPg0KPiA+IE5ldEFwcA0KPiA+IFRyb25kLk15a2xlYnVzdEBuZXRhcHAuY29tDQo+ID4g
d3d3Lm5ldGFwcC5jb20NCj4gPg0KPiA+DQo+ID4gVGhpcyBtZXNzYWdlIGFuZCBhbnkgYXR0YWNo
ZWQgZG9jdW1lbnRzIGNvbnRhaW4gaW5mb3JtYXRpb24gZnJvbSBRTG9naWMgQ29ycG9yYXRpb24g
b3IgaXRzIHdob2xseS1vd25lZCBzdWJzaWRpYXJpZXMgdGhhdCBtYXkgYmUgY29uZmlkZW50aWFs
LiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50LCB5b3UgbWF5IG5vdCByZWFk
LCBjb3B5LCBkaXN0cmlidXRlLCBvciB1c2UgdGhpcyBpbmZvcm1hdGlvbi4gSWYgeW91IGhhdmUg
cmVjZWl2ZWQgdGhpcyB0cmFuc21pc3Npb24gaW4gZXJyb3IsIHBsZWFzZSBub3RpZnkgdGhlIHNl
bmRlciBpbW1lZGlhdGVseSBieSByZXBseSBlLW1haWwgYW5kIHRoZW4gZGVsZXRlIHRoaXMgbWVz
c2FnZS4NCj4NCj4gLS0NCj4gVHJvbmQgTXlrbGVidXN0DQo+IExpbnV4IE5GUyBjbGllbnQgbWFp
bnRhaW5lcg0KPg0KPiBOZXRBcHANCj4gVHJvbmQuTXlrbGVidXN0QG5ldGFwcC5jb20NCj4gd3d3
Lm5ldGFwcC5jb20NCj4NCj4NCj4gVGhpcyBtZXNzYWdlIGFuZCBhbnkgYXR0YWNoZWQgZG9jdW1l
bnRzIGNvbnRhaW4gaW5mb3JtYXRpb24gZnJvbSBRTG9naWMgQ29ycG9yYXRpb24gb3IgaXRzIHdo
b2xseS1vd25lZCBzdWJzaWRpYXJpZXMgdGhhdCBtYXkgYmUgY29uZmlkZW50aWFsLiBJZiB5b3Ug
YXJlIG5vdCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50LCB5b3UgbWF5IG5vdCByZWFkLCBjb3B5LCBk
aXN0cmlidXRlLCBvciB1c2UgdGhpcyBpbmZvcm1hdGlvbi4gSWYgeW91IGhhdmUgcmVjZWl2ZWQg
dGhpcyB0cmFuc21pc3Npb24gaW4gZXJyb3IsIHBsZWFzZSBub3RpZnkgdGhlIHNlbmRlciBpbW1l
ZGlhdGVseSBieSByZXBseSBlLW1haWwgYW5kIHRoZW4gZGVsZXRlIHRoaXMgbWVzc2FnZS4NCg0K
LS0NClRyb25kIE15a2xlYnVzdA0KTGludXggTkZTIGNsaWVudCBtYWludGFpbmVyDQoNCk5ldEFw
cA0KVHJvbmQuTXlrbGVidXN0QG5ldGFwcC5jb20NCnd3dy5uZXRhcHAuY29tDQoNCg0KVGhpcyBt
ZXNzYWdlIGFuZCBhbnkgYXR0YWNoZWQgZG9jdW1lbnRzIGNvbnRhaW4gaW5mb3JtYXRpb24gZnJv
bSBRTG9naWMgQ29ycG9yYXRpb24gb3IgaXRzIHdob2xseS1vd25lZCBzdWJzaWRpYXJpZXMgdGhh
dCBtYXkgYmUgY29uZmlkZW50aWFsLiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQgcmVjaXBp
ZW50LCB5b3UgbWF5IG5vdCByZWFkLCBjb3B5LCBkaXN0cmlidXRlLCBvciB1c2UgdGhpcyBpbmZv
cm1hdGlvbi4gSWYgeW91IGhhdmUgcmVjZWl2ZWQgdGhpcyB0cmFuc21pc3Npb24gaW4gZXJyb3Is
IHBsZWFzZSBub3RpZnkgdGhlIHNlbmRlciBpbW1lZGlhdGVseSBieSByZXBseSBlLW1haWwgYW5k
IHRoZW4gZGVsZXRlIHRoaXMgbWVzc2FnZS4NCg==
Tm8gbHVjayAuLi4NCi0tLS0tLS0tLS0tLVsgY3V0IGhlcmUgXS0tLS0tLS0tLS0tLQ0Ka2VybmVs
IEJVRyBhdCBmcy9uZnMvaWRtYXAuYzo2ODEhDQpBQ1BJOiBJbnZhbGlkIFBvd2VyIFJlc291cmNl
IHRvIHJlZ2lzdGVyIQ0KaW52YWxpZCBvcGNvZGU6IDAwMDAgWyMxXSBTTVANCk1vZHVsZXMgbGlu
a2VkIGluOg0KUGlkOiAxNDUsIGNvbW06IG1vdW50Lm5mcyBOb3QgdGFpbnRlZCAzLjYuMC1yYzIg
IzIyIFN5c3RlbSBtYW51ZmFjdHVyZXIgU3lzdGVtIFByb2R1Y3QgTmFtZS9LOE4tREwNCkVJUDog
MDA2MDpbPGMwNTk2OTU4Pl0gRUZMQUdTOiAwMDAxMDI4NiBDUFU6IDENCkVJUCBpcyBhdCBuZnNf
aWRtYXBfbGVnYWN5X3VwY2FsbCsweGYzLzB4MTQ2DQpFQVg6IGY1YjVlMWUwIEVCWDogZjU4N2U4
NDAgRUNYOiBmNWI1ZTAwMCBFRFg6IDAwMDAwMDEwDQpFU0k6IDAwMDAwMDEwIEVESTogZjViNWUx
ZjggRUJQOiBmNWI3N2E2YyBFU1A6IGY1Yjc3YTRjDQogRFM6IDAwN2IgRVM6IDAwN2IgRlM6IDAw
ZDggR1M6IDAwMzMgU1M6IDAwNjgNCkNSMDogODAwNTAwM2IgQ1IyOiAwODMxZTAwMCBDUjM6IDM1
YjVjMDAwIENSNDogMDAwMDA3ZDANCkRSMDogMDAwMDAwMDAgRFIxOiAwMDAwMDAwMCBEUjI6IDAw
MDAwMDAwIERSMzogMDAwMDAwMDANCkRSNjogZmZmZjBmZjAgRFI3OiAwMDAwMDQwMA0KUHJvY2Vz
cyBtb3VudC5uZnMgKHBpZDogMTQ1LCB0aT1mNWI3NjAwMCB0YXNrPWY1YjUzMGMwIHRhc2sudGk9
ZjViNzYwMDApDQpTdGFjazoNCiBmNWI1ZTAwMCBmNTk2OWE2MCBmNWI1ZTFlMCBmNWI1ZTFhNCBm
NWI1ZTFiNCBjMDU5Njg2NSBmNTlkMGEwMCBmNTk2OWE2MA0KIGY1Yjc3YWEwIGMwNjAwODMxIGMw
OWU2MjZjIGMwYTlkNzRjIGY1YjVlMTgwIGY2MWRjZDgwIGMwYTlkNzU4IGY1OTcwZjgwDQogZjYx
ZGNlMDAgMDAwMDAwMDAgMDAwMDAwMDMgZjYzZDdmODAgZjViNWUxOTQgZjViNzdhYzAgYzA2MDA4
ZjAgMDAwMDAwMDANCkNhbGwgVHJhY2U6DQogWzxjMDU5Njg2NT5dID8gaWRtYXBfcGlwZV9kZXN0
cm95X21zZysweDFkLzB4MWQNCiBbPGMwNjAwODMxPl0gcmVxdWVzdF9rZXlfYW5kX2xpbmsrMHgy
OTcvMHgzMGMNCiBbPGMwNjAwOGYwPl0gcmVxdWVzdF9rZXlfd2l0aF9hdXhkYXRhKzB4MTkvMHg0
NA0KIFs8YzA1OTZhNDQ+XSBuZnNfaWRtYXBfcmVxdWVzdF9rZXkrMHg5OS8weDEyOA0KIFs8YzA1
OTZiYmQ+XSBuZnNfaWRtYXBfbG9va3VwX2lkKzB4NWEvMHg5NQ0KIFs8YzA1OTcyY2M+XSBuZnNf
bWFwX2dyb3VwX3RvX2dpZCsweDNkLzB4NDcNCiBbPGMwNTkwMGIzPl0gZGVjb2RlX2dldGZhdHRy
X2F0dHJzKzB4NTM5LzB4YTFiDQogWzxjMDU5MzNhYz5dIGRlY29kZV9nZXRmYXR0cl9nZW5lcmlj
LmNvbnN0cHJvcC42NCsweDYzLzB4N2YNCiBbPGMwNTkzM2Q4Pl0gZGVjb2RlX2dldGZhdHRyKzB4
MTAvMHgxMg0KIFs8YzA1OTM1YzA+XSBuZnM0X3hkcl9kZWNfbG9va3VwX3Jvb3QrMHg0OS8weDUw
DQogWzxjMDU5MzU3Nz5dID8gbmZzNF94ZHJfZGVjX2xpbmsrMHg5OC8weDk4DQogWzxjMDdmNzY1
Yz5dIHJwY2F1dGhfdW53cmFwX3Jlc3ArMHg0OC8weDUwDQogWzxjMDdmMDZhZj5dIGNhbGxfZGVj
b2RlKzB4MjYwLzB4MmEzDQogWzxjMDU5MzU3Nz5dID8gbmZzNF94ZHJfZGVjX2xpbmsrMHg5OC8w
eDk4DQogWzxjMDdmNjkxZT5dIF9fcnBjX2V4ZWN1dGUrMHg3Yy8weDFkOQ0KIFs8YzA3ZjA0NGY+
XSA/IGNhbGxfdHJhbnNtaXRfc3RhdHVzKzB4N2MvMHg3Yw0KIFs8YzA3ZjA0NGY+XSA/IGNhbGxf
dHJhbnNtaXRfc3RhdHVzKzB4N2MvMHg3Yw0KIFs8YzA0NDBjMzU+XSA/IHdha2VfdXBfYml0KzB4
MWMvMHgyMA0KIFs8YzA3ZjZiMDY+XSBycGNfZXhlY3V0ZSsweDUwLzB4NTgNCiBbPGMwN2YxNjE4
Pl0gcnBjX3J1bl90YXNrKzB4NjcvMHg2ZA0KIFs8YzA3ZjE3MDY+XSBycGNfY2FsbF9zeW5jKzB4
NDAvMHg1Yg0KIFs8YzA1OGE1MTg+XSBfbmZzNF9jYWxsX3N5bmMrMHgxMS8weDEzDQogWzxjMDU4
YTNhYz5dIG5mczRfY2FsbF9zeW5jKzB4MTgvMHgxZA0KIFs8YzA1OGRhZmM+XSBuZnM0X2xvb2t1
cF9yb290KzB4OGQvMHhiOQ0KIFs8YzA1OGU3NWM+XSBuZnM0X3Byb2NfZ2V0X3Jvb3RmaCsweDIy
LzB4ODYNCiBbPGMwNTk4NGQ1Pl0gbmZzNF9nZXRfcm9vdGZoKzB4MzEvMHhhNA0KIFs8YzA0YmZm
NzY+XSA/IGttZW1fY2FjaGVfYWxsb2NfdHJhY2UrMHhjNS8weGNmDQogWzxjMDU3ZTYyND5dID8g
bmZzX2FsbG9jX2ZhdHRyKzB4MjEvMHgzYQ0KIFs8YzA3ZjZiZWI+XSA/IHJwY2lvZF91cCsweGYv
MHgxOA0KIFs8YzA1N2U1ZTY+XSA/IG5mc19mYXR0cl9pbml0KzB4MjEvMHgzZQ0KIFs8YzA1OTg2
MDg+XSBuZnM0X3NlcnZlcl9jb21tb25fc2V0dXArMHg0NS8weGFiDQogWzxjMDU5OGI5NT5dIG5m
czRfY3JlYXRlX3NlcnZlcisweDE0Yi8weDE3MQ0KWzxjMDU5NWI5Zj5dIG5mczRfcmVtb3RlX21v
dW50KzB4MjYvMHg0Ng0KIFs8YzA0YzdlNTU+XSBtb3VudF9mcysweDEzLzB4OWENCiBbPGMwNGQ4
YzUxPl0gdmZzX2tlcm5fbW91bnQrMHg0Zi8weGExDQogWzxjMDU5NWEyMj5dIG5mc19kb19yb290
X21vdW50KzB4NzMvMHg4ZA0KIFs8YzA1OTViZWU+XSBuZnM0X3RyeV9tb3VudCsweDJmLzB4NDUN
CiBbPGMwNTgwODRiPl0gbmZzX2ZzX21vdW50KzB4NWNjLzB4NjI3DQogWzxjMDU4MGMzMz5dID8g
bmZzX2Nsb25lX3N1cGVyKzB4NjAvMHg2MA0KIFs8YzA1N2VhMmM+XSA/IG5mc19zZXRhdHRyKzB4
MTA3LzB4MTA3DQogWzxjMDRjN2U1NT5dIG1vdW50X2ZzKzB4MTMvMHg5YQ0KIFs8YzA0ZDhjNTE+
XSB2ZnNfa2Vybl9tb3VudCsweDRmLzB4YTENCiBbPGMwNGQ4ZjYzPl0gZG9fa2Vybl9tb3VudCsw
eDM0LzB4YjINCiBbPGMwNGRhNTFiPl0gZG9fbW91bnQrMHg1ZDgvMHg2MjYNCiBbPGMwNGRhNWNm
Pl0gc3lzX21vdW50KzB4NjYvMHg5OQ0KIFs8YzA4MjIwOWM+XSBzeXNlbnRlcl9kb19jYWxsKzB4
MTIvMHgyYw0KQ29kZTogMDAgOGQgOTMgODQgMDAgMDAgMDAgOGQgNDUgZWMgZTggNDIgZDAgMDkg
MDAgODkgYzYgOGIgNDUgZTggODUgZjYgODkgNTggMDggYzcgNDAgMGMgOGMgMDAgMDAgMDAgNzgg
MmIgOGIgNGQgZTAgODMgNzkgMDQgMDAgNzQgMDIgPDBmPiAwYiA4YiA0NSBlNCA4YiA0ZCBlMCA4
YiA1NSBlOCA4OSA0MSAwNCA4YiAwMSBlOCBlOCA5NCAyNiAwMA0KRUlQOiBbPGMwNTk2OTU4Pl0g
bmZzX2lkbWFwX2xlZ2FjeV91cGNhbGwrMHhmMy8weDE0NiBTUzpFU1AgMDA2ODpmNWI3N2E0Yw0K
LS0tWyBlbmQgdHJhY2UgOWFkZWUwYTgwODYwYTA1ZiBdLS0tDQoNCi0tLS0tT3JpZ2luYWwgTWVz
c2FnZS0tLS0tDQpGcm9tOiBNeWtsZWJ1c3QsIFRyb25kIFttYWlsdG86VHJvbmQuTXlrbGVidXN0
QG5ldGFwcC5jb21dDQpTZW50OiBUaHVyc2RheSwgQXVndXN0IDE2LCAyMDEyIDU6MjIgUE0NClRv
OiBTaGFpIExhem1pDQpDYzogV2lsbGlhbSBEYXVjaHk7IFNjaHVtYWtlciwgQnJ5YW47IGxpbnV4
LW5mc0B2Z2VyLmtlcm5lbC5vcmcNClN1YmplY3Q6IFJlOiBbUEFUQ0ggMS8yXSBORlM6IENsZWFy
IGtleSBjb25zdHJ1Y3Rpb24gZGF0YSBpZiB0aGUgaWRtYXAgdXBjYWxsIGZhaWxzDQoNCk9uIFRo
dSwgMjAxMi0wOC0xNiBhdCAxNzoxNSAtMDcwMCwgU2hhaSBMYXptaSB3cm90ZToNCj4gZ2l0IGFw
cGx5IC0tY2hlY2sgMDAwMS1ORlMtQ2xlYXIta2V5LWNvbnN0cnVjdGlvbi1kYXRhLWlmLXRoZS1p
ZG1hcC11cGNhbGwtLnBhdGNoDQo+IGVycm9yOiBwYXRjaCBmYWlsZWQ6IGZzL25mcy9pZG1hcC5j
OjYxDQo+IGVycm9yOiBmcy9uZnMvaWRtYXAuYzogcGF0Y2ggZG9lcyBub3QgYXBwbHkNCj4NCj4N
Cj4gaWRtYXAuYw0KPiBkZWZpbmUgTkZTX1VJTlRfTUFYTEVOIDExDQo+DQo+IHN0YXRpYyBjb25z
dCBzdHJ1Y3QgY3JlZCAqaWRfcmVzb2x2ZXJfY2FjaGU7DQo+IHN0YXRpYyBzdHJ1Y3Qga2V5X3R5
cGUga2V5X3R5cGVfaWRfcmVzb2x2ZXJfbGVnYWN5Ow0KPg0KPiBzdHJ1Y3QgaWRtYXAgew0KPiAg
ICAgICAgIHN0cnVjdCBycGNfcGlwZSAgICAgICAgICppZG1hcF9waXBlOw0KPiAgICAgICAgIHN0
cnVjdCBrZXlfY29uc3RydWN0aW9uICppZG1hcF9rZXlfY29uczsNCj4gICAgICAgICBzdHJ1Y3Qg
bXV0ZXggICAgICAgICAgICBpZG1hcF9tdXRleDsNCj4gfTsNCg0KVGhhdCdzIGhvdyBpdCBzaG91
bGQgbW9yZSBvciBsZXNzIGxvb2sgYWZ0ZXIgYXBwbHlpbmcgdGhlIHBhdGNoLiBJJ20NCmd1ZXNz
aW5nIHRoYXQgb25lIG9mIHlvdXIgcHJldmlvdXMgYXR0ZW1wdHMgaGFzIHBhcnRpYWxseSB3b3Jr
ZWQsIGFuZA0KaGFzIGxlZnQgeW91ciBjaGVja2VkIG91dCBnaXQgdHJlZSBpbiBhICJkaXJ0eSIg
c3RhdGUuDQoNClBsZWFzZSB0cnkgdGhlIGZvbGxvd2luZzoNCg0KJCBnaXQgcmVzZXQgLS1oYXJk
IEhFQUQNCiQgZ2l0IGFwcGx5IC0tY2hlY2sgMDAwMS1ORlMtQ2xlYXIta2V5LWNvbnN0cnVjdGlv
bi1kYXRhLWlmLXRoZS1pZG1hcC11cGNhbGwtLnBhdGNoDQokIGdpdCBhcHBseSAtLWNoZWNrIDAw
MDItTkZTLXJldHVybi1FTk9LRVktd2hlbi10aGUtdXBjYWxsLWZhaWxzLXRvLW1hcC10aGUtbi5w
YXRjaA0KDQoNCj4NCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTXlrbGVi
dXN0LCBUcm9uZCBbbWFpbHRvOlRyb25kLk15a2xlYnVzdEBuZXRhcHAuY29tXQ0KPiBTZW50OiBU
aHVyc2RheSwgQXVndXN0IDE2LCAyMDEyIDU6MTQgUE0NCj4gVG86IFNoYWkgTGF6bWkNCj4gQ2M6
IFdpbGxpYW0gRGF1Y2h5OyBTY2h1bWFrZXIsIEJyeWFuOyBsaW51eC1uZnNAdmdlci5rZXJuZWwu
b3JnDQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggMS8yXSBORlM6IENsZWFyIGtleSBjb25zdHJ1Y3Rp
b24gZGF0YSBpZiB0aGUgaWRtYXAgdXBjYWxsIGZhaWxzDQo+DQo+IE9uIFRodSwgMjAxMi0wOC0x
NiBhdCAxNzowNyAtMDcwMCwgU2hhaSBMYXptaSB3cm90ZToNCj4gPiBTb3JyeSAtIGNvbXBhbnkn
cyBwb2xpY3kgLi4uDQo+ID4gV2hhdCBpZG1hcCB2ZXJzaW9uIHdhcyB0aGlzIHBhdGNoIHVzZWQg
YWdhaW5zdD8gVGhlIG9uZSBJIGhhdmUgKGI3MDEzNThjKSBzZWVtcyB0byBiZSBhIGJpdCBkaWZm
ZXJlbnQgKEkgdXNlZCBsYXRlc3QgcHVsbCBjb21taXQgZGRmMzQzZjYzNWZlNDQ0MGNhZDUyOGUx
MmY5NmYyOGJkNTBhYTA5OSksIGhlbmNlIHRoZSBwYXRjaCBmYWlscyBhZ2Fpbg0KPg0KPiBJdCB3
b3JrcyBmaW5lIGZvciBtZSBhZ2FpbnN0IGNvbW1pdCBkZGYzNDNmNjM1ZmU0NDQwY2FkNTI4ZTEy
Zjk2ZjI4YmQ1MGFhMDk5Og0KPg0KPiBbdHJvbmRteUBsYWRlIGxpbnV4LW5mc10kIGdpdCBicmFu
Y2ggdGVzdC1hcHBseSBkZGYzNDNmNjM1ZmU0NDQwY2FkNTI4ZTEyZjk2ZjI4YmQ1MGFhMDk5DQo+
IFt0cm9uZG15QGxhZGUgbGludXgtbmZzXSQgZ2l0IGNoZWNrb3V0IHRlc3QtYXBwbHkNCj4gU3dp
dGNoZWQgdG8gYnJhbmNoICd0ZXN0LWFwcGx5Jw0KPiBbdHJvbmRteUBsYWRlIGxpbnV4LW5mc10k
IGdpdCBhbSB+L0Rlc2t0b3AvZm9yX3NoYWkvMDAwMS1ORlMtQ2xlYXIta2V5LWNvbnN0cnVjdGlv
bi1kYXRhLWlmLXRoZS1pZG1hcC11cGNhbGwtLnBhdGNoDQo+IEFwcGx5aW5nOiBORlM6IENsZWFy
IGtleSBjb25zdHJ1Y3Rpb24gZGF0YSBpZiB0aGUgaWRtYXAgdXBjYWxsIGZhaWxzDQo+IFt0cm9u
ZG15QGxhZGUgbGludXgtbmZzXSQgZ2l0IGFtIH4vRGVza3RvcC9mb3Jfc2hhaS8wMDAyLU5GUy1y
ZXR1cm4tRU5PS0VZLXdoZW4tdGhlLXVwY2FsbC1mYWlscy10by1tYXAtdGhlLW4ucGF0Y2gNCj4g
QXBwbHlpbmc6IE5GUzogcmV0dXJuIC1FTk9LRVkgd2hlbiB0aGUgdXBjYWxsIGZhaWxzIHRvIG1h
cCB0aGUgbmFtZQ0KPg0KPiBXaGF0IGVycm9yIG1lc3NhZ2VzIGFyZSB5b3Ugc2VlaW5nPw0KPg0K
PiBDaGVlcnMNCj4gICBUcm9uZA0KPg0KPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+
ID4gRnJvbTogTXlrbGVidXN0LCBUcm9uZCBbbWFpbHRvOlRyb25kLk15a2xlYnVzdEBuZXRhcHAu
Y29tXQ0KPiA+IFNlbnQ6IFRodXJzZGF5LCBBdWd1c3QgMTYsIDIwMTIgNDo1NyBQTQ0KPiA+IFRv
OiBTaGFpIExhem1pDQo+ID4gQ2M6IFdpbGxpYW0gRGF1Y2h5OyBTY2h1bWFrZXIsIEJyeWFuOyBs
aW51eC1uZnNAdmdlci5rZXJuZWwub3JnDQo+ID4gU3ViamVjdDogUmU6IFtQQVRDSCAxLzJdIE5G
UzogQ2xlYXIga2V5IGNvbnN0cnVjdGlvbiBkYXRhIGlmIHRoZSBpZG1hcCB1cGNhbGwgZmFpbHMN
Cj4gPg0KPiA+IE9uIFRodSwgMjAxMi0wOC0xNiBhdCAxNjo1MCAtMDcwMCwgU2hhaSBMYXptaSB3
cm90ZToNCj4gPiA+IE1TIG91dGxvb2sNCj4gPg0KPiA+IERvbid0IGV2ZXIgdXNlIExvb2tPdXQg
Zm9yIHBhdGNoZXMuIEl0cyAiSSBqdXN0IHJlZm9ybWF0dGVkIHlvdXIgZW1haWwiDQo+ID4gd29u
ZGVyIGZlYXR1cmUgYnJlYWtzIGFsbCB0aGUgd2hpdGVzcGFjZS4NCj4gPg0KPiA+ID4gQmVzdCB0
aGluZyBpcyB0byBhdHRhY2hlZCB0aGUgcGF0Y2gNCj4gPg0KPiA+IFdlIGRvIG5vdCBub3JtYWxs
eSB1c2UgYXR0YWNobWVudHMgb24gdGhlIG1haWxpbmcgbGlzdCBiZWNhdXNlIGl0IG1ha2VzIGl0
IGltcG9zc2libGUgdG8gY29tbWVudCB0aGUgcGF0Y2hlcyBpbmxpbmUuIEFoIHdlbGwsIGhlcmUg
Z29lcy4uLg0KPiA+DQo+ID4gLS0NCj4gPiBUcm9uZCBNeWtsZWJ1c3QNCj4gPiBMaW51eCBORlMg
Y2xpZW50IG1haW50YWluZXINCj4gPg0KPiA+IE5ldEFwcA0KPiA+IFRyb25kLk15a2xlYnVzdEBu
ZXRhcHAuY29tDQo+ID4gd3d3Lm5ldGFwcC5jb20NCj4gPg0KPiA+DQo+ID4gVGhpcyBtZXNzYWdl
IGFuZCBhbnkgYXR0YWNoZWQgZG9jdW1lbnRzIGNvbnRhaW4gaW5mb3JtYXRpb24gZnJvbSBRTG9n
aWMgQ29ycG9yYXRpb24gb3IgaXRzIHdob2xseS1vd25lZCBzdWJzaWRpYXJpZXMgdGhhdCBtYXkg
YmUgY29uZmlkZW50aWFsLiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50LCB5
b3UgbWF5IG5vdCByZWFkLCBjb3B5LCBkaXN0cmlidXRlLCBvciB1c2UgdGhpcyBpbmZvcm1hdGlv
bi4gSWYgeW91IGhhdmUgcmVjZWl2ZWQgdGhpcyB0cmFuc21pc3Npb24gaW4gZXJyb3IsIHBsZWFz
ZSBub3RpZnkgdGhlIHNlbmRlciBpbW1lZGlhdGVseSBieSByZXBseSBlLW1haWwgYW5kIHRoZW4g
ZGVsZXRlIHRoaXMgbWVzc2FnZS4NCj4NCj4gLS0NCj4gVHJvbmQgTXlrbGVidXN0DQo+IExpbnV4
IE5GUyBjbGllbnQgbWFpbnRhaW5lcg0KPg0KPiBOZXRBcHANCj4gVHJvbmQuTXlrbGVidXN0QG5l
dGFwcC5jb20NCj4gd3d3Lm5ldGFwcC5jb20NCj4NCj4NCj4gVGhpcyBtZXNzYWdlIGFuZCBhbnkg
YXR0YWNoZWQgZG9jdW1lbnRzIGNvbnRhaW4gaW5mb3JtYXRpb24gZnJvbSBRTG9naWMgQ29ycG9y
YXRpb24gb3IgaXRzIHdob2xseS1vd25lZCBzdWJzaWRpYXJpZXMgdGhhdCBtYXkgYmUgY29uZmlk
ZW50aWFsLiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50LCB5b3UgbWF5IG5v
dCByZWFkLCBjb3B5LCBkaXN0cmlidXRlLCBvciB1c2UgdGhpcyBpbmZvcm1hdGlvbi4gSWYgeW91
IGhhdmUgcmVjZWl2ZWQgdGhpcyB0cmFuc21pc3Npb24gaW4gZXJyb3IsIHBsZWFzZSBub3RpZnkg
dGhlIHNlbmRlciBpbW1lZGlhdGVseSBieSByZXBseSBlLW1haWwgYW5kIHRoZW4gZGVsZXRlIHRo
aXMgbWVzc2FnZS4NCg0KLS0NClRyb25kIE15a2xlYnVzdA0KTGludXggTkZTIGNsaWVudCBtYWlu
dGFpbmVyDQoNCk5ldEFwcA0KVHJvbmQuTXlrbGVidXN0QG5ldGFwcC5jb20NCnd3dy5uZXRhcHAu
Y29tDQoNCg0KVGhpcyBtZXNzYWdlIGFuZCBhbnkgYXR0YWNoZWQgZG9jdW1lbnRzIGNvbnRhaW4g
aW5mb3JtYXRpb24gZnJvbSBRTG9naWMgQ29ycG9yYXRpb24gb3IgaXRzIHdob2xseS1vd25lZCBz
dWJzaWRpYXJpZXMgdGhhdCBtYXkgYmUgY29uZmlkZW50aWFsLiBJZiB5b3UgYXJlIG5vdCB0aGUg
aW50ZW5kZWQgcmVjaXBpZW50LCB5b3UgbWF5IG5vdCByZWFkLCBjb3B5LCBkaXN0cmlidXRlLCBv
ciB1c2UgdGhpcyBpbmZvcm1hdGlvbi4gSWYgeW91IGhhdmUgcmVjZWl2ZWQgdGhpcyB0cmFuc21p
c3Npb24gaW4gZXJyb3IsIHBsZWFzZSBub3RpZnkgdGhlIHNlbmRlciBpbW1lZGlhdGVseSBieSBy
ZXBseSBlLW1haWwgYW5kIHRoZW4gZGVsZXRlIHRoaXMgbWVzc2FnZS4NCg==
Z2l0IGFwcGx5IC0tY2hlY2sgMDAwMS1ORlMtQ2xlYXIta2V5LWNvbnN0cnVjdGlvbi1kYXRhLWlm
LXRoZS1pZG1hcC11cGNhbGwtLnBhdGNoDQplcnJvcjogcGF0Y2ggZmFpbGVkOiBmcy9uZnMvaWRt
YXAuYzo2MQ0KZXJyb3I6IGZzL25mcy9pZG1hcC5jOiBwYXRjaCBkb2VzIG5vdCBhcHBseQ0KDQoN
CmlkbWFwLmMNCmRlZmluZSBORlNfVUlOVF9NQVhMRU4gMTENCg0Kc3RhdGljIGNvbnN0IHN0cnVj
dCBjcmVkICppZF9yZXNvbHZlcl9jYWNoZTsNCnN0YXRpYyBzdHJ1Y3Qga2V5X3R5cGUga2V5X3R5
cGVfaWRfcmVzb2x2ZXJfbGVnYWN5Ow0KDQpzdHJ1Y3QgaWRtYXAgew0KICAgICAgICBzdHJ1Y3Qg
cnBjX3BpcGUgICAgICAgICAqaWRtYXBfcGlwZTsNCiAgICAgICAgc3RydWN0IGtleV9jb25zdHJ1
Y3Rpb24gKmlkbWFwX2tleV9jb25zOw0KICAgICAgICBzdHJ1Y3QgbXV0ZXggICAgICAgICAgICBp
ZG1hcF9tdXRleDsNCn07DQoNCg0KLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCkZyb206IE15
a2xlYnVzdCwgVHJvbmQgW21haWx0bzpUcm9uZC5NeWtsZWJ1c3RAbmV0YXBwLmNvbV0NClNlbnQ6
IFRodXJzZGF5LCBBdWd1c3QgMTYsIDIwMTIgNToxNCBQTQ0KVG86IFNoYWkgTGF6bWkNCkNjOiBX
aWxsaWFtIERhdWNoeTsgU2NodW1ha2VyLCBCcnlhbjsgbGludXgtbmZzQHZnZXIua2VybmVsLm9y
Zw0KU3ViamVjdDogUmU6IFtQQVRDSCAxLzJdIE5GUzogQ2xlYXIga2V5IGNvbnN0cnVjdGlvbiBk
YXRhIGlmIHRoZSBpZG1hcCB1cGNhbGwgZmFpbHMNCg0KT24gVGh1LCAyMDEyLTA4LTE2IGF0IDE3
OjA3IC0wNzAwLCBTaGFpIExhem1pIHdyb3RlOg0KPiBTb3JyeSAtIGNvbXBhbnkncyBwb2xpY3kg
Li4uDQo+IFdoYXQgaWRtYXAgdmVyc2lvbiB3YXMgdGhpcyBwYXRjaCB1c2VkIGFnYWluc3Q/IFRo
ZSBvbmUgSSBoYXZlIChiNzAxMzU4Yykgc2VlbXMgdG8gYmUgYSBiaXQgZGlmZmVyZW50IChJIHVz
ZWQgbGF0ZXN0IHB1bGwgY29tbWl0IGRkZjM0M2Y2MzVmZTQ0NDBjYWQ1MjhlMTJmOTZmMjhiZDUw
YWEwOTkpLCBoZW5jZSB0aGUgcGF0Y2ggZmFpbHMgYWdhaW4NCg0KSXQgd29ya3MgZmluZSBmb3Ig
bWUgYWdhaW5zdCBjb21taXQgZGRmMzQzZjYzNWZlNDQ0MGNhZDUyOGUxMmY5NmYyOGJkNTBhYTA5
OToNCg0KW3Ryb25kbXlAbGFkZSBsaW51eC1uZnNdJCBnaXQgYnJhbmNoIHRlc3QtYXBwbHkgZGRm
MzQzZjYzNWZlNDQ0MGNhZDUyOGUxMmY5NmYyOGJkNTBhYTA5OQ0KW3Ryb25kbXlAbGFkZSBsaW51
eC1uZnNdJCBnaXQgY2hlY2tvdXQgdGVzdC1hcHBseQ0KU3dpdGNoZWQgdG8gYnJhbmNoICd0ZXN0
LWFwcGx5Jw0KW3Ryb25kbXlAbGFkZSBsaW51eC1uZnNdJCBnaXQgYW0gfi9EZXNrdG9wL2Zvcl9z
aGFpLzAwMDEtTkZTLUNsZWFyLWtleS1jb25zdHJ1Y3Rpb24tZGF0YS1pZi10aGUtaWRtYXAtdXBj
YWxsLS5wYXRjaA0KQXBwbHlpbmc6IE5GUzogQ2xlYXIga2V5IGNvbnN0cnVjdGlvbiBkYXRhIGlm
IHRoZSBpZG1hcCB1cGNhbGwgZmFpbHMNClt0cm9uZG15QGxhZGUgbGludXgtbmZzXSQgZ2l0IGFt
IH4vRGVza3RvcC9mb3Jfc2hhaS8wMDAyLU5GUy1yZXR1cm4tRU5PS0VZLXdoZW4tdGhlLXVwY2Fs
bC1mYWlscy10by1tYXAtdGhlLW4ucGF0Y2gNCkFwcGx5aW5nOiBORlM6IHJldHVybiAtRU5PS0VZ
IHdoZW4gdGhlIHVwY2FsbCBmYWlscyB0byBtYXAgdGhlIG5hbWUNCg0KV2hhdCBlcnJvciBtZXNz
YWdlcyBhcmUgeW91IHNlZWluZz8NCg0KQ2hlZXJzDQogIFRyb25kDQoNCj4gLS0tLS1PcmlnaW5h
bCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTXlrbGVidXN0LCBUcm9uZCBbbWFpbHRvOlRyb25kLk15
a2xlYnVzdEBuZXRhcHAuY29tXQ0KPiBTZW50OiBUaHVyc2RheSwgQXVndXN0IDE2LCAyMDEyIDQ6
NTcgUE0NCj4gVG86IFNoYWkgTGF6bWkNCj4gQ2M6IFdpbGxpYW0gRGF1Y2h5OyBTY2h1bWFrZXIs
IEJyeWFuOyBsaW51eC1uZnNAdmdlci5rZXJuZWwub3JnDQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0gg
MS8yXSBORlM6IENsZWFyIGtleSBjb25zdHJ1Y3Rpb24gZGF0YSBpZiB0aGUgaWRtYXAgdXBjYWxs
IGZhaWxzDQo+DQo+IE9uIFRodSwgMjAxMi0wOC0xNiBhdCAxNjo1MCAtMDcwMCwgU2hhaSBMYXpt
aSB3cm90ZToNCj4gPiBNUyBvdXRsb29rDQo+DQo+IERvbid0IGV2ZXIgdXNlIExvb2tPdXQgZm9y
IHBhdGNoZXMuIEl0cyAiSSBqdXN0IHJlZm9ybWF0dGVkIHlvdXIgZW1haWwiDQo+IHdvbmRlciBm
ZWF0dXJlIGJyZWFrcyBhbGwgdGhlIHdoaXRlc3BhY2UuDQo+DQo+ID4gQmVzdCB0aGluZyBpcyB0
byBhdHRhY2hlZCB0aGUgcGF0Y2gNCj4NCj4gV2UgZG8gbm90IG5vcm1hbGx5IHVzZSBhdHRhY2ht
ZW50cyBvbiB0aGUgbWFpbGluZyBsaXN0IGJlY2F1c2UgaXQgbWFrZXMgaXQgaW1wb3NzaWJsZSB0
byBjb21tZW50IHRoZSBwYXRjaGVzIGlubGluZS4gQWggd2VsbCwgaGVyZSBnb2VzLi4uDQo+DQo+
IC0tDQo+IFRyb25kIE15a2xlYnVzdA0KPiBMaW51eCBORlMgY2xpZW50IG1haW50YWluZXINCj4N
Cj4gTmV0QXBwDQo+IFRyb25kLk15a2xlYnVzdEBuZXRhcHAuY29tDQo+IHd3dy5uZXRhcHAuY29t
DQo+DQo+DQo+IFRoaXMgbWVzc2FnZSBhbmQgYW55IGF0dGFjaGVkIGRvY3VtZW50cyBjb250YWlu
IGluZm9ybWF0aW9uIGZyb20gUUxvZ2ljIENvcnBvcmF0aW9uIG9yIGl0cyB3aG9sbHktb3duZWQg
c3Vic2lkaWFyaWVzIHRoYXQgbWF5IGJlIGNvbmZpZGVudGlhbC4gSWYgeW91IGFyZSBub3QgdGhl
IGludGVuZGVkIHJlY2lwaWVudCwgeW91IG1heSBub3QgcmVhZCwgY29weSwgZGlzdHJpYnV0ZSwg
b3IgdXNlIHRoaXMgaW5mb3JtYXRpb24uIElmIHlvdSBoYXZlIHJlY2VpdmVkIHRoaXMgdHJhbnNt
aXNzaW9uIGluIGVycm9yLCBwbGVhc2Ugbm90aWZ5IHRoZSBzZW5kZXIgaW1tZWRpYXRlbHkgYnkg
cmVwbHkgZS1tYWlsIGFuZCB0aGVuIGRlbGV0ZSB0aGlzIG1lc3NhZ2UuDQoNCi0tDQpUcm9uZCBN
eWtsZWJ1c3QNCkxpbnV4IE5GUyBjbGllbnQgbWFpbnRhaW5lcg0KDQpOZXRBcHANClRyb25kLk15
a2xlYnVzdEBuZXRhcHAuY29tDQp3d3cubmV0YXBwLmNvbQ0KDQoNClRoaXMgbWVzc2FnZSBhbmQg
YW55IGF0dGFjaGVkIGRvY3VtZW50cyBjb250YWluIGluZm9ybWF0aW9uIGZyb20gUUxvZ2ljIENv
cnBvcmF0aW9uIG9yIGl0cyB3aG9sbHktb3duZWQgc3Vic2lkaWFyaWVzIHRoYXQgbWF5IGJlIGNv
bmZpZGVudGlhbC4gSWYgeW91IGFyZSBub3QgdGhlIGludGVuZGVkIHJlY2lwaWVudCwgeW91IG1h
eSBub3QgcmVhZCwgY29weSwgZGlzdHJpYnV0ZSwgb3IgdXNlIHRoaXMgaW5mb3JtYXRpb24uIElm
IHlvdSBoYXZlIHJlY2VpdmVkIHRoaXMgdHJhbnNtaXNzaW9uIGluIGVycm9yLCBwbGVhc2Ugbm90
aWZ5IHRoZSBzZW5kZXIgaW1tZWRpYXRlbHkgYnkgcmVwbHkgZS1tYWlsIGFuZCB0aGVuIGRlbGV0
ZSB0aGlzIG1lc3NhZ2UuDQo=
TVMgb3V0bG9vaw0KQmVzdCB0aGluZyBpcyB0byBhdHRhY2hlZCB0aGUgcGF0Y2gNCg0KLS0tLS1P
cmlnaW5hbCBNZXNzYWdlLS0tLS0NCkZyb206IE15a2xlYnVzdCwgVHJvbmQgW21haWx0bzpUcm9u
ZC5NeWtsZWJ1c3RAbmV0YXBwLmNvbV0NClNlbnQ6IFRodXJzZGF5LCBBdWd1c3QgMTYsIDIwMTIg
NDo1MCBQTQ0KVG86IFNoYWkgTGF6bWkNCkNjOiBXaWxsaWFtIERhdWNoeTsgU2NodW1ha2VyLCBC
cnlhbjsgbGludXgtbmZzQHZnZXIua2VybmVsLm9yZw0KU3ViamVjdDogUmU6IFtQQVRDSCAxLzJd
IE5GUzogQ2xlYXIga2V5IGNvbnN0cnVjdGlvbiBkYXRhIGlmIHRoZSBpZG1hcCB1cGNhbGwgZmFp
bHMNCg0KT24gVGh1LCAyMDEyLTA4LTE2IGF0IDE2OjQ0IC0wNzAwLCBTaGFpIExhem1pIHdyb3Rl
Og0KPiBQYXRjaCBmYWlscyB3aXRoICINCj4gZ2l0IGFwcGx5IC0tY2hlY2sNCj4gZmF0YWw6IHBh
dGNoIGZyYWdtZW50IHdpdGhvdXQgaGVhZGVyIGF0IGxpbmUgMzE6IEBAIC0zODAsMTEgKzM4Nywx
MyBAQCBzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCBuZnNfaWRtYXBfdG9rZW5zID0geyAgc3Rh
dGljIGludCBuZnNfaWRtYXBfbGVnYWN5X3VwY2FsbChzdHJ1Y3Qga2V5X2NvbnN0cnVjdGlvbiAq
LCBjb25zdCBjaGFyICosIHZvaWQgKik7ICBzdGF0aWMgc3NpemVfdCBpZG1hcF9waXBlX2Rvd25j
YWxsKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgX191c2VyICosDQo+ICINCg0KV2hhdCBlbWFp
bCBhcHBsaWNhdGlvbiBhcmUgeW91IHVzaW5nIHRvIGV4dHJhY3QgdGhlIHBhdGNoPyBPbg0KImV2
b2x1dGlvbiIsIEkgc2VlIHRoZSBhYm92ZSB0ZXh0IGFzIGJlaW5nIHNwbGl0IG92ZXIgc2V2ZXJh
bCBsaW5lcy4NCg0KDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogVHJv
bmQgTXlrbGVidXN0IFttYWlsdG86VHJvbmQuTXlrbGVidXN0QG5ldGFwcC5jb21dDQo+IFNlbnQ6
IFRodXJzZGF5LCBBdWd1c3QgMTYsIDIwMTIgMToyNCBQTQ0KPiBUbzogV2lsbGlhbSBEYXVjaHkN
Cj4gQ2M6IFNoYWkgTGF6bWk7IEJyeWFuIFNjaHVtYWtlcjsgbGludXgtbmZzQHZnZXIua2VybmVs
Lm9yZw0KPiBTdWJqZWN0OiBbUEFUQ0ggMS8yXSBORlM6IENsZWFyIGtleSBjb25zdHJ1Y3Rpb24g
ZGF0YSBpZiB0aGUgaWRtYXAgdXBjYWxsIGZhaWxzDQo+DQo+IEZyb206IEJyeWFuIFNjaHVtYWtl
ciA8YmpzY2h1bWFAbmV0YXBwLmNvbT4NCj4NCj4gaWRtYXBfcGlwZV9kb3duY2FsbCBhbHJlYWR5
IGNsZWFycyB0aGlzIGZpZWxkIGlmIHRoZSB1cGNhbGwgc3VjY2VlZHMsDQo+IGJ1dCBpZiBpdCBm
YWlscyAocnBjLmlkbWFwZCBpc24ndCBydW5uaW5nKSB0aGUgZmllbGQgd2lsbCBzdGlsbCBiZSBz
ZXQNCj4gb24gdGhlIG5leHQgY2FsbCB0cmlnZ2VyaW5nIGEgQlVHX09OKCkuICBUaGlzIHBhdGNo
IHRyaWVzIHRvIGhhbmRsZSBhbGwNCj4gcG9zc2libGUgd2F5cyB0aGF0IHRoZSB1cGNhbGwgY291
bGQgZmFpbCBhbmQgY2xlYXIgdGhlIGlkbWFwIGtleSBkYXRhDQo+IGZvciBlYWNoIG9uZS4NCj4N
Cj4gU2lnbmVkLW9mZi1ieTogQnJ5YW4gU2NodW1ha2VyIDxianNjaHVtYUBuZXRhcHAuY29tPg0K
PiBDYzogc3RhYmxlQHZnZXIua2VybmVsLm9yZyBbPj0gMy40XQ0KPiBTaWduZWQtb2ZmLWJ5OiBU
cm9uZCBNeWtsZWJ1c3QgPFRyb25kLk15a2xlYnVzdEBuZXRhcHAuY29tPg0KPiAtLS0NCj4gIGZz
L25mcy9pZG1hcC5jIHwgNTYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrLS0tLS0tLS0tLS0tLS0NCj4gIDEgZmlsZSBjaGFuZ2VkLCA0MiBpbnNlcnRpb25zKCspLCAx
NCBkZWxldGlvbnMoLSkNCj4NCj4gZGlmZiAtLWdpdCBhL2ZzL25mcy9pZG1hcC5jIGIvZnMvbmZz
L2lkbWFwLmMNCj4gaW5kZXggYjcwMTM1OC4uNjcwM2M3MyAxMDA2NDQNCj4gLS0tIGEvZnMvbmZz
L2lkbWFwLmMNCj4gKysrIGIvZnMvbmZzL2lkbWFwLmMNCj4gQEAgLTYxLDYgKzYxLDEyIEBAIHN0
cnVjdCBpZG1hcCB7DQo+ICAgICAgICAgc3RydWN0IG11dGV4ICAgICAgICAgICAgaWRtYXBfbXV0
ZXg7DQo+ICB9Ow0KPg0KPiArc3RydWN0IGlkbWFwX2xlZ2FjeV91cGNhbGxkYXRhIHsNCj4gKyAg
ICAgICBzdHJ1Y3QgcnBjX3BpcGVfbXNnIHBpcGVfbXNnOw0KPiArICAgICAgIHN0cnVjdCBpZG1h
cF9tc2cgaWRtYXBfbXNnOw0KPiArICAgICAgIHN0cnVjdCBpZG1hcCAqaWRtYXA7DQo+ICt9Ow0K
PiArDQo+ICAvKioNCj4gICAqIG5mc19mYXR0cl9pbml0X25hbWVzIC0gaW5pdGlhbGlzZSB0aGUg
bmZzX2ZhdHRyIG93bmVyX25hbWUvZ3JvdXBfbmFtZSBmaWVsZHMNCj4gICAqIEBmYXR0cjogZnVs
bHkgaW5pdGlhbGlzZWQgc3RydWN0IG5mc19mYXR0cg0KPiBAQCAtMzI0LDYgKzMzMCw3IEBAIHN0
YXRpYyBzc2l6ZV90IG5mc19pZG1hcF9nZXRfa2V5KGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBu
YW1lbGVuLA0KPiAgICAgICAgICAgICAgICAgcmV0ID0gbmZzX2lkbWFwX3JlcXVlc3Rfa2V5KCZr
ZXlfdHlwZV9pZF9yZXNvbHZlcl9sZWdhY3ksDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmFtZSwgbmFtZWxlbiwgdHlwZSwgZGF0YSwNCj4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3NpemUsIGlkbWFwKTsNCj4g
KyAgICAgICAgICAgICAgIGlkbWFwLT5pZG1hcF9rZXlfY29ucyA9IE5VTEw7DQo+ICAgICAgICAg
ICAgICAgICBtdXRleF91bmxvY2soJmlkbWFwLT5pZG1hcF9tdXRleCk7DQo+ICAgICAgICAgfQ0K
PiAgICAgICAgIHJldHVybiByZXQ7DQo+IEBAIC0zODAsMTEgKzM4NywxMyBAQCBzdGF0aWMgY29u
c3QgbWF0Y2hfdGFibGVfdCBuZnNfaWRtYXBfdG9rZW5zID0gew0KPiAgc3RhdGljIGludCBuZnNf
aWRtYXBfbGVnYWN5X3VwY2FsbChzdHJ1Y3Qga2V5X2NvbnN0cnVjdGlvbiAqLCBjb25zdCBjaGFy
ICosIHZvaWQgKik7DQo+ICBzdGF0aWMgc3NpemVfdCBpZG1hcF9waXBlX2Rvd25jYWxsKHN0cnVj
dCBmaWxlICosIGNvbnN0IGNoYXIgX191c2VyICosDQo+ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90KTsNCj4gK3N0YXRpYyB2b2lkIGlkbWFwX3JlbGVhc2VfcGlwZShz
dHJ1Y3QgaW5vZGUgKik7DQo+ICBzdGF0aWMgdm9pZCBpZG1hcF9waXBlX2Rlc3Ryb3lfbXNnKHN0
cnVjdCBycGNfcGlwZV9tc2cgKik7DQo+DQo+ICBzdGF0aWMgY29uc3Qgc3RydWN0IHJwY19waXBl
X29wcyBpZG1hcF91cGNhbGxfb3BzID0gew0KPiAgICAgICAgIC51cGNhbGwgICAgICAgICA9IHJw
Y19waXBlX2dlbmVyaWNfdXBjYWxsLA0KPiAgICAgICAgIC5kb3duY2FsbCAgICAgICA9IGlkbWFw
X3BpcGVfZG93bmNhbGwsDQo+ICsgICAgICAgLnJlbGVhc2VfcGlwZSAgID0gaWRtYXBfcmVsZWFz
ZV9waXBlLA0KPiAgICAgICAgIC5kZXN0cm95X21zZyAgICA9IGlkbWFwX3BpcGVfZGVzdHJveV9t
c2csDQo+ICB9Ow0KPg0KPiBAQCAtNjE2LDcgKzYyNSw4IEBAIHZvaWQgbmZzX2lkbWFwX3F1aXQo
dm9pZCkNCj4gICAgICAgICBuZnNfaWRtYXBfcXVpdF9rZXlyaW5nKCk7DQo+ICB9DQo+DQo+IC1z
dGF0aWMgaW50IG5mc19pZG1hcF9wcmVwYXJlX21lc3NhZ2UoY2hhciAqZGVzYywgc3RydWN0IGlk
bWFwX21zZyAqaW0sDQo+ICtzdGF0aWMgaW50IG5mc19pZG1hcF9wcmVwYXJlX21lc3NhZ2UoY2hh
ciAqZGVzYywgc3RydWN0IGlkbWFwICppZG1hcCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBpZG1hcF9tc2cgKmltLA0KPiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0IHJwY19waXBlX21zZyAqbXNnKQ0KPiAgew0KPiAgICAg
ICAgIHN1YnN0cmluZ190IHN1YnN0cjsNCj4gQEAgLTY1OSw2ICs2NjksNyBAQCBzdGF0aWMgaW50
IG5mc19pZG1hcF9sZWdhY3lfdXBjYWxsKHN0cnVjdCBrZXlfY29uc3RydWN0aW9uICpjb25zLA0K
PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9wLA0KPiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmF1eCkNCj4gIHsNCj4gKyAg
ICAgICBzdHJ1Y3QgaWRtYXBfbGVnYWN5X3VwY2FsbGRhdGEgKmRhdGE7DQo+ICAgICAgICAgc3Ry
dWN0IHJwY19waXBlX21zZyAqbXNnOw0KPiAgICAgICAgIHN0cnVjdCBpZG1hcF9tc2cgKmltOw0K
PiAgICAgICAgIHN0cnVjdCBpZG1hcCAqaWRtYXAgPSAoc3RydWN0IGlkbWFwICopYXV4Ow0KPiBA
QCAtNjY2LDE1ICs2NzcsMTUgQEAgc3RhdGljIGludCBuZnNfaWRtYXBfbGVnYWN5X3VwY2FsbChz
dHJ1Y3Qga2V5X2NvbnN0cnVjdGlvbiAqY29ucywNCj4gICAgICAgICBpbnQgcmV0ID0gLUVOT01F
TTsNCj4NCj4gICAgICAgICAvKiBtc2cgYW5kIGltIGFyZSBmcmVlZCBpbiBpZG1hcF9waXBlX2Rl
c3Ryb3lfbXNnICovDQo+IC0gICAgICAgbXNnID0ga21hbGxvYyhzaXplb2YoKm1zZyksIEdGUF9L
RVJORUwpOw0KPiAtICAgICAgIGlmICghbXNnKQ0KPiAtICAgICAgICAgICAgICAgZ290byBvdXQw
Ow0KPiAtDQo+IC0gICAgICAgaW0gPSBrbWFsbG9jKHNpemVvZigqaW0pLCBHRlBfS0VSTkVMKTsN
Cj4gLSAgICAgICBpZiAoIWltKQ0KPiArICAgICAgIGRhdGEgPSBrbWFsbG9jKHNpemVvZigqZGF0
YSksIEdGUF9LRVJORUwpOw0KPiArICAgICAgIGlmICghZGF0YSkNCj4gICAgICAgICAgICAgICAg
IGdvdG8gb3V0MTsNCj4NCj4gLSAgICAgICByZXQgPSBuZnNfaWRtYXBfcHJlcGFyZV9tZXNzYWdl
KGtleS0+ZGVzY3JpcHRpb24sIGltLCBtc2cpOw0KPiArICAgICAgIG1zZyA9ICZkYXRhLT5waXBl
X21zZzsNCj4gKyAgICAgICBpbSA9ICZkYXRhLT5pZG1hcF9tc2c7DQo+ICsgICAgICAgZGF0YS0+
aWRtYXAgPSBpZG1hcDsNCj4gKw0KPiArICAgICAgIHJldCA9IG5mc19pZG1hcF9wcmVwYXJlX21l
c3NhZ2Uoa2V5LT5kZXNjcmlwdGlvbiwgaWRtYXAsIGltLCBtc2cpOw0KPiAgICAgICAgIGlmIChy
ZXQgPCAwKQ0KPiAgICAgICAgICAgICAgICAgZ290byBvdXQyOw0KPg0KPiBAQCAtNjgzLDE1ICs2
OTQsMTUgQEAgc3RhdGljIGludCBuZnNfaWRtYXBfbGVnYWN5X3VwY2FsbChzdHJ1Y3Qga2V5X2Nv
bnN0cnVjdGlvbiAqY29ucywNCj4NCj4gICAgICAgICByZXQgPSBycGNfcXVldWVfdXBjYWxsKGlk
bWFwLT5pZG1hcF9waXBlLCBtc2cpOw0KPiAgICAgICAgIGlmIChyZXQgPCAwKQ0KPiAtICAgICAg
ICAgICAgICAgZ290byBvdXQyOw0KPiArICAgICAgICAgICAgICAgZ290byBvdXQzOw0KPg0KPiAg
ICAgICAgIHJldHVybiByZXQ7DQo+DQo+ICtvdXQzOg0KPiArICAgICAgIGlkbWFwLT5pZG1hcF9r
ZXlfY29ucyA9IE5VTEw7DQo+ICBvdXQyOg0KPiAtICAgICAgIGtmcmVlKGltKTsNCj4gKyAgICAg
ICBrZnJlZShkYXRhKTsNCj4gIG91dDE6DQo+IC0gICAgICAga2ZyZWUobXNnKTsNCj4gLW91dDA6
DQo+ICAgICAgICAgY29tcGxldGVfcmVxdWVzdF9rZXkoY29ucywgcmV0KTsNCj4gICAgICAgICBy
ZXR1cm4gcmV0Ow0KPiAgfQ0KPiBAQCAtNzc1LDkgKzc4NiwyNiBAQCBvdXRfaW5jb21wbGV0ZToN
Cj4gIHN0YXRpYyB2b2lkDQo+ICBpZG1hcF9waXBlX2Rlc3Ryb3lfbXNnKHN0cnVjdCBycGNfcGlw
ZV9tc2cgKm1zZykNCj4gIHsNCj4gKyAgICAgICBzdHJ1Y3QgaWRtYXBfbGVnYWN5X3VwY2FsbGRh
dGEgKmRhdGEgPSBjb250YWluZXJfb2YobXNnLA0KPiArICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3QgaWRtYXBfbGVnYWN5X3VwY2FsbGRhdGEsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg
IHBpcGVfbXNnKTsNCj4gKyAgICAgICBzdHJ1Y3QgaWRtYXAgKmlkbWFwID0gZGF0YS0+aWRtYXA7
DQo+ICsgICAgICAgc3RydWN0IGtleV9jb25zdHJ1Y3Rpb24gKmNvbnM7DQo+ICsgICAgICAgaWYg
KG1zZy0+ZXJybm8pIHsNCj4gKyAgICAgICAgICAgICAgIGNvbnMgPSBBQ0NFU1NfT05DRShpZG1h
cC0+aWRtYXBfa2V5X2NvbnMpOw0KPiArICAgICAgICAgICAgICAgaWRtYXAtPmlkbWFwX2tleV9j
b25zID0gTlVMTDsNCj4gKyAgICAgICAgICAgICAgIGNvbXBsZXRlX3JlcXVlc3Rfa2V5KGNvbnMs
IG1zZy0+ZXJybm8pOw0KPiArICAgICAgIH0NCj4gICAgICAgICAvKiBGcmVlIG1lbW9yeSBhbGxv
Y2F0ZWQgaW4gbmZzX2lkbWFwX2xlZ2FjeV91cGNhbGwoKSAqLw0KPiAtICAgICAgIGtmcmVlKG1z
Zy0+ZGF0YSk7DQo+IC0gICAgICAga2ZyZWUobXNnKTsNCj4gKyAgICAgICBrZnJlZShkYXRhKTsN
Cj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK2lkbWFwX3JlbGVhc2VfcGlwZShzdHJ1Y3Qg
aW5vZGUgKmlub2RlKQ0KPiArew0KPiArICAgICAgIHN0cnVjdCBycGNfaW5vZGUgKnJwY2kgPSBS
UENfSShpbm9kZSk7DQo+ICsgICAgICAgc3RydWN0IGlkbWFwICppZG1hcCA9IChzdHJ1Y3QgaWRt
YXAgKilycGNpLT5wcml2YXRlOw0KPiArICAgICAgIGlkbWFwLT5pZG1hcF9rZXlfY29ucyA9IE5V
TEw7DQo+ICB9DQo+DQo+ICBpbnQgbmZzX21hcF9uYW1lX3RvX3VpZChjb25zdCBzdHJ1Y3QgbmZz
X3NlcnZlciAqc2VydmVyLCBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwgX191MzIg
KnVpZCkNCj4gLS0NCj4gMS43LjExLjINCj4NCj4NCj4NCj4gVGhpcyBtZXNzYWdlIGFuZCBhbnkg
YXR0YWNoZWQgZG9jdW1lbnRzIGNvbnRhaW4gaW5mb3JtYXRpb24gZnJvbSBRTG9naWMgQ29ycG9y
YXRpb24gb3IgaXRzIHdob2xseS1vd25lZCBzdWJzaWRpYXJpZXMgdGhhdCBtYXkgYmUgY29uZmlk
ZW50aWFsLiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50LCB5b3UgbWF5IG5v
dCByZWFkLCBjb3B5LCBkaXN0cmlidXRlLCBvciB1c2UgdGhpcyBpbmZvcm1hdGlvbi4gSWYgeW91
IGhhdmUgcmVjZWl2ZWQgdGhpcyB0cmFuc21pc3Npb24gaW4gZXJyb3IsIHBsZWFzZSBub3RpZnkg
dGhlIHNlbmRlciBpbW1lZGlhdGVseSBieSByZXBseSBlLW1haWwgYW5kIHRoZW4gZGVsZXRlIHRo
aXMgbWVzc2FnZS4NCj4NCg0KLS0NClRyb25kIE15a2xlYnVzdA0KTGludXggTkZTIGNsaWVudCBt
YWludGFpbmVyDQoNCk5ldEFwcA0KVHJvbmQuTXlrbGVidXN0QG5ldGFwcC5jb20NCnd3dy5uZXRh
cHAuY29tDQoNCg0KVGhpcyBtZXNzYWdlIGFuZCBhbnkgYXR0YWNoZWQgZG9jdW1lbnRzIGNvbnRh
aW4gaW5mb3JtYXRpb24gZnJvbSBRTG9naWMgQ29ycG9yYXRpb24gb3IgaXRzIHdob2xseS1vd25l
ZCBzdWJzaWRpYXJpZXMgdGhhdCBtYXkgYmUgY29uZmlkZW50aWFsLiBJZiB5b3UgYXJlIG5vdCB0
aGUgaW50ZW5kZWQgcmVjaXBpZW50LCB5b3UgbWF5IG5vdCByZWFkLCBjb3B5LCBkaXN0cmlidXRl
LCBvciB1c2UgdGhpcyBpbmZvcm1hdGlvbi4gSWYgeW91IGhhdmUgcmVjZWl2ZWQgdGhpcyB0cmFu
c21pc3Npb24gaW4gZXJyb3IsIHBsZWFzZSBub3RpZnkgdGhlIHNlbmRlciBpbW1lZGlhdGVseSBi
eSByZXBseSBlLW1haWwgYW5kIHRoZW4gZGVsZXRlIHRoaXMgbWVzc2FnZS4NCg==
On Thu, 2012-08-16 at 16:50 -0700, Shai Lazmi wrote:
> MS outlook
Don't ever use LookOut for patches. Its "I just reformatted your email"
wonder feature breaks all the whitespace.
> Best thing is to attached the patch
We do not normally use attachments on the mailing list because it makes
it impossible to comment the patches inline. Ah well, here goes...
--
Trond Myklebust
Linux NFS client maintainer
NetApp
[email protected]
http://www.netapp.com
From: Bryan Schumaker <[email protected]>
This allows the normal error-paths to handle the error, rather than
making a special call to complete_request_key() just for this instance.
Signed-off-by: Bryan Schumaker <[email protected]>
Tested-by: William Dauchy <[email protected]>
Cc: [email protected] [>= 3.4]
Signed-off-by: Trond Myklebust <[email protected]>
---
fs/nfs/idmap.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/fs/nfs/idmap.c b/fs/nfs/idmap.c
index 6703c73..a850079 100644
--- a/fs/nfs/idmap.c
+++ b/fs/nfs/idmap.c
@@ -760,9 +760,8 @@ idmap_pipe_downcall(struct file *filp, const char __user *src, size_t mlen)
}
if (!(im.im_status & IDMAP_STATUS_SUCCESS)) {
- ret = mlen;
- complete_request_key(cons, -ENOKEY);
- goto out_incomplete;
+ ret = -ENOKEY;
+ goto out;
}
namelen_in = strnlen(im.im_name, IDMAP_NAMESZ);
@@ -779,7 +778,6 @@ idmap_pipe_downcall(struct file *filp, const char __user *src, size_t mlen)
out:
complete_request_key(cons, ret);
-out_incomplete:
return ret;
}
--
1.7.11.2
SSd2ZSBsb29rZWQgYXQgdGhlIHJlcG8gKGh0dHA6Ly9naXQua2VybmVsLm9yZy8/cD1saW51eC9r
ZXJuZWwvZ2l0L3RvcnZhbGRzL2xpbnV4LmdpdDthPWJsb2I7Zj1mcy9uZnMvaWRtYXAuYztoPWI3
MDEzNThjMzljMzUxZDA2MTNkMWRiMjllYmNmMzgyY2E4Y2IwYTY7aGI9ZGRmMzQzZjYzNWZlNDQ0
MGNhZDUyOGUxMmY5NmYyOGJkNTBhYTA5OSksIHNlZW1zIGp1c3QgbGlrZSB3aGF0IEkgaGF2ZQ0K
Q2FuIGl0IGJlIGFscmVhZHkgY2hhbmdlZCBvbiB0aGUgdHJlZT8NCg0KLS0tLS1PcmlnaW5hbCBN
ZXNzYWdlLS0tLS0NCkZyb206IE15a2xlYnVzdCwgVHJvbmQgW21haWx0bzpUcm9uZC5NeWtsZWJ1
c3RAbmV0YXBwLmNvbV0NClNlbnQ6IFRodXJzZGF5LCBBdWd1c3QgMTYsIDIwMTIgNToyMiBQTQ0K
VG86IFNoYWkgTGF6bWkNCkNjOiBXaWxsaWFtIERhdWNoeTsgU2NodW1ha2VyLCBCcnlhbjsgbGlu
dXgtbmZzQHZnZXIua2VybmVsLm9yZw0KU3ViamVjdDogUmU6IFtQQVRDSCAxLzJdIE5GUzogQ2xl
YXIga2V5IGNvbnN0cnVjdGlvbiBkYXRhIGlmIHRoZSBpZG1hcCB1cGNhbGwgZmFpbHMNCg0KT24g
VGh1LCAyMDEyLTA4LTE2IGF0IDE3OjE1IC0wNzAwLCBTaGFpIExhem1pIHdyb3RlOg0KPiBnaXQg
YXBwbHkgLS1jaGVjayAwMDAxLU5GUy1DbGVhci1rZXktY29uc3RydWN0aW9uLWRhdGEtaWYtdGhl
LWlkbWFwLXVwY2FsbC0ucGF0Y2gNCj4gZXJyb3I6IHBhdGNoIGZhaWxlZDogZnMvbmZzL2lkbWFw
LmM6NjENCj4gZXJyb3I6IGZzL25mcy9pZG1hcC5jOiBwYXRjaCBkb2VzIG5vdCBhcHBseQ0KPg0K
Pg0KPiBpZG1hcC5jDQo+IGRlZmluZSBORlNfVUlOVF9NQVhMRU4gMTENCj4NCj4gc3RhdGljIGNv
bnN0IHN0cnVjdCBjcmVkICppZF9yZXNvbHZlcl9jYWNoZTsNCj4gc3RhdGljIHN0cnVjdCBrZXlf
dHlwZSBrZXlfdHlwZV9pZF9yZXNvbHZlcl9sZWdhY3k7DQo+DQo+IHN0cnVjdCBpZG1hcCB7DQo+
ICAgICAgICAgc3RydWN0IHJwY19waXBlICAgICAgICAgKmlkbWFwX3BpcGU7DQo+ICAgICAgICAg
c3RydWN0IGtleV9jb25zdHJ1Y3Rpb24gKmlkbWFwX2tleV9jb25zOw0KPiAgICAgICAgIHN0cnVj
dCBtdXRleCAgICAgICAgICAgIGlkbWFwX211dGV4Ow0KPiB9Ow0KDQpUaGF0J3MgaG93IGl0IHNo
b3VsZCBtb3JlIG9yIGxlc3MgbG9vayBhZnRlciBhcHBseWluZyB0aGUgcGF0Y2guIEknbQ0KZ3Vl
c3NpbmcgdGhhdCBvbmUgb2YgeW91ciBwcmV2aW91cyBhdHRlbXB0cyBoYXMgcGFydGlhbGx5IHdv
cmtlZCwgYW5kDQpoYXMgbGVmdCB5b3VyIGNoZWNrZWQgb3V0IGdpdCB0cmVlIGluIGEgImRpcnR5
IiBzdGF0ZS4NCg0KUGxlYXNlIHRyeSB0aGUgZm9sbG93aW5nOg0KDQokIGdpdCByZXNldCAtLWhh
cmQgSEVBRA0KJCBnaXQgYXBwbHkgLS1jaGVjayAwMDAxLU5GUy1DbGVhci1rZXktY29uc3RydWN0
aW9uLWRhdGEtaWYtdGhlLWlkbWFwLXVwY2FsbC0ucGF0Y2gNCiQgZ2l0IGFwcGx5IC0tY2hlY2sg
MDAwMi1ORlMtcmV0dXJuLUVOT0tFWS13aGVuLXRoZS11cGNhbGwtZmFpbHMtdG8tbWFwLXRoZS1u
LnBhdGNoDQoNCg0KPg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBNeWts
ZWJ1c3QsIFRyb25kIFttYWlsdG86VHJvbmQuTXlrbGVidXN0QG5ldGFwcC5jb21dDQo+IFNlbnQ6
IFRodXJzZGF5LCBBdWd1c3QgMTYsIDIwMTIgNToxNCBQTQ0KPiBUbzogU2hhaSBMYXptaQ0KPiBD
YzogV2lsbGlhbSBEYXVjaHk7IFNjaHVtYWtlciwgQnJ5YW47IGxpbnV4LW5mc0B2Z2VyLmtlcm5l
bC5vcmcNCj4gU3ViamVjdDogUmU6IFtQQVRDSCAxLzJdIE5GUzogQ2xlYXIga2V5IGNvbnN0cnVj
dGlvbiBkYXRhIGlmIHRoZSBpZG1hcCB1cGNhbGwgZmFpbHMNCj4NCj4gT24gVGh1LCAyMDEyLTA4
LTE2IGF0IDE3OjA3IC0wNzAwLCBTaGFpIExhem1pIHdyb3RlOg0KPiA+IFNvcnJ5IC0gY29tcGFu
eSdzIHBvbGljeSAuLi4NCj4gPiBXaGF0IGlkbWFwIHZlcnNpb24gd2FzIHRoaXMgcGF0Y2ggdXNl
ZCBhZ2FpbnN0PyBUaGUgb25lIEkgaGF2ZSAoYjcwMTM1OGMpIHNlZW1zIHRvIGJlIGEgYml0IGRp
ZmZlcmVudCAoSSB1c2VkIGxhdGVzdCBwdWxsIGNvbW1pdCBkZGYzNDNmNjM1ZmU0NDQwY2FkNTI4
ZTEyZjk2ZjI4YmQ1MGFhMDk5KSwgaGVuY2UgdGhlIHBhdGNoIGZhaWxzIGFnYWluDQo+DQo+IEl0
IHdvcmtzIGZpbmUgZm9yIG1lIGFnYWluc3QgY29tbWl0IGRkZjM0M2Y2MzVmZTQ0NDBjYWQ1Mjhl
MTJmOTZmMjhiZDUwYWEwOTk6DQo+DQo+IFt0cm9uZG15QGxhZGUgbGludXgtbmZzXSQgZ2l0IGJy
YW5jaCB0ZXN0LWFwcGx5IGRkZjM0M2Y2MzVmZTQ0NDBjYWQ1MjhlMTJmOTZmMjhiZDUwYWEwOTkN
Cj4gW3Ryb25kbXlAbGFkZSBsaW51eC1uZnNdJCBnaXQgY2hlY2tvdXQgdGVzdC1hcHBseQ0KPiBT
d2l0Y2hlZCB0byBicmFuY2ggJ3Rlc3QtYXBwbHknDQo+IFt0cm9uZG15QGxhZGUgbGludXgtbmZz
XSQgZ2l0IGFtIH4vRGVza3RvcC9mb3Jfc2hhaS8wMDAxLU5GUy1DbGVhci1rZXktY29uc3RydWN0
aW9uLWRhdGEtaWYtdGhlLWlkbWFwLXVwY2FsbC0ucGF0Y2gNCj4gQXBwbHlpbmc6IE5GUzogQ2xl
YXIga2V5IGNvbnN0cnVjdGlvbiBkYXRhIGlmIHRoZSBpZG1hcCB1cGNhbGwgZmFpbHMNCj4gW3Ry
b25kbXlAbGFkZSBsaW51eC1uZnNdJCBnaXQgYW0gfi9EZXNrdG9wL2Zvcl9zaGFpLzAwMDItTkZT
LXJldHVybi1FTk9LRVktd2hlbi10aGUtdXBjYWxsLWZhaWxzLXRvLW1hcC10aGUtbi5wYXRjaA0K
PiBBcHBseWluZzogTkZTOiByZXR1cm4gLUVOT0tFWSB3aGVuIHRoZSB1cGNhbGwgZmFpbHMgdG8g
bWFwIHRoZSBuYW1lDQo+DQo+IFdoYXQgZXJyb3IgbWVzc2FnZXMgYXJlIHlvdSBzZWVpbmc/DQo+
DQo+IENoZWVycw0KPiAgIFRyb25kDQo+DQo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0N
Cj4gPiBGcm9tOiBNeWtsZWJ1c3QsIFRyb25kIFttYWlsdG86VHJvbmQuTXlrbGVidXN0QG5ldGFw
cC5jb21dDQo+ID4gU2VudDogVGh1cnNkYXksIEF1Z3VzdCAxNiwgMjAxMiA0OjU3IFBNDQo+ID4g
VG86IFNoYWkgTGF6bWkNCj4gPiBDYzogV2lsbGlhbSBEYXVjaHk7IFNjaHVtYWtlciwgQnJ5YW47
IGxpbnV4LW5mc0B2Z2VyLmtlcm5lbC5vcmcNCj4gPiBTdWJqZWN0OiBSZTogW1BBVENIIDEvMl0g
TkZTOiBDbGVhciBrZXkgY29uc3RydWN0aW9uIGRhdGEgaWYgdGhlIGlkbWFwIHVwY2FsbCBmYWls
cw0KPiA+DQo+ID4gT24gVGh1LCAyMDEyLTA4LTE2IGF0IDE2OjUwIC0wNzAwLCBTaGFpIExhem1p
IHdyb3RlOg0KPiA+ID4gTVMgb3V0bG9vaw0KPiA+DQo+ID4gRG9uJ3QgZXZlciB1c2UgTG9va091
dCBmb3IgcGF0Y2hlcy4gSXRzICJJIGp1c3QgcmVmb3JtYXR0ZWQgeW91ciBlbWFpbCINCj4gPiB3
b25kZXIgZmVhdHVyZSBicmVha3MgYWxsIHRoZSB3aGl0ZXNwYWNlLg0KPiA+DQo+ID4gPiBCZXN0
IHRoaW5nIGlzIHRvIGF0dGFjaGVkIHRoZSBwYXRjaA0KPiA+DQo+ID4gV2UgZG8gbm90IG5vcm1h
bGx5IHVzZSBhdHRhY2htZW50cyBvbiB0aGUgbWFpbGluZyBsaXN0IGJlY2F1c2UgaXQgbWFrZXMg
aXQgaW1wb3NzaWJsZSB0byBjb21tZW50IHRoZSBwYXRjaGVzIGlubGluZS4gQWggd2VsbCwgaGVy
ZSBnb2VzLi4uDQo+ID4NCj4gPiAtLQ0KPiA+IFRyb25kIE15a2xlYnVzdA0KPiA+IExpbnV4IE5G
UyBjbGllbnQgbWFpbnRhaW5lcg0KPiA+DQo+ID4gTmV0QXBwDQo+ID4gVHJvbmQuTXlrbGVidXN0
QG5ldGFwcC5jb20NCj4gPiB3d3cubmV0YXBwLmNvbQ0KPiA+DQo+ID4NCj4gPiBUaGlzIG1lc3Nh
Z2UgYW5kIGFueSBhdHRhY2hlZCBkb2N1bWVudHMgY29udGFpbiBpbmZvcm1hdGlvbiBmcm9tIFFM
b2dpYyBDb3Jwb3JhdGlvbiBvciBpdHMgd2hvbGx5LW93bmVkIHN1YnNpZGlhcmllcyB0aGF0IG1h
eSBiZSBjb25maWRlbnRpYWwuIElmIHlvdSBhcmUgbm90IHRoZSBpbnRlbmRlZCByZWNpcGllbnQs
IHlvdSBtYXkgbm90IHJlYWQsIGNvcHksIGRpc3RyaWJ1dGUsIG9yIHVzZSB0aGlzIGluZm9ybWF0
aW9uLiBJZiB5b3UgaGF2ZSByZWNlaXZlZCB0aGlzIHRyYW5zbWlzc2lvbiBpbiBlcnJvciwgcGxl
YXNlIG5vdGlmeSB0aGUgc2VuZGVyIGltbWVkaWF0ZWx5IGJ5IHJlcGx5IGUtbWFpbCBhbmQgdGhl
biBkZWxldGUgdGhpcyBtZXNzYWdlLg0KPg0KPiAtLQ0KPiBUcm9uZCBNeWtsZWJ1c3QNCj4gTGlu
dXggTkZTIGNsaWVudCBtYWludGFpbmVyDQo+DQo+IE5ldEFwcA0KPiBUcm9uZC5NeWtsZWJ1c3RA
bmV0YXBwLmNvbQ0KPiB3d3cubmV0YXBwLmNvbQ0KPg0KPg0KPiBUaGlzIG1lc3NhZ2UgYW5kIGFu
eSBhdHRhY2hlZCBkb2N1bWVudHMgY29udGFpbiBpbmZvcm1hdGlvbiBmcm9tIFFMb2dpYyBDb3Jw
b3JhdGlvbiBvciBpdHMgd2hvbGx5LW93bmVkIHN1YnNpZGlhcmllcyB0aGF0IG1heSBiZSBjb25m
aWRlbnRpYWwuIElmIHlvdSBhcmUgbm90IHRoZSBpbnRlbmRlZCByZWNpcGllbnQsIHlvdSBtYXkg
bm90IHJlYWQsIGNvcHksIGRpc3RyaWJ1dGUsIG9yIHVzZSB0aGlzIGluZm9ybWF0aW9uLiBJZiB5
b3UgaGF2ZSByZWNlaXZlZCB0aGlzIHRyYW5zbWlzc2lvbiBpbiBlcnJvciwgcGxlYXNlIG5vdGlm
eSB0aGUgc2VuZGVyIGltbWVkaWF0ZWx5IGJ5IHJlcGx5IGUtbWFpbCBhbmQgdGhlbiBkZWxldGUg
dGhpcyBtZXNzYWdlLg0KDQotLQ0KVHJvbmQgTXlrbGVidXN0DQpMaW51eCBORlMgY2xpZW50IG1h
aW50YWluZXINCg0KTmV0QXBwDQpUcm9uZC5NeWtsZWJ1c3RAbmV0YXBwLmNvbQ0Kd3d3Lm5ldGFw
cC5jb20NCg0KDQpUaGlzIG1lc3NhZ2UgYW5kIGFueSBhdHRhY2hlZCBkb2N1bWVudHMgY29udGFp
biBpbmZvcm1hdGlvbiBmcm9tIFFMb2dpYyBDb3Jwb3JhdGlvbiBvciBpdHMgd2hvbGx5LW93bmVk
IHN1YnNpZGlhcmllcyB0aGF0IG1heSBiZSBjb25maWRlbnRpYWwuIElmIHlvdSBhcmUgbm90IHRo
ZSBpbnRlbmRlZCByZWNpcGllbnQsIHlvdSBtYXkgbm90IHJlYWQsIGNvcHksIGRpc3RyaWJ1dGUs
IG9yIHVzZSB0aGlzIGluZm9ybWF0aW9uLiBJZiB5b3UgaGF2ZSByZWNlaXZlZCB0aGlzIHRyYW5z
bWlzc2lvbiBpbiBlcnJvciwgcGxlYXNlIG5vdGlmeSB0aGUgc2VuZGVyIGltbWVkaWF0ZWx5IGJ5
IHJlcGx5IGUtbWFpbCBhbmQgdGhlbiBkZWxldGUgdGhpcyBtZXNzYWdlLg0K
U29ycnkgLSBjb21wYW55J3MgcG9saWN5IC4uLg0KV2hhdCBpZG1hcCB2ZXJzaW9uIHdhcyB0aGlz
IHBhdGNoIHVzZWQgYWdhaW5zdD8gVGhlIG9uZSBJIGhhdmUgKGI3MDEzNThjKSBzZWVtcyB0byBi
ZSBhIGJpdCBkaWZmZXJlbnQgKEkgdXNlZCBsYXRlc3QgcHVsbCBjb21taXQgZGRmMzQzZjYzNWZl
NDQ0MGNhZDUyOGUxMmY5NmYyOGJkNTBhYTA5OSksIGhlbmNlIHRoZSBwYXRjaCBmYWlscyBhZ2Fp
bg0KDQotLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KRnJvbTogTXlrbGVidXN0LCBUcm9uZCBb
bWFpbHRvOlRyb25kLk15a2xlYnVzdEBuZXRhcHAuY29tXQ0KU2VudDogVGh1cnNkYXksIEF1Z3Vz
dCAxNiwgMjAxMiA0OjU3IFBNDQpUbzogU2hhaSBMYXptaQ0KQ2M6IFdpbGxpYW0gRGF1Y2h5OyBT
Y2h1bWFrZXIsIEJyeWFuOyBsaW51eC1uZnNAdmdlci5rZXJuZWwub3JnDQpTdWJqZWN0OiBSZTog
W1BBVENIIDEvMl0gTkZTOiBDbGVhciBrZXkgY29uc3RydWN0aW9uIGRhdGEgaWYgdGhlIGlkbWFw
IHVwY2FsbCBmYWlscw0KDQpPbiBUaHUsIDIwMTItMDgtMTYgYXQgMTY6NTAgLTA3MDAsIFNoYWkg
TGF6bWkgd3JvdGU6DQo+IE1TIG91dGxvb2sNCg0KRG9uJ3QgZXZlciB1c2UgTG9va091dCBmb3Ig
cGF0Y2hlcy4gSXRzICJJIGp1c3QgcmVmb3JtYXR0ZWQgeW91ciBlbWFpbCINCndvbmRlciBmZWF0
dXJlIGJyZWFrcyBhbGwgdGhlIHdoaXRlc3BhY2UuDQoNCj4gQmVzdCB0aGluZyBpcyB0byBhdHRh
Y2hlZCB0aGUgcGF0Y2gNCg0KV2UgZG8gbm90IG5vcm1hbGx5IHVzZSBhdHRhY2htZW50cyBvbiB0
aGUgbWFpbGluZyBsaXN0IGJlY2F1c2UgaXQgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBjb21tZW50
IHRoZSBwYXRjaGVzIGlubGluZS4gQWggd2VsbCwgaGVyZSBnb2VzLi4uDQoNCi0tDQpUcm9uZCBN
eWtsZWJ1c3QNCkxpbnV4IE5GUyBjbGllbnQgbWFpbnRhaW5lcg0KDQpOZXRBcHANClRyb25kLk15
a2xlYnVzdEBuZXRhcHAuY29tDQp3d3cubmV0YXBwLmNvbQ0KDQoNClRoaXMgbWVzc2FnZSBhbmQg
YW55IGF0dGFjaGVkIGRvY3VtZW50cyBjb250YWluIGluZm9ybWF0aW9uIGZyb20gUUxvZ2ljIENv
cnBvcmF0aW9uIG9yIGl0cyB3aG9sbHktb3duZWQgc3Vic2lkaWFyaWVzIHRoYXQgbWF5IGJlIGNv
bmZpZGVudGlhbC4gSWYgeW91IGFyZSBub3QgdGhlIGludGVuZGVkIHJlY2lwaWVudCwgeW91IG1h
eSBub3QgcmVhZCwgY29weSwgZGlzdHJpYnV0ZSwgb3IgdXNlIHRoaXMgaW5mb3JtYXRpb24uIElm
IHlvdSBoYXZlIHJlY2VpdmVkIHRoaXMgdHJhbnNtaXNzaW9uIGluIGVycm9yLCBwbGVhc2Ugbm90
aWZ5IHRoZSBzZW5kZXIgaW1tZWRpYXRlbHkgYnkgcmVwbHkgZS1tYWlsIGFuZCB0aGVuIGRlbGV0
ZSB0aGlzIG1lc3NhZ2UuDQo=
Hi Trond,
Thank you for the re-work patch.
On Thu, Aug 16, 2012 at 10:23 PM, Trond Myklebust
<[email protected]> wrote:
> idmap_pipe_downcall already clears this field if the upcall succeeds,
> but if it fails (rpc.idmapd isn't running) the field will still be set
> on the next call triggering a BUG_ON(). This patch tries to handle all
> possible ways that the upcall could fail and clear the idmap key data
> for each one.
> Signed-off-by: Bryan Schumaker <[email protected]>
> Cc: [email protected] [>= 3.4]
> Signed-off-by: Trond Myklebust <[email protected]>
Tested-by: William Dauchy <[email protected]>
This patch works on my last tests. Sorry for the previous version
where I didn't saw the failure on my 64 bits tests.
Best regards,
--
William
T24gVGh1LCAyMDEyLTA4LTE2IGF0IDE3OjA3IC0wNzAwLCBTaGFpIExhem1pIHdyb3RlOg0KPiBT
b3JyeSAtIGNvbXBhbnkncyBwb2xpY3kgLi4uDQo+IFdoYXQgaWRtYXAgdmVyc2lvbiB3YXMgdGhp
cyBwYXRjaCB1c2VkIGFnYWluc3Q/IFRoZSBvbmUgSSBoYXZlIChiNzAxMzU4Yykgc2VlbXMgdG8g
YmUgYSBiaXQgZGlmZmVyZW50IChJIHVzZWQgbGF0ZXN0IHB1bGwgY29tbWl0IGRkZjM0M2Y2MzVm
ZTQ0NDBjYWQ1MjhlMTJmOTZmMjhiZDUwYWEwOTkpLCBoZW5jZSB0aGUgcGF0Y2ggZmFpbHMgYWdh
aW4NCg0KSXQgd29ya3MgZmluZSBmb3IgbWUgYWdhaW5zdCBjb21taXQgZGRmMzQzZjYzNWZlNDQ0
MGNhZDUyOGUxMmY5NmYyOGJkNTBhYTA5OToNCg0KW3Ryb25kbXlAbGFkZSBsaW51eC1uZnNdJCBn
aXQgYnJhbmNoIHRlc3QtYXBwbHkgZGRmMzQzZjYzNWZlNDQ0MGNhZDUyOGUxMmY5NmYyOGJkNTBh
YTA5OQ0KW3Ryb25kbXlAbGFkZSBsaW51eC1uZnNdJCBnaXQgY2hlY2tvdXQgdGVzdC1hcHBseSAN
ClN3aXRjaGVkIHRvIGJyYW5jaCAndGVzdC1hcHBseScNClt0cm9uZG15QGxhZGUgbGludXgtbmZz
XSQgZ2l0IGFtIH4vRGVza3RvcC9mb3Jfc2hhaS8wMDAxLU5GUy1DbGVhci1rZXktY29uc3RydWN0
aW9uLWRhdGEtaWYtdGhlLWlkbWFwLXVwY2FsbC0ucGF0Y2gNCkFwcGx5aW5nOiBORlM6IENsZWFy
IGtleSBjb25zdHJ1Y3Rpb24gZGF0YSBpZiB0aGUgaWRtYXAgdXBjYWxsIGZhaWxzDQpbdHJvbmRt
eUBsYWRlIGxpbnV4LW5mc10kIGdpdCBhbSB+L0Rlc2t0b3AvZm9yX3NoYWkvMDAwMi1ORlMtcmV0
dXJuLUVOT0tFWS13aGVuLXRoZS11cGNhbGwtZmFpbHMtdG8tbWFwLXRoZS1uLnBhdGNoDQpBcHBs
eWluZzogTkZTOiByZXR1cm4gLUVOT0tFWSB3aGVuIHRoZSB1cGNhbGwgZmFpbHMgdG8gbWFwIHRo
ZSBuYW1lDQoNCldoYXQgZXJyb3IgbWVzc2FnZXMgYXJlIHlvdSBzZWVpbmc/DQoNCkNoZWVycw0K
ICBUcm9uZA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IE15a2xlYnVz
dCwgVHJvbmQgW21haWx0bzpUcm9uZC5NeWtsZWJ1c3RAbmV0YXBwLmNvbV0NCj4gU2VudDogVGh1
cnNkYXksIEF1Z3VzdCAxNiwgMjAxMiA0OjU3IFBNDQo+IFRvOiBTaGFpIExhem1pDQo+IENjOiBX
aWxsaWFtIERhdWNoeTsgU2NodW1ha2VyLCBCcnlhbjsgbGludXgtbmZzQHZnZXIua2VybmVsLm9y
Zw0KPiBTdWJqZWN0OiBSZTogW1BBVENIIDEvMl0gTkZTOiBDbGVhciBrZXkgY29uc3RydWN0aW9u
IGRhdGEgaWYgdGhlIGlkbWFwIHVwY2FsbCBmYWlscw0KPiANCj4gT24gVGh1LCAyMDEyLTA4LTE2
IGF0IDE2OjUwIC0wNzAwLCBTaGFpIExhem1pIHdyb3RlOg0KPiA+IE1TIG91dGxvb2sNCj4gDQo+
IERvbid0IGV2ZXIgdXNlIExvb2tPdXQgZm9yIHBhdGNoZXMuIEl0cyAiSSBqdXN0IHJlZm9ybWF0
dGVkIHlvdXIgZW1haWwiDQo+IHdvbmRlciBmZWF0dXJlIGJyZWFrcyBhbGwgdGhlIHdoaXRlc3Bh
Y2UuDQo+IA0KPiA+IEJlc3QgdGhpbmcgaXMgdG8gYXR0YWNoZWQgdGhlIHBhdGNoDQo+IA0KPiBX
ZSBkbyBub3Qgbm9ybWFsbHkgdXNlIGF0dGFjaG1lbnRzIG9uIHRoZSBtYWlsaW5nIGxpc3QgYmVj
YXVzZSBpdCBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIGNvbW1lbnQgdGhlIHBhdGNoZXMgaW5saW5l
LiBBaCB3ZWxsLCBoZXJlIGdvZXMuLi4NCj4gDQo+IC0tDQo+IFRyb25kIE15a2xlYnVzdA0KPiBM
aW51eCBORlMgY2xpZW50IG1haW50YWluZXINCj4gDQo+IE5ldEFwcA0KPiBUcm9uZC5NeWtsZWJ1
c3RAbmV0YXBwLmNvbQ0KPiB3d3cubmV0YXBwLmNvbQ0KPiANCj4gDQo+IFRoaXMgbWVzc2FnZSBh
bmQgYW55IGF0dGFjaGVkIGRvY3VtZW50cyBjb250YWluIGluZm9ybWF0aW9uIGZyb20gUUxvZ2lj
IENvcnBvcmF0aW9uIG9yIGl0cyB3aG9sbHktb3duZWQgc3Vic2lkaWFyaWVzIHRoYXQgbWF5IGJl
IGNvbmZpZGVudGlhbC4gSWYgeW91IGFyZSBub3QgdGhlIGludGVuZGVkIHJlY2lwaWVudCwgeW91
IG1heSBub3QgcmVhZCwgY29weSwgZGlzdHJpYnV0ZSwgb3IgdXNlIHRoaXMgaW5mb3JtYXRpb24u
IElmIHlvdSBoYXZlIHJlY2VpdmVkIHRoaXMgdHJhbnNtaXNzaW9uIGluIGVycm9yLCBwbGVhc2Ug
bm90aWZ5IHRoZSBzZW5kZXIgaW1tZWRpYXRlbHkgYnkgcmVwbHkgZS1tYWlsIGFuZCB0aGVuIGRl
bGV0ZSB0aGlzIG1lc3NhZ2UuDQoNCi0tIA0KVHJvbmQgTXlrbGVidXN0DQpMaW51eCBORlMgY2xp
ZW50IG1haW50YWluZXINCg0KTmV0QXBwDQpUcm9uZC5NeWtsZWJ1c3RAbmV0YXBwLmNvbQ0Kd3d3
Lm5ldGFwcC5jb20NCg0K
T24gVGh1LCAyMDEyLTA4LTE2IGF0IDE2OjQ0IC0wNzAwLCBTaGFpIExhem1pIHdyb3RlOg0KPiBQ
YXRjaCBmYWlscyB3aXRoICINCj4gZ2l0IGFwcGx5IC0tY2hlY2sNCj4gZmF0YWw6IHBhdGNoIGZy
YWdtZW50IHdpdGhvdXQgaGVhZGVyIGF0IGxpbmUgMzE6IEBAIC0zODAsMTEgKzM4NywxMyBAQCBz
dGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCBuZnNfaWRtYXBfdG9rZW5zID0geyAgc3RhdGljIGlu
dCBuZnNfaWRtYXBfbGVnYWN5X3VwY2FsbChzdHJ1Y3Qga2V5X2NvbnN0cnVjdGlvbiAqLCBjb25z
dCBjaGFyICosIHZvaWQgKik7ICBzdGF0aWMgc3NpemVfdCBpZG1hcF9waXBlX2Rvd25jYWxsKHN0
cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgX191c2VyICosDQo+ICINCg0KV2hhdCBlbWFpbCBhcHBs
aWNhdGlvbiBhcmUgeW91IHVzaW5nIHRvIGV4dHJhY3QgdGhlIHBhdGNoPyBPbg0KImV2b2x1dGlv
biIsIEkgc2VlIHRoZSBhYm92ZSB0ZXh0IGFzIGJlaW5nIHNwbGl0IG92ZXIgc2V2ZXJhbCBsaW5l
cy4NCg0KDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogVHJvbmQgTXlr
bGVidXN0IFttYWlsdG86VHJvbmQuTXlrbGVidXN0QG5ldGFwcC5jb21dDQo+IFNlbnQ6IFRodXJz
ZGF5LCBBdWd1c3QgMTYsIDIwMTIgMToyNCBQTQ0KPiBUbzogV2lsbGlhbSBEYXVjaHkNCj4gQ2M6
IFNoYWkgTGF6bWk7IEJyeWFuIFNjaHVtYWtlcjsgbGludXgtbmZzQHZnZXIua2VybmVsLm9yZw0K
PiBTdWJqZWN0OiBbUEFUQ0ggMS8yXSBORlM6IENsZWFyIGtleSBjb25zdHJ1Y3Rpb24gZGF0YSBp
ZiB0aGUgaWRtYXAgdXBjYWxsIGZhaWxzDQo+IA0KPiBGcm9tOiBCcnlhbiBTY2h1bWFrZXIgPGJq
c2NodW1hQG5ldGFwcC5jb20+DQo+IA0KPiBpZG1hcF9waXBlX2Rvd25jYWxsIGFscmVhZHkgY2xl
YXJzIHRoaXMgZmllbGQgaWYgdGhlIHVwY2FsbCBzdWNjZWVkcywNCj4gYnV0IGlmIGl0IGZhaWxz
IChycGMuaWRtYXBkIGlzbid0IHJ1bm5pbmcpIHRoZSBmaWVsZCB3aWxsIHN0aWxsIGJlIHNldA0K
PiBvbiB0aGUgbmV4dCBjYWxsIHRyaWdnZXJpbmcgYSBCVUdfT04oKS4gIFRoaXMgcGF0Y2ggdHJp
ZXMgdG8gaGFuZGxlIGFsbA0KPiBwb3NzaWJsZSB3YXlzIHRoYXQgdGhlIHVwY2FsbCBjb3VsZCBm
YWlsIGFuZCBjbGVhciB0aGUgaWRtYXAga2V5IGRhdGENCj4gZm9yIGVhY2ggb25lLg0KPiANCj4g
U2lnbmVkLW9mZi1ieTogQnJ5YW4gU2NodW1ha2VyIDxianNjaHVtYUBuZXRhcHAuY29tPg0KPiBD
Yzogc3RhYmxlQHZnZXIua2VybmVsLm9yZyBbPj0gMy40XQ0KPiBTaWduZWQtb2ZmLWJ5OiBUcm9u
ZCBNeWtsZWJ1c3QgPFRyb25kLk15a2xlYnVzdEBuZXRhcHAuY29tPg0KPiAtLS0NCj4gIGZzL25m
cy9pZG1hcC5jIHwgNTYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
LS0tLS0tLS0tLS0tLS0NCj4gIDEgZmlsZSBjaGFuZ2VkLCA0MiBpbnNlcnRpb25zKCspLCAxNCBk
ZWxldGlvbnMoLSkNCj4gDQo+IGRpZmYgLS1naXQgYS9mcy9uZnMvaWRtYXAuYyBiL2ZzL25mcy9p
ZG1hcC5jDQo+IGluZGV4IGI3MDEzNTguLjY3MDNjNzMgMTAwNjQ0DQo+IC0tLSBhL2ZzL25mcy9p
ZG1hcC5jDQo+ICsrKyBiL2ZzL25mcy9pZG1hcC5jDQo+IEBAIC02MSw2ICs2MSwxMiBAQCBzdHJ1
Y3QgaWRtYXAgew0KPiAgICAgICAgIHN0cnVjdCBtdXRleCAgICAgICAgICAgIGlkbWFwX211dGV4
Ow0KPiAgfTsNCj4gDQo+ICtzdHJ1Y3QgaWRtYXBfbGVnYWN5X3VwY2FsbGRhdGEgew0KPiArICAg
ICAgIHN0cnVjdCBycGNfcGlwZV9tc2cgcGlwZV9tc2c7DQo+ICsgICAgICAgc3RydWN0IGlkbWFw
X21zZyBpZG1hcF9tc2c7DQo+ICsgICAgICAgc3RydWN0IGlkbWFwICppZG1hcDsNCj4gK307DQo+
ICsNCj4gIC8qKg0KPiAgICogbmZzX2ZhdHRyX2luaXRfbmFtZXMgLSBpbml0aWFsaXNlIHRoZSBu
ZnNfZmF0dHIgb3duZXJfbmFtZS9ncm91cF9uYW1lIGZpZWxkcw0KPiAgICogQGZhdHRyOiBmdWxs
eSBpbml0aWFsaXNlZCBzdHJ1Y3QgbmZzX2ZhdHRyDQo+IEBAIC0zMjQsNiArMzMwLDcgQEAgc3Rh
dGljIHNzaXplX3QgbmZzX2lkbWFwX2dldF9rZXkoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5h
bWVsZW4sDQo+ICAgICAgICAgICAgICAgICByZXQgPSBuZnNfaWRtYXBfcmVxdWVzdF9rZXkoJmtl
eV90eXBlX2lkX3Jlc29sdmVyX2xlZ2FjeSwNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuYW1lLCBuYW1lbGVuLCB0eXBlLCBkYXRhLA0KPiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfc2l6ZSwgaWRtYXApOw0KPiAr
ICAgICAgICAgICAgICAgaWRtYXAtPmlkbWFwX2tleV9jb25zID0gTlVMTDsNCj4gICAgICAgICAg
ICAgICAgIG11dGV4X3VubG9jaygmaWRtYXAtPmlkbWFwX211dGV4KTsNCj4gICAgICAgICB9DQo+
ICAgICAgICAgcmV0dXJuIHJldDsNCj4gQEAgLTM4MCwxMSArMzg3LDEzIEBAIHN0YXRpYyBjb25z
dCBtYXRjaF90YWJsZV90IG5mc19pZG1hcF90b2tlbnMgPSB7DQo+ICBzdGF0aWMgaW50IG5mc19p
ZG1hcF9sZWdhY3lfdXBjYWxsKHN0cnVjdCBrZXlfY29uc3RydWN0aW9uICosIGNvbnN0IGNoYXIg
Kiwgdm9pZCAqKTsNCj4gIHN0YXRpYyBzc2l6ZV90IGlkbWFwX3BpcGVfZG93bmNhbGwoc3RydWN0
IGZpbGUgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwNCj4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QpOw0KPiArc3RhdGljIHZvaWQgaWRtYXBfcmVsZWFzZV9waXBlKHN0
cnVjdCBpbm9kZSAqKTsNCj4gIHN0YXRpYyB2b2lkIGlkbWFwX3BpcGVfZGVzdHJveV9tc2coc3Ry
dWN0IHJwY19waXBlX21zZyAqKTsNCj4gDQo+ICBzdGF0aWMgY29uc3Qgc3RydWN0IHJwY19waXBl
X29wcyBpZG1hcF91cGNhbGxfb3BzID0gew0KPiAgICAgICAgIC51cGNhbGwgICAgICAgICA9IHJw
Y19waXBlX2dlbmVyaWNfdXBjYWxsLA0KPiAgICAgICAgIC5kb3duY2FsbCAgICAgICA9IGlkbWFw
X3BpcGVfZG93bmNhbGwsDQo+ICsgICAgICAgLnJlbGVhc2VfcGlwZSAgID0gaWRtYXBfcmVsZWFz
ZV9waXBlLA0KPiAgICAgICAgIC5kZXN0cm95X21zZyAgICA9IGlkbWFwX3BpcGVfZGVzdHJveV9t
c2csDQo+ICB9Ow0KPiANCj4gQEAgLTYxNiw3ICs2MjUsOCBAQCB2b2lkIG5mc19pZG1hcF9xdWl0
KHZvaWQpDQo+ICAgICAgICAgbmZzX2lkbWFwX3F1aXRfa2V5cmluZygpOw0KPiAgfQ0KPiANCj4g
LXN0YXRpYyBpbnQgbmZzX2lkbWFwX3ByZXBhcmVfbWVzc2FnZShjaGFyICpkZXNjLCBzdHJ1Y3Qg
aWRtYXBfbXNnICppbSwNCj4gK3N0YXRpYyBpbnQgbmZzX2lkbWFwX3ByZXBhcmVfbWVzc2FnZShj
aGFyICpkZXNjLCBzdHJ1Y3QgaWRtYXAgKmlkbWFwLA0KPiArICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IGlkbWFwX21zZyAqaW0sDQo+ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcnBjX3BpcGVfbXNnICptc2cpDQo+ICB7DQo+ICAg
ICAgICAgc3Vic3RyaW5nX3Qgc3Vic3RyOw0KPiBAQCAtNjU5LDYgKzY2OSw3IEBAIHN0YXRpYyBp
bnQgbmZzX2lkbWFwX2xlZ2FjeV91cGNhbGwoc3RydWN0IGtleV9jb25zdHJ1Y3Rpb24gKmNvbnMs
DQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqb3AsDQo+
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXV4KQ0KPiAgew0KPiAr
ICAgICAgIHN0cnVjdCBpZG1hcF9sZWdhY3lfdXBjYWxsZGF0YSAqZGF0YTsNCj4gICAgICAgICBz
dHJ1Y3QgcnBjX3BpcGVfbXNnICptc2c7DQo+ICAgICAgICAgc3RydWN0IGlkbWFwX21zZyAqaW07
DQo+ICAgICAgICAgc3RydWN0IGlkbWFwICppZG1hcCA9IChzdHJ1Y3QgaWRtYXAgKilhdXg7DQo+
IEBAIC02NjYsMTUgKzY3NywxNSBAQCBzdGF0aWMgaW50IG5mc19pZG1hcF9sZWdhY3lfdXBjYWxs
KHN0cnVjdCBrZXlfY29uc3RydWN0aW9uICpjb25zLA0KPiAgICAgICAgIGludCByZXQgPSAtRU5P
TUVNOw0KPiANCj4gICAgICAgICAvKiBtc2cgYW5kIGltIGFyZSBmcmVlZCBpbiBpZG1hcF9waXBl
X2Rlc3Ryb3lfbXNnICovDQo+IC0gICAgICAgbXNnID0ga21hbGxvYyhzaXplb2YoKm1zZyksIEdG
UF9LRVJORUwpOw0KPiAtICAgICAgIGlmICghbXNnKQ0KPiAtICAgICAgICAgICAgICAgZ290byBv
dXQwOw0KPiAtDQo+IC0gICAgICAgaW0gPSBrbWFsbG9jKHNpemVvZigqaW0pLCBHRlBfS0VSTkVM
KTsNCj4gLSAgICAgICBpZiAoIWltKQ0KPiArICAgICAgIGRhdGEgPSBrbWFsbG9jKHNpemVvZigq
ZGF0YSksIEdGUF9LRVJORUwpOw0KPiArICAgICAgIGlmICghZGF0YSkNCj4gICAgICAgICAgICAg
ICAgIGdvdG8gb3V0MTsNCj4gDQo+IC0gICAgICAgcmV0ID0gbmZzX2lkbWFwX3ByZXBhcmVfbWVz
c2FnZShrZXktPmRlc2NyaXB0aW9uLCBpbSwgbXNnKTsNCj4gKyAgICAgICBtc2cgPSAmZGF0YS0+
cGlwZV9tc2c7DQo+ICsgICAgICAgaW0gPSAmZGF0YS0+aWRtYXBfbXNnOw0KPiArICAgICAgIGRh
dGEtPmlkbWFwID0gaWRtYXA7DQo+ICsNCj4gKyAgICAgICByZXQgPSBuZnNfaWRtYXBfcHJlcGFy
ZV9tZXNzYWdlKGtleS0+ZGVzY3JpcHRpb24sIGlkbWFwLCBpbSwgbXNnKTsNCj4gICAgICAgICBp
ZiAocmV0IDwgMCkNCj4gICAgICAgICAgICAgICAgIGdvdG8gb3V0MjsNCj4gDQo+IEBAIC02ODMs
MTUgKzY5NCwxNSBAQCBzdGF0aWMgaW50IG5mc19pZG1hcF9sZWdhY3lfdXBjYWxsKHN0cnVjdCBr
ZXlfY29uc3RydWN0aW9uICpjb25zLA0KPiANCj4gICAgICAgICByZXQgPSBycGNfcXVldWVfdXBj
YWxsKGlkbWFwLT5pZG1hcF9waXBlLCBtc2cpOw0KPiAgICAgICAgIGlmIChyZXQgPCAwKQ0KPiAt
ICAgICAgICAgICAgICAgZ290byBvdXQyOw0KPiArICAgICAgICAgICAgICAgZ290byBvdXQzOw0K
PiANCj4gICAgICAgICByZXR1cm4gcmV0Ow0KPiANCj4gK291dDM6DQo+ICsgICAgICAgaWRtYXAt
PmlkbWFwX2tleV9jb25zID0gTlVMTDsNCj4gIG91dDI6DQo+IC0gICAgICAga2ZyZWUoaW0pOw0K
PiArICAgICAgIGtmcmVlKGRhdGEpOw0KPiAgb3V0MToNCj4gLSAgICAgICBrZnJlZShtc2cpOw0K
PiAtb3V0MDoNCj4gICAgICAgICBjb21wbGV0ZV9yZXF1ZXN0X2tleShjb25zLCByZXQpOw0KPiAg
ICAgICAgIHJldHVybiByZXQ7DQo+ICB9DQo+IEBAIC03NzUsOSArNzg2LDI2IEBAIG91dF9pbmNv
bXBsZXRlOg0KPiAgc3RhdGljIHZvaWQNCj4gIGlkbWFwX3BpcGVfZGVzdHJveV9tc2coc3RydWN0
IHJwY19waXBlX21zZyAqbXNnKQ0KPiAgew0KPiArICAgICAgIHN0cnVjdCBpZG1hcF9sZWdhY3lf
dXBjYWxsZGF0YSAqZGF0YSA9IGNvbnRhaW5lcl9vZihtc2csDQo+ICsgICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdCBpZG1hcF9sZWdhY3lfdXBjYWxsZGF0YSwNCj4gKyAgICAgICAgICAgICAg
ICAgICAgICAgcGlwZV9tc2cpOw0KPiArICAgICAgIHN0cnVjdCBpZG1hcCAqaWRtYXAgPSBkYXRh
LT5pZG1hcDsNCj4gKyAgICAgICBzdHJ1Y3Qga2V5X2NvbnN0cnVjdGlvbiAqY29uczsNCj4gKyAg
ICAgICBpZiAobXNnLT5lcnJubykgew0KPiArICAgICAgICAgICAgICAgY29ucyA9IEFDQ0VTU19P
TkNFKGlkbWFwLT5pZG1hcF9rZXlfY29ucyk7DQo+ICsgICAgICAgICAgICAgICBpZG1hcC0+aWRt
YXBfa2V5X2NvbnMgPSBOVUxMOw0KPiArICAgICAgICAgICAgICAgY29tcGxldGVfcmVxdWVzdF9r
ZXkoY29ucywgbXNnLT5lcnJubyk7DQo+ICsgICAgICAgfQ0KPiAgICAgICAgIC8qIEZyZWUgbWVt
b3J5IGFsbG9jYXRlZCBpbiBuZnNfaWRtYXBfbGVnYWN5X3VwY2FsbCgpICovDQo+IC0gICAgICAg
a2ZyZWUobXNnLT5kYXRhKTsNCj4gLSAgICAgICBrZnJlZShtc2cpOw0KPiArICAgICAgIGtmcmVl
KGRhdGEpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiAraWRtYXBfcmVsZWFzZV9waXBl
KHN0cnVjdCBpbm9kZSAqaW5vZGUpDQo+ICt7DQo+ICsgICAgICAgc3RydWN0IHJwY19pbm9kZSAq
cnBjaSA9IFJQQ19JKGlub2RlKTsNCj4gKyAgICAgICBzdHJ1Y3QgaWRtYXAgKmlkbWFwID0gKHN0
cnVjdCBpZG1hcCAqKXJwY2ktPnByaXZhdGU7DQo+ICsgICAgICAgaWRtYXAtPmlkbWFwX2tleV9j
b25zID0gTlVMTDsNCj4gIH0NCj4gDQo+ICBpbnQgbmZzX21hcF9uYW1lX3RvX3VpZChjb25zdCBz
dHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxl
biwgX191MzIgKnVpZCkNCj4gLS0NCj4gMS43LjExLjINCj4gDQo+IA0KPiANCj4gVGhpcyBtZXNz
YWdlIGFuZCBhbnkgYXR0YWNoZWQgZG9jdW1lbnRzIGNvbnRhaW4gaW5mb3JtYXRpb24gZnJvbSBR
TG9naWMgQ29ycG9yYXRpb24gb3IgaXRzIHdob2xseS1vd25lZCBzdWJzaWRpYXJpZXMgdGhhdCBt
YXkgYmUgY29uZmlkZW50aWFsLiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50
LCB5b3UgbWF5IG5vdCByZWFkLCBjb3B5LCBkaXN0cmlidXRlLCBvciB1c2UgdGhpcyBpbmZvcm1h
dGlvbi4gSWYgeW91IGhhdmUgcmVjZWl2ZWQgdGhpcyB0cmFuc21pc3Npb24gaW4gZXJyb3IsIHBs
ZWFzZSBub3RpZnkgdGhlIHNlbmRlciBpbW1lZGlhdGVseSBieSByZXBseSBlLW1haWwgYW5kIHRo
ZW4gZGVsZXRlIHRoaXMgbWVzc2FnZS4NCj4gDQoNCi0tIA0KVHJvbmQgTXlrbGVidXN0DQpMaW51
eCBORlMgY2xpZW50IG1haW50YWluZXINCg0KTmV0QXBwDQpUcm9uZC5NeWtsZWJ1c3RAbmV0YXBw
LmNvbQ0Kd3d3Lm5ldGFwcC5jb20NCg0K
Q29vbCAtIFdvcmtzICEhIQ0KDQotLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KRnJvbTogTXlr
bGVidXN0LCBUcm9uZCBbbWFpbHRvOlRyb25kLk15a2xlYnVzdEBuZXRhcHAuY29tXQ0KU2VudDog
RnJpZGF5LCBBdWd1c3QgMTcsIDIwMTIgMTA6NDYgQU0NClRvOiBTaGFpIExhem1pDQpDYzogV2ls
bGlhbSBEYXVjaHk7IFNjaHVtYWtlciwgQnJ5YW47IGxpbnV4LW5mc0B2Z2VyLmtlcm5lbC5vcmcN
ClN1YmplY3Q6IFJlOiBbUEFUQ0ggMS8yXSBORlM6IENsZWFyIGtleSBjb25zdHJ1Y3Rpb24gZGF0
YSBpZiB0aGUgaWRtYXAgdXBjYWxsIGZhaWxzDQoNCk9uIEZyaSwgMjAxMi0wOC0xNyBhdCAwOToy
MCAtMDcwMCwgU2hhaSBMYXptaSB3cm90ZToNCj4gTm8gbHVjayAuLi4NCj4gLS0tLS0tLS0tLS0t
WyBjdXQgaGVyZSBdLS0tLS0tLS0tLS0tDQo+IGtlcm5lbCBCVUcgYXQgZnMvbmZzL2lkbWFwLmM6
NjgxIQ0KDQpUaGF0IHN1Z2dlc3RzIHRoYXQgeW91IGhhdmVuJ3QgYmVlbiB0ZXN0aW5nIHRoZSBy
aWdodCBicmFuY2guIFRoZSBCVUdfT04NCnNob3VsZCBoYXZlIGJlZW4gbW92ZWQgdG8gbGluZSA2
OTIgYWZ0ZXIgdGhlIHBhdGNoZXMgd2VyZSBhcHBsaWVkLg0KDQpEaWQgeW91IGNvcHkgdGhlIGV4
YWN0IHB1bGwgcmVxdWVzdCBmcm9tIG15IGVtYWlsIChpLmUuICJnaXQgcHVsbA0KZ2l0Oi8vZ2l0
LmxpbnV4LW5mcy5vcmcvcHJvamVjdHMvdHJvbmRteS9saW51eC1uZnMuZ2l0IGJ1Z2ZpeGVzIj8g
SWYgc28sDQp5b3Ugc2hvdWxkIGhhdmUgZ290dGVuIGEgdmltIHBhZ2Ugd2l0aCBhIHRleHQgb2Yg
dGhlIGZvcm06DQoNCiAgICAgICAgTWVyZ2UgYnJhbmNoICdidWdmaXhlcycgb2YgZ2l0Oi8vZ2l0
LmxpbnV4LW5mcy5vcmcvcHJvamVjdHMvdHJvbmRteS9saW51eC1uZnMgaW4NCg0KICAgICAgICAj
IFBsZWFzZSBlbnRlciBhIGNvbW1pdCBtZXNzYWdlIHRvIGV4cGxhaW4gd2h5IHRoaXMgbWVyZ2Ug
aXMgbmVjZXNzYXJ5LA0KICAgICAgICAjIGVzcGVjaWFsbHkgaWYgaXQgbWVyZ2VzIGFuIHVwZGF0
ZWQgdXBzdHJlYW0gaW50byBhIHRvcGljIGJyYW5jaC4NCiAgICAgICAgIw0KICAgICAgICAjIExp
bmVzIHN0YXJ0aW5nIHdpdGggJyMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3Nh
Z2UgYWJvcnRzDQogICAgICAgICMgdGhlIGNvbW1pdC4NCg0KDQood2hpY2ggeW91IHRoZW4gZm9s
bG93IHVwIHdpdGggYSAnOndxJyB0byBjb25maXJtKQ0KDQpBICdnaXQgbG9nJyBzaG91bGQgdGhl
biBzaG93IHlvdXIgZmlyc3QgY29tbWl0IGFzIGJlaW5nIHNvbWV0aGluZyBhbG9uZw0KdGhlIGxp
bmVzIG9mOg0KDQogICAgICAgIE1lcmdlOiBkOTg3NTY5IDEyZGZkMDgNCiAgICAgICAgQXV0aG9y
OiBUcm9uZCBNeWtsZWJ1c3QgPFRyb25kLk15a2xlYnVzdEBuZXRhcHAuY29tPg0KICAgICAgICBE
YXRlOiAgIEZyaSBBdWcgMTcgMTM6NDE6MDIgMjAxMiAtMDQwMA0KDQogICAgICAgICAgICBNZXJn
ZSBicmFuY2ggJ2J1Z2ZpeGVzJyBvZiBnaXQ6Ly9naXQubGludXgtbmZzLm9yZy9wcm9qZWN0cy90
cm9uZG15L2xpbnV4LW5mDQoNCg0KSXMgdGhhdCBpbmRlZWQgdGhlIGNhc2U/DQoNCg0KDQotLQ0K
VHJvbmQgTXlrbGVidXN0DQpMaW51eCBORlMgY2xpZW50IG1haW50YWluZXINCg0KTmV0QXBwDQpU
cm9uZC5NeWtsZWJ1c3RAbmV0YXBwLmNvbQ0Kd3d3Lm5ldGFwcC5jb20NCg0KDQpUaGlzIG1lc3Nh
Z2UgYW5kIGFueSBhdHRhY2hlZCBkb2N1bWVudHMgY29udGFpbiBpbmZvcm1hdGlvbiBmcm9tIFFM
b2dpYyBDb3Jwb3JhdGlvbiBvciBpdHMgd2hvbGx5LW93bmVkIHN1YnNpZGlhcmllcyB0aGF0IG1h
eSBiZSBjb25maWRlbnRpYWwuIElmIHlvdSBhcmUgbm90IHRoZSBpbnRlbmRlZCByZWNpcGllbnQs
IHlvdSBtYXkgbm90IHJlYWQsIGNvcHksIGRpc3RyaWJ1dGUsIG9yIHVzZSB0aGlzIGluZm9ybWF0
aW9uLiBJZiB5b3UgaGF2ZSByZWNlaXZlZCB0aGlzIHRyYW5zbWlzc2lvbiBpbiBlcnJvciwgcGxl
YXNlIG5vdGlmeSB0aGUgc2VuZGVyIGltbWVkaWF0ZWx5IGJ5IHJlcGx5IGUtbWFpbCBhbmQgdGhl
biBkZWxldGUgdGhpcyBtZXNzYWdlLg0K
T24gRnJpLCAyMDEyLTA4LTE3IGF0IDA5OjIwIC0wNzAwLCBTaGFpIExhem1pIHdyb3RlOg0KPiBO
byBsdWNrIC4uLg0KPiAtLS0tLS0tLS0tLS1bIGN1dCBoZXJlIF0tLS0tLS0tLS0tLS0NCj4ga2Vy
bmVsIEJVRyBhdCBmcy9uZnMvaWRtYXAuYzo2ODEhDQoNClRoYXQgc3VnZ2VzdHMgdGhhdCB5b3Ug
aGF2ZW4ndCBiZWVuIHRlc3RpbmcgdGhlIHJpZ2h0IGJyYW5jaC4gVGhlIEJVR19PTg0Kc2hvdWxk
IGhhdmUgYmVlbiBtb3ZlZCB0byBsaW5lIDY5MiBhZnRlciB0aGUgcGF0Y2hlcyB3ZXJlIGFwcGxp
ZWQuDQoNCkRpZCB5b3UgY29weSB0aGUgZXhhY3QgcHVsbCByZXF1ZXN0IGZyb20gbXkgZW1haWwg
KGkuZS4gImdpdCBwdWxsDQpnaXQ6Ly9naXQubGludXgtbmZzLm9yZy9wcm9qZWN0cy90cm9uZG15
L2xpbnV4LW5mcy5naXQgYnVnZml4ZXMiPyBJZiBzbywNCnlvdSBzaG91bGQgaGF2ZSBnb3R0ZW4g
YSB2aW0gcGFnZSB3aXRoIGEgdGV4dCBvZiB0aGUgZm9ybToNCg0KICAgICAgICBNZXJnZSBicmFu
Y2ggJ2J1Z2ZpeGVzJyBvZiBnaXQ6Ly9naXQubGludXgtbmZzLm9yZy9wcm9qZWN0cy90cm9uZG15
L2xpbnV4LW5mcyBpbg0KICAgICAgICANCiAgICAgICAgIyBQbGVhc2UgZW50ZXIgYSBjb21taXQg
bWVzc2FnZSB0byBleHBsYWluIHdoeSB0aGlzIG1lcmdlIGlzIG5lY2Vzc2FyeSwNCiAgICAgICAg
IyBlc3BlY2lhbGx5IGlmIGl0IG1lcmdlcyBhbiB1cGRhdGVkIHVwc3RyZWFtIGludG8gYSB0b3Bp
YyBicmFuY2guDQogICAgICAgICMNCiAgICAgICAgIyBMaW5lcyBzdGFydGluZyB3aXRoICcjJyB3
aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0cw0KICAgICAgICAjIHRo
ZSBjb21taXQuDQogICAgICAgIA0KDQood2hpY2ggeW91IHRoZW4gZm9sbG93IHVwIHdpdGggYSAn
OndxJyB0byBjb25maXJtKQ0KDQpBICdnaXQgbG9nJyBzaG91bGQgdGhlbiBzaG93IHlvdXIgZmly
c3QgY29tbWl0IGFzIGJlaW5nIHNvbWV0aGluZyBhbG9uZw0KdGhlIGxpbmVzIG9mOg0KDQogICAg
ICAgIE1lcmdlOiBkOTg3NTY5IDEyZGZkMDgNCiAgICAgICAgQXV0aG9yOiBUcm9uZCBNeWtsZWJ1
c3QgPFRyb25kLk15a2xlYnVzdEBuZXRhcHAuY29tPg0KICAgICAgICBEYXRlOiAgIEZyaSBBdWcg
MTcgMTM6NDE6MDIgMjAxMiAtMDQwMA0KICAgICAgICANCiAgICAgICAgICAgIE1lcmdlIGJyYW5j
aCAnYnVnZml4ZXMnIG9mIGdpdDovL2dpdC5saW51eC1uZnMub3JnL3Byb2plY3RzL3Ryb25kbXkv
bGludXgtbmYNCiAgICAgICAgDQoNCklzIHRoYXQgaW5kZWVkIHRoZSBjYXNlPw0KDQoNCg0KLS0g
DQpUcm9uZCBNeWtsZWJ1c3QNCkxpbnV4IE5GUyBjbGllbnQgbWFpbnRhaW5lcg0KDQpOZXRBcHAN
ClRyb25kLk15a2xlYnVzdEBuZXRhcHAuY29tDQp3d3cubmV0YXBwLmNvbQ0KDQo=
TWlzc2VkIHRoYXQsIGNvIGFuZCByZWJ1aWxkDQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0t
DQpGcm9tOiBNeWtsZWJ1c3QsIFRyb25kIFttYWlsdG86VHJvbmQuTXlrbGVidXN0QG5ldGFwcC5j
b21dDQpTZW50OiBGcmlkYXksIEF1Z3VzdCAxNywgMjAxMiAxMDo0NiBBTQ0KVG86IFNoYWkgTGF6
bWkNCkNjOiBXaWxsaWFtIERhdWNoeTsgU2NodW1ha2VyLCBCcnlhbjsgbGludXgtbmZzQHZnZXIu
a2VybmVsLm9yZw0KU3ViamVjdDogUmU6IFtQQVRDSCAxLzJdIE5GUzogQ2xlYXIga2V5IGNvbnN0
cnVjdGlvbiBkYXRhIGlmIHRoZSBpZG1hcCB1cGNhbGwgZmFpbHMNCg0KT24gRnJpLCAyMDEyLTA4
LTE3IGF0IDA5OjIwIC0wNzAwLCBTaGFpIExhem1pIHdyb3RlOg0KPiBObyBsdWNrIC4uLg0KPiAt
LS0tLS0tLS0tLS1bIGN1dCBoZXJlIF0tLS0tLS0tLS0tLS0NCj4ga2VybmVsIEJVRyBhdCBmcy9u
ZnMvaWRtYXAuYzo2ODEhDQoNClRoYXQgc3VnZ2VzdHMgdGhhdCB5b3UgaGF2ZW4ndCBiZWVuIHRl
c3RpbmcgdGhlIHJpZ2h0IGJyYW5jaC4gVGhlIEJVR19PTg0Kc2hvdWxkIGhhdmUgYmVlbiBtb3Zl
ZCB0byBsaW5lIDY5MiBhZnRlciB0aGUgcGF0Y2hlcyB3ZXJlIGFwcGxpZWQuDQoNCkRpZCB5b3Ug
Y29weSB0aGUgZXhhY3QgcHVsbCByZXF1ZXN0IGZyb20gbXkgZW1haWwgKGkuZS4gImdpdCBwdWxs
DQpnaXQ6Ly9naXQubGludXgtbmZzLm9yZy9wcm9qZWN0cy90cm9uZG15L2xpbnV4LW5mcy5naXQg
YnVnZml4ZXMiPyBJZiBzbywNCnlvdSBzaG91bGQgaGF2ZSBnb3R0ZW4gYSB2aW0gcGFnZSB3aXRo
IGEgdGV4dCBvZiB0aGUgZm9ybToNCg0KICAgICAgICBNZXJnZSBicmFuY2ggJ2J1Z2ZpeGVzJyBv
ZiBnaXQ6Ly9naXQubGludXgtbmZzLm9yZy9wcm9qZWN0cy90cm9uZG15L2xpbnV4LW5mcyBpbg0K
DQogICAgICAgICMgUGxlYXNlIGVudGVyIGEgY29tbWl0IG1lc3NhZ2UgdG8gZXhwbGFpbiB3aHkg
dGhpcyBtZXJnZSBpcyBuZWNlc3NhcnksDQogICAgICAgICMgZXNwZWNpYWxseSBpZiBpdCBtZXJn
ZXMgYW4gdXBkYXRlZCB1cHN0cmVhbSBpbnRvIGEgdG9waWMgYnJhbmNoLg0KICAgICAgICAjDQog
ICAgICAgICMgTGluZXMgc3RhcnRpbmcgd2l0aCAnIycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4g
ZW1wdHkgbWVzc2FnZSBhYm9ydHMNCiAgICAgICAgIyB0aGUgY29tbWl0Lg0KDQoNCih3aGljaCB5
b3UgdGhlbiBmb2xsb3cgdXAgd2l0aCBhICc6d3EnIHRvIGNvbmZpcm0pDQoNCkEgJ2dpdCBsb2cn
IHNob3VsZCB0aGVuIHNob3cgeW91ciBmaXJzdCBjb21taXQgYXMgYmVpbmcgc29tZXRoaW5nIGFs
b25nDQp0aGUgbGluZXMgb2Y6DQoNCiAgICAgICAgTWVyZ2U6IGQ5ODc1NjkgMTJkZmQwOA0KICAg
ICAgICBBdXRob3I6IFRyb25kIE15a2xlYnVzdCA8VHJvbmQuTXlrbGVidXN0QG5ldGFwcC5jb20+
DQogICAgICAgIERhdGU6ICAgRnJpIEF1ZyAxNyAxMzo0MTowMiAyMDEyIC0wNDAwDQoNCiAgICAg
ICAgICAgIE1lcmdlIGJyYW5jaCAnYnVnZml4ZXMnIG9mIGdpdDovL2dpdC5saW51eC1uZnMub3Jn
L3Byb2plY3RzL3Ryb25kbXkvbGludXgtbmYNCg0KDQpJcyB0aGF0IGluZGVlZCB0aGUgY2FzZT8N
Cg0KDQoNCi0tDQpUcm9uZCBNeWtsZWJ1c3QNCkxpbnV4IE5GUyBjbGllbnQgbWFpbnRhaW5lcg0K
DQpOZXRBcHANClRyb25kLk15a2xlYnVzdEBuZXRhcHAuY29tDQp3d3cubmV0YXBwLmNvbQ0KDQoN
ClRoaXMgbWVzc2FnZSBhbmQgYW55IGF0dGFjaGVkIGRvY3VtZW50cyBjb250YWluIGluZm9ybWF0
aW9uIGZyb20gUUxvZ2ljIENvcnBvcmF0aW9uIG9yIGl0cyB3aG9sbHktb3duZWQgc3Vic2lkaWFy
aWVzIHRoYXQgbWF5IGJlIGNvbmZpZGVudGlhbC4gSWYgeW91IGFyZSBub3QgdGhlIGludGVuZGVk
IHJlY2lwaWVudCwgeW91IG1heSBub3QgcmVhZCwgY29weSwgZGlzdHJpYnV0ZSwgb3IgdXNlIHRo
aXMgaW5mb3JtYXRpb24uIElmIHlvdSBoYXZlIHJlY2VpdmVkIHRoaXMgdHJhbnNtaXNzaW9uIGlu
IGVycm9yLCBwbGVhc2Ugbm90aWZ5IHRoZSBzZW5kZXIgaW1tZWRpYXRlbHkgYnkgcmVwbHkgZS1t
YWlsIGFuZCB0aGVuIGRlbGV0ZSB0aGlzIG1lc3NhZ2UuDQo=