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 1uH3QD-00CclJ-RT for pgsql-hackers@arkaria.postgresql.org; Mon, 19 May 2025 16:33:02 +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 1uH3QC-00HAdx-Ny for pgsql-hackers@arkaria.postgresql.org; Mon, 19 May 2025 16:33: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 1uH3QB-00HAdo-W3 for pgsql-hackers@lists.postgresql.org; Mon, 19 May 2025 16:33:00 +0000 Received: from mail-yw1-x112d.google.com ([2607:f8b0:4864:20::112d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uH3Q9-002baG-1J for pgsql-hackers@lists.postgresql.org; Mon, 19 May 2025 16:32:59 +0000 Received: by mail-yw1-x112d.google.com with SMTP id 00721157ae682-70ca2888e99so28263807b3.0 for ; Mon, 19 May 2025 09:32:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747672377; x=1748277177; 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=vh+cBhiKT67p/2hGjiu7XUf5nmUEnMHKFxRC/Oa7luk=; b=kJOrA376dHKyN6Xfz4+S1bGIZUSRq1C3GuL4n4KKOQ5Ysmvzo19njPWAw3YsvrCEb0 FgRZKnxwTK/APGE0wLfebnW+0YR/UtNqSd2fAHN3PYNR3BZcWuVwNbYyD2kHVjGxptxU cBuMzPkpS1rZfvwDN0NL74QsFgDX7/j8MfLsuJrU4Hq1jm7h7EIov4adieqSTKrKW5RA HoH65x57CRFfY9GKwQ1LPMBjMZymmf1Cu6mZ3+MB6pahGLAVitpAUVxuSTTNfmfy8Pgj hheWglK6Wb59R4076I9cpkXMOcVWlEU2bnJNeaZ+j9DDEcqq4aZkiO5D4GKO278CtH51 yRzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747672377; x=1748277177; 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=vh+cBhiKT67p/2hGjiu7XUf5nmUEnMHKFxRC/Oa7luk=; b=eOVrkNSobQTt8sIuv6m9q22KjaNkPhE70/hZq7jHQ3f64sIqXX1yP0dWDQfJ0AocSJ +0FD48vHvKBG4uiNCKmSgMHY1XCGWqI7MmNzFudo5QyrsZoLpUvIDQxq6NzBiIKxhOfy liay3oUcktWGjV+XHloaVqKius5XvKmYOoNq1RCj9uOMF7NU9kMt0pNzfGub97rqUAWC ni+Ip6K8YdAZIMeC+hg0aUvJpGebrcu6aiFcy1AlPRZXalnYZ2YlmQHiUIq0pTqmQOZt oV68YFz4ryYQH59rQ7C9pCJmr2Ecgpf+I4SUL9axpJ43Hz+O4U3EDgu/ox+L/bm0OvT8 Gklw== X-Forwarded-Encrypted: i=1; AJvYcCWpLx36UUIdzMsZSeoHIp82A7lFXvaTiVvABDpMc6sV5sfg74/FOkbFJwhdXldmACY5nwyOSvVUrKNXj/YQ@lists.postgresql.org X-Gm-Message-State: AOJu0YzwIEC/gCUJ4C0/MlMojmxbpyM4Klq7oylr/pcUcXfJZwZ7OMEd IE9YFIkee0VybO9kmlVCPcDOiiBOSkVEEYOe4O+RgYXbqnBsBB7NqJlvXIIGB4KB+p3gKSLIeOQ GLF96ypKpJwJwuX6FyySg8VXwTJiEUAg= X-Gm-Gg: ASbGncvoklKv1ji3J5RxyT4hiN47pBAX88YpcmT3EnWfzrpX+u7J9GEzi9Jxl1xjMVh VzDI/pmM+oW+gIo4bgbdTstFAfS0nNRmzqNsJIMcm7E8iTYnewEON7889LbxKHP6wLS4Pjw5RLG IZ0Scnfoe+vWTGo/LFkRTxMJ/+e0VHLgYATYk= X-Google-Smtp-Source: AGHT+IF48jwdJq8gfriCAeBh4DHTabYP44zIXd8V2EC660FPSX+S+i9sK4eULXlPF5xRzmun2oN11NBfMuzU193DFz4= X-Received: by 2002:a05:690c:3:b0:6f9:97f7:a5c4 with SMTP id 00721157ae682-70ca7a58028mr193968507b3.29.1747672377117; Mon, 19 May 2025 09:32:57 -0700 (PDT) MIME-Version: 1.0 References: <202505101759.6qlloepaeddl@alvherre.pgsql> In-Reply-To: From: Shlok Kyal Date: Mon, 19 May 2025 22:02:41 +0530 X-Gm-Features: AX0GCFsB_6Qyl6z29e86KGMFZftqFiUTpIIqmRuy3ZxdEuIjRPy1nfCKl8oFhsc Message-ID: Subject: Re: Restrict publishing of partitioned table with a foreign table as partition To: Amit Kapila Cc: =?UTF-8?Q?=C3=81lvaro_Herrera?= , vignesh C , Sergey Tatarintsev , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000003925ac06357fafdd" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000003925ac06357fafdd Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, 15 May 2025 at 18:19, Amit Kapila wrote: > > On Sun, May 11, 2025 at 6:53=E2=80=AFAM =C3=81lvaro Herrera wrote: > > > > But the non-idiomatic locking of pg_partitioned_table appears to > > continue to be the pain point of this patch. My impression is that > > using a lock is the wrong approach to solve the concurrency problem. > > Maybe we can use a ConditionVariable instead somehow. (The real trick > > here is to figure out exactly _how_ to use the CV, I mean what exactly > > is the condition that the CV sleeps on?) > > > > Can we fix this problem by having a check at the time of > CREATESUBSCRIPTION such that, if copy-data is true, then we ensure > that the specified publishers don't have a foreign table? We have a > somewhat similar check for publications in the function > check_publications_origin(), though for a different purpose. Along > with it, we can still have a check during foreign table > creation/attach that it doesn't become part of some publication, as > the patch may have it now. > This approach seems better to me. I have created a patch with the above approach. Thanks and Regards, Shlok Kyal --0000000000003925ac06357fafdd Content-Type: application/octet-stream; name="v15-0001-Restrict-publishing-of-partitioned-table-with-fo.patch" Content-Disposition: attachment; filename="v15-0001-Restrict-publishing-of-partitioned-table-with-fo.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mavaz8g00 RnJvbSBmMTM4MDlmOWE0NmQxOGVlYzAyNDA3Y2Y2ZWE0YTEwNDYyN2U5YTljIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaGxvayBLeWFsIDxzaGxvay5reWFsLm9zc0BnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMTkgTWF5IDIwMjUgMTk6NDc6MDQgKzA1MzAKU3ViamVjdDogW1BBVENIIHYx NV0gUmVzdHJpY3QgcHVibGlzaGluZyBvZiBwYXJ0aXRpb25lZCB0YWJsZSB3aXRoIGZvcmVpZ24K IHRhYmxlIGFzIGl0cyBwYXJ0aXRpb24KCkxvZ2ljYWwgcmVwbGljYXRpb24gb2YgZm9yZWlnbiB0 YWJsZSBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3ZSB0aHJvdyBhbgplcnJvciBpbiB0aGlzIGNhc2Uu IEJ1dCB3aGVuIHdlIGNyZWF0ZSBhIHB1YmxpY2F0aW9uIG9uIGEgcGFydGl0aW9uZWQKdGFibGUg dGhhdCBoYXMgYSBmb3JlaWduIHRhYmxlIGFzIGl0cyBwYXJ0aXRpb24sIHRoZSBpbml0aWFsIHN5 bmMgb2YKc3VjaCB0YWJsZSBpcyBzdWNjZXNzZnVsIGFuZCB3ZSBzaG91bGQgYXZvaWQgc3VjaCBj YXNlcy4KCkN1cnJlbnQgQmVoYXZpb3VyIGluIEhFQUQsIHdoZW4gcHVibGljYXRpb24gaXMgY3Jl YXRlZDoKMS4gd2l0aCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUKVGhlIHJvb3Qg dGFibGUgaXMgcHVibGlzaGVkLCBhbmQgaW5pdGlhbCBkYXRhIGZyb20gcGFydGl0aW9ucyB0aGF0 IGFyZQpmb3JlaWduIHRhYmxlcyBpcyByZXBsaWNhdGVkLgoKMi4gd2l0aCBwdWJsaXNoX3ZpYV9w YXJ0aXRpb25fcm9vdCA9IGZhbHNlIGFuZCBGT1IgQUxMIFRBQkxFUwpBbGwgbGVhZiB0YWJsZXMg ZXhjZXB0IHBhcnRpdGlvbnMgdGhhdCBhcmUgZm9yZWlnbiB0YWJsZXMgYXJlIHB1Ymxpc2hlZC4K CjMuIHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZSBhbmQKRk9SIFRBQkxF LyBGT1IgVEFCTEVTIElOIFNDSEVNQQpBbGwgbGVhZiB0YWJsZXMgYXJlIHB1Ymxpc2hlZCwgaW5j bHVkaW5nIGluaXRpYWwgZGF0YSBmcm9tIHBhcnRpdGlvbnMKdGhhdCBhcmUgZm9yZWlnbiB0YWJs ZXMuCgpXaXRoIHRoaXMgcGF0Y2ggd2UgaGF2ZSBmb2xsb3dpbmcgYmVoYXZpb3VyOgoxLiB3aXRo IHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZQpBbiBlcnJvciBpcyB0aHJvd24gd2hl biB3ZSB0cnkgdG8gY3JlYXRlIHN1YnNjcmlwdGlvbiAod2l0aCBjb3B5X2RhdGEgPSB0cnVlKQpv biBwdWJsaWNhdGlvbiB3aXRoIHBhcnRpdGlvbmVkIHRhYmxlIHdpdGggZm9yZWlnbiBwYXJ0aXRp b24uCldoZW4gY29weV9kYXRhID0gZmFsc2UsIHdlIGRvbm90IG5lZWQgdGhpcyBjaGVjayBhcyBp bml0aWFsIHN5bmMgaXMgbm90CnBlcmZvcm1lZC4KQWxzbyB3ZSByZXN0cmljdCBjcmVhdGluZy9h dHRhY2hpbmcgYSBmb3JlaWduIHRhYmxlIGFzIHBhcnRpdGlvbiBvZiBhCnBhcnRpdGlvbmVkIHRh YmxlIHdoaWNoIGlzIHBhcnQgb2YgYW55IHB1YmxpY2F0aW9uLgoKMi4gd2l0aCBwdWJsaXNoX3Zp YV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlCldlIHNraXAgcHVibGlzaGluZyBwYXJ0aXRpb25zIHRo YXQgYXJlIGZvcmVpZ24gdGFibGVzLiBUaGlzIGlzIGRvbmUgYnkKYXZvaWQgYWRkaW5nIHN1Y2gg cGFydGl0aW9ucyBpbiBwZ19zdWJzY3JpcHRpb25fcmVsIGNhdGFsb2cgdGFibGUuCgpXZSBoYXZl IGludHJvZHVjZWQgdHdvIGZ1bmN0aW9ucyAnUmVsYXRpb25IYXNGb3JlaWduUGFydGl0aW9uJyBh bmQKJ2NoZWNrX3B1YmxpY2F0aW9uc19mb3JlaWduX3BhcnRzJy4gSW4gJ1JlbGF0aW9uSGFzRm9y ZWlnblBhcnRpdGlvbicgd2UgZ28KdGhyb3VnaCB0aGUgY2hpbGQgbm9kZXMgb2YgYSBwYXJ0aXRp b24gYW5kIGNoZWNrIGlmIGl0IGhhcyBhIGZvcmVpZ24KdGFibGUuIEluICdjaGVja19wdWJsaWNh dGlvbnNfZm9yZWlnbl9wYXJ0cycgd2UgY2hlY2sgaWYgYSBzdWJzY3JpcHRpb24Kd2l0aCBjb3B5 X2RhdGEgPSB0cnVlIGlzIHN1YnNjcmliaW5nIHRvIGEgcHVibGljYXRpb24gd2hpY2ggaGFzIHBh cnRpdGlvbmVkCnRhYmxlIHdpdGggZm9yZWlnbiB0YWJsZSBhcyBpdHMgcGFydGl0aW9uLgotLS0K IGRvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwgICAgIHwgIDEwICstCiBkb2Mv c3JjL3NnbWwvcmVmL2NyZWF0ZV9zdWJzY3JpcHRpb24uc2dtbCB8ICAgNyArKwogc3JjL2JhY2tl bmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jICAgICAgfCAgMjYgKystLQogc3JjL2JhY2tlbmQv Y29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jICAgfCAxMDEgKysrKysrKysrKysrKysrKwogc3Jj L2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgfCAxMTAgKysrKysrKysrKysr KysrKysKIHNyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0ZGVzYy5jICAgICAgIHwgIDMyICsr KysrCiBzcmMvYmluL3BnX3VwZ3JhZGUvY2hlY2suYyAgICAgICAgICAgICAgICB8ICA4OSArKysr KysrKysrKysrKwogc3JjL2luY2x1ZGUvcGFydGl0aW9uaW5nL3BhcnRkZXNjLmggICAgICAgfCAg IDEgKwogc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL01ha2VmaWxlICAgICAgICAgICAgfCAgIDEgKwog c3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDEzX3BhcnRpdGlvbi5wbCAgfCAxMzkgKysrKysrKysr KysrKysrKysrKysrKwogMTAgZmlsZXMgY2hhbmdlZCwgNTAwIGluc2VydGlvbnMoKyksIDE2IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9u LnNnbWwgYi9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sCmluZGV4IGYyODhj MDQ5YTVjLi41NzIzNmE0NTJlOSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVw bGljYXRpb24uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21s CkBAIC0yMTU0LDEwICsyMTU0LDE4IEBAIENPTlRFWFQ6ICBwcm9jZXNzaW5nIHJlbW90ZSBkYXRh IGZvciByZXBsaWNhdGlvbiBvcmlnaW4gInBnXzE2Mzk1IiBkdXJpbmcgIklOU0VSCiAKICAgIDxs aXN0aXRlbT4KICAgICA8cGFyYT4KLSAgICAgUmVwbGljYXRpb24gaXMgb25seSBzdXBwb3J0ZWQg YnkgdGFibGVzLCBpbmNsdWRpbmcgcGFydGl0aW9uZWQgdGFibGVzLgorICAgICBSZXBsaWNhdGlv biBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgdGFibGVzLCBpbmNsdWRpbmcgcGFydGl0aW9uZWQgdGFi bGVzLgogICAgICBBdHRlbXB0cyB0byByZXBsaWNhdGUgb3RoZXIgdHlwZXMgb2YgcmVsYXRpb25z LCBzdWNoIGFzIHZpZXdzLCBtYXRlcmlhbGl6ZWQKICAgICAgdmlld3MsIG9yIGZvcmVpZ24gdGFi bGVzLCB3aWxsIHJlc3VsdCBpbiBhbiBlcnJvci4KICAgICA8L3BhcmE+CisgICAgPHBhcmE+Cisg ICAgIFJlcGxpY2F0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGZvcmVpZ24gdGFibGVzLiAgV2hl biB1c2VkIGFzIHBhcnRpdGlvbnMKKyAgICAgb2YgcGFydGl0aW9uZWQgdGFibGVzLCBwdWJsaXNo aW5nIG9mIHRoZSBwYXJ0aXRpb25lZCB0YWJsZSBpcyBvbmx5IGFsbG93ZWQKKyAgICAgaWYgdGhl IDxsaXRlcmFsPnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290PC9saXRlcmFsPiBpcyBzZXQgdG8K KyAgICAgPGxpdGVyYWw+ZmFsc2U8L2xpdGVyYWw+LiAgSW4gdGhpcyBtb2RlLCBjaGFuZ2VzIHRv IGEgcGFydGl0aW9uIHRoYXQgaXMgYQorICAgICBmb3JlaWduIHRhYmxlIGFyZSBpZ25vcmVkIGZv ciB0aGUgcHVycG9zZXMgb2YgcmVwbGljYXRpb24sIGFuZCBkYXRhCisgICAgIGNvbnRhaW5lZCBp biB0aGVtIGlzIG5vdCBpbmNsdWRlZCBkdXJpbmcgaW5pdGlhbCBzeW5jaHJvbml6YXRpb24uCisg ICAgPC9wYXJhPgogICAgPC9saXN0aXRlbT4KIAogICAgPGxpc3RpdGVtPgpkaWZmIC0tZ2l0IGEv ZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3Vic2NyaXB0aW9uLnNnbWwgYi9kb2Mvc3JjL3NnbWwv cmVmL2NyZWF0ZV9zdWJzY3JpcHRpb24uc2dtbAppbmRleCA1N2RlYzI4YTVkZi4uM2Q4OTkyZTI3 ZTMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5zZ21s CisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3N1YnNjcmlwdGlvbi5zZ21sCkBAIC01NDUs NiArNTQ1LDEzIEBAIFdIRVJFIEMucmVsbmFtZXNwYWNlID0gTi5vaWQgQU5ECiAgICAgICBQVC5w dWJuYW1lIElOICgmbHQ7cHViLW5hbWVzJmd0Oyk7CiA8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4K IAorICAgPHBhcmE+CisgICAgV2hlbiB1c2luZyBhIHN1YnNjcmlwdGlvbiBwYXJhbWV0ZXIgY29w eV9kYXRhID0gdHJ1ZSwgY29ycmVzcG9uZGluZworICAgIHB1YmxpY2F0aW9ucyBhcmUgY2hlY2tl ZCBpZiBpdCBoYXMgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlIGFuZAorICAgIGhh cyBwYXJ0aXRpb25lZCB0YWJsZSB3aXRoIGZvcmVpZ24gdGFibGUgYXMgcGFydGl0aW9uLiBJZiB0 aGlzIHNjZW5hcmlvIGlzCisgICAgZGV0ZWN0ZWQgd2UgRVJST1IgaXMgbG9nZ2VkIHRvIHRoZSB1 c2VyLgorICAgPC9wYXJhPgorCiAgPC9yZWZzZWN0MT4KIAogIDxyZWZzZWN0MT4KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYyBiL3NyYy9iYWNrZW5kL2Nh dGFsb2cvcGdfcHVibGljYXRpb24uYwppbmRleCBkNmY5NGRiNWQ5OS4uNTYyNTVkY2Q1Y2MgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYworKysgYi9zcmMv YmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKQEAgLTMwNCw3ICszMDQsNyBAQCBjaGVj a19hbmRfZmV0Y2hfY29sdW1uX2xpc3QoUHVibGljYXRpb24gKnB1YiwgT2lkIHJlbGlkLCBNZW1v cnlDb250ZXh0IG1jeHQsCiAKIC8qCiAgKiBHZXRzIHRoZSByZWxhdGlvbnMgYmFzZWQgb24gdGhl IHB1YmxpY2F0aW9uIHBhcnRpdGlvbiBvcHRpb24gZm9yIGEgc3BlY2lmaWVkCi0gKiByZWxhdGlv bi4KKyAqIHJlbGF0aW9uLiBGb3JlaWduIHRhYmxlcyBhcmUgbm90IGluY2x1ZGVkLgogICovCiBM aXN0ICoKIEdldFB1YlBhcnRpdGlvbk9wdGlvblJlbGF0aW9ucyhMaXN0ICpyZXN1bHQsIFB1Ymxp Y2F0aW9uUGFydE9wdCBwdWJfcGFydG9wdCwKQEAgLTMxMywyNSArMzEzLDIxIEBAIEdldFB1YlBh cnRpdGlvbk9wdGlvblJlbGF0aW9ucyhMaXN0ICpyZXN1bHQsIFB1YmxpY2F0aW9uUGFydE9wdCBw dWJfcGFydG9wdCwKIAlpZiAoZ2V0X3JlbF9yZWxraW5kKHJlbGlkKSA9PSBSRUxLSU5EX1BBUlRJ VElPTkVEX1RBQkxFICYmCiAJCXB1Yl9wYXJ0b3B0ICE9IFBVQkxJQ0FUSU9OX1BBUlRfUk9PVCkK IAl7Ci0JCUxpc3QJICAgKmFsbF9wYXJ0cyA9IGZpbmRfYWxsX2luaGVyaXRvcnMocmVsaWQsIE5v TG9jaywKLQkJCQkJCQkJCQkJCQlOVUxMKTsKKwkJTGlzdAkgICAqYWxsX3BhcnRzID0gZmluZF9h bGxfaW5oZXJpdG9ycyhyZWxpZCwgTm9Mb2NrLCBOVUxMKTsKIAotCQlpZiAocHViX3BhcnRvcHQg PT0gUFVCTElDQVRJT05fUEFSVF9BTEwpCi0JCQlyZXN1bHQgPSBsaXN0X2NvbmNhdChyZXN1bHQs IGFsbF9wYXJ0cyk7Ci0JCWVsc2UgaWYgKHB1Yl9wYXJ0b3B0ID09IFBVQkxJQ0FUSU9OX1BBUlRf TEVBRikKKwkJZm9yZWFjaF9vaWQocGFydE9pZCwgYWxsX3BhcnRzKQogCQl7Ci0JCQlMaXN0Q2Vs bCAgICpsYzsKKwkJCWNoYXIJCXJlbGtpbmQgPSBnZXRfcmVsX3JlbGtpbmQocGFydE9pZCk7CiAK LQkJCWZvcmVhY2gobGMsIGFsbF9wYXJ0cykKLQkJCXsKLQkJCQlPaWQJCQlwYXJ0T2lkID0gbGZp cnN0X29pZChsYyk7CisJCQlpZiAocmVsa2luZCA9PSBSRUxLSU5EX0ZPUkVJR05fVEFCTEUpCisJ CQkJY29udGludWU7CiAKLQkJCQlpZiAoZ2V0X3JlbF9yZWxraW5kKHBhcnRPaWQpICE9IFJFTEtJ TkRfUEFSVElUSU9ORURfVEFCTEUpCi0JCQkJCXJlc3VsdCA9IGxhcHBlbmRfb2lkKHJlc3VsdCwg cGFydE9pZCk7Ci0JCQl9CisJCQlpZiAocHViX3BhcnRvcHQgPT0gUFVCTElDQVRJT05fUEFSVF9M RUFGICYmCisJCQkJcmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQorCQkJCWNv bnRpbnVlOworCisJCQlyZXN1bHQgPSBsYXBwZW5kX29pZChyZXN1bHQsIHBhcnRPaWQpOwogCQl9 Ci0JCWVsc2UKLQkJCUFzc2VydChmYWxzZSk7CiAJfQogCWVsc2UKIAkJcmVzdWx0ID0gbGFwcGVu ZF9vaWQocmVzdWx0LCByZWxpZCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9z dWJzY3JpcHRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRz LmMKaW5kZXggNGFlYzczYmNjNmIuLmE4MWIzMzRkMTI3IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv c3Vic2NyaXB0aW9uY21kcy5jCkBAIC0xMTIsNiArMTEyLDkgQEAgc3RhdGljIExpc3QgKm1lcmdl X3B1YmxpY2F0aW9ucyhMaXN0ICpvbGRwdWJsaXN0LCBMaXN0ICpuZXdwdWJsaXN0LCBib29sIGFk ZHB1YiwKIHN0YXRpYyB2b2lkIFJlcG9ydFNsb3RDb25uZWN0aW9uRXJyb3IoTGlzdCAqcnN0YXRl cywgT2lkIHN1YmlkLCBjaGFyICpzbG90bmFtZSwgY2hhciAqZXJyKTsKIHN0YXRpYyB2b2lkIENo ZWNrQWx0ZXJTdWJPcHRpb24oU3Vic2NyaXB0aW9uICpzdWIsIGNvbnN0IGNoYXIgKm9wdGlvbiwK IAkJCQkJCQkJYm9vbCBzbG90X25lZWRzX3VwZGF0ZSwgYm9vbCBpc1RvcExldmVsKTsKK3N0YXRp YyB2b2lkIGNoZWNrX3B1YmxpY2F0aW9uc19mb3JlaWduX3BhcnRzKFdhbFJlY2VpdmVyQ29ubiAq d3Jjb25uLAorCQkJCQkJCQkJCQkgTGlzdCAqcHVibGljYXRpb25zLCBib29sIGNvcHlkYXRhLAor CQkJCQkJCQkJCQkgY2hhciAqc3VibmFtZSk7CiAKIAogLyoKQEAgLTcyMyw2ICs3MjYsOCBAQCBD cmVhdGVTdWJzY3JpcHRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVTdWJzY3JpcHRpb25T dG10ICpzdG10LAogCQkJY2hlY2tfcHVibGljYXRpb25zKHdyY29ubiwgcHVibGljYXRpb25zKTsK IAkJCWNoZWNrX3B1YmxpY2F0aW9uc19vcmlnaW4od3Jjb25uLCBwdWJsaWNhdGlvbnMsIG9wdHMu Y29weV9kYXRhLAogCQkJCQkJCQkJICBvcHRzLm9yaWdpbiwgTlVMTCwgMCwgc3RtdC0+c3VibmFt ZSk7CisJCQljaGVja19wdWJsaWNhdGlvbnNfZm9yZWlnbl9wYXJ0cyh3cmNvbm4sIHB1YmxpY2F0 aW9ucywKKwkJCQkJCQkJCQkJIG9wdHMuY29weV9kYXRhLCBzdG10LT5zdWJuYW1lKTsKIAogCQkJ LyoKIAkJCSAqIFNldCBzeW5jIHN0YXRlIGJhc2VkIG9uIGlmIHdlIHdlcmUgYXNrZWQgdG8gZG8g ZGF0YSBjb3B5IG9yCkBAIC04ODMsNiArODg4LDggQEAgQWx0ZXJTdWJzY3JpcHRpb25fcmVmcmVz aChTdWJzY3JpcHRpb24gKnN1YiwgYm9vbCBjb3B5X2RhdGEsCiAJCWNoZWNrX3B1YmxpY2F0aW9u c19vcmlnaW4od3Jjb25uLCBzdWItPnB1YmxpY2F0aW9ucywgY29weV9kYXRhLAogCQkJCQkJCQkg IHN1Yi0+b3JpZ2luLCBzdWJyZWxfbG9jYWxfb2lkcywKIAkJCQkJCQkJICBzdWJyZWxfY291bnQs IHN1Yi0+bmFtZSk7CisJCWNoZWNrX3B1YmxpY2F0aW9uc19mb3JlaWduX3BhcnRzKHdyY29ubiwg c3ViLT5wdWJsaWNhdGlvbnMsIGNvcHlfZGF0YSwKKwkJCQkJCQkJCQkgc3ViLT5uYW1lKTsKIAog CQkvKgogCQkgKiBSZWxzIHRoYXQgd2Ugd2FudCB0byByZW1vdmUgZnJvbSBzdWJzY3JpcHRpb24g YW5kIGRyb3AgYW55IHNsb3RzCkBAIC0yNTA3LDMgKzI1MTQsOTcgQEAgZGVmR2V0U3RyZWFtaW5n TW9kZShEZWZFbGVtICpkZWYpCiAJCQkJCWRlZi0+ZGVmbmFtZSkpKTsKIAlyZXR1cm4gTE9HSUNB TFJFUF9TVFJFQU1fT0ZGOwkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCiB9CisKKy8qCisgKiBj aGVja19wdWJsaWNhdGlvbnNfZm9yZWlnbl9wYXJ0cworICogQ2hlY2sgaWYgdGhlIHB1YmxpY2F0 aW9ucywgb24gd2hpY2ggc3Vic2NyaWJlciBpcyBzdWJzY3JpYmluZywgcHVibGlzaGVzIGFueQor ICogcGFydGl0aW9uZWQgdGFibGUgdGhhdCBoYXMgYW4gZm9yZWlnbiB0YWJsZSBhcyBpdHMgcGFy dGl0aW9uIGFuZCBoYXMKKyAqIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IHNldCBhcyB0cnVl LiBUaGUgY2hlY2sgaXMgcGVyZm9ybWVkIG9ubHkgaWYKKyAqIGNvcHlfZGF0YSBpcyBzZXQgYXMg dHJ1ZSBmb3IgdGhlIHN1YnNjcmlwdGlvbi4KKyAqCisgKiBETUwgZGF0YSBjaGFuZ2VzIGFyZSBu b3QgcHVibGlzaGVkIGZvciBkYXRhIGluIGZvcmVpZ24gdGFibGVzLAorICogYW5kIHlldCB0aGUg dGFibGVzeW5jIHdvcmtlciBpcyBub3Qgc21hcnQgZW5vdWdoIHRvIG9taXQgZGF0YSBmcm9tCisg KiBmb3JlaWduIHRhYmxlcyB3aGVuIHRoZXkgYXJlIHBhcnRpdGlvbnMgb2YgcGFydGl0aW9uZWQg dGFibGVzLiAgVG8KKyAqIGF2b2lkIHRoZSBpbmNvbnNpc3RlbmNpZXMgdGhhdCB3b3VsZCByZXN1 bHQsIHdlIGRpc2FsbG93IGZvcmVpZ24KKyAqIHRhYmxlcyBmcm9tIGJlaW5nIHB1Ymxpc2hlZCBn ZW5lcmFsbHkuICBIb3dldmVyLCBpdCdzIHBvc3NpYmxlIGZvcgorICogcGFydGl0aW9uZWQgdGFi bGVzIHRvIGhhdmUgZm9yZWlnbiB0YWJsZXMgYXMgcGFydGl0aW9ucywgYW5kIHdlIHdvdWxkCisg KiBsaWtlIHRvIGFsbG93IHB1Ymxpc2hpbmcgdGhvc2UgcGFydGl0aW9uZWQgdGFibGVzIHNvIHRo YXQgdGhlIG90aGVyCisgKiBwYXJ0aXRpb25zIGFyZSByZXBsaWNhdGVkLgorICoKKyAqIFRoaXMg ZnVuY3Rpb24gaXMgaW4gY2hhcmdlIG9mIGRldGVjdGluZyBpZiBwdWJsaXNoZXIgd2l0aAorICog cHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3Q9dHJ1ZSBwdWJsaXNoZXMgYSBwYXJ0aXRpb25lZCB0 YWJsZSB0aGF0IGhhcyBhCisgKiBmb3JlaWduIHRhYmxlIGFzIGEgcGFydGl0aW9uLgorICoKKyAq IFdoZW4gcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgaXMgZmFsc2UsIGVhY2ggcGFydGl0aW9u IHB1Ymxpc2hlZCBmb3IKKyAqIHJlcGxpY2F0aW9uIGlzIGxpc3RlZCBpbmRpdmlkdWFsbHkgaW4g cGdfc3Vic2NyaXB0aW9uX3JlbCwgYW5kIHdlCisgKiBkb24ndCBhZGQgcGFydGl0aW9ucyB0aGF0 IGFyZSBmb3JlaWduIHRhYmxlcywgc28gdGhpcyBjaGVjayBpcyBub3QKKyAqIG5lZWRlZC4KKyAq Lworc3RhdGljIHZvaWQKK2NoZWNrX3B1YmxpY2F0aW9uc19mb3JlaWduX3BhcnRzKFdhbFJlY2Vp dmVyQ29ubiAqd3Jjb25uLCBMaXN0ICpwdWJsaWNhdGlvbnMsCisJCQkJCQkJCSBib29sIGNvcHlk YXRhLCBjaGFyICpzdWJuYW1lKQoreworCVdhbFJjdkV4ZWNSZXN1bHQgKnJlczsKKwlTdHJpbmdJ bmZvRGF0YSBjbWQ7CisJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7CisJT2lkCQkJdGFibGVSb3dbMV0g PSB7VEVYVE9JRH07CisJTGlzdAkgICAqcHVibGlzdCA9IE5JTDsKKwlpbnQJCQlpOworCisJaWYg KCFjb3B5ZGF0YSkKKwkJcmV0dXJuOworCisJaW5pdFN0cmluZ0luZm8oJmNtZCk7CisJYXBwZW5k U3RyaW5nSW5mb1N0cmluZygmY21kLAorCQkJCQkJICAgIlNFTEVDVCBESVNUSU5DVCBQLnB1Ym5h bWUgQVMgcHVibmFtZSAiCisJCQkJCQkgICAiZnJvbSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9u IHAsIExBVEVSQUwgIgorCQkJCQkJICAgInBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMocC5wdWJu YW1lKSBncHQsIExBVEVSQUwgIgorCQkJCQkJICAgInBnX3BhcnRpdGlvbl90cmVlKGdwdC5yZWxp ZCkgZ3QgSk9JTiBwZ19jYXRhbG9nLnBnX2ZvcmVpZ25fdGFibGUgZnQgT04gIgorCQkJCQkJICAg ImZ0LmZ0cmVsaWQgPSBndC5yZWxpZCBXSEVSRSBwLnB1YnZpYXJvb3QgPSB0cnVlIEFORCAgcC5w dWJuYW1lIElOICgiKTsKKworCUdldFB1YmxpY2F0aW9uc1N0cihwdWJsaWNhdGlvbnMsICZjbWQs IHRydWUpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgIilcbiIpOworCisJcmVzID0g d2FscmN2X2V4ZWMod3Jjb25uLCBjbWQuZGF0YSwgMSwgdGFibGVSb3cpOworCXBmcmVlKGNtZC5k YXRhKTsKKworCWlmIChyZXMtPnN0YXR1cyAhPSBXQUxSQ1ZfT0tfVFVQTEVTKQorCQllcmVwb3J0 KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfQ09OTkVDVElPTl9GQUlMVVJFKSwKKwkJCQkg ZXJybXNnKCJjb3VsZCBub3QgcmVjZWl2ZSBsaXN0IG9mIHJlcGxpY2F0ZWQgdGFibGVzIGZyb20g dGhlIHB1Ymxpc2hlcjogJXMiLAorCQkJCQkJcmVzLT5lcnIpKSk7CisKKwkvKiBQcm9jZXNzIHRh Ymxlcy4gKi8KKwlzbG90ID0gTWFrZVNpbmdsZVR1cGxlVGFibGVTbG90KHJlcy0+dHVwbGVkZXNj LCAmVFRTT3BzTWluaW1hbFR1cGxlKTsKKwl3aGlsZSAodHVwbGVzdG9yZV9nZXR0dXBsZXNsb3Qo cmVzLT50dXBsZXN0b3JlLCB0cnVlLCBmYWxzZSwgc2xvdCkpCisJeworCQljaGFyCSAgICpwdWJu YW1lOworCQlib29sCQlpc251bGw7CisKKwkJcHVibmFtZSA9IFRleHREYXR1bUdldENTdHJpbmco c2xvdF9nZXRhdHRyKHNsb3QsIDEsICZpc251bGwpKTsKKwkJQXNzZXJ0KCFpc251bGwpOworCisJ CUV4ZWNDbGVhclR1cGxlKHNsb3QpOworCQlwdWJsaXN0ID0gbGlzdF9hcHBlbmRfdW5pcXVlKHB1 Ymxpc3QsIG1ha2VTdHJpbmcocHVibmFtZSkpOworCX0KKworCWlmIChwdWJsaXN0KQorCXsKKwkJ U3RyaW5nSW5mbwlwdWJuYW1lcyA9IG1ha2VTdHJpbmdJbmZvKCk7CisKKwkJLyogUHJlcGFyZSB0 aGUgbGlzdCBvZiBwdWJsaWNhdGlvbihzKSBmb3Igd2FybmluZyBtZXNzYWdlLiAqLworCQlHZXRQ dWJsaWNhdGlvbnNTdHIocHVibGlzdCwgcHVibmFtZXMsIGZhbHNlKTsKKwkJZXJlcG9ydChFUlJP UiwKKwkJCQllcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUp LAorCQkJCWVycm1zZygic3Vic2NyaXB0aW9uIFwiJXNcIiB3aXRoIGNvcHlfZGF0YSA9IHRydWUg Y2Fubm90IHN1YnNjcmliZSB0byBhIHB1YmxpY2F0aW9uIHdpdGggcHVibGlzaF92aWFfcGFydGl0 aW9uX3Jvb3QgPSB0cnVlIGFuZCBwdWJsaXNoZXMgcGFydGl0aW9uZWQgdGFibGUgd2l0aCBmb3Jl aWduIHRhYmxlIGFzIHBhcnRpdGlvbiIsCisJCQkJCSAgIHN1Ym5hbWUpLAorCQkJCWVycmRldGFp bF9wbHVyYWwoIlRoZSBzdWJzY3JpcHRpb24gYmVpbmcgY3JlYXRlZCBvbiBhIHB1YmxpY2F0aW9u ICglcykgd2l0aCBwdWJsaXNoX3ZpYV9yb290X3BhcnRpdGlvbiA9IHRydWUgYW5kIGNvbnRhaW5z IHBhcnRpdGlvbmVkIHRhYmxlcyB3aXRoIGZvcmVpZ24gdGFibGUgYXMgcGFydGl0aW9uICIsCisJ CQkJCQkJCSAiVGhlIHN1YnNjcmlwdGlvbiBiZWluZyBjcmVhdGVkIG9uIHB1YmxpY2F0aW9ucyAo JXMpIHdpdGggcHVibGlzaF92aWFfcm9vdF9wYXJ0aXRpb24gPSB0cnVlIGFuZCBjb250YWlucyBw YXJ0aXRpb25lZCB0YWJsZXMgd2l0aCBmb3JlaWduIHRhYmxlIGFzIHBhcnRpdGlvbiAiLAorCQkJ CQkJCQkgbGlzdF9sZW5ndGgocHVibGlzdCksIHB1Ym5hbWVzLT5kYXRhKSwKKwkJCQllcnJoaW50 KCJEcm9wIHRoZSBmb3JlaWduIHRhYmxlIGZyb20gdGhlIHB1YmxpY2F0aW9uIG9yIHNldCBwdWJs aXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlIG9uIHB1YmxpY2F0aW9uIG9yIHNldCBjb3B5 X2RhdGEgPSBmYWxzZS4iKSk7CisJfQorCisJRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChz bG90KTsKKworCXdhbHJjdl9jbGVhcl9yZXN1bHQocmVzKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVj bWRzLmMKaW5kZXggNTRhZDM4MjQ3YWEuLjM0NWUwZThiMjc5IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJs ZWNtZHMuYwpAQCAtMTEzMyw2ICsxMTMzLDUyIEBAIERlZmluZVJlbGF0aW9uKENyZWF0ZVN0bXQg KnN0bXQsIGNoYXIgcmVsa2luZCwgT2lkIG93bmVySWQsCiAJCQkJCSBlcnJtc2coIlwiJXNcIiBp cyBub3QgcGFydGl0aW9uZWQiLAogCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHBhcmVu dCkpKSk7CiAKKwkJLyoKKwkJICogSWYgd2UncmUgY3JlYXRpbmcgYSBwYXJ0aXRpb24gdGhhdCdz IGEgZm9yZWlnbiB0YWJsZSwgdmVyaWZ5IHRoYXQKKwkJICogdGhlIHBhcmVudCB0YWJsZSBpcyBu b3QgaW4gYSBwdWJsaWNhdGlvbiB3aXRoCisJCSAqIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 IGVuYWJsZWQuCisJCSAqLworCQlpZiAocmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9G T1JFSUdOX1RBQkxFKQorCQl7CisJCQlPaWQJCQlzY2hlbWFpZDsKKwkJCUxpc3QJICAgKnB1Ym9p ZHM7CisJCQlMaXN0CSAgICphbmNlc3RvcnM7CisKKwkJCS8qIFN0YXJ0IHdpdGggcHVibGljYXRp b25zIG9mIGFsbCB0YWJsZXMgKi8KKwkJCXB1Ym9pZHMgPSBHZXRBbGxUYWJsZXNQdWJsaWNhdGlv bnMoKTsKKworCQkJLyogY2FwdHVyZSBhbGwgcHVibGljYXRpb25zIHRoYXQgaW5jbHVkZSB0aGlz IHJlbGF0aW9uIGRpcmVjdGx5ICovCisJCQlwdWJvaWRzID0gbGlzdF9jb25jYXQocHVib2lkcywg R2V0UmVsYXRpb25QdWJsaWNhdGlvbnMocGFyZW50LT5yZF9pZCkpOworCQkJc2NoZW1haWQgPSBS ZWxhdGlvbkdldE5hbWVzcGFjZShwYXJlbnQpOworCQkJcHVib2lkcyA9IGxpc3RfY29uY2F0KHB1 Ym9pZHMsIEdldFNjaGVtYVB1YmxpY2F0aW9ucyhzY2hlbWFpZCkpOworCisJCQkvKiBhbmQgZG8g dGhlIHNhbWUgZm9yIGl0cyBhbmNlc3RvcnMsIGlmIGFueSAqLworCQkJYW5jZXN0b3JzID0gZ2V0 X3BhcnRpdGlvbl9hbmNlc3RvcnMocGFyZW50LT5yZF9pZCk7CisJCQlmb3JlYWNoX29pZChhbmNl c3RvciwgYW5jZXN0b3JzKQorCQkJeworCQkJCXB1Ym9pZHMgPSBsaXN0X2NvbmNhdChwdWJvaWRz LCBHZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhhbmNlc3RvcikpOworCQkJCXNjaGVtYWlkID0gZ2V0 X3JlbF9uYW1lc3BhY2UoYW5jZXN0b3IpOworCQkJCXB1Ym9pZHMgPSBsaXN0X2NvbmNhdChwdWJv aWRzLCBHZXRTY2hlbWFQdWJsaWNhdGlvbnMoc2NoZW1haWQpKTsKKwkJCX0KKworCQkJLyogQ2hl Y2sgdGhlIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IGJpdCBmb3IgZWFjaCBvZiB0aG9zZSAq LworCQkJbGlzdF9zb3J0KHB1Ym9pZHMsIGxpc3Rfb2lkX2NtcCk7CisJCQlsaXN0X2RlZHVwbGlj YXRlX29pZChwdWJvaWRzKTsKKwkJCWZvcmVhY2hfb2lkKHB1Ym9pZCwgcHVib2lkcykKKwkJCXsK KwkJCQlQdWJsaWNhdGlvbiAqcHViID0gR2V0UHVibGljYXRpb24ocHVib2lkKTsKKworCQkJCWlm IChwdWItPnB1YnZpYXJvb3QpCisJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJZXJyY29kZShF UlJDT0RFX1dST05HX09CSkVDVF9UWVBFKSwKKwkJCQkJCQllcnJtc2coImNhbm5vdCBjcmVhdGUg Zm9yZWlnbiB0YWJsZSBcIiVzXCIgYXMgYSBwYXJ0aXRpb24gb2YgXCIlc1wiIiwKKwkJCQkJCQkJ ICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUo cGFyZW50KSksCisJCQkJCQkJZXJyZGV0YWlsKCJQYXJ0aXRpb25lZCB0YWJsZSBcIiVzXCIgaXMg cHVibGlzaGVkIHdpdGggb3B0aW9uIFwiJXNcIiBpbiBwdWJsaWNhdGlvbiBcIiVzXCIuIiwKKwkJ CQkJCQkJCSAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocGFyZW50KSwKKwkJCQkJCQkJCSAgInB1 Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IiwgcHViLT5uYW1lKSk7CisJCQl9CisJCX0KKwogCQkv KgogCQkgKiBUaGUgcGFydGl0aW9uIGNvbnN0cmFpbnQgb2YgdGhlIGRlZmF1bHQgcGFydGl0aW9u IGRlcGVuZHMgb24gdGhlCiAJCSAqIHBhcnRpdGlvbiBib3VuZHMgb2YgZXZlcnkgb3RoZXIgcGFy dGl0aW9uLiBJdCBpcyBwb3NzaWJsZSB0aGF0CkBAIC0yMDI5MSw2ICsyMDMzNyw3MCBAQCBBVEV4 ZWNBdHRhY2hQYXJ0aXRpb24oTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVsLCBQYXJ0aXRpb25D bWQgKmNtZCwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1dST05HX09CSkVDVF9UWVBFKSwKIAkJCQkg ZXJybXNnKCJjYW5ub3QgYXR0YWNoIHRlbXBvcmFyeSByZWxhdGlvbiBvZiBhbm90aGVyIHNlc3Np b24gYXMgcGFydGl0aW9uIikpKTsKIAorCS8qCisJICogSWYgdGhlIHJlbGF0aW9uIHRvIGF0dGFj aCBpcyBhIGZvcmVpZ24gdGFibGUsIG9yIGEgcGFydGl0aW9uZWQgdGFibGUKKwkgKiB0aGF0IGNv bnRhaW5zIGEgZm9yZWlnbiB0YWJsZSBhcyBwYXJ0aXRpb24sIHRoZW4gdmVyaWZ5IHRoYXQgdGhl IHBhcmVudAorCSAqIHRhYmxlIGlzIG5vdCBpbiBhIHB1YmxpY2F0aW9uIHdpdGggcHVibGlzaF92 aWFfcGFydGl0aW9uX3Jvb3QgZW5hYmxlZC4KKwkgKi8KKwlpZiAoYXR0YWNocmVsLT5yZF9yZWwt PnJlbGtpbmQgPT0gUkVMS0lORF9GT1JFSUdOX1RBQkxFIHx8CisJCShhdHRhY2hyZWwtPnJkX3Jl bC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFICYmCisJCSBSZWxhdGlvbkhh c0ZvcmVpZ25QYXJ0aXRpb24oYXR0YWNocmVsKSkpCisJeworCQlPaWQJCQlzY2hlbWFpZDsKKwkJ TGlzdAkgICAqcHVib2lkczsKKwkJTGlzdAkgICAqYW5jZXN0b3JzOworCisJCS8qIFN0YXJ0IHdp dGggcHVibGljYXRpb25zIG9mIGFsbCB0YWJsZXMgKi8KKwkJcHVib2lkcyA9IEdldEFsbFRhYmxl c1B1YmxpY2F0aW9ucygpOworCisJCS8qIGNhcHR1cmUgYWxsIHB1YmxpY2F0aW9ucyB0aGF0IGlu Y2x1ZGUgdGhpcyByZWxhdGlvbiBkaXJlY3RseSAqLworCQlwdWJvaWRzID0gbGlzdF9jb25jYXQo cHVib2lkcywgR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMocmVsLT5yZF9pZCkpOworCQlzY2hlbWFp ZCA9IFJlbGF0aW9uR2V0TmFtZXNwYWNlKHJlbCk7CisJCXB1Ym9pZHMgPSBsaXN0X2NvbmNhdChw dWJvaWRzLCBHZXRTY2hlbWFQdWJsaWNhdGlvbnMoc2NoZW1haWQpKTsKKworCQkvKiBhbmQgZG8g dGhlIHNhbWUgZm9yIGl0cyBhbmNlc3RvcnMsIGlmIGFueSAqLworCQlhbmNlc3RvcnMgPSBnZXRf cGFydGl0aW9uX2FuY2VzdG9ycyhyZWwtPnJkX2lkKTsKKwkJZm9yZWFjaF9vaWQoYW5jZXN0b3Is IGFuY2VzdG9ycykKKwkJeworCQkJcHVib2lkcyA9IGxpc3RfY29uY2F0KHB1Ym9pZHMsIEdldFJl bGF0aW9uUHVibGljYXRpb25zKGFuY2VzdG9yKSk7CisJCQlzY2hlbWFpZCA9IGdldF9yZWxfbmFt ZXNwYWNlKGFuY2VzdG9yKTsKKwkJCXB1Ym9pZHMgPSBsaXN0X2NvbmNhdChwdWJvaWRzLCBHZXRT Y2hlbWFQdWJsaWNhdGlvbnMoc2NoZW1haWQpKTsKKwkJfQorCisJCS8qIE5vdyBjaGVjayB0aGUg cHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgYml0IGZvciBlYWNoIG9mIHRob3NlICovCisJCWxp c3Rfc29ydChwdWJvaWRzLCBsaXN0X29pZF9jbXApOworCQlsaXN0X2RlZHVwbGljYXRlX29pZChw dWJvaWRzKTsKKwkJZm9yZWFjaF9vaWQocHVib2lkLCBwdWJvaWRzKQorCQl7CisJCQlQdWJsaWNh dGlvbiAqcHViOworCisJCQlwdWIgPSBHZXRQdWJsaWNhdGlvbihwdWJvaWQpOworCQkJaWYgKHB1 Yi0+cHVidmlhcm9vdCkKKwkJCXsKKwkJCQlpZiAoYXR0YWNocmVsLT5yZF9yZWwtPnJlbGtpbmQg PT0gUkVMS0lORF9GT1JFSUdOX1RBQkxFKQorCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCShl cnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZUEUpLAorCQkJCQkJCSBlcnJtc2coImNhbm5v dCBhdHRhY2ggZm9yZWlnbiB0YWJsZSBcIiVzXCIgdG8gcGFydGl0aW9uIHRhYmxlIFwiJXNcIiIs CisJCQkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShhdHRhY2hyZWwpLAorCQkJCQkJCQkJ UmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSksCisJCQkJCQkJIGVycmRldGFpbCgiUGFydGl0 aW9uZWQgdGFibGUgXCIlc1wiIGlzIHB1Ymxpc2hlZCB3aXRoIG9wdGlvbiBcIiVzXCIgaW4gcHVi bGljYXRpb24gXCIlc1wiLiIsCisJCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShy ZWwpLAorCQkJCQkJCQkJICAgInB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IiwKKwkJCQkJCQkJ CSAgIHB1Yi0+bmFtZSkpKTsKKwkJCQllbHNlCisJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJ KGVycmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCisJCQkJCQkJIGVycm1zZygiY2Fu bm90IGF0dGFjaCB0YWJsZSBcIiVzXCIgd2l0aCBhIHBhcnRpdGlvbiB0aGF0J3MgYSBmb3JlaWdu IHRhYmxlIHRvIHBhcnRpdGlvbiB0YWJsZSBcIiVzXCIiLAorCQkJCQkJCQkJUmVsYXRpb25HZXRS ZWxhdGlvbk5hbWUoYXR0YWNocmVsKSwKKwkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KHJlbCkpLAorCQkJCQkJCSBlcnJkZXRhaWwoIlBhcnRpdGlvbmVkIHRhYmxlIFwiJXNcIiBpcyBw dWJsaXNoZWQgd2l0aCBvcHRpb24gXCIlc1wiIGluIHB1YmxpY2F0aW9uIFwiJXNcIi4iLAorCQkJ CQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwKKwkJCQkJCQkJCSAgICJwdWJs aXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCIsCisJCQkJCQkJCQkgICBwdWItPm5hbWUpKSk7CisJCQl9 CisJCX0KKwl9CisKIAkvKgogCSAqIENoZWNrIGlmIGF0dGFjaHJlbCBoYXMgYW55IGlkZW50aXR5 IGNvbHVtbnMgb3IgYW55IGNvbHVtbnMgdGhhdCBhcmVuJ3QKIAkgKiBpbiB0aGUgcGFyZW50Lgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRkZXNjLmMgYi9zcmMvYmFj a2VuZC9wYXJ0aXRpb25pbmcvcGFydGRlc2MuYwppbmRleCAzMjhiNGQ0NTBlNC4uNTZkMTc2NjI1 ZTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0ZGVzYy5jCisrKyBi L3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0ZGVzYy5jCkBAIC01MDYsMyArNTA2LDM1IEBA IGdldF9kZWZhdWx0X29pZF9mcm9tX3BhcnRkZXNjKFBhcnRpdGlvbkRlc2MgcGFydGRlc2MpCiAK IAlyZXR1cm4gSW52YWxpZE9pZDsKIH0KKworLyoKKyAqIFJldHVybiB0cnVlIGlmIHRoZSBnaXZl biBwYXJ0aXRpb25lZCB0YWJsZSB1bHRpbWF0ZWx5IGNvbnRhaW5zIGEKKyAqIHBhcnRpdGlvbiB0 aGF0IGlzIGEgZm9yZWlnbiB0YWJsZSwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitib29sCitSZWxh dGlvbkhhc0ZvcmVpZ25QYXJ0aXRpb24oUmVsYXRpb24gcmVsKQoreworCVBhcnRpdGlvbkRlc2Mg cGQgPSBSZWxhdGlvbkdldFBhcnRpdGlvbkRlc2MocmVsLCB0cnVlKTsKKworCWZvciAoaW50IGkg PSAwOyBpIDwgcGQtPm5wYXJ0czsgaSsrKQorCXsKKwkJaWYgKHBkLT5pc19sZWFmW2ldKQorCQl7 CisJCQlpZiAoZ2V0X3JlbF9yZWxraW5kKHBkLT5vaWRzW2ldKSA9PSBSRUxLSU5EX0ZPUkVJR05f VEFCTEUpCisJCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJZWxzZQorCQl7CisJCQlSZWxhdGlvbglw YXJ0OworCQkJYm9vbAkJcmV0OworCisJCQlwYXJ0ID0gdGFibGVfb3BlbihwZC0+b2lkc1tpXSwg Tm9Mb2NrKTsKKwkJCXJldCA9IFJlbGF0aW9uSGFzRm9yZWlnblBhcnRpdGlvbihwYXJ0KTsKKwkJ CXRhYmxlX2Nsb3NlKHBhcnQsIE5vTG9jayk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiB0cnVl OworCQl9CisJfQorCisJcmV0dXJuIGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191 cGdyYWRlL2NoZWNrLmMgYi9zcmMvYmluL3BnX3VwZ3JhZGUvY2hlY2suYwppbmRleCA5NDBmYzc3 ZmMyZS4uMmNmNDA3YTMxNjkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfdXBncmFkZS9jaGVjay5j CisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9jaGVjay5jCkBAIC0zMSw2ICszMSw3IEBAIHN0YXRp YyB2b2lkIGNoZWNrX25ld19jbHVzdGVyX2xvZ2ljYWxfcmVwbGljYXRpb25fc2xvdHModm9pZCk7 CiBzdGF0aWMgdm9pZCBjaGVja19uZXdfY2x1c3Rlcl9zdWJzY3JpcHRpb25fY29uZmlndXJhdGlv bih2b2lkKTsKIHN0YXRpYyB2b2lkIGNoZWNrX29sZF9jbHVzdGVyX2Zvcl92YWxpZF9zbG90cyh2 b2lkKTsKIHN0YXRpYyB2b2lkIGNoZWNrX29sZF9jbHVzdGVyX3N1YnNjcmlwdGlvbl9zdGF0ZSh2 b2lkKTsKK3N0YXRpYyB2b2lkIGNoZWNrX2Zvcl92YWxpZF9wdWJsaWNhdGlvbihDbHVzdGVySW5m byAqY2x1c3Rlcik7CiAKIC8qCiAgKiBEYXRhVHlwZXNVc2FnZUNoZWNrcyAtIGRlZmluaXRpb25z IG9mIGRhdGEgdHlwZSBjaGVja3MgZm9yIHRoZSBvbGQgY2x1c3RlcgpAQCAtNjMzLDYgKzYzNCw4 IEBAIGNoZWNrX2FuZF9kdW1wX29sZF9jbHVzdGVyKHZvaWQpCiAJCWNoZWNrX29sZF9jbHVzdGVy X3N1YnNjcmlwdGlvbl9zdGF0ZSgpOwogCX0KIAorCWNoZWNrX2Zvcl92YWxpZF9wdWJsaWNhdGlv bigmb2xkX2NsdXN0ZXIpOworCiAJY2hlY2tfZm9yX2RhdGFfdHlwZXNfdXNhZ2UoJm9sZF9jbHVz dGVyKTsKIAogCS8qCkBAIC0yMjcyLDMgKzIyNzUsODkgQEAgY2hlY2tfb2xkX2NsdXN0ZXJfc3Vi c2NyaXB0aW9uX3N0YXRlKHZvaWQpCiAJZWxzZQogCQljaGVja19vaygpOwogfQorCisvKgorICog Q2FsbGJhY2sgZnVuY3Rpb24gZm9yIHByb2Nlc3NpbmcgcmVzdWx0cyBvZiBxdWVyeSBmb3IKKyAq IGNoZWNrX2Zvcl92YWxpZF9wdWJsaWNhdGlvbigpJ3MgVXBncmFkZVRhc2suICBJZiB0aGUgcXVl cnkgcmV0dXJuZWQKKyAqIGFueSByb3dzIChpLmUuLCB0aGUgY2hlY2sgZmFpbGVkKSwgd3JpdGUg dGhlIGRldGFpbHMgdG8gdGhlIHJlcG9ydCBmaWxlLgorICovCitzdGF0aWMgdm9pZAorcHJvY2Vz c19wdWJfY2hlY2soRGJJbmZvICpkYmluZm8sIFBHcmVzdWx0ICpyZXMsIHZvaWQgKmFyZykKK3sK KwlVcGdyYWRlVGFza1JlcG9ydCAqcmVwb3J0ID0gKFVwZ3JhZGVUYXNrUmVwb3J0ICopIGFyZzsK KwlpbnQJCQludHVwcyA9IFBRbnR1cGxlcyhyZXMpOworCWludAkJCWlfcHVib2lkID0gUFFmbnVt YmVyKHJlcywgIm9pZCIpOworCWludAkJCWlfcHVidmlhcm9vdCA9IFBRZm51bWJlcihyZXMsICJw dWJ2aWFyb290Iik7CisJaW50CQkJaV9wdWJhbGx0YWJsZXMgPSBQUWZudW1iZXIocmVzLCAicHVi YWxsdGFibGVzIik7CisJaW50CQkJaV9mdHJlbGlkID0gUFFmbnVtYmVyKHJlcywgImZ0cmVsaWQi KTsKKworCWlmIChudHVwcyA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAocmVwb3J0LT5maWxlID09 IE5VTEwgJiYKKwkJKHJlcG9ydC0+ZmlsZSA9IGZvcGVuX3ByaXYocmVwb3J0LT5wYXRoLCAidyIp KSA9PSBOVUxMKQorCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVtIiwg cmVwb3J0LT5wYXRoKTsKKworCWZwcmludGYocmVwb3J0LT5maWxlLCAiSW4gZGF0YWJhc2U6ICVz XG4iLCBkYmluZm8tPmRiX25hbWUpOworCisJZm9yIChpbnQgcm93bm8gPSAwOyByb3dubyA8IG50 dXBzOyByb3dubysrKQorCQlmcHJpbnRmKHJlcG9ydC0+ZmlsZSwgIlRoZSBwdWJsaWNhdGlvbiB3 aXRoIG9pZDogJXMsIGhhcyBmb3JlaWduIHRhYmxlIHdpdGggb2lkOiAlcyBhcyBwYXJ0aXRpb24g b2YgYSBwdWJsaXNoZWQgdGFibGUuICIKKwkJCQkiUHVibGljYXRpb24gaXMgcHVibGlzaGVkIHdp dGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSAlcyBhbmQgaXQgaXMgcHVibGlzaGVkICVz LlxuIiwKKwkJCQlQUWdldHZhbHVlKHJlcywgcm93bm8sIGlfcHVib2lkKSwKKwkJCQlQUWdldHZh bHVlKHJlcywgcm93bm8sIGlfZnRyZWxpZCksCisJCQkJc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBy b3dubywgaV9wdWJ2aWFyb290KSwgImYiKSA/ICJ0cnVlIiA6ICJmYWxzZSIsCisJCQkJc3RyY21w KFBRZ2V0dmFsdWUocmVzLCByb3dubywgaV9wdWJhbGx0YWJsZXMpLCAiZiIpID8gIkZPUiBBTEwg VEFCTEVTIiA6ICJGT1IgVEFCTEUvRk9SIFRBQkxFUyBJTiBTQ0hFTUEiKTsKK30KKworLyoKKyAq IGNoZWNrX2Zvcl92YWxpZF9wdWJsaWNhdGlvbgorICoKKyAqIFZlcmlmeSBpZiB0aGUgcHVibGlj YXRpb24gaGFzIGFueSBwdWJsaXNoZWQgZm9yZWlnbiB0YWJsZSB3aGljaCBhcmUKKyAqIHBhcnRp dGlvbnMgb2YgYSB0YWJsZS4KKyAqCisgKiBGb3IgUEcgMTggYW5kIGJlbG93IGZvcmVpZ24gdGFi bGVzIGNhbiBiZSBpbmRpcmVjdGx5IHB1Ymxpc2hlZCB3aGVuIGl0IGlzCisgKiBwYXJ0aXRpb24g b2YgYSBwYXJ0aXRpb25lZCB0YWJsZS4gQXZvaWQgdXBncmFkaW5nIHRoZSBjbHVzdGVyIGlmIGl0 IGhhcyBhCisgKiBwdWJsaWNhdGlvbiB3aXRoIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0g dHJ1ZSBhbmQgaGFzIGZvcmVpZ24gdGFibGUKKyAqIHdoaWNoIGlzIHBhcnRpdGlvbiBvZiBhIHB1 Ymxpc2hlZCB0YWJsZS4KKyAqLworc3RhdGljIHZvaWQKK2NoZWNrX2Zvcl92YWxpZF9wdWJsaWNh dGlvbihDbHVzdGVySW5mbyAqY2x1c3RlcikKK3sKKwlVcGdyYWRlVGFza1JlcG9ydCByZXBvcnQ7 CisJVXBncmFkZVRhc2sgKnRhc2s7CisJY29uc3QgY2hhciAqcXVlcnk7CisKKwlpZiAoR0VUX01B Sk9SX1ZFUlNJT04oY2x1c3Rlci0+bWFqb3JfdmVyc2lvbikgPj0gMTkwMCkKKwkJcmV0dXJuOwor CisJcHJlcF9zdGF0dXMoIkNoZWNraW5nIGZvciBpbnZhbGlkIHB1YmxpY2F0aW9ucyIpOworCisJ cmVwb3J0LmZpbGUgPSBOVUxMOworCXNucHJpbnRmKHJlcG9ydC5wYXRoLCBzaXplb2YocmVwb3J0 LnBhdGgpLCAiJXMvJXMiLAorCQkJIGxvZ19vcHRzLmJhc2VkaXIsCisJCQkgInB1YnNfaW52YWxp ZC50eHQiKTsKKworCXF1ZXJ5ID0gIlNFTEVDVCBwLm9pZCwgcC5wdWJ2aWFyb290LCBwLnB1YmFs bHRhYmxlcywgZnQuZnRyZWxpZCAiCisJCSJmcm9tIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb24g cCwgTEFURVJBTCAiCisJCSJwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKHAucHVibmFtZSkgZ3B0 LCBMQVRFUkFMICIKKwkJInBnX3BhcnRpdGlvbl90cmVlKGdwdC5yZWxpZCkgZ3QgSk9JTiBwZ19j YXRhbG9nLnBnX2ZvcmVpZ25fdGFibGUgZnQgT04gIgorCQkiZnQuZnRyZWxpZCA9IGd0LnJlbGlk IFdIRVJFIHAucHVidmlhcm9vdCA9IHRydWU7IjsKKworCXRhc2sgPSB1cGdyYWRlX3Rhc2tfY3Jl YXRlKCk7CisJdXBncmFkZV90YXNrX2FkZF9zdGVwKHRhc2ssIHF1ZXJ5LAorCQkJCQkJICBwcm9j ZXNzX3B1Yl9jaGVjaywKKwkJCQkJCSAgdHJ1ZSwgJnJlcG9ydCk7CisJdXBncmFkZV90YXNrX3J1 bih0YXNrLCBjbHVzdGVyKTsKKwl1cGdyYWRlX3Rhc2tfZnJlZSh0YXNrKTsKKworCWlmIChyZXBv cnQuZmlsZSkKKwl7CisJCWZjbG9zZShyZXBvcnQuZmlsZSk7CisJCXBnX2xvZyhQR19SRVBPUlQs ICJmYXRhbCIpOworCQlwZ19mYXRhbCgiWW91ciBpbnN0YWxsYXRpb24gY29udGFpbnMgcHVibGlj YXRpb25zLCB3aGljaCBoYXMgZm9yZWlnbiB0YWJsZSB3aGljaCBhcmUgcGFydGl0aW9ucyBvZiBw dWJsaXNoZWQgdGFibGUuXG4iCisJCQkJICJBIGxpc3Qgb2YgcG90ZW50aWFsbHktYWZmZWN0ZWQg cHVibGljYXRpb25zIGlzIGluIHRoZSBmaWxlOlxuIgorCQkJCSAiICAgICVzIiwgcmVwb3J0LnBh dGgpOworCX0KKwllbHNlCisJCWNoZWNrX29rKCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9wYXJ0aXRpb25pbmcvcGFydGRlc2MuaCBiL3NyYy9pbmNsdWRlL3BhcnRpdGlvbmluZy9wYXJ0 ZGVzYy5oCmluZGV4IDM0NTMzZjcwMDRjLi41ZmJhZmRjMDZmOSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvcGFydGl0aW9uaW5nL3BhcnRkZXNjLmgKKysrIGIvc3JjL2luY2x1ZGUvcGFydGl0aW9u aW5nL3BhcnRkZXNjLmgKQEAgLTcxLDUgKzcxLDYgQEAgZXh0ZXJuIFBhcnRpdGlvbkRlc2MgUGFy dGl0aW9uRGlyZWN0b3J5TG9va3VwKFBhcnRpdGlvbkRpcmVjdG9yeSwgUmVsYXRpb24pOwogZXh0 ZXJuIHZvaWQgRGVzdHJveVBhcnRpdGlvbkRpcmVjdG9yeShQYXJ0aXRpb25EaXJlY3RvcnkgcGRp cik7CiAKIGV4dGVybiBPaWQJZ2V0X2RlZmF1bHRfb2lkX2Zyb21fcGFydGRlc2MoUGFydGl0aW9u RGVzYyBwYXJ0ZGVzYyk7CitleHRlcm4gYm9vbCBSZWxhdGlvbkhhc0ZvcmVpZ25QYXJ0aXRpb24o UmVsYXRpb24gcmVsKTsKIAogI2VuZGlmCQkJCQkJCS8qIFBBUlRERVNDX0ggKi8KZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi9NYWtlZmlsZSBiL3NyYy90ZXN0L3N1YnNjcmlwdGlv bi9NYWtlZmlsZQppbmRleCA1MGI2NWQ4ZjZlYS4uMTEwNDFmNzk2NjcgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3N1YnNjcmlwdGlvbi9NYWtlZmlsZQorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24v TWFrZWZpbGUKQEAgLTE0LDYgKzE0LDcgQEAgdG9wX2J1aWxkZGlyID0gLi4vLi4vLi4KIGluY2x1 ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKIAogRVhUUkFfSU5TVEFMTCA9 IGNvbnRyaWIvaHN0b3JlCitFWFRSQV9JTlNUQUxMICs9IGNvbnRyaWIvcG9zdGdyZXNfZmR3CiAK IGV4cG9ydCB3aXRoX2ljdQogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8w MTNfcGFydGl0aW9uLnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDEzX3BhcnRpdGlvbi5w bAppbmRleCA2MWIwY2I0YWExYS4uNDFjZmRjODY1ODAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1 YnNjcmlwdGlvbi90LzAxM19wYXJ0aXRpb24ucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9u L3QvMDEzX3BhcnRpdGlvbi5wbApAQCAtOCw2ICs4LDkgQEAgdXNlIFBvc3RncmVTUUw6OlRlc3Q6 OkNsdXN0ZXI7CiB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7CiB1c2UgVGVzdDo6TW9yZTsK IAorbXkgJHN0ZG91dDsKK215ICRzdGRlcnI7CisKICMgc2V0dXAKIAogbXkgJG5vZGVfcHVibGlz aGVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKQEAgLTg5 MSw0ICs4OTQsMTQwIEBAICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyMi0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCiAJIlNFTEVDVCBhLCBiLCBjIEZST00gdGFiNV8xIE9SREVSIEJZIDEiKTsKIGlz KCRyZXN1bHQsIHFxKDR8fDEpLCAndXBkYXRlcyBvZiB0YWI1IHJlcGxpY2F0ZWQgY29ycmVjdGx5 Jyk7CiAKKyMgVGVzdCB3aXRoIHBhcnRpdGlvbmVkIHRhYmxlIHdpdGggZm9yZWlnbiB0YWJsZSBh cyBpdHMgcGFydGl0aW9uLgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkNSRUFURSBEQVRBQkFTRSBkYjEiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdk YjEnLAorCXF7Q1JFQVRFIEVYVEVOU0lPTiBJRiBOT1QgRVhJU1RTIHBvc3RncmVzX2ZkdzsKKwlD UkVBVEUgU0VSVkVSIGZkdyBGT1JFSUdOIERBVEEgV1JBUFBFUiBwb3N0Z3Jlc19mZHc7CisJQ1JF QVRFIFVTRVIgTUFQUElORyBGT1IgQ1VSUkVOVF9VU0VSIFNFUlZFUiBmZHc7fSk7CisKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdkYjEnLAorCXF7Q1JFQVRFIFNDSEVNQSBzYzE7CisJ Q1JFQVRFIFNDSEVNQSBzYzI7CisJQ1JFQVRFIFRBQkxFIHNjMS50YWI2KGlkIGludCkgUEFSVElU SU9OIEJZIFJBTkdFKGlkKTsKKwlDUkVBVEUgVEFCTEUgc2MxLnRhYjZfMSBQQVJUSVRJT04gT0Yg c2MxLnRhYjYgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoNSk7CisJQ1JFQVRFIFRBQkxFIHNjMS50 YWI2XzIgUEFSVElUSU9OIE9GIHNjMS50YWI2IEZPUiBWQUxVRVMgRlJPTSAoNSkgVE8gKDE1KSBQ QVJUSVRJT04gQlkgUkFOR0UoaWQpOworCUNSRUFURSBGT1JFSUdOIFRBQkxFIHNjMS50YWI2XzJf MSBQQVJUSVRJT04gT0Ygc2MxLnRhYjZfMiBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMTUpIFNF UlZFUiBmZHc7fQorKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCSdkYjEnLAorCXF7 Q1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9mb3JlaWduXzEgRk9SIFRBQkxFIHNjMS50YWI2IHdpdGgg KHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKKwlDUkVBVEUgUFVCTElDQVRJT04gcHViX2Zv cmVpZ25fMiBGT1IgVEFCTEVTIElOIFNDSEVNQSBzYzEgd2l0aCAocHVibGlzaF92aWFfcGFydGl0 aW9uX3Jvb3QpOworCUNSRUFURSBQVUJMSUNBVElPTiBwdWJfZm9yZWlnbl8zIEZPUiBBTEwgVEFC TEVTIHdpdGggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKKwlDUkVBVEUgUFVCTElDQVRJ T04gcHViX2ZvcmVpZ25fNCBGT1IgVEFCTEVTIElOIFNDSEVNQSBzYzIgd2l0aCAocHVibGlzaF92 aWFfcGFydGl0aW9uX3Jvb3QpOworCX0pOworCiskbm9kZV9zdWJzY3JpYmVyMS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJDUkVBVEUgREFUQUJBU0UgZGIxIik7Ciskbm9kZV9zdWJzY3JpYmVyMS0+ c2FmZV9wc3FsKAorCSdkYjEnLAorCXF7Q1JFQVRFIFNDSEVNQSBzYzE7CisJQ1JFQVRFIFNDSEVN QSBzYzI7CisJQ1JFQVRFIFRBQkxFIHNjMS50YWI2KGlkIGludCkgUEFSVElUSU9OIEJZIFJBTkdF KGlkKTsKKwlDUkVBVEUgVEFCTEUgc2MxLnRhYjZfMSBQQVJUSVRJT04gT0Ygc2MxLnRhYjYgRk9S IFZBTFVFUyBGUk9NICgwKSBUTyAoNSk7CisJQ1JFQVRFIFRBQkxFIHNjMS50YWI2XzIgUEFSVElU SU9OIE9GIHNjMS50YWI2IEZPUiBWQUxVRVMgRlJPTSAoNSkgVE8gKDE1KSBQQVJUSVRJT04gQlkg UkFOR0UoaWQpOworCUNSRUFURSBUQUJMRSBzYzEudGFiNl8yXzEgUEFSVElUSU9OIE9GIHNjMS50 YWI2XzIgRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8gKDE1KTt9CispOworCiskcHVibGlzaGVyX2Nv bm5zdHIgPSAkbm9kZV9wdWJsaXNoZXItPmNvbm5zdHIgLiAnIGRibmFtZT1kYjEnOworCisjIENy ZWF0ZSBzdWJzY3JpcHRpb24gb24gcHVibGljYXRpb24gd2hpY2ggaGFzIHBhcnRpdGlvbmVkIHRh YmxlIHdpdGggZm9yZWlnbgorIyB0YWJsZSBhcyBpdHMgcGFydGl0aW9uLgorKCRyZXN1bHQsICRz dGRvdXQsICRzdGRlcnIpID0gJG5vZGVfc3Vic2NyaWJlcjEtPnBzcWwoJ2RiMScsCisJIkNSRUFU RSBTVUJTQ1JJUFRJT04gc3ViX2ZvcmVpZ25fMSBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5z dHInIFBVQkxJQ0FUSU9OIHB1Yl9mb3JlaWduXzE7IgorKTsKK2xpa2UoCisJJHN0ZGVyciwKKwlx ci9FUlJPUjogIHN1YnNjcmlwdGlvbiAic3ViX2ZvcmVpZ25fMSIgd2l0aCBjb3B5X2RhdGEgPSB0 cnVlIGNhbm5vdCBzdWJzY3JpYmUgdG8gYSBwdWJsaWNhdGlvbiB3aXRoIHB1Ymxpc2hfdmlhX3Bh cnRpdGlvbl9yb290ID0gdHJ1ZSBhbmQgcHVibGlzaGVzIHBhcnRpdGlvbmVkIHRhYmxlIHdpdGgg Zm9yZWlnbiB0YWJsZSBhcyBwYXJ0aXRpb24vLAorCSJDcmVhdGUgc3Vic2NyaXB0aW9uIG9uIGEg cHVibGljYXRpb24gRk9SIFRBQkxFIG9uIHBhcnRpdGlvbmVkIHRhYmxlIHdpdGggZm9yZWlnbiB0 YWJsZSBhcyBpdHMgcGFydGl0aW9uIgorKTsKKworKCRyZXN1bHQsICRzdGRvdXQsICRzdGRlcnIp ID0gJG5vZGVfc3Vic2NyaWJlcjEtPnBzcWwoJ2RiMScsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04g c3ViX2ZvcmVpZ25fMSBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHInIFBVQkxJQ0FUSU9O IHB1Yl9mb3JlaWduXzI7IgorKTsKK2xpa2UoCisJJHN0ZGVyciwKKwlxci9FUlJPUjogIHN1YnNj cmlwdGlvbiAic3ViX2ZvcmVpZ25fMSIgd2l0aCBjb3B5X2RhdGEgPSB0cnVlIGNhbm5vdCBzdWJz Y3JpYmUgdG8gYSBwdWJsaWNhdGlvbiB3aXRoIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0g dHJ1ZSBhbmQgcHVibGlzaGVzIHBhcnRpdGlvbmVkIHRhYmxlIHdpdGggZm9yZWlnbiB0YWJsZSBh cyBwYXJ0aXRpb24vLAorCSJDcmVhdGUgc3Vic2NyaXB0aW9uIG9uIGEgcHVibGljYXRpb24gRk9S IFRBQkxFUyBJTiBTQ0hFTUEgb24gcGFydGl0aW9uZWQgdGFibGUgd2l0aCBmb3JlaWduIHRhYmxl IGFzIGl0cyBwYXJ0aXRpb24iCispOworKCRyZXN1bHQsICRzdGRvdXQsICRzdGRlcnIpID0gJG5v ZGVfc3Vic2NyaWJlcjEtPnBzcWwoJ2RiMScsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04gc3ViX2Zv cmVpZ25fMSBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHInIFBVQkxJQ0FUSU9OIHB1Yl9m b3JlaWduXzM7IgorKTsKK2xpa2UoCisJJHN0ZGVyciwKKwlxci9FUlJPUjogIHN1YnNjcmlwdGlv biAic3ViX2ZvcmVpZ25fMSIgd2l0aCBjb3B5X2RhdGEgPSB0cnVlIGNhbm5vdCBzdWJzY3JpYmUg dG8gYSBwdWJsaWNhdGlvbiB3aXRoIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSBh bmQgcHVibGlzaGVzIHBhcnRpdGlvbmVkIHRhYmxlIHdpdGggZm9yZWlnbiB0YWJsZSBhcyBwYXJ0 aXRpb24vLAorCSJDcmVhdGUgc3Vic2NyaXB0aW9uIG9uIGEgcHVibGljYXRpb24gRk9SIEFMTCBU QUJMRVMgb24gcGFydGl0aW9uZWQgdGFibGUgd2l0aCBmb3JlaWduIHRhYmxlIGFzIGl0cyBwYXJ0 aXRpb24iCispOworCisjIElmIHB1YmxpY2F0aW9uIGlzIGNyZWF0ZWQgd2l0aCBwdWJsaXNoX3Zp YV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlLCB3ZSBjYW4KKyMgY3JlYXRlIHN1YnNjcmlwdGlvbiBv biBpdC4gQnV0IHJlcGxpY2F0aW9uIG9mIHBhcnRpdGlvbmVkIHRhYmxlIHdpdGggZm9yZWlnbgor IyBpcyBza2lwcGVkCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgnZGIxJywKKwkiQUxURVIg UFVCTElDQVRJT04gcHViX2ZvcmVpZ25fMSBTRVQgKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 ID0gZmFsc2UpIgorKTsKKygkcmVzdWx0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRub2RlX3N1YnNj cmliZXIxLT5wc3FsKCdkYjEnLAorCSJDUkVBVEUgU1VCU0NSSVBUSU9OIHN1Yl9mb3JlaWduXzEg Q09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyJyBQVUJMSUNBVElPTiBwdWJfZm9yZWlnbl8x OyIKKyk7Ciskbm9kZV9zdWJzY3JpYmVyMS0+c2FmZV9wc3FsKCdkYjEnLCAnRFJPUCBTVUJTQ1JJ UFRJT04gc3ViX2ZvcmVpZ25fMScpOworCisjIGlmIHN1YnNjcmlwdGlvbiBpcyBjcmVhdGVkIHdp dGggY29weV9kYXRhPWZhbHNlLCB3ZSBjYW4gY3JlYXRlIHN1YnNjcmlwdGlvbgorKCRyZXN1bHQs ICRzdGRvdXQsICRzdGRlcnIpID0gJG5vZGVfc3Vic2NyaWJlcjEtPnBzcWwoJ2RiMScsCisJIkNS RUFURSBTVUJTQ1JJUFRJT04gc3ViX2ZvcmVpZ25fMSBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nv bm5zdHInIFBVQkxJQ0FUSU9OIHB1Yl9mb3JlaWduXzIgV0lUSCAoY29weV9kYXRhPWZhbHNlKSIK Kyk7Ciskbm9kZV9zdWJzY3JpYmVyMS0+c2FmZV9wc3FsKCdkYjEnLCAnRFJPUCBTVUJTQ1JJUFRJ T04gc3ViX2ZvcmVpZ25fMScpOworCisjIEFsdGVyIHN1YnNjcmlwdGlvbiB0byBpbmNsdWRlIHB1 Ymxpc2hlciB3aGljaCBoYXMgcGFydGl0aW9uZWQgdGFibGUgd2l0aAorIyBmb3JlaWduIHRhYmxl IGFzIGl0cyBwYXJ0aXRpb24uCiskbm9kZV9zdWJzY3JpYmVyMS0+c2FmZV9wc3FsKCdkYjEnLAor CSJDUkVBVEUgU1VCU0NSSVBUSU9OIHN1Yl9mb3JlaWduXzEgQ09OTkVDVElPTiAnJHB1Ymxpc2hl cl9jb25uc3RyJyBQVUJMSUNBVElPTiBwdWJfZm9yZWlnbl80OyIKKyk7CisoJHJlc3VsdCwgJHN0 ZG91dCwgJHN0ZGVycikgPSAkbm9kZV9zdWJzY3JpYmVyMS0+cHNxbCgnZGIxJywKKwkiQUxURVIg U1VCU0NSSVBUSU9OIHN1Yl9mb3JlaWduXzEgQUREIFBVQkxJQ0FUSU9OIHB1Yl9mb3JlaWduXzI7 Iik7CitsaWtlKAorCSRzdGRlcnIsCisJcXIvRVJST1I6ICBzdWJzY3JpcHRpb24gInN1Yl9mb3Jl aWduXzEiIHdpdGggY29weV9kYXRhID0gdHJ1ZSBjYW5ub3Qgc3Vic2NyaWJlIHRvIGEgcHVibGlj YXRpb24gd2l0aCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUgYW5kIHB1Ymxpc2hl cyBwYXJ0aXRpb25lZCB0YWJsZSB3aXRoIGZvcmVpZ24gdGFibGUgYXMgcGFydGl0aW9uLywKKwki QWRkIHB1YmxpY2F0aW9uIHdoaWNoIGhhcyBwYXJ0aXRpb25lZCB0YWJsZSB3aXRoIGZvcmVpZ24g dGFibGUgYXMgaXRzIHBhcnRpdGlvbiB0byBzdWJzY3JpcHRpb24iCispOworKCRyZXN1bHQsICRz dGRvdXQsICRzdGRlcnIpID0gJG5vZGVfc3Vic2NyaWJlcjEtPnBzcWwoJ2RiMScsCisJIkFMVEVS IFNVQlNDUklQVElPTiBzdWJfZm9yZWlnbl8xIFNFVCBQVUJMSUNBVElPTiBwdWJfZm9yZWlnbl8y OyIpOworbGlrZSgKKwkkc3RkZXJyLAorCXFyL0VSUk9SOiAgc3Vic2NyaXB0aW9uICJzdWJfZm9y ZWlnbl8xIiB3aXRoIGNvcHlfZGF0YSA9IHRydWUgY2Fubm90IHN1YnNjcmliZSB0byBhIHB1Ymxp Y2F0aW9uIHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlIGFuZCBwdWJsaXNo ZXMgcGFydGl0aW9uZWQgdGFibGUgd2l0aCBmb3JlaWduIHRhYmxlIGFzIHBhcnRpdGlvbi8sCisJ InNldCBwdWJsaWNhdGlvbiB3aGljaCBoYXMgcGFydGl0aW9uZWQgdGFibGUgd2l0aCBmb3JlaWdu IHRhYmxlIGFzIGl0cyBwYXJ0aXRpb24gZm9yIHN1YnNjcmlwdGlvbiIKKyk7CisKKyMgQ3JlYXRl IGZvcmVpZ24gdGFibGUgYXMgYSBwYXJ0aXRpb24gb2YgcGFydGl0aW9uZWQgdGFibGUgYWxyZWFk eSBwYXJ0IG9mCisjIHB1YmxpY2F0aW9uLgorKCRyZXN1bHQsICRzdGRvdXQsICRzdGRlcnIpID0g JG5vZGVfc3Vic2NyaWJlcjEtPnBzcWwoJ2RiMScsCisJIkNSRUFURSBGT1JFSUdOIFRBQkxFIHNj MS50YWI2XzJfMSBQQVJUSVRJT04gT0Ygc2MxLnRhYjZfMiBGT1IgVkFMVUVTIEZST00gKDEwKSBU TyAoMTUpIFNFUlZFUiBmZHc7IgorKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdkYjEn LCAiRFJPUCBGT1JFSUdOIFRBQkxFIHNjMS50YWI2XzJfMSIpOworKCRyZXN1bHQsICRzdGRvdXQs ICRzdGRlcnIpID0gJG5vZGVfcHVibGlzaGVyLT5wc3FsKCdkYjEnLAorCSJDUkVBVEUgRk9SRUlH TiBUQUJMRSBzYzEudGFiNl8yXzEgUEFSVElUSU9OIE9GIHNjMS50YWI2XzIgRk9SIFZBTFVFUyBG Uk9NICgxMCkgVE8gKDE1KSBTRVJWRVIgZmR3IgorKTsKK2xpa2UoCisJJHN0ZGVyciwKKwlxci9F UlJPUjogIGNhbm5vdCBjcmVhdGUgZm9yZWlnbiB0YWJsZSAidGFiNl8yXzEiIGFzIGEgcGFydGl0 aW9uIG9mICJ0YWI2XzIiLywKKwkiQ3JlYXRlIGZvcmVpZ24gdGFibGUgYXMgYSBwYXJ0aXRpb24g b2YgcGFydGl0aW9uZWQgdGFibGUgYWxyZWFkeSBwYXJ0IG9mIHB1YmxpY2F0aW9uIgorKTsKKwor IyBBdHRhY2ggZm9yZWlnbiB0YWJsZSBhcyBhIHBhcnRpdGlvbiBvZiBwYXJ0aXRpb25lZCB0YWJs ZSBhbHJlYWR5IHBhcnQgb2YKKyMgcHVibGljYXRpb24uCisoJHJlc3VsdCwgJHN0ZG91dCwgJHN0 ZGVycikgPSAkbm9kZV9zdWJzY3JpYmVyMS0+cHNxbCgnZGIxJywKKwkiQ1JFQVRFIEZPUkVJR04g VEFCTEUgc2MxLnRhYjZfMl8xIChpZCBpbnQpIFNFUlZFUiBmZHciKTsKKygkcmVzdWx0LCAkc3Rk b3V0LCAkc3RkZXJyKSA9ICRub2RlX3N1YnNjcmliZXIxLT5wc3FsKCdkYjEnLAorCSJBTFRFUiBU QUJMRSBzYzEudGFiNl8yIEFUVEFDSCBQQVJUSVRJT04gc2MxLnRhYjZfMl8xIEZPUiBWQUxVRVMg RlJPTSAoMTApIFRPICgxNSkiCispOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ2RiMScs CisJIkNSRUFURSBGT1JFSUdOIFRBQkxFIHNjMS50YWI2XzJfMSAoaWQgaW50KSBTRVJWRVIgZmR3 Iik7CisoJHJlc3VsdCwgJHN0ZG91dCwgJHN0ZGVycikgPSAkbm9kZV9wdWJsaXNoZXItPnBzcWwo J2RiMScsCisJIkFMVEVSIFRBQkxFIHNjMS50YWI2XzIgQVRUQUNIIFBBUlRJVElPTiBzYzEudGFi Nl8yXzEgRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8gKDE1KSIKKyk7CitsaWtlKAorCSRzdGRlcnIs CisJcXIvRVJST1I6ICBjYW5ub3QgYXR0YWNoIGZvcmVpZ24gdGFibGUgInRhYjZfMl8xIiB0byBw YXJ0aXRpb24gdGFibGUgInRhYjZfMiIvLAorCSJBdHRhY2ggZm9yZWlnbiB0YWJsZSBhcyBhIHBh cnRpdGlvbiBvZiBhbHJlYWR5IHB1Ymxpc2hlZCBwYXJ0aXRpb25lZCB0YWJsZSIKKyk7CisKIGRv bmVfdGVzdGluZygpOwotLSAKMi4zNC4xCgo= --0000000000003925ac06357fafdd--