Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oFr4v-00034o-HT for pgsql-hackers@arkaria.postgresql.org; Mon, 25 Jul 2022 05:56:29 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oFr4t-0002fE-H0 for pgsql-hackers@arkaria.postgresql.org; Mon, 25 Jul 2022 05:56:27 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oFr4t-0002f5-2h for pgsql-hackers@lists.postgresql.org; Mon, 25 Jul 2022 05:56:27 +0000 Received: from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1oFr4q-0007EC-DK for pgsql-hackers@lists.postgresql.org; Mon, 25 Jul 2022 05:56:26 +0000 Received: by mail-pj1-x1035.google.com with SMTP id p6-20020a17090a680600b001f2267a1c84so11690266pjj.5 for ; Sun, 24 Jul 2022 22:56:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc; bh=JfRzx9dDRpwqVY0Q/bkYBrPvzrEV63FQQFhAyT7IWus=; b=T06Zym7iYjoZi3JcJlLDHZ7VH7AoHZY/TK056gyMSfRXyB/xD00lFC57H5W7Rr/lez JToPrSlPcaSGxyjTg7ewEcJBGTT8xbQFdtLs5jthzqgsotIiUZeQuI+NBv02NJaGsKDY /4K5sxg6aXP6GlEalUlZaznn/HeqY52ePwFF+0lDGDHuFA8zGi94CGNMMFXgn4bAtnJr V2NhG0ZSX+dJNe3Y00Ed1ELXvjDNF+rq6CRwqt7YKn2NEiZ9Lx7McZYBAs3NuDJSyAIm wT5nbZMp6qQuTx1hZuQ+f6vltMI7dxLiKrwv/kw5CP6tmoBOzN2qcFPQrDOcQW4sP7Kh vmuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc; bh=JfRzx9dDRpwqVY0Q/bkYBrPvzrEV63FQQFhAyT7IWus=; b=Yob6XFcVcIxjHJfOZwxcIpHT4ALYnlrG8vcMxF7YrYdNDktOSk71ab35oZBv3ctzZo oytySkVV1+JReG0dTO/r431u7k1JoWfsdtPXZLbZ4ypWW2Mlg/LNRosn498wfoT/SOx+ 4EdK1I+TACIDaXHREprbLUhKhf7hnfrFR4p7UnxJczHzHkDkYBb+49a7kwT/DJWqJDNP E+B6XgVVbYmajwjQQVat+nxr9lQv6FKAceUiykabjjaBNj9wupSvRyq5MAwqPt2SZdss D8ZLgDc7uvsc93j2IB6tvYNsNVBgDaj3Ho3NosNIoxX+sJZEBfszakg6B81tH/YCElpD AK7A== X-Gm-Message-State: AJIora/zArsMGbKAozOP3vpdQiD9Rduq8Iy1dbgCIS6D5n7oVcs2pDAB 4dZuvSSx+cvE1Wd0pdJSA7No4jpCVuIS3CD15ZY= X-Google-Smtp-Source: AGRyM1viORqO8LazOfzjAwyPdqQuwBMot/eCEy5w0v1wpnRPJPhB8larLZUiDt4uUKEjnavaxcuejJBuLbO3rMO2Ovg= X-Received: by 2002:a17:90b:4f8f:b0:1f2:1eab:b3ea with SMTP id qe15-20020a17090b4f8f00b001f21eabb3eamr12355066pjb.243.1658728581940; Sun, 24 Jul 2022 22:56:21 -0700 (PDT) MIME-Version: 1.0 References: <20211008.165055.1621145185927268721.horikyota.ntt@gmail.com> <20220523.133323.444599955292141474.horikyota.ntt@gmail.com> In-Reply-To: From: Masahiko Sawada Date: Mon, 25 Jul 2022 14:55:45 +0900 Message-ID: Subject: Re: [BUG] Logical replication failure "ERROR: could not map filenode "base/13237/442428" to relation OID" with catalog modifying txns To: Amit Kapila Cc: "shiy.fnst@fujitsu.com" , Kyotaro Horiguchi , "Drouvot, Bertrand" , PostgreSQL Hackers , "Oh, Mike" Content-Type: multipart/mixed; boundary="000000000000e8872705e49ad719" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e8872705e49ad719 Content-Type: text/plain; charset="UTF-8" On Mon, Jul 25, 2022 at 10:45 AM Masahiko Sawada wrote: > > On Sat, Jul 23, 2022 at 8:32 PM Amit Kapila wrote: > > > > On Fri, Jul 22, 2022 at 11:48 AM Masahiko Sawada wrote: > > > > > > On Wed, Jul 20, 2022 at 5:50 PM Amit Kapila wrote: > > > > > > > > On Wed, Jul 20, 2022 at 1:28 PM Masahiko Sawada wrote: > > > > > > > > > > > > > This is required if we don't want to introduce a new set of functions > > > > as you proposed above. I am not sure which one is better w.r.t back > > > > patching effort later but it seems to me using flag stuff would make > > > > future back patches easier if we make any changes in > > > > SnapBuildCommitTxn. > > > > > > Understood. > > > > > > I've implemented this idea as well for discussion. Both patches have > > > the common change to remember the initial running transactions and to > > > purge them when decoding xl_running_xacts records. The difference is > > > how to mark the transactions as needing to be added to the snapshot. > > > > > > In v7-0001-Fix-catalog-lookup-with-the-wrong-snapshot-during.patch, > > > when the transaction is in the initial running xact list and its > > > commit record has XINFO_HAS_INVAL flag, we mark both the top > > > transaction and its all subtransactions as containing catalog changes > > > (which also means to create ReorderBufferTXN entries for them). These > > > transactions are added to the snapshot in SnapBuildCommitTxn() since > > > ReorderBufferXidHasCatalogChanges () for them returns true. > > > > > > In poc_mark_top_txn_has_inval.patch, when the transaction is in the > > > initial running xacts list and its commit record has XINFO_HAS_INVALS > > > flag, we set a new flag, say RBTXN_COMMIT_HAS_INVALS, only to the top > > > transaction. > > > > > > > It seems that the patch has missed the part to check if the xid is in > > the initial running xacts list? > > Oops, right. > > > > > > In SnapBuildCommitTxn(), we add all subtransactions to > > > the snapshot without checking ReorderBufferXidHasCatalogChanges() for > > > subtransactions if its top transaction has the RBTXN_COMMIT_HAS_INVALS > > > flag. > > > > > > A difference between the two ideas is the scope of changes: the former > > > changes only snapbuild.c but the latter changes both snapbuild.c and > > > reorderbuffer.c. Moreover, while the former uses the existing flag, > > > the latter adds a new flag to the reorder buffer for dealing with only > > > this case. I think the former idea is simpler in terms of that. But, > > > an advantage of the latter idea is that the latter idea can save to > > > create ReorderBufferTXN entries for subtransactions. > > > > > > Overall I prefer the former for now but I'd like to hear what others think. > > > > > > > I agree that the latter idea can have better performance in extremely > > special scenarios but introducing a new flag for the same sounds a bit > > ugly to me. So, I would also prefer to go with the former idea, > > however, I would also like to hear what Horiguchi-San and others have > > to say. > > Agreed. > > > > > Few comments on v7-0001-Fix-catalog-lookup-with-the-wrong-snapshot-during: > > 1. > > +void > > +SnapBuildInitialXactSetCatalogChanges(SnapBuild *builder, TransactionId xid, > > + int subxcnt, TransactionId *subxacts, > > + XLogRecPtr lsn) > > +{ > > > > I think it is better to name this function as > > SnapBuildXIDSetCatalogChanges as we use this to mark a particular > > transaction as having catalog changes. > > > > 2. Changed/added a few comments in the attached. > > Thank you for the comments. > > I've attached updated version patches for the master and back branches. I've attached the patch for REl15 that I forgot. Regards, -- Masahiko Sawada EDB: https://www.enterprisedb.com/ --000000000000e8872705e49ad719 Content-Type: application/octet-stream; name="REL15-v8-0001-Fix-catalog-lookup-with-the-wrong-snapshot-during.patch" Content-Disposition: attachment; filename="REL15-v8-0001-Fix-catalog-lookup-with-the-wrong-snapshot-during.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l60c3vuc0 RnJvbSBiNGNlNDFjMThmMzVlZTMyZmI4MmI1MDllMTkzNjQ1YjgyNzBlZGJkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXNhaGlrbyBTYXdhZGEgPHNhd2FkYS5tc2hrQGdtYWlsLmNv bT4KRGF0ZTogTW9uLCAyNSBKdWwgMjAyMiAxNDowMjo1MCArMDkwMApTdWJqZWN0OiBbUEFUQ0gg djhdIEZpeCBjYXRhbG9nIGxvb2t1cCB3aXRoIHRoZSB3cm9uZyBzbmFwc2hvdCBkdXJpbmcgbG9n aWNhbAogZGVjb2RpbmcuCgpQcmV2aW91c2x5LCB3ZSByZWxpZWQgb24gSEVBUDJfTkVXX0NJRCBy ZWNvcmRzIGFuZCBYQUNUX0lOVkFMSURBVElPTgpyZWNvcmRzIHRvIGtub3cgaWYgdGhlIHRyYW5z YWN0aW9uIGhhcyBtb2RpZmllZCB0aGUgY2F0YWxvZywgYW5kIHRoYXQKaW5mb3JtYXRpb24gaXMg bm90IHNlcmlhbGl6ZWQgdG8gc25hcHNob3QuIFRoZXJlZm9yZSwgaWYgdGhlIGxvZ2ljYWwKZGVj b2RpbmcgZGVjb2RlcyBvbmx5IHRoZSBjb21taXQgcmVjb3JkIG9mIHRoZSB0cmFuc2FjdGlvbiB0 aGF0CmFjdHVhbGx5IGhhcyBtb2RpZmllZCBhIGNhdGFsb2csIHdlIG1pc3NlZCBhZGRpbmcgaXRz IFhJRCB0byB0aGUKc25hcHNob3QuIFdlIGVuZGVkIHVwIGxvb2tpbmcgYXQgY2F0YWxvZ3Mgd2l0 aCB0aGUgd3Jvbmcgc25hcHNob3QuCgpUbyBmaXggdGhpcyBwcm9ibGVtLCB0aGlzIGNoYW5nZXMg dGhlIHNuYXBzaG90IGJ1aWxkZXIgc28gdGhhdCBpdApyZW1lbWJlcnMgdGhlIHJ1bm5pbmcgdHJh bnNhY3Rpb24gd3JpdHRlbiBpbiB0aGUgeGxfcnVubmluZ194YWN0cwpyZWNvcmQgdGhhdCB3ZSBk ZWNvZGVkIGZpcnN0LCBhbmQgbWFyayB0aGUgdHJhbnNhY3Rpb24gYXMgY29udGFpbmluZwpjYXRh bG9nIGNoYW5nZXMgaWYgaXQncyBpbiB0aGUgbGlzdCBvZiB0aGUgaW5pdGlhbCBydW5uaW5nCnRy YW5zYWN0aW9ucyBhbmQgaXRzIGNvbW1pdCByZWNvcmQgaGFzIFhBQ1RfWElORk9fSEFTX0lOVkFM Uy4gVG8gYXZvaWQKQUJJIGJyZWFrYWdlLCB3ZSBzdG9yZSB0aGUgYXJyYXkgb2YgdGhlIGluaXRp YWwgcnVubmluZyB0cmFuc2FjdGlvbnMKaW4gdGhlIHN0YXRpYyB2YXJpYWJsZXMgSW5pdGlhbFJ1 bm5pbmdYYWN0cyBhbmQgTkluaXRpYWxSdW5uaW5nWGFjdHMsCm5laXRoZXIgU25hcEJ1aWxkIG5v ciBSZW9yZGVyQnVmZmVyLgoKVGhpcyBhcHByb2FjaCBoYXMgZmFsc2UgcG9zaXRpdmU7IHdlIGNv dWxkIGVuZCB1cCBhZGRpbmcgdGhlCnRyYW5zYWN0aW9uIHRoYXQgZGlkbid0IGNoYW5nZSBjYXRh bG9nIHRvIHRoZSBzbmFwc2hvdCBzaW5jZSB3ZSBjYW5ub3QKZGlzdGluZ3Vpc2ggd2hldGhlciB0 aGUgdHJhbnNhY3Rpb24gaGFzIGNhdGFsb2cgY2hhbmdlcyBvbmx5IGJ5CmNoZWNraW5nIHRoZSBD T01NSVQgcmVjb3JkLiBJdCBkb2Vzbid0IGhhdmUgdGhlIGluZm9ybWF0aW9uIG9uCndoaWNoIChz dWIpIHRyYW5zYWN0aW9uIGhhcyBjYXRhbG9nIGNoYW5nZXMsIGFuZCBYQUNUX1hJTkZPX0hBU19J TlZBTFMKZG9lc24ndCBuZWNlc3NhcmlseSBpbmRpY2F0ZSB0aGF0IHRoZSB0cmFuc2FjdGlvbiBo YXMgY2F0YWxvZwpjaGFuZ2UuIEJ1dCBpdCBkb2Vzbid0IGJlY29tZSBhIHByb2JsZW0gc2luY2Ug d2UgdXNlIGhpc3RvcmljIHNuYXBzaG90Cm9ubHkgZm9yIHN5c3RlbSBjYXRhbG9nIGxvb2t1cHMu CgpPbiB0aGUgbWFzdGVyIGJyYW5jaCwgd2UgdG9vayBhIG1vcmUgZnV0dXJlLXByb29mIGFwcHJv YWNoIC0tIHdyaXRpbmcKY2F0YWxvZyBtb2RpZnlpbmcgdHJhbnNhY3Rpb25zIHRvIHRoZSBzZXJp YWxpemVkIHNuYXBzaG90LiBCdXQgd2UKY2Fubm90IGJhY2twYXRjaCBpdCBiZWNhdXNlIG9mIGNo YW5nZSBpbiBTbmFwQnVpbGQuCgpCYWNrLXBhdGNoIHRvIGFsbCBzdXBwb3J0ZWQgcmVsZWFzZWQu CgpSZXBvcnRlZC1ieTogTWlrZSBPaCA8bWluc29vQGFtYXpvbi5jb20+CkF1dGhvcjogTWFzYWhp a28gU2F3YWRhIDxzYXdhZGEubXNoa0BnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBBbWl0IEthcGls YSA8YW1pdC5rYXBpbGExNkBnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBUYWthbWljaGkgT3N1bWkg PG9zdW1pLnRha2FtaWNoaUBmdWppdHN1LmNvbT4KUmV2aWV3ZWQtYnk6IEt5b3Rhcm8gSG9yaWd1 Y2hpIDxob3Jpa3lvdGEubnR0QGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEJlcnRyYW5kIERyb3V2 b3QgPGJkcm91dm90QGFtYXpvbi5jb20+ClJldmlld2VkLWJ5OiBTaGkgeXUgPHNoaXkuZm5zdEBm dWppdHN1LmNvbT4KUmV2aWV3ZWQtYnk6IEFoc2FuIEhhZGkgPGFoc2FuLmhhZGlAZ21haWwuY29t PgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLzgxRDBEOEIwLUU3QzQtNDk5OS1CNjE2 LTFFNTAwNERCRENEMiU0MGFtYXpvbi5jb20KQmFja3BhdGNoLXRocm91Z2g6IDEwCi0tLQogY29u dHJpYi90ZXN0X2RlY29kaW5nL01ha2VmaWxlICAgICAgICAgICAgICAgIHwgICAyICstCiAuLi4v ZXhwZWN0ZWQvY2F0YWxvZ19jaGFuZ2Vfc25hcHNob3Qub3V0ICAgICAgfCAgNDQgKysrKysrCiAu Li4vc3BlY3MvY2F0YWxvZ19jaGFuZ2Vfc25hcHNob3Quc3BlYyAgICAgICAgfCAgMzkgKysrKysK IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMgICAgICB8ICAxNSArKwog c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbmFwYnVpbGQuYyAgIHwgMTQzICsrKysr KysrKysrKysrKysrLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc25hcGJ1aWxkLmggICAgICAg ICAgIHwgICAzICsKIDYgZmlsZXMgY2hhbmdlZCwgMjM4IGluc2VydGlvbnMoKyksIDggZGVsZXRp b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi90ZXN0X2RlY29kaW5nL2V4cGVjdGVk L2NhdGFsb2dfY2hhbmdlX3NuYXBzaG90Lm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIv dGVzdF9kZWNvZGluZy9zcGVjcy9jYXRhbG9nX2NoYW5nZV9zbmFwc2hvdC5zcGVjCgpkaWZmIC0t Z2l0IGEvY29udHJpYi90ZXN0X2RlY29kaW5nL01ha2VmaWxlIGIvY29udHJpYi90ZXN0X2RlY29k aW5nL01ha2VmaWxlCmluZGV4IGIyMjA5MDY0NzkuLmM3Y2U2MDM3MDYgMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvdGVzdF9kZWNvZGluZy9NYWtlZmlsZQorKysgYi9jb250cmliL3Rlc3RfZGVjb2Rpbmcv TWFrZWZpbGUKQEAgLTgsNyArOCw3IEBAIFJFR1JFU1MgPSBkZGwgeGFjdCByZXdyaXRlIHRvYXN0 IHBlcm1pc3Npb25zIGRlY29kaW5nX2luX3hhY3QgXAogCXNwaWxsIHNsb3QgdHJ1bmNhdGUgc3Ry ZWFtIHN0YXRzIHR3b3BoYXNlIHR3b3BoYXNlX3N0cmVhbQogSVNPTEFUSU9OID0gbXhhY3QgZGVs YXllZF9zdGFydHVwIG9uZGlza19zdGFydHVwIGNvbmN1cnJlbnRfZGRsX2RtbCBcCiAJb2xkZXN0 X3htaW4gc25hcHNob3RfdHJhbnNmZXIgc3VieGFjdF93aXRob3V0X3RvcCBjb25jdXJyZW50X3N0 cmVhbSBcCi0JdHdvcGhhc2Vfc25hcHNob3Qgc2xvdF9jcmVhdGlvbl9lcnJvcgorCXR3b3BoYXNl X3NuYXBzaG90IHNsb3RfY3JlYXRpb25fZXJyb3IgY2F0YWxvZ19jaGFuZ2Vfc25hcHNob3QKIAog UkVHUkVTU19PUFRTID0gLS10ZW1wLWNvbmZpZyAkKHRvcF9zcmNkaXIpL2NvbnRyaWIvdGVzdF9k ZWNvZGluZy9sb2dpY2FsLmNvbmYKIElTT0xBVElPTl9PUFRTID0gLS10ZW1wLWNvbmZpZyAkKHRv cF9zcmNkaXIpL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9sb2dpY2FsLmNvbmYKZGlmZiAtLWdpdCBh L2NvbnRyaWIvdGVzdF9kZWNvZGluZy9leHBlY3RlZC9jYXRhbG9nX2NoYW5nZV9zbmFwc2hvdC5v dXQgYi9jb250cmliL3Rlc3RfZGVjb2RpbmcvZXhwZWN0ZWQvY2F0YWxvZ19jaGFuZ2Vfc25hcHNo b3Qub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmRjNGY5YjcwMTgK LS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3Rlc3RfZGVjb2RpbmcvZXhwZWN0ZWQvY2F0YWxv Z19jaGFuZ2Vfc25hcHNob3Qub3V0CkBAIC0wLDAgKzEsNDQgQEAKK1BhcnNlZCB0ZXN0IHNwZWMg d2l0aCAyIHNlc3Npb25zCisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBzMF9pbml0IHMwX2JlZ2lu IHMwX3NhdmVwb2ludCBzMF90cnVuY2F0ZSBzMV9jaGVja3BvaW50IHMxX2dldF9jaGFuZ2VzIHMw X2NvbW1pdCBzMF9iZWdpbiBzMF9pbnNlcnQgczFfY2hlY2twb2ludCBzMV9nZXRfY2hhbmdlcyBz MF9jb21taXQgczFfZ2V0X2NoYW5nZXMKK3N0ZXAgczBfaW5pdDogU0VMRUNUICdpbml0JyBGUk9N IHBnX2NyZWF0ZV9sb2dpY2FsX3JlcGxpY2F0aW9uX3Nsb3QoJ2lzb2xhdGlvbl9zbG90JywgJ3Rl c3RfZGVjb2RpbmcnKTsKKz9jb2x1bW4/CistLS0tLS0tLQoraW5pdCAgICAKKygxIHJvdykKKwor c3RlcCBzMF9iZWdpbjogQkVHSU47CitzdGVwIHMwX3NhdmVwb2ludDogU0FWRVBPSU5UIHNwMTsK K3N0ZXAgczBfdHJ1bmNhdGU6IFRSVU5DQVRFIHRibDE7CitzdGVwIHMxX2NoZWNrcG9pbnQ6IENI RUNLUE9JTlQ7CitzdGVwIHMxX2dldF9jaGFuZ2VzOiBTRUxFQ1QgZGF0YSBGUk9NIHBnX2xvZ2lj YWxfc2xvdF9nZXRfY2hhbmdlcygnaXNvbGF0aW9uX3Nsb3QnLCBOVUxMLCBOVUxMLCAnc2tpcC1l bXB0eS14YWN0cycsICcxJywgJ2luY2x1ZGUteGlkcycsICcwJyk7CitkYXRhCistLS0tCisoMCBy b3dzKQorCitzdGVwIHMwX2NvbW1pdDogQ09NTUlUOworc3RlcCBzMF9iZWdpbjogQkVHSU47Citz dGVwIHMwX2luc2VydDogSU5TRVJUIElOVE8gdGJsMSBWQUxVRVMgKDEpOworc3RlcCBzMV9jaGVj a3BvaW50OiBDSEVDS1BPSU5UOworc3RlcCBzMV9nZXRfY2hhbmdlczogU0VMRUNUIGRhdGEgRlJP TSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMoJ2lzb2xhdGlvbl9zbG90JywgTlVMTCwgTlVM TCwgJ3NraXAtZW1wdHkteGFjdHMnLCAnMScsICdpbmNsdWRlLXhpZHMnLCAnMCcpOworZGF0YSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KK0JFR0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAordGFibGUgcHVibGljLnRibDE6IFRSVU5DQVRFOiAobm8tZmxhZ3MpCitDT01NSVQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKygzIHJvd3MpCisKK3N0ZXAgczBfY29tbWl0OiBD T01NSVQ7CitzdGVwIHMxX2dldF9jaGFuZ2VzOiBTRUxFQ1QgZGF0YSBGUk9NIHBnX2xvZ2ljYWxf c2xvdF9nZXRfY2hhbmdlcygnaXNvbGF0aW9uX3Nsb3QnLCBOVUxMLCBOVUxMLCAnc2tpcC1lbXB0 eS14YWN0cycsICcxJywgJ2luY2x1ZGUteGlkcycsICcwJyk7CitkYXRhICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitCRUdJTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCit0 YWJsZSBwdWJsaWMudGJsMTogSU5TRVJUOiB2YWwxW2ludGVnZXJdOjEgdmFsMltpbnRlZ2VyXTpu dWxsCitDT01NSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCisoMyByb3dzKQorCis/Y29sdW1uPworLS0tLS0tLS0KK3N0b3AgICAgCisoMSBy b3cpCisKZGlmZiAtLWdpdCBhL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9zcGVjcy9jYXRhbG9nX2No YW5nZV9zbmFwc2hvdC5zcGVjIGIvY29udHJpYi90ZXN0X2RlY29kaW5nL3NwZWNzL2NhdGFsb2df Y2hhbmdlX3NuYXBzaG90LnNwZWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MC4uNjYyNzYwZmJjZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9z cGVjcy9jYXRhbG9nX2NoYW5nZV9zbmFwc2hvdC5zcGVjCkBAIC0wLDAgKzEsMzkgQEAKKyMgVGVz dCBkZWNvZGluZyBvbmx5IHRoZSBjb21taXQgcmVjb3JkIG9mIHRoZSB0cmFuc2FjdGlvbiB0aGF0 IGhhdmUKKyMgbW9kaWZpZWQgY2F0YWxvZ3MuCitzZXR1cAoreworICAgIERST1AgVEFCTEUgSUYg RVhJU1RTIHRibDE7CisgICAgQ1JFQVRFIFRBQkxFIHRibDEgKHZhbDEgaW50ZWdlciwgdmFsMiBp bnRlZ2VyKTsKK30KKwordGVhcmRvd24KK3sKKyAgICBEUk9QIFRBQkxFIHRibDE7CisgICAgU0VM RUNUICdzdG9wJyBGUk9NIHBnX2Ryb3BfcmVwbGljYXRpb25fc2xvdCgnaXNvbGF0aW9uX3Nsb3Qn KTsKK30KKworc2Vzc2lvbiAiczAiCitzZXR1cCB7IFNFVCBzeW5jaHJvbm91c19jb21taXQ9b247 IH0KK3N0ZXAgInMwX2luaXQiIHsgU0VMRUNUICdpbml0JyBGUk9NIHBnX2NyZWF0ZV9sb2dpY2Fs X3JlcGxpY2F0aW9uX3Nsb3QoJ2lzb2xhdGlvbl9zbG90JywgJ3Rlc3RfZGVjb2RpbmcnKTsgfQor c3RlcCAiczBfYmVnaW4iIHsgQkVHSU47IH0KK3N0ZXAgInMwX3NhdmVwb2ludCIgeyBTQVZFUE9J TlQgc3AxOyB9CitzdGVwICJzMF90cnVuY2F0ZSIgeyBUUlVOQ0FURSB0YmwxOyB9CitzdGVwICJz MF9pbnNlcnQiIHsgSU5TRVJUIElOVE8gdGJsMSBWQUxVRVMgKDEpOyB9CitzdGVwICJzMF9jb21t aXQiIHsgQ09NTUlUOyB9CisKK3Nlc3Npb24gInMxIgorc2V0dXAgeyBTRVQgc3luY2hyb25vdXNf Y29tbWl0PW9uOyB9CitzdGVwICJzMV9jaGVja3BvaW50IiB7IENIRUNLUE9JTlQ7IH0KK3N0ZXAg InMxX2dldF9jaGFuZ2VzIiB7IFNFTEVDVCBkYXRhIEZST00gcGdfbG9naWNhbF9zbG90X2dldF9j aGFuZ2VzKCdpc29sYXRpb25fc2xvdCcsIE5VTEwsIE5VTEwsICdza2lwLWVtcHR5LXhhY3RzJywg JzEnLCAnaW5jbHVkZS14aWRzJywgJzAnKTsgfQorCisjIEZvciB0aGUgdHJhbnNhY3Rpb24gdGhh dCBUUlVOQ0FURWQgdGhlIHRhYmxlIHRibDEsIHRoZSBsYXN0IGRlY29kaW5nIGRlY29kZXMKKyMg b25seSBpdHMgQ09NTUlUIHJlY29yZCwgYmVjYXVzZSBpdCBzdGFydHMgZnJvbSB0aGUgUlVOTklO R19YQUNUIHJlY29yZCBlbWl0dGVkCisjIGR1cmluZyB0aGUgZmlyc3QgY2hlY2twb2ludCBleGVj dXRpb24uICBUaGlzIHRyYW5zYWN0aW9uIG11c3QgYmUgbWFya2VkIGFzCisjIGNvbnRhaW5pbmcg Y2F0YWxvZyBjaGFuZ2VzIHdoaWxlIGRlY29kaW5nIHRoZSBDT01NSVQgcmVjb3JkIGFuZCB0aGUg ZGVjb2RpbmcKKyMgb2YgdGhlIElOU0VSVCByZWNvcmQgbXVzdCByZWFkIHRoZSBwZ19jbGFzcyB3 aXRoIHRoZSBjb3JyZWN0IGhpc3RvcmljIHNuYXBzaG90LgorIworIyBOb3RlIHRoYXQgaW4gYSBj YXNlIHdoZXJlIGJnd3JpdGVyIHdyb3RlIHRoZSBYQUNUX1JVTk5JTkcgcmVjb3JkIGJldHdlZW4g InMwX2NvbW1pdCIKKyMgYW5kICJzMF9iZWdpbiIsIHRoaXMgZG9lc24ndCBoYXBwZW4gYXMgdGhl IGRlY29kaW5nIHN0YXJ0cyBmcm9tIHRoZSBSVU5OSU5HX1hBQ1QKKyMgcmVjb3JkIHdyaXR0ZW4g YnkgYmd3cml0ZXIuICBPbmUgbWlnaHQgdGhpbmsgd2UgY2FuIGVpdGhlciBzdG9wIHRoZSBiZ3dy aXRlciBvcgorIyBpbmNyZWFzZSBMT0dfU05BUFNIT1RfSU5URVJWQUxfTVMgYnV0IGl0J3Mgbm90 IHByYWN0aWNhbCB2aWEgdGVzdHMuCitwZXJtdXRhdGlvbiAiczBfaW5pdCIgInMwX2JlZ2luIiAi czBfc2F2ZXBvaW50IiAiczBfdHJ1bmNhdGUiICJzMV9jaGVja3BvaW50IiAiczFfZ2V0X2NoYW5n ZXMiICJzMF9jb21taXQiICJzMF9iZWdpbiIgInMwX2luc2VydCIgInMxX2NoZWNrcG9pbnQiICJz MV9nZXRfY2hhbmdlcyIgInMwX2NvbW1pdCIgInMxX2dldF9jaGFuZ2VzIgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKaW5kZXggYWEyNDI3YmE3My4uMzEyY2NlODI3YyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYworKysg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCkBAIC02MjcsNiArNjI3 LDIxIEBAIERlY29kZUNvbW1pdChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNv cmRCdWZmZXIgKmJ1ZiwKIAkJY29tbWl0X3RpbWUgPSBwYXJzZWQtPm9yaWdpbl90aW1lc3RhbXA7 CiAJfQogCisJLyoKKwkgKiBJZiB0aGUgQ09NTUlUIHJlY29yZCBoYXMgaW52YWxpZGF0aW9uIG1l c3NhZ2VzLCBpdCBjb3VsZCBoYXZlIGNhdGFsb2cKKwkgKiBjaGFuZ2VzLiBJdCBpcyBwb3NzaWJs ZSB0aGF0IHdlIGRpZG4ndCBtYXJrIHRoaXMgdHJhbnNhY3Rpb24gYXMKKwkgKiBjb250YWluaW5n IGNhdGFsb2cgY2hhbmdlcyB3aGVuIHRoZSBkZWNvZGluZyBzdGFydHMgZnJvbSBhIGNvbW1pdCBy ZWNvcmQKKwkgKiB3aXRob3V0IGRlY29kaW5nIHRoZSB0cmFuc2FjdGlvbidzIG90aGVyIGNoYW5n ZXMuIFNvLCB3ZSBlbnN1cmUgdG8gbWFyaworCSAqIHN1Y2ggdHJhbnNhY3Rpb25zIGFzIGNvbnRh aW5pbmcgY2F0YWxvZyBjaGFuZ2UuCisJICoKKwkgKiBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUg U25hcEJ1aWxkQ29tbWl0VHhuKCkgc28gdGhhdCB3ZSBjYW4gaW5jbHVkZQorCSAqIHRoZXNlIHRy YW5zYWN0aW9ucyBpbiB0aGUgaGlzdG9yaWMgc25hcHNob3QuCisJICovCisJaWYgKHBhcnNlZC0+ eGluZm8gJiBYQUNUX1hJTkZPX0hBU19JTlZBTFMpCisJCVNuYXBCdWlsZFhpZFNldENhdGFsb2dD aGFuZ2VzKGN0eC0+c25hcHNob3RfYnVpbGRlciwgeGlkLAorCQkJCQkJCQkJICBwYXJzZWQtPm5z dWJ4YWN0cywgcGFyc2VkLT5zdWJ4YWN0cywKKwkJCQkJCQkJCSAgYnVmLT5vcmlncHRyKTsKKwog CVNuYXBCdWlsZENvbW1pdFR4bihjdHgtPnNuYXBzaG90X2J1aWxkZXIsIGJ1Zi0+b3JpZ3B0ciwg eGlkLAogCQkJCQkgICBwYXJzZWQtPm5zdWJ4YWN0cywgcGFyc2VkLT5zdWJ4YWN0cyk7CiAKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc25hcGJ1aWxkLmMgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3NuYXBidWlsZC5jCmluZGV4IDExMTlhMTJk YjkuLmQwNzVlNWVlNGUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvc25hcGJ1aWxkLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbmFw YnVpbGQuYwpAQCAtMjUwLDggKzI1MCwzOCBAQCBzdHJ1Y3QgU25hcEJ1aWxkCiBzdGF0aWMgUmVz b3VyY2VPd25lciBTYXZlZFJlc291cmNlT3duZXJEdXJpbmdFeHBvcnQgPSBOVUxMOwogc3RhdGlj IGJvb2wgRXhwb3J0SW5Qcm9ncmVzcyA9IGZhbHNlOwogCi0vKiAtPmNvbW1pdHRlZCBtYW5pcHVs YXRpb24gKi8KLXN0YXRpYyB2b2lkIFNuYXBCdWlsZFB1cmdlQ29tbWl0dGVkVHhuKFNuYXBCdWls ZCAqYnVpbGRlcik7CisvKgorICogQXJyYXkgb2YgdHJhbnNhY3Rpb25zIGFuZCBzdWJ0cmFuc2Fj dGlvbnMgdGhhdCB3ZXJlIHJ1bm5pbmcgd2hlbgorICogdGhlIHhsX3J1bm5pbmdfeGFjdHMgcmVj b3JkIHRoYXQgd2UgZGVjb2RlZCBmaXJzdCB3YXMgd3JpdHRlbi4KKyAqIFRoZSBhcnJheSBpcyBz b3J0ZWQgaW4geGlkQ29tcGFyYXRvciBvcmRlci4gV2UgcmVtb3ZlIFhpZHMgZnJvbQorICogdGhp cyBhcnJheSB3aGVuIHRoZXkgYmVjb21lIG9sZCBlbm91Z2ggdG8gbWF0dGVyLiBUaGlzIGFycmF5 IGlzCisgKiBhbGxvY2F0ZWQgaW4gYnVpbGRlci0+Y29udGV4dCBzbyBpdHMgbGlmZXRpbWUgaXMg dGhlIHNhbWUgYXMgdGhlCisgKiBzbmFwc2hvdCBidWlsZGVyLgorICoKKyAqIFdlIHJlbHkgb24g SEVBUDJfTkVXX0NJRCByZWNvcmRzIGFuZCBYQUNUX0lOVkFMSURBVElPTlMgdG8ga25vdworICog aWYgdGhlIHRyYW5zYWN0aW9uIGhhcyBjaGFuZ2VkIHRoZSBjYXRhbG9nLCBhbmQgdGhhdCBpbmZv cm1hdGlvbgorICogaXMgbm90IHNlcmlhbGl6ZWQgdG8gU25hcEJ1aWxkZXIuIFRoZXJlZm9yZSwg aWYgdGhlIGxvZ2ljYWwKKyAqIGRlY29kaW5nIGRlY29kZXMgdGhlIGNvbW1pdCByZWNvcmQgb2Yg dGhlIHRyYW5zYWN0aW9uIHRoYXQgYWN0dWFsbHkKKyAqIGhhcyBkb25lIGNhdGFsb2cgY2hhbmdl cyB3aXRob3V0IHRoZXNlIHJlY29yZHMsIHdlIG1pc3MgdG8gYWRkCisgKiB0aGUgeGlkIHRvIHRo ZSBzbmFwc2hvdCwgYW5kIGVuZCB1cCBsb29raW5nIGF0IGNhdGFsb2dzIHdpdGggdGhlCisgKiB3 cm9uZyBzbmFwc2hvdC4gVG8gYXZvaWQgdGhpcyBwcm9ibGVtLCBpZiB0aGUgQ09NTUlUIHJlY29y ZCBvZgorICogdGhlIHhpZCBsaXN0ZWQgaW4gSW5pdGlhbFJ1bm5pbmdYYWN0cyBoYXMgWEFDVF9Y SU5GT19IQVNfSU5WQUxTCisgKiBmbGFnLCB3ZSBtYXJrIGJvdGggdGhlIHRvcCB0cmFuc2FjdGlv biBhbmQgaXRzIHN1YnN0cmFuc2FjdGlvbnMKKyAqIGFzIGNvbnRhaW5pbmcgY2F0YWxvZyBjaGFu Z2VzLgorICoKKyAqIFdlIGNvdWxkIGVuZCB1cCBhZGRpbmcgdGhlIHRyYW5zYWN0aW9uIHRoYXQg ZGlkbid0IGNoYW5nZSBjYXRhbG9nCisgKiB0byB0aGUgc25hcHNob3Qgc2luY2Ugd2UgY2Fubm90 IGRpc3Rpbmd1aXNoIHdoZXRoZXIgdGhlIHRyYW5zYWN0aW9uCisgKiBoYXMgY2F0YWxvZyBjaGFu Z2VzIG9ubHkgYnkgY2hlY2tpbmcgdGhlIENPTU1JVCByZWNvcmQuIEl0IGRvZXNuJ3QKKyAqIGhh dmUgdGhlIGluZm9ybWF0aW9uIG9uIHdoaWNoIChzdWIpIHRyYW5zYWN0aW9uIGhhcyBjYXRhbG9n IGNoYW5nZXMsCisgKiBhbmQgWEFDVF9YSU5GT19IQVNfSU5WQUxTIGRvZXNuJ3QgbmVjZXNzYXJp bHkgaW5kaWNhdGUgdGhhdCB0aGUKKyAqIHRyYW5zYWN0aW9uIGhhcyBjYXRhbG9nIGNoYW5nZS4g QnV0IGl0IGRvZXNuJ3QgYmVjb21lIGEgcHJvYmxlbSBzaW5jZQorICogd2UgdXNlIGhpc3Rvcmlj IHNuYXBzaG90IG9ubHkgZm9yIHJlYWRpbmcgc3lzdGVtIGNhdGFsb2dzLgorICovCitzdGF0aWMg VHJhbnNhY3Rpb25JZCAqSW5pdGlhbFJ1bm5pbmdYYWN0cyA9IE5VTEw7CitzdGF0aWMgaW50CU5J bml0aWFsUnVubmluZ1hhY3RzID0gMDsKKworLyogLT5jb21taXR0ZWQgYW5kIEluaXRhaWxSdW5u aW5nWGFjdHMgbWFuaXB1bGF0aW9uICovCitzdGF0aWMgdm9pZCBTbmFwQnVpbGRQdXJnZU9sZGVy VHhuKFNuYXBCdWlsZCAqYnVpbGRlcik7CiAKIC8qIHNuYXBzaG90IGJ1aWxkaW5nL21hbmlwdWxh dGlvbi9kaXN0cmlidXRpb24gZnVuY3Rpb25zICovCiBzdGF0aWMgU25hcHNob3QgU25hcEJ1aWxk QnVpbGRTbmFwc2hvdChTbmFwQnVpbGQgKmJ1aWxkZXIpOwpAQCAtODg4LDEyICs5MTgsMTcgQEAg U25hcEJ1aWxkQWRkQ29tbWl0dGVkVHhuKFNuYXBCdWlsZCAqYnVpbGRlciwgVHJhbnNhY3Rpb25J ZCB4aWQpCiB9CiAKIC8qCi0gKiBSZW1vdmUga25vd2xlZGdlIGFib3V0IHRyYW5zYWN0aW9ucyB3 ZSB0cmVhdCBhcyBjb21taXR0ZWQgdGhhdCBhcmUgc21hbGxlcgotICogdGhhbiAtPnhtaW4uIFRo b3NlIHdvbid0IGV2ZXIgZ2V0IGNoZWNrZWQgdmlhIHRoZSAtPmNvbW1pdHRlZCBhcnJheSBidXQg dmlhCi0gKiB0aGUgY2xvZyBtYWNoaW5lcnksIHNvIHdlIGRvbid0IG5lZWQgdG8gd2FzdGUgbWVt b3J5IG9uIHRoZW0uCisgKiBSZW1vdmUga25vd2xlZGdlIGFib3V0IHRyYW5zYWN0aW9ucyB3ZSB0 cmVhdCBhcyBjb21taXR0ZWQgYW5kIHRoZSBpbml0aWFsCisgKiBydW5uaW5nIHRyYW5zYWN0aW9u cyB0aGF0IGFyZSBzbWFsbGVyIHRoYW4gLT54bWluLiBUaG9zZSB3b24ndCBldmVyIGdldAorICog Y2hlY2tlZCB2aWEgdGhlIC0+Y29tbWl0dGVkIG9yIEluaXRpYWxSdW5uaW5nWGFjdHMgYXJyYXks IHJlc3BlY3RpdmVseS4KKyAqIFRoZSBjb21taXR0ZWQgeGlkcyB3aWxsIGdldCBjaGVja2VkIHZp YSB0aGUgY2xvZyBtYWNoaW5lcnkuCisgKgorICogV2UgY2FuIGlkZWFsbHkgcmVtb3ZlIHRoZSB0 cmFuc2FjdGlvbiBmcm9tIEluaXRpYWxSdW5uaW5nWGFjdHMgYXJyYXkKKyAqIG9uY2UgaXQgaXMg ZmluaXNoZWQgKGNvbW1pdHRlZC9hYm9ydGVkKSBidXQgdGhhdCBjb3VsZCBiZSBjb3N0bHkgYXMg d2UgbmVlZAorICogdG8gbWFpbnRhaW4gdGhlIHhpZHMgb3JkZXIgaW4gdGhlIGFycmF5LgogICov CiBzdGF0aWMgdm9pZAotU25hcEJ1aWxkUHVyZ2VDb21taXR0ZWRUeG4oU25hcEJ1aWxkICpidWls ZGVyKQorU25hcEJ1aWxkUHVyZ2VPbGRlclR4bihTbmFwQnVpbGQgKmJ1aWxkZXIpCiB7CiAJaW50 CQkJb2ZmOwogCVRyYW5zYWN0aW9uSWQgKndvcmtzcGFjZTsKQEAgLTkyOCw2ICs5NjMsNDkgQEAg U25hcEJ1aWxkUHVyZ2VDb21taXR0ZWRUeG4oU25hcEJ1aWxkICpidWlsZGVyKQogCWJ1aWxkZXIt PmNvbW1pdHRlZC54Y250ID0gc3Vydml2aW5nX3hpZHM7CiAKIAlwZnJlZSh3b3Jrc3BhY2UpOwor CisJLyogUXVpY2sgZXhpdCBpZiB0aGVyZSBpcyBubyBpbml0aWFsIHJ1bm5pbmcgdHJhbnNhY3Rp b25zICovCisJaWYgKGxpa2VseShOSW5pdGlhbFJ1bm5pbmdYYWN0cyA9PSAwKSkKKwkJcmV0dXJu OworCisJLyogYm91bmQgY2hlY2sgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHRyYW5zYWN0aW9u IHRvIHJlbW92ZSAqLworCWlmICghTm9ybWFsVHJhbnNhY3Rpb25JZFByZWNlZGVzKEluaXRpYWxS dW5uaW5nWGFjdHNbMF0sCisJCQkJCQkJCQkgYnVpbGRlci0+eG1pbikpCisJCXJldHVybjsKKwor CS8qCisJICogcHVyZ2UgeGlkcyBpbiBJbml0aWFsUnVubmluZ1hhY3RzIGFzIHdlbGwuIFRoZSBw dXJnZWQgYXJyYXkgbXVzdCBhbHNvIGJlCisJICogc29ydGVkIGluIHhpZENvbXBhcmF0b3Igb3Jk ZXIuCisJICovCisJd29ya3NwYWNlID0KKwkJTWVtb3J5Q29udGV4dEFsbG9jKGJ1aWxkZXItPmNv bnRleHQsCisJCQkJCQkgICBOSW5pdGlhbFJ1bm5pbmdYYWN0cyAqIHNpemVvZihUcmFuc2FjdGlv bklkKSk7CisJc3Vydml2aW5nX3hpZHMgPSAwOworCWZvciAob2ZmID0gMDsgb2ZmIDwgTkluaXRp YWxSdW5uaW5nWGFjdHM7IG9mZisrKQorCXsKKwkJaWYgKE5vcm1hbFRyYW5zYWN0aW9uSWRQcmVj ZWRlcyhJbml0aWFsUnVubmluZ1hhY3RzW29mZl0sCisJCQkJCQkJCQkJYnVpbGRlci0+eG1pbikp CisJCQk7CQkJCQkvKiByZW1vdmUgKi8KKwkJZWxzZQorCQkJd29ya3NwYWNlW3N1cnZpdmluZ194 aWRzKytdID0gSW5pdGlhbFJ1bm5pbmdYYWN0c1tvZmZdOworCX0KKworCWlmIChzdXJ2aXZpbmdf eGlkcyA+IDApCisJCW1lbWNweShJbml0aWFsUnVubmluZ1hhY3RzLCB3b3Jrc3BhY2UsCisJCQkg ICBzaXplb2YoVHJhbnNhY3Rpb25JZCkgKiBzdXJ2aXZpbmdfeGlkcyk7CisJZWxzZQorCXsKKwkJ cGZyZWUoSW5pdGlhbFJ1bm5pbmdYYWN0cyk7CisJCUluaXRpYWxSdW5uaW5nWGFjdHMgPSBOVUxM OworCX0KKworCWVsb2coREVCVUczLCAicHVyZ2VkIGluaXRpYWwgcnVubmluZyB0cmFuc2FjdGlv bnMgZnJvbSAldSB0byAldSwgb2xkZXN0IHJ1bm5pbmcgeGlkICV1IiwKKwkJICh1aW50MzIpIE5J bml0aWFsUnVubmluZ1hhY3RzLAorCQkgKHVpbnQzMikgc3Vydml2aW5nX3hpZHMsCisJCSBidWls ZGVyLT54bWluKTsKKworCU5Jbml0aWFsUnVubmluZ1hhY3RzID0gc3Vydml2aW5nX3hpZHM7CisJ cGZyZWUod29ya3NwYWNlKTsKIH0KIAogLyoKQEAgLTExMTMsNiArMTE5MSwyMSBAQCBTbmFwQnVp bGRQcm9jZXNzUnVubmluZ1hhY3RzKFNuYXBCdWlsZCAqYnVpbGRlciwgWExvZ1JlY1B0ciBsc24s IHhsX3J1bm5pbmdfeGFjdAogCSAqLwogCWlmIChidWlsZGVyLT5zdGF0ZSA8IFNOQVBCVUlMRF9D T05TSVNURU5UKQogCXsKKwkJLyoKKwkJICogUmVtZW1iZXIgdGhlIHRyYW5zYWN0aW9ucyBhbmQg c3VidHJhbnNhY3Rpb25zIHRoYXQgd2VyZSBydW5uaW5nCisJCSAqIHdoZW4geGxfcnVubmluZ194 YWN0cyByZWNvcmQgdGhhdCB3ZSBkZWNvZGVkIGZpcnN0IHdhcyB3cml0dGVuLgorCQkgKi8KKwkJ aWYgKGJ1aWxkZXItPnN0YXRlID09IFNOQVBCVUlMRF9TVEFSVCkKKwkJeworCQkJaW50CQkJbnhh Y3RzID0gcnVubmluZy0+c3VieGNudCArIHJ1bm5pbmctPnhjbnQ7CisJCQlTaXplCQlzeiA9IHNp emVvZihUcmFuc2FjdGlvbklkKSAqIG54YWN0czsKKworCQkJTkluaXRpYWxSdW5uaW5nWGFjdHMg PSBueGFjdHM7CisJCQlJbml0aWFsUnVubmluZ1hhY3RzID0gTWVtb3J5Q29udGV4dEFsbG9jKGJ1 aWxkZXItPmNvbnRleHQsIHN6KTsKKwkJCW1lbWNweShJbml0aWFsUnVubmluZ1hhY3RzLCBydW5u aW5nLT54aWRzLCBzeik7CisJCQlxc29ydChJbml0aWFsUnVubmluZ1hhY3RzLCBueGFjdHMsIHNp emVvZihUcmFuc2FjdGlvbklkKSwgeGlkQ29tcGFyYXRvcik7CisJCX0KKwogCQkvKiByZXR1cm5z IGZhbHNlIGlmIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gcGVyZm9ybWluZyBjbGVhbnVwIGp1c3QgeWV0 ICovCiAJCWlmICghU25hcEJ1aWxkRmluZFNuYXBzaG90KGJ1aWxkZXIsIGxzbiwgcnVubmluZykp CiAJCQlyZXR1cm47CkBAIC0xMTM1LDcgKzEyMjgsNyBAQCBTbmFwQnVpbGRQcm9jZXNzUnVubmlu Z1hhY3RzKFNuYXBCdWlsZCAqYnVpbGRlciwgWExvZ1JlY1B0ciBsc24sIHhsX3J1bm5pbmdfeGFj dAogCWJ1aWxkZXItPnhtaW4gPSBydW5uaW5nLT5vbGRlc3RSdW5uaW5nWGlkOwogCiAJLyogUmVt b3ZlIHRyYW5zYWN0aW9ucyB3ZSBkb24ndCBuZWVkIHRvIGtlZXAgdHJhY2sgb2ZmIGFueW1vcmUg Ki8KLQlTbmFwQnVpbGRQdXJnZUNvbW1pdHRlZFR4bihidWlsZGVyKTsKKwlTbmFwQnVpbGRQdXJn ZU9sZGVyVHhuKGJ1aWxkZXIpOwogCiAJLyoKIAkgKiBBZHZhbmNlIHRoZSB4bWluIGxpbWl0IGZv ciB0aGUgY3VycmVudCByZXBsaWNhdGlvbiBzbG90LCB0byBhbGxvdwpAQCAtMjAwMCwzICsyMDkz LDM5IEBAIENoZWNrUG9pbnRTbmFwQnVpbGQodm9pZCkKIAl9CiAJRnJlZURpcihzbmFwX2Rpcik7 CiB9CisKKy8qCisgKiBJZiB0aGUgZ2l2ZW4geGlkIGlzIGluIHRoZSBsaXN0IG9mIHRoZSBpbml0 aWFsIHJ1bm5pbmcgeGFjdHMsIHdlIG1hcmsgdGhlCisgKiB0cmFuc2FjdGlvbiBhbmQgaXRzIHN1 YnRyYW5zYWN0aW9ucyBhcyBjb250YWluaW5nIGNhdGFsb2cgY2hhbmdlcy4gU2VlCisgKiBjb21t ZW50cworICovCit2b2lkCitTbmFwQnVpbGRYaWRTZXRDYXRhbG9nQ2hhbmdlcyhTbmFwQnVpbGQg KmJ1aWxkZXIsIFRyYW5zYWN0aW9uSWQgeGlkLCBpbnQgc3VieGNudCwKKwkJCQkJCQkgIFRyYW5z YWN0aW9uSWQgKnN1YnhhY3RzLCBYTG9nUmVjUHRyIGxzbikKK3sKKwkvKgorCSAqIFNraXAgaWYg dGhlcmUgaXMgbm8gaW5pdGlhbCBydW5uaW5nIHhhY3RzIGluZm9ybWF0aW9uIG9yIHRoZQorCSAq IHRyYW5zYWN0aW9uIGlzIGFscmVhZHkgbWFya2VkIGFzIGNvbnRhaW5pbmcgY2F0YWxvZyBjaGFu Z2VzLgorCSAqLworCWlmIChsaWtlbHkoKE5Jbml0aWFsUnVubmluZ1hhY3RzID09IDApIHx8CisJ CQkgICBSZW9yZGVyQnVmZmVyWGlkSGFzQ2F0YWxvZ0NoYW5nZXMoYnVpbGRlci0+cmVvcmRlciwg eGlkKSkpCisJCXJldHVybjsKKworCS8qCisJICogSWYgdGhpcyBjb21taXR0ZWQgdHJhbnNhY3Rp b24gaXMgdGhlIG9uZSB0aGF0IHdhcyBydW5uaW5nIGF0IHRoZSB0aW1lCisJICogd2hlbiBkZWNv ZGluZyB0aGUgZmlyc3QgUlVOTklOR19YQUNUUyByZWNvcmQgYW5kIGhhdmUgZG9uZSBjYXRhbG9n CisJICogY2hhbmdlcywgd2UgY2FuIG1hcmsgYm90aCB0aGUgdG9wIHRyYW5zYWN0aW9uIGFuZCBp dHMgc3VidHJhbnNhY3Rpb25zCisJICogYXMgY29udGFpbmluZyBjYXRhbG9nIGNoYW5nZXMuCisJ ICovCisJaWYgKGJzZWFyY2goJnhpZCwgSW5pdGlhbFJ1bm5pbmdYYWN0cywgTkluaXRpYWxSdW5u aW5nWGFjdHMsCisJCQkJc2l6ZW9mKFRyYW5zYWN0aW9uSWQpLCB4aWRDb21wYXJhdG9yKSAhPSBO VUxMKQorCXsKKwkJUmVvcmRlckJ1ZmZlclhpZFNldENhdGFsb2dDaGFuZ2VzKGJ1aWxkZXItPnJl b3JkZXIsIHhpZCwgbHNuKTsKKworCQlmb3IgKGludCBpID0gMDsgaSA8IHN1YnhjbnQ7IGkrKykK KwkJeworCQkJUmVvcmRlckJ1ZmZlckFzc2lnbkNoaWxkKGJ1aWxkZXItPnJlb3JkZXIsIHhpZCwg c3VieGFjdHNbaV0sIGxzbik7CisJCQlSZW9yZGVyQnVmZmVyWGlkU2V0Q2F0YWxvZ0NoYW5nZXMo YnVpbGRlci0+cmVvcmRlciwgc3VieGFjdHNbaV0sIGxzbik7CisJCX0KKwl9Cit9CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbmFwYnVpbGQuaCBiL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL3NuYXBidWlsZC5oCmluZGV4IGQxNzkyNTFhYWQuLjUzZDgzZjM0OGEgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3NuYXBidWlsZC5oCisrKyBiL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL3NuYXBidWlsZC5oCkBAIC05MSw0ICs5MSw3IEBAIGV4dGVybiB2b2lk IFNuYXBCdWlsZFByb2Nlc3NSdW5uaW5nWGFjdHMoU25hcEJ1aWxkICpidWlsZGVyLCBYTG9nUmVj UHRyIGxzbiwKIAkJCQkJCQkJCQkgc3RydWN0IHhsX3J1bm5pbmdfeGFjdHMgKnJ1bm5pbmcpOwog ZXh0ZXJuIHZvaWQgU25hcEJ1aWxkU2VyaWFsaXphdGlvblBvaW50KFNuYXBCdWlsZCAqYnVpbGRl ciwgWExvZ1JlY1B0ciBsc24pOwogCitleHRlcm4gdm9pZCBTbmFwQnVpbGRYaWRTZXRDYXRhbG9n Q2hhbmdlcyhTbmFwQnVpbGQgKmJ1aWxkZXIsIFRyYW5zYWN0aW9uSWQgeGlkLAorCQkJCQkJCQkJ CSAgaW50IHN1YnhjbnQsIFRyYW5zYWN0aW9uSWQgKnN1YnhhY3RzLAorCQkJCQkJCQkJCSAgWExv Z1JlY1B0ciBsc24pOwogI2VuZGlmCQkJCQkJCS8qIFNOQVBCVUlMRF9IICovCi0tIAoyLjI0LjMg KEFwcGxlIEdpdC0xMjgpCgo= --000000000000e8872705e49ad719--