Re: TRUNCATE on foreign tables
Kohei KaiGai <[email protected]> Tue, 14 Jan 2020 18:16:17 +0900
| Newsgroups | gmane.comp.db.postgresql.devel.general |
|---|---|
| Message-ID | <CAOP8fzamaZty7oGq6sLVjyw8d4f-vu0fPtF5X6irT+O2-2DFnw@mail.gmail.com> |
--000000000000fe2eb7059c160bbb
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Hello,
The attached patch is the revised version of TRUNCATE on foreign tables.
Definition of the callback is revised as follows:
typedef void (*ExecForeignTruncate_function) (List *frels_list,
bool is_cascade,
bool restart_seqs);
The "frels_list" is a list of foreign tables that are connected to a partic=
ular
foreign server, thus, the server-id pulled out by foreign tables id should =
be
identical for all the relations in the list.
Due to the API design, this callback shall be invoked for each foreign serv=
er
involved in the TRUNCATE command, not per table basis.
The 2nd and 3rd arguments also informs FDW driver other options of the
command. If FDW has a concept of "cascaded truncate" or "restart sequence",
it can adjust its remote query. In postgres_fdw, it follows the manner of
usual TRUNCATE command.
Best regards,
2020=E5=B9=B41=E6=9C=888=E6=97=A5(=E6=B0=B4) 1:08 Kohei KaiGai <kaigai@hete=
rodb.com>:
>
> 2020=E5=B9=B41=E6=9C=887=E6=97=A5(=E7=81=AB) 16:03 Michael Paquier <micha=
[email protected]>:
> >
> > On Mon, Jan 06, 2020 at 04:32:39PM -0500, Stephen Frost wrote:
> > > RESTRICT, yes. I don't know about ONLY being sensible as we don't
> > > really deal with inheritance and foreign tables very cleanly today, a=
s I
> > > said up-thread, so I'm not sure if we really want to put in the effor=
t
> > > that it'd require to figure out how to make ONLY make sense.
> >
> > True enough.
> >
> > > The question about how to handle IDENTITY is a good one. I suppose
> > > we could just pass that down and let the FDW sort it out..?
> >
> > Looking at the code, ExecuteTruncateGuts() passes down restart_seqs,
> > so it sounds sensible to me to just pass down that to the FDW
> > callback and the callback decide what to do.
> >
> It looks to me the local sequences owned by a foreign table shall be rest=
arted
> by the core, regardless of relkind of the owner relation. So, even if FDW=
driver
> is buggy, consistency of the local database is kept, right?
> Indeed, "restart_seqs" flag is needed to propagate the behavior, however,
> it shall be processed on the remote side via the secondary "TRUNCATE" com=
mand.
> Is it so sensitive?
>
> Best regards,
> --
> HeteroDB, Inc / The PG-Strom Project
> KaiGai Kohei <[email protected]>
--=20
HeteroDB, Inc / The PG-Strom Project
KaiGai Kohei <[email protected]>
--000000000000fe2eb7059c160bbb
Content-Type: application/octet-stream;
name="pgsql13-truncate-on-foreign-table.v2.patch"
Content-Disposition: attachment;
filename="pgsql13-truncate-on-foreign-table.v2.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_k5dn2i2i0>
X-Attachment-Id: f_k5dn2i2i0
IGNvbnRyaWIvcG9zdGdyZXNfZmR3L2RlcGFyc2UuYyAgICAgICAgICAgICAgICAgfCAgIDkgKysK
IGNvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQgfCAxNDQgKysr
KysrKysrKysrKysrKysrKysrKysrKwogY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3
LmMgICAgICAgICAgICB8ICA1NyArKysrKysrKysrCiBjb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0
Z3Jlc19mZHcuaCAgICAgICAgICAgIHwgICAxICsKIGNvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9w
b3N0Z3Jlc19mZHcuc3FsICAgICAgfCAgNTEgKysrKysrKysrCiBkb2Mvc3JjL3NnbWwvZmR3aGFu
ZGxlci5zZ21sICAgICAgICAgICAgICAgICAgIHwgIDM3ICsrKysrKysKIHNyYy9iYWNrZW5kL2Nv
bW1hbmRzL3RhYmxlY21kcy5jICAgICAgICAgICAgICAgfCAgNjAgKysrKysrKysrKy0KIHNyYy9p
bmNsdWRlL2ZvcmVpZ24vZmR3YXBpLmggICAgICAgICAgICAgICAgICAgfCAgIDcgKysKIDggZmls
ZXMgY2hhbmdlZCwgMzYyIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0
IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZGVwYXJzZS5jIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcv
ZGVwYXJzZS5jCmluZGV4IGEzNjM5ZTk2MDQuLmFhYTM4Y2I0ODIgMTAwNjQ0Ci0tLSBhL2NvbnRy
aWIvcG9zdGdyZXNfZmR3L2RlcGFyc2UuYworKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9kZXBh
cnNlLmMKQEAgLTIwOTgsNiArMjA5OCwxNSBAQCBkZXBhcnNlQW5hbHl6ZVNxbChTdHJpbmdJbmZv
IGJ1ZiwgUmVsYXRpb24gcmVsLCBMaXN0ICoqcmV0cmlldmVkX2F0dHJzKQogCWRlcGFyc2VSZWxh
dGlvbihidWYsIHJlbCk7CiB9CiAKKy8qCisgKiBDb25zdHJ1Y3QgYSBzaW1wbGUgIlRSVU5DQVRF
IHJlbCIgc3RhdGVtZW50CisgKi8KK3ZvaWQKK2RlcGFyc2VUcnVuY2F0ZVNxbChTdHJpbmdJbmZv
IGJ1ZiwgUmVsYXRpb24gcmVsKQoreworCWRlcGFyc2VSZWxhdGlvbihidWYsIHJlbCk7Cit9CisK
IC8qCiAgKiBDb25zdHJ1Y3QgbmFtZSB0byB1c2UgZm9yIGdpdmVuIGNvbHVtbiwgYW5kIGVtaXQg
aXQgaW50byBidWYuCiAgKiBJZiBpdCBoYXMgYSBjb2x1bW5fbmFtZSBGRFcgb3B0aW9uLCB1c2Ug
dGhhdCBpbnN0ZWFkIG9mIGF0dHJpYnV0ZSBuYW1lLgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0
Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dCBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3
L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQKaW5kZXggMDkxMmQ2Y2Q1ZS4uMDQyMWYxNzJmNSAx
MDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91
dAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CkBA
IC04MTY4LDYgKzgxNjgsMTUwIEBAIHNlbGVjdCAqIGZyb20gcmVtMzsKIAogZHJvcCBmb3JlaWdu
IHRhYmxlIHJlbTM7CiBkcm9wIHRhYmxlIGxvYzM7CistLSA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLSB0ZXN0IGZv
ciBUUlVOQ0FURQorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIHRydV9udCAoaWQgaW50LCB4
IHRleHQpOworQ1JFQVRFIEZPUkVJR04gVEFCTEUgdHJ1X2Z0IChpZCBpbnQsIHggdGV4dCkKKyAg
ICAgICBTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAndHJ1X250Jyk7CitJTlNF
UlQgSU5UTyB0cnVfbnQgKFNFTEVDVCB4LG1kNSh4Ojp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmll
cygxLDEwKSB4KTsKK0NSRUFURSBUQUJMRSB0cnVfcHQgKGlkIGludCwgeSB0ZXh0KSBQQVJUSVRJ
T04gQlkgSEFTSChpZCk7CitDUkVBVEUgVEFCTEUgdHJ1X3B0X19wMCBQQVJUSVRJT04gT0YgdHJ1
X3B0CisgICAgICAgICAgICAgICAgICAgICAgICBGT1IgVkFMVUVTIFdJVEggKE1PRFVMVVMgMiwg
UkVNQUlOREVSIDApOworQ1JFQVRFIFRBQkxFIF9fdHJ1X3B0X19wMSAoaWQgaW50LCB5IHRleHQp
OworQ1JFQVRFIEZPUkVJR04gVEFCTEUgdHJ1X3B0X19wMSBQQVJUSVRJT04gT0YgdHJ1X3B0Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZPUiBWQUxVRVMgV0lUSCAoTU9EVUxVUyAy
LCBSRU1BSU5ERVIgMSkKKyAgICAgICAgICAgICAgIFNFUlZFUiBsb29wYmFjayBPUFRJT05TICh0
YWJsZV9uYW1lICdfX3RydV9wdF9fcDEnKTsKK0lOU0VSVCBJTlRPIHRydV9wdCAoU0VMRUNUIHgs
bWQ1KHg6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDExLDMwKSB4KTsKK0NSRUFURSBUQUJM
RSB0cnVfcGsgKGlkIGludCBwcmltYXJ5IGtleSwgeCB0ZXh0KTsKK0lOU0VSVCBJTlRPIHRydV9w
ayAoU0VMRUNUIHgsbWQ1KCh4KzEpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwKSB4
KTsKK0NSRUFURSBUQUJMRSB0cnVfZmsgKGZrZXkgaW50IHJlZmVyZW5jZXMgdHJ1X3BrKGlkKSk7
CitJTlNFUlQgSU5UTyB0cnVfZmsgKFNFTEVDVCB4ICUgMTAgKyAxIEZST00gZ2VuZXJhdGVfc2Vy
aWVzKDEsMzApIHgpOworQ1JFQVRFIEZPUkVJR04gVEFCTEUgdHJ1X2Z0X3JlZiAoaWQgaW50LCB4
IHRleHQpCisgICAgICAgU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25hbWUgJ3RydV9w
aycpOworLS0gbm9ybWFsIHRydW5jYXRlCitTRUxFQ1QgKiBGUk9NIHRydV9mdDsKKyBpZCB8ICAg
ICAgICAgICAgICAgIHggICAgICAgICAgICAgICAgIAorLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisgIDEgfCBjNGNhNDIzOGEwYjkyMzgyMGRjYzUwOWE2Zjc1ODQ5Ygor
ICAyIHwgYzgxZTcyOGQ5ZDRjMmY2MzZmMDY3Zjg5Y2MxNDg2MmMKKyAgMyB8IGVjY2JjODdlNGI1
Y2UyZmUyODMwOGZkOWYyYTdiYWYzCisgIDQgfCBhODdmZjY3OWEyZjNlNzFkOTE4MWE2N2I3NTQy
MTIyYworICA1IHwgZTRkYTNiN2ZiYmNlMjM0NWQ3NzcyYjA2NzRhMzE4ZDUKKyAgNiB8IDE2Nzkw
OTFjNWE4ODBmYWY2ZmI1ZTYwODdlYjFiMmRjCisgIDcgfCA4ZjE0ZTQ1ZmNlZWExNjdhNWEzNmRl
ZGQ0YmVhMjU0MworICA4IHwgYzlmMGY4OTVmYjk4YWI5MTU5ZjUxZmQwMjk3ZTIzNmQKKyAgOSB8
IDQ1YzQ4Y2NlMmUyZDdmYmRlYTFhZmM1MWM3YzZhZDI2CisgMTAgfCBkM2Q5NDQ2ODAyYTQ0MjU5
NzU1ZDM4ZTZkMTYzZTgyMAorKDEwIHJvd3MpCisKK1RSVU5DQVRFIHRydV9mdDsKK1NFTEVDVCAq
IEZST00gdHJ1X250OworIGlkIHwgeCAKKy0tLS0rLS0tCisoMCByb3dzKQorCitTRUxFQ1QgKiBG
Uk9NIHRydV9mdDsKKyBpZCB8IHggCistLS0tKy0tLQorKDAgcm93cykKKworLS0gcGFydGl0aW9u
IHRhYmxlIG1peHR1cmVkIGJ5IHRhYmxlIGFuZCBmb3JlaWduIHRhYmxlCitTRUxFQ1QgKiBGUk9N
IHRydV9wdDsKKyBpZCB8ICAgICAgICAgICAgICAgIHkgICAgICAgICAgICAgICAgIAorLS0tLSst
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMTIgfCBjMjBhZDRkNzZmZTk3NzU5
YWEyN2EwYzk5YmZmNjcxMAorIDEzIHwgYzUxY2U0MTBjMTI0YTEwZTBkYjVlNGI5N2ZjMmFmMzkK
KyAxNCB8IGFhYjMyMzg5MjJiY2MyNWE2ZjYwNmViNTI1ZmZkYzU2CisgMTYgfCBjNzRkOTdiMDFl
YWUyNTdlNDRhYTlkNWJhZGU5N2JhZgorIDE3IHwgNzBlZmRmMmVjOWIwODYwNzk3OTVjNDQyNjM2
YjU1ZmIKKyAxOCB8IDZmNDkyMmY0NTU2ODE2MWE4Y2RmNGFkMjI5OWY2ZDIzCisgMjMgfCAzNzY5
M2NmYzc0ODA0OWU0NWQ4N2I4YzdkOGI5YWFjZAorIDI1IHwgOGUyOTZhMDY3YTM3NTYzMzcwZGVk
MDVmNWEzYmYzZWMKKyAyNiB8IDRlNzMyY2VkMzQ2M2QwNmRlMGNhOWExNWI2MTUzNjc3CisgMjcg
fCAwMmU3NGYxMGUwMzI3YWQ4NjhkMTM4ZjJiNGZkZDZmMAorIDI4IHwgMzNlNzVmZjA5ZGQ2MDFi
YmU2OWYzNTEwMzkxNTIxODkKKyAzMCB8IDM0MTczY2IzOGYwN2Y4OWRkYmViYzJhYzkxMjgzMDNm
CisgMTEgfCA2NTEyYmQ0M2Q5Y2FhNmUwMmM5OTBiMGE4MjY1MmRjYQorIDE1IHwgOWJmMzFjN2Zm
MDYyOTM2YTk2ZDNjOGJkMWY4ZjJmZjMKKyAxOSB8IDFmMGUzZGFkOTk5MDgzNDVmNzQzOWY4ZmZh
YmRmZmM0CisgMjAgfCA5OGYxMzcwODIxMDE5NGM0NzU2ODdiZTYxMDZhM2I4NAorIDIxIHwgM2M1
OWRjMDQ4ZTg4NTAyNDNiZTgwNzlhNWM3NGQwNzkKKyAyMiB8IGI2ZDc2N2QyZjhlZDVkMjFhNDRi
MGU1ODg2NjgwY2I5CisgMjQgfCAxZmYxZGU3NzQwMDVmOGRhMTNmNDI5NDM4ODFjNjU1ZgorIDI5
IHwgNmVhOWFiMWJhYTBlZmI5ZTE5MDk0NDQwYzMxN2UyMWIKKygyMCByb3dzKQorCitUUlVOQ0FU
RSB0cnVfcHQ7CitTRUxFQ1QgKiBGUk9NIHRydV9wdDsKKyBpZCB8IHkgCistLS0tKy0tLQorKDAg
cm93cykKKworU0VMRUNUICogRlJPTSB0cnVfcHRfX3AwOworIGlkIHwgeSAKKy0tLS0rLS0tCiso
MCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHRydV9wdF9fcDE7CisgaWQgfCB5IAorLS0tLSstLS0K
KygwIHJvd3MpCisKK1NFTEVDVCAqIEZST00gX190cnVfcHRfX3AxOworIGlkIHwgeSAKKy0tLS0r
LS0tCisoMCByb3dzKQorCistLSAnQ0FTQ0FERScgb3B0aW9uCitTRUxFQ1QgKiBGUk9NIHRydV9m
dF9yZWY7CisgaWQgfCAgICAgICAgICAgICAgICB4ICAgICAgICAgICAgICAgICAKKy0tLS0rLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAxIHwgYzgxZTcyOGQ5ZDRjMmY2MzZm
MDY3Zjg5Y2MxNDg2MmMKKyAgMiB8IGVjY2JjODdlNGI1Y2UyZmUyODMwOGZkOWYyYTdiYWYzCisg
IDMgfCBhODdmZjY3OWEyZjNlNzFkOTE4MWE2N2I3NTQyMTIyYworICA0IHwgZTRkYTNiN2ZiYmNl
MjM0NWQ3NzcyYjA2NzRhMzE4ZDUKKyAgNSB8IDE2NzkwOTFjNWE4ODBmYWY2ZmI1ZTYwODdlYjFi
MmRjCisgIDYgfCA4ZjE0ZTQ1ZmNlZWExNjdhNWEzNmRlZGQ0YmVhMjU0MworICA3IHwgYzlmMGY4
OTVmYjk4YWI5MTU5ZjUxZmQwMjk3ZTIzNmQKKyAgOCB8IDQ1YzQ4Y2NlMmUyZDdmYmRlYTFhZmM1
MWM3YzZhZDI2CisgIDkgfCBkM2Q5NDQ2ODAyYTQ0MjU5NzU1ZDM4ZTZkMTYzZTgyMAorIDEwIHwg
NjUxMmJkNDNkOWNhYTZlMDJjOTkwYjBhODI2NTJkY2EKKygxMCByb3dzKQorCitUUlVOQ0FURSB0
cnVfZnRfcmVmOwktLSBmYWlsZWQKK0VSUk9SOiAgY2Fubm90IHRydW5jYXRlIGEgdGFibGUgcmVm
ZXJlbmNlZCBpbiBhIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQKK0RFVEFJTDogIFRhYmxlICJ0cnVf
ZmsiIHJlZmVyZW5jZXMgInRydV9wayIuCitISU5UOiAgVHJ1bmNhdGUgdGFibGUgInRydV9mayIg
YXQgdGhlIHNhbWUgdGltZSwgb3IgdXNlIFRSVU5DQVRFIC4uLiBDQVNDQURFLgorQ09OVEVYVDog
IHJlbW90ZSBTUUwgY29tbWFuZDogVFJVTkNBVEUgcHVibGljLnRydV9wayBDT05USU5VRSBJREVO
VElUWSBSRVNUUklDVAorVFJVTkNBVEUgdHJ1X2Z0X3JlZiBDQVNDQURFOworU0VMRUNUICogRlJP
TSB0cnVfZnRfcmVmOworIGlkIHwgeCAKKy0tLS0rLS0tCisoMCByb3dzKQorCistLSB0cnVuY2F0
ZSB0d28gdGFibGVzIGF0IGEgY29tbWFuZAorSU5TRVJUIElOVE8gdHJ1X2Z0IChTRUxFQ1QgeCxt
ZDUoKHgrMik6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsOCkgeCk7CitJTlNFUlQgSU5U
TyB0cnVfZnRfcmVmIChTRUxFQ1QgeCxtZDUoKHgrMyk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2Vy
aWVzKDEsOCkgeCk7CitTRUxFQ1QgKiBGUk9NIHRydV9mdCBhLCB0cnVfZnRfcmVmIGIgV0hFUkUg
YS5pZCA9IGIuaWQ7CisgaWQgfCAgICAgICAgICAgICAgICB4ICAgICAgICAgICAgICAgICB8IGlk
IHwgICAgICAgICAgICAgICAgeCAgICAgICAgICAgICAgICAgCistLS0tKy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisgIDEgfCBlY2NiYzg3ZTRiNWNlMmZlMjgzMDhmZDlmMmE3YmFmMyB8ICAxIHwgYTg3ZmY2
NzlhMmYzZTcxZDkxODFhNjdiNzU0MjEyMmMKKyAgMiB8IGE4N2ZmNjc5YTJmM2U3MWQ5MTgxYTY3
Yjc1NDIxMjJjIHwgIDIgfCBlNGRhM2I3ZmJiY2UyMzQ1ZDc3NzJiMDY3NGEzMThkNQorICAzIHwg
ZTRkYTNiN2ZiYmNlMjM0NWQ3NzcyYjA2NzRhMzE4ZDUgfCAgMyB8IDE2NzkwOTFjNWE4ODBmYWY2
ZmI1ZTYwODdlYjFiMmRjCisgIDQgfCAxNjc5MDkxYzVhODgwZmFmNmZiNWU2MDg3ZWIxYjJkYyB8
ICA0IHwgOGYxNGU0NWZjZWVhMTY3YTVhMzZkZWRkNGJlYTI1NDMKKyAgNSB8IDhmMTRlNDVmY2Vl
YTE2N2E1YTM2ZGVkZDRiZWEyNTQzIHwgIDUgfCBjOWYwZjg5NWZiOThhYjkxNTlmNTFmZDAyOTdl
MjM2ZAorICA2IHwgYzlmMGY4OTVmYjk4YWI5MTU5ZjUxZmQwMjk3ZTIzNmQgfCAgNiB8IDQ1YzQ4
Y2NlMmUyZDdmYmRlYTFhZmM1MWM3YzZhZDI2CisgIDcgfCA0NWM0OGNjZTJlMmQ3ZmJkZWExYWZj
NTFjN2M2YWQyNiB8ICA3IHwgZDNkOTQ0NjgwMmE0NDI1OTc1NWQzOGU2ZDE2M2U4MjAKKyAgOCB8
IGQzZDk0NDY4MDJhNDQyNTk3NTVkMzhlNmQxNjNlODIwIHwgIDggfCA2NTEyYmQ0M2Q5Y2FhNmUw
MmM5OTBiMGE4MjY1MmRjYQorKDggcm93cykKKworVFJVTkNBVEUgdHJ1X2Z0LCB0cnVfZnRfcmVm
IENBU0NBREU7CitTRUxFQ1QgKiBGUk9NIHRydV9mdCBhLCB0cnVfZnRfcmVmIGIgV0hFUkUgYS5p
ZCA9IGIuaWQ7CisgaWQgfCB4IHwgaWQgfCB4IAorLS0tLSstLS0rLS0tLSstLS0KKygwIHJvd3Mp
CisKIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KIC0tIHRlc3QgSU1QT1JUIEZPUkVJR04gU0NIRU1BCiAtLSA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09CmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyBi
L2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCmluZGV4IDIxNzVkZmY4MjQuLjBj
YmJiNThlODkgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5j
CisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCkBAIC0zNzMsNiArMzcz
LDkgQEAgc3RhdGljIHZvaWQgcG9zdGdyZXNFeHBsYWluRm9yZWlnbk1vZGlmeShNb2RpZnlUYWJs
ZVN0YXRlICptdHN0YXRlLAogCQkJCQkJCQkJCSBFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2
b2lkIHBvc3RncmVzRXhwbGFpbkRpcmVjdE1vZGlmeShGb3JlaWduU2NhblN0YXRlICpub2RlLAog
CQkJCQkJCQkJCUV4cGxhaW5TdGF0ZSAqZXMpOworc3RhdGljIHZvaWQgcG9zdGdyZXNFeGVjRm9y
ZWlnblRydW5jYXRlKExpc3QgKmZyZWxzX2xpc3QsCisJCQkJCQkJCQkJYm9vbCBpc19jYXNjYWRl
LAorCQkJCQkJCQkJCWJvb2wgcmVzdGFydF9zZXFzKTsKIHN0YXRpYyBib29sIHBvc3RncmVzQW5h
bHl6ZUZvcmVpZ25UYWJsZShSZWxhdGlvbiByZWxhdGlvbiwKIAkJCQkJCQkJCQlBY3F1aXJlU2Ft
cGxlUm93c0Z1bmMgKmZ1bmMsCiAJCQkJCQkJCQkJQmxvY2tOdW1iZXIgKnRvdGFscGFnZXMpOwpA
QCAtNTQ2LDYgKzU0OSw5IEBAIHBvc3RncmVzX2Zkd19oYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1Mp
CiAJcm91dGluZS0+RXhwbGFpbkZvcmVpZ25Nb2RpZnkgPSBwb3N0Z3Jlc0V4cGxhaW5Gb3JlaWdu
TW9kaWZ5OwogCXJvdXRpbmUtPkV4cGxhaW5EaXJlY3RNb2RpZnkgPSBwb3N0Z3Jlc0V4cGxhaW5E
aXJlY3RNb2RpZnk7CiAKKwkvKiBTdXBwb3J0IGZ1bmN0aW9uIGZvciBUUlVOQ0FURSAqLworCXJv
dXRpbmUtPkV4ZWNGb3JlaWduVHJ1bmNhdGUgPSBwb3N0Z3Jlc0V4ZWNGb3JlaWduVHJ1bmNhdGU7
CisKIAkvKiBTdXBwb3J0IGZ1bmN0aW9ucyBmb3IgQU5BTFlaRSAqLwogCXJvdXRpbmUtPkFuYWx5
emVGb3JlaWduVGFibGUgPSBwb3N0Z3Jlc0FuYWx5emVGb3JlaWduVGFibGU7CiAKQEAgLTI2NTYs
NiArMjY2Miw1NyBAQCBwb3N0Z3Jlc0V4cGxhaW5EaXJlY3RNb2RpZnkoRm9yZWlnblNjYW5TdGF0
ZSAqbm9kZSwgRXhwbGFpblN0YXRlICplcykKIAl9CiB9CiAKKy8qCisgKiBwb3N0Z3Jlc0V4ZWNG
b3JlaWduVHJ1bmNhdGUKKyAqCQlJdCBwcm9wYWdhdGVzIFRSVU5DQVRFIGNvbW1hbmQgdG8gdGhl
IHJlbW90ZSBob3N0IGluc2lkZSBvZiB0aGUKKyAqCQl0cmFuc2FjdGlvbiBibG9jay4KKyAqLwor
c3RhdGljIHZvaWQKK3Bvc3RncmVzRXhlY0ZvcmVpZ25UcnVuY2F0ZShMaXN0ICpmcmVsc19saXN0
LAorCQkJCQkJCWJvb2wgaXNfY2FzY2FkZSwKKwkJCQkJCQlib29sIHJlc3RhcnRfc2VxcykKK3sK
KwlPaWQJCQkJc2VydmVyX2lkID0gSW52YWxpZE9pZDsKKwlVc2VyTWFwcGluZwkgICAqdXNlciA9
IE5VTEw7CisJUEdjb25uCQkgICAqY29ubiA9IE5VTEw7CisJUEdyZXN1bHQJICAgKnJlczsKKwlT
dHJpbmdJbmZvRGF0YQlzcWw7CisJTGlzdENlbGwJICAgKmxjOworCisJLyogc2V0IHVwIHJlbW90
ZSBxdWVyeSAqLworCWluaXRTdHJpbmdJbmZvKCZzcWwpOworCWFwcGVuZFN0cmluZ0luZm9TdHJp
bmcoJnNxbCwgIlRSVU5DQVRFICIpOworCWZvcmVhY2ggKGxjLCBmcmVsc19saXN0KQorCXsKKwkJ
UmVsYXRpb24JZnJlbCA9IGxmaXJzdChsYyk7CisJCU9pZAkJCWZyZWxfb2lkID0gUmVsYXRpb25H
ZXRSZWxpZChmcmVsKTsKKworCQlpZiAoIU9pZElzVmFsaWQoc2VydmVyX2lkKSkKKwkJeworCQkJ
c2VydmVyX2lkID0gR2V0Rm9yZWlnblNlcnZlcklkQnlSZWxJZChmcmVsX29pZCk7CisJCQl1c2Vy
ID0gR2V0VXNlck1hcHBpbmcoR2V0VXNlcklkKCksIHNlcnZlcl9pZCk7CisJCQljb25uID0gR2V0
Q29ubmVjdGlvbih1c2VyLCBmYWxzZSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlBc3NlcnQoc2Vy
dmVyX2lkID09IEdldEZvcmVpZ25TZXJ2ZXJJZEJ5UmVsSWQoZnJlbF9vaWQpKTsKKwkJCWFwcGVu
ZFN0cmluZ0luZm9TdHJpbmcoJnNxbCwgIiwgIik7CisJCX0KKwkJZGVwYXJzZVRydW5jYXRlU3Fs
KCZzcWwsIGZyZWwpOworCX0KKwlhcHBlbmRTdHJpbmdJbmZvKCZzcWwsICIgJXMgSURFTlRJVFkg
JXMiLAorCQkJCQkgcmVzdGFydF9zZXFzID8gIlJFU1RBUlQiIDogIkNPTlRJTlVFIiwKKwkJCQkJ
IGlzX2Nhc2NhZGUgPyAiQ0FTQ0FERSIgOiAiUkVTVFJJQ1QiKTsKKworCWlmICghUFFzZW5kUXVl
cnkoY29ubiwgc3FsLmRhdGEpKQorCQlwZ2Zkd19yZXBvcnRfZXJyb3IoRVJST1IsIE5VTEwsIGNv
bm4sIGZhbHNlLCBzcWwuZGF0YSk7CisJcmVzID0gcGdmZHdfZ2V0X3Jlc3VsdChjb25uLCBzcWwu
ZGF0YSk7CisJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09NTUFORF9PSykKKwkJ
cGdmZHdfcmVwb3J0X2Vycm9yKEVSUk9SLCByZXMsIGNvbm4sIHRydWUsIHNxbC5kYXRhKTsKKwkv
KiBjbGVhbi11cCAqLworCVBRY2xlYXIocmVzKTsKKwlwZnJlZShzcWwuZGF0YSk7Cit9CiAKIC8q
CiAgKiBlc3RpbWF0ZV9wYXRoX2Nvc3Rfc2l6ZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jl
c19mZHcvcG9zdGdyZXNfZmR3LmggYi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcu
aAppbmRleCBlZWY0MTBkYjM5Li5hYjJlZWZiMTI2IDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3Rn
cmVzX2Zkdy9wb3N0Z3Jlc19mZHcuaAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jl
c19mZHcuaApAQCAtMTkwLDYgKzE5MCw3IEBAIGV4dGVybiB2b2lkIGRlcGFyc2VEaXJlY3REZWxl
dGVTcWwoU3RyaW5nSW5mbyBidWYsIFBsYW5uZXJJbmZvICpyb290LAogZXh0ZXJuIHZvaWQgZGVw
YXJzZUFuYWx5emVTaXplU3FsKFN0cmluZ0luZm8gYnVmLCBSZWxhdGlvbiByZWwpOwogZXh0ZXJu
IHZvaWQgZGVwYXJzZUFuYWx5emVTcWwoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwKIAkJ
CQkJCQkgIExpc3QgKipyZXRyaWV2ZWRfYXR0cnMpOworZXh0ZXJuIHZvaWQgZGVwYXJzZVRydW5j
YXRlU3FsKFN0cmluZ0luZm8gYnVmLCBSZWxhdGlvbiByZWwpOwogZXh0ZXJuIHZvaWQgZGVwYXJz
ZVN0cmluZ0xpdGVyYWwoU3RyaW5nSW5mbyBidWYsIGNvbnN0IGNoYXIgKnZhbCk7CiBleHRlcm4g
RXhwciAqZmluZF9lbV9leHByX2Zvcl9yZWwoRXF1aXZhbGVuY2VDbGFzcyAqZWMsIFJlbE9wdElu
Zm8gKnJlbCk7CiBleHRlcm4gRXhwciAqZmluZF9lbV9leHByX2Zvcl9pbnB1dF90YXJnZXQoUGxh
bm5lckluZm8gKnJvb3QsCmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9z
dGdyZXNfZmR3LnNxbCBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3Fs
CmluZGV4IGYyYTQwODllOWQuLjQ0ODU3YmY1YTQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdy
ZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsCisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Nx
bC9wb3N0Z3Jlc19mZHcuc3FsCkBAIC0yMjg3LDYgKzIyODcsNTcgQEAgc2VsZWN0ICogZnJvbSBy
ZW0zOwogZHJvcCBmb3JlaWduIHRhYmxlIHJlbTM7CiBkcm9wIHRhYmxlIGxvYzM7CiAKKy0tID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KKy0tIHRlc3QgZm9yIFRSVU5DQVRFCistLSA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDUkVBVEUgVEFC
TEUgdHJ1X250IChpZCBpbnQsIHggdGV4dCk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSB0cnVfZnQg
KGlkIGludCwgeCB0ZXh0KQorICAgICAgIFNFUlZFUiBsb29wYmFjayBPUFRJT05TICh0YWJsZV9u
YW1lICd0cnVfbnQnKTsKK0lOU0VSVCBJTlRPIHRydV9udCAoU0VMRUNUIHgsbWQ1KHg6OnRleHQp
IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTApIHgpOworCitDUkVBVEUgVEFCTEUgdHJ1X3B0IChp
ZCBpbnQsIHkgdGV4dCkgUEFSVElUSU9OIEJZIEhBU0goaWQpOworQ1JFQVRFIFRBQkxFIHRydV9w
dF9fcDAgUEFSVElUSU9OIE9GIHRydV9wdAorICAgICAgICAgICAgICAgICAgICAgICAgRk9SIFZB
TFVFUyBXSVRIIChNT0RVTFVTIDIsIFJFTUFJTkRFUiAwKTsKK0NSRUFURSBUQUJMRSBfX3RydV9w
dF9fcDEgKGlkIGludCwgeSB0ZXh0KTsKK0NSRUFURSBGT1JFSUdOIFRBQkxFIHRydV9wdF9fcDEg
UEFSVElUSU9OIE9GIHRydV9wdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGT1Ig
VkFMVUVTIFdJVEggKE1PRFVMVVMgMiwgUkVNQUlOREVSIDEpCisgICAgICAgICAgICAgICBTRVJW
RVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAnX190cnVfcHRfX3AxJyk7CitJTlNFUlQg
SU5UTyB0cnVfcHQgKFNFTEVDVCB4LG1kNSh4Ojp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcygx
MSwzMCkgeCk7CisKK0NSRUFURSBUQUJMRSB0cnVfcGsgKGlkIGludCBwcmltYXJ5IGtleSwgeCB0
ZXh0KTsKK0lOU0VSVCBJTlRPIHRydV9wayAoU0VMRUNUIHgsbWQ1KCh4KzEpOjp0ZXh0KSBGUk9N
IGdlbmVyYXRlX3NlcmllcygxLDEwKSB4KTsKK0NSRUFURSBUQUJMRSB0cnVfZmsgKGZrZXkgaW50
IHJlZmVyZW5jZXMgdHJ1X3BrKGlkKSk7CitJTlNFUlQgSU5UTyB0cnVfZmsgKFNFTEVDVCB4ICUg
MTAgKyAxIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMzApIHgpOworQ1JFQVRFIEZPUkVJR04gVEFC
TEUgdHJ1X2Z0X3JlZiAoaWQgaW50LCB4IHRleHQpCisgICAgICAgU0VSVkVSIGxvb3BiYWNrIE9Q
VElPTlMgKHRhYmxlX25hbWUgJ3RydV9waycpOworCistLSBub3JtYWwgdHJ1bmNhdGUKK1NFTEVD
VCAqIEZST00gdHJ1X2Z0OworVFJVTkNBVEUgdHJ1X2Z0OworU0VMRUNUICogRlJPTSB0cnVfbnQ7
CitTRUxFQ1QgKiBGUk9NIHRydV9mdDsKKworLS0gcGFydGl0aW9uIHRhYmxlIG1peHR1cmVkIGJ5
IHRhYmxlIGFuZCBmb3JlaWduIHRhYmxlCitTRUxFQ1QgKiBGUk9NIHRydV9wdDsKK1RSVU5DQVRF
IHRydV9wdDsKK1NFTEVDVCAqIEZST00gdHJ1X3B0OworU0VMRUNUICogRlJPTSB0cnVfcHRfX3Aw
OworU0VMRUNUICogRlJPTSB0cnVfcHRfX3AxOworU0VMRUNUICogRlJPTSBfX3RydV9wdF9fcDE7
CisKKy0tICdDQVNDQURFJyBvcHRpb24KK1NFTEVDVCAqIEZST00gdHJ1X2Z0X3JlZjsKK1RSVU5D
QVRFIHRydV9mdF9yZWY7CS0tIGZhaWxlZAorVFJVTkNBVEUgdHJ1X2Z0X3JlZiBDQVNDQURFOwor
U0VMRUNUICogRlJPTSB0cnVfZnRfcmVmOworCistLSB0cnVuY2F0ZSB0d28gdGFibGVzIGF0IGEg
Y29tbWFuZAorSU5TRVJUIElOVE8gdHJ1X2Z0IChTRUxFQ1QgeCxtZDUoKHgrMik6OnRleHQpIEZS
T00gZ2VuZXJhdGVfc2VyaWVzKDEsOCkgeCk7CitJTlNFUlQgSU5UTyB0cnVfZnRfcmVmIChTRUxF
Q1QgeCxtZDUoKHgrMyk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsOCkgeCk7CitTRUxF
Q1QgKiBGUk9NIHRydV9mdCBhLCB0cnVfZnRfcmVmIGIgV0hFUkUgYS5pZCA9IGIuaWQ7CitUUlVO
Q0FURSB0cnVfZnQsIHRydV9mdF9yZWYgQ0FTQ0FERTsKK1NFTEVDVCAqIEZST00gdHJ1X2Z0IGEs
IHRydV9mdF9yZWYgYiBXSEVSRSBhLmlkID0gYi5pZDsKKwogLS0gPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLS0gdGVz
dCBJTVBPUlQgRk9SRUlHTiBTQ0hFTUEKIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2RvYy9z
cmMvc2dtbC9mZHdoYW5kbGVyLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZmR3aGFuZGxlci5zZ21sCmlu
ZGV4IDY1ODc2NzhhZjIuLjBjMTZmOTBkOGQgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9mZHdo
YW5kbGVyLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Zkd2hhbmRsZXIuc2dtbApAQCAtOTY4LDYg
Kzk2OCw0MyBAQCBFbmREaXJlY3RNb2RpZnkoRm9yZWlnblNjYW5TdGF0ZSAqbm9kZSk7CiAKICAg
IDwvc2VjdDI+CiAKKyAgIDxzZWN0MiBpZD0iZmR3LWNhbGxiYWNrcy10cnVuY2F0ZSI+CisgICAg
PHRpdGxlPkZEVyBSb3V0aW5lcyBmb3IgVHJ1bmNhdGU8L3RpdGxlPgorPHByb2dyYW1saXN0aW5n
Pgordm9pZAorRXhlY0ZvcmVpZ25UcnVuY2F0ZShMaXN0ICpmcmVsc19saXN0LCBib29sIGlzX2Nh
c2NhZGUsIGJvb2wgcmVzdGFydF9zZXFzKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgPHBhcmE+
CisgICAgIEV4ZWN1dGVzIHJlbW90ZSB0cnVuY2F0ZSBvbiB0aGUgcmVtb3RlIHJlbGF0aW9uIGFz
c29jaWF0ZWQgd2l0aCB0aGlzCisgICAgIGZvcmVpZ24gdGFibGUuIFRoaXMgb3B0aW9uYWwgZnVu
Y3Rpb24gaXMgY2FsbGVkIGR1cmluZyBleGVjdXRpb24gb2YKKyAgICAgPGNvbW1hbmQ+VFJVTkNB
VEU8L2NvbW1hbmQ+LCBmb3IgZWFjaCBmb3JlaWduIHNlcnZlciBiZWluZyBpbnZvbHZlZC4KKyAg
ICAgKE5vdGUgdGhhdCBpbnZvY2F0aW9ucyBhcmUgbm90IHBlciBmb3JlaWduIHRhYmxlLikKKwor
ICAgICBJZiBGRFcgZG9lcyBub3QgcHJvdmlkZSB0aGlzIGNhbGxiYWNrLCBQb3N0Z3JlU1FMIGNv
bnNpZGVycworICAgICA8Y29tbWFuZD5UUlVOQ0FURTwvY29tbWFuZD4gaXMgbm90IHN1cHBvcnRl
ZCBvbiB0aGUgZm9yZWlnbiB0YWJsZS4KKyAgICA8L3BhcmE+CisgICAgPHBhcmE+CisgICAgIDxs
aXRlcmFsPmZyZWxzX2xpc3Q8L2xpdGVyYWw+IGlzIGEgbGlzdCBvZiBmb3JlaWduIHRhYmxlcyB0
aGF0IGFyZQorICAgICBjb25uZWN0ZWQgdG8gYSBwYXJ0aWN1bGFyIGZvcmVpZ24gc2VydmVyOyB0
aHVzLCB0aGVzZSBmb3JlaWduIHRhYmxlcworICAgICBzaG91bGQgaGF2ZSBpZGVudGljYWwgZm9y
ZWlnbiBzZXJ2ZXIgSUQuCisKKyAgICAgPGxpdGVyYWw+aXNfY2FzY2FkZTwvbGl0ZXJhbD4gdGVs
bHMgdXMgd2hldGhlciA8bGl0ZXJhbD5DQVNDQURFPC9saXRlcmFsPgorICAgICBvcHRpb24gaXMg
c3VwcGxpZWQsIGFuZCA8bGl0ZXJhbD5yZXN0YXJ0X3NlcXM8L2xpdGVyYWw+IGFsc28gdGVsbHMg
dXMKKyAgICAgd2hldGhlciA8bGl0ZXJhbD5SRVNUQVJUIElERU5USVRZPC9saXRlcmFsPiBvcHRp
b24gaXMgc3VwcGxpZWQgYXQgdGhlCisgICAgIDxjb21tYW5kPlRSVU5DQVRFPC9jb21tYW5kPiBj
b21tYW5kLgorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgUGF5IGF0dGVudGlvbiB0aGF0
IDxjb21tYW5kPlRSVU5DQVRFPC9jb21tYW5kPiBjYW4gYmUgdHJhbnNhY3Rpb24tc2FmZQorICAg
ICBpbiA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+LgorICAgICBXZSBjYW4g
cmV2ZXJ0IHRoZSA8Y29tbWFuZD5UUlVOQ0FURTwvY29tbWFuZD4gb3BlcmF0aW9uIHVubGVzcyBj
dXJyZW50CisgICAgIHRyYW5zYWN0aW9uIGlzIG5vdCBjb21taXR0ZWQsIGhvd2V2ZXIsIGl0IGlz
IG5vdCB0cnVlIG9uIHNvbWUgb3RoZXIKKyAgICAgZGF0YWJhc2UgcHJvZHVjdHMuCisgICAgIElm
IEZEVyBhdXRob3IgY29uc2lkZXJzIHRvIHN1cHBvcnQgPGNvbW1hbmQ+VFJVTkNBVEU8L2NvbW1h
bmQ+IG9uIHRoZWlyCisgICAgIEZEVyBkcml2ZXIsIGl0IG1heSBub3QgYmUgc3VmZmljaWVudCBq
dXN0IHRvIHJ1biBhCisgICAgIDxjb21tYW5kPlRSVU5DQVRFPC9jb21tYW5kPiBjb21tYW5kIG9u
IHRoZSByZW1vdGUgc2lkZS4KKyAgICA8L3BhcmE+CisgICA8L3NlY3QyPgorCiAgICA8c2VjdDIg
aWQ9ImZkdy1jYWxsYmFja3Mtcm93LWxvY2tpbmciPgogICAgIDx0aXRsZT5GRFcgUm91dGluZXMg
Zm9yIFJvdyBMb2NraW5nPC90aXRsZT4KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFu
ZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwppbmRleCA0
MjFiYzI4NzI3Li4yZjgwNDUxMDYwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90
YWJsZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtNjAs
NiArNjAsNyBAQAogI2luY2x1ZGUgImNvbW1hbmRzL3VzZXIuaCIKICNpbmNsdWRlICJleGVjdXRv
ci9leGVjdXRvci5oIgogI2luY2x1ZGUgImZvcmVpZ24vZm9yZWlnbi5oIgorI2luY2x1ZGUgImZv
cmVpZ24vZmR3YXBpLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMv
bWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCkBAIC0xNjI0LDYgKzE2
MjUsOCBAQCBFeGVjdXRlVHJ1bmNhdGVHdXRzKExpc3QgKmV4cGxpY2l0X3JlbHMsIExpc3QgKnJl
bGlkcywgTGlzdCAqcmVsaWRzX2xvZ2dlZCwKIHsKIAlMaXN0CSAgICpyZWxzOwogCUxpc3QJICAg
KnNlcV9yZWxpZHMgPSBOSUw7CisJTGlzdAkgICAqc2VydnNfbGlzdCA9IE5JTDsKKwlMaXN0CSAg
ICpmcmVsc19saXN0ID0gTklMOwogCUVTdGF0ZQkgICAqZXN0YXRlOwogCVJlc3VsdFJlbEluZm8g
KnJlc3VsdFJlbEluZm9zOwogCVJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm87CkBAIC0xNzY4
LDYgKzE3NzEsMTYgQEAgRXhlY3V0ZVRydW5jYXRlR3V0cyhMaXN0ICpleHBsaWNpdF9yZWxzLCBM
aXN0ICpyZWxpZHMsIExpc3QgKnJlbGlkc19sb2dnZWQsCiAJCS8qIFNraXAgcGFydGl0aW9uZWQg
dGFibGVzIGFzIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8gKi8KIAkJaWYgKHJlbC0+cmRfcmVsLT5y
ZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCiAJCQljb250aW51ZTsKKwkJLyog
UmVtZW1iZXIgdGhlIHNlcnZlciBhbmQgZm9yZWlnbi10YWJsZXMgdG8gYmUgdHJ1bmNhdGVkICov
CisJCWlmIChyZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX0ZPUkVJR05fVEFCTEUpCisJ
CXsKKwkJCU9pZAkJZnJlbF9vaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbCk7CisJCQlPaWQJCXNl
cnZlcl9pZCA9IEdldEZvcmVpZ25TZXJ2ZXJJZEJ5UmVsSWQoZnJlbF9vaWQpOworCisJCQlzZXJ2
c19saXN0ID0gbGlzdF9hcHBlbmRfdW5pcXVlX29pZChzZXJ2c19saXN0LCBzZXJ2ZXJfaWQpOwor
CQkJZnJlbHNfbGlzdCA9IGxhcHBlbmQoZnJlbHNfbGlzdCwgcmVsKTsKKwkJCWNvbnRpbnVlOwor
CQl9CiAKIAkJLyoKIAkJICogTm9ybWFsbHksIHdlIG5lZWQgYSB0cmFuc2FjdGlvbi1zYWZlIHRy
dW5jYXRpb24gaGVyZS4gIEhvd2V2ZXIsIGlmCkBAIC0xODI5LDYgKzE4NDIsMzQgQEAgRXhlY3V0
ZVRydW5jYXRlR3V0cyhMaXN0ICpleHBsaWNpdF9yZWxzLCBMaXN0ICpyZWxpZHMsIExpc3QgKnJl
bGlkc19sb2dnZWQsCiAJCXBnc3RhdF9jb3VudF90cnVuY2F0ZShyZWwpOwogCX0KIAorCS8qCisJ
ICogSW52b2NhdGlvbiBvZiBGRFcgaGFuZGxlciBmb3IgZWFjaCBmb3JlaWduIHNlcnZlcgorCSAq
LworCWZvcmVhY2ggKGNlbGwsIHNlcnZzX2xpc3QpCisJeworCQlPaWQJCQlzZXJ2ZXJfaWQgPSBs
Zmlyc3Rfb2lkKGNlbGwpOworCQlGZHdSb3V0aW5lICpyb3V0aW5lID0gR2V0RmR3Um91dGluZUJ5
U2VydmVySWQoc2VydmVyX2lkKTsKKwkJTGlzdAkgICAqY3Vycl9mcmVscyA9IE5JTDsKKwkJTGlz
dENlbGwgICAqbGM7CisKKwkJZm9yZWFjaCAobGMsIGZyZWxzX2xpc3QpCisJCXsKKwkJCVJlbGF0
aW9uCWZyZWwgPSBsZmlyc3QobGMpOworCQkJT2lkCQkJZnJlbF9vaWQgPSBSZWxhdGlvbkdldFJl
bGlkKGZyZWwpOworCisJCQlpZiAoc2VydmVyX2lkID09IEdldEZvcmVpZ25TZXJ2ZXJJZEJ5UmVs
SWQoZnJlbF9vaWQpKQorCQkJeworCQkJCWZyZWxzX2xpc3QgPSBmb3JlYWNoX2RlbGV0ZV9jdXJy
ZW50KGZyZWxzX2xpc3QsIGxjKTsKKwkJCQljdXJyX2ZyZWxzID0gbGFwcGVuZChjdXJyX2ZyZWxz
LCBmcmVsKTsKKwkJCX0KKwkJfQorCQlBc3NlcnQoY3Vycl9mcmVscyAhPSBOSUwpOworCQlBc3Nl
cnQocm91dGluZS0+RXhlY0ZvcmVpZ25UcnVuY2F0ZSAhPSBOVUxMKTsKKwkJcm91dGluZS0+RXhl
Y0ZvcmVpZ25UcnVuY2F0ZShjdXJyX2ZyZWxzLAorCQkJCQkJCQkJIGJlaGF2aW9yID09IERST1Bf
Q0FTQ0FERSwKKwkJCQkJCQkJCSByZXN0YXJ0X3NlcXMpOworCX0KKwogCS8qCiAJICogUmVzdGFy
dCBvd25lZCBzZXF1ZW5jZXMgaWYgd2Ugd2VyZSBhc2tlZCB0by4KIAkgKi8KQEAgLTE5MTYsMTIg
KzE5NTcsMjMgQEAgdHJ1bmNhdGVfY2hlY2tfcmVsKE9pZCByZWxpZCwgRm9ybV9wZ19jbGFzcyBy
ZWx0dXBsZSkKIAljaGFyCSAgICpyZWxuYW1lID0gTmFtZVN0cihyZWx0dXBsZS0+cmVsbmFtZSk7
CiAKIAkvKgotCSAqIE9ubHkgYWxsb3cgdHJ1bmNhdGUgb24gcmVndWxhciB0YWJsZXMgYW5kIHBh
cnRpdGlvbmVkIHRhYmxlcyAoYWx0aG91Z2gsCisJICogT25seSBhbGxvdyB0cnVuY2F0ZSBvbiBy
ZWd1bGFyIHRhYmxlcywgcGFydGl0aW9uZWQgdGFibGVzIChhbHRob3VnaCwKIAkgKiB0aGUgbGF0
dGVyIGFyZSBvbmx5IGJlaW5nIGluY2x1ZGVkIGhlcmUgZm9yIHRoZSBmb2xsb3dpbmcgY2hlY2tz
OyBubwotCSAqIHBoeXNpY2FsIHRydW5jYXRpb24gd2lsbCBvY2N1ciBpbiB0aGVpciBjYXNlLikK
KwkgKiBwaHlzaWNhbCB0cnVuY2F0aW9uIHdpbGwgb2NjdXIgaW4gdGhlaXIgY2FzZS4pIGFuZCBm
b3JlaWduIHRhYmxlcworCSAqIHRoYXQgc3VwcG9ydCBFeGVjRm9yZWlnblRydW5jYXRlIGNhbGxi
YWNrLgogCSAqLwotCWlmIChyZWx0dXBsZS0+cmVsa2luZCAhPSBSRUxLSU5EX1JFTEFUSU9OICYm
Ci0JCXJlbHR1cGxlLT5yZWxraW5kICE9IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJaWYg
KHJlbHR1cGxlLT5yZWxraW5kID09IFJFTEtJTkRfRk9SRUlHTl9UQUJMRSkKKwl7CisJCUZkd1Jv
dXRpbmUgKmZkd3JvdXRpbmUgPSBHZXRGZHdSb3V0aW5lQnlSZWxJZChyZWxpZCk7CisKKwkJaWYg
KCFmZHdyb3V0aW5lLT5FeGVjRm9yZWlnblRydW5jYXRlKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJ
CQkJKGVycmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCisJCQkJCSBlcnJtc2coIlwi
JXNcIiBpcyBub3QgYSBzdXBwb3J0ZWQgZm9yZWlnbiB0YWJsZSIsCisJCQkJCQkJcmVsbmFtZSkp
KTsKKwl9CisJZWxzZSBpZiAocmVsdHVwbGUtPnJlbGtpbmQgIT0gUkVMS0lORF9SRUxBVElPTiAm
JgorCQkJIHJlbHR1cGxlLT5yZWxraW5kICE9IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCiAJ
CWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSks
CiAJCQkJIGVycm1zZygiXCIlc1wiIGlzIG5vdCBhIHRhYmxlIiwgcmVsbmFtZSkpKTsKZGlmZiAt
LWdpdCBhL3NyYy9pbmNsdWRlL2ZvcmVpZ24vZmR3YXBpLmggYi9zcmMvaW5jbHVkZS9mb3JlaWdu
L2Zkd2FwaS5oCmluZGV4IDk1NTU2ZGZiMTUuLmM4ODY0ZjIwNTIgMTAwNjQ0Ci0tLSBhL3NyYy9p
bmNsdWRlL2ZvcmVpZ24vZmR3YXBpLmgKKysrIGIvc3JjL2luY2x1ZGUvZm9yZWlnbi9mZHdhcGku
aApAQCAtMTE4LDYgKzExOCwxMCBAQCB0eXBlZGVmIFR1cGxlVGFibGVTbG90ICooKkl0ZXJhdGVE
aXJlY3RNb2RpZnlfZnVuY3Rpb24pIChGb3JlaWduU2NhblN0YXRlICpub2RlKQogCiB0eXBlZGVm
IHZvaWQgKCpFbmREaXJlY3RNb2RpZnlfZnVuY3Rpb24pIChGb3JlaWduU2NhblN0YXRlICpub2Rl
KTsKIAordHlwZWRlZiB2b2lkICgqRXhlY0ZvcmVpZ25UcnVuY2F0ZV9mdW5jdGlvbikgKExpc3Qg
KmZyZWxzX2xpc3QsCisJCQkJCQkJCQkJCSAgYm9vbCBpc19jYXNjYWRlLAorCQkJCQkJCQkJCQkg
IGJvb2wgcmVzdGFydF9zZXFzKTsKKwogdHlwZWRlZiBSb3dNYXJrVHlwZSAoKkdldEZvcmVpZ25S
b3dNYXJrVHlwZV9mdW5jdGlvbikgKFJhbmdlVGJsRW50cnkgKnJ0ZSwKIAkJCQkJCQkJCQkJCQkg
ICBMb2NrQ2xhdXNlU3RyZW5ndGggc3RyZW5ndGgpOwogCkBAIC0yMjAsNiArMjI0LDkgQEAgdHlw
ZWRlZiBzdHJ1Y3QgRmR3Um91dGluZQogCUl0ZXJhdGVEaXJlY3RNb2RpZnlfZnVuY3Rpb24gSXRl
cmF0ZURpcmVjdE1vZGlmeTsKIAlFbmREaXJlY3RNb2RpZnlfZnVuY3Rpb24gRW5kRGlyZWN0TW9k
aWZ5OwogCisJLyogRnVuY3Rpb25zIGZvciB0cnVuY2F0aW5nIGZvcmVpZ24gdGFibGVzICovCisJ
RXhlY0ZvcmVpZ25UcnVuY2F0ZV9mdW5jdGlvbiBFeGVjRm9yZWlnblRydW5jYXRlOworCiAJLyog
RnVuY3Rpb25zIGZvciBTRUxFQ1QgRk9SIFVQREFURS9TSEFSRSByb3cgbG9ja2luZyAqLwogCUdl
dEZvcmVpZ25Sb3dNYXJrVHlwZV9mdW5jdGlvbiBHZXRGb3JlaWduUm93TWFya1R5cGU7CiAJUmVm
ZXRjaEZvcmVpZ25Sb3dfZnVuY3Rpb24gUmVmZXRjaEZvcmVpZ25Sb3c7Cg==
--000000000000fe2eb7059c160bbb--