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 1ty6Fu-002OSr-LJ for pgsql-hackers@arkaria.postgresql.org; Fri, 28 Mar 2025 09:44:03 +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 1ty6Fs-006qse-GI for pgsql-hackers@arkaria.postgresql.org; Fri, 28 Mar 2025 09:44:00 +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 1ty6Fr-006qn7-Pp for pgsql-hackers@lists.postgresql.org; Fri, 28 Mar 2025 09:44:00 +0000 Received: from mail-yw1-x1130.google.com ([2607:f8b0:4864:20::1130]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1ty6Fp-001bCU-2v for pgsql-hackers@lists.postgresql.org; Fri, 28 Mar 2025 09:43:58 +0000 Received: by mail-yw1-x1130.google.com with SMTP id 00721157ae682-6ff27ad48beso19544707b3.0 for ; Fri, 28 Mar 2025 02:43:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1743155037; x=1743759837; darn=lists.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=Yc4wrgsAoIh5TVCd8FVqza8gdXj+SleoKYmdxxDfWa8=; b=cLJpehxLeLOHtswDxDPYVOikp81ElnFxRLCb/Rj4qN9guLf5M7OTyxs5B+WvlpuGb/ RvTwFEUj6RNV5fSniPmndHRSTvFaEKRHLbaqHolHuU2fcQkqvx3VPdA18g7WBU9PwcIh mtT3f0IeJYNjMrCcSsrJCYU2FKkWTf8qG4U3UNwbJHaDpv1zhVvO+XKIPPr8PvKw+Svg mQpg0zWDLDXJNf/DFD2+fRWH+PMNUBQ+vD4XRLp+OcUgJ9/oUn03qrsffZ3DbpI7MGfi kU/qTGnWMLF1GNUncKiTB3GoSXvDJ49CBsBbF8pHToxSozTleSBkaMzT+ek2CXDb37hm /mZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743155037; x=1743759837; 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=Yc4wrgsAoIh5TVCd8FVqza8gdXj+SleoKYmdxxDfWa8=; b=KaHXeHvc5YdqjyZ165s7IM+tdHdsOx/6VUDBX0pFwEZg67r9xRxbFPySpAuJosnrww +0kYDQXUZv2c9N3yg1c5gJwz3YPEODAPX50FuqdUd+5yjHUEs176GiffpOfA8itURSAv qG5dz85T941PaIKpI5xynZMlptRR6YkDWGDhKj4044eZsVecKHVQhDVBuvumc2pGjPfE I7wajB5uG/MQdMPTKfv9ZhBZ+k909r6UW5F+4N3aJedhilYHCw4Qn9aFo/IQ9xkX1ww3 kWGlkD9QPHhBpPPbb33QHV/LPgC5BKTHHDhao503u85eK9kimAFeq/hv4LXK33K1J+hz pxng== X-Forwarded-Encrypted: i=1; AJvYcCVkw4x3+aAQi4F+aT+tETdmIJ92CU/vGBHa3R52oCj81yyIuQxR1ZRzSuhjZG8zG8XUW2tszm5lsw6hwvgX@lists.postgresql.org X-Gm-Message-State: AOJu0YybVuVH7XRCly/aL22+mBaMgcQqElHqdu8+u6D9+cPVMQJVS1C7 dVchuB8gxcLlkE7vjxETLZJqu30J1969qfGrRqhhWwXP/qMfgVOT9WkOrSYkIR35UhajK1z39rA UOhVncV9Gu/MRFr9xgsGyXkrGaGw= X-Gm-Gg: ASbGncujNbJRymFo/Ei8IWRVkFCBPvZmDOAJ02GVDqqULsvDI6KetR+on+Od7xxzwq8 /jsN8NUy0icu2LyVKcyoIdWCNOQRVsWbYpSfXDLBeFgMWxFOR6dnjHRtMkOgkxb+kdnLrm3Q3Na XoQmnhqTQgBOmnT31v1+GCeo2juA3s X-Google-Smtp-Source: AGHT+IHsasljxjFI8vKPZzD3cton41HB/im6v1Zst34W+CBkeTL3eyYn8fOy0ATZS8fji4rGLtkbydix2aYgcmw+q6s= X-Received: by 2002:a05:690c:30f:b0:6fd:a226:fb2b with SMTP id 00721157ae682-70224f21161mr91252887b3.3.1743155036955; Fri, 28 Mar 2025 02:43:56 -0700 (PDT) MIME-Version: 1.0 References: <202503241547.a2moisgqvj73@alvherre.pgsql> In-Reply-To: <202503241547.a2moisgqvj73@alvherre.pgsql> From: Shlok Kyal Date: Fri, 28 Mar 2025 15:13:44 +0530 X-Gm-Features: AQ5f1JovkDELHUhMKahAycSNM4U8HD64AGU-beV4gYzAUqIRWrXTBsBTU7hqv_s Message-ID: Subject: Re: Restrict publishing of partitioned table with a foreign table as partition To: =?UTF-8?Q?=C3=81lvaro_Herrera?= Cc: vignesh C , Sergey Tatarintsev , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000c45e2e063163e86c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000c45e2e063163e86c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, 24 Mar 2025 at 21:17, =C3=81lvaro Herrera = wrote: > > One thing that bothers me a bit about this is that there's no single > code comment where this restriction it documented in full; in fact it > doesn't seem documented anywhere, only in the commit message. > > I think check_foreign_tables() is a good place to add an explanatory > comment; other places can reference that. For instance, add something > like > > /* > * Protect against including foreign tables that are partitions of > * partitioned tables published by the given publication. This would > * not work properly, because , so we disallow > * the case here and in all DDL commands that would end up creating > * such a case indirectly. > */ > > Then for instance in check_publication_add_relation() and > ATExecAttachPartition() you comment would say /* if the would-be > partition is a foreign table, verify that the partitioned table is not > in a publication with publish_via_root=3Dfalse. See check_foreign_tables > for details */ > I have added comments as suggested above. > Also, surely we should document this restriction in the SGML docs > somewhere. > I have added comment in create_publication.sgml > > Would it be better if check_partrel_has_foreign_table() used > RelationGetPartitionDesc(omit_detached=3Dtrue) instead of > find_all_inheritors()? > > I'm wary of all those accesses of subscription/publication catalogs in > DDL code. Maybe I worry about nothing, but I cannot but feel that we're > missing one layer of abstraction there (including possibly some caching > on top of syscache). > I also think using RelationGetPartitionDesc would be better and made the ch= ange. > I think this > castNode(RangeVar, lfirst(list_head(stmt->base.inhRelations))); > is better written > linitial_node(RangeVar, stmt->base.inhRelations); Fixed. I have attached the updated v10 patch with the above changes. Thanks and Regards, Shlok Kyal --000000000000c45e2e063163e86c Content-Type: application/octet-stream; name="v10-0001-Restrict-publishing-of-partitioned-table-with-fo.patch" Content-Disposition: attachment; filename="v10-0001-Restrict-publishing-of-partitioned-table-with-fo.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m8sl7fmm0 RnJvbSBmOGIxM2Y4NWZhYWU2YjhiZDQ1OTRhYzg0NTA0YWM4ZmEwY2Q3N2QwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaGxvayBLeWFsIDxzaGxvay5reWFsLm9zc0BnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMjggTWFyIDIwMjUgMTE6MTU6MDkgKzA1MzAKU3ViamVjdDogW1BBVENIIHYx MF0gUmVzdHJpY3QgcHVibGlzaGluZyBvZiBwYXJ0aXRpb25lZCB0YWJsZSB3aXRoIGZvcmVpZ24K IHBhcnRpdGlvbgoKTG9naWNhbCByZXBsaWNhdGlvbiBvZiBmb3JlaWduIHRhYmxlIGlzIG5vdCBz dXBwb3J0ZWQgYW5kIHdlIHRocm93IGFuCmVycm9yIGluIHRoaXMgY2FzZS4gQnV0IHdoZW4gY3Jl YXRlIGEgcHVibGljYXRpb24gb24gYSBwYXJ0aXRpb25lZAp0YWJsZSB0aGF0IGhhcyBhIGZvcmVp Z24gcGFydGl0aW9uLCB0aGUgaW5pdGlhbCBzeW5jIG9mIHN1Y2ggdGFibGUgaXMKc3VjY2Vzc2Z1 bCBhbmQgd2Ugc2hvdWxkIGF2b2lkIHN1Y2ggY2FzZXMuCgpDdXJyZW50IEJlaGF2aW91ciBpbiBI RUFELCB3aGVuIHB1YmxpY2F0aW9uIGlzIGNyZWF0ZWQ6CjEuIHdpdGggcHVibGlzaF92aWFfcGFy dGl0aW9uX3Jvb3QgPSB0cnVlClJvb3QgdGFibGUgaXMgcHVibGlzaGVkIGFuZCB0aGUgaW5pdGlh bCBkYXRhIG9mIGZvcmVpZ24gcGFydGl0aW9ucwphcmUgcmVwbGljYXRlZC4KCjIuIHdpdGggcHVi bGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZSBhbmQgRk9SIEFMTCBUQUJMRVMKQWxsIGxl YWYgdGFibGVzIGV4Y2VwdCBmb3JlaWduIHBhcnRpdGlvbnMgYXJlIHB1Ymxpc2hlZC4KCjMuIHdp dGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZSBhbmQKRk9SIFRBQkxFLyBGT1Ig VEFCTEVTIElOIFNDSEVNQQpBbGwgbGVhZiB0YWJsZXMgYXJlIHB1Ymxpc2hlZC4gSW5pdGlhbCBk YXRhIG9mIGZvcmVpZ24gcGFydGl0aW9ucyBhcmUKcmVwbGljYXRlZC4KCldpdGggdGhpcyBwYXRj aCB3ZSBoYXZlIGZvbGxvd2luZyBiZWhhdmlvdXI6CjEuIHdpdGggcHVibGlzaF92aWFfcGFydGl0 aW9uX3Jvb3QgPSB0cnVlCldlIHRocm93IGFuIGVycm9yIHdoZW4gd2UgdHJ5IHRvIHB1Ymxpc2gg YSBmb3JlaWduIHBhcnRpdGl0b24uIEVycm9yCmlzIHRocm93biB3aGVuIHdlIHRyeSB0byBjcmVh dGUgYSBwdWJsaWNhdGlvbiBvbiAob3IgYWRkIHRvIGV4aXN0aW5nCnB1YmxpY2F0aW9uKSBhIHBh cnRpdGlvbmVkIHRhYmxlIHdpdGggZm9yZWlnbiBwYXJ0aXRpb24sIHdoZW4gdHJ5IHRvCmNyZWF0 ZSBhIGZvcmVpZ24gcGFydGl0aW9uIGFuZCB3aGVuIHdlIHRyeSB0byBhdHRhY2ggZm9yZWlnbiB0 YWJsZSAob3IKYSB0YWJsZSB3aXRoIGZvcmVpZ24gcGFydGl0aW9uKSB0byBleGlzdGluZyBwdWJs aXNoZWQgdGFibGVzLgoKMi4gd2l0aCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNl CldlIHNraXAgcHVibGlzaGluZyBmb3JlaWduIHBhcnRpdGlvbiB3aGljaCBhcmUgcGFydCBvZiB0 aGUgcHVibGljYXRpb24uClRoaXMgaXMgZG9uZSBieSBhdm9pZCBhZGRpbmcgZm9yZWlnbiBwYXJ0 aXRpb25zIGluIHBnX3N1YnNjcmlwdGlvbl9yZWwKY2F0YWxvZyB0YWJsZS4KCldlIGhhdmUgaW50 cm9kdWNlZCB0d28gZnVuY3Rpb25zICdjaGVja19wYXJ0cmVsX2hhc19mb3JlaWduX3RhYmxlJyBh bmQKJ2NoZWNrX2ZvcmVpZ25fdGFibGVzJy4gSW4gJ2NoZWNrX3BhcnRyZWxfaGFzX2ZvcmVpZ25f dGFibGUnIHdlIGdvCnRocm91Z2ggdGhlIGNoaWxkIG5vZGVzIG9mIGEgcGFydGl0aW9uIGFuZCBj aGVjayBpZiBpdCBoYXMgYSBmb3JlaWduCnRhYmxlLiBXaGlsZSBkb2luZyBzbywgd2UgdGFrZSBh IEFjY2Vzc1NoYXJlTG9jayBvbiBlYWNoIHBhcnRpdGlvbiB0YWJsZQp0byBhdm9pZCBjcmVhdGlv biBvZiBmb3JlaWduIHBhcnRpdGlvbiBjb25jdXJyZW50bHkuCkluICdjaGVja19mb3JlaWduX3Rh YmxlcycgaWYgc2NoZW1hIGlkIGlzIHByb3ZpZGVkIHdlIGNoZWNrIGZvciBlYWNoCnBhcnRpdGlv bmVkIHRhYmxlIGluIHRoYXQgc2NoZW1hIGlmIGl0IGhhcyBhIGZvcmVpZ24gcGFydGl0aW9uLCBv ciBpZgpzY2hlbWEgaWQgaXMgbm90IHByb3ZpZGVkIHdlIGNoZWNrIGZvciBlYWNoIHBhcnRpdGlv bmVkIHRhYmxlIGluIHRoZQpkYXRhYmFzZSBpZiBpdCBoYXMgYSBmb3JlaWduIHBhcnRpdGlvbi4g V2hpbGUgZG9pbmcgc28gd2UgdGFrZSBhClNoYXJlTG9jayBvbiBwZ19wYXJ0aXRpb25lZF90YWJs ZSBzbyBubyBwYXJ0aXRpb24gdGFibGUgaXMgY3JlYXRlZApjb25jdXJyZW50bHkgYWZ0ZXIgdGhp cyBjaGVjay4KLS0tCiBkb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9wdWJsaWNhdGlvbi5zZ21sICB8 ICAgNSArCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgICAgICB8IDE1NCAr KysrKysrKysrKysrKysrKysrLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9mb3JlaWduY21kcy5j ICAgICAgICB8ICA0OCArKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNt ZHMuYyAgICB8ICA0MyArKysrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICAg ICAgICAgIHwgIDU3ICsrKysrKysrCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9u LmggICAgICB8ICAgNSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91 dCB8ICA4OSArKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5z cWwgICAgICB8ICA4MSArKysrKysrKysrKysKIDggZmlsZXMgY2hhbmdlZCwgNDY1IGluc2VydGlv bnMoKyksIDE3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY3Jl YXRlX3B1YmxpY2F0aW9uLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9wdWJsaWNhdGlv bi5zZ21sCmluZGV4IDczZjBjOGQ4OWZiLi5jNGU5OTNiMWMxYSAxMDA2NDQKLS0tIGEvZG9jL3Ny Yy9zZ21sL3JlZi9jcmVhdGVfcHVibGljYXRpb24uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVm L2NyZWF0ZV9wdWJsaWNhdGlvbi5zZ21sCkBAIC0yNTcsNiArMjU3LDExIEBAIENSRUFURSBQVUJM SUNBVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+ CiAgICAgICAgICAgSWYgdGhpcyBpcyBlbmFibGVkLCA8bGl0ZXJhbD5UUlVOQ0FURTwvbGl0ZXJh bD4gb3BlcmF0aW9ucyBwZXJmb3JtZWQKICAgICAgICAgICBkaXJlY3RseSBvbiBwYXJ0aXRpb25z IGFyZSBub3QgcmVwbGljYXRlZC4KICAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgPHBhcmE+ CisgICAgICAgICAgSWYgdGhpcyBpcyBlbmFibGVkLCB3ZSBjYW5ub3QgaW5jbHVkZSBhIGZvcmVp Z24gdGFibGUgb3IgYSBwYXJ0aXRpb25lZAorICAgICAgICAgIHRhYmxlIHdpdGggYSBmb3JlaWdu IHBhcnRpdGlvbiBpbiB0aGUgcHVibGljYXRpb24uCisgICAgICAgICA8L3BhcmE+CiAgICAgICAg IDwvbGlzdGl0ZW0+CiAgICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgICA8L3ZhcmlhYmxlbGlz dD48L3BhcmE+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9u LmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKaW5kZXggZDZmOTRkYjVk OTkuLjBkYWE1YmUzNDY5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1Ymxp Y2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCkBAIC0y NiwxMiArMjYsMTQgQEAKICNpbmNsdWRlICJjYXRhbG9nL3BhcnRpdGlvbi5oIgogI2luY2x1ZGUg ImNhdGFsb2cvcGdfaW5oZXJpdHMuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX25hbWVzcGFjZS5o IgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcGFydGl0aW9uZWRfdGFibGUuaCIKICNpbmNsdWRlICJj YXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19wdWJsaWNhdGlv bl9uYW1lc3BhY2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3B1YmxpY2F0aW9uX3JlbC5oIgog I2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3B1YmxpY2F0 aW9uY21kcy5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJwYXJ0aXRpb25pbmcv cGFydGRlc2MuaCIKICNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgogI2luY2x1ZGUgInV0aWxzL2J1 aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvY2F0Y2FjaGUuaCIKQEAgLTUzLDcgKzU1LDcgQEAg dHlwZWRlZiBzdHJ1Y3QKICAqIGVycm9yIGlmIG5vdC4KICAqLwogc3RhdGljIHZvaWQKLWNoZWNr X3B1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihSZWxhdGlvbiB0YXJnZXRyZWwpCitjaGVja19wdWJs aWNhdGlvbl9hZGRfcmVsYXRpb24oUmVsYXRpb24gdGFyZ2V0cmVsLCBQdWJsaWNhdGlvbiAqcHVi KQogewogCS8qIE11c3QgYmUgYSByZWd1bGFyIG9yIHBhcnRpdGlvbmVkIHRhYmxlICovCiAJaWYg KFJlbGF0aW9uR2V0Rm9ybSh0YXJnZXRyZWwpLT5yZWxraW5kICE9IFJFTEtJTkRfUkVMQVRJT04g JiYKQEAgLTY0LDYgKzY2LDE4IEBAIGNoZWNrX3B1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihSZWxh dGlvbiB0YXJnZXRyZWwpCiAJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZSh0YXJnZXRyZWwp KSwKIAkJCQkgZXJyZGV0YWlsX3JlbGtpbmRfbm90X3N1cHBvcnRlZChSZWxhdGlvbkdldEZvcm0o dGFyZ2V0cmVsKS0+cmVsa2luZCkpKTsKIAorCS8qCisJICogcHVibGlzaF92aWFfcm9vdF9wYXJ0 aXRpb24gY2Fubm90IGJlIHRydWUgaWYgaXQgaXMgYSBwYXJ0aXRpb25lZCB0YWJsZQorCSAqIGFu ZCBoYXMgYW55IGZvcmVpZ24gcGFydGl0aW9uLiBTZWUgY2hlY2tfZm9yZWlnbl90YWJsZXMgZm9y IGRldGFpbHMuCisJICovCisJaWYgKHB1Yi0+cHVidmlhcm9vdCAmJiBjaGVja19wYXJ0cmVsX2hh c19mb3JlaWduX3RhYmxlKHRhcmdldHJlbCkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNv ZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiY2Fubm90 IHNldCBwYXJhbWV0ZXIgXCIlc1wiIHRvIHRydWUgZm9yIHB1YmxpY2F0aW9uIFwiJXNcIiIsCisJ CQkJCQkicHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QiLCBwdWItPm5hbWUpLAorCQkJCSBlcnJk ZXRhaWwoInBhcnRpdGlvbiB0YWJsZSBcIiVzXCIgaW4gcHVibGljYXRpb24gY29udGFpbnMgYSBm b3JlaWduIHBhcnRpdGlvbiIsCisJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZSh0YXJn ZXRyZWwpKSkpOworCiAJLyogQ2FuJ3QgYmUgc3lzdGVtIHRhYmxlICovCiAJaWYgKElzQ2F0YWxv Z1JlbGF0aW9uKHRhcmdldHJlbCkpCiAJCWVyZXBvcnQoRVJST1IsCkBAIC0zMDQsNyArMzE4LDcg QEAgY2hlY2tfYW5kX2ZldGNoX2NvbHVtbl9saXN0KFB1YmxpY2F0aW9uICpwdWIsIE9pZCByZWxp ZCwgTWVtb3J5Q29udGV4dCBtY3h0LAogCiAvKgogICogR2V0cyB0aGUgcmVsYXRpb25zIGJhc2Vk IG9uIHRoZSBwdWJsaWNhdGlvbiBwYXJ0aXRpb24gb3B0aW9uIGZvciBhIHNwZWNpZmllZAotICog cmVsYXRpb24uCisgKiByZWxhdGlvbi4gRm9yZWlnbiB0YWJsZXMgYXJlIG5vdCBpbmNsdWRlZC4K ICAqLwogTGlzdCAqCiBHZXRQdWJQYXJ0aXRpb25PcHRpb25SZWxhdGlvbnMoTGlzdCAqcmVzdWx0 LCBQdWJsaWNhdGlvblBhcnRPcHQgcHViX3BhcnRvcHQsCkBAIC0zMTMsMjUgKzMyNywyMSBAQCBH ZXRQdWJQYXJ0aXRpb25PcHRpb25SZWxhdGlvbnMoTGlzdCAqcmVzdWx0LCBQdWJsaWNhdGlvblBh cnRPcHQgcHViX3BhcnRvcHQsCiAJaWYgKGdldF9yZWxfcmVsa2luZChyZWxpZCkgPT0gUkVMS0lO RF9QQVJUSVRJT05FRF9UQUJMRSAmJgogCQlwdWJfcGFydG9wdCAhPSBQVUJMSUNBVElPTl9QQVJU X1JPT1QpCiAJewotCQlMaXN0CSAgICphbGxfcGFydHMgPSBmaW5kX2FsbF9pbmhlcml0b3JzKHJl bGlkLCBOb0xvY2ssCi0JCQkJCQkJCQkJCQkJTlVMTCk7CisJCUxpc3QJICAgKmFsbF9wYXJ0cyA9 IGZpbmRfYWxsX2luaGVyaXRvcnMocmVsaWQsIE5vTG9jaywgTlVMTCk7CiAKLQkJaWYgKHB1Yl9w YXJ0b3B0ID09IFBVQkxJQ0FUSU9OX1BBUlRfQUxMKQotCQkJcmVzdWx0ID0gbGlzdF9jb25jYXQo cmVzdWx0LCBhbGxfcGFydHMpOwotCQllbHNlIGlmIChwdWJfcGFydG9wdCA9PSBQVUJMSUNBVElP Tl9QQVJUX0xFQUYpCisJCWZvcmVhY2hfb2lkKHBhcnRPaWQsIGFsbF9wYXJ0cykKIAkJewotCQkJ TGlzdENlbGwgICAqbGM7CisJCQljaGFyCQlyZWxraW5kID0gZ2V0X3JlbF9yZWxraW5kKHBhcnRP aWQpOwogCi0JCQlmb3JlYWNoKGxjLCBhbGxfcGFydHMpCi0JCQl7Ci0JCQkJT2lkCQkJcGFydE9p ZCA9IGxmaXJzdF9vaWQobGMpOworCQkJaWYgKHJlbGtpbmQgPT0gUkVMS0lORF9GT1JFSUdOX1RB QkxFKQorCQkJCWNvbnRpbnVlOwogCi0JCQkJaWYgKGdldF9yZWxfcmVsa2luZChwYXJ0T2lkKSAh PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQotCQkJCQlyZXN1bHQgPSBsYXBwZW5kX29pZChy ZXN1bHQsIHBhcnRPaWQpOwotCQkJfQorCQkJaWYgKHB1Yl9wYXJ0b3B0ID09IFBVQkxJQ0FUSU9O X1BBUlRfTEVBRiAmJgorCQkJCXJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkK KwkJCQljb250aW51ZTsKKworCQkJcmVzdWx0ID0gbGFwcGVuZF9vaWQocmVzdWx0LCBwYXJ0T2lk KTsKIAkJfQotCQllbHNlCi0JCQlBc3NlcnQoZmFsc2UpOwogCX0KIAllbHNlCiAJCXJlc3VsdCA9 IGxhcHBlbmRfb2lkKHJlc3VsdCwgcmVsaWQpOwpAQCAtNDYzLDcgKzQ3Myw3IEBAIHB1YmxpY2F0 aW9uX2FkZF9yZWxhdGlvbihPaWQgcHViaWQsIFB1YmxpY2F0aW9uUmVsSW5mbyAqcHJpLAogCQkJ CQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUodGFyZ2V0cmVsKSwgcHViLT5uYW1lKSkpOwogCX0K IAotCWNoZWNrX3B1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbih0YXJnZXRyZWwpOworCWNoZWNrX3B1 YmxpY2F0aW9uX2FkZF9yZWxhdGlvbih0YXJnZXRyZWwsIHB1Yik7CiAKIAkvKiBWYWxpZGF0ZSBh bmQgdHJhbnNsYXRlIGNvbHVtbiBuYW1lcyBpbnRvIGEgQml0bWFwc2V0IG9mIGF0dG51bXMuICov CiAJYXR0bnVtcyA9IHB1Yl9jb2xsaXN0X3ZhbGlkYXRlKHByaS0+cmVsYXRpb24sIHByaS0+Y29s dW1ucyk7CkBAIC03MDMsNiArNzEzLDEzIEBAIHB1YmxpY2F0aW9uX2FkZF9zY2hlbWEoT2lkIHB1 YmlkLCBPaWQgc2NoZW1haWQsIGJvb2wgaWZfbm90X2V4aXN0cykKIAogCWNoZWNrX3B1YmxpY2F0 aW9uX2FkZF9zY2hlbWEoc2NoZW1haWQpOwogCisJLyoKKwkgKiBJZiBwdWJsaXNoX3ZpYV9wYXJ0 aXRpb25fcm9vdCBpcyB0cnVlLCBjaGVjayBpZiBzY2hlbWEgaGFzIGFueSBmb3JlaWduCisJICog cGFydGl0aW9uCisJICovCisJaWYgKHB1Yi0+cHVidmlhcm9vdCkKKwkJY2hlY2tfZm9yZWlnbl90 YWJsZXMoc2NoZW1haWQsIHB1Yi0+bmFtZSk7CisKIAkvKiBGb3JtIGEgdHVwbGUgKi8KIAltZW1z ZXQodmFsdWVzLCAwLCBzaXplb2YodmFsdWVzKSk7CiAJbWVtc2V0KG51bGxzLCBmYWxzZSwgc2l6 ZW9mKG51bGxzKSk7CkBAIC0xMzMyLDMgKzEzNDksMTA2IEBAIHBnX2dldF9wdWJsaWNhdGlvbl90 YWJsZXMoUEdfRlVOQ1RJT05fQVJHUykKIAogCVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKIH0K KworLyogQ2hlY2sgaWYgYSBwYXJ0aXRpb25lZCB0YWJsZSBoYXMgYSBmb3JlaWduIHBhcnRpdGlv biAqLworYm9vbAorY2hlY2tfcGFydHJlbF9oYXNfZm9yZWlnbl90YWJsZShSZWxhdGlvbiByZWwp Cit7CisJYm9vbAkJaGFzX2ZvcmVpZ25fdGJsID0gZmFsc2U7CisKKwlpZiAoUmVsYXRpb25HZXRG b3JtKHJlbCktPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwl7CisJCVBh cnRpdGlvbkRlc2MgcGQgPSBSZWxhdGlvbkdldFBhcnRpdGlvbkRlc2MocmVsLCB0cnVlKTsKKwor CQlmb3IgKGludCBpID0gMDsgaSA8IHBkLT5ucGFydHM7IGkrKykKKwkJeworCQkJUmVsYXRpb24J Y2hpbGRyZWwgPSB0YWJsZV9vcGVuKHBkLT5vaWRzW2ldLCBBY2Nlc3NTaGFyZUxvY2spOworCisJ CQlpZiAoUmVsYXRpb25HZXRGb3JtKGNoaWxkcmVsKS0+cmVsa2luZCA9PSBSRUxLSU5EX0ZPUkVJ R05fVEFCTEUpCisJCQkJaGFzX2ZvcmVpZ25fdGJsID0gdHJ1ZTsKKwkJCWVsc2UKKwkJCQloYXNf Zm9yZWlnbl90YmwgPSBjaGVja19wYXJ0cmVsX2hhc19mb3JlaWduX3RhYmxlKGNoaWxkcmVsKTsK KworCQkJdGFibGVfY2xvc2UoY2hpbGRyZWwsIE5vTG9jayk7CisKKwkJCWlmIChoYXNfZm9yZWln bl90YmwpCisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gaGFzX2ZvcmVpZ25fdGJsOwor fQorCisvKgorICogUHJvdGVjdCBhZ2FpbnN0IGluY2x1ZGluZyBmb3JlaWduIHRhYmxlcyB0aGF0 IGFyZSBwYXJ0aXRpb25zIG9mIHBhcnRpdGlvbmVkCisgKiB0YWJsZXMgcHVibGlzaGVkIGJ5IHRo ZSBnaXZlbiBwdWJsaWNhdGlvbiB3aGVuIHB1Ymxpc2hfdmlhX3Jvb3RfcGFydGl0aW9uIGlzCisg KiB0cnVlLiBUaGlzIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5IGFzIHRoZSBpbml0aWFsIGRhdGEg ZnJvbSB0aGUgZm9yZWlnbgorICogdGFibGUgY2FuIGJlIHJlcGxpY2F0ZWQgYnkgdGhlIHRhYmxl c3luYyB3b3JrZXIgZXZlbiB0aG91Z2ggcmVwbGljYXRpb24gb2YKKyAqIGZvcmVpZ24gdGFibGUg aXMgbm90IHN1cHBvcnRlZC4gU28gd2UgZGlzYWxsb3cgdGhlIGNhc2UgaGVyZSBhbmQgaW4gYWxs IERETAorICogY29tbWFuZHMgdGhhdCB3b3VsZCBlbmQgdXAgY3JlYXRpbmcgc3VjaCBhIGNhc2Ug aW5kaXJlY3RseS4KKyAqCisgKiBJZiB2YWxpZCBzY2hlbWFpZCBwcm92aWRlZCwgY2hlY2sgaWYg dGhlIHNjaGVtYSBoYXMgYSBwYXJ0aXRpb24gdGFibGUgd2hpY2gKKyAqIGhhcyBhIGZvcmVpZ24g cGFydGl0aW9uLiBUaGUgcGFydGl0aW9uIHRhYmxlcyBpbiBhIHNjaGVtYSBjYW4gaGF2ZSBwYXJ0 aXRpb25zCisgKiBpbiBvdGhlciBzY2hlbWEuIFdlIGFsc28gbmVlZCB0byBjaGVjayBpZiBzdWNo IHBhcnRpdGlvbnMgYXJlIGZvcmVpZ24KKyAqIHBhcnRpdGlvbi4KKyAqCisgKiBJZiB2YWxpZCBz Y2hlbWFpZCBpcyBub3QgcHJvdmlkZWQsIHdlIGdldCBhbGwgcGFydGl0aW9uIHRhYmxlcyBhbmQg Y2hlY2sgaWYKKyAqIGl0IGhhcyBhbnkgZm9yZWlnbiBwYXJ0aXRpb24uIFdlIHRha2UgYSBsb2Nr IG9uIHBhcnRpdGlvbiB0YWJsZXMgc28gbm8gbmV3CisgKiBmb3JlaWduIHBhcnRpdGlvbnMgYXJl IGFkZGVkIGNvbmN1cnJlbnRseS4KKyAqCisgKiBXZSB0YWtlIGEgU2hhcmVMb2NrIG9uIHBnX3Bh cnRpdGlvbmVkX3RhYmxlIHRvIHJlc3RyaWN0IGFkZGl0aW9uIG9mIG5ldworICogcGFydGl0aW9u ZWQgdGFibGUgd2hpY2ggbWF5IGNvbnRhaW4gYSBmb3JlaWduIHBhcnRpdGlvbiB3aGlsZSBwdWJs aWNhdGlvbiBpcworICogYmVpbmcgY3JlYXRlZC4KKyAqLwordm9pZAorY2hlY2tfZm9yZWlnbl90 YWJsZXMoT2lkIHNjaGVtYWlkLCBjaGFyICpwdWJuYW1lKQoreworCVJlbGF0aW9uCWNsYXNzUmVs OworCVJlbGF0aW9uCXBhcnRSZWw7CisJU2NhbktleURhdGEga2V5WzNdOworCWludAkJCWtleWNv dW50ID0gMDsKKwlUYWJsZVNjYW5EZXNjIHNjYW47CisJSGVhcFR1cGxlCXR1cGxlOworCisJY2xh c3NSZWwgPSB0YWJsZV9vcGVuKFJlbGF0aW9uUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsK KwlwYXJ0UmVsID0gdGFibGVfb3BlbihQYXJ0aXRpb25lZFJlbGF0aW9uSWQsIFNoYXJlTG9jayk7 CisKKwkvKiBHZXQgdGhlIHJvb3Qgbm9kZXMgb2YgcGFydGl0aW9uZWQgdGFibGUgKi8KKwlTY2Fu S2V5SW5pdCgma2V5W2tleWNvdW50KytdLAorCQkJCUFudW1fcGdfY2xhc3NfcmVsa2luZCwKKwkJ CQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfQ0hBUkVRLAorCQkJCUNoYXJHZXREYXR1bShSRUxL SU5EX1BBUlRJVElPTkVEX1RBQkxFKSk7CisKKwlTY2FuS2V5SW5pdCgma2V5W2tleWNvdW50Kytd LAorCQkJCUFudW1fcGdfY2xhc3NfcmVsaXNwYXJ0aXRpb24sCisJCQkJQlRFcXVhbFN0cmF0ZWd5 TnVtYmVyLCBGX0JPT0xFUSwKKwkJCQlCb29sR2V0RGF0dW0oZmFsc2UpKTsKKworCS8qIElmIHNj aGVtYSBpZCBpcyBwcm92aWRlZCBjaGVjayBwYXJ0aXRpb25lZCB0YWJsZSBpbiB0aGF0IHNjaGVt YSAqLworCWlmIChPaWRJc1ZhbGlkKHNjaGVtYWlkKSkKKwkJU2NhbktleUluaXQoJmtleVtrZXlj b3VudCsrXSwKKwkJCQkJQW51bV9wZ19jbGFzc19yZWxuYW1lc3BhY2UsCisJCQkJCUJURXF1YWxT dHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJc2NoZW1haWQpOworCisJc2NhbiA9IHRhYmxl X2JlZ2luc2Nhbl9jYXRhbG9nKGNsYXNzUmVsLCBrZXljb3VudCwga2V5KTsKKwl3aGlsZSAoKHR1 cGxlID0gaGVhcF9nZXRuZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKSkgIT0gTlVMTCkK Kwl7CisJCUZvcm1fcGdfY2xhc3MgcmVsRm9ybSA9IChGb3JtX3BnX2NsYXNzKSBHRVRTVFJVQ1Qo dHVwbGUpOworCQlSZWxhdGlvbglwdWJyZWwgPSB0YWJsZV9vcGVuKHJlbEZvcm0tPm9pZCwgQWNj ZXNzU2hhcmVMb2NrKTsKKworCQlpZiAoY2hlY2tfcGFydHJlbF9oYXNfZm9yZWlnbl90YWJsZShw dWJyZWwpKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElE X1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coImNhbm5vdCBzZXQgcGFyYW1ldGVyIFwi JXNcIiB0byB0cnVlIGZvciBwdWJsaWNhdGlvbiBcIiVzXCIiLAorCQkJCQkJCSJwdWJsaXNoX3Zp YV9wYXJ0aXRpb25fcm9vdCIsIHB1Ym5hbWUpLAorCQkJCQkgZXJyZGV0YWlsKCJwYXJ0aXRpb24g dGFibGUgXCIlc1wiIGluIHB1YmxpY2F0aW9uIGNvbnRhaW5zIGEgZm9yZWlnbiBwYXJ0aXRpb24i LAorCQkJCQkJCSAgIGdldF9yZWxfbmFtZShyZWxGb3JtLT5vaWQpKSkpOworCisJCXRhYmxlX2Ns b3NlKHB1YnJlbCwgTm9Mb2NrKTsKKwl9CisKKwl0YWJsZV9lbmRzY2FuKHNjYW4pOworCXRhYmxl X2Nsb3NlKGNsYXNzUmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCXRhYmxlX2Nsb3NlKHBhcnRSZWws IE5vTG9jayk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9mb3JlaWduY21k cy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZm9yZWlnbmNtZHMuYwppbmRleCBjMTRlMDM4ZDU0 Zi4uYWJjMjNiYWE1OWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2ZvcmVpZ25j bWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZm9yZWlnbmNtZHMuYwpAQCAtMjEsNiAr MjEsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvZGVwZW5kZW5jeS5oIgogI2luY2x1ZGUgImNhdGFs b2cvaW5kZXhpbmcuaCIKICNpbmNsdWRlICJjYXRhbG9nL29iamVjdGFjY2Vzcy5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGFydGl0aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19mb3JlaWduX2Rh dGFfd3JhcHBlci5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZm9yZWlnbl9zZXJ2ZXIuaCIKICNp bmNsdWRlICJjYXRhbG9nL3BnX2ZvcmVpZ25fdGFibGUuaCIKQEAgLTE0MjMsNiArMTQyNCw1MyBA QCBDcmVhdGVGb3JlaWduVGFibGUoQ3JlYXRlRm9yZWlnblRhYmxlU3RtdCAqc3RtdCwgT2lkIHJl bGlkKQogCiAJZnRyZWwgPSB0YWJsZV9vcGVuKEZvcmVpZ25UYWJsZVJlbGF0aW9uSWQsIFJvd0V4 Y2x1c2l2ZUxvY2spOwogCisJLyoKKwkgKiBDaGVjayBpZiBpdCBpcyBhIGZvcmVpZ24gcGFydGl0 aW9uIGFuZCB0aGUgcGFydGl0aW9uZWQgdGFibGUgaXMgbm90CisJICogcHVibGlzaGVkIG9yIHB1 Ymxpc2hlZCB3aXRoIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IG9wdGlvbiBhcyBmYWxzZS4K KwkgKiBTZWUgY2hlY2tfZm9yZWlnbl90YWJsZXMgZm9yIGRldGFpbHMuCisJICovCisJaWYgKHN0 bXQtPmJhc2UucGFydGJvdW5kICE9IE5VTEwpCisJeworCQlSYW5nZVZhciAgICpyb290ID0gbGlu aXRpYWxfbm9kZShSYW5nZVZhciwgc3RtdC0+YmFzZS5pbmhSZWxhdGlvbnMpOworCQlSZWxhdGlv bglyb290cmVsID0gdGFibGVfb3BlbnJ2KHJvb3QsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJaWYg KFJlbGF0aW9uR2V0Rm9ybShyb290cmVsKS0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVE X1RBQkxFKQorCQl7CisJCQlPaWQJCQlzY2hlbWFpZCA9IFJlbGF0aW9uR2V0TmFtZXNwYWNlKHJv b3RyZWwpOworCQkJTGlzdAkgICAqcHVib2lkcyA9IEdldFJlbGF0aW9uUHVibGljYXRpb25zKHJv b3RyZWwtPnJkX2lkKTsKKwkJCUxpc3QJICAgKmFuY2VzdG9yczsKKworCQkJcHVib2lkcyA9IGxp c3RfY29uY2F0X3VuaXF1ZV9vaWQocHVib2lkcywgR2V0QWxsVGFibGVzUHVibGljYXRpb25zKCkp OworCQkJcHVib2lkcyA9IGxpc3RfY29uY2F0X3VuaXF1ZV9vaWQocHVib2lkcywgR2V0U2NoZW1h UHVibGljYXRpb25zKHNjaGVtYWlkKSk7CisJCQlhbmNlc3RvcnMgPSBnZXRfcGFydGl0aW9uX2Fu Y2VzdG9ycyhyb290cmVsLT5yZF9pZCk7CisKKwkJCWZvcmVhY2hfb2lkKGFuY2VzdG9yLCBhbmNl c3RvcnMpCisJCQl7CisJCQkJcHVib2lkcyA9IGxpc3RfY29uY2F0X3VuaXF1ZV9vaWQocHVib2lk cywKKwkJCQkJCQkJCQkJCSBHZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhhbmNlc3RvcikpOworCQkJ CXNjaGVtYWlkID0gZ2V0X3JlbF9uYW1lc3BhY2UoYW5jZXN0b3IpOworCQkJCXB1Ym9pZHMgPSBs aXN0X2NvbmNhdF91bmlxdWVfb2lkKHB1Ym9pZHMsCisJCQkJCQkJCQkJCQkgR2V0U2NoZW1hUHVi bGljYXRpb25zKHNjaGVtYWlkKSk7CisJCQl9CisJCQlsaXN0X2ZyZWUoYW5jZXN0b3JzKTsKKwor CQkJZm9yZWFjaF9vaWQocHVib2lkLCBwdWJvaWRzKQorCQkJeworCQkJCVB1YmxpY2F0aW9uICpw dWIgPSBHZXRQdWJsaWNhdGlvbihwdWJvaWQpOworCisJCQkJaWYgKHB1Yi0+cHVidmlhcm9vdCkK KwkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1dST05HX09CSkVD VF9UWVBFKSwKKwkJCQkJCQkgZXJybXNnKCJjYW5ub3QgY3JlYXRlIHRhYmxlIGZvcmVpZ24gcGFy dGl0aW9uIFwiJXNcIiIsCisJCQkJCQkJCQlnZXRfcmVsX25hbWUocmVsaWQpKSwKKwkJCQkJCQkg ZXJyZGV0YWlsKCJwYXJ0aXRpb24gdGFibGUgXCIlc1wiIGlzIHB1Ymxpc2hlZCB3aXRoIG9wdGlv biBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCIsCisJCQkJCQkJCQkgICBSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShyb290cmVsKSkpKTsKKwkJCX0KKwkJfQorCisJCXRhYmxlX2Nsb3NlKHJvb3Ry ZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJfQorCiAJLyoKIAkgKiBGb3Igbm93IHRoZSBvd25lciBj YW5ub3QgYmUgc3BlY2lmaWVkIG9uIGNyZWF0ZS4gVXNlIGVmZmVjdGl2ZSB1c2VyIElELgogCSAq LwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwppbmRleCAwYjIzZDk0YzM4ZS4u ZTVmYTFiZjViMDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9u Y21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCkBAIC05 MTUsNiArOTE1LDEwIEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3Jl YXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCS8qIEFzc29jaWF0ZSBvYmplY3RzIHdpdGggdGhl IHB1YmxpY2F0aW9uLiAqLwogCWlmIChzdG10LT5mb3JfYWxsX3RhYmxlcykKIAl7CisJCS8qIENo ZWNrIGlmIGFueSBwYXJ0aXRpb25lZCB0YWJsZSBoYXMgZm9yZWlnbiBwYXJ0aXRpb24gKi8KKwkJ aWYgKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KQorCQkJY2hlY2tfZm9yZWlnbl90YWJsZXMo SW52YWxpZE9pZCwgc3RtdC0+cHVibmFtZSk7CisKIAkJLyogSW52YWxpZGF0ZSByZWxjYWNoZSBz byB0aGF0IHB1YmxpY2F0aW9uIGluZm8gaXMgcmVidWlsdC4gKi8KIAkJQ2FjaGVJbnZhbGlkYXRl UmVsY2FjaGVBbGwoKTsKIAl9CkBAIC0xMDgwLDYgKzEwODQsNDUgQEAgQWx0ZXJQdWJsaWNhdGlv bk9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwK IAkJfQogCX0KIAorCS8qCisJICogSWYgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgaXMgc2V0 IHRvIHRydWUsIGNoZWNrIGlmIHRoZSBwdWJsaWNhdGlvbgorCSAqIGFscmVhZHkgaGF2ZSBhbnkg Zm9yZWlnbiBwYXJ0aXRpb24uIFNlZSBjaGVja19mb3JlaWduX3RhYmxlcyBmb3IgZGV0YWlscy4K KwkgKi8KKwlpZiAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3RfZ2l2ZW4gJiYgcHVibGlzaF92 aWFfcGFydGl0aW9uX3Jvb3QpCisJeworCQlMaXN0CSAgICpzY2hlbWFvaWRzID0gTklMOworCQlM aXN0CSAgICpyZWxpZHMgPSBOSUw7CisKKwkJY2hhcgkgICAqcHVibmFtZSA9IHN0bXQtPnB1Ym5h bWU7CisKKwkJaWYgKHB1YmZvcm0tPnB1YmFsbHRhYmxlcykKKwkJCWNoZWNrX2ZvcmVpZ25fdGFi bGVzKEludmFsaWRPaWQsIHB1Ym5hbWUpOworCisJCXNjaGVtYW9pZHMgPSBHZXRQdWJsaWNhdGlv blNjaGVtYXMocHViZm9ybS0+b2lkKTsKKworCQlmb3JlYWNoX29pZChzY2hlbWFvaWQsIHNjaGVt YW9pZHMpCisJCQljaGVja19mb3JlaWduX3RhYmxlcyhzY2hlbWFvaWQsIHB1Ym5hbWUpOworCisJ CXJlbGlkcyA9IEdldFB1YmxpY2F0aW9uUmVsYXRpb25zKHB1YmZvcm0tPm9pZCwgUFVCTElDQVRJ T05fUEFSVF9ST09UKTsKKworCQlmb3JlYWNoX29pZChyZWxpZCwgcmVsaWRzKQorCQl7CisJCQlS ZWxhdGlvbglwdWJyZWwgPSB0YWJsZV9vcGVuKHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJ CQlpZiAoY2hlY2tfcGFydHJlbF9oYXNfZm9yZWlnbl90YWJsZShwdWJyZWwpKQorCQkJeworCQkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVS X1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImNhbm5vdCBzZXQgcGFyYW1ldGVyIFwiJXNcIiB0byB0 cnVlIGZvciBwdWJsaWNhdGlvbiBcIiVzXCIiLAorCQkJCQkJCQkicHVibGlzaF92aWFfcGFydGl0 aW9uX3Jvb3QiLCBwdWJuYW1lKSwKKwkJCQkJCSBlcnJkZXRhaWwoInBhcnRpdGlvbiB0YWJsZSBc IiVzXCIgaW4gcHVibGljYXRpb24gY29udGFpbnMgYSBmb3JlaWduIHBhcnRpdGlvbiIsCisJCQkJ CQkJCSAgIGdldF9yZWxfbmFtZShyZWxpZCkpKSk7CisJCQl9CisKKwkJCXRhYmxlX2Nsb3NlKHB1 YnJlbCwgTm9Mb2NrKTsKKwkJfQorCX0KKwogCS8qIEV2ZXJ5dGhpbmcgb2ssIGZvcm0gYSBuZXcg dHVwbGUuICovCiAJbWVtc2V0KHZhbHVlcywgMCwgc2l6ZW9mKHZhbHVlcykpOwogCW1lbXNldChu dWxscywgZmFsc2UsIHNpemVvZihudWxscykpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwppbmRl eCBhZmIyNTAwNzYxMy4uZmM0ZGI5MmJkZTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBA IC0xOTU3MCw2ICsxOTU3MCwxMCBAQCBRdWV1ZVBhcnRpdGlvbkNvbnN0cmFpbnRWYWxpZGF0aW9u KExpc3QgKip3cXVldWUsIFJlbGF0aW9uIHNjYW5yZWwsCiAgKiBBTFRFUiBUQUJMRSA8bmFtZT4g QVRUQUNIIFBBUlRJVElPTiA8cGFydGl0aW9uLW5hbWU+IEZPUiBWQUxVRVMKICAqCiAgKiBSZXR1 cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIG5ld2x5IGF0dGFjaGVkIHBhcnRpdGlvbi4KKyAqCisgKiBJ ZiB0aGUgd291bGQtYmUgcGFydGl0aW9uIGlzIGEgZm9yZWlnbiB0YWJsZSBvciBhIHBhcnRpdGlv bmVkIHRhYmxlIHdpdGgKKyAqIGZvcmVpZ24gcGFydGl0aW9uLCB2ZXJpZnkgdGhhdCB0aGUgcGFy dGl0aW9uZWQgdGFibGUgaXMgbm90IGluIGEgcHVibGljYXRpb24KKyAqIHdpdGggcHVibGlzaF92 aWFfcGFydGl0aW9uX3Jvb3Q9dHJ1ZS4gU2VlIGNoZWNrX2ZvcmVpZ25fdGFibGVzIGZvciBkZXRh aWxzLgogICovCiBzdGF0aWMgT2JqZWN0QWRkcmVzcwogQVRFeGVjQXR0YWNoUGFydGl0aW9uKExp c3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwgUGFydGl0aW9uQ21kICpjbWQsCkBAIC0xOTcxNCw2 ICsxOTcxOCw1OSBAQCBBVEV4ZWNBdHRhY2hQYXJ0aXRpb24oTGlzdCAqKndxdWV1ZSwgUmVsYXRp b24gcmVsLCBQYXJ0aXRpb25DbWQgKmNtZCwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1dST05HX09C SkVDVF9UWVBFKSwKIAkJCQkgZXJybXNnKCJjYW5ub3QgYXR0YWNoIHRlbXBvcmFyeSByZWxhdGlv biBvZiBhbm90aGVyIHNlc3Npb24gYXMgcGFydGl0aW9uIikpKTsKIAorCS8qCisJICogQ2hlY2sg aWYgYXR0YWNocmVsIGlzIGEgZm9yZWlnbiB0YWJsZSBvciBhIHBhcnRpdGlvbmVkIHRhYmxlIHdp dGgKKwkgKiBmb3JlaWduIHBhcnRpdGlvbiBhbmQgcmVsIGlzIG5vdCBwYXJ0IG9mIHB1YmxpY2F0 aW9uIHdpdGggb3B0aW9uCisJICogcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgYXMgdHJ1ZS4K KwkgKi8KKwlpZiAoYXR0YWNocmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9GT1JFSUdO X1RBQkxFIHx8CisJCWNoZWNrX3BhcnRyZWxfaGFzX2ZvcmVpZ25fdGFibGUoYXR0YWNocmVsKSkK Kwl7CisJCU9pZAkJCXNjaGVtYWlkID0gUmVsYXRpb25HZXROYW1lc3BhY2UocmVsKTsKKwkJTGlz dAkgICAqcHVib2lkcyA9IEdldFJlbGF0aW9uUHVibGljYXRpb25zKHJlbC0+cmRfaWQpOworCQlM aXN0CSAgICphbmNlc3RvcnM7CisJCWNoYXIJICAgKnJlbG5hbWUgPSBnZXRfcmVsX25hbWUocmVs LT5yZF9pZCk7CisJCWNoYXIJICAgKmF0dGFjaHJlbG5hbWUgPSBnZXRfcmVsX25hbWUoYXR0YWNo cmVsLT5yZF9pZCk7CisKKwkJcHVib2lkcyA9IGxpc3RfY29uY2F0X3VuaXF1ZV9vaWQocHVib2lk cywgR2V0QWxsVGFibGVzUHVibGljYXRpb25zKCkpOworCQlwdWJvaWRzID0gbGlzdF9jb25jYXRf dW5pcXVlX29pZChwdWJvaWRzLCBHZXRTY2hlbWFQdWJsaWNhdGlvbnMoc2NoZW1haWQpKTsKKwkJ YW5jZXN0b3JzID0gZ2V0X3BhcnRpdGlvbl9hbmNlc3RvcnMocmVsLT5yZF9pZCk7CisKKwkJZm9y ZWFjaF9vaWQoYW5jZXN0b3IsIGFuY2VzdG9ycykKKwkJeworCQkJcHVib2lkcyA9IGxpc3RfY29u Y2F0X3VuaXF1ZV9vaWQocHVib2lkcywKKwkJCQkJCQkJCQkJIEdldFJlbGF0aW9uUHVibGljYXRp b25zKGFuY2VzdG9yKSk7CisJCQlzY2hlbWFpZCA9IGdldF9yZWxfbmFtZXNwYWNlKGFuY2VzdG9y KTsKKwkJCXB1Ym9pZHMgPSBsaXN0X2NvbmNhdF91bmlxdWVfb2lkKHB1Ym9pZHMsCisJCQkJCQkJ CQkJCSBHZXRTY2hlbWFQdWJsaWNhdGlvbnMoc2NoZW1haWQpKTsKKwkJfQorCisJCWxpc3RfZnJl ZShhbmNlc3RvcnMpOworCisJCWZvcmVhY2hfb2lkKHB1Ym9pZCwgcHVib2lkcykKKwkJeworCQkJ UHVibGljYXRpb24gKnB1YiA9IEdldFB1YmxpY2F0aW9uKHB1Ym9pZCk7CisKKwkJCWlmIChwdWIt PnB1YnZpYXJvb3QpCisJCQl7CisJCQkJaWYgKGF0dGFjaHJlbC0+cmRfcmVsLT5yZWxraW5kID09 IFJFTEtJTkRfRk9SRUlHTl9UQUJMRSkKKwkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkoZXJy Y29kZShFUlJDT0RFX1dST05HX09CSkVDVF9UWVBFKSwKKwkJCQkJCQkgZXJybXNnKCJjYW5ub3Qg YXR0YWNoIGZvcmVpZ24gdGFibGUgXCIlc1wiIHRvIHBhcnRpdGlvbiB0YWJsZSBcIiVzXCIiLAor CQkJCQkJCQkJYXR0YWNocmVsbmFtZSwgcmVsbmFtZSksCisJCQkJCQkJIGVycmRldGFpbCgicGFy dGl0aW9uIHRhYmxlIFwiJXNcIiBpcyBwdWJsaXNoZWQgd2l0aCBvcHRpb24gcHVibGlzaF92aWFf cGFydGl0aW9uX3Jvb3QiLAorCQkJCQkJCQkJICAgcmVsbmFtZSkpKTsKKwkJCQllbHNlCisJCQkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQ RSksCisJCQkJCQkJIGVycm1zZygiY2Fubm90IGF0dGFjaCB0YWJsZSBcIiVzXCIgd2l0aCBmb3Jl aWduIHBhcnRpdGlvbiB0byBwYXJ0aXRpb24gdGFibGUgXCIlc1wiIiwKKwkJCQkJCQkJCWF0dGFj aHJlbG5hbWUsIHJlbG5hbWUpLAorCQkJCQkJCSBlcnJkZXRhaWwoInBhcnRpdGlvbiB0YWJsZSBc IiVzXCIgaXMgcHVibGlzaGVkIHdpdGggb3B0aW9uIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 IiwKKwkJCQkJCQkJCSAgIHJlbG5hbWUpKSk7CisJCQl9CisJCX0KKwl9CisKIAkvKgogCSAqIENo ZWNrIGlmIGF0dGFjaHJlbCBoYXMgYW55IGlkZW50aXR5IGNvbHVtbnMgb3IgYW55IGNvbHVtbnMg dGhhdCBhcmVuJ3QKIAkgKiBpbiB0aGUgcGFyZW50LgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNh dGlvbi5oCmluZGV4IDQ4YzdkMWE4NjE1Li5lMjkxOWRhMjU0MSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHVibGljYXRpb24uaApAQCAtMTksNiArMTksNyBAQAogCiAjaW5jbHVkZSAiY2F0YWxvZy9n ZW5ia2kuaCIKICNpbmNsdWRlICJjYXRhbG9nL29iamVjdGFkZHJlc3MuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX2NsYXNzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9kLmgi CS8qIElXWVUgcHJhZ21hOiBleHBvcnQgKi8KIAogLyogLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTkx LDQgKzE5Miw4IEBAIGV4dGVybiBCaXRtYXBzZXQgKnB1Yl9jb2xsaXN0X3RvX2JpdG1hcHNldChC aXRtYXBzZXQgKmNvbHVtbnMsIERhdHVtIHB1YmNvbHMsCiBleHRlcm4gQml0bWFwc2V0ICpwdWJf Zm9ybV9jb2xzX21hcChSZWxhdGlvbiByZWxhdGlvbiwKIAkJCQkJCQkJCVB1Ymxpc2hHZW5jb2xz VHlwZSBpbmNsdWRlX2dlbmNvbHNfdHlwZSk7CiAKK2V4dGVybiBib29sIGNoZWNrX3BhcnRyZWxf aGFzX2ZvcmVpZ25fdGFibGUoUmVsYXRpb24gcmVsKTsKKworZXh0ZXJuIHZvaWQgY2hlY2tfZm9y ZWlnbl90YWJsZXMoT2lkIHNjaGVtYWlkLCBjaGFyICpwdWJuYW1lKTsKKwogI2VuZGlmCQkJCQkJ CS8qIFBHX1BVQkxJQ0FUSU9OX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcHVibGljYXRpb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNh dGlvbi5vdXQKaW5kZXggNGRlOTZjMDRmOWQuLjZhMGMyNDViZDYwIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dAorKysgYi9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dApAQCAtMTkyNCw2ICsxOTI0LDk1IEBAIERST1Ag UFVCTElDQVRJT04gcHViMTsKIERST1AgUFVCTElDQVRJT04gcHViMjsKIERST1AgVEFCTEUgZ2Vu Y29sczsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CistLSA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIFRlc3Qgd2hlbiBmb3JlaWdu IHRhYmxlIGlzIGEgcGFydGl0aW9uIG9mIGEgcGFydGl0aW9uZWQgdGFibGUgb24gd2hpY2gKKy0t IHB1YmxpY2F0aW9uIGlzIGNyZWF0ZWQKK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9S JzsKK0NSRUFURSBGT1JFSUdOIERBVEEgV1JBUFBFUiB0ZXN0X2ZkdzsKK0NSRUFURSBTRVJWRVIg ZmR3X3NlcnZlciBGT1JFSUdOIERBVEEgV1JBUFBFUiB0ZXN0X2ZkdzsKK0NSRUFURSBTQ0hFTUEg c2NoMzsKK0NSRUFURSBUQUJMRSBzY2gzLnRtYWluKGlkIGludCkgUEFSVElUSU9OIEJZIFJBTkdF KGlkKTsKK0NSRUFURSBUQUJMRSBzY2gzLnBhcnQxIFBBUlRJVElPTiBPRiBzY2gzLnRtYWluIEZP UiBWQUxVRVMgRlJPTSAoMCkgVE8gKDUpOworQ1JFQVRFIFRBQkxFIHNjaDMucGFydDIoaWQgaW50 KSBQQVJUSVRJT04gQlkgUkFOR0UoaWQpOworQ1JFQVRFIEZPUkVJR04gVEFCTEUgc2NoMy5wYXJ0 Ml8xIFBBUlRJVElPTiBPRiBzY2gzLnBhcnQyIEZPUiBWQUxVRVMgRlJPTSAoNSkgVE8gKDEwKSBT RVJWRVIgZmR3X3NlcnZlcjsKK0FMVEVSIFRBQkxFIHNjaDMudG1haW4gQVRUQUNIIFBBUlRJVElP TiBzY2gzLnBhcnQyIEZPUiBWQUxVRVMgRlJPTSAoNSkgVE8gKDEwKTsKKy0tIENhbid0IGNyZWF0 ZSBwdWJsaWNhdGlvbnMgd2l0aCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUsIGlm IHRhYmxlCistLSBoYXMgYSBmb3JlaWduIHBhcnRpdGlvbgorQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1 YjEgRk9SIFRBQkxFIHNjaDMudG1haW4gV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3Qp OworRVJST1I6ICBjYW5ub3Qgc2V0IHBhcmFtZXRlciAicHVibGlzaF92aWFfcGFydGl0aW9uX3Jv b3QiIHRvIHRydWUgZm9yIHB1YmxpY2F0aW9uICJwdWIxIgorREVUQUlMOiAgcGFydGl0aW9uIHRh YmxlICJ0bWFpbiIgaW4gcHVibGljYXRpb24gY29udGFpbnMgYSBmb3JlaWduIHBhcnRpdGlvbgor Q1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgc2NoMyBXSVRIIChw dWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CitFUlJPUjogIGNhbm5vdCBzZXQgcGFyYW1ldGVy ICJwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCIgdG8gdHJ1ZSBmb3IgcHVibGljYXRpb24gInB1 YjEiCitERVRBSUw6ICBwYXJ0aXRpb24gdGFibGUgInRtYWluIiBpbiBwdWJsaWNhdGlvbiBjb250 YWlucyBhIGZvcmVpZ24gcGFydGl0aW9uCitDUkVBVEUgUFVCTElDQVRJT04gcHViMSBGT1IgQUxM IFRBQkxFUyBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CitFUlJPUjogIGNhbm5v dCBzZXQgcGFyYW1ldGVyICJwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCIgdG8gdHJ1ZSBmb3Ig cHVibGljYXRpb24gInB1YjEiCitERVRBSUw6ICBwYXJ0aXRpb24gdGFibGUgInRtYWluIiBpbiBw dWJsaWNhdGlvbiBjb250YWlucyBhIGZvcmVpZ24gcGFydGl0aW9uCistLSBUZXN0IHdoZW4gYSBw YXJ0aXRpb25lZCB0YWJsZSB3aXRoIGZvcmVpZ24gdGFibGUgYXMgYSBwYXJ0aXRpb24gaXMgYXR0 YWNoZWQKKy0tIHRvIHBhcnRpdGlvbmVkIHRhYmxlIHdoaWNoIGlzIGFscmVhZHkgcHVibGlzaGVk CitBTFRFUiBUQUJMRSBzY2gzLnRtYWluIERFVEFDSCBQQVJUSVRJT04gc2NoMy5wYXJ0MjsKK0NS RUFURSBQVUJMSUNBVElPTiBwdWIxIEZPUiBUQUJMRSBzY2gzLnRtYWluIFdJVEggKHB1Ymxpc2hf dmlhX3BhcnRpdGlvbl9yb290KTsKK0FMVEVSIFRBQkxFIHNjaDMudG1haW4gQVRUQUNIIFBBUlRJ VElPTiBzY2gzLnBhcnQyIEZPUiBWQUxVRVMgRlJPTSAoNSkgVE8gKDEwKTsKK0VSUk9SOiAgY2Fu bm90IGF0dGFjaCB0YWJsZSAicGFydDIiIHdpdGggZm9yZWlnbiBwYXJ0aXRpb24gdG8gcGFydGl0 aW9uIHRhYmxlICJ0bWFpbiIKK0RFVEFJTDogIHBhcnRpdGlvbiB0YWJsZSAidG1haW4iIGlzIHB1 Ymxpc2hlZCB3aXRoIG9wdGlvbiBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdAorLS0gQ2FuJ3Qg Y3JlYXRlIGZvcmVpZ24gcGFydGl0aW9uIG9mIHB1Ymxpc2hlZCB0YWJsZSB3aXRoCistLSBwdWJs aXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUKK0NSRUFURSBGT1JFSUdOIFRBQkxFIHNjaDMu cGFydDNfMSBQQVJUSVRJT04gT0Ygc2NoMy50bWFpbiBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAo MTUpIFNFUlZFUiBmZHdfc2VydmVyOworRVJST1I6ICBjYW5ub3QgY3JlYXRlIHRhYmxlIGZvcmVp Z24gcGFydGl0aW9uICJwYXJ0M18xIgorREVUQUlMOiAgcGFydGl0aW9uIHRhYmxlICJ0bWFpbiIg aXMgcHVibGlzaGVkIHdpdGggb3B0aW9uIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290CistLSBD YW4ndCBhdHRhY2ggZm9yZWlnbiBwYXJ0aXRpb24gdG8gcHVibGlzaGVkIHRhYmxlIHdpdGgKKy0t IHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZQorQ1JFQVRFIEZPUkVJR04gVEFCTEUg c2NoMy5wYXJ0M18yKGlkIGludCkgU0VSVkVSIGZkd19zZXJ2ZXI7CitBTFRFUiBUQUJMRSBzY2gz LnRtYWluIEFUVEFDSCBQQVJUSVRJT04gc2NoMy5wYXJ0M18yIEZPUiBWQUxVRVMgRlJPTSAoMTUp IFRPICgyMCk7CitFUlJPUjogIGNhbm5vdCBhdHRhY2ggZm9yZWlnbiB0YWJsZSAicGFydDNfMiIg dG8gcGFydGl0aW9uIHRhYmxlICJ0bWFpbiIKK0RFVEFJTDogIHBhcnRpdGlvbiB0YWJsZSAidG1h aW4iIGlzIHB1Ymxpc2hlZCB3aXRoIG9wdGlvbiBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdAor Q1JFQVRFIFNDSEVNQSBzY2g0OworQ1JFQVRFIFRBQkxFIHNjaDQudG1haW4oaWQgaW50KSBQQVJU SVRJT04gQlkgUkFOR0UoaWQpOworLS0gcHVibGljYXRpb24gY3JlYXRlZCB3aXRoIEZPUiBUQUJM RVMgSU4gU0NIRU1BCitEUk9QIFBVQkxJQ0FUSU9OIHB1YjE7CitDUkVBVEUgUFVCTElDQVRJT04g cHViMSBGT1IgVEFCTEVTIElOIFNDSEVNQSBzY2g0IFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlv bl9yb290KTsKKy0tIENhbid0IGNyZWF0ZSBmb3JlaWduIHBhcnRpdGlvbiBvZiBwdWJsaXNoZWQg dGFibGUgd2l0aAorLS0gcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlCitDUkVBVEUg Rk9SRUlHTiBUQUJMRSBzY2gzLnBhcnQzXzEgUEFSVElUSU9OIE9GIHNjaDQudG1haW4gRk9SIFZB TFVFUyBGUk9NICgxMCkgVE8gKDE1KSBTRVJWRVIgZmR3X3NlcnZlcjsKK0VSUk9SOiAgY2Fubm90 IGNyZWF0ZSB0YWJsZSBmb3JlaWduIHBhcnRpdGlvbiAicGFydDNfMSIKK0RFVEFJTDogIHBhcnRp dGlvbiB0YWJsZSAidG1haW4iIGlzIHB1Ymxpc2hlZCB3aXRoIG9wdGlvbiBwdWJsaXNoX3ZpYV9w YXJ0aXRpb25fcm9vdAorLS0gQ2FuJ3QgYXR0YWNoIGZvcmVpZ24gcGFydGl0aW9uIHRvIHB1Ymxp c2hlZCB0YWJsZSB3aXRoCistLSBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUKK0FM VEVSIFRBQkxFIHNjaDQudG1haW4gQVRUQUNIIFBBUlRJVElPTiBzY2gzLnBhcnQzXzIgRk9SIFZB TFVFUyBGUk9NICgxNSkgVE8gKDIwKTsKK0VSUk9SOiAgY2Fubm90IGF0dGFjaCBmb3JlaWduIHRh YmxlICJwYXJ0M18yIiB0byBwYXJ0aXRpb24gdGFibGUgInRtYWluIgorREVUQUlMOiAgcGFydGl0 aW9uIHRhYmxlICJ0bWFpbiIgaXMgcHVibGlzaGVkIHdpdGggb3B0aW9uIHB1Ymxpc2hfdmlhX3Bh cnRpdGlvbl9yb290CitEUk9QIFBVQkxJQ0FUSU9OIHB1YjE7CistLSBUZXN0IHdpdGggcHVibGlz aF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZQorLS0gRm9yZWlnbiBwYXJ0aXRpb25zIGFyZSBz a2lwcGVkIGJ5IGRlZmF1bHQKK0NSRUFURSBQVUJMSUNBVElPTiBwdWIxIEZPUiBUQUJMRSBzY2gz LnRtYWluOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjIgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgc2No MzsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWIzIEZPUiBBTEwgVEFCTEVTOworLS0gQ3JlYXRlIGZv cmVpZ24gcGFydGl0aW9uIG9mIHB1Ymxpc2hlZCB0YWJsZSB3aXRoCistLSBwdWJsaXNoX3ZpYV9w YXJ0aXRpb25fcm9vdCA9IGZhbHNlCitDUkVBVEUgRk9SRUlHTiBUQUJMRSBzY2gzLnBhcnQzXzEg UEFSVElUSU9OIE9GIHNjaDMudG1haW4gRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8gKDE1KSBTRVJW RVIgZmR3X3NlcnZlcjsKKy0tIEF0dGFjaCBmb3JlaWduIHBhcnRpdGlvbiB0byBwdWJsaXNoZWQg dGFibGUKKy0tIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UKK0FMVEVSIFRBQkxF IHNjaDMudG1haW4gQVRUQUNIIFBBUlRJVElPTiBzY2gzLnBhcnQzXzIgRk9SIFZBTFVFUyBGUk9N ICgxNSkgVE8gKDIwKTsKKy0tIENoZWNrIHRoZSBwdWJsaXNoZWQgdGFibGVzCitTRUxFQ1QgcHVi bmFtZSwgdGFibGVuYW1lIEZST00gcGdfcHVibGljYXRpb25fdGFibGVzIFdIRVJFIHNjaGVtYW5h bWUgaW4gKCdzY2gzJywgJ3NjaDQnKSBPUkRFUiBCWSBwdWJuYW1lLCB0YWJsZW5hbWU7CisgcHVi bmFtZSB8IHRhYmxlbmFtZSAKKy0tLS0tLS0tLSstLS0tLS0tLS0tLQorIHB1YjEgICAgfCBwYXJ0 MQorIHB1YjIgICAgfCBwYXJ0MQorIHB1YjMgICAgfCBwYXJ0MQorKDMgcm93cykKKworLS0gQ2Fu J3QgYWx0ZXIgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgdG8gdHJ1ZSwgaWYgcHVibGljYXRp b24gYWxyZWFkeSBoYXZlCistLSBmb3JlaWduIHBhcnRpdGlvbgorQUxURVIgUFVCTElDQVRJT04g cHViMSBTRVQgKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKK0VSUk9SOiAgY2Fubm90IHNl dCBwYXJhbWV0ZXIgInB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IiB0byB0cnVlIGZvciBwdWJs aWNhdGlvbiAicHViMSIKK0RFVEFJTDogIHBhcnRpdGlvbiB0YWJsZSAidG1haW4iIGluIHB1Ymxp Y2F0aW9uIGNvbnRhaW5zIGEgZm9yZWlnbiBwYXJ0aXRpb24KK0RST1AgUFVCTElDQVRJT04gcHVi MTsKK0RST1AgUFVCTElDQVRJT04gcHViMjsKK0RST1AgUFVCTElDQVRJT04gcHViMzsKK0RST1Ag U0NIRU1BIHNjaDMgQ0FTQ0FERTsKK0RST1AgU0NIRU1BIHNjaDQgQ0FTQ0FERTsKK0RST1AgU0VS VkVSIGZkd19zZXJ2ZXI7CitEUk9QIEZPUkVJR04gREFUQSBXUkFQUEVSIHRlc3RfZmR3OwogUkVT RVQgU0VTU0lPTiBBVVRIT1JJWkFUSU9OOwogRFJPUCBST0xFIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMjsKIERST1AgUk9MRSByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXJfZHVtbXk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJs aWNhdGlvbi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwKaW5kZXgg NjgwMDFkZTQwMDAuLjQ5YzlkOThiNjY4IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9wdWJsaWNhdGlvbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24u c3FsCkBAIC0xMjIzLDYgKzEyMjMsODcgQEAgRFJPUCBQVUJMSUNBVElPTiBwdWIyOwogRFJPUCBU QUJMRSBnZW5jb2xzOwogCiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOworLS0gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy0tIFRlc3Qg d2hlbiBmb3JlaWduIHRhYmxlIGlzIGEgcGFydGl0aW9uIG9mIGEgcGFydGl0aW9uZWQgdGFibGUg b24gd2hpY2gKKy0tIHB1YmxpY2F0aW9uIGlzIGNyZWF0ZWQKK1NFVCBjbGllbnRfbWluX21lc3Nh Z2VzID0gJ0VSUk9SJzsKK0NSRUFURSBGT1JFSUdOIERBVEEgV1JBUFBFUiB0ZXN0X2ZkdzsKK0NS RUFURSBTRVJWRVIgZmR3X3NlcnZlciBGT1JFSUdOIERBVEEgV1JBUFBFUiB0ZXN0X2ZkdzsKKwor Q1JFQVRFIFNDSEVNQSBzY2gzOworQ1JFQVRFIFRBQkxFIHNjaDMudG1haW4oaWQgaW50KSBQQVJU SVRJT04gQlkgUkFOR0UoaWQpOworQ1JFQVRFIFRBQkxFIHNjaDMucGFydDEgUEFSVElUSU9OIE9G IHNjaDMudG1haW4gRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoNSk7CitDUkVBVEUgVEFCTEUgc2No My5wYXJ0MihpZCBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRShpZCk7CitDUkVBVEUgRk9SRUlHTiBU QUJMRSBzY2gzLnBhcnQyXzEgUEFSVElUSU9OIE9GIHNjaDMucGFydDIgRk9SIFZBTFVFUyBGUk9N ICg1KSBUTyAoMTApIFNFUlZFUiBmZHdfc2VydmVyOworQUxURVIgVEFCTEUgc2NoMy50bWFpbiBB VFRBQ0ggUEFSVElUSU9OIHNjaDMucGFydDIgRk9SIFZBTFVFUyBGUk9NICg1KSBUTyAoMTApOwor CistLSBDYW4ndCBjcmVhdGUgcHVibGljYXRpb25zIHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9u X3Jvb3QgPSB0cnVlLCBpZiB0YWJsZQorLS0gaGFzIGEgZm9yZWlnbiBwYXJ0aXRpb24KK0NSRUFU RSBQVUJMSUNBVElPTiBwdWIxIEZPUiBUQUJMRSBzY2gzLnRtYWluIFdJVEggKHB1Ymxpc2hfdmlh X3BhcnRpdGlvbl9yb290KTsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWIxIEZPUiBUQUJMRVMgSU4g U0NIRU1BIHNjaDMgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOworQ1JFQVRFIFBV QkxJQ0FUSU9OIHB1YjEgRk9SIEFMTCBUQUJMRVMgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9u X3Jvb3QpOworCistLSBUZXN0IHdoZW4gYSBwYXJ0aXRpb25lZCB0YWJsZSB3aXRoIGZvcmVpZ24g dGFibGUgYXMgYSBwYXJ0aXRpb24gaXMgYXR0YWNoZWQKKy0tIHRvIHBhcnRpdGlvbmVkIHRhYmxl IHdoaWNoIGlzIGFscmVhZHkgcHVibGlzaGVkCitBTFRFUiBUQUJMRSBzY2gzLnRtYWluIERFVEFD SCBQQVJUSVRJT04gc2NoMy5wYXJ0MjsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWIxIEZPUiBUQUJM RSBzY2gzLnRtYWluIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKK0FMVEVSIFRB QkxFIHNjaDMudG1haW4gQVRUQUNIIFBBUlRJVElPTiBzY2gzLnBhcnQyIEZPUiBWQUxVRVMgRlJP TSAoNSkgVE8gKDEwKTsKKworLS0gQ2FuJ3QgY3JlYXRlIGZvcmVpZ24gcGFydGl0aW9uIG9mIHB1 Ymxpc2hlZCB0YWJsZSB3aXRoCistLSBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUK K0NSRUFURSBGT1JFSUdOIFRBQkxFIHNjaDMucGFydDNfMSBQQVJUSVRJT04gT0Ygc2NoMy50bWFp biBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMTUpIFNFUlZFUiBmZHdfc2VydmVyOworCistLSBD YW4ndCBhdHRhY2ggZm9yZWlnbiBwYXJ0aXRpb24gdG8gcHVibGlzaGVkIHRhYmxlIHdpdGgKKy0t IHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZQorQ1JFQVRFIEZPUkVJR04gVEFCTEUg c2NoMy5wYXJ0M18yKGlkIGludCkgU0VSVkVSIGZkd19zZXJ2ZXI7CitBTFRFUiBUQUJMRSBzY2gz LnRtYWluIEFUVEFDSCBQQVJUSVRJT04gc2NoMy5wYXJ0M18yIEZPUiBWQUxVRVMgRlJPTSAoMTUp IFRPICgyMCk7CisKK0NSRUFURSBTQ0hFTUEgc2NoNDsKK0NSRUFURSBUQUJMRSBzY2g0LnRtYWlu KGlkIGludCkgUEFSVElUSU9OIEJZIFJBTkdFKGlkKTsKKworLS0gcHVibGljYXRpb24gY3JlYXRl ZCB3aXRoIEZPUiBUQUJMRVMgSU4gU0NIRU1BCitEUk9QIFBVQkxJQ0FUSU9OIHB1YjE7CitDUkVB VEUgUFVCTElDQVRJT04gcHViMSBGT1IgVEFCTEVTIElOIFNDSEVNQSBzY2g0IFdJVEggKHB1Ymxp c2hfdmlhX3BhcnRpdGlvbl9yb290KTsKKworLS0gQ2FuJ3QgY3JlYXRlIGZvcmVpZ24gcGFydGl0 aW9uIG9mIHB1Ymxpc2hlZCB0YWJsZSB3aXRoCistLSBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9v dCA9IHRydWUKK0NSRUFURSBGT1JFSUdOIFRBQkxFIHNjaDMucGFydDNfMSBQQVJUSVRJT04gT0Yg c2NoNC50bWFpbiBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMTUpIFNFUlZFUiBmZHdfc2VydmVy OworCistLSBDYW4ndCBhdHRhY2ggZm9yZWlnbiBwYXJ0aXRpb24gdG8gcHVibGlzaGVkIHRhYmxl IHdpdGgKKy0tIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZQorQUxURVIgVEFCTEUg c2NoNC50bWFpbiBBVFRBQ0ggUEFSVElUSU9OIHNjaDMucGFydDNfMiBGT1IgVkFMVUVTIEZST00g KDE1KSBUTyAoMjApOworRFJPUCBQVUJMSUNBVElPTiBwdWIxOworCistLSBUZXN0IHdpdGggcHVi bGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZQorLS0gRm9yZWlnbiBwYXJ0aXRpb25zIGFy ZSBza2lwcGVkIGJ5IGRlZmF1bHQKK0NSRUFURSBQVUJMSUNBVElPTiBwdWIxIEZPUiBUQUJMRSBz Y2gzLnRtYWluOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjIgRk9SIFRBQkxFUyBJTiBTQ0hFTUEg c2NoMzsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWIzIEZPUiBBTEwgVEFCTEVTOworCistLSBDcmVh dGUgZm9yZWlnbiBwYXJ0aXRpb24gb2YgcHVibGlzaGVkIHRhYmxlIHdpdGgKKy0tIHB1Ymxpc2hf dmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UKK0NSRUFURSBGT1JFSUdOIFRBQkxFIHNjaDMucGFy dDNfMSBQQVJUSVRJT04gT0Ygc2NoMy50bWFpbiBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMTUp IFNFUlZFUiBmZHdfc2VydmVyOworCistLSBBdHRhY2ggZm9yZWlnbiBwYXJ0aXRpb24gdG8gcHVi bGlzaGVkIHRhYmxlCistLSBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlCitBTFRF UiBUQUJMRSBzY2gzLnRtYWluIEFUVEFDSCBQQVJUSVRJT04gc2NoMy5wYXJ0M18yIEZPUiBWQUxV RVMgRlJPTSAoMTUpIFRPICgyMCk7CisKKy0tIENoZWNrIHRoZSBwdWJsaXNoZWQgdGFibGVzCitT RUxFQ1QgcHVibmFtZSwgdGFibGVuYW1lIEZST00gcGdfcHVibGljYXRpb25fdGFibGVzIFdIRVJF IHNjaGVtYW5hbWUgaW4gKCdzY2gzJywgJ3NjaDQnKSBPUkRFUiBCWSBwdWJuYW1lLCB0YWJsZW5h bWU7CisKKy0tIENhbid0IGFsdGVyIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IHRvIHRydWUs IGlmIHB1YmxpY2F0aW9uIGFscmVhZHkgaGF2ZQorLS0gZm9yZWlnbiBwYXJ0aXRpb24KK0FMVEVS IFBVQkxJQ0FUSU9OIHB1YjEgU0VUIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CisKK0RS T1AgUFVCTElDQVRJT04gcHViMTsKK0RST1AgUFVCTElDQVRJT04gcHViMjsKK0RST1AgUFVCTElD QVRJT04gcHViMzsKK0RST1AgU0NIRU1BIHNjaDMgQ0FTQ0FERTsKK0RST1AgU0NIRU1BIHNjaDQg Q0FTQ0FERTsKK0RST1AgU0VSVkVSIGZkd19zZXJ2ZXI7CitEUk9QIEZPUkVJR04gREFUQSBXUkFQ UEVSIHRlc3RfZmR3OworCiBSRVNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT047CiBEUk9QIFJPTEUg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyLCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyOwogRFJP UCBST0xFIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcl9kdW1teTsKLS0gCjIuMzQuMQoK --000000000000c45e2e063163e86c--