Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tlMLE-00BKXc-7C for pgsql-hackers@arkaria.postgresql.org; Fri, 21 Feb 2025 06:16:52 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tlMLC-0032CK-Da for pgsql-hackers@arkaria.postgresql.org; Fri, 21 Feb 2025 06:16:50 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tlMLB-0032C9-NZ for pgsql-hackers@lists.postgresql.org; Fri, 21 Feb 2025 06:16:50 +0000 Received: from mail-yb1-xb2c.google.com ([2607:f8b0:4864:20::b2c]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tlML9-0022PB-35 for pgsql-hackers@postgresql.org; Fri, 21 Feb 2025 06:16:49 +0000 Received: by mail-yb1-xb2c.google.com with SMTP id 3f1490d57ef6-e5dcc411189so1615952276.0 for ; Thu, 20 Feb 2025 22:16:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740118607; x=1740723407; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=Gsden7P/f21KU9dzAnYsaG614qjLBTs110JRQYEGQaI=; b=QJsXmP7hWdPaAWWbVKIzfYgH9iIheH8SR1uy2vb96EY6Whd/9edCFvgRaPnBzfALgC Vm+Uix4LjmSSEi9+E1x1bb47BFiNTHOZj1cVw7hE2gP8fFHhg/gTh3WGpEadQJaNieLq gILOlh/rpuiV9KfLlBANujhrhmF2Od/n7XbttvPV01ozItedwL0HR34L6Lt/BNZBqgKz rJf4a+ycOJ3iD0JXJaSHJzBJHdzyaMyLcwdeA0HxR8oaZDKfcctOwEyY4SvOI/T4MNQd qWNz7mbWf1B4cy7EIyPf1nYxLEMM8btuoYlHSB1PspGR2QSf/Ifu38CV5Jb6z3OWPdBG 6CiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740118607; x=1740723407; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Gsden7P/f21KU9dzAnYsaG614qjLBTs110JRQYEGQaI=; b=AF3oKQRAn4jjHuJfn4F/kpznWSba+v8+STz6qNKL35TcUrsohRYOsXYEtENcwQOK4D TnIbsEHMr1VMegQ8mp+oXlKkqBV68ezpOtjGeZ6FKtSA5oq5c9wzXG+E2Uva9GB7IaGS xiOk9dp/lNj/LRWVPB03IfhwX/IARx9obDnSavQ1YayqlG0i6vRE09ihpbqEQCkj3pym 2OJl/FF4VRlJxxDchJtMQjCf9UJEMgNN6+fi1WVgPGVfgNY1NIjctq8vc5Vr0p0hWm7l tqPKn4UkyyfKA8QJEZekbCec/nnknRRtZs7f34bIiXP8nMMzasXIh6Ya6KHd1yalJuf/ 4NEg== X-Forwarded-Encrypted: i=1; AJvYcCUcVmv/bLQtl0+MZq8OpQI3kF453tdcD/47O2LqcO1MKNZtMXJwy54h3VklLK2XhJnelbDk5yG08tSq7C9v@postgresql.org X-Gm-Message-State: AOJu0Yw6680JQDNGI/l9S/J0UkNr+0NLKEMobguADdp2iB2YKVjYRaR8 R1N/UFI0MlKFLAAEsPfSSPFSw8vWoI1uFLn1zRwWJJ7N8cAem2pbT+WooZPaxwAs/RwRxh6ttzS euFGwJPSCQbWchI9cDpAAun3pvKA= X-Gm-Gg: ASbGncsHSaQSyNNH2+cNvl0DYlW5f40l+nA/itF/i0RpRO6l2zSl+XdP67bcLpxd+Ig gyqjqWGw8cWAFt+QxFNStT0F4wjdVqb9vnb3GmTbzsy60Mtt9j+Wv7IBZbeTsdd2XEjZbF7Yhvs jtjoe2t4csCZHICt0UPxVNaH6y5sm9Zo4wyhjO/CYlWQ== X-Google-Smtp-Source: AGHT+IFVGHzu6e3nikMsGWOtQg+gHo0NZDKqh7/PnHtAiqTZ75xRsEXyr4VCTzKlz/zhXRP2sV2W8awzc4K33lC2CYc= X-Received: by 2002:a05:6902:1a47:b0:e5d:b671:8fce with SMTP id 3f1490d57ef6-e5e245ea69amr1722700276.12.1740118607099; Thu, 20 Feb 2025 22:16:47 -0800 (PST) MIME-Version: 1.0 References: <831d7f99-0618-48e5-8557-f3d57137f339@eisentraut.org> <64c2468c-3b69-44d7-863a-165931a70c1d@eisentraut.org> <8be3512a-a23f-4088-a9ec-bf68650a2997@eisentraut.org> <75eb1a6f-d59f-42e6-8a78-124ee808cda7@gmail.com> <8d6a3d4c-f630-4cf9-aced-6cead95776e5@Spark> <12d5cce9-917f-4a99-86d3-715bb3b363bb@Spark> In-Reply-To: From: Richard Guo Date: Fri, 21 Feb 2025 15:16:35 +0900 X-Gm-Features: AWEUYZmgUQ0oXIrD39oc-1sbjWqB98WsKCXXLnqoajfL3HBfu-XIBQdrhdgAPXc Message-ID: Subject: Re: Virtual generated columns To: Dean Rasheed Cc: Peter Eisentraut , jian he , Zhang Mingli , Alexander Lakhin , pgsql-hackers Content-Type: multipart/mixed; boundary="00000000000071b167062ea0ef38" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000071b167062ea0ef38 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Feb 20, 2025 at 12:25=E2=80=AFAM Dean Rasheed wrote: > On Wed, 19 Feb 2025 at 01:42, Dean Rasheed wro= te: > > One thing I don't like about this is that it's introducing more code > > duplication between pullup_replace_vars() and > > ReplaceVarsFromTargetList(). Those already had a lot of code in common > > before RETURNING OLD/NEW was added, and this is duplicating even more > > code. I think it'd be better to refactor so that they share common > > code, since it has become quite complex, and it would be better to > > have just one place to maintain. Yeah, it's annoying that the two replace_rte_variables callbacks have so much code duplication. I think it's a win to make them share common code. What do you think about making this refactor a separate patch, as it doesn't seem directly related to the bug fix here? > I've been doing some more testing of this, and attached is another > update, improving a few comments and adding regression tests based on > the cases discussed so far here. Hmm, there are some issues with v4 as far as I can see. * In pullup_replace_vars_callback, the varlevelsup of the newnode is adjusted before its nullingrels is updated. This can cause problems. If the newnode is not a Var/PHV, we adjust its nullingrels with add_nulling_relids, and this function only works for level-zero vars. As a result, we may fail to put the varnullingrels into the expression. I think we should insist that ReplaceVarFromTargetList generates the replacement expression with varlevelsup =3D 0, and that the caller is responsible for adjusting the varlevelsup if needed. This may need some changes to ReplaceVarsFromTargetList_callback too. * When expanding whole-tuple references, it is possible that some fields are expanded as Consts rather than Vars, considering dropped columns. I think we need to check for this when generating the fields for a RowExpr. * The expansion of virtual generated columns occurs after subquery pullup, which can lead to issues. This was an oversight on my part. Initially, I believed it wasn't possible for an RTE_RELATION RTE to have 'lateral' set to true, so I assumed it would be safe to expand virtual generated columns after subquery pullup. However, upon closer look, this doesn't seem to be the case: if a subquery had a LATERAL marker, that would be propagated to any of its child RTEs, even for RTE_RELATION child RTE if this child rel has sampling info (see pull_up_simple_subquery). * Not an issue but I think that maybe we can share some common code between expand_virtual_generated_columns and expand_generated_columns_internal on how we build the generation expressions for a virtual generated column. I've worked on these issues and attached are the updated patches. 0001 expands virtual generated columns in the planner. 0002 refactors the code to eliminate code duplication in the replace_rte_variables callback functions. > One of the new regression tests fails, which actually appears to be a > pre-existing grouping sets bug, due to the fact that only non-Vars are > wrapped in PHVs. This bug can be triggered without virtual generated > columns: Interesting. I'll take a look at this issue. Thanks Richard --00000000000071b167062ea0ef38 Content-Type: application/octet-stream; name="v5-0001-Expand-virtual-generated-columns-in-the-planner.patch" Content-Disposition: attachment; filename="v5-0001-Expand-virtual-generated-columns-in-the-planner.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7edo3670 RnJvbSAwZDM0MmIxNzY0MTE3OWUzYjUxNDQxMmJkM2IyMTY1NzJiNmYwYTdhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAyMSBGZWIgMjAyNSAwOTo0Njo1OSArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjUg MS8yXSBFeHBhbmQgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucyBpbiB0aGUgcGxhbm5lcgoKQ29t bWl0IDgzZWE2YzU0MCBhZGRlZCBzdXBwb3J0IGZvciB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5z LCB3aGljaAp3ZXJlIGV4cGFuZGVkIGluIHRoZSByZXdyaXRlciwgaW4gYSBzaW1pbGFyIHdheSB0 byB2aWV3IGNvbHVtbnMuCkhvd2V2ZXIsIHRoaXMgYXBwcm9hY2ggaGFzIHNldmVyYWwgaXNzdWVz LiAgSWYgYSBWYXIgcmVmZXJlbmNpbmcgYQp2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW4gaGFzIGFu eSB2YXJudWxsaW5ncmVscywgdGhlcmUgd291bGQgYmUgbm8gd2F5CnRvIHByb3BhZ2F0ZSB0aGUg dmFybnVsbGluZ3JlbHMgaW50byB0aGUgZ2VuZXJhdGlvbiBleHByZXNzaW9uLApsZWFkaW5nIHRv ICJ3cm9uZyB2YXJudWxsaW5ncmVscyIgZXJyb3JzIGFuZCBpbXByb3BlciBvdXRlci1qb2luCnJl bW92YWwuICBBZGRpdGlvbmFsbHksIGlmIHN1Y2ggYSBWYXIgY29tZXMgZnJvbSB0aGUgbnVsbGFi bGUgc2lkZSBvZgphbiBvdXRlciBqb2luLCB3ZSBtYXkgbmVlZCB0byB3cmFwIHRoZSBnZW5lcmF0 aW9uIGV4cHJlc3Npb24gaW4gYQpQbGFjZUhvbGRlclZhciB0byBlbnN1cmUgdGhhdCBpdCBpcyBl dmFsdWF0ZWQgYXQgdGhlIHJpZ2h0IHBsYWNlIGFuZApoZW5jZSBpcyBmb3JjZWQgdG8gbnVsbCB3 aGVuIHRoZSBvdXRlciBqb2luIHNob3VsZCBkbyBzby4gIEluIHNvbWUKY2FzZXMsIHN1Y2ggYXMg d2hlbiB0aGUgcXVlcnkgdXNlcyBncm91cGluZyBzZXRzLCB3ZSBhbHNvIG5lZWQgYQpQbGFjZUhv bGRlclZhciBmb3IgYW55dGhpbmcgdGhhdCdzIG5vdCBhIHNpbXBsZSBWYXIgdG8gaXNvbGF0ZQpz dWJleHByZXNzaW9ucy4gIEFsbCBvZiB0aGlzIGNhbm5vdCBiZSBhY2hpZXZlZCBpbiB0aGUgcmV3 cml0ZXIuCgpUbyBmaXggdGhpcywgdGhlIHBhdGNoIGV4cGFuZHMgdGhlIHZpcnR1YWwgZ2VuZXJh dGVkIGNvbHVtbnMgaW4gdGhlCnBsYW5uZXIgYW5kIGxldmVyYWdlcyB0aGUgcHVsbHVwX3JlcGxh Y2VfdmFycyBhcmNoaXRlY3R1cmUgdG8gYXZvaWQKY29kZSBkdXBsaWNhdGlvbi4gIFRoaXMgcmVx dWlyZXMgaGFuZGxpbmcgdGhlIE9MRC9ORVcgUkVUVVJOSU5HIGxpc3QKVmFycyBpbiBwdWxsdXBf cmVwbGFjZV92YXJzX2NhbGxiYWNrLgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3Bs YW5uZXIuYyAgICAgICAgICB8ICAgNyArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVw am9pbnRyZWUuYyAgICAgfCAxODYgKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9yZXdy aXRlL3Jld3JpdGVIYW5kbGVyLmMgICAgICAgICAgfCAgODcgKysrKy0tLS0KIHNyYy9iYWNrZW5k L3Jld3JpdGUvcmV3cml0ZU1hbmlwLmMgICAgICAgICAgICB8ICAgMiArLQogc3JjL2luY2x1ZGUv b3B0aW1pemVyL3ByZXAuaCAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3Jl d3JpdGUvcmV3cml0ZUhhbmRsZXIuaCAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9yZXdy aXRlL3Jld3JpdGVNYW5pcC5oICAgICAgICAgICAgfCAgIDMgKwogLi4uL3JlZ3Jlc3MvZXhwZWN0 ZWQvZ2VuZXJhdGVkX3ZpcnR1YWwub3V0ICAgIHwgIDg5ICsrKysrKysrKwogc3JjL3Rlc3QvcmVn cmVzcy9zcWwvZ2VuZXJhdGVkX3ZpcnR1YWwuc3FsICAgIHwgIDM4ICsrKysKIDkgZmlsZXMgY2hh bmdlZCwgMzcyIGluc2VydGlvbnMoKyksIDQyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL3BsYW5uZXIuYwppbmRleCA3YjFhOGEwYTlmMS4uMjAxNDg3ZWFmNDIgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYworKysgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAgLTcxNyw2ICs3MTcsMTMgQEAgc3VicXVlcnlf cGxhbm5lcihQbGFubmVyR2xvYmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsIFBsYW5uZXJJbmZvICpw YXJlbnRfcm9vdCwKIAkgKi8KIAlyZXBsYWNlX2VtcHR5X2pvaW50cmVlKHBhcnNlKTsKIAorCS8q CisJICogU2NhbiB0aGUgcmFuZ2V0YWJsZSBmb3IgcmVsYXRpb25zIHdpdGggdmlydHVhbCBnZW5l cmF0ZWQgY29sdW1ucywgYW5kCisJICogcmVwbGFjZSBhbGwgVmFyIG5vZGVzIGluIHRoZSBxdWVy eSB0aGF0IHJlZmVyZW5jZSB0aGVzZSBjb2x1bW5zIHdpdGgKKwkgKiB0aGUgZ2VuZXJhdGlvbiBl eHByZXNzaW9ucy4KKwkgKi8KKwlwYXJzZSA9IHJvb3QtPnBhcnNlID0gZXhwYW5kX3ZpcnR1YWxf Z2VuZXJhdGVkX2NvbHVtbnMocm9vdCk7CisKIAkvKgogCSAqIExvb2sgZm9yIEFOWSBhbmQgRVhJ U1RTIFN1YkxpbmtzIGluIFdIRVJFIGFuZCBKT0lOL09OIGNsYXVzZXMsIGFuZCB0cnkKIAkgKiB0 byB0cmFuc2Zvcm0gdGhlbSBpbnRvIGpvaW5zLiAgTm90ZSB0aGF0IHRoaXMgc3RlcCBkb2VzIG5v dCBkZXNjZW5kCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwam9p bnRyZWUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXBqb2ludHJlZS5jCmluZGV4 IDVkOTIyNWU5OTA5Li44OWIxZmYyZGI4NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3ByZXAvcHJlcGpvaW50cmVlLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAv cHJlcGpvaW50cmVlLmMKQEAgLTUsNiArNSw3IEBACiAgKgogICogTk9URTogdGhlIGludGVuZGVk IHNlcXVlbmNlIGZvciBpbnZva2luZyB0aGVzZSBvcGVyYXRpb25zIGlzCiAgKgkJcmVwbGFjZV9l bXB0eV9qb2ludHJlZQorICoJCWV4cGFuZF92aXJ0dWFsX2dlbmVyYXRlZF9jb2x1bW5zCiAgKgkJ cHVsbF91cF9zdWJsaW5rcwogICoJCXByZXByb2Nlc3NfZnVuY3Rpb25fcnRlcwogICoJCXB1bGxf dXBfc3VicXVlcmllcwpAQCAtMjUsNiArMjYsNyBAQAogICovCiAjaW5jbHVkZSAicG9zdGdyZXMu aCIKIAorI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlw ZS5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKQEAgLTM5 LDcgKzQxLDkgQEAKICNpbmNsdWRlICJvcHRpbWl6ZXIvdGxpc3QuaCIKICNpbmNsdWRlICJwYXJz ZXIvcGFyc2VfcmVsYXRpb24uaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCisjaW5j bHVkZSAicmV3cml0ZS9yZXdyaXRlSGFuZGxlci5oIgogI2luY2x1ZGUgInJld3JpdGUvcmV3cml0 ZU1hbmlwLmgiCisjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKIAogdHlwZWRlZiBzdHJ1Y3QgbnVs bGluZ3JlbF9pbmZvCkBAIC01Nyw2ICs2MSw3IEBAIHR5cGVkZWYgc3RydWN0IHB1bGx1cF9yZXBs YWNlX3ZhcnNfY29udGV4dAogewogCVBsYW5uZXJJbmZvICpyb290OwogCUxpc3QJICAgKnRhcmdl dGxpc3Q7CQkvKiB0bGlzdCBvZiBzdWJxdWVyeSBiZWluZyBwdWxsZWQgdXAgKi8KKwlpbnQJCQly ZXN1bHRfcmVsYXRpb247CiAJUmFuZ2VUYmxFbnRyeSAqdGFyZ2V0X3J0ZTsJLyogUlRFIG9mIHN1 YnF1ZXJ5ICovCiAJUmVsaWRzCQlyZWxpZHM7CQkJLyogcmVsaWRzIHdpdGhpbiBzdWJxdWVyeSwg YXMgbnVtYmVyZWQgYWZ0ZXIKIAkJCQkJCQkJICogcHVsbHVwIChzZXQgb25seSBpZiB0YXJnZXRf cnRlLT5sYXRlcmFsKSAqLwpAQCAtNDIxLDYgKzQyNiwxMjggQEAgcmVwbGFjZV9lbXB0eV9qb2lu dHJlZShRdWVyeSAqcGFyc2UpCiAJcGFyc2UtPmpvaW50cmVlLT5mcm9tbGlzdCA9IGxpc3RfbWFr ZTEocnRyKTsKIH0KIAorLyoKKyAqIGV4cGFuZF92aXJ0dWFsX2dlbmVyYXRlZF9jb2x1bW5zCisg KgkJRXhwYW5kIGFsbCB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW4gcmVmZXJlbmNlcyBpbiBhIHF1 ZXJ5LgorICoKKyAqIFRoaXMgc2NhbnMgdGhlIHJhbmdldGFibGUgZm9yIHJlbGF0aW9ucyB3aXRo IHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMsIGFuZAorICogcmVwbGFjZXMgYWxsIFZhciBub2Rl cyBpbiB0aGUgcXVlcnkgdGhhdCByZWZlcmVuY2UgdGhlc2UgY29sdW1ucyB3aXRoIHRoZQorICog YXBwcm9wcmlhdGUgZXhwcmVzc2lvbnMuICBOb3RlIHRoYXQgd2UgZG8gbm90IHJlY3Vyc2UgaW50 byBzdWJxdWVyaWVzOyB0aGF0CisgKiBpcyB0YWtlbiBjYXJlIG9mIHdoZW4gdGhlIHN1YnF1ZXJp ZXMgYXJlIHBsYW5uZWQuCisgKgorICogUmV0dXJucyBhIG1vZGlmaWVkIGNvcHkgb2YgdGhlIHF1 ZXJ5IHRyZWUsIGlmIGFueSByZWxhdGlvbnMgd2l0aCB2aXJ0dWFsCisgKiBnZW5lcmF0ZWQgY29s dW1ucyBhcmUgcHJlc2VudC4KKyAqLworUXVlcnkgKgorZXhwYW5kX3ZpcnR1YWxfZ2VuZXJhdGVk X2NvbHVtbnMoUGxhbm5lckluZm8gKnJvb3QpCit7CisJUXVlcnkJICAgKnBhcnNlID0gcm9vdC0+ cGFyc2U7CisJaW50CQkJcnRfaW5kZXg7CisJTGlzdENlbGwgICAqbGM7CisKKwlydF9pbmRleCA9 IDA7CisJZm9yZWFjaChsYywgcGFyc2UtPnJ0YWJsZSkKKwl7CisJCVJhbmdlVGJsRW50cnkgKnJ0 ZSA9IChSYW5nZVRibEVudHJ5ICopIGxmaXJzdChsYyk7CisJCVJlbGF0aW9uCXJlbDsKKwkJVHVw bGVEZXNjCXR1cGRlc2M7CisKKwkJKytydF9pbmRleDsKKworCQkvKgorCQkgKiBPbmx5IG5vcm1h bCByZWxhdGlvbnMgY2FuIGhhdmUgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucy4KKwkJICovCisJ CWlmIChydGUtPnJ0ZWtpbmQgIT0gUlRFX1JFTEFUSU9OKQorCQkJY29udGludWU7CisKKwkJcmVs ID0gdGFibGVfb3BlbihydGUtPnJlbGlkLCBOb0xvY2spOworCisJCXR1cGRlc2MgPSBSZWxhdGlv bkdldERlc2NyKHJlbCk7CisJCWlmICh0dXBkZXNjLT5jb25zdHIgJiYgdHVwZGVzYy0+Y29uc3Ry LT5oYXNfZ2VuZXJhdGVkX3ZpcnR1YWwpCisJCXsKKwkJCUxpc3QJICAgKnRsaXN0ID0gTklMOwor CQkJcHVsbHVwX3JlcGxhY2VfdmFyc19jb250ZXh0IHJ2Y29udGV4dDsKKworCQkJZm9yIChpbnQg aSA9IDA7IGkgPCB0dXBkZXNjLT5uYXR0czsgaSsrKQorCQkJeworCQkJCUZvcm1fcGdfYXR0cmli dXRlIGF0dHIgPSBUdXBsZURlc2NBdHRyKHR1cGRlc2MsIGkpOworCQkJCVRhcmdldEVudHJ5ICp0 bGU7CisKKwkJCQlpZiAoYXR0ci0+YXR0Z2VuZXJhdGVkID09IEFUVFJJQlVURV9HRU5FUkFURURf VklSVFVBTCkKKwkJCQl7CisJCQkJCU5vZGUJICAgKmRlZmV4cHIgPSBidWlsZF9nZW5lcmF0aW9u X2V4cHJlc3Npb24ocmVsLCBpICsgMSk7CisKKwkJCQkJQ2hhbmdlVmFyTm9kZXMoZGVmZXhwciwg MSwgcnRfaW5kZXgsIDApOworCisJCQkJCXRsZSA9IG1ha2VUYXJnZXRFbnRyeSgoRXhwciAqKSBk ZWZleHByLCBpICsgMSwgMCwgZmFsc2UpOworCQkJCQl0bGlzdCA9IGxhcHBlbmQodGxpc3QsIHRs ZSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCVZhcgkJICAgKnZhcjsKKworCQkJCQl2 YXIgPSBtYWtlVmFyKHJ0X2luZGV4LAorCQkJCQkJCQkgIGkgKyAxLAorCQkJCQkJCQkgIGF0dHIt PmF0dHR5cGlkLAorCQkJCQkJCQkgIGF0dHItPmF0dHR5cG1vZCwKKwkJCQkJCQkJICBhdHRyLT5h dHRjb2xsYXRpb24sCisJCQkJCQkJCSAgMCk7CisKKwkJCQkJdGxlID0gbWFrZVRhcmdldEVudHJ5 KChFeHByICopIHZhciwgaSArIDEsIDAsIGZhbHNlKTsKKwkJCQkJdGxpc3QgPSBsYXBwZW5kKHRs aXN0LCB0bGUpOworCQkJCX0KKwkJCX0KKworCQkJQXNzZXJ0KGxpc3RfbGVuZ3RoKHRsaXN0KSA+ IDApOworCQkJQXNzZXJ0KCFydGUtPmxhdGVyYWwpOworCisJCQkvKgorCQkJICogVGhlIHJlbGF0 aW9uJ3MgdGFyZ2V0bGlzdCBpdGVtcyBhcmUgbm93IGluIHRoZSBhcHByb3ByaWF0ZSBmb3JtCisJ CQkgKiB0byBpbnNlcnQgaW50byB0aGUgcXVlcnksIGV4Y2VwdCB0aGF0IHdlIG1heSBuZWVkIHRv IHdyYXAgdGhlbQorCQkJICogaW4gUGxhY2VIb2xkZXJWYXJzLiAgU2V0IHVwIHJlcXVpcmVkIGNv bnRleHQgZGF0YSBmb3IKKwkJCSAqIHB1bGx1cF9yZXBsYWNlX3ZhcnMuCisJCQkgKi8KKwkJCXJ2 Y29udGV4dC5yb290ID0gcm9vdDsKKwkJCXJ2Y29udGV4dC50YXJnZXRsaXN0ID0gdGxpc3Q7CisJ CQlydmNvbnRleHQucmVzdWx0X3JlbGF0aW9uID0gcGFyc2UtPnJlc3VsdFJlbGF0aW9uOworCQkJ cnZjb250ZXh0LnRhcmdldF9ydGUgPSBydGU7CisJCQkvKiB3b24ndCBuZWVkIHRoZXNlIHZhbHVl cyAqLworCQkJcnZjb250ZXh0LnJlbGlkcyA9IE5VTEw7CisJCQlydmNvbnRleHQubnVsbGluZm8g PSBOVUxMOworCQkJLyogcGFzcyBOVUxMIGZvciBvdXRlcl9oYXNTdWJMaW5rcyAqLworCQkJcnZj b250ZXh0Lm91dGVyX2hhc1N1YkxpbmtzID0gTlVMTDsKKwkJCXJ2Y29udGV4dC52YXJubyA9IHJ0 X2luZGV4OworCQkJLyogdGhpcyBmbGFnIHdpbGwgYmUgc2V0IGJlbG93LCBpZiBuZWVkZWQgKi8K KwkJCXJ2Y29udGV4dC53cmFwX25vbl92YXJzID0gZmFsc2U7CisJCQkvKiBpbml0aWFsaXplIGNh Y2hlIGFycmF5IHdpdGggaW5kZXhlcyAwIC4uIGxlbmd0aCh0bGlzdCkgKi8KKwkJCXJ2Y29udGV4 dC5ydl9jYWNoZSA9IHBhbGxvYzAoKGxpc3RfbGVuZ3RoKHRsaXN0KSArIDEpICoKKwkJCQkJCQkJ CQkgc2l6ZW9mKE5vZGUgKikpOworCisJCQkvKgorCQkJICogSWYgdGhlIHF1ZXJ5IHVzZXMgZ3Jv dXBpbmcgc2V0cywgd2UgbmVlZCBhIFBsYWNlSG9sZGVyVmFyIGZvcgorCQkJICogYW55dGhpbmcg dGhhdCdzIG5vdCBhIHNpbXBsZSBWYXIuICBBZ2FpbiwgdGhpcyBlbnN1cmVzIHRoYXQKKwkJCSAq IGV4cHJlc3Npb25zIHJldGFpbiB0aGVpciBzZXBhcmF0ZSBpZGVudGl0eSBzbyB0aGF0IHRoZXkg d2lsbAorCQkJICogbWF0Y2ggZ3JvdXBpbmcgc2V0IGNvbHVtbnMgd2hlbiBhcHByb3ByaWF0ZS4g IChJdCdkIGJlCisJCQkgKiBzdWZmaWNpZW50IHRvIHdyYXAgdmFsdWVzIHVzZWQgaW4gZ3JvdXBp bmcgc2V0IGNvbHVtbnMsIGFuZCBkbworCQkJICogc28gb25seSBpbiBub24tYWdncmVnYXRlZCBw b3J0aW9ucyBvZiB0aGUgdGxpc3QgYW5kIGhhdmluZ1F1YWwsCisJCQkgKiBidXQgdGhhdCB3b3Vs ZCByZXF1aXJlIGEgbG90IG9mIGluZnJhc3RydWN0dXJlIHRoYXQKKwkJCSAqIHB1bGx1cF9yZXBs YWNlX3ZhcnMgaGFzbid0IGN1cnJlbnRseSBnb3QuKQorCQkJICovCisJCQlpZiAocGFyc2UtPmdy b3VwaW5nU2V0cykKKwkJCQlydmNvbnRleHQud3JhcF9ub25fdmFycyA9IHRydWU7CisKKwkJCS8q CisJCQkgKiBBcHBseSBwdWxsdXAgdmFyaWFibGUgcmVwbGFjZW1lbnQgdGhyb3VnaG91dCB0aGUg cXVlcnkgdHJlZS4KKwkJCSAqLworCQkJcGFyc2UgPSAoUXVlcnkgKikgcHVsbHVwX3JlcGxhY2Vf dmFycygoTm9kZSAqKSBwYXJzZSwgJnJ2Y29udGV4dCk7CisJCX0KKworCQl0YWJsZV9jbG9zZShy ZWwsIE5vTG9jayk7CisJfQorCisJcmV0dXJuIHBhcnNlOworfQorCiAvKgogICogcHVsbF91cF9z dWJsaW5rcwogICoJCUF0dGVtcHQgdG8gcHVsbCB1cCBBTlkgYW5kIEVYSVNUUyBTdWJMaW5rcyB0 byBiZSB0cmVhdGVkIGFzCkBAIC0xMTg0LDYgKzEzMTEsMTMgQEAgcHVsbF91cF9zaW1wbGVfc3Vi cXVlcnkoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKmp0bm9kZSwgUmFuZ2VUYmxFbnRyeSAqcnRl LAogCSAqLwogCXJlcGxhY2VfZW1wdHlfam9pbnRyZWUoc3VicXVlcnkpOwogCisJLyoKKwkgKiBT Y2FuIHRoZSByYW5nZXRhYmxlIGZvciByZWxhdGlvbnMgd2l0aCB2aXJ0dWFsIGdlbmVyYXRlZCBj b2x1bW5zLCBhbmQKKwkgKiByZXBsYWNlIGFsbCBWYXIgbm9kZXMgaW4gdGhlIHF1ZXJ5IHRoYXQg cmVmZXJlbmNlIHRoZXNlIGNvbHVtbnMgd2l0aAorCSAqIHRoZSBnZW5lcmF0aW9uIGV4cHJlc3Np b25zLgorCSAqLworCXN1YnF1ZXJ5ID0gc3Vicm9vdC0+cGFyc2UgPSBleHBhbmRfdmlydHVhbF9n ZW5lcmF0ZWRfY29sdW1ucyhzdWJyb290KTsKKwogCS8qCiAJICogUHVsbCB1cCBhbnkgU3ViTGlu a3Mgd2l0aGluIHRoZSBzdWJxdWVyeSdzIHF1YWxzLCBzbyB0aGF0IHdlIGRvbid0CiAJICogbGVh dmUgdW5vcHRpbWl6ZWQgU3ViTGlua3MgYmVoaW5kLgpAQCAtMTI3Myw2ICsxNDA3LDcgQEAgcHVs bF91cF9zaW1wbGVfc3VicXVlcnkoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKmp0bm9kZSwgUmFu Z2VUYmxFbnRyeSAqcnRlLAogCSAqLwogCXJ2Y29udGV4dC5yb290ID0gcm9vdDsKIAlydmNvbnRl eHQudGFyZ2V0bGlzdCA9IHN1YnF1ZXJ5LT50YXJnZXRMaXN0OworCXJ2Y29udGV4dC5yZXN1bHRf cmVsYXRpb24gPSAwOwogCXJ2Y29udGV4dC50YXJnZXRfcnRlID0gcnRlOwogCWlmIChydGUtPmxh dGVyYWwpCiAJewpAQCAtMTgzMyw2ICsxOTY4LDcgQEAgcHVsbF91cF9zaW1wbGVfdmFsdWVzKFBs YW5uZXJJbmZvICpyb290LCBOb2RlICpqdG5vZGUsIFJhbmdlVGJsRW50cnkgKnJ0ZSkKIAl9CiAJ cnZjb250ZXh0LnJvb3QgPSByb290OwogCXJ2Y29udGV4dC50YXJnZXRsaXN0ID0gdGxpc3Q7CisJ cnZjb250ZXh0LnJlc3VsdF9yZWxhdGlvbiA9IDA7CiAJcnZjb250ZXh0LnRhcmdldF9ydGUgPSBy dGU7CiAJcnZjb250ZXh0LnJlbGlkcyA9IE5VTEw7CS8qIGNhbid0IGJlIGFueSBsYXRlcmFsIHJl ZmVyZW5jZXMgaGVyZSAqLwogCXJ2Y29udGV4dC5udWxsaW5mbyA9IE5VTEw7CkBAIC0xOTkzLDYg KzIxMjksNyBAQCBwdWxsX3VwX2NvbnN0YW50X2Z1bmN0aW9uKFBsYW5uZXJJbmZvICpyb290LCBO b2RlICpqdG5vZGUsCiAJCQkJCQkJCQkJCQkJICBOVUxMLCAvKiByZXNuYW1lICovCiAJCQkJCQkJ CQkJCQkJICBmYWxzZSkpOwkvKiByZXNqdW5rICovCiAJcnZjb250ZXh0LnRhcmdldF9ydGUgPSBy dGU7CisJcnZjb250ZXh0LnJlc3VsdF9yZWxhdGlvbiA9IDA7CiAKIAkvKgogCSAqIFNpbmNlIHRo aXMgZnVuY3Rpb24gd2FzIHJlZHVjZWQgdG8gYSBDb25zdCwgaXQgZG9lc24ndCBjb250YWluIGFu eQpAQCAtMjQ5MCw2ICsyNjI3LDEwIEBAIHB1bGx1cF9yZXBsYWNlX3ZhcnNfY2FsbGJhY2soVmFy ICp2YXIsCiAJYm9vbAkJbmVlZF9waHY7CiAJTm9kZQkgICAqbmV3bm9kZTsKIAorCS8qIFN5c3Rl bSBjb2x1bW5zIGFyZSBub3QgcmVwbGFjZWQuICovCisJaWYgKHZhcmF0dG5vIDwgSW52YWxpZEF0 dHJOdW1iZXIpCisJCXJldHVybiAoTm9kZSAqKSBjb3B5T2JqZWN0KHZhcik7CisKIAkvKgogCSAq IFdlIG5lZWQgYSBQbGFjZUhvbGRlclZhciBpZiB0aGUgVmFyLXRvLWJlLXJlcGxhY2VkIGhhcyBu b25lbXB0eQogCSAqIHZhcm51bGxpbmdyZWxzICh1bmxlc3Mgd2UgZmluZCBiZWxvdyB0aGF0IHRo ZSByZXBsYWNlbWVudCBleHByZXNzaW9uIGlzCkBAIC0yNTU5LDYgKzI3MDAsMTggQEAgcHVsbHVw X3JlcGxhY2VfdmFyc19jYWxsYmFjayhWYXIgKnZhciwKIAkJcm93ZXhwci0+bG9jYXRpb24gPSB2 YXItPmxvY2F0aW9uOwogCQluZXdub2RlID0gKE5vZGUgKikgcm93ZXhwcjsKIAorCQkvKiBIYW5k bGUgYW55IE9MRC9ORVcgUkVUVVJOSU5HIGxpc3QgVmFycyAqLworCQlpZiAodmFyLT52YXJyZXR1 cm5pbmd0eXBlICE9IFZBUl9SRVRVUk5JTkdfREVGQVVMVCkKKwkJeworCQkJUmV0dXJuaW5nRXhw ciAqcmV4cHIgPSBtYWtlTm9kZShSZXR1cm5pbmdFeHByKTsKKworCQkJcmV4cHItPnJldGxldmVs c3VwID0gMDsKKwkJCXJleHByLT5yZXRvbGQgPSAodmFyLT52YXJyZXR1cm5pbmd0eXBlID09IFZB Ul9SRVRVUk5JTkdfT0xEKTsKKwkJCXJleHByLT5yZXRleHByID0gKEV4cHIgKikgbmV3bm9kZTsK KworCQkJbmV3bm9kZSA9IChOb2RlICopIHJleHByOworCQl9CisKIAkJLyoKIAkJICogSW5zZXJ0 IFBsYWNlSG9sZGVyVmFyIGlmIG5lZWRlZC4gIE5vdGljZSB0aGF0IHdlIGFyZSB3cmFwcGluZyBv bmUKIAkJICogUGxhY2VIb2xkZXJWYXIgYXJvdW5kIHRoZSB3aG9sZSBSb3dFeHByLCByYXRoZXIg dGhhbiBwdXR0aW5nIG9uZQpAQCAtMjU4OCw2ICsyNzQxLDM5IEBAIHB1bGx1cF9yZXBsYWNlX3Zh cnNfY2FsbGJhY2soVmFyICp2YXIsCiAJCS8qIE1ha2UgYSBjb3B5IG9mIHRoZSB0bGlzdCBpdGVt IHRvIHJldHVybiAqLwogCQluZXdub2RlID0gKE5vZGUgKikgY29weU9iamVjdCh0bGUtPmV4cHIp OwogCisJCS8qIEhhbmRsZSBhbnkgT0xEL05FVyBSRVRVUk5JTkcgbGlzdCBWYXJzICovCisJCWlm ICh2YXItPnZhcnJldHVybmluZ3R5cGUgIT0gVkFSX1JFVFVSTklOR19ERUZBVUxUKQorCQl7CisJ CQkvKgorCQkJICogQ29weSB2YXJyZXR1cm5pbmd0eXBlIG9udG8gYW55IFZhcnMgaW4gdGhlIHRs aXN0IGl0ZW0gdGhhdAorCQkJICogcmVmZXIgdG8gcmVzdWx0X3JlbGF0aW9uICh3aGljaCBoYWQg YmV0dGVyIGJlIG5vbi16ZXJvKS4KKwkJCSAqLworCQkJaWYgKHJjb24tPnJlc3VsdF9yZWxhdGlv biA9PSAwKQorCQkJCWVsb2coRVJST1IsICJ2YXJpYWJsZSByZXR1cm5pbmcgb2xkL25ldyBmb3Vu ZCBvdXRzaWRlIFJFVFVSTklORyBsaXN0Iik7CisKKwkJCVNldFZhclJldHVybmluZ1R5cGUoKE5v ZGUgKikgbmV3bm9kZSwgcmNvbi0+cmVzdWx0X3JlbGF0aW9uLAorCQkJCQkJCQkwLCB2YXItPnZh cnJldHVybmluZ3R5cGUpOworCisJCQkvKgorCQkJICogSWYgdGhlIHJlcGxhY2VtZW50IGV4cHJl c3Npb24gaW4gdGhlIHRhcmdldGxpc3QgaXMgbm90IHNpbXBseSBhCisJCQkgKiBWYXIgcmVmZXJl bmNpbmcgcmVzdWx0X3JlbGF0aW9uLCB3cmFwIGl0IGluIGEgUmV0dXJuaW5nRXhwcgorCQkJICog bm9kZSwgc28gdGhhdCB0aGUgZXhlY3V0b3IgcmV0dXJucyBOVUxMIGlmIHRoZSBPTEQvTkVXIHJv dyBkb2VzCisJCQkgKiBub3QgZXhpc3QuCisJCQkgKi8KKwkJCWlmICghSXNBKG5ld25vZGUsIFZh cikgfHwKKwkJCQkoKFZhciAqKSBuZXdub2RlKS0+dmFybm8gIT0gcmNvbi0+cmVzdWx0X3JlbGF0 aW9uIHx8CisJCQkJKChWYXIgKikgbmV3bm9kZSktPnZhcmxldmVsc3VwICE9IHZhci0+dmFybGV2 ZWxzdXApCisJCQl7CisJCQkJUmV0dXJuaW5nRXhwciAqcmV4cHIgPSBtYWtlTm9kZShSZXR1cm5p bmdFeHByKTsKKworCQkJCXJleHByLT5yZXRsZXZlbHN1cCA9IDA7CisJCQkJcmV4cHItPnJldG9s ZCA9ICh2YXItPnZhcnJldHVybmluZ3R5cGUgPT0gVkFSX1JFVFVSTklOR19PTEQpOworCQkJCXJl eHByLT5yZXRleHByID0gKEV4cHIgKikgbmV3bm9kZTsKKworCQkJCW5ld25vZGUgPSAoTm9kZSAq KSByZXhwcjsKKwkJCX0KKwkJfQorCiAJCS8qIEluc2VydCBQbGFjZUhvbGRlclZhciBpZiBuZWVk ZWQgKi8KIAkJaWYgKG5lZWRfcGh2KQogCQl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXdy aXRlL3Jld3JpdGVIYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVIYW5kbGVy LmMKaW5kZXggZTk5NmJkYzBkMjEuLmMwN2QzY2UyMDNmIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9yZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdy aXRlSGFuZGxlci5jCkBAIC0yMjA3LDExICsyMjA3LDEwIEBAIGZpcmVSSVJydWxlcyhRdWVyeSAq cGFyc2V0cmVlLCBMaXN0ICphY3RpdmVSSVJzKQogCiAJCSsrcnRfaW5kZXg7CiAKLQkJLyoKLQkJ ICogT25seSBub3JtYWwgcmVsYXRpb25zIGNhbiBoYXZlIFJMUyBwb2xpY2llcyBvciB2aXJ0dWFs IGdlbmVyYXRlZAotCQkgKiBjb2x1bW5zLgotCQkgKi8KLQkJaWYgKHJ0ZS0+cnRla2luZCAhPSBS VEVfUkVMQVRJT04pCisJCS8qIE9ubHkgbm9ybWFsIHJlbGF0aW9ucyBjYW4gaGF2ZSBSTFMgcG9s aWNpZXMgKi8KKwkJaWYgKHJ0ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04gfHwKKwkJCShydGUt PnJlbGtpbmQgIT0gUkVMS0lORF9SRUxBVElPTiAmJgorCQkJIHJ0ZS0+cmVsa2luZCAhPSBSRUxL SU5EX1BBUlRJVElPTkVEX1RBQkxFKSkKIAkJCWNvbnRpbnVlOwogCiAJCXJlbCA9IHRhYmxlX29w ZW4ocnRlLT5yZWxpZCwgTm9Mb2NrKTsKQEAgLTIzMDAsMTYgKzIyOTksNiBAQCBmaXJlUklScnVs ZXMoUXVlcnkgKnBhcnNldHJlZSwgTGlzdCAqYWN0aXZlUklScykKIAkJaWYgKGhhc1N1Ykxpbmtz KQogCQkJcGFyc2V0cmVlLT5oYXNTdWJMaW5rcyA9IHRydWU7CiAKLQkJLyoKLQkJICogRXhwYW5k IGFueSByZWZlcmVuY2VzIHRvIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMgb2YgdGhpcyB0YWJs ZS4KLQkJICogTm90ZSB0aGF0IHN1YnF1ZXJpZXMgaW4gdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1u IGV4cHJlc3Npb25zIGFyZQotCQkgKiBub3QgY3VycmVudGx5IHN1cHBvcnRlZCwgc28gdGhpcyBj YW5ub3QgYWRkIGFueSBtb3JlIHN1YmxpbmtzLgotCQkgKi8KLQkJcGFyc2V0cmVlID0gKFF1ZXJ5 ICopCi0JCQlleHBhbmRfZ2VuZXJhdGVkX2NvbHVtbnNfaW50ZXJuYWwoKE5vZGUgKikgcGFyc2V0 cmVlLAotCQkJCQkJCQkJCQkgIHJlbCwgcnRfaW5kZXgsIHJ0ZSwKLQkJCQkJCQkJCQkJICBwYXJz ZXRyZWUtPnJlc3VsdFJlbGF0aW9uKTsKLQogCQl0YWJsZV9jbG9zZShyZWwsIE5vTG9jayk7CiAJ fQogCkBAIC00NDU2LDM2ICs0NDQ1LDEyIEBAIGV4cGFuZF9nZW5lcmF0ZWRfY29sdW1uc19pbnRl cm5hbChOb2RlICpub2RlLCBSZWxhdGlvbiByZWwsIGludCBydF9pbmRleCwKIAogCQkJaWYgKGF0 dHItPmF0dGdlbmVyYXRlZCA9PSBBVFRSSUJVVEVfR0VORVJBVEVEX1ZJUlRVQUwpCiAJCQl7Ci0J CQkJTm9kZQkgICAqZGVmZXhwcjsKLQkJCQlpbnQJCQlhdHRudW0gPSBpICsgMTsKLQkJCQlPaWQJ CQlhdHRjb2xsaWQ7CiAJCQkJVGFyZ2V0RW50cnkgKnRlOwotCi0JCQkJZGVmZXhwciA9IGJ1aWxk X2NvbHVtbl9kZWZhdWx0KHJlbCwgYXR0bnVtKTsKLQkJCQlpZiAoZGVmZXhwciA9PSBOVUxMKQot CQkJCQllbG9nKEVSUk9SLCAibm8gZ2VuZXJhdGlvbiBleHByZXNzaW9uIGZvdW5kIGZvciBjb2x1 bW4gbnVtYmVyICVkIG9mIHRhYmxlIFwiJXNcIiIsCi0JCQkJCQkgYXR0bnVtLCBSZWxhdGlvbkdl dFJlbGF0aW9uTmFtZShyZWwpKTsKLQotCQkJCS8qCi0JCQkJICogSWYgdGhlIGNvbHVtbiBkZWZp bml0aW9uIGhhcyBhIGNvbGxhdGlvbiBhbmQgaXQgaXMKLQkJCQkgKiBkaWZmZXJlbnQgZnJvbSB0 aGUgY29sbGF0aW9uIG9mIHRoZSBnZW5lcmF0aW9uIGV4cHJlc3Npb24sCi0JCQkJICogcHV0IGEg Q09MTEFURSBjbGF1c2UgYXJvdW5kIHRoZSBleHByZXNzaW9uLgotCQkJCSAqLwotCQkJCWF0dGNv bGxpZCA9IGF0dHItPmF0dGNvbGxhdGlvbjsKLQkJCQlpZiAoYXR0Y29sbGlkICYmIGF0dGNvbGxp ZCAhPSBleHByQ29sbGF0aW9uKGRlZmV4cHIpKQotCQkJCXsKLQkJCQkJQ29sbGF0ZUV4cHIgKmNl ID0gbWFrZU5vZGUoQ29sbGF0ZUV4cHIpOwotCi0JCQkJCWNlLT5hcmcgPSAoRXhwciAqKSBkZWZl eHByOwotCQkJCQljZS0+Y29sbE9pZCA9IGF0dGNvbGxpZDsKLQkJCQkJY2UtPmxvY2F0aW9uID0g LTE7Ci0KLQkJCQkJZGVmZXhwciA9IChOb2RlICopIGNlOwotCQkJCX0KKwkJCQlOb2RlCSAgICpk ZWZleHByID0gYnVpbGRfZ2VuZXJhdGlvbl9leHByZXNzaW9uKHJlbCwgaSArIDEpOwogCiAJCQkJ Q2hhbmdlVmFyTm9kZXMoZGVmZXhwciwgMSwgcnRfaW5kZXgsIDApOwogCi0JCQkJdGUgPSBtYWtl VGFyZ2V0RW50cnkoKEV4cHIgKikgZGVmZXhwciwgYXR0bnVtLCAwLCBmYWxzZSk7CisJCQkJdGUg PSBtYWtlVGFyZ2V0RW50cnkoKEV4cHIgKikgZGVmZXhwciwgaSArIDEsIDAsIGZhbHNlKTsKIAkJ CQl0bGlzdCA9IGxhcHBlbmQodGxpc3QsIHRlKTsKIAkJCX0KIAkJfQpAQCAtNDUyOCw2ICs0NDkz LDQ2IEBAIGV4cGFuZF9nZW5lcmF0ZWRfY29sdW1uc19pbl9leHByKE5vZGUgKm5vZGUsIFJlbGF0 aW9uIHJlbCwgaW50IHJ0X2luZGV4KQogCXJldHVybiBub2RlOwogfQogCisvKgorICogQnVpbGQg dGhlIGdlbmVyYXRpb24gZXhwcmVzc2lvbiBmb3IgdGhlIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVt bi4KKyAqCisgKiBFcnJvciBvdXQgaWYgdGhlcmUgaXMgbm8gZ2VuZXJhdGlvbiBleHByZXNzaW9u IGZvdW5kIGZvciB0aGUgZ2l2ZW4gY29sdW1uLgorICovCitOb2RlICoKK2J1aWxkX2dlbmVyYXRp b25fZXhwcmVzc2lvbihSZWxhdGlvbiByZWwsIGludCBhdHRybm8pCit7CisJVHVwbGVEZXNjCXJk X2F0dCA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKKwlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRfdHVw ID0gVHVwbGVEZXNjQXR0cihyZF9hdHQsIGF0dHJubyAtIDEpOworCU5vZGUJICAgKmRlZmV4cHI7 CisJT2lkCQkJYXR0Y29sbGlkOworCisJQXNzZXJ0KGF0dF90dXAtPmF0dGdlbmVyYXRlZCA9PSBB VFRSSUJVVEVfR0VORVJBVEVEX1ZJUlRVQUwpOworCisJZGVmZXhwciA9IGJ1aWxkX2NvbHVtbl9k ZWZhdWx0KHJlbCwgYXR0cm5vKTsKKwlpZiAoZGVmZXhwciA9PSBOVUxMKQorCQllbG9nKEVSUk9S LCAibm8gZ2VuZXJhdGlvbiBleHByZXNzaW9uIGZvdW5kIGZvciBjb2x1bW4gbnVtYmVyICVkIG9m IHRhYmxlIFwiJXNcIiIsCisJCQkgYXR0cm5vLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwp KTsKKworCS8qCisJICogSWYgdGhlIGNvbHVtbiBkZWZpbml0aW9uIGhhcyBhIGNvbGxhdGlvbiBh bmQgaXQgaXMgZGlmZmVyZW50IGZyb20gdGhlCisJICogY29sbGF0aW9uIG9mIHRoZSBnZW5lcmF0 aW9uIGV4cHJlc3Npb24sIHB1dCBhIENPTExBVEUgY2xhdXNlIGFyb3VuZCB0aGUKKwkgKiBleHBy ZXNzaW9uLgorCSAqLworCWF0dGNvbGxpZCA9IGF0dF90dXAtPmF0dGNvbGxhdGlvbjsKKwlpZiAo YXR0Y29sbGlkICYmIGF0dGNvbGxpZCAhPSBleHByQ29sbGF0aW9uKGRlZmV4cHIpKQorCXsKKwkJ Q29sbGF0ZUV4cHIgKmNlID0gbWFrZU5vZGUoQ29sbGF0ZUV4cHIpOworCisJCWNlLT5hcmcgPSAo RXhwciAqKSBkZWZleHByOworCQljZS0+Y29sbE9pZCA9IGF0dGNvbGxpZDsKKwkJY2UtPmxvY2F0 aW9uID0gLTE7CisKKwkJZGVmZXhwciA9IChOb2RlICopIGNlOworCX0KKworCXJldHVybiBkZWZl eHByOworfQorCiAKIC8qCiAgKiBRdWVyeVJld3JpdGUgLQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcmV3cml0ZS9yZXdyaXRlTWFuaXAuYyBiL3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZU1h bmlwLmMKaW5kZXggOTQzMzU0OGQyNzkuLjY5OTRiOGM1NDI1IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9yZXdyaXRlL3Jld3JpdGVNYW5pcC5jCisrKyBiL3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3 cml0ZU1hbmlwLmMKQEAgLTEwMTAsNyArMTAxMCw3IEBAIFNldFZhclJldHVybmluZ1R5cGVfd2Fs a2VyKE5vZGUgKm5vZGUsIFNldFZhclJldHVybmluZ1R5cGVfY29udGV4dCAqY29udGV4dCkKIAly ZXR1cm4gZXhwcmVzc2lvbl90cmVlX3dhbGtlcihub2RlLCBTZXRWYXJSZXR1cm5pbmdUeXBlX3dh bGtlciwgY29udGV4dCk7CiB9CiAKLXN0YXRpYyB2b2lkCit2b2lkCiBTZXRWYXJSZXR1cm5pbmdU eXBlKE5vZGUgKm5vZGUsIGludCByZXN1bHRfcmVsYXRpb24sIGludCBzdWJsZXZlbHNfdXAsCiAJ CQkJCVZhclJldHVybmluZ1R5cGUgcmV0dXJuaW5nX3R5cGUpCiB7CmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9vcHRpbWl6ZXIvcHJlcC5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3ByZXAuaApp bmRleCAwYWU1N2VjMjRhNC4uMGE2MWNkMTI2YjcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29w dGltaXplci9wcmVwLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3ByZXAuaApAQCAtMjMs NiArMjMsNyBAQAogICovCiBleHRlcm4gdm9pZCB0cmFuc2Zvcm1fTUVSR0VfdG9fam9pbihRdWVy eSAqcGFyc2UpOwogZXh0ZXJuIHZvaWQgcmVwbGFjZV9lbXB0eV9qb2ludHJlZShRdWVyeSAqcGFy c2UpOworZXh0ZXJuIFF1ZXJ5ICpleHBhbmRfdmlydHVhbF9nZW5lcmF0ZWRfY29sdW1ucyhQbGFu bmVySW5mbyAqcm9vdCk7CiBleHRlcm4gdm9pZCBwdWxsX3VwX3N1YmxpbmtzKFBsYW5uZXJJbmZv ICpyb290KTsKIGV4dGVybiB2b2lkIHByZXByb2Nlc3NfZnVuY3Rpb25fcnRlcyhQbGFubmVySW5m byAqcm9vdCk7CiBleHRlcm4gdm9pZCBwdWxsX3VwX3N1YnF1ZXJpZXMoUGxhbm5lckluZm8gKnJv b3QpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmV3cml0ZS9yZXdyaXRlSGFuZGxlci5oIGIv c3JjL2luY2x1ZGUvcmV3cml0ZS9yZXdyaXRlSGFuZGxlci5oCmluZGV4IDg4ZmUxM2M1ZjRmLi45 OWNhYjFhM2JmYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmV3cml0ZS9yZXdyaXRlSGFuZGxl ci5oCisrKyBiL3NyYy9pbmNsdWRlL3Jld3JpdGUvcmV3cml0ZUhhbmRsZXIuaApAQCAtMzksNSAr MzksNiBAQCBleHRlcm4gdm9pZCBlcnJvcl92aWV3X25vdF91cGRhdGFibGUoUmVsYXRpb24gdmll dywKIAkJCQkJCQkJCSBjb25zdCBjaGFyICpkZXRhaWwpOwogCiBleHRlcm4gTm9kZSAqZXhwYW5k X2dlbmVyYXRlZF9jb2x1bW5zX2luX2V4cHIoTm9kZSAqbm9kZSwgUmVsYXRpb24gcmVsLCBpbnQg cnRfaW5kZXgpOworZXh0ZXJuIE5vZGUgKmJ1aWxkX2dlbmVyYXRpb25fZXhwcmVzc2lvbihSZWxh dGlvbiByZWwsIGludCBhdHRybm8pOwogCiAjZW5kaWYJCQkJCQkJLyogUkVXUklURUhBTkRMRVJf SCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmV3cml0ZS9yZXdyaXRlTWFuaXAuaCBiL3Ny Yy9pbmNsdWRlL3Jld3JpdGUvcmV3cml0ZU1hbmlwLmgKaW5kZXggNWVjNDc1YzYzZTkuLjQ2NmVk ZDdjMWMyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXdyaXRlL3Jld3JpdGVNYW5pcC5oCisr KyBiL3NyYy9pbmNsdWRlL3Jld3JpdGUvcmV3cml0ZU1hbmlwLmgKQEAgLTU1LDYgKzU1LDkgQEAg ZXh0ZXJuIHZvaWQgSW5jcmVtZW50VmFyU3VibGV2ZWxzVXAoTm9kZSAqbm9kZSwgaW50IGRlbHRh X3N1YmxldmVsc191cCwKIGV4dGVybiB2b2lkIEluY3JlbWVudFZhclN1YmxldmVsc1VwX3J0YWJs ZShMaXN0ICpydGFibGUsCiAJCQkJCQkJCQkJICAgaW50IGRlbHRhX3N1YmxldmVsc191cCwgaW50 IG1pbl9zdWJsZXZlbHNfdXApOwogCitleHRlcm4gdm9pZCBTZXRWYXJSZXR1cm5pbmdUeXBlKE5v ZGUgKm5vZGUsIGludCByZXN1bHRfcmVsYXRpb24sIGludCBzdWJsZXZlbHNfdXAsCisJCQkJCQkJ CVZhclJldHVybmluZ1R5cGUgcmV0dXJuaW5nX3R5cGUpOworCiBleHRlcm4gYm9vbCByYW5nZVRh YmxlRW50cnlfdXNlZChOb2RlICpub2RlLCBpbnQgcnRfaW5kZXgsCiAJCQkJCQkJCSBpbnQgc3Vi bGV2ZWxzX3VwKTsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9nZW5l cmF0ZWRfdmlydHVhbC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dlbmVyYXRlZF92 aXJ0dWFsLm91dAppbmRleCAzNTYzODgxMmJlOS4uY2IyMzgzNDY5YzYgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ2VuZXJhdGVkX3ZpcnR1YWwub3V0CisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ2VuZXJhdGVkX3ZpcnR1YWwub3V0CkBAIC0xMzk4LDMgKzEz OTgsOTIgQEAgU0VMRUNUIGF0dHJlbGlkLCBhdHRuYW1lLCBhdHRnZW5lcmF0ZWQgRlJPTSBwZ19h dHRyaWJ1dGUgV0hFUkUgYXR0Z2VuZXJhdGVkIE5PVAogLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0KICgwIHJvd3MpCiAKKy0tCistLSB0ZXN0IHRoZSBleHBhbnNpb24gb2Ygdmly dHVhbCBnZW5lcmF0ZWQgY29sdW1ucworLS0KK2NyZWF0ZSB0YWJsZSBndGVzdDMyICgKKyAgYSBp bnQsCisgIGIgaW50IGdlbmVyYXRlZCBhbHdheXMgYXMgKGEgKiAyKSwKKyAgYyBpbnQgZ2VuZXJh dGVkIGFsd2F5cyBhcyAoMTAgKyAxMCksCisgIGQgaW50IGdlbmVyYXRlZCBhbHdheXMgYXMgKGNv YWxlc2NlKGEsIDEwMCkpCispOworaW5zZXJ0IGludG8gZ3Rlc3QzMiB2YWx1ZXMgKDEpLCAoMik7 CistLSBFbnN1cmUgdGhhdCBudWxsaW5ncmVsIGJpdHMgYXJlIHByb3BhZ2F0ZWQgaW50byB0aGUg Z2VuZXJhdGlvbiBleHByZXNzaW9uCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3Qgc3VtKHQy LmIpIG92ZXIgKHBhcnRpdGlvbiBieSB0Mi5hKSwKKyAgICAgICBzdW0odDIuYykgb3ZlciAocGFy dGl0aW9uIGJ5IHQyLmEpLAorICAgICAgIHN1bSh0Mi5kKSBvdmVyIChwYXJ0aXRpb24gYnkgdDIu YSkKK2Zyb20gZ3Rlc3QzMiBhcyB0MSBsZWZ0IGpvaW4gZ3Rlc3QzMiBhcyB0MiBvbiAodDEuYSA9 IHQyLmEpCitvcmRlciBieSB0MS5hOworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTb3J0CisgICBTb3J0IEtleTogdDEuYQorICAgLT4gIFdp bmRvd0FnZworICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiB0Mi5h CisgICAgICAgICAgICAgICAtPiAgTWVyZ2UgTGVmdCBKb2luCisgICAgICAgICAgICAgICAgICAg ICBNZXJnZSBDb25kOiAodDEuYSA9IHQyLmEpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU29y dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHQxLmEKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBndGVzdDMyIHQxCisgICAgICAgICAgICAg ICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHQy LmEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBndGVzdDMyIHQy CisoMTMgcm93cykKKworc2VsZWN0IHN1bSh0Mi5iKSBvdmVyIChwYXJ0aXRpb24gYnkgdDIuYSks CisgICAgICAgc3VtKHQyLmMpIG92ZXIgKHBhcnRpdGlvbiBieSB0Mi5hKSwKKyAgICAgICBzdW0o dDIuZCkgb3ZlciAocGFydGl0aW9uIGJ5IHQyLmEpCitmcm9tIGd0ZXN0MzIgYXMgdDEgbGVmdCBq b2luIGd0ZXN0MzIgYXMgdDIgb24gKHQxLmEgPSB0Mi5hKQorb3JkZXIgYnkgdDEuYTsKKyBzdW0g fCBzdW0gfCBzdW0gCistLS0tLSstLS0tLSstLS0tLQorICAgMiB8ICAyMCB8ICAgMQorICAgNCB8 ICAyMCB8ICAgMgorKDIgcm93cykKKworLS0gRW5zdXJlIHRoYXQgdGhlIGdlbmVyYXRpb24gZXhw cmVzc2lvbnMgYXJlIHdyYXBwZWQgaW50byBQSFZzIGlmIG5lZWRlZAorZXhwbGFpbiAodmVyYm9z ZSwgY29zdHMgb2ZmKQorc2VsZWN0IHQyLiogZnJvbSBndGVzdDMyIHQxIGxlZnQgam9pbiBndGVz dDMyIHQyIG9uIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgIE91dHB1dDogYSwgKGEg KiAyKSwgKDIwKSwgKENPQUxFU0NFKGEsIDEwMCkpCisgICBKb2luIEZpbHRlcjogZmFsc2UKKyAg IC0+ICBTZXEgU2NhbiBvbiBnZW5lcmF0ZWRfdmlydHVhbF90ZXN0cy5ndGVzdDMyIHQxCisgICAg ICAgICBPdXRwdXQ6IHQxLmEsIHQxLmIsIHQxLmMsIHQxLmQKKyAgIC0+ICBSZXN1bHQKKyAgICAg ICAgIE91dHB1dDogYSwgMjAsIENPQUxFU0NFKGEsIDEwMCkKKyAgICAgICAgIE9uZS1UaW1lIEZp bHRlcjogZmFsc2UKKyg4IHJvd3MpCisKK3NlbGVjdCB0Mi4qIGZyb20gZ3Rlc3QzMiB0MSBsZWZ0 IGpvaW4gZ3Rlc3QzMiB0MiBvbiBmYWxzZTsKKyBhIHwgYiB8IGMgfCBkIAorLS0tKy0tLSstLS0r LS0tCisgICB8ICAgfCAgIHwgIAorICAgfCAgIHwgICB8ICAKKygyIHJvd3MpCisKK2V4cGxhaW4g KHZlcmJvc2UsIGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gZ3Rlc3QzMiB0IGdyb3VwIGJ5IGdy b3VwaW5nIHNldHMgKGEsIGIsIGMsIGQpIGhhdmluZyBjID0gMjA7CisgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoQWdncmVnYXRlCisgICBP dXRwdXQ6IGEsICgoYSAqIDIpKSwgKDIwKSwgKENPQUxFU0NFKGEsIDEwMCkpCisgICBIYXNoIEtl eTogdC5hCisgICBIYXNoIEtleTogKHQuYSAqIDIpCisgICBIYXNoIEtleTogMjAKKyAgIEhhc2gg S2V5OiBDT0FMRVNDRSh0LmEsIDEwMCkKKyAgIEZpbHRlcjogKCgyMCkgPSAyMCkKKyAgIC0+ICBT ZXEgU2NhbiBvbiBnZW5lcmF0ZWRfdmlydHVhbF90ZXN0cy5ndGVzdDMyIHQKKyAgICAgICAgIE91 dHB1dDogYSwgKGEgKiAyKSwgMjAsIENPQUxFU0NFKGEsIDEwMCkKKyg5IHJvd3MpCisKK3NlbGVj dCAqIGZyb20gZ3Rlc3QzMiB0IGdyb3VwIGJ5IGdyb3VwaW5nIHNldHMgKGEsIGIsIGMsIGQpIGhh dmluZyBjID0gMjA7CisgYSB8IGIgfCBjICB8IGQgCistLS0rLS0tKy0tLS0rLS0tCisgICB8ICAg fCAyMCB8ICAKKygxIHJvdykKKworZHJvcCB0YWJsZSBndGVzdDMyOwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvZ2VuZXJhdGVkX3ZpcnR1YWwuc3FsIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvZ2VuZXJhdGVkX3ZpcnR1YWwuc3FsCmluZGV4IDM0ODcwODEzOTEwLi4yNWIyOGE4M2Ix YiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2VuZXJhdGVkX3ZpcnR1YWwuc3Fs CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dlbmVyYXRlZF92aXJ0dWFsLnNxbApAQCAtNzMy LDMgKzczMiw0MSBAQCBDUkVBVEUgVEFCTEUgZ3Rlc3QyOGIgKExJS0UgZ3Rlc3QyOGEgSU5DTFVE SU5HIEdFTkVSQVRFRCk7CiAKIC0tIHNhbml0eSBjaGVjayBvZiBzeXN0ZW0gY2F0YWxvZwogU0VM RUNUIGF0dHJlbGlkLCBhdHRuYW1lLCBhdHRnZW5lcmF0ZWQgRlJPTSBwZ19hdHRyaWJ1dGUgV0hF UkUgYXR0Z2VuZXJhdGVkIE5PVCBJTiAoJycsICdzJywgJ3YnKTsKKworLS0KKy0tIHRlc3QgdGhl IGV4cGFuc2lvbiBvZiB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zCistLQorCitjcmVhdGUgdGFi bGUgZ3Rlc3QzMiAoCisgIGEgaW50LAorICBiIGludCBnZW5lcmF0ZWQgYWx3YXlzIGFzIChhICog MiksCisgIGMgaW50IGdlbmVyYXRlZCBhbHdheXMgYXMgKDEwICsgMTApLAorICBkIGludCBnZW5l cmF0ZWQgYWx3YXlzIGFzIChjb2FsZXNjZShhLCAxMDApKQorKTsKKworaW5zZXJ0IGludG8gZ3Rl c3QzMiB2YWx1ZXMgKDEpLCAoMik7CisKKy0tIEVuc3VyZSB0aGF0IG51bGxpbmdyZWwgYml0cyBh cmUgcHJvcGFnYXRlZCBpbnRvIHRoZSBnZW5lcmF0aW9uIGV4cHJlc3Npb24KK2V4cGxhaW4gKGNv c3RzIG9mZikKK3NlbGVjdCBzdW0odDIuYikgb3ZlciAocGFydGl0aW9uIGJ5IHQyLmEpLAorICAg ICAgIHN1bSh0Mi5jKSBvdmVyIChwYXJ0aXRpb24gYnkgdDIuYSksCisgICAgICAgc3VtKHQyLmQp IG92ZXIgKHBhcnRpdGlvbiBieSB0Mi5hKQorZnJvbSBndGVzdDMyIGFzIHQxIGxlZnQgam9pbiBn dGVzdDMyIGFzIHQyIG9uICh0MS5hID0gdDIuYSkKK29yZGVyIGJ5IHQxLmE7CisKK3NlbGVjdCBz dW0odDIuYikgb3ZlciAocGFydGl0aW9uIGJ5IHQyLmEpLAorICAgICAgIHN1bSh0Mi5jKSBvdmVy IChwYXJ0aXRpb24gYnkgdDIuYSksCisgICAgICAgc3VtKHQyLmQpIG92ZXIgKHBhcnRpdGlvbiBi eSB0Mi5hKQorZnJvbSBndGVzdDMyIGFzIHQxIGxlZnQgam9pbiBndGVzdDMyIGFzIHQyIG9uICh0 MS5hID0gdDIuYSkKK29yZGVyIGJ5IHQxLmE7CisKKy0tIEVuc3VyZSB0aGF0IHRoZSBnZW5lcmF0 aW9uIGV4cHJlc3Npb25zIGFyZSB3cmFwcGVkIGludG8gUEhWcyBpZiBuZWVkZWQKK2V4cGxhaW4g KHZlcmJvc2UsIGNvc3RzIG9mZikKK3NlbGVjdCB0Mi4qIGZyb20gZ3Rlc3QzMiB0MSBsZWZ0IGpv aW4gZ3Rlc3QzMiB0MiBvbiBmYWxzZTsKK3NlbGVjdCB0Mi4qIGZyb20gZ3Rlc3QzMiB0MSBsZWZ0 IGpvaW4gZ3Rlc3QzMiB0MiBvbiBmYWxzZTsKKworZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2Zm KQorc2VsZWN0ICogZnJvbSBndGVzdDMyIHQgZ3JvdXAgYnkgZ3JvdXBpbmcgc2V0cyAoYSwgYiwg YywgZCkgaGF2aW5nIGMgPSAyMDsKK3NlbGVjdCAqIGZyb20gZ3Rlc3QzMiB0IGdyb3VwIGJ5IGdy b3VwaW5nIHNldHMgKGEsIGIsIGMsIGQpIGhhdmluZyBjID0gMjA7CisKK2Ryb3AgdGFibGUgZ3Rl c3QzMjsKLS0gCjIuNDMuMAoK --00000000000071b167062ea0ef38 Content-Type: application/octet-stream; name="v5-0002-Eliminate-code-duplication-in-replace_rte_variables-callbacks.patch" Content-Disposition: attachment; filename="v5-0002-Eliminate-code-duplication-in-replace_rte_variables-callbacks.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7edoh1k1 RnJvbSA1YzI1ZGY3NzBlYTE3NzY2ZjJhNzNhMjdhMTY0ZTVlY2Y5OTc0MGIwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAyMSBGZWIgMjAyNSAxNDowMTo1NiArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjUg Mi8yXSBFbGltaW5hdGUgY29kZSBkdXBsaWNhdGlvbiBpbiByZXBsYWNlX3J0ZV92YXJpYWJsZXMK IGNhbGxiYWNrcwoKVGhlIGNhbGxiYWNrIGZ1bmN0aW9ucyBSZXBsYWNlVmFyc0Zyb21UYXJnZXRM aXN0X2NhbGxiYWNrIGFuZApwdWxsdXBfcmVwbGFjZV92YXJzX2NhbGxiYWNrIGFyZSBib3RoIHVz ZWQgdG8gcmVwbGFjZSBWYXJzIGluIGFuCmV4cHJlc3Npb24gdHJlZSB0aGF0IHJlZmVyZW5jZSBh IHBhcnRpY3VsYXIgUlRFIHdpdGggaXRlbXMgZnJvbSBhCnRhcmdldGxpc3QsIGFuZCB0aGV5IGJv dGggbmVlZCB0byBleHBhbmQgd2hvbGUtdHVwbGUgcmVmZXJlbmNlIGFuZApkZWFsIHdpdGggT0xE L05FVyBSRVRVUk5JTkcgbGlzdCBWYXJzLiAgQXMgYSByZXN1bHQsIGN1cnJlbnRseSB0aGVyZQpp cyBzaWduaWZpY2FudCBjb2RlIGR1cGxpY2F0aW9uIGJldHdlZW4gdGhlc2UgdHdvIGZ1bmN0aW9u cy4KClRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiwgUmVwbGFjZVZhckZyb21U YXJnZXRMaXN0LCB0bwpwZXJmb3JtIHRoZSByZXBsYWNlbWVudCBhbmQgY2FsbHMgaXQgZnJvbSBi b3RoIGNhbGxiYWNrIGZ1bmN0aW9ucywKdGhlcmVieSBlbGltaW5hdGluZyBjb2RlIGR1cGxpY2F0 aW9uLgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXBqb2ludHJlZS5jIHwgMTM3 ICsrKystLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZU1hbmlw LmMgICAgICAgIHwgIDgxICsrKysrKysrKy0tLS0KIHNyYy9pbmNsdWRlL3Jld3JpdGUvcmV3cml0 ZU1hbmlwLmggICAgICAgIHwgICA5ICstCiAzIGZpbGVzIGNoYW5nZWQsIDkwIGluc2VydGlvbnMo KyksIDEzNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cHJlcC9wcmVwam9pbnRyZWUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXBqb2lu dHJlZS5jCmluZGV4IDg5YjFmZjJkYjg3Li5iNDFmMTY5ODU1MyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcGpvaW50cmVlLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3ByZXAvcHJlcGpvaW50cmVlLmMKQEAgLTI2NjAsMTI3ICsyNjYwLDM4IEBAIHB1bGx1 cF9yZXBsYWNlX3ZhcnNfY2FsbGJhY2soVmFyICp2YXIsCiAJCS8qIEp1c3QgY29weSB0aGUgZW50 cnkgYW5kIGZhbGwgdGhyb3VnaCB0byBhZGp1c3QgcGhsZXZlbHN1cCBldGMgKi8KIAkJbmV3bm9k ZSA9IGNvcHlPYmplY3QocmNvbi0+cnZfY2FjaGVbdmFyYXR0bm9dKTsKIAl9Ci0JZWxzZSBpZiAo dmFyYXR0bm8gPT0gSW52YWxpZEF0dHJOdW1iZXIpCisJZWxzZQogCXsKLQkJLyogTXVzdCBleHBh bmQgd2hvbGUtdHVwbGUgcmVmZXJlbmNlIGludG8gUm93RXhwciAqLwotCQlSb3dFeHByICAgICpy b3dleHByOwotCQlMaXN0CSAgICpjb2xuYW1lczsKLQkJTGlzdAkgICAqZmllbGRzOwotCQlib29s CQlzYXZlX3dyYXBfbm9uX3ZhcnMgPSByY29uLT53cmFwX25vbl92YXJzOwotCQlpbnQJCQlzYXZl X3N1YmxldmVsc3VwID0gY29udGV4dC0+c3VibGV2ZWxzX3VwOwotCi0JCS8qCi0JCSAqIElmIGdl bmVyYXRpbmcgYW4gZXhwYW5zaW9uIGZvciBhIHZhciBvZiBhIG5hbWVkIHJvd3R5cGUgKGllLCB0 aGlzCi0JCSAqIGlzIGEgcGxhaW4gcmVsYXRpb24gUlRFKSwgdGhlbiB3ZSBtdXN0IGluY2x1ZGUg ZHVtbXkgaXRlbXMgZm9yCi0JCSAqIGRyb3BwZWQgY29sdW1ucy4gIElmIHRoZSB2YXIgaXMgUkVD T1JEIChpZSwgdGhpcyBpcyBhIEpPSU4pLCB0aGVuCi0JCSAqIG9taXQgZHJvcHBlZCBjb2x1bW5z LiAgSW4gdGhlIGxhdHRlciBjYXNlLCBhdHRhY2ggY29sdW1uIG5hbWVzIHRvCi0JCSAqIHRoZSBS b3dFeHByIGZvciB1c2Ugb2YgdGhlIGV4ZWN1dG9yIGFuZCBydWxldXRpbHMuYy4KLQkJICoKLQkJ ICogSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBjYWNoZSB0aGUgcmVzdWx0cywgd2UgYWx3YXlzIGdl bmVyYXRlIHRoZQotCQkgKiBleHBhbnNpb24gd2l0aCB2YXJsZXZlbHN1cCA9IDAsIGFuZCB0aGVu IGFkanVzdCBiZWxvdyBpZiBuZWVkZWQuCi0JCSAqLwotCQlleHBhbmRSVEUocmNvbi0+dGFyZ2V0 X3J0ZSwKLQkJCQkgIHZhci0+dmFybm8sIDAgLyogbm90IHZhcmxldmVsc3VwICovICwKLQkJCQkg IHZhci0+dmFycmV0dXJuaW5ndHlwZSwgdmFyLT5sb2NhdGlvbiwKLQkJCQkgICh2YXItPnZhcnR5 cGUgIT0gUkVDT1JET0lEKSwKLQkJCQkgICZjb2xuYW1lcywgJmZpZWxkcyk7Ci0JCS8qIEV4cGFu ZCB0aGUgZ2VuZXJhdGVkIHBlci1maWVsZCBWYXJzLCBidXQgZG9uJ3QgaW5zZXJ0IFBIVnMgdGhl cmUgKi8KLQkJcmNvbi0+d3JhcF9ub25fdmFycyA9IGZhbHNlOwotCQljb250ZXh0LT5zdWJsZXZl bHNfdXAgPSAwOwkvKiB0byBtYXRjaCB0aGUgZXhwYW5kUlRFIG91dHB1dCAqLwotCQlmaWVsZHMg PSAoTGlzdCAqKSByZXBsYWNlX3J0ZV92YXJpYWJsZXNfbXV0YXRvcigoTm9kZSAqKSBmaWVsZHMs Ci0JCQkJCQkJCQkJCQkJCWNvbnRleHQpOwotCQlyY29uLT53cmFwX25vbl92YXJzID0gc2F2ZV93 cmFwX25vbl92YXJzOwotCQljb250ZXh0LT5zdWJsZXZlbHNfdXAgPSBzYXZlX3N1YmxldmVsc3Vw OwotCi0JCXJvd2V4cHIgPSBtYWtlTm9kZShSb3dFeHByKTsKLQkJcm93ZXhwci0+YXJncyA9IGZp ZWxkczsKLQkJcm93ZXhwci0+cm93X3R5cGVpZCA9IHZhci0+dmFydHlwZTsKLQkJcm93ZXhwci0+ cm93X2Zvcm1hdCA9IENPRVJDRV9JTVBMSUNJVF9DQVNUOwotCQlyb3dleHByLT5jb2xuYW1lcyA9 ICh2YXItPnZhcnR5cGUgPT0gUkVDT1JET0lEKSA/IGNvbG5hbWVzIDogTklMOwotCQlyb3dleHBy LT5sb2NhdGlvbiA9IHZhci0+bG9jYXRpb247Ci0JCW5ld25vZGUgPSAoTm9kZSAqKSByb3dleHBy OwotCi0JCS8qIEhhbmRsZSBhbnkgT0xEL05FVyBSRVRVUk5JTkcgbGlzdCBWYXJzICovCi0JCWlm ICh2YXItPnZhcnJldHVybmluZ3R5cGUgIT0gVkFSX1JFVFVSTklOR19ERUZBVUxUKQotCQl7Ci0J CQlSZXR1cm5pbmdFeHByICpyZXhwciA9IG1ha2VOb2RlKFJldHVybmluZ0V4cHIpOwotCi0JCQly ZXhwci0+cmV0bGV2ZWxzdXAgPSAwOwotCQkJcmV4cHItPnJldG9sZCA9ICh2YXItPnZhcnJldHVy bmluZ3R5cGUgPT0gVkFSX1JFVFVSTklOR19PTEQpOwotCQkJcmV4cHItPnJldGV4cHIgPSAoRXhw ciAqKSBuZXdub2RlOwotCi0JCQluZXdub2RlID0gKE5vZGUgKikgcmV4cHI7Ci0JCX0KLQogCQkv KgotCQkgKiBJbnNlcnQgUGxhY2VIb2xkZXJWYXIgaWYgbmVlZGVkLiAgTm90aWNlIHRoYXQgd2Ug YXJlIHdyYXBwaW5nIG9uZQotCQkgKiBQbGFjZUhvbGRlclZhciBhcm91bmQgdGhlIHdob2xlIFJv d0V4cHIsIHJhdGhlciB0aGFuIHB1dHRpbmcgb25lCi0JCSAqIGFyb3VuZCBlYWNoIGVsZW1lbnQg b2YgdGhlIHJvdy4gIFRoaXMgaXMgYmVjYXVzZSB3ZSBuZWVkIHRoZQotCQkgKiBleHByZXNzaW9u IHRvIHlpZWxkIE5VTEwsIG5vdCBST1coTlVMTCxOVUxMLC4uLikgd2hlbiBpdCBpcyBmb3JjZWQK LQkJICogdG8gbnVsbCBieSBhbiBvdXRlciBqb2luLgorCQkgKiBHZW5lcmF0ZSB0aGUgcmVwbGFj ZW1lbnQgZXhwcmVzc2lvbi4gIFRoaXMgdGFrZXMgY2FyZSBvZiBleHBhbmRpbmcKKwkJICogd2hv bGVyb3cgcmVmZXJlbmNlcyBhbmQgZGVhbGluZyB3aXRoIG5vbi1kZWZhdWx0IHZhcnJldHVybmlu Z3R5cGUuCiAJCSAqLwotCQlpZiAobmVlZF9waHYpCi0JCXsKLQkJCW5ld25vZGUgPSAoTm9kZSAq KQotCQkJCW1ha2VfcGxhY2Vob2xkZXJfZXhwcihyY29uLT5yb290LAotCQkJCQkJCQkJICAoRXhw ciAqKSBuZXdub2RlLAotCQkJCQkJCQkJICBibXNfbWFrZV9zaW5nbGV0b24ocmNvbi0+dmFybm8p KTsKLQkJCS8qIGNhY2hlIGl0IHdpdGggdGhlIFBIViwgYW5kIHdpdGggcGhsZXZlbHN1cCBldGMg bm90IHNldCB5ZXQgKi8KLQkJCXJjb24tPnJ2X2NhY2hlW0ludmFsaWRBdHRyTnVtYmVyXSA9IGNv cHlPYmplY3QobmV3bm9kZSk7Ci0JCX0KLQl9Ci0JZWxzZQotCXsKLQkJLyogTm9ybWFsIGNhc2Ug cmVmZXJlbmNpbmcgb25lIHRhcmdldGxpc3QgZWxlbWVudCAqLwotCQlUYXJnZXRFbnRyeSAqdGxl ID0gZ2V0X3RsZV9ieV9yZXNubyhyY29uLT50YXJnZXRsaXN0LCB2YXJhdHRubyk7Ci0KLQkJaWYg KHRsZSA9PSBOVUxMKQkJLyogc2hvdWxkbid0IGhhcHBlbiAqLwotCQkJZWxvZyhFUlJPUiwgImNv dWxkIG5vdCBmaW5kIGF0dHJpYnV0ZSAlZCBpbiBzdWJxdWVyeSB0YXJnZXRsaXN0IiwKLQkJCQkg dmFyYXR0bm8pOwotCi0JCS8qIE1ha2UgYSBjb3B5IG9mIHRoZSB0bGlzdCBpdGVtIHRvIHJldHVy biAqLwotCQluZXdub2RlID0gKE5vZGUgKikgY29weU9iamVjdCh0bGUtPmV4cHIpOwotCi0JCS8q IEhhbmRsZSBhbnkgT0xEL05FVyBSRVRVUk5JTkcgbGlzdCBWYXJzICovCi0JCWlmICh2YXItPnZh cnJldHVybmluZ3R5cGUgIT0gVkFSX1JFVFVSTklOR19ERUZBVUxUKQotCQl7Ci0JCQkvKgotCQkJ ICogQ29weSB2YXJyZXR1cm5pbmd0eXBlIG9udG8gYW55IFZhcnMgaW4gdGhlIHRsaXN0IGl0ZW0g dGhhdAotCQkJICogcmVmZXIgdG8gcmVzdWx0X3JlbGF0aW9uICh3aGljaCBoYWQgYmV0dGVyIGJl IG5vbi16ZXJvKS4KLQkJCSAqLwotCQkJaWYgKHJjb24tPnJlc3VsdF9yZWxhdGlvbiA9PSAwKQot CQkJCWVsb2coRVJST1IsICJ2YXJpYWJsZSByZXR1cm5pbmcgb2xkL25ldyBmb3VuZCBvdXRzaWRl IFJFVFVSTklORyBsaXN0Iik7Ci0KLQkJCVNldFZhclJldHVybmluZ1R5cGUoKE5vZGUgKikgbmV3 bm9kZSwgcmNvbi0+cmVzdWx0X3JlbGF0aW9uLAotCQkJCQkJCQkwLCB2YXItPnZhcnJldHVybmlu Z3R5cGUpOwotCi0JCQkvKgotCQkJICogSWYgdGhlIHJlcGxhY2VtZW50IGV4cHJlc3Npb24gaW4g dGhlIHRhcmdldGxpc3QgaXMgbm90IHNpbXBseSBhCi0JCQkgKiBWYXIgcmVmZXJlbmNpbmcgcmVz dWx0X3JlbGF0aW9uLCB3cmFwIGl0IGluIGEgUmV0dXJuaW5nRXhwcgotCQkJICogbm9kZSwgc28g dGhhdCB0aGUgZXhlY3V0b3IgcmV0dXJucyBOVUxMIGlmIHRoZSBPTEQvTkVXIHJvdyBkb2VzCi0J CQkgKiBub3QgZXhpc3QuCi0JCQkgKi8KLQkJCWlmICghSXNBKG5ld25vZGUsIFZhcikgfHwKLQkJ CQkoKFZhciAqKSBuZXdub2RlKS0+dmFybm8gIT0gcmNvbi0+cmVzdWx0X3JlbGF0aW9uIHx8Ci0J CQkJKChWYXIgKikgbmV3bm9kZSktPnZhcmxldmVsc3VwICE9IHZhci0+dmFybGV2ZWxzdXApCi0J CQl7Ci0JCQkJUmV0dXJuaW5nRXhwciAqcmV4cHIgPSBtYWtlTm9kZShSZXR1cm5pbmdFeHByKTsK LQotCQkJCXJleHByLT5yZXRsZXZlbHN1cCA9IDA7Ci0JCQkJcmV4cHItPnJldG9sZCA9ICh2YXIt PnZhcnJldHVybmluZ3R5cGUgPT0gVkFSX1JFVFVSTklOR19PTEQpOwotCQkJCXJleHByLT5yZXRl eHByID0gKEV4cHIgKikgbmV3bm9kZTsKLQotCQkJCW5ld25vZGUgPSAoTm9kZSAqKSByZXhwcjsK LQkJCX0KLQkJfQorCQluZXdub2RlID0gUmVwbGFjZVZhckZyb21UYXJnZXRMaXN0KHZhciwKKwkJ CQkJCQkJCQkgICByY29uLT50YXJnZXRfcnRlLAorCQkJCQkJCQkJCSAgIHJjb24tPnRhcmdldGxp c3QsCisJCQkJCQkJCQkJICAgcmNvbi0+cmVzdWx0X3JlbGF0aW9uLAorCQkJCQkJCQkJCSAgIFJF UExBQ0VWQVJTX1JFUE9SVF9FUlJPUiwKKwkJCQkJCQkJCQkgICAwKTsKIAogCQkvKiBJbnNlcnQg UGxhY2VIb2xkZXJWYXIgaWYgbmVlZGVkICovCiAJCWlmIChuZWVkX3BodikKIAkJewogCQkJYm9v bAkJd3JhcDsKIAotCQkJaWYgKG5ld25vZGUgJiYgSXNBKG5ld25vZGUsIFZhcikgJiYKLQkJCQko KFZhciAqKSBuZXdub2RlKS0+dmFybGV2ZWxzdXAgPT0gMCkKKwkJCWlmICh2YXJhdHRubyA9PSBJ bnZhbGlkQXR0ck51bWJlcikKKwkJCXsKKwkJCQkvKgorCQkJCSAqIEluc2VydCBQbGFjZUhvbGRl clZhciBmb3Igd2hvbGUtdHVwbGUgcmVmZXJlbmNlLiAgTm90aWNlCisJCQkJICogdGhhdCB3ZSBh cmUgd3JhcHBpbmcgb25lIFBsYWNlSG9sZGVyVmFyIGFyb3VuZCB0aGUgd2hvbGUKKwkJCQkgKiBS b3dFeHByLCByYXRoZXIgdGhhbiBwdXR0aW5nIG9uZSBhcm91bmQgZWFjaCBlbGVtZW50IG9mIHRo ZQorCQkJCSAqIHJvdy4gIFRoaXMgaXMgYmVjYXVzZSB3ZSBuZWVkIHRoZSBleHByZXNzaW9uIHRv IHlpZWxkIE5VTEwsCisJCQkJICogbm90IFJPVyhOVUxMLE5VTEwsLi4uKSB3aGVuIGl0IGlzIGZv cmNlZCB0byBudWxsIGJ5IGFuCisJCQkJICogb3V0ZXIgam9pbi4KKwkJCQkgKi8KKwkJCQl3cmFw ID0gdHJ1ZTsKKwkJCX0KKwkJCWVsc2UgaWYgKG5ld25vZGUgJiYgSXNBKG5ld25vZGUsIFZhcikg JiYKKwkJCQkJICgoVmFyICopIG5ld25vZGUpLT52YXJsZXZlbHN1cCA9PSAwKQogCQkJewogCQkJ CS8qCiAJCQkJICogU2ltcGxlIFZhcnMgYWx3YXlzIGVzY2FwZSBiZWluZyB3cmFwcGVkLCB1bmxl c3MgdGhleSBhcmUKQEAgLTI5MjYsNyArMjgzNyw3IEBAIHB1bGx1cF9yZXBsYWNlX3ZhcnNfY2Fs bGJhY2soVmFyICp2YXIsCiAJCQkJICogQ2FjaGUgaXQgaWYgcG9zc2libGUgKGllLCBpZiB0aGUg YXR0bm8gaXMgaW4gcmFuZ2UsIHdoaWNoCiAJCQkJICogaXQgcHJvYmFibHkgYWx3YXlzIHNob3Vs ZCBiZSkuCiAJCQkJICovCi0JCQkJaWYgKHZhcmF0dG5vID4gSW52YWxpZEF0dHJOdW1iZXIgJiYK KwkJCQlpZiAodmFyYXR0bm8gPj0gSW52YWxpZEF0dHJOdW1iZXIgJiYKIAkJCQkJdmFyYXR0bm8g PD0gbGlzdF9sZW5ndGgocmNvbi0+dGFyZ2V0bGlzdCkpCiAJCQkJCXJjb24tPnJ2X2NhY2hlW3Zh cmF0dG5vXSA9IGNvcHlPYmplY3QobmV3bm9kZSk7CiAJCQl9CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9yZXdyaXRlL3Jld3JpdGVNYW5pcC5jIGIvc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRl TWFuaXAuYwppbmRleCA2OTk0YjhjNTQyNS4uZGZkZDVlZWM2NmIgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3Jld3JpdGUvcmV3cml0ZU1hbmlwLmMKKysrIGIvc3JjL2JhY2tlbmQvcmV3cml0ZS9y ZXdyaXRlTWFuaXAuYwpAQCAtMTAxMCw3ICsxMDEwLDcgQEAgU2V0VmFyUmV0dXJuaW5nVHlwZV93 YWxrZXIoTm9kZSAqbm9kZSwgU2V0VmFyUmV0dXJuaW5nVHlwZV9jb250ZXh0ICpjb250ZXh0KQog CXJldHVybiBleHByZXNzaW9uX3RyZWVfd2Fsa2VyKG5vZGUsIFNldFZhclJldHVybmluZ1R5cGVf d2Fsa2VyLCBjb250ZXh0KTsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIFNldFZhclJldHVybmlu Z1R5cGUoTm9kZSAqbm9kZSwgaW50IHJlc3VsdF9yZWxhdGlvbiwgaW50IHN1YmxldmVsc191cCwK IAkJCQkJVmFyUmV0dXJuaW5nVHlwZSByZXR1cm5pbmdfdHlwZSkKIHsKQEAgLTE4MTQsNiArMTgx NCwzMCBAQCBSZXBsYWNlVmFyc0Zyb21UYXJnZXRMaXN0X2NhbGxiYWNrKFZhciAqdmFyLAogCQkJ CQkJCQkgICByZXBsYWNlX3J0ZV92YXJpYWJsZXNfY29udGV4dCAqY29udGV4dCkKIHsKIAlSZXBs YWNlVmFyc0Zyb21UYXJnZXRMaXN0X2NvbnRleHQgKnJjb24gPSAoUmVwbGFjZVZhcnNGcm9tVGFy Z2V0TGlzdF9jb250ZXh0ICopIGNvbnRleHQtPmNhbGxiYWNrX2FyZzsKKwlOb2RlCSAgICpuZXdu b2RlOworCisJbmV3bm9kZSA9IFJlcGxhY2VWYXJGcm9tVGFyZ2V0TGlzdCh2YXIsCisJCQkJCQkJ CQkgICByY29uLT50YXJnZXRfcnRlLAorCQkJCQkJCQkJICAgcmNvbi0+dGFyZ2V0bGlzdCwKKwkJ CQkJCQkJCSAgIHJjb24tPnJlc3VsdF9yZWxhdGlvbiwKKwkJCQkJCQkJCSAgIHJjb24tPm5vbWF0 Y2hfb3B0aW9uLAorCQkJCQkJCQkJICAgcmNvbi0+bm9tYXRjaF92YXJubyk7CisKKwkvKiBNdXN0 IGFkanVzdCB2YXJsZXZlbHN1cCBpZiByZXBsYWNlZCBWYXIgaXMgd2l0aGluIGEgc3VicXVlcnkg Ki8KKwlpZiAodmFyLT52YXJsZXZlbHN1cCA+IDApCisJCUluY3JlbWVudFZhclN1YmxldmVsc1Vw KG5ld25vZGUsIHZhci0+dmFybGV2ZWxzdXAsIDApOworCisJcmV0dXJuIG5ld25vZGU7Cit9CisK K05vZGUgKgorUmVwbGFjZVZhckZyb21UYXJnZXRMaXN0KFZhciAqdmFyLAorCQkJCQkJIFJhbmdl VGJsRW50cnkgKnRhcmdldF9ydGUsCisJCQkJCQkgTGlzdCAqdGFyZ2V0bGlzdCwKKwkJCQkJCSBp bnQgcmVzdWx0X3JlbGF0aW9uLAorCQkJCQkJIFJlcGxhY2VWYXJzTm9NYXRjaE9wdGlvbiBub21h dGNoX29wdGlvbiwKKwkJCQkJCSBpbnQgbm9tYXRjaF92YXJubykKK3sKIAlUYXJnZXRFbnRyeSAq dGxlOwogCiAJaWYgKHZhci0+dmFyYXR0bm8gPT0gSW52YWxpZEF0dHJOdW1iZXIpCkBAIC0xODIy LDYgKzE4NDYsNyBAQCBSZXBsYWNlVmFyc0Zyb21UYXJnZXRMaXN0X2NhbGxiYWNrKFZhciAqdmFy LAogCQlSb3dFeHByICAgICpyb3dleHByOwogCQlMaXN0CSAgICpjb2xuYW1lczsKIAkJTGlzdAkg ICAqZmllbGRzOworCQlMaXN0Q2VsbCAgICpsYzsKIAogCQkvKgogCQkgKiBJZiBnZW5lcmF0aW5n IGFuIGV4cGFuc2lvbiBmb3IgYSB2YXIgb2YgYSBuYW1lZCByb3d0eXBlIChpZSwgdGhpcwpAQCAt MTgzMCwyOSArMTg1NSw0NiBAQCBSZXBsYWNlVmFyc0Zyb21UYXJnZXRMaXN0X2NhbGxiYWNrKFZh ciAqdmFyLAogCQkgKiBvbWl0IGRyb3BwZWQgY29sdW1ucy4gIEluIHRoZSBsYXR0ZXIgY2FzZSwg YXR0YWNoIGNvbHVtbiBuYW1lcyB0bwogCQkgKiB0aGUgUm93RXhwciBmb3IgdXNlIG9mIHRoZSBl eGVjdXRvciBhbmQgcnVsZXV0aWxzLmMuCiAJCSAqCisJCSAqIEluIG9yZGVyIHRvIGJlIGFibGUg dG8gY2FjaGUgdGhlIHJlc3VsdHMsIHdlIGFsd2F5cyBnZW5lcmF0ZSB0aGUKKwkJICogZXhwYW5z aW9uIHdpdGggdmFybGV2ZWxzdXAgPSAwLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IK KwkJICogYWRqdXN0aW5nIGl0IGlmIG5lZWRlZC4KKwkJICoKIAkJICogVGhlIHZhcnJldHVybmlu Z3R5cGUgaXMgY29waWVkIG9udG8gZWFjaCBpbmRpdmlkdWFsIGZpZWxkIFZhciwgc28KIAkJICog dGhhdCBpdCBpcyBoYW5kbGVkIGNvcnJlY3RseSB3aGVuIHdlIHJlY3Vyc2UuCiAJCSAqLwotCQll eHBhbmRSVEUocmNvbi0+dGFyZ2V0X3J0ZSwKLQkJCQkgIHZhci0+dmFybm8sIHZhci0+dmFybGV2 ZWxzdXAsIHZhci0+dmFycmV0dXJuaW5ndHlwZSwKLQkJCQkgIHZhci0+bG9jYXRpb24sICh2YXIt PnZhcnR5cGUgIT0gUkVDT1JET0lEKSwKKwkJZXhwYW5kUlRFKHRhcmdldF9ydGUsCisJCQkJICB2 YXItPnZhcm5vLCAwIC8qIG5vdCB2YXJsZXZlbHN1cCAqLyAsCisJCQkJICB2YXItPnZhcnJldHVy bmluZ3R5cGUsIHZhci0+bG9jYXRpb24sCisJCQkJICAodmFyLT52YXJ0eXBlICE9IFJFQ09SRE9J RCksCiAJCQkJICAmY29sbmFtZXMsICZmaWVsZHMpOwotCQkvKiBBZGp1c3QgdGhlIGdlbmVyYXRl ZCBwZXItZmllbGQgVmFycy4uLiAqLwotCQlmaWVsZHMgPSAoTGlzdCAqKSByZXBsYWNlX3J0ZV92 YXJpYWJsZXNfbXV0YXRvcigoTm9kZSAqKSBmaWVsZHMsCi0JCQkJCQkJCQkJCQkJCWNvbnRleHQp OwogCQlyb3dleHByID0gbWFrZU5vZGUoUm93RXhwcik7Ci0JCXJvd2V4cHItPmFyZ3MgPSBmaWVs ZHM7CisJCS8qIHRoZSBmaWVsZHMgd2lsbCBiZSBzZXQgYmVsb3cgKi8KKwkJcm93ZXhwci0+YXJn cyA9IE5JTDsKIAkJcm93ZXhwci0+cm93X3R5cGVpZCA9IHZhci0+dmFydHlwZTsKIAkJcm93ZXhw ci0+cm93X2Zvcm1hdCA9IENPRVJDRV9JTVBMSUNJVF9DQVNUOwogCQlyb3dleHByLT5jb2xuYW1l cyA9ICh2YXItPnZhcnR5cGUgPT0gUkVDT1JET0lEKSA/IGNvbG5hbWVzIDogTklMOwogCQlyb3dl eHByLT5sb2NhdGlvbiA9IHZhci0+bG9jYXRpb247CisJCS8qIEFkanVzdCB0aGUgZ2VuZXJhdGVk IHBlci1maWVsZCBWYXJzLi4uICovCisJCWZvcmVhY2gobGMsIGZpZWxkcykKKwkJeworCQkJTm9k ZQkgICAqZmllbGQgPSBsZmlyc3QobGMpOworCisJCQlpZiAoZmllbGQgJiYgSXNBKGZpZWxkLCBW YXIpKQorCQkJCWZpZWxkID0gUmVwbGFjZVZhckZyb21UYXJnZXRMaXN0KChWYXIgKikgZmllbGQs CisJCQkJCQkJCQkJCQkgdGFyZ2V0X3J0ZSwKKwkJCQkJCQkJCQkJCSB0YXJnZXRsaXN0LAorCQkJ CQkJCQkJCQkJIHJlc3VsdF9yZWxhdGlvbiwKKwkJCQkJCQkJCQkJCSBub21hdGNoX29wdGlvbiwK KwkJCQkJCQkJCQkJCSBub21hdGNoX3Zhcm5vKTsKKwkJCXJvd2V4cHItPmFyZ3MgPSBsYXBwZW5k KHJvd2V4cHItPmFyZ3MsIGZpZWxkKTsKKwkJfQogCiAJCS8qIFdyYXAgaXQgaW4gYSBSZXR1cm5p bmdFeHByLCBpZiBuZWVkZWQsIHBlciBjb21tZW50cyBhYm92ZSAqLwogCQlpZiAodmFyLT52YXJy ZXR1cm5pbmd0eXBlICE9IFZBUl9SRVRVUk5JTkdfREVGQVVMVCkKIAkJewogCQkJUmV0dXJuaW5n RXhwciAqcmV4cHIgPSBtYWtlTm9kZShSZXR1cm5pbmdFeHByKTsKIAotCQkJcmV4cHItPnJldGxl dmVsc3VwID0gdmFyLT52YXJsZXZlbHN1cDsKKwkJCXJleHByLT5yZXRsZXZlbHN1cCA9IDA7CiAJ CQlyZXhwci0+cmV0b2xkID0gKHZhci0+dmFycmV0dXJuaW5ndHlwZSA9PSBWQVJfUkVUVVJOSU5H X09MRCk7CiAJCQlyZXhwci0+cmV0ZXhwciA9IChFeHByICopIHJvd2V4cHI7CiAKQEAgLTE4NjMs MTIgKzE5MDUsMTIgQEAgUmVwbGFjZVZhcnNGcm9tVGFyZ2V0TGlzdF9jYWxsYmFjayhWYXIgKnZh ciwKIAl9CiAKIAkvKiBOb3JtYWwgY2FzZSByZWZlcmVuY2luZyBvbmUgdGFyZ2V0bGlzdCBlbGVt ZW50ICovCi0JdGxlID0gZ2V0X3RsZV9ieV9yZXNubyhyY29uLT50YXJnZXRsaXN0LCB2YXItPnZh cmF0dG5vKTsKKwl0bGUgPSBnZXRfdGxlX2J5X3Jlc25vKHRhcmdldGxpc3QsIHZhci0+dmFyYXR0 bm8pOwogCiAJaWYgKHRsZSA9PSBOVUxMIHx8IHRsZS0+cmVzanVuaykKIAl7CiAJCS8qIEZhaWxl ZCB0byBmaW5kIGNvbHVtbiBpbiB0YXJnZXRsaXN0ICovCi0JCXN3aXRjaCAocmNvbi0+bm9tYXRj aF9vcHRpb24pCisJCXN3aXRjaCAobm9tYXRjaF9vcHRpb24pCiAJCXsKIAkJCWNhc2UgUkVQTEFD RVZBUlNfUkVQT1JUX0VSUk9SOgogCQkJCS8qIGZhbGwgdGhyb3VnaCwgdGhyb3cgZXJyb3IgYmVs b3cgKi8KQEAgLTE4NzYsNyArMTkxOCw4IEBAIFJlcGxhY2VWYXJzRnJvbVRhcmdldExpc3RfY2Fs bGJhY2soVmFyICp2YXIsCiAKIAkJCWNhc2UgUkVQTEFDRVZBUlNfQ0hBTkdFX1ZBUk5POgogCQkJ CXZhciA9IGNvcHlPYmplY3QodmFyKTsKLQkJCQl2YXItPnZhcm5vID0gcmNvbi0+bm9tYXRjaF92 YXJubzsKKwkJCQl2YXItPnZhcm5vID0gbm9tYXRjaF92YXJubzsKKwkJCQl2YXItPnZhcmxldmVs c3VwID0gMDsKIAkJCQkvKiB3ZSBsZWF2ZSB0aGUgc3ludGFjdGljIHJlZmVyZW50IGFsb25lICov CiAJCQkJcmV0dXJuIChOb2RlICopIHZhcjsKIApAQCAtMTkwNiwxMCArMTk0OSw2IEBAIFJlcGxh Y2VWYXJzRnJvbVRhcmdldExpc3RfY2FsbGJhY2soVmFyICp2YXIsCiAJCS8qIE1ha2UgYSBjb3B5 IG9mIHRoZSB0bGlzdCBpdGVtIHRvIHJldHVybiAqLwogCQlFeHByCSAgICpuZXdub2RlID0gY29w eU9iamVjdCh0bGUtPmV4cHIpOwogCi0JCS8qIE11c3QgYWRqdXN0IHZhcmxldmVsc3VwIGlmIHRs aXN0IGl0ZW0gaXMgZnJvbSBoaWdoZXIgcXVlcnkgKi8KLQkJaWYgKHZhci0+dmFybGV2ZWxzdXAg PiAwKQotCQkJSW5jcmVtZW50VmFyU3VibGV2ZWxzVXAoKE5vZGUgKikgbmV3bm9kZSwgdmFyLT52 YXJsZXZlbHN1cCwgMCk7Ci0KIAkJLyoKIAkJICogQ2hlY2sgdG8gc2VlIGlmIHRoZSB0bGlzdCBp dGVtIGNvbnRhaW5zIGEgUEFSQU1fTVVMVElFWFBSIFBhcmFtLAogCQkgKiBhbmQgdGhyb3cgZXJy b3IgaWYgc28uICBUaGlzIGNhc2UgY291bGQgb25seSBoYXBwZW4gd2hlbiBleHBhbmRpbmcKQEAg LTE5MzIsMjAgKzE5NzEsMjAgQEAgUmVwbGFjZVZhcnNGcm9tVGFyZ2V0TGlzdF9jYWxsYmFjayhW YXIgKnZhciwKIAkJCSAqIENvcHkgdmFycmV0dXJuaW5ndHlwZSBvbnRvIGFueSBWYXJzIGluIHRo ZSB0bGlzdCBpdGVtIHRoYXQKIAkJCSAqIHJlZmVyIHRvIHJlc3VsdF9yZWxhdGlvbiAod2hpY2gg aGFkIGJldHRlciBiZSBub24temVybykuCiAJCQkgKi8KLQkJCWlmIChyY29uLT5yZXN1bHRfcmVs YXRpb24gPT0gMCkKKwkJCWlmIChyZXN1bHRfcmVsYXRpb24gPT0gMCkKIAkJCQllbG9nKEVSUk9S LCAidmFyaWFibGUgcmV0dXJuaW5nIG9sZC9uZXcgZm91bmQgb3V0c2lkZSBSRVRVUk5JTkcgbGlz dCIpOwogCi0JCQlTZXRWYXJSZXR1cm5pbmdUeXBlKChOb2RlICopIG5ld25vZGUsIHJjb24tPnJl c3VsdF9yZWxhdGlvbiwKLQkJCQkJCQkJdmFyLT52YXJsZXZlbHN1cCwgdmFyLT52YXJyZXR1cm5p bmd0eXBlKTsKKwkJCVNldFZhclJldHVybmluZ1R5cGUoKE5vZGUgKikgbmV3bm9kZSwgcmVzdWx0 X3JlbGF0aW9uLAorCQkJCQkJCQkwLCB2YXItPnZhcnJldHVybmluZ3R5cGUpOwogCiAJCQkvKiBX cmFwIGl0IGluIGEgUmV0dXJuaW5nRXhwciwgaWYgbmVlZGVkLCBwZXIgY29tbWVudHMgYWJvdmUg Ki8KIAkJCWlmICghSXNBKG5ld25vZGUsIFZhcikgfHwKLQkJCQkoKFZhciAqKSBuZXdub2RlKS0+ dmFybm8gIT0gcmNvbi0+cmVzdWx0X3JlbGF0aW9uIHx8CisJCQkJKChWYXIgKikgbmV3bm9kZSkt PnZhcm5vICE9IHJlc3VsdF9yZWxhdGlvbiB8fAogCQkJCSgoVmFyICopIG5ld25vZGUpLT52YXJs ZXZlbHN1cCAhPSB2YXItPnZhcmxldmVsc3VwKQogCQkJewogCQkJCVJldHVybmluZ0V4cHIgKnJl eHByID0gbWFrZU5vZGUoUmV0dXJuaW5nRXhwcik7CiAKLQkJCQlyZXhwci0+cmV0bGV2ZWxzdXAg PSB2YXItPnZhcmxldmVsc3VwOworCQkJCXJleHByLT5yZXRsZXZlbHN1cCA9IDA7CiAJCQkJcmV4 cHItPnJldG9sZCA9ICh2YXItPnZhcnJldHVybmluZ3R5cGUgPT0gVkFSX1JFVFVSTklOR19PTEQp OwogCQkJCXJleHByLT5yZXRleHByID0gbmV3bm9kZTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvcmV3cml0ZS9yZXdyaXRlTWFuaXAuaCBiL3NyYy9pbmNsdWRlL3Jld3JpdGUvcmV3cml0ZU1h bmlwLmgKaW5kZXggNDY2ZWRkN2MxYzIuLmVhMzkwODczOWM2IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9yZXdyaXRlL3Jld3JpdGVNYW5pcC5oCisrKyBiL3NyYy9pbmNsdWRlL3Jld3JpdGUvcmV3 cml0ZU1hbmlwLmgKQEAgLTU1LDkgKzU1LDYgQEAgZXh0ZXJuIHZvaWQgSW5jcmVtZW50VmFyU3Vi bGV2ZWxzVXAoTm9kZSAqbm9kZSwgaW50IGRlbHRhX3N1YmxldmVsc191cCwKIGV4dGVybiB2b2lk IEluY3JlbWVudFZhclN1YmxldmVsc1VwX3J0YWJsZShMaXN0ICpydGFibGUsCiAJCQkJCQkJCQkJ ICAgaW50IGRlbHRhX3N1YmxldmVsc191cCwgaW50IG1pbl9zdWJsZXZlbHNfdXApOwogCi1leHRl cm4gdm9pZCBTZXRWYXJSZXR1cm5pbmdUeXBlKE5vZGUgKm5vZGUsIGludCByZXN1bHRfcmVsYXRp b24sIGludCBzdWJsZXZlbHNfdXAsCi0JCQkJCQkJCVZhclJldHVybmluZ1R5cGUgcmV0dXJuaW5n X3R5cGUpOwotCiBleHRlcm4gYm9vbCByYW5nZVRhYmxlRW50cnlfdXNlZChOb2RlICpub2RlLCBp bnQgcnRfaW5kZXgsCiAJCQkJCQkJCSBpbnQgc3VibGV2ZWxzX3VwKTsKIApAQCAtOTIsNiArODks MTIgQEAgZXh0ZXJuIE5vZGUgKm1hcF92YXJpYWJsZV9hdHRub3MoTm9kZSAqbm9kZSwKIAkJCQkJ CQkJIGNvbnN0IHN0cnVjdCBBdHRyTWFwICphdHRub19tYXAsCiAJCQkJCQkJCSBPaWQgdG9fcm93 dHlwZSwgYm9vbCAqZm91bmRfd2hvbGVfcm93KTsKIAorZXh0ZXJuIE5vZGUgKlJlcGxhY2VWYXJG cm9tVGFyZ2V0TGlzdChWYXIgKnZhciwKKwkJCQkJCQkJCSAgUmFuZ2VUYmxFbnRyeSAqdGFyZ2V0 X3J0ZSwKKwkJCQkJCQkJCSAgTGlzdCAqdGFyZ2V0bGlzdCwKKwkJCQkJCQkJCSAgaW50IHJlc3Vs dF9yZWxhdGlvbiwKKwkJCQkJCQkJCSAgUmVwbGFjZVZhcnNOb01hdGNoT3B0aW9uIG5vbWF0Y2hf b3B0aW9uLAorCQkJCQkJCQkJICBpbnQgbm9tYXRjaF92YXJubyk7CiBleHRlcm4gTm9kZSAqUmVw bGFjZVZhcnNGcm9tVGFyZ2V0TGlzdChOb2RlICpub2RlLAogCQkJCQkJCQkJICAgaW50IHRhcmdl dF92YXJubywgaW50IHN1YmxldmVsc191cCwKIAkJCQkJCQkJCSAgIFJhbmdlVGJsRW50cnkgKnRh cmdldF9ydGUsCi0tIAoyLjQzLjAKCg== --00000000000071b167062ea0ef38--