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 1nIVWR-0003lC-It for pgsql-hackers@arkaria.postgresql.org; Fri, 11 Feb 2022 12:59:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nIVWQ-0005ga-EX for pgsql-hackers@arkaria.postgresql.org; Fri, 11 Feb 2022 12:59:34 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nIVWP-0005gR-N6 for pgsql-hackers@lists.postgresql.org; Fri, 11 Feb 2022 12:59:34 +0000 Received: from mail-ej1-x62d.google.com ([2a00:1450:4864:20::62d]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nIVWM-0005Ms-T5 for pgsql-hackers@lists.postgresql.org; Fri, 11 Feb 2022 12:59:32 +0000 Received: by mail-ej1-x62d.google.com with SMTP id k25so22754693ejp.5 for ; Fri, 11 Feb 2022 04:59:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=nnnB/u3/VGGSAy35QtLfNQGa6Z9ThAu37Cq9U41cyxM=; b=f3ETg5/j5EG/0Ftk4Y6XXI4sQY7c2rAnI2Lh6fSU22VEXf7a1WZeqQSmigPjYqCdnU Iq9AY8dWsrM503y4kzNYRi9hU2WAjtwH68X3IXfsEh2QZQUJIFr/nfPqLNnVxe26RDov TNOB8ZZ3np6sTZyiOOk+KW6n7Eg2SwG9trF3Gyn1+eymZ6Xx32NvDaW80K6uzzGJMYwD ywO7EVbDG0amCJQqaZOZAVpuF6oSnnb0E61ybp09QS7ubikFwOqzv2lXP6Rbb46F6O6O DEfl+iANhiCFbb00tTHLcQ/g7UW6aiBpqFNPFVBPafX/GFbEo04Ds0KPSPG7d6dJBXzU HQMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=nnnB/u3/VGGSAy35QtLfNQGa6Z9ThAu37Cq9U41cyxM=; b=vDepeeNpp4IIaaYRKcuu3iuGPY9Kf2+XgX597h+YyIl/3muinQsrgeiZ+etpiQXF9u ZtcHUK13yk4+WB+M3HGBFBYrUYIceIcV2eZ5Iw1nRwlECqyskx8RMjfJ33Pb7DZatJX9 j8DPXV/N6nhOTJ4iYVCX9ZrS9pKLAy7xBEPL2fv248atQuVskQdZZBoFA4Ql8pd2L75D QiSo7f5k3jIP2IqWT8dMuQ/K27AkE7hFz+xnF3C7wNGPlW0fISYYPdkWaMy4dyCDZ4EE /Vw/eOsAr7dO8qwVn6/KU2MsyqTjlr1US4+Q/WdjdPXgxB9ew4Ohe/POu+1adb4iEWGc 7xTw== X-Gm-Message-State: AOAM530A6ItTCND7iBJ8Yu2p47aOcird8KUA6+zSK1WbjcQdaxZ8Jljv IGMrhPUCDO8soHI9dvB+3qRlbY1YHckiw5L4jSZFm/xlP2BDWA== X-Google-Smtp-Source: ABdhPJwNCNfERAWf2uBWzjxUYeVoGW36VR1LOtzVn35lNl7yAXnzK9RxuIJcSTfeKaJ7/gt4LsR/xYTKTaysoRMruGQ= X-Received: by 2002:a17:907:7d9e:: with SMTP id oz30mr1346144ejc.142.1644584368826; Fri, 11 Feb 2022 04:59:28 -0800 (PST) MIME-Version: 1.0 References: <65af8fb4-4c45-9cc3-c6ec-80f3ac488e07@oss.nttdata.com> <95066202-c7e6-e4be-05cc-bdceb45b68c7@oss.nttdata.com> <2d7c480a-63c8-a244-0f2a-361e5097764f@oss.nttdata.com> <3e57ebd7-b536-333e-c877-49a3ebb57079@oss.nttdata.com> In-Reply-To: <3e57ebd7-b536-333e-c877-49a3ebb57079@oss.nttdata.com> From: Etsuro Fujita Date: Fri, 11 Feb 2022 21:59:18 +0900 Message-ID: Subject: Re: postgres_fdw: commit remote (sub)transactions in parallel during pre-commit To: Fujii Masao Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000001bb8e105d7bda3bc" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000001bb8e105d7bda3bc Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Feb 8, 2022 at 3:49 AM Fujii Masao wr= ote: > Here are the review comments for 0001 patch. > > I got the following compiler warning. > > [16:58:07.120] connection.c: In function =E2=80=98pgfdw_finish_pre_commit= _cleanup=E2=80=99: > [16:58:07.120] connection.c:1726:4: error: ISO C90 forbids mixed declarat= ions and code [-Werror=3Ddeclaration-after-statement] > [16:58:07.120] 1726 | PGresult *res; > [16:58:07.120] | ^~~~~~~~ Sorry, I didn=E2=80=99t notice this, because my compiler doesn=E2=80=99t pr= oduce it. I tried to fix it. Attached is an updated version of the patch set. I hope this works for you. > + /* Ignore errors in the DEALLOCATE (see note abov= e) */ > + if ((res =3D PQgetResult(entry->conn)) !=3D NULL) > > Doesn't PQgetResult() need to be called repeatedly until it returns NULL = or the connection is lost because there can be more than one messages to re= ceive? Yeah, we would receive a single message here, but PQgetResult must be called repeatedly until it returns NULL (see the documentation note about it in libpq.sgml); else the PQtransactionStatus of the connection would remain PQTRANS_ACTIVE, causing the connection to be closed at transaction end, because we do this in pgfdw_reset_xact_state called from pgfdw_xact_callback: /* * If the connection isn't in a good idle state, it is marked as * invalid or keep_connections option of its server is disabled, th= en * discard it to recover. Next GetConnection will open a new * connection. */ if (PQstatus(entry->conn) !=3D CONNECTION_OK || PQtransactionStatus(entry->conn) !=3D PQTRANS_IDLE || entry->changing_xact_state || entry->invalidated || !entry->keep_connections) { elog(DEBUG3, "discarding connection %p", entry->conn); disconnect_pg_server(entry); } But I noticed a brown-paper-bag bug in the bit you showed above: the if test should be modified as a while loop. :-( I fixed this in the attached. > + if (pending_deallocs) > + { > + foreach(lc, pending_deallocs) > > If pending_deallocs is NIL, we don't enter this foreach loop. So probably= "if (pending_deallocs)" seems not necessary. Yeah, I think we could omit the if test, but I added it to match other places (see e.g., foreign_grouping_ok() in postgres_fdw.c). It looks cleaner to me to have it before the loop. > entry->keep_connections =3D defGetBoolean(def); > + if (strcmp(def->defname, "parallel_commit") =3D=3D 0) > + entry->parallel_commit =3D defGetBoolean(def); > > Isn't it better to use "else if" here, instead? Yeah, that would be better. Done. > +static void do_sql_command_begin(PGconn *conn, const char *sql); > +static void do_sql_command_end(PGconn *conn, const char *sql); > > To simplify the code more, I'm tempted to change do_sql_command() so that= it just calls the above two functions, instead of calling PQsendQuery() an= d pgfw_get_result() directly. Thought? If we do this, probably we also need= to change do_sql_command_end() so that it accepts boolean flag which speci= fies whether PQconsumeInput() is called or not, as follows. Done. Actually, I was planning to do this for consistency with a similar refactoring for pgfdw_cancel_query and pgfdw_exec_cleanup_query that had been done in the parallel-abort patch. I tweaked comments/docs a little bit as well. Thanks for reviewing! Best regards, Etsuro Fujita --0000000000001bb8e105d7bda3bc Content-Type: application/octet-stream; name="v4-0001-postgres-fdw-Add-support-for-parallel-commit.patch" Content-Disposition: attachment; filename="v4-0001-postgres-fdw-Add-support-for-parallel-commit.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kziezteo0 ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2Nvbm5lY3Rpb24uYyBiL2NvbnRyaWIv cG9zdGdyZXNfZmR3L2Nvbm5lY3Rpb24uYwppbmRleCAyOWZjYjZhNzZlLi4zZjRlNzFkYTllIDEw MDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9jb25uZWN0aW9uLmMKKysrIGIvY29udHJp Yi9wb3N0Z3Jlc19mZHcvY29ubmVjdGlvbi5jCkBAIC01OCw2ICs1OCw3IEBAIHR5cGVkZWYgc3Ry dWN0IENvbm5DYWNoZUVudHJ5CiAJYm9vbAkJaGF2ZV9wcmVwX3N0bXQ7IC8qIGhhdmUgd2UgcHJl cGFyZWQgYW55IHN0bXRzIGluIHRoaXMgeGFjdD8gKi8KIAlib29sCQloYXZlX2Vycm9yOwkJLyog aGF2ZSBhbnkgc3VieGFjdHMgYWJvcnRlZCBpbiB0aGlzIHhhY3Q/ICovCiAJYm9vbAkJY2hhbmdp bmdfeGFjdF9zdGF0ZTsJLyogeGFjdCBzdGF0ZSBjaGFuZ2UgaW4gcHJvY2VzcyAqLworCWJvb2wJ CXBhcmFsbGVsX2NvbW1pdDsJLyogZG8gd2UgY29tbWl0IChzdWIpeGFjdHMgaW4gcGFyYWxsZWw/ ICovCiAJYm9vbAkJaW52YWxpZGF0ZWQ7CS8qIHRydWUgaWYgcmVjb25uZWN0IGlzIHBlbmRpbmcg Ki8KIAlib29sCQlrZWVwX2Nvbm5lY3Rpb25zOwkvKiBzZXR0aW5nIHZhbHVlIG9mIGtlZXBfY29u bmVjdGlvbnMKIAkJCQkJCQkJCSAqIHNlcnZlciBvcHRpb24gKi8KQEAgLTkyLDYgKzkzLDkgQEAg c3RhdGljIFBHY29ubiAqY29ubmVjdF9wZ19zZXJ2ZXIoRm9yZWlnblNlcnZlciAqc2VydmVyLCBV c2VyTWFwcGluZyAqdXNlcik7CiBzdGF0aWMgdm9pZCBkaXNjb25uZWN0X3BnX3NlcnZlcihDb25u Q2FjaGVFbnRyeSAqZW50cnkpOwogc3RhdGljIHZvaWQgY2hlY2tfY29ubl9wYXJhbXMoY29uc3Qg Y2hhciAqKmtleXdvcmRzLCBjb25zdCBjaGFyICoqdmFsdWVzLCBVc2VyTWFwcGluZyAqdXNlcik7 CiBzdGF0aWMgdm9pZCBjb25maWd1cmVfcmVtb3RlX3Nlc3Npb24oUEdjb25uICpjb25uKTsKK3N0 YXRpYyB2b2lkIGRvX3NxbF9jb21tYW5kX2JlZ2luKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAq c3FsKTsKK3N0YXRpYyB2b2lkIGRvX3NxbF9jb21tYW5kX2VuZChQR2Nvbm4gKmNvbm4sIGNvbnN0 IGNoYXIgKnNxbCwKKwkJCQkJCQkgICBib29sIGNvbnN1bWVfaW5wdXQpOwogc3RhdGljIHZvaWQg YmVnaW5fcmVtb3RlX3hhY3QoQ29ubkNhY2hlRW50cnkgKmVudHJ5KTsKIHN0YXRpYyB2b2lkIHBn ZmR3X3hhY3RfY2FsbGJhY2soWGFjdEV2ZW50IGV2ZW50LCB2b2lkICphcmcpOwogc3RhdGljIHZv aWQgcGdmZHdfc3VieGFjdF9jYWxsYmFjayhTdWJYYWN0RXZlbnQgZXZlbnQsCkBAIC0xMDAsNiAr MTA0LDcgQEAgc3RhdGljIHZvaWQgcGdmZHdfc3VieGFjdF9jYWxsYmFjayhTdWJYYWN0RXZlbnQg ZXZlbnQsCiAJCQkJCQkJCSAgIHZvaWQgKmFyZyk7CiBzdGF0aWMgdm9pZCBwZ2Zkd19pbnZhbF9j YWxsYmFjayhEYXR1bSBhcmcsIGludCBjYWNoZWlkLCB1aW50MzIgaGFzaHZhbHVlKTsKIHN0YXRp YyB2b2lkIHBnZmR3X3JlamVjdF9pbmNvbXBsZXRlX3hhY3Rfc3RhdGVfY2hhbmdlKENvbm5DYWNo ZUVudHJ5ICplbnRyeSk7CitzdGF0aWMgdm9pZCBwZ2Zkd19yZXNldF94YWN0X3N0YXRlKENvbm5D YWNoZUVudHJ5ICplbnRyeSwgYm9vbCB0b3BsZXZlbCk7CiBzdGF0aWMgYm9vbCBwZ2Zkd19jYW5j ZWxfcXVlcnkoUEdjb25uICpjb25uKTsKIHN0YXRpYyBib29sIHBnZmR3X2V4ZWNfY2xlYW51cF9x dWVyeShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5LAogCQkJCQkJCQkJIGJvb2wgaWdu b3JlX2Vycm9ycyk7CkBAIC0xMDcsNiArMTEyLDggQEAgc3RhdGljIGJvb2wgcGdmZHdfZ2V0X2Ns ZWFudXBfcmVzdWx0KFBHY29ubiAqY29ubiwgVGltZXN0YW1wVHogZW5kdGltZSwKIAkJCQkJCQkJ CSBQR3Jlc3VsdCAqKnJlc3VsdCwgYm9vbCAqdGltZWRfb3V0KTsKIHN0YXRpYyB2b2lkIHBnZmR3 X2Fib3J0X2NsZWFudXAoQ29ubkNhY2hlRW50cnkgKmVudHJ5LCBjb25zdCBjaGFyICpzcWwsCiAJ CQkJCQkJCWJvb2wgdG9wbGV2ZWwpOworc3RhdGljIHZvaWQgcGdmZHdfZmluaXNoX3ByZV9jb21t aXRfY2xlYW51cChMaXN0ICpwZW5kaW5nX2VudHJpZXMpOworc3RhdGljIHZvaWQgcGdmZHdfZmlu aXNoX3ByZV9zdWJjb21taXRfY2xlYW51cChMaXN0ICpwZW5kaW5nX2VudHJpZXMpOwogc3RhdGlj IGJvb2wgVXNlck1hcHBpbmdQYXNzd29yZFJlcXVpcmVkKFVzZXJNYXBwaW5nICp1c2VyKTsKIHN0 YXRpYyBib29sIGRpc2Nvbm5lY3RfY2FjaGVkX2Nvbm5lY3Rpb25zKE9pZCBzZXJ2ZXJpZCk7CiAK QEAgLTMxNiwxNCArMzIzLDIwIEBAIG1ha2VfbmV3X2Nvbm5lY3Rpb24oQ29ubkNhY2hlRW50cnkg KmVudHJ5LCBVc2VyTWFwcGluZyAqdXNlcikKIAkgKiBpcyBjaGFuZ2VkIHdpbGwgYmUgY2xvc2Vk IGFuZCByZS1tYWRlIGxhdGVyLgogCSAqCiAJICogQnkgZGVmYXVsdCwgYWxsIHRoZSBjb25uZWN0 aW9ucyB0byBhbnkgZm9yZWlnbiBzZXJ2ZXJzIGFyZSBrZXB0IG9wZW4uCisJICoKKwkgKiBBbHNv IGRldGVybWluZSB0byBjb21taXQgKHN1Yil0cmFuc2FjdGlvbnMgb3BlbmVkIG9uIHRoZSByZW1v dGUgc2VydmVyCisJICogaW4gcGFyYWxsZWwgYXQgKHN1Yil0cmFuc2FjdGlvbiBlbmQuCiAJICov CiAJZW50cnktPmtlZXBfY29ubmVjdGlvbnMgPSB0cnVlOworCWVudHJ5LT5wYXJhbGxlbF9jb21t aXQgPSBmYWxzZTsKIAlmb3JlYWNoKGxjLCBzZXJ2ZXItPm9wdGlvbnMpCiAJewogCQlEZWZFbGVt ICAgICpkZWYgPSAoRGVmRWxlbSAqKSBsZmlyc3QobGMpOwogCiAJCWlmIChzdHJjbXAoZGVmLT5k ZWZuYW1lLCAia2VlcF9jb25uZWN0aW9ucyIpID09IDApCiAJCQllbnRyeS0+a2VlcF9jb25uZWN0 aW9ucyA9IGRlZkdldEJvb2xlYW4oZGVmKTsKKwkJZWxzZSBpZiAoc3RyY21wKGRlZi0+ZGVmbmFt ZSwgInBhcmFsbGVsX2NvbW1pdCIpID09IDApCisJCQllbnRyeS0+cGFyYWxsZWxfY29tbWl0ID0g ZGVmR2V0Qm9vbGVhbihkZWYpOwogCX0KIAogCS8qIE5vdyB0cnkgdG8gbWFrZSB0aGUgY29ubmVj dGlvbiAqLwpAQCAtNjIzLDEwICs2MzYsMzAgQEAgY29uZmlndXJlX3JlbW90ZV9zZXNzaW9uKFBH Y29ubiAqY29ubikKIHZvaWQKIGRvX3NxbF9jb21tYW5kKFBHY29ubiAqY29ubiwgY29uc3QgY2hh ciAqc3FsKQogewotCVBHcmVzdWx0ICAgKnJlczsKKwlkb19zcWxfY29tbWFuZF9iZWdpbihjb25u LCBzcWwpOworCWRvX3NxbF9jb21tYW5kX2VuZChjb25uLCBzcWwsIGZhbHNlKTsKK30KIAorc3Rh dGljIHZvaWQKK2RvX3NxbF9jb21tYW5kX2JlZ2luKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAq c3FsKQorewogCWlmICghUFFzZW5kUXVlcnkoY29ubiwgc3FsKSkKIAkJcGdmZHdfcmVwb3J0X2Vy cm9yKEVSUk9SLCBOVUxMLCBjb25uLCBmYWxzZSwgc3FsKTsKK30KKworc3RhdGljIHZvaWQKK2Rv X3NxbF9jb21tYW5kX2VuZChQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnNxbCwgYm9vbCBjb25z dW1lX2lucHV0KQoreworCVBHcmVzdWx0ICAgKnJlczsKKworCS8qCisJICogQ29uc3VtZSB3aGF0 ZXZlciBkYXRhIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBzb2NrZXQgaWYgcmVxdWVzdGVkLiAgTm90 ZQorCSAqIHRoYXQgaWYgYWxsIGRhdGEgaXMgYXZhaWxhYmxlLCB0aGlzIGFsbG93cyB1cyB0byBj YWxsIFBRZ2V0UmVzdWx0CisJICogd2l0aG91dCBmb3JjaW5nIHRoZSBvdmVyaGVhZCBvZiBXYWl0 TGF0Y2hPclNvY2tldCBpbiBwZ2Zkd19nZXRfcmVzdWx0LAorCSAqIHdoaWNoIHdvdWxkIGJlIHZl cnkgbGFyZ2UgY29tcGFyZWQgdG8gdGhlIG92ZXJoZWFkIG9mIFBRY29uc3VtZUlucHV0LgorCSAq LworCWlmIChjb25zdW1lX2lucHV0ICYmICFQUWNvbnN1bWVJbnB1dChjb25uKSkKKwkJcGdmZHdf cmVwb3J0X2Vycm9yKEVSUk9SLCBOVUxMLCBjb25uLCBmYWxzZSwgc3FsKTsKIAlyZXMgPSBwZ2Zk d19nZXRfcmVzdWx0KGNvbm4sIHNxbCk7CiAJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdS RVNfQ09NTUFORF9PSykKIAkJcGdmZHdfcmVwb3J0X2Vycm9yKEVSUk9SLCByZXMsIGNvbm4sIHRy dWUsIHNxbCk7CkBAIC04ODgsNiArOTIxLDcgQEAgcGdmZHdfeGFjdF9jYWxsYmFjayhYYWN0RXZl bnQgZXZlbnQsIHZvaWQgKmFyZykKIHsKIAlIQVNIX1NFUV9TVEFUVVMgc2NhbjsKIAlDb25uQ2Fj aGVFbnRyeSAqZW50cnk7CisJTGlzdAkgICAqcGVuZGluZ19lbnRyaWVzID0gTklMOwogCiAJLyog UXVpY2sgZXhpdCBpZiBubyBjb25uZWN0aW9ucyB3ZXJlIHRvdWNoZWQgaW4gdGhpcyB0cmFuc2Fj dGlvbi4gKi8KIAlpZiAoIXhhY3RfZ290X2Nvbm5lY3Rpb24pCkBAIC05MjUsNiArOTU5LDEyIEBA IHBnZmR3X3hhY3RfY2FsbGJhY2soWGFjdEV2ZW50IGV2ZW50LCB2b2lkICphcmcpCiAKIAkJCQkJ LyogQ29tbWl0IGFsbCByZW1vdGUgdHJhbnNhY3Rpb25zIGR1cmluZyBwcmUtY29tbWl0ICovCiAJ CQkJCWVudHJ5LT5jaGFuZ2luZ194YWN0X3N0YXRlID0gdHJ1ZTsKKwkJCQkJaWYgKGVudHJ5LT5w YXJhbGxlbF9jb21taXQpCisJCQkJCXsKKwkJCQkJCWRvX3NxbF9jb21tYW5kX2JlZ2luKGVudHJ5 LT5jb25uLCAiQ09NTUlUIFRSQU5TQUNUSU9OIik7CisJCQkJCQlwZW5kaW5nX2VudHJpZXMgPSBs YXBwZW5kKHBlbmRpbmdfZW50cmllcywgZW50cnkpOworCQkJCQkJY29udGludWU7CisJCQkJCX0K IAkJCQkJZG9fc3FsX2NvbW1hbmQoZW50cnktPmNvbm4sICJDT01NSVQgVFJBTlNBQ1RJT04iKTsK IAkJCQkJZW50cnktPmNoYW5naW5nX3hhY3Rfc3RhdGUgPSBmYWxzZTsKIApAQCAtOTgxLDIzICsx MDIxLDE1IEBAIHBnZmR3X3hhY3RfY2FsbGJhY2soWGFjdEV2ZW50IGV2ZW50LCB2b2lkICphcmcp CiAJCX0KIAogCQkvKiBSZXNldCBzdGF0ZSB0byBzaG93IHdlJ3JlIG91dCBvZiBhIHRyYW5zYWN0 aW9uICovCi0JCWVudHJ5LT54YWN0X2RlcHRoID0gMDsKKwkJcGdmZHdfcmVzZXRfeGFjdF9zdGF0 ZShlbnRyeSwgdHJ1ZSk7CisJfQogCi0JCS8qCi0JCSAqIElmIHRoZSBjb25uZWN0aW9uIGlzbid0 IGluIGEgZ29vZCBpZGxlIHN0YXRlLCBpdCBpcyBtYXJrZWQgYXMKLQkJICogaW52YWxpZCBvciBr ZWVwX2Nvbm5lY3Rpb25zIG9wdGlvbiBvZiBpdHMgc2VydmVyIGlzIGRpc2FibGVkLCB0aGVuCi0J CSAqIGRpc2NhcmQgaXQgdG8gcmVjb3Zlci4gTmV4dCBHZXRDb25uZWN0aW9uIHdpbGwgb3BlbiBh IG5ldwotCQkgKiBjb25uZWN0aW9uLgotCQkgKi8KLQkJaWYgKFBRc3RhdHVzKGVudHJ5LT5jb25u KSAhPSBDT05ORUNUSU9OX09LIHx8Ci0JCQlQUXRyYW5zYWN0aW9uU3RhdHVzKGVudHJ5LT5jb25u KSAhPSBQUVRSQU5TX0lETEUgfHwKLQkJCWVudHJ5LT5jaGFuZ2luZ194YWN0X3N0YXRlIHx8Ci0J CQllbnRyeS0+aW52YWxpZGF0ZWQgfHwKLQkJCSFlbnRyeS0+a2VlcF9jb25uZWN0aW9ucykKLQkJ ewotCQkJZWxvZyhERUJVRzMsICJkaXNjYXJkaW5nIGNvbm5lY3Rpb24gJXAiLCBlbnRyeS0+Y29u bik7Ci0JCQlkaXNjb25uZWN0X3BnX3NlcnZlcihlbnRyeSk7Ci0JCX0KKwkvKiBJZiB0aGVyZSBh cmUgYW55IHBlbmRpbmcgY29ubmVjdGlvbnMsIGZpbmlzaCBjbGVhbmluZyB0aGVtIHVwICovCisJ aWYgKHBlbmRpbmdfZW50cmllcykKKwl7CisJCUFzc2VydChldmVudCA9PSBYQUNUX0VWRU5UX1BB UkFMTEVMX1BSRV9DT01NSVQgfHwKKwkJCSAgIGV2ZW50ID09IFhBQ1RfRVZFTlRfUFJFX0NPTU1J VCk7CisJCXBnZmR3X2ZpbmlzaF9wcmVfY29tbWl0X2NsZWFudXAocGVuZGluZ19lbnRyaWVzKTsK IAl9CiAKIAkvKgpAQCAtMTAyMSw2ICsxMDUzLDcgQEAgcGdmZHdfc3VieGFjdF9jYWxsYmFjayhT dWJYYWN0RXZlbnQgZXZlbnQsIFN1YlRyYW5zYWN0aW9uSWQgbXlTdWJpZCwKIAlIQVNIX1NFUV9T VEFUVVMgc2NhbjsKIAlDb25uQ2FjaGVFbnRyeSAqZW50cnk7CiAJaW50CQkJY3VybGV2ZWw7CisJ TGlzdAkgICAqcGVuZGluZ19lbnRyaWVzID0gTklMOwogCiAJLyogTm90aGluZyB0byBkbyBhdCBz dWJ4YWN0IHN0YXJ0LCBub3IgYWZ0ZXIgY29tbWl0LiAqLwogCWlmICghKGV2ZW50ID09IFNVQlhB Q1RfRVZFTlRfUFJFX0NPTU1JVF9TVUIgfHwKQEAgLTEwNjMsNiArMTA5NiwxMiBAQCBwZ2Zkd19z dWJ4YWN0X2NhbGxiYWNrKFN1YlhhY3RFdmVudCBldmVudCwgU3ViVHJhbnNhY3Rpb25JZCBteVN1 YmlkLAogCQkJLyogQ29tbWl0IGFsbCByZW1vdGUgc3VidHJhbnNhY3Rpb25zIGR1cmluZyBwcmUt Y29tbWl0ICovCiAJCQlzbnByaW50ZihzcWwsIHNpemVvZihzcWwpLCAiUkVMRUFTRSBTQVZFUE9J TlQgcyVkIiwgY3VybGV2ZWwpOwogCQkJZW50cnktPmNoYW5naW5nX3hhY3Rfc3RhdGUgPSB0cnVl OworCQkJaWYgKGVudHJ5LT5wYXJhbGxlbF9jb21taXQpCisJCQl7CisJCQkJZG9fc3FsX2NvbW1h bmRfYmVnaW4oZW50cnktPmNvbm4sIHNxbCk7CisJCQkJcGVuZGluZ19lbnRyaWVzID0gbGFwcGVu ZChwZW5kaW5nX2VudHJpZXMsIGVudHJ5KTsKKwkJCQljb250aW51ZTsKKwkJCX0KIAkJCWRvX3Nx bF9jb21tYW5kKGVudHJ5LT5jb25uLCBzcWwpOwogCQkJZW50cnktPmNoYW5naW5nX3hhY3Rfc3Rh dGUgPSBmYWxzZTsKIAkJfQpAQCAtMTA3Niw3ICsxMTE1LDE0IEBAIHBnZmR3X3N1YnhhY3RfY2Fs bGJhY2soU3ViWGFjdEV2ZW50IGV2ZW50LCBTdWJUcmFuc2FjdGlvbklkIG15U3ViaWQsCiAJCX0K IAogCQkvKiBPSywgd2UncmUgb3V0dGEgdGhhdCBsZXZlbCBvZiBzdWJ0cmFuc2FjdGlvbiAqLwot CQllbnRyeS0+eGFjdF9kZXB0aC0tOworCQlwZ2Zkd19yZXNldF94YWN0X3N0YXRlKGVudHJ5LCBm YWxzZSk7CisJfQorCisJLyogSWYgdGhlcmUgYXJlIGFueSBwZW5kaW5nIGNvbm5lY3Rpb25zLCBm aW5pc2ggY2xlYW5pbmcgdGhlbSB1cCAqLworCWlmIChwZW5kaW5nX2VudHJpZXMpCisJeworCQlB c3NlcnQoZXZlbnQgPT0gU1VCWEFDVF9FVkVOVF9QUkVfQ09NTUlUX1NVQik7CisJCXBnZmR3X2Zp bmlzaF9wcmVfc3ViY29tbWl0X2NsZWFudXAocGVuZGluZ19lbnRyaWVzKTsKIAl9CiB9CiAKQEAg LTExNjksNiArMTIxNSw0MCBAQCBwZ2Zkd19yZWplY3RfaW5jb21wbGV0ZV94YWN0X3N0YXRlX2No YW5nZShDb25uQ2FjaGVFbnRyeSAqZW50cnkpCiAJCQkJCXNlcnZlci0+c2VydmVybmFtZSkpKTsK IH0KIAorLyoKKyAqIFJlc2V0IHN0YXRlIHRvIHNob3cgd2UncmUgb3V0IG9mIGEgKHN1Yil0cmFu c2FjdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK3BnZmR3X3Jlc2V0X3hhY3Rfc3RhdGUoQ29ubkNh Y2hlRW50cnkgKmVudHJ5LCBib29sIHRvcGxldmVsKQoreworCWlmICh0b3BsZXZlbCkKKwl7CisJ CS8qIFJlc2V0IHN0YXRlIHRvIHNob3cgd2UncmUgb3V0IG9mIGEgdHJhbnNhY3Rpb24gKi8KKwkJ ZW50cnktPnhhY3RfZGVwdGggPSAwOworCisJCS8qCisJCSAqIElmIHRoZSBjb25uZWN0aW9uIGlz bid0IGluIGEgZ29vZCBpZGxlIHN0YXRlLCBpdCBpcyBtYXJrZWQgYXMKKwkJICogaW52YWxpZCBv ciBrZWVwX2Nvbm5lY3Rpb25zIG9wdGlvbiBvZiBpdHMgc2VydmVyIGlzIGRpc2FibGVkLCB0aGVu CisJCSAqIGRpc2NhcmQgaXQgdG8gcmVjb3Zlci4gTmV4dCBHZXRDb25uZWN0aW9uIHdpbGwgb3Bl biBhIG5ldworCQkgKiBjb25uZWN0aW9uLgorCQkgKi8KKwkJaWYgKFBRc3RhdHVzKGVudHJ5LT5j b25uKSAhPSBDT05ORUNUSU9OX09LIHx8CisJCQlQUXRyYW5zYWN0aW9uU3RhdHVzKGVudHJ5LT5j b25uKSAhPSBQUVRSQU5TX0lETEUgfHwKKwkJCWVudHJ5LT5jaGFuZ2luZ194YWN0X3N0YXRlIHx8 CisJCQllbnRyeS0+aW52YWxpZGF0ZWQgfHwKKwkJCSFlbnRyeS0+a2VlcF9jb25uZWN0aW9ucykK KwkJeworCQkJZWxvZyhERUJVRzMsICJkaXNjYXJkaW5nIGNvbm5lY3Rpb24gJXAiLCBlbnRyeS0+ Y29ubik7CisJCQlkaXNjb25uZWN0X3BnX3NlcnZlcihlbnRyeSk7CisJCX0KKwl9CisJZWxzZQor CXsKKwkJLyogUmVzZXQgc3RhdGUgdG8gc2hvdyB3ZSdyZSBvdXQgb2YgYSBzdWJ0cmFuc2FjdGlv biAqLworCQllbnRyeS0+eGFjdF9kZXB0aC0tOworCX0KK30KKwogLyoKICAqIENhbmNlbCB0aGUg Y3VycmVudGx5LWluLXByb2dyZXNzIHF1ZXJ5ICh3aG9zZSBxdWVyeSB0ZXh0IHdlIGRvIG5vdCBo YXZlKQogICogYW5kIGlnbm9yZSB0aGUgcmVzdWx0LiAgUmV0dXJucyB0cnVlIGlmIHdlIHN1Y2Nl c3NmdWxseSBjYW5jZWwgdGhlIHF1ZXJ5CkBAIC0xNDU2LDYgKzE1MzYsMTE2IEBAIHBnZmR3X2Fi b3J0X2NsZWFudXAoQ29ubkNhY2hlRW50cnkgKmVudHJ5LCBjb25zdCBjaGFyICpzcWwsIGJvb2wg dG9wbGV2ZWwpCiAJZW50cnktPmNoYW5naW5nX3hhY3Rfc3RhdGUgPSBmYWxzZTsKIH0KIAorLyoK KyAqIEZpbmlzaCBwcmUtY29tbWl0IGNsZWFudXAgb2YgY29ubmVjdGlvbnMgb24gd2hpY2ggd2Ug aGF2ZSBzZW50IGEgQ09NTUlUCisgKiBjb21tYW5kLgorICovCitzdGF0aWMgdm9pZAorcGdmZHdf ZmluaXNoX3ByZV9jb21taXRfY2xlYW51cChMaXN0ICpwZW5kaW5nX2VudHJpZXMpCit7CisJQ29u bkNhY2hlRW50cnkgKmVudHJ5OworCUxpc3QJICAgKnBlbmRpbmdfZGVhbGxvY3MgPSBOSUw7CisJ TGlzdENlbGwgICAqbGM7CisKKwlBc3NlcnQocGVuZGluZ19lbnRyaWVzKTsKKworCS8qCisJICog R2V0IHRoZSByZXN1bHQgb2YgdGhlIENPTU1JVCBjb21tYW5kIGZvciBlYWNoIG9mIHRoZSBwZW5k aW5nIGVudHJpZXMKKwkgKi8KKwlmb3JlYWNoKGxjLCBwZW5kaW5nX2VudHJpZXMpCisJeworCQll bnRyeSA9IChDb25uQ2FjaGVFbnRyeSAqKSBsZmlyc3QobGMpOworCisJCUFzc2VydChlbnRyeS0+ Y2hhbmdpbmdfeGFjdF9zdGF0ZSk7CisJCS8qCisJCSAqIFdlIG1pZ2h0IGFscmVhZHkgaGF2ZSBy ZWNlaXZlZCB0aGUgcmVzdWx0IG9uIHRoZSBzb2NrZXQsIHNvIHBhc3MKKwkJICogY29uc3VtZV9p bnB1dD10cnVlIHRvIHRyeSB0byBjb25zdW1lIGl0IGZpcnN0CisJCSAqLworCQlkb19zcWxfY29t bWFuZF9lbmQoZW50cnktPmNvbm4sICJDT01NSVQgVFJBTlNBQ1RJT04iLCB0cnVlKTsKKwkJZW50 cnktPmNoYW5naW5nX3hhY3Rfc3RhdGUgPSBmYWxzZTsKKworCQkvKiBEbyBhIERFQUxMT0NBVEUg QUxMIGluIHBhcmFsbGVsIGlmIG5lZWRlZCAqLworCQlpZiAoZW50cnktPmhhdmVfcHJlcF9zdG10 ICYmIGVudHJ5LT5oYXZlX2Vycm9yKQorCQl7CisJCQkvKiBJZ25vcmUgZXJyb3JzIGluIHRoZSBE RUFMTE9DQVRFIChzZWUgbm90ZSBhYm92ZSkgKi8KKwkJCWlmIChQUXNlbmRRdWVyeShlbnRyeS0+ Y29ubiwgIkRFQUxMT0NBVEUgQUxMIikpCisJCQl7CisJCQkJcGVuZGluZ19kZWFsbG9jcyA9IGxh cHBlbmQocGVuZGluZ19kZWFsbG9jcywgZW50cnkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9 CisKKwkJZW50cnktPmhhdmVfcHJlcF9zdG10ID0gZmFsc2U7CisJCWVudHJ5LT5oYXZlX2Vycm9y ID0gZmFsc2U7CisKKwkJcGdmZHdfcmVzZXRfeGFjdF9zdGF0ZShlbnRyeSwgdHJ1ZSk7CisJfQor CisJLyoKKwkgKiBHZXQgdGhlIHJlc3VsdCBvZiB0aGUgREVBTExPQ0FURSBjb21tYW5kIGZvciBl YWNoIG9mIHRoZSBwZW5kaW5nCisJICogZW50cmllcyBpZiBhbnkKKwkgKi8KKwlpZiAocGVuZGlu Z19kZWFsbG9jcykKKwl7CisJCWZvcmVhY2gobGMsIHBlbmRpbmdfZGVhbGxvY3MpCisJCXsKKwkJ CVBHcmVzdWx0ICAgKnJlczsKKwkJCWVudHJ5ID0gKENvbm5DYWNoZUVudHJ5ICopIGxmaXJzdChs Yyk7CisKKwkJCS8qIElnbm9yZSBlcnJvcnMgaW4gdGhlIERFQUxMT0NBVEUgKHNlZSBub3RlIGFi b3ZlKSAqLworCQkJd2hpbGUgKChyZXMgPSBQUWdldFJlc3VsdChlbnRyeS0+Y29ubikpICE9IE5V TEwpCisJCQl7CisJCQkJUFFjbGVhcihyZXMpOworCQkJCS8qCisJCQkJICogU3RvcCBpZiB0aGUg Y29ubmVjdGlvbiBpcyBsb3N0IChlbHNlIHdlJ2xsIGxvb3AgaW5maW5pdGVseSkKKwkJCQkgKi8K KwkJCQlpZiAoUFFzdGF0dXMoZW50cnktPmNvbm4pID09IENPTk5FQ1RJT05fQkFEKQorCQkJCQli cmVhazsKKwkJCX0KKworCQkJZW50cnktPmhhdmVfcHJlcF9zdG10ID0gZmFsc2U7CisJCQllbnRy eS0+aGF2ZV9lcnJvciA9IGZhbHNlOworCisJCQlwZ2Zkd19yZXNldF94YWN0X3N0YXRlKGVudHJ5 LCB0cnVlKTsKKwkJfQorCX0KK30KKworLyoKKyAqIEZpbmlzaCBwcmUtc3ViY29tbWl0IGNsZWFu dXAgb2YgY29ubmVjdGlvbnMgb24gd2hpY2ggd2UgaGF2ZSBzZW50IGEgUkVMRUFTRQorICogY29t bWFuZC4KKyAqLworc3RhdGljIHZvaWQKK3BnZmR3X2ZpbmlzaF9wcmVfc3ViY29tbWl0X2NsZWFu dXAoTGlzdCAqcGVuZGluZ19lbnRyaWVzKQoreworCUNvbm5DYWNoZUVudHJ5ICplbnRyeTsKKwlp bnQJCQljdXJsZXZlbDsKKwljaGFyCQlzcWxbMTAwXTsKKwlMaXN0Q2VsbCAgICpsYzsKKworCUFz c2VydChwZW5kaW5nX2VudHJpZXMpOworCisJLyoKKwkgKiBHZXQgdGhlIHJlc3VsdCBvZiB0aGUg UkVMRUFTRSBjb21tYW5kIGZvciBlYWNoIG9mIHRoZSBwZW5kaW5nIGVudHJpZXMKKwkgKi8KKwlj dXJsZXZlbCA9IEdldEN1cnJlbnRUcmFuc2FjdGlvbk5lc3RMZXZlbCgpOworCXNucHJpbnRmKHNx bCwgc2l6ZW9mKHNxbCksICJSRUxFQVNFIFNBVkVQT0lOVCBzJWQiLCBjdXJsZXZlbCk7CisJZm9y ZWFjaChsYywgcGVuZGluZ19lbnRyaWVzKQorCXsKKwkJZW50cnkgPSAoQ29ubkNhY2hlRW50cnkg KikgbGZpcnN0KGxjKTsKKworCQlBc3NlcnQoZW50cnktPmNoYW5naW5nX3hhY3Rfc3RhdGUpOwor CQkvKgorCQkgKiBXZSBtaWdodCBhbHJlYWR5IGhhdmUgcmVjZWl2ZWQgdGhlIHJlc3VsdCBvbiB0 aGUgc29ja2V0LCBzbyBwYXNzCisJCSAqIGNvbnN1bWVfaW5wdXQ9dHJ1ZSB0byB0cnkgdG8gY29u c3VtZSBpdCBmaXJzdAorCQkgKi8KKwkJZG9fc3FsX2NvbW1hbmRfZW5kKGVudHJ5LT5jb25uLCBz cWwsIHRydWUpOworCQllbnRyeS0+Y2hhbmdpbmdfeGFjdF9zdGF0ZSA9IGZhbHNlOworCisJCXBn ZmR3X3Jlc2V0X3hhY3Rfc3RhdGUoZW50cnksIGZhbHNlKTsKKwl9Cit9CisKIC8qCiAgKiBMaXN0 IGFjdGl2ZSBmb3JlaWduIHNlcnZlciBjb25uZWN0aW9ucy4KICAqCmRpZmYgLS1naXQgYS9jb250 cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0IGIvY29udHJpYi9wb3N0 Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAppbmRleCBiMmUwMmNhZWZlLi44MDQz YjIwN2M1IDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jl c19mZHcub3V0CisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zk dy5vdXQKQEAgLTk1MDksNyArOTUwOSw3IEBAIERPICRkJAogICAgIEVORDsKICRkJDsKIEVSUk9S OiAgaW52YWxpZCBvcHRpb24gInBhc3N3b3JkIgotSElOVDogIFZhbGlkIG9wdGlvbnMgaW4gdGhp cyBjb250ZXh0IGFyZTogc2VydmljZSwgcGFzc2ZpbGUsIGNoYW5uZWxfYmluZGluZywgY29ubmVj dF90aW1lb3V0LCBkYm5hbWUsIGhvc3QsIGhvc3RhZGRyLCBwb3J0LCBvcHRpb25zLCBhcHBsaWNh dGlvbl9uYW1lLCBrZWVwYWxpdmVzLCBrZWVwYWxpdmVzX2lkbGUsIGtlZXBhbGl2ZXNfaW50ZXJ2 YWwsIGtlZXBhbGl2ZXNfY291bnQsIHRjcF91c2VyX3RpbWVvdXQsIHNzbG1vZGUsIHNzbGNvbXBy ZXNzaW9uLCBzc2xjZXJ0LCBzc2xrZXksIHNzbHJvb3RjZXJ0LCBzc2xjcmwsIHNzbGNybGRpciwg c3Nsc25pLCByZXF1aXJlcGVlciwgc3NsX21pbl9wcm90b2NvbF92ZXJzaW9uLCBzc2xfbWF4X3By b3RvY29sX3ZlcnNpb24sIGdzc2VuY21vZGUsIGtyYnNydm5hbWUsIGdzc2xpYiwgdGFyZ2V0X3Nl c3Npb25fYXR0cnMsIHVzZV9yZW1vdGVfZXN0aW1hdGUsIGZkd19zdGFydHVwX2Nvc3QsIGZkd190 dXBsZV9jb3N0LCBleHRlbnNpb25zLCB1cGRhdGFibGUsIHRydW5jYXRhYmxlLCBmZXRjaF9zaXpl LCBiYXRjaF9zaXplLCBhc3luY19jYXBhYmxlLCBrZWVwX2Nvbm5lY3Rpb25zCitISU5UOiAgVmFs aWQgb3B0aW9ucyBpbiB0aGlzIGNvbnRleHQgYXJlOiBzZXJ2aWNlLCBwYXNzZmlsZSwgY2hhbm5l bF9iaW5kaW5nLCBjb25uZWN0X3RpbWVvdXQsIGRibmFtZSwgaG9zdCwgaG9zdGFkZHIsIHBvcnQs IG9wdGlvbnMsIGFwcGxpY2F0aW9uX25hbWUsIGtlZXBhbGl2ZXMsIGtlZXBhbGl2ZXNfaWRsZSwg a2VlcGFsaXZlc19pbnRlcnZhbCwga2VlcGFsaXZlc19jb3VudCwgdGNwX3VzZXJfdGltZW91dCwg c3NsbW9kZSwgc3NsY29tcHJlc3Npb24sIHNzbGNlcnQsIHNzbGtleSwgc3Nscm9vdGNlcnQsIHNz bGNybCwgc3NsY3JsZGlyLCBzc2xzbmksIHJlcXVpcmVwZWVyLCBzc2xfbWluX3Byb3RvY29sX3Zl cnNpb24sIHNzbF9tYXhfcHJvdG9jb2xfdmVyc2lvbiwgZ3NzZW5jbW9kZSwga3Jic3J2bmFtZSwg Z3NzbGliLCB0YXJnZXRfc2Vzc2lvbl9hdHRycywgdXNlX3JlbW90ZV9lc3RpbWF0ZSwgZmR3X3N0 YXJ0dXBfY29zdCwgZmR3X3R1cGxlX2Nvc3QsIGV4dGVuc2lvbnMsIHVwZGF0YWJsZSwgdHJ1bmNh dGFibGUsIGZldGNoX3NpemUsIGJhdGNoX3NpemUsIGFzeW5jX2NhcGFibGUsIHBhcmFsbGVsX2Nv bW1pdCwga2VlcF9jb25uZWN0aW9ucwogQ09OVEVYVDogIFNRTCBzdGF0ZW1lbnQgIkFMVEVSIFNF UlZFUiBsb29wYmFja19ub3B3IE9QVElPTlMgKEFERCBwYXNzd29yZCAnZHVtbXlwdycpIgogUEwv cGdTUUwgZnVuY3Rpb24gaW5saW5lX2NvZGVfYmxvY2sgbGluZSAzIGF0IEVYRUNVVEUKIC0tIElm IHdlIGFkZCBhIHBhc3N3b3JkIGZvciBvdXIgdXNlciBtYXBwaW5nIGluc3RlYWQsIHdlIHNob3Vs ZCBnZXQgYSBkaWZmZXJlbnQKQEAgLTEwOTEzLDMgKzEwOTEzLDc5IEBAIFNFTEVDVCBwZ190ZXJt aW5hdGVfYmFja2VuZChwaWQsIDE4MDAwMCkgRlJPTSBwZ19zdGF0X2FjdGl2aXR5CiAtLUNsZWFu IHVwCiBSRVNFVCBwb3N0Z3Jlc19mZHcuYXBwbGljYXRpb25fbmFtZTsKIFJFU0VUIGRlYnVnX2Rp c2NhcmRfY2FjaGVzOworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gdGVzdCBwYXJhbGxlbCBjb21taXQKKy0t ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KK0FMVEVSIFNFUlZFUiBsb29wYmFjayBPUFRJT05TIChBREQgcGFyYWxsZWxf Y29tbWl0ICd0cnVlJyk7CitBTFRFUiBTRVJWRVIgbG9vcGJhY2syIE9QVElPTlMgKEFERCBwYXJh bGxlbF9jb21taXQgJ3RydWUnKTsKK0NSRUFURSBUQUJMRSBwbG9jMSAoZjEgaW50LCBmMiB0ZXh0 KTsKK0NSRUFURSBGT1JFSUdOIFRBQkxFIHByZW0xIChmMSBpbnQsIGYyIHRleHQpCisgIFNFUlZF UiBsb29wYmFjayBPUFRJT05TICh0YWJsZV9uYW1lICdwbG9jMScpOworQ1JFQVRFIFRBQkxFIHBs b2MyIChmMSBpbnQsIGYyIHRleHQpOworQ1JFQVRFIEZPUkVJR04gVEFCTEUgcHJlbTIgKGYxIGlu dCwgZjIgdGV4dCkKKyAgU0VSVkVSIGxvb3BiYWNrMiBPUFRJT05TICh0YWJsZV9uYW1lICdwbG9j MicpOworQkVHSU47CitJTlNFUlQgSU5UTyBwcmVtMSBWQUxVRVMgKDEwMSwgJ2ZvbycpOworSU5T RVJUIElOVE8gcHJlbTIgVkFMVUVTICgyMDEsICdiYXInKTsKK0NPTU1JVDsKK1NFTEVDVCAqIEZS T00gcHJlbTE7CisgZjEgIHwgZjIgIAorLS0tLS0rLS0tLS0KKyAxMDEgfCBmb28KKygxIHJvdykK KworU0VMRUNUICogRlJPTSBwcmVtMjsKKyBmMSAgfCBmMiAgCistLS0tLSstLS0tLQorIDIwMSB8 IGJhcgorKDEgcm93KQorCitCRUdJTjsKK1NBVkVQT0lOVCBzOworSU5TRVJUIElOVE8gcHJlbTEg VkFMVUVTICgxMDIsICdmb29mb28nKTsKK0lOU0VSVCBJTlRPIHByZW0yIFZBTFVFUyAoMjAyLCAn YmFyYmFyJyk7CitSRUxFQVNFIFNBVkVQT0lOVCBzOworQ09NTUlUOworU0VMRUNUICogRlJPTSBw cmVtMTsKKyBmMSAgfCAgIGYyICAgCistLS0tLSstLS0tLS0tLQorIDEwMSB8IGZvbworIDEwMiB8 IGZvb2ZvbworKDIgcm93cykKKworU0VMRUNUICogRlJPTSBwcmVtMjsKKyBmMSAgfCAgIGYyICAg CistLS0tLSstLS0tLS0tLQorIDIwMSB8IGJhcgorIDIwMiB8IGJhcmJhcgorKDIgcm93cykKKwor LS0gVGhpcyB0ZXN0cyBleGVjdXRpbmcgREVBTExPQ0FURSBBTEwgYWdhaW5zdCBmb3JlaWduIHNl cnZlcnMgaW4gcGFyYWxsZWwKKy0tIGR1cmluZyBwcmUtY29tbWl0CitCRUdJTjsKK1NBVkVQT0lO VCBzOworSU5TRVJUIElOVE8gcHJlbTEgVkFMVUVTICgxMDMsICdiYXonKTsKK0lOU0VSVCBJTlRP IHByZW0yIFZBTFVFUyAoMjAzLCAncXV4Jyk7CitST0xMQkFDSyBUTyBTQVZFUE9JTlQgczsKK1JF TEVBU0UgU0FWRVBPSU5UIHM7CitJTlNFUlQgSU5UTyBwcmVtMSBWQUxVRVMgKDEwNCwgJ2JhemJh eicpOworSU5TRVJUIElOVE8gcHJlbTIgVkFMVUVTICgyMDQsICdxdXhxdXgnKTsKK0NPTU1JVDsK K1NFTEVDVCAqIEZST00gcHJlbTE7CisgZjEgIHwgICBmMiAgIAorLS0tLS0rLS0tLS0tLS0KKyAx MDEgfCBmb28KKyAxMDIgfCBmb29mb28KKyAxMDQgfCBiYXpiYXoKKygzIHJvd3MpCisKK1NFTEVD VCAqIEZST00gcHJlbTI7CisgZjEgIHwgICBmMiAgIAorLS0tLS0rLS0tLS0tLS0KKyAyMDEgfCBi YXIKKyAyMDIgfCBiYXJiYXIKKyAyMDQgfCBxdXhxdXgKKygzIHJvd3MpCisKK0FMVEVSIFNFUlZF UiBsb29wYmFjayBPUFRJT05TIChEUk9QIHBhcmFsbGVsX2NvbW1pdCk7CitBTFRFUiBTRVJWRVIg bG9vcGJhY2syIE9QVElPTlMgKERST1AgcGFyYWxsZWxfY29tbWl0KTsKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcG9zdGdyZXNfZmR3L29wdGlvbi5jIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvb3B0aW9u LmMKaW5kZXggZmMzY2U2YTUzYS4uYTA5YzBiNmRiNyAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0 Z3Jlc19mZHcvb3B0aW9uLmMKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvb3B0aW9uLmMKQEAg LTEyMSw2ICsxMjEsNyBAQCBwb3N0Z3Jlc19mZHdfdmFsaWRhdG9yKFBHX0ZVTkNUSU9OX0FSR1Mp CiAJCQlzdHJjbXAoZGVmLT5kZWZuYW1lLCAidXBkYXRhYmxlIikgPT0gMCB8fAogCQkJc3RyY21w KGRlZi0+ZGVmbmFtZSwgInRydW5jYXRhYmxlIikgPT0gMCB8fAogCQkJc3RyY21wKGRlZi0+ZGVm bmFtZSwgImFzeW5jX2NhcGFibGUiKSA9PSAwIHx8CisJCQlzdHJjbXAoZGVmLT5kZWZuYW1lLCAi cGFyYWxsZWxfY29tbWl0IikgPT0gMCB8fAogCQkJc3RyY21wKGRlZi0+ZGVmbmFtZSwgImtlZXBf Y29ubmVjdGlvbnMiKSA9PSAwKQogCQl7CiAJCQkvKiB0aGVzZSBhY2NlcHQgb25seSBib29sZWFu IHZhbHVlcyAqLwpAQCAtMjQ5LDYgKzI1MCw3IEBAIEluaXRQZ0Zkd09wdGlvbnModm9pZCkKIAkJ LyogYXN5bmNfY2FwYWJsZSBpcyBhdmFpbGFibGUgb24gYm90aCBzZXJ2ZXIgYW5kIHRhYmxlICov CiAJCXsiYXN5bmNfY2FwYWJsZSIsIEZvcmVpZ25TZXJ2ZXJSZWxhdGlvbklkLCBmYWxzZX0sCiAJ CXsiYXN5bmNfY2FwYWJsZSIsIEZvcmVpZ25UYWJsZVJlbGF0aW9uSWQsIGZhbHNlfSwKKwkJeyJw YXJhbGxlbF9jb21taXQiLCBGb3JlaWduU2VydmVyUmVsYXRpb25JZCwgZmFsc2V9LAogCQl7Imtl ZXBfY29ubmVjdGlvbnMiLCBGb3JlaWduU2VydmVyUmVsYXRpb25JZCwgZmFsc2V9LAogCQl7InBh c3N3b3JkX3JlcXVpcmVkIiwgVXNlck1hcHBpbmdSZWxhdGlvbklkLCBmYWxzZX0sCiAKZGlmZiAt LWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsIGIvY29udHJp Yi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwKaW5kZXggZTA1MDYzOWI1Ny4uMmRj NjM4NmI0MCAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zk dy5zcWwKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwKQEAg LTM1MDQsMyArMzUwNCw0OSBAQCBTRUxFQ1QgcGdfdGVybWluYXRlX2JhY2tlbmQocGlkLCAxODAw MDApIEZST00gcGdfc3RhdF9hY3Rpdml0eQogLS1DbGVhbiB1cAogUkVTRVQgcG9zdGdyZXNfZmR3 LmFwcGxpY2F0aW9uX25hbWU7CiBSRVNFVCBkZWJ1Z19kaXNjYXJkX2NhY2hlczsKKworLS0gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorLS0gdGVzdCBwYXJhbGxlbCBjb21taXQKKy0tID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0FMVEVSIFNF UlZFUiBsb29wYmFjayBPUFRJT05TIChBREQgcGFyYWxsZWxfY29tbWl0ICd0cnVlJyk7CitBTFRF UiBTRVJWRVIgbG9vcGJhY2syIE9QVElPTlMgKEFERCBwYXJhbGxlbF9jb21taXQgJ3RydWUnKTsK KworQ1JFQVRFIFRBQkxFIHBsb2MxIChmMSBpbnQsIGYyIHRleHQpOworQ1JFQVRFIEZPUkVJR04g VEFCTEUgcHJlbTEgKGYxIGludCwgZjIgdGV4dCkKKyAgU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMg KHRhYmxlX25hbWUgJ3Bsb2MxJyk7CitDUkVBVEUgVEFCTEUgcGxvYzIgKGYxIGludCwgZjIgdGV4 dCk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBwcmVtMiAoZjEgaW50LCBmMiB0ZXh0KQorICBTRVJW RVIgbG9vcGJhY2syIE9QVElPTlMgKHRhYmxlX25hbWUgJ3Bsb2MyJyk7CisKK0JFR0lOOworSU5T RVJUIElOVE8gcHJlbTEgVkFMVUVTICgxMDEsICdmb28nKTsKK0lOU0VSVCBJTlRPIHByZW0yIFZB TFVFUyAoMjAxLCAnYmFyJyk7CitDT01NSVQ7CitTRUxFQ1QgKiBGUk9NIHByZW0xOworU0VMRUNU ICogRlJPTSBwcmVtMjsKKworQkVHSU47CitTQVZFUE9JTlQgczsKK0lOU0VSVCBJTlRPIHByZW0x IFZBTFVFUyAoMTAyLCAnZm9vZm9vJyk7CitJTlNFUlQgSU5UTyBwcmVtMiBWQUxVRVMgKDIwMiwg J2JhcmJhcicpOworUkVMRUFTRSBTQVZFUE9JTlQgczsKK0NPTU1JVDsKK1NFTEVDVCAqIEZST00g cHJlbTE7CitTRUxFQ1QgKiBGUk9NIHByZW0yOworCistLSBUaGlzIHRlc3RzIGV4ZWN1dGluZyBE RUFMTE9DQVRFIEFMTCBhZ2FpbnN0IGZvcmVpZ24gc2VydmVycyBpbiBwYXJhbGxlbAorLS0gZHVy aW5nIHByZS1jb21taXQKK0JFR0lOOworU0FWRVBPSU5UIHM7CitJTlNFUlQgSU5UTyBwcmVtMSBW QUxVRVMgKDEwMywgJ2JheicpOworSU5TRVJUIElOVE8gcHJlbTIgVkFMVUVTICgyMDMsICdxdXgn KTsKK1JPTExCQUNLIFRPIFNBVkVQT0lOVCBzOworUkVMRUFTRSBTQVZFUE9JTlQgczsKK0lOU0VS VCBJTlRPIHByZW0xIFZBTFVFUyAoMTA0LCAnYmF6YmF6Jyk7CitJTlNFUlQgSU5UTyBwcmVtMiBW QUxVRVMgKDIwNCwgJ3F1eHF1eCcpOworQ09NTUlUOworU0VMRUNUICogRlJPTSBwcmVtMTsKK1NF TEVDVCAqIEZST00gcHJlbTI7CisKK0FMVEVSIFNFUlZFUiBsb29wYmFjayBPUFRJT05TIChEUk9Q IHBhcmFsbGVsX2NvbW1pdCk7CitBTFRFUiBTRVJWRVIgbG9vcGJhY2syIE9QVElPTlMgKERST1Ag cGFyYWxsZWxfY29tbWl0KTsKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9wb3N0Z3Jlcy1mZHcu c2dtbCBiL2RvYy9zcmMvc2dtbC9wb3N0Z3Jlcy1mZHcuc2dtbAppbmRleCAyYmIzMWYxMTI1Li4y MzhlMmY4NGE2IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcG9zdGdyZXMtZmR3LnNnbWwKKysr IGIvZG9jL3NyYy9zZ21sL3Bvc3RncmVzLWZkdy5zZ21sCkBAIC00NTUsNiArNDU1LDUyIEBAIE9Q VElPTlMgKEFERCBwYXNzd29yZF9yZXF1aXJlZCAnZmFsc2UnKTsKICAgIDwvdmFyaWFibGVsaXN0 PgogICA8L3NlY3QzPgogCisgIDxzZWN0Mz4KKyAgIDx0aXRsZT5UcmFuc2FjdGlvbiBNYW5hZ2Vt ZW50IE9wdGlvbnM8L3RpdGxlPgorCisgICA8cGFyYT4KKyAgICBXaGVuIG11bHRpcGxlIHJlbW90 ZSAoc3ViKXRyYW5zYWN0aW9ucyBhcmUgaW52b2x2ZWQgaW4gYSBsb2NhbAorICAgIChzdWIpdHJh bnNhY3Rpb24sIGJ5IGRlZmF1bHQgPGZpbGVuYW1lPnBvc3RncmVzX2ZkdzwvZmlsZW5hbWU+IGNv bW1pdHMKKyAgICB0aG9zZSByZW1vdGUgKHN1Yil0cmFuc2FjdGlvbnMgb25lIGJ5IG9uZSB3aGVu IHRoZSBsb2NhbCAoc3ViKXRyYW5zYWN0aW9uCisgICAgY29tbWl0cy4KKyAgICBQZXJmb3JtYW5j ZSBjYW4gYmUgaW1wcm92ZWQgd2l0aCB0aGUgZm9sbG93aW5nIG9wdGlvbjoKKyAgIDwvcGFyYT4K KworICAgPHZhcmlhYmxlbGlzdD4KKworICAgIDx2YXJsaXN0ZW50cnk+CisgICAgIDx0ZXJtPjxs aXRlcmFsPnBhcmFsbGVsX2NvbW1pdDwvbGl0ZXJhbD4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KTwv dGVybT4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAgVGhpcyBvcHRpb24g Y29udHJvbHMgd2hldGhlciA8ZmlsZW5hbWU+cG9zdGdyZXNfZmR3PC9maWxlbmFtZT4gY29tbWl0 cworICAgICAgIHJlbW90ZSAoc3ViKXRyYW5zYWN0aW9ucyBvcGVuZWQgb24gYSBmb3JlaWduIHNl cnZlciBpbiBhIGxvY2FsCisgICAgICAgKHN1Yil0cmFuc2FjdGlvbiBpbiBwYXJhbGxlbCB3aGVu IHRoZSBsb2NhbCAoc3ViKXRyYW5zYWN0aW9uIGNvbW1pdHMuCisgICAgICAgVGhpcyBvcHRpb24g Y2FuIG9ubHkgYmUgc3BlY2lmaWVkIGZvciBmb3JlaWduIHNlcnZlcnMsIG5vdCBwZXItdGFibGUu CisgICAgICAgVGhlIGRlZmF1bHQgaXMgPGxpdGVyYWw+ZmFsc2U8L2xpdGVyYWw+LgorICAgICAg PC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICBJZiBtdWx0aXBsZSBmb3JlaWduIHNlcnZl cnMgd2l0aCB0aGlzIG9wdGlvbiBlbmFibGVkIGFyZSBpbnZvbHZlZCBpbgorICAgICAgIGEgbG9j YWwgKHN1Yil0cmFuc2FjdGlvbiwgbXVsdGlwbGUgcmVtb3RlIChzdWIpdHJhbnNhY3Rpb25zIG9w ZW5lZCBvbgorICAgICAgIHRob3NlIGZvcmVpZ24gc2VydmVycyBpbiB0aGUgbG9jYWwgKHN1Yil0 cmFuc2FjdGlvbiBhcmUgY29tbWl0dGVkIGluCisgICAgICAgcGFyYWxsZWwgYWNyb3NzIHRob3Nl IGZvcmVpZ24gc2VydmVycyB3aGVuIHRoZSBsb2NhbCAoc3ViKXRyYW5zYWN0aW9uCisgICAgICAg Y29tbWl0cy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgRm9yIGEgZm9y ZWlnbiBzZXJ2ZXIgd2l0aCB0aGlzIG9wdGlvbiBlbmFibGVkLCBpZiBtYW55IHJlbW90ZQorICAg ICAgIChzdWIpdHJhbnNhY3Rpb25zIGFyZSBvcGVuZWQgb24gdGhlIGZvcmVpZ24gc2VydmVyIGlu IGEgbG9jYWwKKyAgICAgICAoc3ViKXRyYW5zYWN0aW9uLCB0aGlzIG9wdGlvbiBtaWdodCBpbmNy ZWFzZSB0aGUgcmVtb3RlIHNlcnZlcuKAmXMgbG9hZAorICAgICAgIHdoZW4gdGhlIGxvY2FsIChz dWIpdHJhbnNhY3Rpb24gY29tbWl0cywgc28gYmUgY2FyZWZ1bCB3aGVuIHVzaW5nIHRoaXMKKyAg ICAgICBvcHRpb24uCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92YXJs aXN0ZW50cnk+CisKKyAgIDwvdmFyaWFibGVsaXN0PgorCisgIDwvc2VjdDM+CisKICAgPHNlY3Qz PgogICAgPHRpdGxlPlVwZGF0YWJpbGl0eSBPcHRpb25zPC90aXRsZT4KIAo= --0000000000001bb8e105d7bda3bc Content-Type: application/octet-stream; name="v4-0002-postgres_fdw-Minor-cleanup-for-pgfdw_abort_cleanup.patch" Content-Disposition: attachment; filename="v4-0002-postgres_fdw-Minor-cleanup-for-pgfdw_abort_cleanup.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kzif0h9v1 ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2Nvbm5lY3Rpb24uYyBiL2NvbnRyaWIv cG9zdGdyZXNfZmR3L2Nvbm5lY3Rpb24uYwppbmRleCAzZjRlNzFkYTllLi4yZGViNGIyYzRhIDEw MDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9jb25uZWN0aW9uLmMKKysrIGIvY29udHJp Yi9wb3N0Z3Jlc19mZHcvY29ubmVjdGlvbi5jCkBAIC04MCw2ICs4MCwxOCBAQCBzdGF0aWMgdW5z aWduZWQgaW50IHByZXBfc3RtdF9udW1iZXIgPSAwOwogLyogdHJhY2tzIHdoZXRoZXIgYW55IHdv cmsgaXMgbmVlZGVkIGluIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLwogc3RhdGljIGJvb2wgeGFjdF9n b3RfY29ubmVjdGlvbiA9IGZhbHNlOwogCisvKiBtYWNybyBmb3IgY29uc3RydWN0aW5nIGFib3J0 IGNvbW1hbmQgdG8gYmUgc2VudCAqLworI2RlZmluZSBDT05TVFJVQ1RfQUJPUlRfQ09NTUFORChz cWwsIGVudHJ5LCB0b3BsZXZlbCkgXAorCWRvIHsgXAorCQlpZiAodG9wbGV2ZWwpIFwKKwkJCXNu cHJpbnRmKChzcWwpLCBzaXplb2Yoc3FsKSwgXAorCQkJCQkgIkFCT1JUIFRSQU5TQUNUSU9OIik7 IFwKKwkJZWxzZSBcCisJCQlzbnByaW50Zigoc3FsKSwgc2l6ZW9mKHNxbCksIFwKKwkJCQkJICJS T0xMQkFDSyBUTyBTQVZFUE9JTlQgcyVkOyBSRUxFQVNFIFNBVkVQT0lOVCBzJWQiLCBcCisJCQkJ CSAoZW50cnkpLT54YWN0X2RlcHRoLCAoZW50cnkpLT54YWN0X2RlcHRoKTsgXAorCX0gd2hpbGUo MCkKKwogLyoKICAqIFNRTCBmdW5jdGlvbnMKICAqLwpAQCAtMTEwLDggKzEyMiw3IEBAIHN0YXRp YyBib29sIHBnZmR3X2V4ZWNfY2xlYW51cF9xdWVyeShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIg KnF1ZXJ5LAogCQkJCQkJCQkJIGJvb2wgaWdub3JlX2Vycm9ycyk7CiBzdGF0aWMgYm9vbCBwZ2Zk d19nZXRfY2xlYW51cF9yZXN1bHQoUEdjb25uICpjb25uLCBUaW1lc3RhbXBUeiBlbmR0aW1lLAog CQkJCQkJCQkJIFBHcmVzdWx0ICoqcmVzdWx0LCBib29sICp0aW1lZF9vdXQpOwotc3RhdGljIHZv aWQgcGdmZHdfYWJvcnRfY2xlYW51cChDb25uQ2FjaGVFbnRyeSAqZW50cnksIGNvbnN0IGNoYXIg KnNxbCwKLQkJCQkJCQkJYm9vbCB0b3BsZXZlbCk7CitzdGF0aWMgdm9pZCBwZ2Zkd19hYm9ydF9j bGVhbnVwKENvbm5DYWNoZUVudHJ5ICplbnRyeSwgYm9vbCB0b3BsZXZlbCk7CiBzdGF0aWMgdm9p ZCBwZ2Zkd19maW5pc2hfcHJlX2NvbW1pdF9jbGVhbnVwKExpc3QgKnBlbmRpbmdfZW50cmllcyk7 CiBzdGF0aWMgdm9pZCBwZ2Zkd19maW5pc2hfcHJlX3N1YmNvbW1pdF9jbGVhbnVwKExpc3QgKnBl bmRpbmdfZW50cmllcyk7CiBzdGF0aWMgYm9vbCBVc2VyTWFwcGluZ1Bhc3N3b3JkUmVxdWlyZWQo VXNlck1hcHBpbmcgKnVzZXIpOwpAQCAtMTAxNCw4ICsxMDI1LDggQEAgcGdmZHdfeGFjdF9jYWxs YmFjayhYYWN0RXZlbnQgZXZlbnQsIHZvaWQgKmFyZykKIAkJCQkJYnJlYWs7CiAJCQkJY2FzZSBY QUNUX0VWRU5UX1BBUkFMTEVMX0FCT1JUOgogCQkJCWNhc2UgWEFDVF9FVkVOVF9BQk9SVDoKLQot CQkJCQlwZ2Zkd19hYm9ydF9jbGVhbnVwKGVudHJ5LCAiQUJPUlQgVFJBTlNBQ1RJT04iLCB0cnVl KTsKKwkJCQkJLyogUm9sbGJhY2sgYWxsIHJlbW90ZSB0cmFuc2FjdGlvbnMgZHVyaW5nIGFib3J0 ICovCisJCQkJCXBnZmR3X2Fib3J0X2NsZWFudXAoZW50cnksIHRydWUpOwogCQkJCQlicmVhazsK IAkJCX0KIAkJfQpAQCAtMTEwOCwxMCArMTExOSw3IEBAIHBnZmR3X3N1YnhhY3RfY2FsbGJhY2so U3ViWGFjdEV2ZW50IGV2ZW50LCBTdWJUcmFuc2FjdGlvbklkIG15U3ViaWQsCiAJCWVsc2UKIAkJ ewogCQkJLyogUm9sbGJhY2sgYWxsIHJlbW90ZSBzdWJ0cmFuc2FjdGlvbnMgZHVyaW5nIGFib3J0 ICovCi0JCQlzbnByaW50ZihzcWwsIHNpemVvZihzcWwpLAotCQkJCQkgIlJPTExCQUNLIFRPIFNB VkVQT0lOVCBzJWQ7IFJFTEVBU0UgU0FWRVBPSU5UIHMlZCIsCi0JCQkJCSBjdXJsZXZlbCwgY3Vy bGV2ZWwpOwotCQkJcGdmZHdfYWJvcnRfY2xlYW51cChlbnRyeSwgc3FsLCBmYWxzZSk7CisJCQlw Z2Zkd19hYm9ydF9jbGVhbnVwKGVudHJ5LCBmYWxzZSk7CiAJCX0KIAogCQkvKiBPSywgd2UncmUg b3V0dGEgdGhhdCBsZXZlbCBvZiBzdWJ0cmFuc2FjdGlvbiAqLwpAQCAtMTQ2NCwxMCArMTQ3Miw3 IEBAIGV4aXQ6CTsKIH0KIAogLyoKLSAqIEFib3J0IHJlbW90ZSB0cmFuc2FjdGlvbi4KLSAqCi0g KiBUaGUgc3RhdGVtZW50IHNwZWNpZmllZCBpbiAic3FsIiBpcyBzZW50IHRvIHRoZSByZW1vdGUg c2VydmVyLAotICogaW4gb3JkZXIgdG8gcm9sbGJhY2sgdGhlIHJlbW90ZSB0cmFuc2FjdGlvbi4K KyAqIEFib3J0IHJlbW90ZSB0cmFuc2FjdGlvbiBvciBzdWJ0cmFuc2FjdGlvbi4KICAqCiAgKiAi dG9wbGV2ZWwiIHNob3VsZCBiZSBzZXQgdG8gdHJ1ZSBpZiB0b3BsZXZlbCAobWFpbikgdHJhbnNh Y3Rpb24gaXMKICAqIHJvbGxiYWNrZWQsIGZhbHNlIG90aGVyd2lzZS4KQEAgLTE0NzUsOCArMTQ4 MCwxMCBAQCBleGl0Ogk7CiAgKiBTZXQgZW50cnktPmNoYW5naW5nX3hhY3Rfc3RhdGUgdG8gZmFs c2Ugb24gc3VjY2VzcywgdHJ1ZSBvbiBmYWlsdXJlLgogICovCiBzdGF0aWMgdm9pZAotcGdmZHdf YWJvcnRfY2xlYW51cChDb25uQ2FjaGVFbnRyeSAqZW50cnksIGNvbnN0IGNoYXIgKnNxbCwgYm9v bCB0b3BsZXZlbCkKK3BnZmR3X2Fib3J0X2NsZWFudXAoQ29ubkNhY2hlRW50cnkgKmVudHJ5LCBi b29sIHRvcGxldmVsKQogeworCWNoYXIJCXNxbFsxMDBdOworCiAJLyoKIAkgKiBEb24ndCB0cnkg dG8gY2xlYW4gdXAgdGhlIGNvbm5lY3Rpb24gaWYgd2UncmUgYWxyZWFkeSBpbiBlcnJvcgogCSAq IHJlY3Vyc2lvbiB0cm91YmxlLgpAQCAtMTUwOCw4ICsxNTE1LDkgQEAgcGdmZHdfYWJvcnRfY2xl YW51cChDb25uQ2FjaGVFbnRyeSAqZW50cnksIGNvbnN0IGNoYXIgKnNxbCwgYm9vbCB0b3BsZXZl bCkKIAkJIXBnZmR3X2NhbmNlbF9xdWVyeShlbnRyeS0+Y29ubikpCiAJCXJldHVybjsJCQkJCS8q IFVuYWJsZSB0byBjYW5jZWwgcnVubmluZyBxdWVyeSAqLwogCisJQ09OU1RSVUNUX0FCT1JUX0NP TU1BTkQoc3FsLCBlbnRyeSwgdG9wbGV2ZWwpOwogCWlmICghcGdmZHdfZXhlY19jbGVhbnVwX3F1 ZXJ5KGVudHJ5LT5jb25uLCBzcWwsIGZhbHNlKSkKLQkJcmV0dXJuOwkJCQkJLyogVW5hYmxlIHRv IGFib3J0IHJlbW90ZSB0cmFuc2FjdGlvbiAqLworCQlyZXR1cm47CQkJCQkvKiBVbmFibGUgdG8g YWJvcnQgcmVtb3RlIChzdWIpdHJhbnNhY3Rpb24gKi8KIAogCWlmICh0b3BsZXZlbCkKIAl7Cg== --0000000000001bb8e105d7bda3bc Content-Type: application/octet-stream; name="v4-0003-postgres-fdw-Add-support-for-parallel-abort.patch" Content-Disposition: attachment; filename="v4-0003-postgres-fdw-Add-support-for-parallel-abort.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kzif12c02 ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2Nvbm5lY3Rpb24uYyBiL2NvbnRyaWIv cG9zdGdyZXNfZmR3L2Nvbm5lY3Rpb24uYwppbmRleCAyZGViNGIyYzRhLi5iZDExZTc2MmI3IDEw MDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9jb25uZWN0aW9uLmMKKysrIGIvY29udHJp Yi9wb3N0Z3Jlc19mZHcvY29ubmVjdGlvbi5jCkBAIC01OSw2ICs1OSw3IEBAIHR5cGVkZWYgc3Ry dWN0IENvbm5DYWNoZUVudHJ5CiAJYm9vbAkJaGF2ZV9lcnJvcjsJCS8qIGhhdmUgYW55IHN1Ynhh Y3RzIGFib3J0ZWQgaW4gdGhpcyB4YWN0PyAqLwogCWJvb2wJCWNoYW5naW5nX3hhY3Rfc3RhdGU7 CS8qIHhhY3Qgc3RhdGUgY2hhbmdlIGluIHByb2Nlc3MgKi8KIAlib29sCQlwYXJhbGxlbF9jb21t aXQ7CS8qIGRvIHdlIGNvbW1pdCAoc3ViKXhhY3RzIGluIHBhcmFsbGVsPyAqLworCWJvb2wJCXBh cmFsbGVsX2Fib3J0OwkvKiBkbyB3ZSBhYm9ydCAoc3ViKXhhY3RzIGluIHBhcmFsbGVsPyAqLwog CWJvb2wJCWludmFsaWRhdGVkOwkvKiB0cnVlIGlmIHJlY29ubmVjdCBpcyBwZW5kaW5nICovCiAJ Ym9vbAkJa2VlcF9jb25uZWN0aW9uczsJLyogc2V0dGluZyB2YWx1ZSBvZiBrZWVwX2Nvbm5lY3Rp b25zCiAJCQkJCQkJCQkgKiBzZXJ2ZXIgb3B0aW9uICovCkBAIC0xMTgsMTMgKzExOSwyNSBAQCBz dGF0aWMgdm9pZCBwZ2Zkd19pbnZhbF9jYWxsYmFjayhEYXR1bSBhcmcsIGludCBjYWNoZWlkLCB1 aW50MzIgaGFzaHZhbHVlKTsKIHN0YXRpYyB2b2lkIHBnZmR3X3JlamVjdF9pbmNvbXBsZXRlX3hh Y3Rfc3RhdGVfY2hhbmdlKENvbm5DYWNoZUVudHJ5ICplbnRyeSk7CiBzdGF0aWMgdm9pZCBwZ2Zk d19yZXNldF94YWN0X3N0YXRlKENvbm5DYWNoZUVudHJ5ICplbnRyeSwgYm9vbCB0b3BsZXZlbCk7 CiBzdGF0aWMgYm9vbCBwZ2Zkd19jYW5jZWxfcXVlcnkoUEdjb25uICpjb25uKTsKK3N0YXRpYyBi b29sIHBnZmR3X2NhbmNlbF9xdWVyeV9iZWdpbihQR2Nvbm4gKmNvbm4pOworc3RhdGljIGJvb2wg cGdmZHdfY2FuY2VsX3F1ZXJ5X2VuZChQR2Nvbm4gKmNvbm4sIFRpbWVzdGFtcFR6IGVuZHRpbWUp Owogc3RhdGljIGJvb2wgcGdmZHdfZXhlY19jbGVhbnVwX3F1ZXJ5KFBHY29ubiAqY29ubiwgY29u c3QgY2hhciAqcXVlcnksCiAJCQkJCQkJCQkgYm9vbCBpZ25vcmVfZXJyb3JzKTsKK3N0YXRpYyBi b29sIHBnZmR3X2V4ZWNfY2xlYW51cF9xdWVyeV9iZWdpbihQR2Nvbm4gKmNvbm4sIGNvbnN0IGNo YXIgKnF1ZXJ5KTsKK3N0YXRpYyBib29sIHBnZmR3X2V4ZWNfY2xlYW51cF9xdWVyeV9lbmQoUEdj b25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSwKKwkJCQkJCQkJCQkgYm9vbCBpZ25vcmVfZXJy b3JzLAorCQkJCQkJCQkJCSBUaW1lc3RhbXBUeiBlbmR0aW1lKTsKIHN0YXRpYyBib29sIHBnZmR3 X2dldF9jbGVhbnVwX3Jlc3VsdChQR2Nvbm4gKmNvbm4sIFRpbWVzdGFtcFR6IGVuZHRpbWUsCiAJ CQkJCQkJCQkgUEdyZXN1bHQgKipyZXN1bHQsIGJvb2wgKnRpbWVkX291dCk7CiBzdGF0aWMgdm9p ZCBwZ2Zkd19hYm9ydF9jbGVhbnVwKENvbm5DYWNoZUVudHJ5ICplbnRyeSwgYm9vbCB0b3BsZXZl bCk7CitzdGF0aWMgYm9vbCBwZ2Zkd19hYm9ydF9jbGVhbnVwX2JlZ2luKENvbm5DYWNoZUVudHJ5 ICplbnRyeSwgYm9vbCB0b3BsZXZlbCwKKwkJCQkJCQkJCSAgTGlzdCAqKnBlbmRpbmdfZW50cmll cywKKwkJCQkJCQkJCSAgTGlzdCAqKmNhbmNlbF9yZXF1ZXN0ZWQpOwogc3RhdGljIHZvaWQgcGdm ZHdfZmluaXNoX3ByZV9jb21taXRfY2xlYW51cChMaXN0ICpwZW5kaW5nX2VudHJpZXMpOwogc3Rh dGljIHZvaWQgcGdmZHdfZmluaXNoX3ByZV9zdWJjb21taXRfY2xlYW51cChMaXN0ICpwZW5kaW5n X2VudHJpZXMpOworc3RhdGljIHZvaWQgcGdmZHdfZmluaXNoX2Fib3J0X2NsZWFudXAoTGlzdCAq cGVuZGluZ19lbnRyaWVzLAorCQkJCQkJCQkJICAgTGlzdCAqY2FuY2VsX3JlcXVlc3RlZCwKKwkJ CQkJCQkJCSAgIGJvb2wgdG9wbGV2ZWwpOwogc3RhdGljIGJvb2wgVXNlck1hcHBpbmdQYXNzd29y ZFJlcXVpcmVkKFVzZXJNYXBwaW5nICp1c2VyKTsKIHN0YXRpYyBib29sIGRpc2Nvbm5lY3RfY2Fj aGVkX2Nvbm5lY3Rpb25zKE9pZCBzZXJ2ZXJpZCk7CiAKQEAgLTMzNSwxMSArMzQ4LDEyIEBAIG1h a2VfbmV3X2Nvbm5lY3Rpb24oQ29ubkNhY2hlRW50cnkgKmVudHJ5LCBVc2VyTWFwcGluZyAqdXNl cikKIAkgKgogCSAqIEJ5IGRlZmF1bHQsIGFsbCB0aGUgY29ubmVjdGlvbnMgdG8gYW55IGZvcmVp Z24gc2VydmVycyBhcmUga2VwdCBvcGVuLgogCSAqCi0JICogQWxzbyBkZXRlcm1pbmUgdG8gY29t bWl0IChzdWIpdHJhbnNhY3Rpb25zIG9wZW5lZCBvbiB0aGUgcmVtb3RlIHNlcnZlcgotCSAqIGlu IHBhcmFsbGVsIGF0IChzdWIpdHJhbnNhY3Rpb24gZW5kLgorCSAqIEFsc28gZGV0ZXJtaW5lIHRv IGNvbW1pdC9hYm9ydCAoc3ViKXRyYW5zYWN0aW9ucyBvcGVuZWQgb24gdGhlIHJlbW90ZQorCSAq IHNlcnZlciBpbiBwYXJhbGxlbCBhdCAoc3ViKXRyYW5zYWN0aW9uIGVuZC4KIAkgKi8KIAllbnRy eS0+a2VlcF9jb25uZWN0aW9ucyA9IHRydWU7CiAJZW50cnktPnBhcmFsbGVsX2NvbW1pdCA9IGZh bHNlOworCWVudHJ5LT5wYXJhbGxlbF9hYm9ydCA9IGZhbHNlOwogCWZvcmVhY2gobGMsIHNlcnZl ci0+b3B0aW9ucykKIAl7CiAJCURlZkVsZW0gICAgKmRlZiA9IChEZWZFbGVtICopIGxmaXJzdChs Yyk7CkBAIC0zNDgsNiArMzYyLDggQEAgbWFrZV9uZXdfY29ubmVjdGlvbihDb25uQ2FjaGVFbnRy eSAqZW50cnksIFVzZXJNYXBwaW5nICp1c2VyKQogCQkJZW50cnktPmtlZXBfY29ubmVjdGlvbnMg PSBkZWZHZXRCb29sZWFuKGRlZik7CiAJCWVsc2UgaWYgKHN0cmNtcChkZWYtPmRlZm5hbWUsICJw YXJhbGxlbF9jb21taXQiKSA9PSAwKQogCQkJZW50cnktPnBhcmFsbGVsX2NvbW1pdCA9IGRlZkdl dEJvb2xlYW4oZGVmKTsKKwkJZWxzZSBpZiAoc3RyY21wKGRlZi0+ZGVmbmFtZSwgInBhcmFsbGVs X2Fib3J0IikgPT0gMCkKKwkJCWVudHJ5LT5wYXJhbGxlbF9hYm9ydCA9IGRlZkdldEJvb2xlYW4o ZGVmKTsKIAl9CiAKIAkvKiBOb3cgdHJ5IHRvIG1ha2UgdGhlIGNvbm5lY3Rpb24gKi8KQEAgLTkz Myw2ICs5NDksNyBAQCBwZ2Zkd194YWN0X2NhbGxiYWNrKFhhY3RFdmVudCBldmVudCwgdm9pZCAq YXJnKQogCUhBU0hfU0VRX1NUQVRVUyBzY2FuOwogCUNvbm5DYWNoZUVudHJ5ICplbnRyeTsKIAlM aXN0CSAgICpwZW5kaW5nX2VudHJpZXMgPSBOSUw7CisJTGlzdAkgICAqY2FuY2VsX3JlcXVlc3Rl ZCA9IE5JTDsKIAogCS8qIFF1aWNrIGV4aXQgaWYgbm8gY29ubmVjdGlvbnMgd2VyZSB0b3VjaGVk IGluIHRoaXMgdHJhbnNhY3Rpb24uICovCiAJaWYgKCF4YWN0X2dvdF9jb25uZWN0aW9uKQpAQCAt MTAyNiw3ICsxMDQzLDE1IEBAIHBnZmR3X3hhY3RfY2FsbGJhY2soWGFjdEV2ZW50IGV2ZW50LCB2 b2lkICphcmcpCiAJCQkJY2FzZSBYQUNUX0VWRU5UX1BBUkFMTEVMX0FCT1JUOgogCQkJCWNhc2Ug WEFDVF9FVkVOVF9BQk9SVDoKIAkJCQkJLyogUm9sbGJhY2sgYWxsIHJlbW90ZSB0cmFuc2FjdGlv bnMgZHVyaW5nIGFib3J0ICovCi0JCQkJCXBnZmR3X2Fib3J0X2NsZWFudXAoZW50cnksIHRydWUp OworCQkJCQlpZiAoZW50cnktPnBhcmFsbGVsX2Fib3J0KQorCQkJCQl7CisJCQkJCQlpZiAocGdm ZHdfYWJvcnRfY2xlYW51cF9iZWdpbihlbnRyeSwgdHJ1ZSwKKwkJCQkJCQkJCQkJCQkgICZwZW5k aW5nX2VudHJpZXMsCisJCQkJCQkJCQkJCQkJICAmY2FuY2VsX3JlcXVlc3RlZCkpCisJCQkJCQkJ Y29udGludWU7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQkJcGdmZHdfYWJvcnRfY2xlYW51cChl bnRyeSwgdHJ1ZSk7CiAJCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC0xMDM2LDExICsxMDYxLDIx IEBAIHBnZmR3X3hhY3RfY2FsbGJhY2soWGFjdEV2ZW50IGV2ZW50LCB2b2lkICphcmcpCiAJfQog CiAJLyogSWYgdGhlcmUgYXJlIGFueSBwZW5kaW5nIGNvbm5lY3Rpb25zLCBmaW5pc2ggY2xlYW5p bmcgdGhlbSB1cCAqLwotCWlmIChwZW5kaW5nX2VudHJpZXMpCisJaWYgKHBlbmRpbmdfZW50cmll cyB8fCBjYW5jZWxfcmVxdWVzdGVkKQogCXsKLQkJQXNzZXJ0KGV2ZW50ID09IFhBQ1RfRVZFTlRf UEFSQUxMRUxfUFJFX0NPTU1JVCB8fAotCQkJICAgZXZlbnQgPT0gWEFDVF9FVkVOVF9QUkVfQ09N TUlUKTsKLQkJcGdmZHdfZmluaXNoX3ByZV9jb21taXRfY2xlYW51cChwZW5kaW5nX2VudHJpZXMp OworCQlpZiAoZXZlbnQgPT0gWEFDVF9FVkVOVF9QQVJBTExFTF9QUkVfQ09NTUlUIHx8CisJCQll dmVudCA9PSBYQUNUX0VWRU5UX1BSRV9DT01NSVQpCisJCXsKKwkJCUFzc2VydChjYW5jZWxfcmVx dWVzdGVkID09IE5JTCk7CisJCQlwZ2Zkd19maW5pc2hfcHJlX2NvbW1pdF9jbGVhbnVwKHBlbmRp bmdfZW50cmllcyk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlBc3NlcnQoZXZlbnQgPT0gWEFDVF9F VkVOVF9QQVJBTExFTF9BQk9SVCB8fAorCQkJCSAgIGV2ZW50ID09IFhBQ1RfRVZFTlRfQUJPUlQp OworCQkJcGdmZHdfZmluaXNoX2Fib3J0X2NsZWFudXAocGVuZGluZ19lbnRyaWVzLCBjYW5jZWxf cmVxdWVzdGVkLAorCQkJCQkJCQkJICAgdHJ1ZSk7CisJCX0KIAl9CiAKIAkvKgpAQCAtMTA2NSw2 ICsxMTAwLDcgQEAgcGdmZHdfc3VieGFjdF9jYWxsYmFjayhTdWJYYWN0RXZlbnQgZXZlbnQsIFN1 YlRyYW5zYWN0aW9uSWQgbXlTdWJpZCwKIAlDb25uQ2FjaGVFbnRyeSAqZW50cnk7CiAJaW50CQkJ Y3VybGV2ZWw7CiAJTGlzdAkgICAqcGVuZGluZ19lbnRyaWVzID0gTklMOworCUxpc3QJICAgKmNh bmNlbF9yZXF1ZXN0ZWQgPSBOSUw7CiAKIAkvKiBOb3RoaW5nIHRvIGRvIGF0IHN1YnhhY3Qgc3Rh cnQsIG5vciBhZnRlciBjb21taXQuICovCiAJaWYgKCEoZXZlbnQgPT0gU1VCWEFDVF9FVkVOVF9Q UkVfQ09NTUlUX1NVQiB8fApAQCAtMTExOSw3ICsxMTU1LDE1IEBAIHBnZmR3X3N1YnhhY3RfY2Fs bGJhY2soU3ViWGFjdEV2ZW50IGV2ZW50LCBTdWJUcmFuc2FjdGlvbklkIG15U3ViaWQsCiAJCWVs c2UKIAkJewogCQkJLyogUm9sbGJhY2sgYWxsIHJlbW90ZSBzdWJ0cmFuc2FjdGlvbnMgZHVyaW5n IGFib3J0ICovCi0JCQlwZ2Zkd19hYm9ydF9jbGVhbnVwKGVudHJ5LCBmYWxzZSk7CisJCQlpZiAo ZW50cnktPnBhcmFsbGVsX2Fib3J0KQorCQkJeworCQkJCWlmIChwZ2Zkd19hYm9ydF9jbGVhbnVw X2JlZ2luKGVudHJ5LCBmYWxzZSwKKwkJCQkJCQkJCQkJICAmcGVuZGluZ19lbnRyaWVzLAorCQkJ CQkJCQkJCQkgICZjYW5jZWxfcmVxdWVzdGVkKSkKKwkJCQkJY29udGludWU7CisJCQl9CisJCQll bHNlCisJCQkJcGdmZHdfYWJvcnRfY2xlYW51cChlbnRyeSwgZmFsc2UpOwogCQl9CiAKIAkJLyog T0ssIHdlJ3JlIG91dHRhIHRoYXQgbGV2ZWwgb2Ygc3VidHJhbnNhY3Rpb24gKi8KQEAgLTExMjcs MTAgKzExNzEsMTkgQEAgcGdmZHdfc3VieGFjdF9jYWxsYmFjayhTdWJYYWN0RXZlbnQgZXZlbnQs IFN1YlRyYW5zYWN0aW9uSWQgbXlTdWJpZCwKIAl9CiAKIAkvKiBJZiB0aGVyZSBhcmUgYW55IHBl bmRpbmcgY29ubmVjdGlvbnMsIGZpbmlzaCBjbGVhbmluZyB0aGVtIHVwICovCi0JaWYgKHBlbmRp bmdfZW50cmllcykKKwlpZiAocGVuZGluZ19lbnRyaWVzIHx8IGNhbmNlbF9yZXF1ZXN0ZWQpCiAJ ewotCQlBc3NlcnQoZXZlbnQgPT0gU1VCWEFDVF9FVkVOVF9QUkVfQ09NTUlUX1NVQik7Ci0JCXBn ZmR3X2ZpbmlzaF9wcmVfc3ViY29tbWl0X2NsZWFudXAocGVuZGluZ19lbnRyaWVzKTsKKwkJaWYg KGV2ZW50ID09IFNVQlhBQ1RfRVZFTlRfUFJFX0NPTU1JVF9TVUIpCisJCXsKKwkJCUFzc2VydChj YW5jZWxfcmVxdWVzdGVkID09IE5JTCk7CisJCQlwZ2Zkd19maW5pc2hfcHJlX3N1YmNvbW1pdF9j bGVhbnVwKHBlbmRpbmdfZW50cmllcyk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlBc3NlcnQoZXZl bnQgPT0gU1VCWEFDVF9FVkVOVF9BQk9SVF9TVUIpOworCQkJcGdmZHdfZmluaXNoX2Fib3J0X2Ns ZWFudXAocGVuZGluZ19lbnRyaWVzLCBjYW5jZWxfcmVxdWVzdGVkLAorCQkJCQkJCQkJICAgZmFs c2UpOworCQl9CiAJfQogfQogCkBAIC0xMjc0LDExICsxMzI3LDcgQEAgcGdmZHdfcmVzZXRfeGFj dF9zdGF0ZShDb25uQ2FjaGVFbnRyeSAqZW50cnksIGJvb2wgdG9wbGV2ZWwpCiBzdGF0aWMgYm9v bAogcGdmZHdfY2FuY2VsX3F1ZXJ5KFBHY29ubiAqY29ubikKIHsKLQlQR2NhbmNlbCAgICpjYW5j ZWw7Ci0JY2hhcgkJZXJyYnVmWzI1Nl07Ci0JUEdyZXN1bHQgICAqcmVzdWx0ID0gTlVMTDsKIAlU aW1lc3RhbXBUeiBlbmR0aW1lOwotCWJvb2wJCXRpbWVkX291dDsKIAogCS8qCiAJICogSWYgaXQg dGFrZXMgdG9vIGxvbmcgdG8gY2FuY2VsIHRoZSBxdWVyeSBhbmQgZGlzY2FyZCB0aGUgcmVzdWx0 LCBhc3N1bWUKQEAgLTEyODYsNiArMTMzNSwxNyBAQCBwZ2Zkd19jYW5jZWxfcXVlcnkoUEdjb25u ICpjb25uKQogCSAqLwogCWVuZHRpbWUgPSBUaW1lc3RhbXBUelBsdXNNaWxsaXNlY29uZHMoR2V0 Q3VycmVudFRpbWVzdGFtcCgpLCAzMDAwMCk7CiAKKwlpZiAoIXBnZmR3X2NhbmNlbF9xdWVyeV9i ZWdpbihjb25uKSkKKwkJcmV0dXJuIGZhbHNlOworCXJldHVybiBwZ2Zkd19jYW5jZWxfcXVlcnlf ZW5kKGNvbm4sIGVuZHRpbWUpOworfQorCitzdGF0aWMgYm9vbAorcGdmZHdfY2FuY2VsX3F1ZXJ5 X2JlZ2luKFBHY29ubiAqY29ubikKK3sKKwlQR2NhbmNlbCAgICpjYW5jZWw7CisJY2hhcgkJZXJy YnVmWzI1Nl07CisKIAkvKgogCSAqIElzc3VlIGNhbmNlbCByZXF1ZXN0LiAgVW5mb3J0dW5hdGVs eSwgdGhlcmUncyBubyBnb29kIHdheSB0byBsaW1pdCB0aGUKIAkgKiBhbW91bnQgb2YgdGltZSB0 aGF0IHdlIG1pZ2h0IGJsb2NrIGluc2lkZSBQUWdldENhbmNlbCgpLgpAQCAtMTMwNCw2ICsxMzY0 LDE1IEBAIHBnZmR3X2NhbmNlbF9xdWVyeShQR2Nvbm4gKmNvbm4pCiAJCVBRZnJlZUNhbmNlbChj YW5jZWwpOwogCX0KIAorCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbAorcGdmZHdfY2Fu Y2VsX3F1ZXJ5X2VuZChQR2Nvbm4gKmNvbm4sIFRpbWVzdGFtcFR6IGVuZHRpbWUpCit7CisJUEdy ZXN1bHQgICAqcmVzdWx0ID0gTlVMTDsKKwlib29sCQl0aW1lZF9vdXQ7CisKIAkvKiBHZXQgYW5k IGRpc2NhcmQgdGhlIHJlc3VsdCBvZiB0aGUgcXVlcnkuICovCiAJaWYgKHBnZmR3X2dldF9jbGVh bnVwX3Jlc3VsdChjb25uLCBlbmR0aW1lLCAmcmVzdWx0LCAmdGltZWRfb3V0KSkKIAl7CkBAIC0x MzM4LDkgKzE0MDcsNyBAQCBwZ2Zkd19jYW5jZWxfcXVlcnkoUEdjb25uICpjb25uKQogc3RhdGlj IGJvb2wKIHBnZmR3X2V4ZWNfY2xlYW51cF9xdWVyeShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIg KnF1ZXJ5LCBib29sIGlnbm9yZV9lcnJvcnMpCiB7Ci0JUEdyZXN1bHQgICAqcmVzdWx0ID0gTlVM TDsKIAlUaW1lc3RhbXBUeiBlbmR0aW1lOwotCWJvb2wJCXRpbWVkX291dDsKIAogCS8qCiAJICog SWYgaXQgdGFrZXMgdG9vIGxvbmcgdG8gZXhlY3V0ZSBhIGNsZWFudXAgcXVlcnksIGFzc3VtZSB0 aGUgY29ubmVjdGlvbgpAQCAtMTM1MCw2ICsxNDE3LDE0IEBAIHBnZmR3X2V4ZWNfY2xlYW51cF9x dWVyeShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5LCBib29sIGlnbm9yZV9lcnJvcnMp CiAJICovCiAJZW5kdGltZSA9IFRpbWVzdGFtcFR6UGx1c01pbGxpc2Vjb25kcyhHZXRDdXJyZW50 VGltZXN0YW1wKCksIDMwMDAwKTsKIAorCWlmICghcGdmZHdfZXhlY19jbGVhbnVwX3F1ZXJ5X2Jl Z2luKGNvbm4sIHF1ZXJ5KSkKKwkJcmV0dXJuIGZhbHNlOworCXJldHVybiBwZ2Zkd19leGVjX2Ns ZWFudXBfcXVlcnlfZW5kKGNvbm4sIHF1ZXJ5LCBpZ25vcmVfZXJyb3JzLCBlbmR0aW1lKTsKK30K Kworc3RhdGljIGJvb2wKK3BnZmR3X2V4ZWNfY2xlYW51cF9xdWVyeV9iZWdpbihQR2Nvbm4gKmNv bm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KQorewogCS8qCiAJICogU3VibWl0IGEgcXVlcnkuICBTaW5j ZSB3ZSBkb24ndCB1c2Ugbm9uLWJsb2NraW5nIG1vZGUsIHRoaXMgYWxzbyBjYW4KIAkgKiBibG9j ay4gIEJ1dCBpdHMgcmlzayBpcyByZWxhdGl2ZWx5IHNtYWxsLCBzbyB3ZSBpZ25vcmUgdGhhdCBm b3Igbm93LgpAQCAtMTM2MCw2ICsxNDM1LDE2IEBAIHBnZmR3X2V4ZWNfY2xlYW51cF9xdWVyeShQ R2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5LCBib29sIGlnbm9yZV9lcnJvcnMpCiAJCXJl dHVybiBmYWxzZTsKIAl9CiAKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wKK3BnZmR3 X2V4ZWNfY2xlYW51cF9xdWVyeV9lbmQoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSwK KwkJCQkJCQkgYm9vbCBpZ25vcmVfZXJyb3JzLCBUaW1lc3RhbXBUeiBlbmR0aW1lKQoreworCVBH cmVzdWx0ICAgKnJlc3VsdCA9IE5VTEw7CisJYm9vbAkJdGltZWRfb3V0OworCiAJLyogR2V0IHRo ZSByZXN1bHQgb2YgdGhlIHF1ZXJ5LiAqLwogCWlmIChwZ2Zkd19nZXRfY2xlYW51cF9yZXN1bHQo Y29ubiwgZW5kdGltZSwgJnJlc3VsdCwgJnRpbWVkX291dCkpCiAJewpAQCAtMTU0NCw2ICsxNjI5 LDU2IEBAIHBnZmR3X2Fib3J0X2NsZWFudXAoQ29ubkNhY2hlRW50cnkgKmVudHJ5LCBib29sIHRv cGxldmVsKQogCWVudHJ5LT5jaGFuZ2luZ194YWN0X3N0YXRlID0gZmFsc2U7CiB9CiAKK3N0YXRp YyBib29sCitwZ2Zkd19hYm9ydF9jbGVhbnVwX2JlZ2luKENvbm5DYWNoZUVudHJ5ICplbnRyeSwg Ym9vbCB0b3BsZXZlbCwKKwkJCQkJCSAgTGlzdCAqKnBlbmRpbmdfZW50cmllcywgTGlzdCAqKmNh bmNlbF9yZXF1ZXN0ZWQpCit7CisJLyoKKwkgKiBEb24ndCB0cnkgdG8gY2xlYW4gdXAgdGhlIGNv bm5lY3Rpb24gaWYgd2UncmUgYWxyZWFkeSBpbiBlcnJvcgorCSAqIHJlY3Vyc2lvbiB0cm91Ymxl LgorCSAqLworCWlmIChpbl9lcnJvcl9yZWN1cnNpb25fdHJvdWJsZSgpKQorCQllbnRyeS0+Y2hh bmdpbmdfeGFjdF9zdGF0ZSA9IHRydWU7CisKKwkvKgorCSAqIElmIGNvbm5lY3Rpb24gaXMgYWxy ZWFkeSB1bnNhbHZhZ2VhYmxlLCBkb24ndCB0b3VjaCBpdCBmdXJ0aGVyLgorCSAqLworCWlmIChl bnRyeS0+Y2hhbmdpbmdfeGFjdF9zdGF0ZSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBN YXJrIHRoaXMgY29ubmVjdGlvbiBhcyBpbiB0aGUgcHJvY2VzcyBvZiBjaGFuZ2luZyB0cmFuc2Fj dGlvbiBzdGF0ZS4KKwkgKi8KKwllbnRyeS0+Y2hhbmdpbmdfeGFjdF9zdGF0ZSA9IHRydWU7CisK KwkvKiBBc3N1bWUgd2UgbWlnaHQgaGF2ZSBsb3N0IHRyYWNrIG9mIHByZXBhcmVkIHN0YXRlbWVu dHMgKi8KKwllbnRyeS0+aGF2ZV9lcnJvciA9IHRydWU7CisKKwkvKgorCSAqIElmIGEgY29tbWFu ZCBoYXMgYmVlbiBzdWJtaXR0ZWQgdG8gdGhlIHJlbW90ZSBzZXJ2ZXIgYnkgdXNpbmcgYW4KKwkg KiBhc3luY2hyb25vdXMgZXhlY3V0aW9uIGZ1bmN0aW9uLCB0aGUgY29tbWFuZCBtaWdodCBub3Qg aGF2ZSB5ZXQKKwkgKiBjb21wbGV0ZWQuICBDaGVjayB0byBzZWUgaWYgYSBjb21tYW5kIGlzIHN0 aWxsIGJlaW5nIHByb2Nlc3NlZCBieSB0aGUKKwkgKiByZW1vdGUgc2VydmVyLCBhbmQgaWYgc28s IHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIHRoZSBjb21tYW5kLgorCSAqLworCWlmIChQUXRyYW5z YWN0aW9uU3RhdHVzKGVudHJ5LT5jb25uKSA9PSBQUVRSQU5TX0FDVElWRSkKKwl7CisJCWlmICgh cGdmZHdfY2FuY2VsX3F1ZXJ5X2JlZ2luKGVudHJ5LT5jb25uKSkKKwkJCXJldHVybiBmYWxzZTsJ CS8qIFVuYWJsZSB0byBjYW5jZWwgcnVubmluZyBxdWVyeSAqLworCQkqY2FuY2VsX3JlcXVlc3Rl ZCA9IGxhcHBlbmQoKmNhbmNlbF9yZXF1ZXN0ZWQsIGVudHJ5KTsKKwl9CisJZWxzZQorCXsKKwkJ Y2hhcgkJc3FsWzEwMF07CisKKwkJQ09OU1RSVUNUX0FCT1JUX0NPTU1BTkQoc3FsLCBlbnRyeSwg dG9wbGV2ZWwpOworCQlpZiAoIXBnZmR3X2V4ZWNfY2xlYW51cF9xdWVyeV9iZWdpbihlbnRyeS0+ Y29ubiwgc3FsKSkKKwkJCXJldHVybiBmYWxzZTsJCS8qIFVuYWJsZSB0byBhYm9ydCByZW1vdGUg dHJhbnNhY3Rpb24gKi8KKwkJKnBlbmRpbmdfZW50cmllcyA9IGxhcHBlbmQoKnBlbmRpbmdfZW50 cmllcywgZW50cnkpOworCX0KKworCXJldHVybiB0cnVlOworfQorCiAvKgogICogRmluaXNoIHBy ZS1jb21taXQgY2xlYW51cCBvZiBjb25uZWN0aW9ucyBvbiB3aGljaCB3ZSBoYXZlIHNlbnQgYSBD T01NSVQKICAqIGNvbW1hbmQuCkBAIC0xNjU0LDYgKzE3ODksMTU5IEBAIHBnZmR3X2ZpbmlzaF9w cmVfc3ViY29tbWl0X2NsZWFudXAoTGlzdCAqcGVuZGluZ19lbnRyaWVzKQogCX0KIH0KIAorLyoK KyAqIEZpbmlzaCAoc3ViKWFib3J0IGNsZWFudXAgb2YgY29ubmVjdGlvbnMgb24gd2hpY2ggd2Ug aGF2ZSBzZW50IGEgKHN1YilhYm9ydAorICogY29tbWFuZCBvciBjYW5jZWwgcmVxdWVzdC4KKyAq Lworc3RhdGljIHZvaWQKK3BnZmR3X2ZpbmlzaF9hYm9ydF9jbGVhbnVwKExpc3QgKnBlbmRpbmdf ZW50cmllcywgTGlzdCAqY2FuY2VsX3JlcXVlc3RlZCwKKwkJCQkJCSAgIGJvb2wgdG9wbGV2ZWwp Cit7CisJTGlzdAkgICAqcGVuZGluZ19kZWFsbG9jcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpsYzsK KworCWlmIChjYW5jZWxfcmVxdWVzdGVkKQorCXsKKwkJZm9yZWFjaChsYywgY2FuY2VsX3JlcXVl c3RlZCkKKwkJeworCQkJQ29ubkNhY2hlRW50cnkgKmVudHJ5ID0gKENvbm5DYWNoZUVudHJ5ICop IGxmaXJzdChsYyk7CisJCQlUaW1lc3RhbXBUeiBlbmR0aW1lOworCQkJY2hhcgkJc3FsWzEwMF07 CisKKwkJCUFzc2VydChlbnRyeS0+Y2hhbmdpbmdfeGFjdF9zdGF0ZSk7CisKKwkJCS8qCisJCQkg KiBTZXQgZW5kIHRpbWUuICBZb3UgbWlnaHQgdGhpbmsgd2Ugc2hvdWxkIGRvIHNvIGJlZm9yZSBp c3N1aW5nCisJCQkgKiBjYW5jZWwgcmVxdWVzdCBsaWtlIGluIG5vcm1hbCBtb2RlLCBidXQgdGhh dCBpcyBwcm9ibGVtYXRpYywKKwkJCSAqIGJlY2F1c2UgaWYsIGZvciBleGFtcGxlLCBpdCB0b29r IGxvbmdlciB0aGFuIDMwIHNlY29uZHMgdG8KKwkJCSAqIHByb2Nlc3MgdGhlIGZpcnN0IGZldyBl bnRyaWVzIGluIHRoZSBjYW5jZWxfcmVxdWVzdGVkIGxpc3QsIGl0CisJCQkgKiB3b3VsZCBjYXVz ZSBhIHRpbWVvdXQgZm9yIGVhY2ggb2YgdGhlIHJlbWFpbmluZyBlbnRyaWVzIGluIHRoZQorCQkJ ICogbGlzdCB3aGVuIHByb2Nlc3NpbmcgaXQsIGxlYWRpbmcgdG8gc2xhbW1pbmcgdGhlIGNvbm5l Y3Rpb24gb2YKKwkJCSAqIGl0IHNodXQuCisJCQkgKi8KKwkJCWVuZHRpbWUgPSBUaW1lc3RhbXBU elBsdXNNaWxsaXNlY29uZHMoR2V0Q3VycmVudFRpbWVzdGFtcCgpLAorCQkJCQkJCQkJCQkJICAz MDAwMCk7CisKKwkJCS8qIEdldCBhbmQgZGlzY2FyZCB0aGUgcmVzdWx0IG9mIHRoZSBxdWVyeS4g Ki8KKwkJCWlmICghcGdmZHdfY2FuY2VsX3F1ZXJ5X2VuZChlbnRyeS0+Y29ubiwgZW5kdGltZSkp CisJCQl7CisJCQkJLyogVW5hYmxlIHRvIGNhbmNlbCBydW5uaW5nIHF1ZXJ5ICovCisJCQkJcGdm ZHdfcmVzZXRfeGFjdF9zdGF0ZShlbnRyeSwgdG9wbGV2ZWwpOworCQkJCWNvbnRpbnVlOworCQkJ fQorCisJCQlDT05TVFJVQ1RfQUJPUlRfQ09NTUFORChzcWwsIGVudHJ5LCB0b3BsZXZlbCk7CisJ CQlpZiAoIXBnZmR3X2V4ZWNfY2xlYW51cF9xdWVyeV9iZWdpbihlbnRyeS0+Y29ubiwgc3FsKSkK KwkJCXsKKwkJCQkvKiBVbmFibGUgdG8gYWJvcnQgcmVtb3RlIChzdWIpdHJhbnNhY3Rpb24gKi8K KwkJCQlwZ2Zkd19yZXNldF94YWN0X3N0YXRlKGVudHJ5LCB0b3BsZXZlbCk7CisJCQl9CisJCQll bHNlCisJCQkJcGVuZGluZ19lbnRyaWVzID0gbGFwcGVuZChwZW5kaW5nX2VudHJpZXMsIGVudHJ5 KTsKKwkJfQorCX0KKworCWlmICghcGVuZGluZ19lbnRyaWVzKQorCQlyZXR1cm47CisKKwlmb3Jl YWNoKGxjLCBwZW5kaW5nX2VudHJpZXMpCisJeworCQlDb25uQ2FjaGVFbnRyeSAqZW50cnkgPSAo Q29ubkNhY2hlRW50cnkgKikgbGZpcnN0KGxjKTsKKwkJVGltZXN0YW1wVHogZW5kdGltZTsKKwkJ Y2hhcgkJc3FsWzEwMF07CisKKwkJQXNzZXJ0KGVudHJ5LT5jaGFuZ2luZ194YWN0X3N0YXRlKTsK KworCQkvKgorCQkgKiBTZXQgZW5kIHRpbWUuICBXZSBkbyB0aGlzIG5vdywgbm90IGJlZm9yZSBp c3N1aW5nIHRoZSBjb21tYW5kIGxpa2UKKwkJICogaW4gbm9ybWFsIG1vZGUsIGZvciB0aGUgc2Ft ZSByZWFzb24gYXMgZm9yIHRoZSBjYW5jZWxfcmVxdWVzdGVkCisJCSAqIGVudHJpZXMuCisJCSAq LworCQllbmR0aW1lID0gVGltZXN0YW1wVHpQbHVzTWlsbGlzZWNvbmRzKEdldEN1cnJlbnRUaW1l c3RhbXAoKSwgMzAwMDApOworCisJCS8qIEdldCB0aGUgcmVzdWx0IG9mIHRoZSBjb21tYW5kLiAq LworCQlDT05TVFJVQ1RfQUJPUlRfQ09NTUFORChzcWwsIGVudHJ5LCB0b3BsZXZlbCk7CisJCWlm ICghcGdmZHdfZXhlY19jbGVhbnVwX3F1ZXJ5X2VuZChlbnRyeS0+Y29ubiwgc3FsLCBmYWxzZSwg ZW5kdGltZSkpCisJCXsKKwkJCS8qIFVuYWJsZSB0byBhYm9ydCByZW1vdGUgKHN1Yil0cmFuc2Fj dGlvbiAqLworCQkJcGdmZHdfcmVzZXRfeGFjdF9zdGF0ZShlbnRyeSwgdG9wbGV2ZWwpOworCQkJ Y29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBJZiBjYWxsZWQgZm9yIGNsZWFudXAgYXQgbWFp bi10cmFuc2FjdGlvbiBlbmQsIGRvIGEgREVBTExPQ0FURSBBTEwKKwkJICogaWYgbmVlZGVkLgor CQkgKi8KKwkJaWYgKHRvcGxldmVsKQorCQl7CisJCQlpZiAoZW50cnktPmhhdmVfcHJlcF9zdG10 ICYmIGVudHJ5LT5oYXZlX2Vycm9yKQorCQkJeworCQkJCWlmICghcGdmZHdfZXhlY19jbGVhbnVw X3F1ZXJ5X2JlZ2luKGVudHJ5LT5jb25uLAorCQkJCQkJCQkJCQkJCSJERUFMTE9DQVRFIEFMTCIp KQorCQkJCXsKKwkJCQkJLyogVHJvdWJsZSBjbGVhcmluZyBwcmVwYXJlZCBzdGF0ZW1lbnRzICov CisJCQkJCXBnZmR3X3Jlc2V0X3hhY3Rfc3RhdGUoZW50cnksIHRvcGxldmVsKTsKKwkJCQl9CisJ CQkJZWxzZQorCQkJCQlwZW5kaW5nX2RlYWxsb2NzID0gbGFwcGVuZChwZW5kaW5nX2RlYWxsb2Nz LCBlbnRyeSk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWVudHJ5LT5oYXZlX3ByZXBfc3Rt dCA9IGZhbHNlOworCQkJZW50cnktPmhhdmVfZXJyb3IgPSBmYWxzZTsKKwkJfQorCisJCS8qIFJl c2V0IHRoZSBwZXItY29ubmVjdGlvbiBzdGF0ZSBpZiBuZWVkZWQgKi8KKwkJaWYgKGVudHJ5LT5z dGF0ZS5wZW5kaW5nQXJlcSkKKwkJCW1lbXNldCgmZW50cnktPnN0YXRlLCAwLCBzaXplb2YoZW50 cnktPnN0YXRlKSk7CisKKwkJLyogV2UncmUgZG9uZSB3aXRoIHRoaXMgZW50cnk7IHVuc2V0IHRo ZSBjaGFuZ2luZ194YWN0X3N0YXRlIGZsYWcgKi8KKwkJZW50cnktPmNoYW5naW5nX3hhY3Rfc3Rh dGUgPSBmYWxzZTsKKwkJcGdmZHdfcmVzZXRfeGFjdF9zdGF0ZShlbnRyeSwgdG9wbGV2ZWwpOwor CX0KKworCWlmICghcGVuZGluZ19kZWFsbG9jcykKKwkJcmV0dXJuOworCUFzc2VydCh0b3BsZXZl bCk7CisKKwlmb3JlYWNoKGxjLCBwZW5kaW5nX2RlYWxsb2NzKQorCXsKKwkJQ29ubkNhY2hlRW50 cnkgKmVudHJ5ID0gKENvbm5DYWNoZUVudHJ5ICopIGxmaXJzdChsYyk7CisJCVRpbWVzdGFtcFR6 IGVuZHRpbWU7CisKKwkJQXNzZXJ0KGVudHJ5LT5jaGFuZ2luZ194YWN0X3N0YXRlKTsKKwkJQXNz ZXJ0KGVudHJ5LT5oYXZlX3ByZXBfc3RtdCk7CisJCUFzc2VydChlbnRyeS0+aGF2ZV9lcnJvcik7 CisKKwkJLyoKKwkJICogU2V0IGVuZCB0aW1lLiAgV2UgZG8gdGhpcyBub3csIG5vdCBiZWZvcmUg aXNzdWluZyB0aGUgY29tbWFuZCBsaWtlCisJCSAqIGluIG5vcm1hbCBtb2RlLCBmb3IgdGhlIHNh bWUgcmVhc29uIGFzIGZvciB0aGUgY2FuY2VsX3JlcXVlc3RlZAorCQkgKiBlbnRyaWVzLgorCQkg Ki8KKwkJZW5kdGltZSA9IFRpbWVzdGFtcFR6UGx1c01pbGxpc2Vjb25kcyhHZXRDdXJyZW50VGlt ZXN0YW1wKCksIDMwMDAwKTsKKworCQkvKiBHZXQgdGhlIHJlc3VsdCBvZiB0aGUgY29tbWFuZC4g Ki8KKwkJaWYgKCFwZ2Zkd19leGVjX2NsZWFudXBfcXVlcnlfZW5kKGVudHJ5LT5jb25uLCAiREVB TExPQ0FURSBBTEwiLAorCQkJCQkJCQkJCSAgdHJ1ZSwgZW5kdGltZSkpCisJCXsKKwkJCS8qIFRy b3VibGUgY2xlYXJpbmcgcHJlcGFyZWQgc3RhdGVtZW50cyAqLworCQkJcGdmZHdfcmVzZXRfeGFj dF9zdGF0ZShlbnRyeSwgdG9wbGV2ZWwpOworCQkJY29udGludWU7CisJCX0KKworCQllbnRyeS0+ aGF2ZV9wcmVwX3N0bXQgPSBmYWxzZTsKKwkJZW50cnktPmhhdmVfZXJyb3IgPSBmYWxzZTsKKwor CQkvKiBSZXNldCB0aGUgcGVyLWNvbm5lY3Rpb24gc3RhdGUgaWYgbmVlZGVkICovCisJCWlmIChl bnRyeS0+c3RhdGUucGVuZGluZ0FyZXEpCisJCQltZW1zZXQoJmVudHJ5LT5zdGF0ZSwgMCwgc2l6 ZW9mKGVudHJ5LT5zdGF0ZSkpOworCisJCS8qIFdlJ3JlIGRvbmUgd2l0aCB0aGlzIGVudHJ5OyB1 bnNldCB0aGUgY2hhbmdpbmdfeGFjdF9zdGF0ZSBmbGFnICovCisJCWVudHJ5LT5jaGFuZ2luZ194 YWN0X3N0YXRlID0gZmFsc2U7CisJCXBnZmR3X3Jlc2V0X3hhY3Rfc3RhdGUoZW50cnksIHRvcGxl dmVsKTsKKwl9Cit9CisKIC8qCiAgKiBMaXN0IGFjdGl2ZSBmb3JlaWduIHNlcnZlciBjb25uZWN0 aW9ucy4KICAqCmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0 Z3Jlc19mZHcub3V0IGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3 Lm91dAppbmRleCA4MDQzYjIwN2M1Li4yYWRiMGFjMTI1IDEwMDY0NAotLS0gYS9jb250cmliL3Bv c3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CisrKyBiL2NvbnRyaWIvcG9zdGdy ZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQKQEAgLTk1MDksNyArOTUwOSw3IEBAIERP ICRkJAogICAgIEVORDsKICRkJDsKIEVSUk9SOiAgaW52YWxpZCBvcHRpb24gInBhc3N3b3JkIgot SElOVDogIFZhbGlkIG9wdGlvbnMgaW4gdGhpcyBjb250ZXh0IGFyZTogc2VydmljZSwgcGFzc2Zp bGUsIGNoYW5uZWxfYmluZGluZywgY29ubmVjdF90aW1lb3V0LCBkYm5hbWUsIGhvc3QsIGhvc3Rh ZGRyLCBwb3J0LCBvcHRpb25zLCBhcHBsaWNhdGlvbl9uYW1lLCBrZWVwYWxpdmVzLCBrZWVwYWxp dmVzX2lkbGUsIGtlZXBhbGl2ZXNfaW50ZXJ2YWwsIGtlZXBhbGl2ZXNfY291bnQsIHRjcF91c2Vy X3RpbWVvdXQsIHNzbG1vZGUsIHNzbGNvbXByZXNzaW9uLCBzc2xjZXJ0LCBzc2xrZXksIHNzbHJv b3RjZXJ0LCBzc2xjcmwsIHNzbGNybGRpciwgc3Nsc25pLCByZXF1aXJlcGVlciwgc3NsX21pbl9w cm90b2NvbF92ZXJzaW9uLCBzc2xfbWF4X3Byb3RvY29sX3ZlcnNpb24sIGdzc2VuY21vZGUsIGty YnNydm5hbWUsIGdzc2xpYiwgdGFyZ2V0X3Nlc3Npb25fYXR0cnMsIHVzZV9yZW1vdGVfZXN0aW1h dGUsIGZkd19zdGFydHVwX2Nvc3QsIGZkd190dXBsZV9jb3N0LCBleHRlbnNpb25zLCB1cGRhdGFi bGUsIHRydW5jYXRhYmxlLCBmZXRjaF9zaXplLCBiYXRjaF9zaXplLCBhc3luY19jYXBhYmxlLCBw YXJhbGxlbF9jb21taXQsIGtlZXBfY29ubmVjdGlvbnMKK0hJTlQ6ICBWYWxpZCBvcHRpb25zIGlu IHRoaXMgY29udGV4dCBhcmU6IHNlcnZpY2UsIHBhc3NmaWxlLCBjaGFubmVsX2JpbmRpbmcsIGNv bm5lY3RfdGltZW91dCwgZGJuYW1lLCBob3N0LCBob3N0YWRkciwgcG9ydCwgb3B0aW9ucywgYXBw bGljYXRpb25fbmFtZSwga2VlcGFsaXZlcywga2VlcGFsaXZlc19pZGxlLCBrZWVwYWxpdmVzX2lu dGVydmFsLCBrZWVwYWxpdmVzX2NvdW50LCB0Y3BfdXNlcl90aW1lb3V0LCBzc2xtb2RlLCBzc2xj b21wcmVzc2lvbiwgc3NsY2VydCwgc3Nsa2V5LCBzc2xyb290Y2VydCwgc3NsY3JsLCBzc2xjcmxk aXIsIHNzbHNuaSwgcmVxdWlyZXBlZXIsIHNzbF9taW5fcHJvdG9jb2xfdmVyc2lvbiwgc3NsX21h eF9wcm90b2NvbF92ZXJzaW9uLCBnc3NlbmNtb2RlLCBrcmJzcnZuYW1lLCBnc3NsaWIsIHRhcmdl dF9zZXNzaW9uX2F0dHJzLCB1c2VfcmVtb3RlX2VzdGltYXRlLCBmZHdfc3RhcnR1cF9jb3N0LCBm ZHdfdHVwbGVfY29zdCwgZXh0ZW5zaW9ucywgdXBkYXRhYmxlLCB0cnVuY2F0YWJsZSwgZmV0Y2hf c2l6ZSwgYmF0Y2hfc2l6ZSwgYXN5bmNfY2FwYWJsZSwgcGFyYWxsZWxfY29tbWl0LCBwYXJhbGxl bF9hYm9ydCwga2VlcF9jb25uZWN0aW9ucwogQ09OVEVYVDogIFNRTCBzdGF0ZW1lbnQgIkFMVEVS IFNFUlZFUiBsb29wYmFja19ub3B3IE9QVElPTlMgKEFERCBwYXNzd29yZCAnZHVtbXlwdycpIgog UEwvcGdTUUwgZnVuY3Rpb24gaW5saW5lX2NvZGVfYmxvY2sgbGluZSAzIGF0IEVYRUNVVEUKIC0t IElmIHdlIGFkZCBhIHBhc3N3b3JkIGZvciBvdXIgdXNlciBtYXBwaW5nIGluc3RlYWQsIHdlIHNo b3VsZCBnZXQgYSBkaWZmZXJlbnQKQEAgLTEwOTE0LDEwICsxMDkxNCwxMiBAQCBTRUxFQ1QgcGdf dGVybWluYXRlX2JhY2tlbmQocGlkLCAxODAwMDApIEZST00gcGdfc3RhdF9hY3Rpdml0eQogUkVT RVQgcG9zdGdyZXNfZmR3LmFwcGxpY2F0aW9uX25hbWU7CiBSRVNFVCBkZWJ1Z19kaXNjYXJkX2Nh Y2hlczsKIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tIHRlc3QgcGFyYWxsZWwgY29tbWl0CistLSB0ZXN0IHBh cmFsbGVsIGNvbW1pdCBhbmQgcGFyYWxsZWwgYWJvcnQKIC0tID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIEFMVEVSIFNF UlZFUiBsb29wYmFjayBPUFRJT05TIChBREQgcGFyYWxsZWxfY29tbWl0ICd0cnVlJyk7CitBTFRF UiBTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAoQUREIHBhcmFsbGVsX2Fib3J0ICd0cnVlJyk7CiBB TFRFUiBTRVJWRVIgbG9vcGJhY2syIE9QVElPTlMgKEFERCBwYXJhbGxlbF9jb21taXQgJ3RydWUn KTsKK0FMVEVSIFNFUlZFUiBsb29wYmFjazIgT1BUSU9OUyAoQUREIHBhcmFsbGVsX2Fib3J0ICd0 cnVlJyk7CiBDUkVBVEUgVEFCTEUgcGxvYzEgKGYxIGludCwgZjIgdGV4dCk7CiBDUkVBVEUgRk9S RUlHTiBUQUJMRSBwcmVtMSAoZjEgaW50LCBmMiB0ZXh0KQogICBTRVJWRVIgbG9vcGJhY2sgT1BU SU9OUyAodGFibGVfbmFtZSAncGxvYzEnKTsKQEAgLTEwOTg3LDUgKzEwOTg5LDUyIEBAIFNFTEVD VCAqIEZST00gcHJlbTI7CiAgMjA0IHwgcXV4cXV4CiAoMyByb3dzKQogCitCRUdJTjsKK0lOU0VS VCBJTlRPIHByZW0xIFZBTFVFUyAoMTA1LCAndGVzdDEnKTsKK0lOU0VSVCBJTlRPIHByZW0yIFZB TFVFUyAoMjA1LCAndGVzdDInKTsKK0FCT1JUOworU0VMRUNUICogRlJPTSBwcmVtMTsKKyBmMSAg fCAgIGYyICAgCistLS0tLSstLS0tLS0tLQorIDEwMSB8IGZvbworIDEwMiB8IGZvb2ZvbworIDEw NCB8IGJhemJhegorKDMgcm93cykKKworU0VMRUNUICogRlJPTSBwcmVtMjsKKyBmMSAgfCAgIGYy ICAgCistLS0tLSstLS0tLS0tLQorIDIwMSB8IGJhcgorIDIwMiB8IGJhcmJhcgorIDIwNCB8IHF1 eHF1eAorKDMgcm93cykKKworQkVHSU47CitTQVZFUE9JTlQgczsKK0lOU0VSVCBJTlRPIHByZW0x IFZBTFVFUyAoMTA1LCAndGVzdDEnKTsKK0lOU0VSVCBJTlRPIHByZW0yIFZBTFVFUyAoMjA1LCAn dGVzdDInKTsKK1JPTExCQUNLIFRPIFNBVkVQT0lOVCBzOworUkVMRUFTRSBTQVZFUE9JTlQgczsK K0lOU0VSVCBJTlRPIHByZW0xIFZBTFVFUyAoMTA1LCAndGVzdDEnKTsKK0lOU0VSVCBJTlRPIHBy ZW0yIFZBTFVFUyAoMjA1LCAndGVzdDInKTsKK0FCT1JUOworU0VMRUNUICogRlJPTSBwcmVtMTsK KyBmMSAgfCAgIGYyICAgCistLS0tLSstLS0tLS0tLQorIDEwMSB8IGZvbworIDEwMiB8IGZvb2Zv bworIDEwNCB8IGJhemJhegorKDMgcm93cykKKworU0VMRUNUICogRlJPTSBwcmVtMjsKKyBmMSAg fCAgIGYyICAgCistLS0tLSstLS0tLS0tLQorIDIwMSB8IGJhcgorIDIwMiB8IGJhcmJhcgorIDIw NCB8IHF1eHF1eAorKDMgcm93cykKKwogQUxURVIgU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKERS T1AgcGFyYWxsZWxfY29tbWl0KTsKK0FMVEVSIFNFUlZFUiBsb29wYmFjayBPUFRJT05TIChEUk9Q IHBhcmFsbGVsX2Fib3J0KTsKIEFMVEVSIFNFUlZFUiBsb29wYmFjazIgT1BUSU9OUyAoRFJPUCBw YXJhbGxlbF9jb21taXQpOworQUxURVIgU0VSVkVSIGxvb3BiYWNrMiBPUFRJT05TIChEUk9QIHBh cmFsbGVsX2Fib3J0KTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L29wdGlvbi5j IGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvb3B0aW9uLmMKaW5kZXggYTA5YzBiNmRiNy4uZThjOGI0 YWIzNiAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvb3B0aW9uLmMKKysrIGIvY29u dHJpYi9wb3N0Z3Jlc19mZHcvb3B0aW9uLmMKQEAgLTEyMiw2ICsxMjIsNyBAQCBwb3N0Z3Jlc19m ZHdfdmFsaWRhdG9yKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQlzdHJjbXAoZGVmLT5kZWZuYW1lLCAi dHJ1bmNhdGFibGUiKSA9PSAwIHx8CiAJCQlzdHJjbXAoZGVmLT5kZWZuYW1lLCAiYXN5bmNfY2Fw YWJsZSIpID09IDAgfHwKIAkJCXN0cmNtcChkZWYtPmRlZm5hbWUsICJwYXJhbGxlbF9jb21taXQi KSA9PSAwIHx8CisJCQlzdHJjbXAoZGVmLT5kZWZuYW1lLCAicGFyYWxsZWxfYWJvcnQiKSA9PSAw IHx8CiAJCQlzdHJjbXAoZGVmLT5kZWZuYW1lLCAia2VlcF9jb25uZWN0aW9ucyIpID09IDApCiAJ CXsKIAkJCS8qIHRoZXNlIGFjY2VwdCBvbmx5IGJvb2xlYW4gdmFsdWVzICovCkBAIC0yNTEsNiAr MjUyLDcgQEAgSW5pdFBnRmR3T3B0aW9ucyh2b2lkKQogCQl7ImFzeW5jX2NhcGFibGUiLCBGb3Jl aWduU2VydmVyUmVsYXRpb25JZCwgZmFsc2V9LAogCQl7ImFzeW5jX2NhcGFibGUiLCBGb3JlaWdu VGFibGVSZWxhdGlvbklkLCBmYWxzZX0sCiAJCXsicGFyYWxsZWxfY29tbWl0IiwgRm9yZWlnblNl cnZlclJlbGF0aW9uSWQsIGZhbHNlfSwKKwkJeyJwYXJhbGxlbF9hYm9ydCIsIEZvcmVpZ25TZXJ2 ZXJSZWxhdGlvbklkLCBmYWxzZX0sCiAJCXsia2VlcF9jb25uZWN0aW9ucyIsIEZvcmVpZ25TZXJ2 ZXJSZWxhdGlvbklkLCBmYWxzZX0sCiAJCXsicGFzc3dvcmRfcmVxdWlyZWQiLCBVc2VyTWFwcGlu Z1JlbGF0aW9uSWQsIGZhbHNlfSwKIApkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcv c3FsL3Bvc3RncmVzX2Zkdy5zcWwgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNf ZmR3LnNxbAppbmRleCAyZGM2Mzg2YjQwLi41OGVjODBmYWQ3IDEwMDY0NAotLS0gYS9jb250cmli L3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbAorKysgYi9jb250cmliL3Bvc3RncmVz X2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbApAQCAtMzUwNiwxMCArMzUwNiwxMiBAQCBSRVNFVCBw b3N0Z3Jlc19mZHcuYXBwbGljYXRpb25fbmFtZTsKIFJFU0VUIGRlYnVnX2Rpc2NhcmRfY2FjaGVz OwogCiAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLSB0ZXN0IHBhcmFsbGVsIGNvbW1pdAorLS0gdGVzdCBwYXJh bGxlbCBjb21taXQgYW5kIHBhcmFsbGVsIGFib3J0CiAtLSA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiBBTFRFUiBTRVJW RVIgbG9vcGJhY2sgT1BUSU9OUyAoQUREIHBhcmFsbGVsX2NvbW1pdCAndHJ1ZScpOworQUxURVIg U0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKEFERCBwYXJhbGxlbF9hYm9ydCAndHJ1ZScpOwogQUxU RVIgU0VSVkVSIGxvb3BiYWNrMiBPUFRJT05TIChBREQgcGFyYWxsZWxfY29tbWl0ICd0cnVlJyk7 CitBTFRFUiBTRVJWRVIgbG9vcGJhY2syIE9QVElPTlMgKEFERCBwYXJhbGxlbF9hYm9ydCAndHJ1 ZScpOwogCiBDUkVBVEUgVEFCTEUgcGxvYzEgKGYxIGludCwgZjIgdGV4dCk7CiBDUkVBVEUgRk9S RUlHTiBUQUJMRSBwcmVtMSAoZjEgaW50LCBmMiB0ZXh0KQpAQCAtMzU0OCw1ICszNTUwLDI2IEBA IENPTU1JVDsKIFNFTEVDVCAqIEZST00gcHJlbTE7CiBTRUxFQ1QgKiBGUk9NIHByZW0yOwogCitC RUdJTjsKK0lOU0VSVCBJTlRPIHByZW0xIFZBTFVFUyAoMTA1LCAndGVzdDEnKTsKK0lOU0VSVCBJ TlRPIHByZW0yIFZBTFVFUyAoMjA1LCAndGVzdDInKTsKK0FCT1JUOworU0VMRUNUICogRlJPTSBw cmVtMTsKK1NFTEVDVCAqIEZST00gcHJlbTI7CisKK0JFR0lOOworU0FWRVBPSU5UIHM7CitJTlNF UlQgSU5UTyBwcmVtMSBWQUxVRVMgKDEwNSwgJ3Rlc3QxJyk7CitJTlNFUlQgSU5UTyBwcmVtMiBW QUxVRVMgKDIwNSwgJ3Rlc3QyJyk7CitST0xMQkFDSyBUTyBTQVZFUE9JTlQgczsKK1JFTEVBU0Ug U0FWRVBPSU5UIHM7CitJTlNFUlQgSU5UTyBwcmVtMSBWQUxVRVMgKDEwNSwgJ3Rlc3QxJyk7CitJ TlNFUlQgSU5UTyBwcmVtMiBWQUxVRVMgKDIwNSwgJ3Rlc3QyJyk7CitBQk9SVDsKK1NFTEVDVCAq IEZST00gcHJlbTE7CitTRUxFQ1QgKiBGUk9NIHByZW0yOworCiBBTFRFUiBTRVJWRVIgbG9vcGJh Y2sgT1BUSU9OUyAoRFJPUCBwYXJhbGxlbF9jb21taXQpOworQUxURVIgU0VSVkVSIGxvb3BiYWNr IE9QVElPTlMgKERST1AgcGFyYWxsZWxfYWJvcnQpOwogQUxURVIgU0VSVkVSIGxvb3BiYWNrMiBP UFRJT05TIChEUk9QIHBhcmFsbGVsX2NvbW1pdCk7CitBTFRFUiBTRVJWRVIgbG9vcGJhY2syIE9Q VElPTlMgKERST1AgcGFyYWxsZWxfYWJvcnQpOwpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3Bv c3RncmVzLWZkdy5zZ21sIGIvZG9jL3NyYy9zZ21sL3Bvc3RncmVzLWZkdy5zZ21sCmluZGV4IDIz OGUyZjg0YTYuLjE5NmUwYTk4NmMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9wb3N0Z3Jlcy1m ZHcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcG9zdGdyZXMtZmR3LnNnbWwKQEAgLTQ2MCwxMCAr NDYwLDEwIEBAIE9QVElPTlMgKEFERCBwYXNzd29yZF9yZXF1aXJlZCAnZmFsc2UnKTsKIAogICAg PHBhcmE+CiAgICAgV2hlbiBtdWx0aXBsZSByZW1vdGUgKHN1Yil0cmFuc2FjdGlvbnMgYXJlIGlu dm9sdmVkIGluIGEgbG9jYWwKLSAgICAoc3ViKXRyYW5zYWN0aW9uLCBieSBkZWZhdWx0IDxmaWxl bmFtZT5wb3N0Z3Jlc19mZHc8L2ZpbGVuYW1lPiBjb21taXRzCi0gICAgdGhvc2UgcmVtb3RlIChz dWIpdHJhbnNhY3Rpb25zIG9uZSBieSBvbmUgd2hlbiB0aGUgbG9jYWwgKHN1Yil0cmFuc2FjdGlv bgotICAgIGNvbW1pdHMuCi0gICAgUGVyZm9ybWFuY2UgY2FuIGJlIGltcHJvdmVkIHdpdGggdGhl IGZvbGxvd2luZyBvcHRpb246CisgICAgKHN1Yil0cmFuc2FjdGlvbiwgYnkgZGVmYXVsdCA8Zmls ZW5hbWU+cG9zdGdyZXNfZmR3PC9maWxlbmFtZT4gY29tbWl0cyBvcgorICAgIGFib3J0cyB0aG9z ZSByZW1vdGUgKHN1Yil0cmFuc2FjdGlvbnMgb25lIGJ5IG9uZSB3aGVuIHRoZSBsb2NhbAorICAg IChzdWIpdHJhbnNhY3Rpb24gY29tbWl0cyBvciBhYm9ydHMuCisgICAgUGVyZm9ybWFuY2UgY2Fu IGJlIGltcHJvdmVkIHdpdGggdGhlIGZvbGxvd2luZyBvcHRpb25zOgogICAgPC9wYXJhPgogCiAg ICA8dmFyaWFibGVsaXN0PgpAQCAtNDc4LDI3ICs0NzgsNDAgQEAgT1BUSU9OUyAoQUREIHBhc3N3 b3JkX3JlcXVpcmVkICdmYWxzZScpOwogICAgICAgIFRoaXMgb3B0aW9uIGNhbiBvbmx5IGJlIHNw ZWNpZmllZCBmb3IgZm9yZWlnbiBzZXJ2ZXJzLCBub3QgcGVyLXRhYmxlLgogICAgICAgIFRoZSBk ZWZhdWx0IGlzIDxsaXRlcmFsPmZhbHNlPC9saXRlcmFsPi4KICAgICAgIDwvcGFyYT4KKyAgICAg PC9saXN0aXRlbT4KKyAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgIDx2YXJsaXN0ZW50cnk+Cisg ICAgIDx0ZXJtPjxsaXRlcmFsPnBhcmFsbGVsX2Fib3J0PC9saXRlcmFsPiAoPHR5cGU+Ym9vbGVh bjwvdHlwZT4pPC90ZXJtPgorICAgICA8bGlzdGl0ZW0+CiAgICAgICA8cGFyYT4KLSAgICAgICBJ ZiBtdWx0aXBsZSBmb3JlaWduIHNlcnZlcnMgd2l0aCB0aGlzIG9wdGlvbiBlbmFibGVkIGFyZSBp bnZvbHZlZCBpbgotICAgICAgIGEgbG9jYWwgKHN1Yil0cmFuc2FjdGlvbiwgbXVsdGlwbGUgcmVt b3RlIChzdWIpdHJhbnNhY3Rpb25zIG9wZW5lZCBvbgotICAgICAgIHRob3NlIGZvcmVpZ24gc2Vy dmVycyBpbiB0aGUgbG9jYWwgKHN1Yil0cmFuc2FjdGlvbiBhcmUgY29tbWl0dGVkIGluCi0gICAg ICAgcGFyYWxsZWwgYWNyb3NzIHRob3NlIGZvcmVpZ24gc2VydmVycyB3aGVuIHRoZSBsb2NhbCAo c3ViKXRyYW5zYWN0aW9uCi0gICAgICAgY29tbWl0cy4KLSAgICAgIDwvcGFyYT4KLQotICAgICAg PHBhcmE+Ci0gICAgICAgRm9yIGEgZm9yZWlnbiBzZXJ2ZXIgd2l0aCB0aGlzIG9wdGlvbiBlbmFi bGVkLCBpZiBtYW55IHJlbW90ZQotICAgICAgIChzdWIpdHJhbnNhY3Rpb25zIGFyZSBvcGVuZWQg b24gdGhlIGZvcmVpZ24gc2VydmVyIGluIGEgbG9jYWwKLSAgICAgICAoc3ViKXRyYW5zYWN0aW9u LCB0aGlzIG9wdGlvbiBtaWdodCBpbmNyZWFzZSB0aGUgcmVtb3RlIHNlcnZlcuKAmXMgbG9hZAot ICAgICAgIHdoZW4gdGhlIGxvY2FsIChzdWIpdHJhbnNhY3Rpb24gY29tbWl0cywgc28gYmUgY2Fy ZWZ1bCB3aGVuIHVzaW5nIHRoaXMKLSAgICAgICBvcHRpb24uCisgICAgICAgVGhpcyBvcHRpb24g Y29udHJvbHMgd2hldGhlciA8ZmlsZW5hbWU+cG9zdGdyZXNfZmR3PC9maWxlbmFtZT4gYWJvcnRz CisgICAgICAgcmVtb3RlIChzdWIpdHJhbnNhY3Rpb25zIG9wZW5lZCBvbiBhIGZvcmVpZ24gc2Vy dmVyIGluIGEgbG9jYWwKKyAgICAgICAoc3ViKXRyYW5zYWN0aW9uIGluIHBhcmFsbGVsIHdoZW4g dGhlIGxvY2FsIChzdWIpdHJhbnNhY3Rpb24gYWJvcnRzLgorICAgICAgIFRoaXMgb3B0aW9uIGNh biBvbmx5IGJlIHNwZWNpZmllZCBmb3IgZm9yZWlnbiBzZXJ2ZXJzLCBub3QgcGVyLXRhYmxlLgor ICAgICAgIFRoZSBkZWZhdWx0IGlzIDxsaXRlcmFsPmZhbHNlPC9saXRlcmFsPi4KICAgICAgIDwv cGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgICA8L3Zhcmxpc3RlbnRyeT4KIAogICAgPC92YXJp YWJsZWxpc3Q+CiAKKyAgIDxwYXJhPgorICAgIElmIG11bHRpcGxlIGZvcmVpZ24gc2VydmVycyB3 aXRoIHRoZXNlIG9wdGlvbnMgZW5hYmxlZCBhcmUgaW52b2x2ZWQgaW4gYQorICAgIGxvY2FsIChz dWIpdHJhbnNhY3Rpb24sIG11bHRpcGxlIHJlbW90ZSAoc3ViKXRyYW5zYWN0aW9ucyBvcGVuZWQg b24gdGhvc2UKKyAgICBmb3JlaWduIHNlcnZlcnMgaW4gdGhlIGxvY2FsIChzdWIpdHJhbnNhY3Rp b24gYXJlIGNvbW1pdHRlZCBvciBhYm9ydGVkIGluCisgICAgcGFyYWxsZWwgYWNyb3NzIHRob3Nl IGZvcmVpZ24gc2VydmVycyB3aGVuIHRoZSBsb2NhbCAoc3ViKXRyYW5zYWN0aW9uCisgICAgY29t bWl0cyBvciBhYm9ydHMuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIEZvciBhIGZvcmVp Z24gc2VydmVyIHdpdGggdGhlc2Ugb3B0aW9ucyBlbmFibGVkLCBpZiBtYW55IHJlbW90ZQorICAg IChzdWIpdHJhbnNhY3Rpb25zIGFyZSBvcGVuZWQgb24gdGhlIGZvcmVpZ24gc2VydmVyIGluIGEg bG9jYWwKKyAgICAoc3ViKXRyYW5zYWN0aW9uLCB0aGVzZSBvcHRpb25zIG1pZ2h0IGluY3JlYXNl IHRoZSByZW1vdGUgc2VydmVy4oCZcyBsb2FkCisgICAgd2hlbiB0aGUgbG9jYWwgKHN1Yil0cmFu c2FjdGlvbiBjb21taXRzIG9yIGFib3J0cywgc28gYmUgY2FyZWZ1bCB3aGVuCisgICAgdXNpbmcg dGhlc2Ugb3B0aW9ucy4KKyAgIDwvcGFyYT4KKwogICA8L3NlY3QzPgogCiAgIDxzZWN0Mz4K --0000000000001bb8e105d7bda3bc--